home *** CD-ROM | disk | FTP | other *** search
/ High Voltage Shareware / high1.zip / high1 / DIR24 / MR2_161.ZIP / READ.ME < prev    next >
Text File  |  1993-12-02  |  78KB  |  1,595 lines

  1. MR/2 - A QWK Compatible Mail Reader for OS/2.  12/02/93
  2.  
  3. Copyright (c) 1992, Knight Writer Software Company.
  4. All rights reserved.
  5.  
  6. ===================================================================
  7.                           N O T I C E
  8. ===================================================================
  9. This IS a shareware package, and does require a registration fee if
  10. you choose to continue using it after 30 days.   The registration
  11. fee is currently $20 US.  Eventually, the product MAY have a
  12. "begging" screen with a key-file that will register the software
  13. and suppress it.  The more interest I get, the more likely I am to
  14. continue with improvements.
  15. ------------------------------------------------------------------
  16.  
  17. CONTACTING THE AUTHOR
  18. =====================
  19.  
  20. You  can contact me in a number  of ways.  Unfortunately, I can't
  21. provide a phone number at this time.
  22.  
  23. US Mail:       Nick Knight
  24.                1823 David Ave.
  25.                Parma, Ohio 44134
  26.  
  27. Fido netmail:  1:157/2 to "Nick Knight"
  28.  
  29. Internet:      User "Nick Knight", (nick.knight@pcohio.com)
  30.  
  31. Fido Echomail: Find the Fidonet OS2PRODSUPPORT conference.  I'm there.
  32.  
  33.                Echomail messages to  me in more general conferences are
  34.                discouraged, as keeping them "on  topic" and
  35.                interesting to the masses would be difficult.  I do
  36.                read OS2, OS2PROG, C_PLUSPLUS and DR DEBUG daily,
  37.                though.  OFFLINE echo also (deals with mail readers),
  38.                this might be THE place to ask public questions, eh?
  39.  
  40.                I recently have acquired access to a host of other
  41.                networks with OS/2 conferences.  These include RIME,
  42.                SmartNet, Uninet, Intelec, Nanonet, Racenet and some
  43.                others I can't remember.
  44.  
  45.                I also do poll the Fidnet OS2PRODSUPPORT echo.
  46.  
  47. Direct BBS:    Leave a message on the Nerd's Nook BBS (1:157/2) at (216)
  48.                356-1772, 356-1872 or 356-1431.  I check in here
  49.                multiple times a day.  I will also keep the most recent
  50.                copy of MR/2 posted here.  Other boards (non-local)
  51.                will get updates at my convenience.
  52.  
  53. **************************************************************************
  54. **************************************************************************
  55. **             NOTE:  Nerd's now supports an MR/2 conference            **
  56. **             and file area.  Conference #208 is dedicated to          **
  57. **             MR/2 support and files.  File area #45 contains          **
  58. **             MR/2-related files.  Any file uploaded into              **
  59. **             conference 208 will be placed in file area 45.           **
  60. **************************************************************************
  61. **************************************************************************
  62.  
  63.                Nerd's does support file requests (157/2 or 157/3)
  64.  
  65. Compuserve:    I check in here only when I have to.  Try mail to my
  66.                user ID  - 76066,1240, although this isn't the best
  67.                approach.
  68.  
  69.  
  70. ---------------------------------------------------
  71. ALSO READ:  MR2.DOC (v1.0) and MR2.HST (v1.0->v1.4)
  72. ---------------------------------------------------
  73.  
  74. Changes included in v1.61x
  75. --------------------------
  76.  
  77. o   INTERNAL:  Dlist class modified.  Added a "fmarked" flag.  Also added
  78.     methods is_marked(), mark(int) and mark_all(int).  Since this class is
  79.     a low-level building block used by *lots* of code, recompiled all source.
  80.  
  81. o   INTERNAL: Dlselect.cpp modified to start support of markable linked-list
  82.     displays.
  83.  
  84. o   'E' is now available from the message viewer to enter NEW messages w/o
  85.     having to return to the Packet menu.  The current conference will be
  86.     the default for the new message, but To and Subject remain blank.
  87.  
  88. o   INTERNAL: Modified the Event class once again.  My code to disable
  89.     and enable the event handler (for external editing) closed the event
  90.     semaphore, the opened it on enable.  This was unnecessary and could
  91.     cause problems with my multiple-instance logic.  Now, DosSemClose is
  92.     skipped, and semaphore need not be re-opened.
  93.  
  94. o   INTERNAL:  QWK class now uses a the unique semaphore internal ID set
  95.     by the event class.  This in an attempt to get multiple instances
  96.     running.
  97.  
  98. o   You may now specify the name of a unique MR2 sub directory to use
  99.     as the work directory right on the command line.  For example,
  100.     "MR2 /Wtmp$$$" will override the INI setting for work path and
  101.     create/use a "tmp$$$" sub directory for unpacking and reading the
  102.     QWK packet.  Another aid in what will eventually allow multiple
  103.     instances.
  104.  
  105. o   OK!  I was able to run 3 simultaneous copies of MR/2.  I ran three
  106.     windowed sessions and was able to (using OS/2's window menu) cut
  107.     and paste between them.  All that's *really* required is that
  108.     you specify a different work directory for each session using the
  109.     /Wpath command mentioned above.  I can see myself having either
  110.     "MR/2 - 2" and "MR/2 - 3" icons on the desktop or multiple command
  111.     files for when I need to reference other packets.  I was able to open
  112.     up two instances w/o specifying a work path, the second instance
  113.     after a packet was already open.  I was able to read the same packet
  114.     *in two different windows*, allowing me have two separate spots
  115.     visible at one time.  Exiting one occurence messed things up a bit,
  116.     as it deleted most of the unzipped work files.  I play with this
  117.     idea some more ... and I'll play with my own code to access the
  118.     clipboard in full-screen sessions.
  119.  
  120. o   Fixed a bug in No-packet entry.  If target conference was changed
  121.     BEFORE creating a reply, this conference would be forgotten and
  122.     the original conference would be defaulted on the AFTER pass.  Fixed.
  123.  
  124. o   Address book lookup failed to close the .adr file when tag was found.
  125.     Found this while trying to rewrite the .adr file.  Fixed.
  126.  
  127. o   Address book maintenance.  Add new or modify existing records from
  128.     the address book selection screen.  ALT-A to add, highlight an entry
  129.     and press ALT-C to change.  ALT-D to delete (confirms w/a prompt).
  130.     Text file is rewritten each time, previous version is copied to
  131.     bbsname.old or mr2.old, depending on which book is being modified.
  132.  
  133. o   NOTE:  Address book tags are resolved in a first-found order.  The
  134.     local address book, if one exists, is checked first.  If not found
  135.     there, the global MR2.ADR is checked.  If duplicates exist, only
  136.     the first one found (searching the file(s) sequantially) is the one
  137.     that's used.  Pick list selections go through the same process ... so
  138.     picking the "other" one doesn't matter.
  139.  
  140. o   I am now displaying both the packet name, BBS name AND the "logical"
  141.     conference name in two places on the message viewer.  I'm trying to
  142.     determine which spot I like more.  The bottom status line position
  143.     overwrites the old first-time-user help prompts.  This worries me,
  144.     which means I'd make it an INI toggle that defaults to the help
  145.     prompts.  The display in the middle of the divisor bar is "safe",
  146.     but it looks a tad cluttered to me.  Votes?
  147.  
  148. o   Rot13 support.  The internal editor will now rot13 a clock of
  149.     highlighted text.  Just press ALT-E (E for "Encrypt"?).  A block
  150.     must be highlighted, tho.  In the message viewer, ALT-E will rot13
  151.     the whole message.  Read the desired part and ALT-E to return the
  152.     message to normal viewing.  Replying to a message displayed in
  153.     rot13'd form is OK, the message buffer is only temporarily converted
  154.     and almost any action switches it back.
  155.  
  156. o   RemoveReplyBookmarks now defauls to YES.  I'm trying to remove the
  157.     problem of missing origin lines.  If it doesn't go away, I'll set
  158.     this back.  INI file can still override this ...
  159.  
  160. o   New INI parameter "FileViewer".  If you set FileViewer=List, for
  161.     example, you will invoke the command "List filename" whenever a
  162.     bulletin, news file or file list is selected for viewing.  OR,
  163.     specify your editor ("FileViewer=Q" in my case).  This eliminates
  164.     file size restraints withing my internal viewer (which I intend to
  165.     remove anyway).  It also allows more power ... it's a user's choice,
  166.     at least.
  167.  
  168. o   Listening to someone from a while ago ... I've taken a small amount
  169.     of time to encrypt and otherwise protect my copyright notice and banner.
  170.     It was reported that my reader was available in Hong Kong with another
  171.     name and copyright notice on it.  It won't be so easy to change this
  172.     information any more.  Users will notice no difference ... just FYI.
  173.  
  174. o   Spell checker crashing.  This was reported by two users, but I couldn't
  175.     get it to happen for me.  Luckily, one of the users was a coworker and
  176.     I was able to see it first hand on his machine.  Turns out the crash
  177.     occurs only if the reply starts with a quoted line.  Mine always start
  178.     with an attribution line ... "In a message dated ...".  I reworked the
  179.     quote-skipping logic within the spell checker (and eliminated another
  180.     bug at the same time).  I've tested with all forms of quoted lines that
  181.     I could think of an all seems to be in order.  I guess you'll tell me :).
  182.                                                                              
  183.  
  184. Changes included in v1.60x
  185. --------------------------
  186. NOTE:  Most versions from this point on until the end of the year will
  187. contain **lots** of new code.  For those that consider themselves
  188. less-than-adventurous, it might pay to stick with what you're using
  189. until all the new features shake out some.  Still, I *do* use MR/2 every
  190. day, so I have a great incentive for keeping it functional.
  191.  
  192. NOTE that all address book and dictionary logic is in development and
  193. subject to radical changes at any time.  Version numbers may not jump
  194. very fast, but these are all considered v2.0 features.  I consider every
  195. version released (in limited fashion only) from now until Jan 1st to
  196. be a v2.0 beta.
  197.  
  198. o   I removed the necessity to have a "String = " clause in a custom
  199.     conference definition.  It was pointed out that, if you could search
  200.     on "anything", you'd be able to build combined conference for easier
  201.     manual scanning.  Before, if you defined a conference with no search
  202.     criteria or a NULL string, nothing would match.  If you searched on
  203.     a space, it would work, but the highlighting was awful!  Now,
  204.     either include the clause "String =" (followed by a CR/LF) or leave
  205.     if out altogther, list a bunch of conference number to search, and
  206.     a combo-conference is built.
  207.  
  208. o   `NewRime` template section now available for "new" messages written
  209.     to an address-book target whose private mail section-type is `Rime`.
  210.     To add `NewRime` to your existing template file, simply add a
  211.     section in this format:
  212.  
  213.     ;---------------
  214.     `NewRime`
  215.     $Body
  216.     ->@RimeSiteNo@
  217.  
  218.     Your name here
  219.     ;----------------
  220.  
  221. o   Also, the NewInternet and NewNetmail sections should be changed.  The
  222.     routing lines (the very first lines of each section) should now match
  223.     the normal Internet and Netmail sections, respectively.
  224.  
  225. o   Address Book.  I've added the ability to record email addresses and
  226.     other pertainent information in a simple text file.  At this time
  227.     there is no way to add or maintain the address book other than via
  228.     direct text editor modifications.  I expect this to change.  See
  229.     example.adr for a starter kit/example file.  My email addresses
  230.     are pre-recorded here in various forms :)
  231.  
  232.     To access an address-book entry, you use the first field of the
  233.     record as the identifier or "tag".  When filling out the message
  234.     header information, enter a "!" followed by an existing address
  235.     book tag, tab or enter out of this field and the address book data
  236.     will be accessed and automatically applied.  For example, to send
  237.     an internet message to me (assuming you have a private internet
  238.     mail conference defined), simply type "!NK-I" as the TO user and
  239.     press ENTER.  Oh, you must first copy the file example.adr to
  240.     mr2.adr.  MR/2 looks for a BBSname.adr (e.g., "NERDNOOK.adr")
  241.     first, then "MR2.Adr" second, both in the MR/2 base directory.
  242.  
  243.     The format is:
  244.  
  245.     Tag | Description | TO name | Conference | Private? | Section | Address
  246.  
  247.     where:
  248.  
  249.     Tag is a short identifier you'll use to reference the address,
  250.  
  251.     Description is a free-form field to help you remember who/what this
  252.     address is for.
  253.  
  254.     To name is the name to plug into the TO; header field.
  255.  
  256.     Conference is the conference in which to place the message.  NOTE that
  257.     this is usually a specific number, but "I" is allowed and will be
  258.     replaced with the conference number set as your "Internet" conference.
  259.     Also, "N" is allowed and represents the defined Netmail conference.
  260.  
  261.     Private is either "Y" or "N", representing the privacy flag.
  262.  
  263.     Section identifies the template section to use.  Sometime this may
  264.     obviously be unnecessary, but it does allow for user-defined "special"
  265.     sections to be created and used for specific address book entries.
  266.     "Internet", "Netmail" and "Rime" will probably be used most frequently.
  267.     NOTE that "New" is automatically prepended by MR/2 when entering "new"
  268.     messages.
  269.  
  270.     Address is the first-line address code.  If the template section uses
  271.     the @Internet@, @Fidonet@ or either of the @Rime*@ variables, the
  272.     contents of these variables will be set to this string.
  273.  
  274.     NOTES:  There is no error checking or identification by BBS name, other
  275.     than allowing for BBS-specific address books.  MR2.Adr, if it exists,
  276.     is always references, but after any bbs-specific file has been checked.
  277.  
  278.     Use of the "N" and "I" conference identifiers helps make some addresses
  279.     less BBS-specific.  For example, I can send Fidonet netmail from any of
  280.     three separate BBS's.  My MR2.adr can contain netmail addresses for
  281.     use on all BBS's, as long as my template file(s) have been set up
  282.     correctly and private mail conferences have been identifies in the
  283.     BBS-specific INI's.  This can get complex - but it also can be quite
  284.     powerful and handy.
  285.  
  286. o   Not labeled as of yet on the Edit Header screen:  F6 calls up the
  287.     address book pick-list.  Contains BOTH bbs.adr and mr2.adr.
  288.  
  289. o   Internal dictionary available when using the INTERNAL editor.  You'll
  290.     need one of the two dictionary files available:
  291.  
  292.     MR2DICTL.ZIP (280k) - 120,000 words, 480K uncompressed
  293.     MR2DICTS.ZIP (128k) -  60,000 words, 248K uncompressed
  294.  
  295.     The spelling checker logic is fairly good.  The suggested word part
  296.     needs a little work.  You can add words to a "user" dictionary.  I'll
  297.     provide a utility later to manipulate dictionaries (add/delete words,
  298.     merge user dictionary, etc.,.).
  299.  
  300.     CTRL-F2 while editing a reply.  ESCAPE stops the speller in between
  301.     checks.  If a word is not found in either dictionary (base or user),
  302.     then you are given up to 10 suggested spellings.  You are allowed to
  303.     pick one of these, skip the word, ignore the word for the rest of the
  304.     time you are editing the current file, add the word to your user
  305.     dictionary, edit the word by hand, or stop the spelling check
  306.     procedure.  The mispelled word is highlighted, and the menus/pick
  307.     lists move to opposite sides of the display in an attempt to give you
  308.     an unobstructed view of the word "in context".
  309.  
  310.     QEdit users will notice the menu's look a bit familiar :).  It was
  311.     quite timely of Qedit to get me my v3.0 upgrade around the same
  312.     time as my dictionary thinking started ...
  313.  
  314.     MR2DICT.BIN is the dictionary used ... it must be in the MR/2 home
  315.     directory with MR2.EXE.  MR2USER.BIN is the user dictionary.  It will
  316.     be created whenever the first word is added to it.
  317.  
  318.     Due to the size of these dictionary files, the base dictionaries
  319.     themselves will remain separate zip files for distribution purposes.
  320.  
  321.     NOTE:  Dictionary is English-only; no support for hi-end ASCII
  322.     characters at all.  Sorry.
  323.  
  324.  
  325. Changes included in v1.57
  326. -------------------------
  327.  
  328. o   Changed the internal QWK initialization routine that matches NDX
  329.     files to master conference names.  Previously, the master conference
  330.     was sequentially searched until the number associated with the index
  331.     file (e.g., 1695 for "1695.NDX") was matched.  On a 3000 conference
  332.     BBS, this resulted in an average of 1500 checks before a match.  If
  333.     you had mail from 100 conferences ... yikes!  It took awhile,
  334.     although, in reality, it was only a matter of seconds.  The new
  335.     logic searches the master list once and a compressed easy/quick to
  336.     search array of conference numbers is searched to see if the master
  337.     name is needed.  If found, it is processed.  This makes things just a
  338.     tad more snappier.
  339.  
  340. o   Ooops.  It was pointed out to me today that sorting by message number
  341.     didn't work correctly.  I was using string compares, where message
  342.     number is left justified.  This means that message number "1000 "
  343.     would come *before* message "9    ".  WRONG!  Easy to fix - I now
  344.     convert to numbers and compare.
  345.  
  346. o   INTERNAL:  Event class now checks for errors when creating the event
  347.     semaphore.  If the named semaphore already exists, a new name is
  348.     created and another attempt is made.  This is to aid in running
  349.     multiple instances.  Also, a global variable is set with the final
  350.     "ID" used.  This is necessary when creating some of the other
  351.     control semaphores.
  352.  
  353. o   Mods made to logic that builds "Conferences w/Mail" list caused the
  354.     sort order to be alphabetical.  While this may be desirable to some,
  355.     I've become acustom to and still prefer the default "numerical" order
  356.     by conference number.  I'm the only one that saw this happen, but it
  357.     sure confused me.  I reworked the code a little more and got the "old"
  358.     sort order back.  I also managed to make it even more efficient in
  359.     the process :).
  360.  
  361. o   Someone noticed that when using NO PACKET ENTRY, the Inbasket was
  362.     inaccessible.  This has been corrected.
  363.  
  364. o   Internet private mail (replying).  While replying to various Usenet
  365.     messages via private Internet mail, I noticed MR/2 was leaving alot of
  366.     To: addresses blank (@INTERNET@ values not found, replaced with blanks).
  367.     The address was usually easy to find, on the first line identified
  368.     by the PC-Board "@From:" command.  MR/2 now extracts valid addresses
  369.     from these lines and can reply properly.
  370.  
  371.     NOTE:  I've heard from some users that their internet mail was
  372.     getting bounced because, when copied from the message header FROM
  373.     field, the address was in all upper case.  My upper-case addresses
  374.     seem to work, but there are several different qwk->internet systems
  375.     in use.  To be safe, I've modified the default template file to
  376.     convert internet addressed to lower case.  If you're using a
  377.     template file, and you'd like to do the same, simply find @INTERNET@
  378.     variable and change it to @LOWER@@INTERNET@.
  379.  
  380. o   Conference names containing hi-end ASCII characters were getting
  381.     truncated.  Switched to using unsigned characters and the problem is
  382.     now gone!
  383.  
  384. o   INTERNAL:  Small patch to GetMessageLine().  If pMessage is NULL,
  385.     this function instantly returns -1.  No packet entry into private mail
  386.     conferences crashed inside this function when templates were being
  387.     processed.
  388.  
  389. o   I had introduced a few bugs with no-packet entry.  There were various
  390.     cases where internal information was not correctly set and crashes
  391.     would occur.  Things seem to work much smoother now.
  392.  
  393. o   I received an Internet message just today about deferred messages and
  394.     how zeros seem to be mysteriously appearing.  I checked my inbasket
  395.     (remembering that I'd seen this happen before) and did some
  396.     experimenting.  Sure enough, one character of every message was
  397.     being changed; the most frequent occurence was a ' ' being changed to
  398.     a '0'.  I was marking the 'archived' bit (my personal invention) of
  399.     the message header, only I was changing the 127th byte of the actual
  400.     message, instead.  The archive bit is bit 16, which will change a ' '
  401.     to a '0', an 'a' to a 'q' and so on.  I now have moved this mark back
  402.     into the message header, where it belongs.  The "archived" indicator
  403.     that's supposed to be showing for folder messages will probably work
  404.     now, too.
  405.  
  406.  
  407. Changes included in v1.55 - v1.56
  408. ---------------------------------
  409.  
  410. o   Inbasket packing often left killed replies visable and available across
  411.     packets.  Fixed - killed messages will once again disappear the next
  412.     time the packet (and related inbasket) is closed.
  413.  
  414. o   Conversion of the master conference linked list to my new,
  415.     experimental "quick heap" routines.  I'm maintaining a separate heap
  416.     for memory needed for this linked list.  The list is freed in huge
  417.     chunks instead of 2 parts per conference name (i.e., PC-Ohio's 3000
  418.     conferences caused the old heap to have to free 6000 linked entries,
  419.     maintaining the "available block" information as each one is
  420.     released).  This *should* speed up the exiting of packets.  Deleting
  421.     the files is still a source for delay ... perhaps I can multithread
  422.     this and overlap things a bit.
  423.  
  424. o   Modified MR2UTIL.CPP - RemoveWorkFiles() routine.  You wouldn't
  425.     believe the amount of code I was executing to delete a packet's
  426.     files!  I was actually building a sorted linked list of file names
  427.     with details (sizes, dates, etc.,.), then immediately deleting each
  428.     file found in this list.  Now, this routine merely finds the "next"
  429.     file and removes it.  Results in a noticable speed up when exiting a
  430.     packet.  Between the above quick-heap mod, and this one, I think I've
  431.     licked this problem.  These changes are to the core QWK engine, so
  432.     they'll help both MR/2 and the PM version.
  433.  
  434. o   I've made all internal linked lists use the new QHEAP.  Should result
  435.     in improved "snappiness".  Also has big-bug potential.  I'll test
  436.     thoroughly before releasing.
  437.  
  438. o   Made some new routines for general use.  Includes a low-overhead
  439.     delete-by-wildcard routine and an "at least one file matching
  440.     this wildcard exists" function.  Minor performance improvements
  441.     should result, as the code scattered about in several places used
  442.     previously had high overhead.
  443.  
  444. o   Rewrote the bintree() class to use QHEAP.  Master conference
  445.     sorting should be faster for large conferences.  At least a tad ...
  446.  
  447.  
  448. Changes included in v1.54 - Limitted distribution
  449. -------------------------------------------------
  450.  
  451. o   Message Sort can now be defined in the INI as no order, Subject,
  452.     From or To.  The FROM and TO options are new.
  453.  
  454. o   NOTE that if you don't sort by subject but then ask for a quick
  455.     thread summary (by pressing Q), messages are sorted by subject from
  456.     that point on.  Previously, Q would just beep at you if SUBJECT was not
  457.     the specified message sort.
  458.  
  459. o   From the Message Index, ALT-O now allows you to change the message
  460.     sort on-the-fly.  You may select from a menu the option to
  461.     sort by NUMBER, SUBJECT, FROM USER or TO USER.  Once mesasges are
  462.     sorted, normal reading (e.g., ENTER for next) will give you the next
  463.     message in the NEW sort order.  Again, pressing Q resorts by
  464.     Subject ... this will probably change too, as I've got ideas :)
  465.  
  466. o   OK, the "Q" key has been changed once again.  I'm still trying to
  467.     figure out what the correct method should be.  Now, if you press the
  468.     Q key and message sorting is by subject, it works the same ... you
  469.     get the Quick Thread Summary list.  If you happen to be sorted by
  470.     FROM or TO user, you get a by-user summary.  If there is no sort or
  471.     message number sort and Q is pressed, the sort is changed to subject
  472.     and the thread summary is displayed.
  473.  
  474. o   I added a new function on the message reading screen triggered by
  475.     pressing the C key.  This is the "Copy" function.  It simply places
  476.     a copy of the current message in the reply conference, changes the
  477.     FROM user to your name and places the EDIT HEADER screen up.  Right
  478.     now you can copy any message to someone else and make it "from you";
  479.     not just your own replies.  This may change.  Copy loops for multiple
  480.     copies until your ESCAPE from the "next" message header edit.
  481.     I also plan to add a manner to copy to predefined distribution lists.
  482.  
  483. o   Forwarding messages:  If a `Forward` template section and accessed
  484.     message header information, this information would be copied from the
  485.     header AFTER the header editing process.  That meant that if you
  486.     changed the conference or subject, the changed data would be used.
  487.     This has been corrected to show correct original data.
  488.  
  489. o   When creating some types of new message where MR/2 defaulted the TO
  490.     user to blank, the cursor would be one character over.  This was a
  491.     bug in the internal EditHdr trim function.  Fixed.
  492.  
  493.  
  494. Changes included in v1.53
  495. -------------------------
  496.  
  497. o   Messages.Dat and mr2bm.bin would never get deleted from the tmp$$
  498.     directory when a packet was closed.  Just a minor flaw, but this did
  499.     waste some disk space when MR/2 was not in use.  Fixed.
  500.  
  501. o   When MR/2 builds it's own NDX files, it now opens the target index in
  502.     APPEND mode.  No biggy, except in playing around qith QWK merge logic,
  503.     I found that my QWK engine assumes all conference's message are
  504.     together.  This may or may not be true for most mail doors, but I
  505.     should be able to handle non-contiguous conference messages with out
  506.     breaking anything.
  507.  
  508. o   ALT-E to enter new messages w/o an existing packet failed to read and
  509.     configure based on the selected BBS's "local" INI.  The local INI is
  510.     now added to MR/2's configuration parameters when one for the selected
  511.     BBS is found.
  512.  
  513. o   New INI parameter "RemoveReplyBookmarks".  This is NO by default, but
  514.     may be set to YES if it is found that MR/2's bookmarks are interfering
  515.     with a networks routing or origin lines.  There was a problem on
  516.     ILink where someone's origin lines were not appended about 50% of the
  517.     time.  It was blamed on my use of the last byte of the message header
  518.     as a bookmark flag.  Setting this INI option to YES will cause MR/2
  519.     to replace any bookmak character at this position with a space (0x20).
  520.     You lose any bookmark information stored in this byte with this option,
  521.     but the bookmark flags saved with replies is minimal anyway.
  522.  
  523. o   Modified the confirmation button screen routines to accept the pressing
  524.     of a "k" or "K" to mean "keep" when prompting about existing replies.
  525.     For an "Ok/Cancel" choice, "o" or "O" means OK, and "Y" still works as
  526.     a positive response on all versions of this screen.
  527.  
  528. o   Reply splitting:  instead of "(Cont'd)" being attached to the subject
  529.     of a plit message, MR/2 now numbers each part and gives a total count.
  530.     The counters are placed at the far right of the subject space, so
  531.     subjects like "MR/2                  1/2".  This preserves as much of
  532.     the original subject as possible.  This also will assist in MR/2's
  533.     sorting of multiple part messages (when sorting by thread).
  534.  
  535. o   When a single piece of a split message is later modified, the last
  536.     line of that part would often be removed before entering the editor.
  537.     This has been corrected, although more changes to come might
  538.     render this fix useless ...
  539.  
  540. o   Save file selection screen now supports long file names.  I changed the
  541.     order of the display to place the file name last.  I don't like this
  542.     as much as when it's first, as you can't use keyboard chars to jump
  543.     to filename (i.e.,  pressing "M" no longer moves to the first M file).
  544.     I may play with trying to fit the long file name in front, maybe with
  545.     leader dots to line it up with the corresponding date/time and size.
  546.  
  547. o   Improved the long file name selection logic.  Moved the name back to
  548.     the front of each line so shortcut keys work again.  Selection box
  549.     expands to fit around longest name (I've set a max of 42 characters
  550.     for save file names ... at least it's better that 8 :).
  551.  
  552. o   Decision Button logic changed once again.  I like this even more.
  553.     Now, if the screen reads YES/NO, the only letters MR/2 responds to
  554.     are Y and N.  KEEP/DELETE recognize only K and D, and OK/CANCEL see
  555.     only O and C.  All other typing characters are ignored.  Also,
  556.     if you use the right arrow key, the right box is highlighted and
  557.     becomes the default when ENTER is pressed.  If you press left arrow,
  558.     the highlight moves back to the left box and this is again the ENTER
  559.     default selection.
  560.  
  561. o   Form filling logic changed somewhat.  Implemented the TAB key to
  562.     advance one field as the down arrow key does now.  Also implemented
  563.     SHIFT-TAB as a previous field key synonomous with the up arrow key.
  564.  
  565. o   Added the capability to split messages at a user defined point.
  566.     Used SLMR's ".pg" marker technique.  Start a line with ".pg" and
  567.     MR/2 will force a split at this position.
  568.  
  569. o   Made Fast Exit from the message viewer *really* fast!  Instead of
  570.     filtering back through all those nasty C++ destructers, I simply call
  571.     DOSExit after some simple cleanup.  Seems to work nicely even on
  572.     packets with a large number of conferences (~3000).  I'll spend some
  573.     watching for bugs ... I think I can multithread my freeing of many
  574.     internal structures and linked lists too.  (This is what takes MR/2
  575.     so long when closing a large packet w/lotsa conferences - all the
  576.     freeing of memory.  ZTC doesn't handle this very quickly ... I'll
  577.     try to help them some :).
  578.  
  579. o   If you specified a static, hard-coded tagline, then hit F2 to "pick"
  580.     a new tagline, MR/2 would crash.  Now it puts up a nicer "empty list"
  581.     message, although it still doesn't let you pick a new one :).
  582.  
  583.  
  584. Changes included in v1.52
  585. -------------------------
  586.  
  587. o   New variables for use with templates to allow random and user-selected
  588.     phrase insertion.  First, there must exist a text file containing a
  589.     list of possible phrases, one per line.  Then, the template file
  590.     must contain one of the following (assuming "phrases.phr" is the file
  591.     name and it resides in the MR/2 home directory.  Remember, when
  592.     replying, you're pathed into the TMP$$ sun directory):
  593.  
  594.         @SELECT:..\phrases.phr@
  595.         @RANDOM:..\phrases.phr@
  596.  
  597.     Select will build a list of te file's contents and display the
  598.     phrases in a selection box for you to pick from.  If you ESCAPE
  599.     from the selection w/o picking an entry, MR/2 will randomly select
  600.     one for you.  If you choose the RANDOM option, no user prompting is
  601.     performed;  MR/2 randomly selects one of the phrases to include.
  602.  
  603.     You may have multiple phrases per template line; as many as you want
  604.     in any given section.  They're processed one at a time.  Phrases may
  605.     even contain other @ variables, however, these variables are not
  606.     replaced with data until AFTER the phrase is selected.  Hmmm, I'll
  607.     have to test this, but there should be no reason a random phrase
  608.     couldn't reference another select/random phrase clause.  Ah, I'm
  609.     thinking too hard :)
  610.  
  611.     When you're selecting a phrase manually, the template line in
  612.     progress is displayed on the bottom "status" line of the screen.
  613.  
  614.     OK, how about an example?  Here's what I tested with in my template
  615.     file:
  616.  
  617.     ==================================================
  618.     On @MSGDATE@, @FROM@ @SELECT:..\SAID.PHR@ to @TO@:
  619.  
  620.     $BODY
  621.  
  622.     To which, @SELECT:..\TOD.PHR@, I reply:
  623.  
  624.     Nick
  625.     ====================================================
  626.  
  627.     The contents of the file "SAID.PHR" I used for testing was:
  628.  
  629.         said
  630.         spewed
  631.         bellowed
  632.         expounded
  633.         proclaimed
  634.         jabbered
  635.         mumbled
  636.  
  637.     and "TOD.PHR" contained:
  638.  
  639.         on this brisk morning
  640.         in the heat of the night
  641.         in a babbling frenzy
  642.         without a hint of intelligence
  643.  
  644.     all just jibberish to test with.  It works very nicely, tho.
  645.     The sysops will love me now!  BTW, I used a .PHR suffix to stand
  646.     for "phrases".  Phrases should be of a reasonable length (none
  647.     longer than 200 chars, for select, only 76 are usable).
  648.  
  649.     Please, let me know if you can think of any "colorful" extensions
  650.     to this idea! :)
  651.  
  652. o   ADD/DROP conference would not work if a DOOR.ID file was not present in
  653.     the packet.  I now default to QMAIL format in these cases, and create
  654.     QMAIL-style add/drop messages.
  655.  
  656. o   When you would modify a reply and change the header data, the index
  657.     list would not reflect these changes.  The "I"/Insert index list will
  658.     now accurately match reply header data.
  659.  
  660. o   Ooops.  "InBasket" Folder was not being packed.  In other words,
  661.     messages that were deferred, then later killed/deleted would still
  662.     be physically contained in the InBasket.Dat file.  They were marked
  663.     as inactive, so they couldn't be read.  Code to pack this file
  664.     has been reinstituted.
  665.  
  666. o   Double oops :)  FolderPath was never sufficiently documented as a
  667.     valid MR2.INI parameter.  It was metioned in the read.me file, but
  668.     was never entered into the MR2INI.ORG file.  It's there now, and ...
  669.  
  670. o   It never really worked, anyway.  It "kinda" worked, as it did
  671.     everything correctly except allow you to actually read deferred message
  672.     from anywhere except off of the MR2 home directory.
  673.  
  674. o   I just spent 3 days tracking and fixing a bug ... one that ends up I
  675.     put in just 5 days ago :).  In tracking this down, I did discover some
  676.     potential problems and even a memory leak with the Quick Thread
  677.     Selection screen logic.  These problems may have been the cause of some
  678.     of the rare/random reports of crashing I've received.  Well, at least
  679.     the memory leak is gone! (it was relatively minor)
  680.  
  681. o   In case you're just tuning in, MR/2, while an OS/2 app, still
  682.     "polls" the keyboard for input.  This is to ease mouse support. It's
  683.     technically possible to use semaphores and other OS/2 resources to
  684.     support both devices (kbd and mouse) w/o polling, and most OS/2-ers
  685.     will tell you this is the route to take.  Still, I could think of no
  686.     clean way of removing polling, short of spending a couple of weeks
  687.     and adding tons of code.  When I asked for suggestions in various
  688.     OS/2 programming conferences, it got fairly quiet. Zortech's default
  689.     libraries originally used a very tight polling loop.  MR/2 uses a
  690.     much friendlier loop, using calls to DOSSleep between every poll.
  691.  
  692.     I've increased the default sleep time from .30 seconds to .50
  693.     seconds.  Using PM SysInfo, my CPU showed 19% usage w/o MR/2 loaded.
  694.     At 30 ms delay, the meter showed 23%.  At 50 ms, it reads 21%.  I
  695.     investigated this in response to a reported problem where MR/2
  696.     allegedly hogged the CPU from a comm program (OS/2 hosted - HA5?).
  697.     I've never seen this myself ... MR/2 has never caused my system to
  698.     seem slow or impeeded my TE/2 use.  I'm in MR/2 more than anyone :),
  699.     and by default I'm using TE/2 probably more than the average user.
  700.  
  701.     Anyway, .50 seconds is the new default.  I'll probably make this
  702.     configurable for those that see a difference :).  I'm also planning
  703.     on playing with the background search thread priority now that OS/2
  704.     2.1 is out.  I'll see if the old IDLE thread bug still exists.
  705.  
  706. o   Modified the origin line find logic.  Original code, for some stupid
  707.     reason, started at the beginning of a message and search forward.  I
  708.     now start at the end and work backwards.  This will help prevent
  709.     erroneous detection of the origin when user-entered dashed lines are
  710.     entered as section separaters.
  711.  
  712.     In addition, I revamped the whole routine.  It seems to do a much
  713.     better job of finding the start of the origin section.
  714.  
  715. o   There was a problem on some systems with the personal conference not
  716.     showing in the selection list.  This was when working on an HPFS
  717.     drive, and the personal.ndx file was unpacked with a lower case file
  718.     name.  When MR/2 scanned conferences, it always matched on capital
  719.     letters for the personal index.  This was never a problem BEFORE
  720.     long name support, as the names always came back capitalized.  Now,
  721.     they come back as they are on disk.  I've fixed this problem and
  722.     scanned for other possibilities.  I think that was it ... time will
  723.     tell!   NOTE: The report I received that finally solved this one
  724.     specifically mentioned a 32-bit UNZIP.EXE.  He mentioned that all
  725.     worked OK with the -U switch added to the command line.  Just FYI.
  726.  
  727. o   Message Header Edit screen now allows you to enter conference numbers
  728.     that are not present within the control.dat master conference list.
  729.     Maximus QWK doors and PC Board's built-in QWK feature do not supply
  730.     complete conference lists.  Some QWK doors also make this optional to
  731.     reduce packet size.  Previously, you could not post into a conference
  732.     that was not defined in the contorl.dat file.  Now, you may manually
  733.     enter ANY number.  If MR/2 cannot find it in the master list, it will
  734.     beep and clearly identify the conference number as a possible problem
  735.     with the tag: "** WARNING: Unknown Conference **".  It's the user's
  736.     resposibility to make sure a message is posted to the correct
  737.     conference number.  Maybe I'll add a user-definable master list later.
  738.  
  739.  
  740. Changes included in v1.51
  741. -------------------------
  742.  
  743. o   RIME routed messages are now recognized as having a "header area" at
  744.     the top of the message.  If the message is "split" due to length,
  745.     the header area should be automically pasted into the top
  746.     of each part.
  747.  
  748. o   FILE_ID.DIZ files were crossed between classic and PM.  Fixed.
  749.  
  750. o   After a brief "vacation" <NOT!>, work is once again progressing :)
  751.  
  752. o   OK, I linked in HPFS longname support and modified some code to
  753.     retrieve and handle long file names.  The packet select screen
  754.     now shows TE/2-renamed files like "pc-ohio.qwk;1".  This will need
  755.     some testing and polish, but it works.  FileSpec in MR2.INI should
  756.     be changed to "*.q*" in order to see these files.
  757.  
  758. o   Ooops.  I couldn't find a PKUnzip that would work with long names.
  759.     Even the older OS/2 version puked.  This'll definitely be a problem
  760.     with other DOS based archivers.  So, I added a little diddy to
  761.     unqwk.cmd that, if a long name is detected, will copy the selected
  762.     file into the tmp$$ directory as MR2$TMP.QWK and unpack this.  It
  763.     then deletes the "temporary" QWK packet.  Works great with even
  764.     the DOS PKUnzip now!
  765.  
  766.     If you want to use TE/2 on a HPFS system and unpack the "BBS.QWK;1"
  767.     type names with a DOS or PK* product, you *must* set your unzipper
  768.     to unqwk.cmd.
  769.  
  770. o   Selecting an alternate conference using F4 from the Message Header
  771.     Edit screen was broken.  This has been fixed.
  772.  
  773. o   Packet path would get reset after every packet.  That meant that if
  774.     you used ALT-P to change to a different directory and opened a packet,
  775.     you'd lose that path when that packet was exited.  Packet path and
  776.     Video mode now are kept across packets
  777.  
  778. o   An MR/2 INI file other than MR2.INI may be specified via command line
  779.     parameter.  Use "MR2 /IMR2_ALT.INI" to use a file named MR2_ALT.INI as
  780.     the global MR/2 INI file.  I'm hoping that this helps in allowing
  781.     multiple instances of MR/2 to be open on the desktop.  Needs more
  782.     testing and experimentation ...  Opening two different MR/2 seesion
  783.     still crashes.
  784.  
  785.  
  786. Changes included in v1.50
  787. -------------------------
  788.  
  789. o   Read.me is now shifted around so that most recent changes (from now
  790.     on, at least) list at the top.  The old mr2.hst file that used to
  791.     house the list of modifications up to v1.00 (beta changes) is gone.
  792.     Mr2.hst now contains a list of changes from v1.00 up to v1.40.
  793.     This read.me file contains changes made in v1.40 and beyond.
  794.  
  795. o   Welcome and Goodbye screen now list on the Bulletins select menu.
  796.     You can view these, unobstructed and at length, any time you choose.
  797.  
  798. o   Minor change to the parsing of the @Fidonet@ variable.  Removed any
  799.     @fidonet suffix that exists in the origin line.
  800.  
  801. o   Ooops.  When using the internal editor, and editing mr2.ini, the
  802.     read clock string would pop onto every edit screen.  The clock display
  803.     is now suspended/resumed correctly.
  804.  
  805. o   Clock would still pop up if you would request HELP while inside the
  806.     editor, then CANCEL to clear the help screen.  Fixed.
  807.  
  808. o   ALT-W now "works" when inside the internal editor.  It will write the
  809.     entire file currently being edited, to another file named by you.
  810.     This does not change the original file's name.  It will overwrite any
  811.     existing file ... I guess there's an enhancement idea right there :)
  812.  
  813.     NOTE: The internal editor works similarly to the E and EPM editors
  814.     as far as CR/LF's go.  If you type in a long reply letting the
  815.     editor do the wrapping, there are not necessarily CR/LF's at the end
  816.     of every line.  These occur only where they previously occur, or
  817.     when you force a "hard return" by pressing ENTER.  MR/2's reply
  818.     saving logic places hard returns into the replies.  This means that
  819.     files that are created by using ALT-W *may* appear to be one long
  820.     line (or at least one long line per user-typed paragraph) when
  821.     viewed with another editor, printed, or typed to the screen.  If you
  822.     want to ALT-W write a reply with correct CR/LF placement, save the
  823.     reply AND THEN go into the reply conference and re-edit it.  Once it
  824.     has been saved, CR/LF's will be placed properly.  Let's see if this
  825.     causes a problem for anyone.
  826.  
  827.  
  828. Changes included in v1.48x
  829. --------------------------
  830.  
  831. o   Add/Drop - you can add or drop a conference via "door" command now.
  832.     Simply highlight a conference on the Conferences w/mail or the Write
  833.     New selection list.  Press ALT-A to add, ALT-D to drop, and confirm
  834.     the action.  Adding/Dropping a non-BBS conference (MR/2 created, for
  835.     example) does nothing.
  836.  
  837. o   Internal Editor:  cursor would not be visible in with screen displays
  838.     of 40 lines or more.  I was drawing the cursor, just too thin!  Now,
  839.     the cursor setting routine queries # lines and adjusts.
  840.  
  841. o   Modified the "no packets exist" screen to report the option of
  842.     pressing ALT-E to enter message to a known BBS even though no packets
  843.     exist.  Formatted the text on this screen a little better.
  844.  
  845. o   Added code to trim off nulls at end of any message.  Was trimming spaces,
  846.     but Internet messages sometimes had nulls.  Messes up the reply file
  847.     editing.  Also, if any embedded nulls are found, these *aren't* written
  848.     to the reply file OR save file.
  849.  
  850. o   Processing for IDATE improved a little.  I saw some DATE: lines that
  851.     started with weekday names like "Sun, ".
  852.  
  853. o   New INI parameter - ReplyStripTagline defaulting to YES.  Set it to NO
  854.     if you want to use SmartQuoting (which strips the original messages
  855.     tagline) but still want the tag quoted.
  856.  
  857. o   QuoteStyle now has an optional parameter, which is ON by default.
  858.     If you specify TagStyle=PCBoard,Autosense, you're saying that quote
  859.     style can use hi-end ASCII chars, but if it's a Fidonet reply,
  860.     change to Fidonet mode.  I'm not sure if I should include Internet
  861.     messages as Fido-typed tags ... I probably should.  I'll research.
  862.     Without the "Autosense" keyword, tag style will adhere strictly to
  863.     what's been specified.
  864.  
  865. o   NOTE: starting with the next release, this file will begin to list the
  866.     latest changes at the TOP of the file, with older revisions towards
  867.     the bottom.
  868.  
  869.  
  870. Changes included in v1.47x
  871. --------------------------
  872.  
  873. o   Added new Template file sections: SaveHeader and PrintHeader.  Lets
  874.     you define the header for messages when printed or saved.  If these
  875.     sections don't exist, the old default header is used.
  876.  
  877. o   Added more variables to aid in the support of the new header sections:
  878.     MsgRefNbr, MsgNumber, MsgStatus.  In addition, added some more variables
  879.     to aid in formatting sections.  @COL:45@ sets the next column to 45.
  880.     @RCOL:72@ says to right justify the next variable referenced at col 72.
  881.     @Center:40@ says to center the next variable referenced over column 40.
  882.     The @RCOL@ and @CENTER@ variables can be used w/o column specs to
  883.     right justify at "wrap column" or center the entire line between wrap
  884.     column and 1.
  885.  
  886.     Negative @COL@ specs may be supplied.  This will delete the specified
  887.     number of characters before the variable.  For example, @ITIME@@COL:-4@
  888.     would change 07:54:30 GMT to just 07:54:30.  Messes up, tho, if MSGDATE
  889.     ends up getting substituted for IDATE (no IDATE is found).
  890.  
  891.     See example.tf, at the end.  There's a section `unused` with some
  892.     doc/examples.
  893.  
  894. o   The template file now supports comment lines.  Simply start the line
  895.     (very first columns) with ";;" and the line is ignored.
  896.  
  897. o   Save message - if your "default" file in the INI has a "*" or a"?"
  898.     in the name, MR/2 shows the file selection list immediately upon
  899.     hitting the "S" to save.
  900.  
  901. o   MR/2 now will highlight all occurences of a search string within a
  902.     "hit" message.  This includes custom conferences, and soundex hits.
  903.     Soundex highlights may appear longer or shorter than the actual hit.
  904.     Since the length of these matches is variable, a "best-guess" is made.
  905.     Header area hits are highlighted also.  A multiple part search string
  906.     will cause ALL strings that have matched to be highlighted.  Color
  907.     defaults to yellow background, black letters, but ...
  908.  
  909. o   I added yet another 2-byte color combination to the end of my "archaic"
  910.     (as it's been referred to :) color specification.  Modify your INI
  911.     color line (example given):
  912.  
  913.         Colors=1E171E??
  914.  
  915.     replace the ?? with the two-digit color code for the HIGHLIGHT color to
  916.     use when displaying search result "hits".  The default, black on yellow,
  917.     would be specified as E0.
  918.  
  919.     If you don't like new the highlighted text, just define the highlight
  920.     color to be the same as normal text.  This will still show differently
  921.     in the header and quoted text sections ... let me know.
  922.  
  923. o   INTERNAL:  had to modify csoundex to return hit pointer.
  924.     check_for_string() now returns a point to a hit, and sets a global
  925.     length variable, __cfs_match_lgth.  ViewBuffer now has code to search
  926.     for match string(s) and hilite any/all found.
  927.     INI.cpp:  added another parse for new color possibility.
  928.  
  929. o   While viewing any message, you can press "~" to rewrap it.  This is
  930.     useful only in USENET (Internet) conferences where sometimes a message
  931.     gets posted without linefeeds.  MR/2 would display it on a single line,
  932.     but only give you access to the first 160 characters.  This rewrapping
  933.     is quite temporary (if you "go back" later to view the same message,
  934.     you'll have to rewrap it again), and totally manual; performed by user
  935.     keypress only.  I may INI-ize an automated/detection scheme later.
  936.  
  937. o   GetMessageLine:  added a new parameter, maxline_length.  This defaults
  938.     to 32000, but may be overridden.  Problem was with long usenet message
  939.     (no linefeeds), stacked string variable were getting overflowed.  This
  940.     becase apparent when searching for varibale values ... may exist in
  941.     other places.
  942.  
  943. o   Specified maxline_length on all calls to GetMessageLine() found in
  944.     MR2.cpp and MR2Util.cpp.
  945.  
  946. o   Added a bunch of code to better detect message display lines that are
  947.     "quotes" from previous messages.  This is not configurable at this time.
  948.     If I did too much, yell and I'll make this optional.  With all the
  949.     messages I looked at, quoting highlights were right 99% of the time.
  950.  
  951. o   New QuoteBody option - Paragraph.  If you specify something like:
  952.  
  953.         QuoteBody="%i│▌",Paragraph
  954.  
  955.     then you'll get a quotes like:
  956.  
  957.         MN│▌Yes-  DOS 6 upgrade is... (lines chopped for brevity)
  958.           │▌number of files that...
  959.  
  960.         MN│▌And then after your DOS...
  961.           │▌the manual of files you...
  962.           │▌release the whole thing...
  963.  
  964.        you can do the same thing with "%i>", and secondary lines
  965.        get just " >".  Use the "|" (shifted backslash) and Fidonet
  966.        sysops may not yell at you :)  (it's not hi-end ASCII).
  967.  
  968.     Bummer!  I just saw someone (a registered MR/2 user using a DOS
  969.     package, hmmmph!) quote with a technique that this doesn't yet
  970.     handle :(.  Just a minor nit, maybe I'll add something later to do
  971.     this (YOU CAN'T DO THIS WITH MR/2):
  972.  
  973.         MN┤Yes-  DOS 6 upgrade is... (lines chopped for brevity)
  974.           │number of files that...
  975.  
  976. o   Prewrapping still screws up.  I'll look at this tomorrow. :(
  977.     HA!  I had a problem where I saw too many lines as being "quoted".
  978.     Fixed this and text is flowing much nicer.  Time will tell.
  979.  
  980. o   Editor:  Hi-end ASCII (>127) is now available via the ALT-nnn (numeric
  981.     keypad entry).  Hi end characters that used to display with different
  982.     attributes now display correctly (normal text color).
  983.  
  984. o   Forms: ALT-nnn combinations can now be used to enter characters into
  985.     forms.  The Header Editing form will now accept these characters.
  986.     Still a problem ... display rountines aren't showing them ...
  987.     OK, fixed displays.  It was a trimming problem, hi-end ASCII getting
  988.     trimmed off the end as, when seen as signed chars, they're actually
  989.     LESS THAN a ' ' and would get trimmed.
  990.  
  991. o   Oops, old quote detect now also uses new "extended" quoted line
  992.     detection logic.
  993.  
  994.  
  995. Changes included in v1.46x
  996. --------------------------
  997. Beta bug fixes...
  998.  
  999. o   Trying to declare SmartWrapping or SmartQuoting in the INI file
  1000.     resulted in a crash.  I messed up by referencing an uninitialized
  1001.     pointer.  Sorry ... fixed now.
  1002.  
  1003. o   Modified the logic to pick out the quoting initials to better parse
  1004.     Internet "from" fields.  Still needs some other strange-character
  1005.     detection added (nick.knight@pc-ohio should reduce to nk>).
  1006.  
  1007. o   Fixed a bug where internet from fields that were filled to 25 characters
  1008.     resulted in your own last initial being inserted as the senders second
  1009.     initial (Michael.Hagerty@nitelog.com to Nick Knight, reply would
  1010.     be quoted MK>)  This *was* fixed in v1.45 but not documented.
  1011.  
  1012. o   So my wrapping logic needs a little work :)  I added some things.
  1013.     First SmartWrapping and SmartQuoting have three levels: No, Yes and
  1014.     Full.  Full is aggressive, rewrapping all non-quoted text to the
  1015.     defined wrap column (This is the old "YES").  If set to Yes (the
  1016.     "new" option), wrapping occurs ONLY after a line feed has been
  1017.     inserted by MR/2 (an overlength line was detected). The defaults are
  1018.     "YES" ... we'll see if this works any better.  Limited testing, but
  1019.     you *can* now shut these off w/o crashing!
  1020.  
  1021. o   Also, add an "~" to the end of any line (before the linefeed) and
  1022.     MR/2 will strip out the "~" and keep the return that follows intact.
  1023.     This is for stubborn wrapping problems.  Just in case :)
  1024.  
  1025.  
  1026. Changes included in v1.45x
  1027. --------------------------
  1028. Another limitted release beta ...
  1029.  
  1030. o   INTERNAL: get_origin into mr2util.cpp from qwksrch.cpp.  Previously
  1031.     it was considered part of the searching logic but now has more
  1032.     applications.
  1033.  
  1034. o   If the quoting initials ended up longer than 9 characters (FROM name
  1035.     had no spaces), the string was not properly terminated.  This resulted
  1036.     in garbage in the initials and in one reported case, a crash.  This
  1037.     would occur most often in internet conferences.
  1038.  
  1039. o   New module: Wrap.cpp - WrapMessageText() called from MakeReply()
  1040.     and SaveReply().
  1041.  
  1042. o   New function in mr2util.cpp: fQuoteLine().  This used to be a simple
  1043.     macro used in a single place.  It was needed in another chunk of
  1044.     code so I made it a function.  This also allows for extensions, as
  1045.     all MR/2 currently recognizes is a '>' in any of columns 1 through
  1046.     5.  If one's there, I call it a quote line.
  1047.  
  1048. o   New INI variable:  SmartQuoting, defaulting to "YES" but may be
  1049.     manually set to NO via INI settings.  SmartQuoting will "prewrap"
  1050.     the reply file that MR/2 generates, compensating for the user
  1051.     initial prefix string.  In other words, when you first see the
  1052.     reply, the original sender's text will be rewrapped and quoted so
  1053.     as to fit inside the WrapLinesAtColumn defined in MR2.INI.
  1054.  
  1055.     NOTE: that existing quoted lines ARE NOT REWRAPPED.
  1056.  
  1057.     ALSO NOTE: SmartQuoting will *not* quote past the first tearline.
  1058.     If this creates an incovenience, please let me know.
  1059.  
  1060. o   New INI variable:  SmartWrapping, defaulting to "YES" but may be
  1061.     manually set to NO via INI settings.  SmartWrapping will change
  1062.     the logic used by MR/2 when the edited reply file is saved.
  1063.     If set to NO, the old wrapping method is used.  When left on,
  1064.     MR/2 will format your NEW text with some intellegence.  There is
  1065.     logic to differentiate between a "hard" and "soft" return, and
  1066.     soft returns will be removed if necessary.
  1067.  
  1068.     The old technique would simply insert hard returns to make the line
  1069.     fit within the declared wrap column.  The remaining section of the
  1070.     original line would often be short (one or two words) and look out
  1071.     of place, stranded on a line by itself.  The new technique attempts
  1072.     to rewrap the text as a whole and eliminate some of the older
  1073.     method's ugly results.
  1074.  
  1075.     NOTE: Quoted lines ARE NOT REWRAPPED, these are always considered
  1076.     to be prefixed and terminated by hard returns.
  1077.  
  1078. o   New template sections are definable:  NewInternet and NewNetmail
  1079.     for creating new messages in these private-mail conferences.
  1080.  
  1081. o   The NewMessage template section was never actually used ... the
  1082.     "default" direct section was always being used for new messages.
  1083.     Fixed.
  1084.  
  1085. o   When editing a message header and the conference is the Internet or
  1086.     Netmail defined conference, the "private" flag is set to YES.
  1087.  
  1088. o   INTERNAL:  SetSection() moved into mr2util.cpp.
  1089.  
  1090. o   INTERNAL:  AppendFile() - replaced fpreamble with multivalued
  1091.     "subsection" parameter.
  1092.  
  1093. o   New template section: `RIME` can be defined for use when replying
  1094.     to a message in private mode.  If a reply is private, and the
  1095.     source message is determined to be from a RIME source (Postlink
  1096.     origin is last line of message), then this section is used in
  1097.     generating the reply.  This allows for private, routed mail.
  1098.     Not sure what to do about "new" private, routed messages.
  1099.  
  1100. o   New variables:  @RimeIDCode@ and @RimeSiteNo@ for use in the RIME
  1101.     section for "routing" private messages.  Will result in blanks unless
  1102.     replying to a message with a Postlink origin line.
  1103.  
  1104. o   New Variables:
  1105.  
  1106.         @RimeIDCode@ and @RimeSiteNo@, defined above.
  1107.  
  1108.         @Version@ for the MR/2 version.
  1109.  
  1110.         @SerialNumber@ is replaced by the registered serial number
  1111.                 (empty if not registered).
  1112.  
  1113.         @UserName@ is replaced by your user names as found in the QWK
  1114.                 control.dat structure.
  1115.  
  1116.         @IDate@ is replaced with the Internet "Date:" spec, or the
  1117.                 the same results as @MDATE@ if a date string is not
  1118.                 found.
  1119.  
  1120. o   New template section: `Forward`.  If this section is declared, it is
  1121.     used as the template "prefix" for forwarded messages.  NOTE:  $Body is
  1122.     not required, this section is inserted as a whole.  If not declared,
  1123.     the old MR/2 default forward prefix is used.
  1124.  
  1125. o   See EXAMPLE.TF for examples of all new section capabilities.  My name
  1126.     and email addresses are plastered all through here.  You'll want to,
  1127.     of course, change these to your own :)
  1128.  
  1129. o   ** DO NOT USE THE ALT-W feature inside the internal editor. **
  1130.     ALT-R seems to work ok (Read or "insert" file).
  1131.  
  1132.  
  1133. Changes included in v1.44x
  1134. --------------------------
  1135.  
  1136. o   When replying into the Internet mail conference, the @INTERNET@
  1137.     variable will better represent a true Internet address.  If the
  1138.     Reply-To: line isn't present, MR/2 then looks for a "From:" line and
  1139.     attempts to parse out an address.  If no From: line is detected,
  1140.     MR/2 now looks to the last line of the message.  If the sender has
  1141.     included his address inside of parenthesis, then this is used as the
  1142.     INTERNET value.
  1143.  
  1144. o   Added ALT-R and ALT-W support to the internal editor.  ALT-R prompts
  1145.     for a file name, then reads that file into the current cursor
  1146.     position.  ALT-W prompts for a file name and writes the entire edit
  1147.     buffer to that file (overwritting).  I'm not happy this code ... and
  1148.     it doesn't seem to work that well.  I also noticed that the editor
  1149.     doesn't save files in full text mode (no CR's).
  1150.  
  1151. o   Modified msg2rep.cmd so that if archiver.id file isn't found, it
  1152.     defaults to pkzip (configurable).  If using no packet entry, no
  1153.     unarchiver was called, so no archiver.id is created.  We need to
  1154.     be able to specify a packet as a default.
  1155.  
  1156. o   If a local INI specified a value for Internet and/or Netmail, it
  1157.     was not cleared when the packet was exitted.  If the next packet
  1158.     opened did not reset these values (or did not have a local INI), then
  1159.     some erroneous detection of network mail would result.  Fixed.
  1160.  
  1161. o   The internal editor now saves and ALT-W writes files in TEXT mode.
  1162.     I had to do cr/lf translations myself :(.  Writing is OK now, although
  1163.     I'm still hoping to recognize and write only a block, if something is
  1164.     highlighted/marked.  Reading/importing a text file also works OK, but
  1165.     since I'm tricking the editor by inserting the file into the internal
  1166.     editor keyboard buffer, it runs more slowly than it should.  Plenty of
  1167.     room for improvement here :)
  1168.  
  1169.     THIS IS BUGGY AND MAY GET YANKED !!!!
  1170.  
  1171. o   I modified the "origin" line finding logic to recognize more common
  1172.     reader/network tearline styles.  For instance, MR/2's own TwoLine
  1173.     style tagline is now recognized as the beginning of the origin section
  1174.     (and end of the BODY section).
  1175.  
  1176. o   INTERNAL:  QwkSrch.cpp - modified fopen() call to open custom conference
  1177.     NDX file.  It now prepends the BaseDir and WorkPath.  MR2PM, under some
  1178.     interesting circumstances,  would write these files to the wrong
  1179.     directory.  MR/2 classic probably could have, too.
  1180.  
  1181. o   Qwksrch.cpp - James Schmidt found a couple of problems.
  1182.     If you set the CHECK= parameter for a custom conference to TO, FROM
  1183.     and/or SUBJECT, and the source message used mixed case text, a match
  1184.     would never be found.  Fixed.  Also, if a message had no detectable
  1185.     origin line, for some strange reason I called the whole message part
  1186.     of the origin/tagline area (and it had no "body" section).  This is now
  1187.     reversed - a message with no tearline is all "body" and has no origin
  1188.     section.
  1189.  
  1190.  
  1191. Changes included in v1.43x
  1192. --------------------------
  1193.  
  1194. FOLKS:  Same as before ... 1.42 was kept *very* internal.  This version
  1195. is still beta stuff.
  1196.  
  1197. o   Started coding of a REXX script to handle detection of the archiver
  1198.     used to pack the mail packet.  A code is returned that will be used to
  1199.     branch to the correct command for unpacking.  To me, this is the ideal
  1200.     solution, as it is forever extensible.  I've got a scheme for a packer
  1201.     script (for replies) that will match the unpacker used.  I'm new to
  1202.     REXX coding (this was the perfect excuse to get my feet wet :), so
  1203.     if anyone wants to make improvements and/or enhancements, I'll welcome
  1204.     them.  (file is named Unqwk.cmd)
  1205.  
  1206. o   Create msg2rep.cmd - a REXX script for packing replies into a .rep
  1207.     file based on the method used to unpack the original packet.  The source
  1208.     packet *must* have been unpacked with unqwk.cmd (or, at least, the file
  1209.     "archiver.id" must exist and identify the correct packer to use).  This
  1210.     script opens up "archiver.id" and extracts the id number.  Based on that
  1211.     number, a branch is made to the correct packet command.
  1212.  
  1213.     NOTE:  You may have to modify these files a tad IF your archivers
  1214.     are not in your "PATH" environment variable.
  1215.  
  1216.     NOTE:  These command are useful if you use multiple packet sources
  1217.     (BBS's) that use different compression techniques.  If you can get
  1218.     by with a single zipper/unzipper command, the "old" way is OK, and
  1219.     in fact, still more efficient.  These new files simply provide
  1220.     additional flexibility for those that frequent a variety of BBS's and
  1221.     need this functionality.
  1222.  
  1223.     INSTALLATION:  Modify your MR2.INI file to declare:
  1224.  
  1225.         Zipper=..\msg2rep
  1226.         Unzipper=..\unqwk
  1227.  
  1228.     the default .cmd files depend on all archivers being in your "path".
  1229.     If not, you may modify the path = '' statement at the top of each
  1230.     file to reflect the correct path, or modify each zipper command
  1231.     separately to reflect each's valid path.
  1232.  
  1233. o   INTERNAL: packet_exists() now returns TRUE+1 if a .msg file is found
  1234.     in the work directory.
  1235.  
  1236. o   INTERNAL: packet_exists() and remove_packet_exists now use the file
  1237.     name "control.dat" when checking (and removing) packet exist status.
  1238.     If you left a no-packet entry session with ALT-X, then tried to go back
  1239.     in later, MR/2 would not see the existing work (since no messages.dat
  1240.     file ever existed).  Control.dat will always exist if a "packet" is
  1241.     open.
  1242.  
  1243. o   The prompt "Work area has an open packet" has been enhanced.  You may
  1244.     still see this prompt.  However, if the work directory is found to
  1245.     contain replies, the prompt will read "Open packet with REPLIES found".
  1246.  
  1247. o   If an error occurs when unpacking the packet, you will now remain
  1248.     inside MR/2 to select a new packet, or whatever.
  1249.  
  1250. o   IF an error occurs while packing replies, the work directory is *not*
  1251.     purged.  Previously, any error while spawning the packer still let the
  1252.     files be deleted.  What happens now is, after the command error is
  1253.     reported, you're prompted that an open packet with replies exists.  The
  1254.     correct course of action is to go back in the packet (continue working
  1255.     with the open packet) fast exit with ALT-X and correct the zipper
  1256.     problem.
  1257.  
  1258. o   Cleaned up and tested UNQWK.CMD and MSG2REP.CMD.  Made sure error codes
  1259.     were properly returned to MR/2.  Seems to work well with the new error
  1260.     handling described above.
  1261.  
  1262. o   Added new variable @ISUBJECT@ that resolves to the Internet message
  1263.     subject line (often different than the QWK "subject" field).
  1264.     I hope there's a limit to the size of these things ... I only
  1265.     accomodate "realistic" lengths.  We'll see.
  1266.  
  1267. o   Ooops.  New template section logic didn't accomodate new messages
  1268.     created w/o replying.  The template file can now define a section for
  1269.     `NewMessage`.
  1270.  
  1271. o   There was a problem with clearing of search results if there was no
  1272.     local INI when a packet was closed.  Previously, hit counters for custom
  1273.     conferences would not represent the correct counts (counts would not
  1274.     be cleared for the next packet).  Now, all data is cleared (MR2.INI is
  1275.     always reloaded after a packet is closed).
  1276.  
  1277. o   The INI parameter SplitLongMessages has been enhanced.  YES/NO still
  1278.     function in the old way; YES will cause messages to be split at 92
  1279.     lines (90 lines of message, 2 lines for the <cont..d> footer).  You
  1280.     can now, however, place a number here as an option.  This sets
  1281.     splitting to YES, but modifies the line count cutoff to be the specified
  1282.     value (instead of 92).  This value *must* be greater than or equal
  1283.     to 10 (I've been told of a BBS system that requires no more than 16
  1284.     lines <really!>, so I figure 10 will be a "safe" minimum).  I would
  1285.     suggest using a reasonable number if you need to change the default
  1286.     at all.
  1287.  
  1288.  
  1289. Changes included in v1.42x
  1290. --------------------------
  1291.  
  1292. FOLKS!!!:  This is truely a beta ... please save your old working
  1293. MR/2 version before trying this release.  I changed alot of code, and while
  1294. eveything appears to be OK so far ... well, we all know better than to
  1295. get too relaxed, eh? :)
  1296.  
  1297.  
  1298. o   New INI parameters V0 through V9 allow you to set user-defined text
  1299.     strings as template variables.  Uses of the strings @V0@ through @V9@
  1300.     in the tenplate file will be replced with the corresponding defined
  1301.     text string.
  1302.  
  1303.     These variables can contain any other variables, including other "V"
  1304.     variables.  This allows for a template to be defined with an
  1305.     attribution line of @V0@, for example, and this line can be changed
  1306.     for each BBS by defining different values to V0 in the BBSs local
  1307.     INI file.  The variable replacement is recursive, so any number of
  1308.     replacemnet levels is possible.  It's also possible to confuse the
  1309.     system by circularly defining variables.  My rule:  keep it where
  1310.     it's understandable.
  1311.  
  1312.     For example, if you add a line to MR2.INI that says "V0=1:157/200"
  1313.     and your template file starts "...writing from Fidonet address @V0@",
  1314.     the fidonet node address will be placed in the reply.
  1315.  
  1316. o   New INI parameters "INTERNET" and "NETMAIL".  Use these variables to
  1317.     declare which conferences, if any, handle Internet mail and Fidonet
  1318.     netmail, respectively.  For example, PC-Ohio has Internet mail in
  1319.     conference 5 and Fidonet netmail in conference 6.  My PC-OHIO.INI
  1320.     file has:
  1321.  
  1322.     Internet=5
  1323.     Netmail=6
  1324.  
  1325.     Nerd' Nook has Netmail in conference in 139 and no Internet capabilities.
  1326.     My NerdNook.INI file has the lines:
  1327.  
  1328.     Internet=-1
  1329.     Netmail=139
  1330.  
  1331.     The "-1" tells MR/2 that there is no Internet support, and makes sure
  1332.     that the Internet section template is not referenced.
  1333.  
  1334. o   New variables @INTERNET@ and @FIDONET@.  The INTERNET variable will
  1335.     be replaced with the "Reply-to:" address found in Internet mail.  The
  1336.     target address will be stripped of extra verbage and should represent
  1337.     a correct and "ready-to-go" internet address.  The FIDONET variable
  1338.     will be replaced with the full Fidonet address found in the origin
  1339.     line of the current message.  If either one of these variable can
  1340.     not be resolved, then an empty string is substituted.
  1341.  
  1342.     These variables are meant to be used for personal mail addressing
  1343.     using template "sections".  See next blurb.
  1344.  
  1345. o   Sections in the template file `Internet` and `Netmail`.  You may now
  1346.     allocate "sections" within the template file.  Sections are denoted
  1347.     and named by a string between "accent" characters (`).  The first
  1348.     template file section has no name and will be refered to as the
  1349.     "default" section.  A section ends at the next section name string,
  1350.     or at the end of the file.
  1351.  
  1352.     When replying to messages targetted for a conference declared to
  1353.     be the INTERNET or NETMAIL conferences, MR/2 will switch template
  1354.     sections to the corresponding section.  If ever a section is not found
  1355.     (by name matching), the default section is used.
  1356.  
  1357.     This allows for Fidonet netmail and Internet mail to have templates
  1358.     that correctly set up destination addressing.  See the file Example.tf
  1359.     for examples of sections.
  1360.  
  1361. o   Mods to reply creation ... removed the beginning CR/LF when creating
  1362.     the reply file.  Made changes to the way the template file handled
  1363.     CR/LF spacing.  Template file's allignment matches reply files
  1364.     better now (line spacing/blank lines).
  1365.  
  1366. o   When replying and the FROM user name is an Internet made-up name with
  1367.     periods imbedded, MR/2 nulls-out the quoting initials.  The quoted text
  1368.     is simply marked with whatever symbol is defined in the INI, usually
  1369.     a ">" (no initials preceed the ">").
  1370.  
  1371. o   Oh boy.  I modified the Save Reply logic of my QWK class.  This is
  1372.     dangerous, simply because it changes the way replies are saved.  I'll
  1373.     test it thoroughly before letting it out.  *Please* report any problems
  1374.     to me quickly.
  1375.  
  1376.     The change comes when splitting messages (it may effect more, my hope
  1377.     is that it doesn't :).  IF you're in sending Internet mail or Netmail,
  1378.     the message "header" will be copied to each split section.  In most
  1379.     cases, this will be the correct function.  There may be cases where
  1380.     it isn't.  Yell at me and I'll make it configurable.  In other words,
  1381.     netmail or internet mail that's split will be addressed properly for
  1382.     all "parts" if addressing is done on the first line(s) of the message.
  1383.  
  1384. o   When replying into the Fidonet netmail conference, the source message
  1385.     is first checked to see if the first line starts "From:".  If so, and
  1386.     what follows appears to be a Fidonet node designation (it has a ":" and
  1387.     a "/"), then this is used as the value of the FIDONET variable.
  1388.     If not found, the origin line is found.  In netmail messages (the ones
  1389.     I receive at least), there is no origin line, just a "From:" identifier
  1390.     on the very first line of the message.
  1391.  
  1392.  
  1393. Changes included in v1.41x
  1394. --------------------------
  1395.  
  1396. o   Template file processor would lockup if the named template file did
  1397.     not exist.  Same ZTC bug where fopen() doesn't return NULL on error.
  1398.     Fixed with a call to my file_size() function.
  1399.  
  1400. o   Taglines now are filtered for variables (e.g., @FROM@).
  1401.  
  1402. o   Took template file checking one step further - if file name is
  1403.     empty, processing doesn't even start.
  1404.  
  1405. o   Distribution packets now contain a FILE_ID.DIZ file to help automate
  1406.     BBS description entry.
  1407.  
  1408. o   The initial MR2.INI file now specifies that the INTERNAL editor now
  1409.     be used as the default.  The initial INI editing is still performed
  1410.     inside the E editor.
  1411.  
  1412.  
  1413. Changes included in v1.40x
  1414. --------------------------
  1415.  
  1416. Not much feedback on the internal editor yet.  I used it for a while but
  1417. switched back to QEdit.  I need file import/export capabilities myself; I'll
  1418. be adding that to the internal editor soon.
  1419.  
  1420. o   Save file wildcarding logic fix.  First, if you entered a spec like
  1421.     "c:\tmp\*" and pressed ENTER, MR/2 would save the message to that file
  1422.     name, which is illegal.  No error would be reported.  Now, when ENTER
  1423.     is pressed and a wildcard is in the file name specified, MR/2 converts
  1424.     the ENTER into an F2 keypress and shows a file pick list.
  1425.  
  1426. o   If "C:\tmp\*" was provided as the save file pick list, and a file was
  1427.     selected from the list, the file name returned would be grunged.  The
  1428.     file name field would be filled with some mutation of the subject line
  1429.     from the message display.  This was due to the missing ".", which I
  1430.     assumed would always be there.  This has been corrected.
  1431.  
  1432. o   New INI parameter:  "TemplateFile".  This is another one of those
  1433.     features that is merely a starting place and has lots of future
  1434.     expansion possibilities.  Place a file name here that defines a
  1435.     template for all message replies.  The reply will created using this
  1436.     file as a guide BEFORE you edit it.  This allows for any necessary
  1437.     cleanup.  The "template" file I used for testing looked like this
  1438.     (note that the variables used will be documented below):
  1439.  
  1440.     -------------------------------------------------------------------
  1441.     Subject: @Subject@
  1442.     In a message dated @DATE@, @FROM@ said to @TO@:
  1443.  
  1444.  
  1445.     $BODY
  1446.  
  1447.  
  1448.     Nick Knight
  1449.  
  1450.     From @from@ reading @CONFNAME@ (@CONFNUM@) on @BBSID@, to @TO@
  1451.     Subject: @Subject@
  1452.  
  1453.     FidoNet:    1:157/2
  1454.     Internet:   nick.knight@pcohio.com
  1455.     Compuserve: 76066,1240
  1456.  
  1457.     To First:   @tofirst@
  1458.     To Last:    @tolast@
  1459.     YYMMDD:     @yymmdd@
  1460.     Date:       @date@
  1461.     From First: @fromfirst@
  1462.     From Last:  @FromLast@
  1463.     Msg Date:   @msgdate@
  1464.     Msg Time:   @msgtime@
  1465.     Day:        @Day@
  1466.     Julian:     @Julian@
  1467.     Time:       @Time@
  1468.     Time 24:    @Time24@
  1469.     AM/PM:      @AmPm@
  1470.  
  1471.     Upper:      @Upper@@Subject@ @upper@@day@
  1472.     Lower:      @lOWER@@Subject@ @lower@@day@
  1473.     Mixed:      @mix@@From@ -> @mix@@to@
  1474.     -------------------------------------------------------------------
  1475.  
  1476.     The quoted version of the original message is inserted at the $BODY
  1477.     marker, which is required.  NOTE that this is not an appropriate
  1478.     template file for use within internationally echoed conferences.
  1479.     It's offered here merely as an example.
  1480.  
  1481.     The section before the $BODY line allows for an "attribution"
  1482.     line or section.  The area below the $BODY marker works as a
  1483.     signoff or signature section.
  1484.  
  1485.     AGAIN, this feature is under development and may be changed in the
  1486.     next couple of versions.  My idea is to add more blocks to this file.
  1487.     For example, a definition for saved message headers, forwarded
  1488.     header definition, etc.,.  I've got plenty of ideas.
  1489.  
  1490.     The reply file generated by my test template file looked like:
  1491.     -----------------------------------------------------------------
  1492.  
  1493.     Subject: NEW ZOO
  1494.     In a message dated 03/06/93, DAN HANSON said to ALL:
  1495.  
  1496.     DH>I saw this in Time Magazine.  The New York Bronx Zoo has been
  1497.     DH>renamed to the International Wildlife Conservation Park.  In
  1498.  
  1499.     <My reply would be inserted here.>
  1500.  
  1501.     Nick Knight
  1502.  
  1503.     From DAN HANSON reading Main Board (0) on PC-OHIO, to ALL
  1504.     Subject: NEW ZOO
  1505.  
  1506.     FidoNet:    1:157/2
  1507.     Internet:   nick.knight@pcohio.com
  1508.     Compuserve: 76066,1240
  1509.  
  1510.     To First:   ALL
  1511.     To Last:    ALL
  1512.     YYMMDD:     930306
  1513.     Date:       03/06/93
  1514.     From First: DAN
  1515.     From Last:  HANSON
  1516.     Msg Date:   03-06-93
  1517.     Msg Time:   14:21
  1518.     Day:        Saturday
  1519.     Julian:     065
  1520.     Time:       03:08
  1521.     Time 24:    15:08
  1522.     AM/PM:      PM
  1523.  
  1524.     Upper:      NEW ZOO SATURDAY
  1525.     Lower:      new zoo saturday
  1526.     Mixed:      Dan Hanson -> All
  1527.     -----------------------------------------------------------------
  1528.  
  1529. o   Variables are available for use in the template file.  They are
  1530.     currently only used by the reply file generator.  I'll add the
  1531.     capability to other areas as I think of them.
  1532.  
  1533.     The following variables have been provided:
  1534.  
  1535.         BBSID                           TIME
  1536.         CONFNAME                        TIME24
  1537.         CONFNUM                         TO
  1538.         DATE                            TOFIRST
  1539.         DAY                             TOLAST
  1540.         FROM                            YYMMDD
  1541.         FROMFIRST                       UPPER
  1542.         FROMLAST                        LOWER
  1543.         MSGDATE                         MIX
  1544.         MSGTIME                         AMPM
  1545.         SUBJECT                         JULIAN
  1546.  
  1547.  
  1548.     The literals UPPER, LOWER and MIX are not actual variables, but
  1549.     modifiers.  They will convert the case of the NEXT variable
  1550.     replacement to either all upper, all lower or mixed case, respectively.
  1551.     Mixed case basically lower cases all letters except the first letter
  1552.     of each word.  See the example above for more detail.
  1553.  
  1554. o   GREATER CHICAGO Online BBS is now offering a service called the
  1555.     "OS/2 Shareware Author Support Program".  They are willing to handle
  1556.     Visa/Mastercard charges for shareware authors.  Starting immediately,
  1557.     MR/2 may be registered by "charging" it!  You can register online by
  1558.     calling Greater Chicago Online BBS at (708) 895-4042.  Alternatively,
  1559.     you can provide your charge card information to me directly on the
  1560.     MR/2 registration form provided (register.doc).  There is a $2.00
  1561.     handling fee associated with all charged registrations, making the
  1562.     total charged registration cost $22.00 US for domestic orders.
  1563.  
  1564.     Shareware authors may get more information on the OS/2 Shareware
  1565.     Author Support Program by calling the GREATER CHICAGO Online BBS at
  1566.     the number above (leave a note to the sysop) or by Compuserve mail
  1567.     at 70404,3277.  Fidonet netmail can be sent to Bill Cook at 1:115/895.
  1568.  
  1569.  
  1570. KNOWN BUGS AND STUFF
  1571. ====================
  1572.  
  1573. The TEMPORARY directory MUST remain a subdirectory of the MR2 home dir.
  1574.  
  1575. You can't use "\" or "&" as part of any search text (since MR/2 uses them
  1576. as delimiters).
  1577.  
  1578. You can't cancel a search until the first "hit" is displayed.  This is
  1579. particularly irritating when soundex searching, since soundexing is
  1580. noticably slower.
  1581.  
  1582. If you set "SkipReadMessages" to true, you cannot gain access to a
  1583. conferences where all messages have previously been read.
  1584.  
  1585. Other frills that have not yet been addressed:  Bulk marking,
  1586. twit filter, function key assigning. There are probably others.
  1587. Feel free to bombard me with requests.
  1588.  
  1589.  
  1590. ************************************************************************
  1591. NOTE:  READ.ME format has changed!  Go to the BEGINNING of the file for
  1592. the most recent changes!!!
  1593. ************************************************************************
  1594.  
  1595.