home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
High Voltage Shareware
/
high1.zip
/
high1
/
DIR24
/
MR2_161.ZIP
/
READ.ME
< prev
next >
Wrap
Text File
|
1993-12-02
|
78KB
|
1,595 lines
MR/2 - A QWK Compatible Mail Reader for OS/2. 12/02/93
Copyright (c) 1992, Knight Writer Software Company.
All rights reserved.
===================================================================
N O T I C E
===================================================================
This IS a shareware package, and does require a registration fee if
you choose to continue using it after 30 days. The registration
fee is currently $20 US. Eventually, the product MAY have a
"begging" screen with a key-file that will register the software
and suppress it. The more interest I get, the more likely I am to
continue with improvements.
------------------------------------------------------------------
CONTACTING THE AUTHOR
=====================
You can contact me in a number of ways. Unfortunately, I can't
provide a phone number at this time.
US Mail: Nick Knight
1823 David Ave.
Parma, Ohio 44134
Fido netmail: 1:157/2 to "Nick Knight"
Internet: User "Nick Knight", (nick.knight@pcohio.com)
Fido Echomail: Find the Fidonet OS2PRODSUPPORT conference. I'm there.
Echomail messages to me in more general conferences are
discouraged, as keeping them "on topic" and
interesting to the masses would be difficult. I do
read OS2, OS2PROG, C_PLUSPLUS and DR DEBUG daily,
though. OFFLINE echo also (deals with mail readers),
this might be THE place to ask public questions, eh?
I recently have acquired access to a host of other
networks with OS/2 conferences. These include RIME,
SmartNet, Uninet, Intelec, Nanonet, Racenet and some
others I can't remember.
I also do poll the Fidnet OS2PRODSUPPORT echo.
Direct BBS: Leave a message on the Nerd's Nook BBS (1:157/2) at (216)
356-1772, 356-1872 or 356-1431. I check in here
multiple times a day. I will also keep the most recent
copy of MR/2 posted here. Other boards (non-local)
will get updates at my convenience.
**************************************************************************
**************************************************************************
** NOTE: Nerd's now supports an MR/2 conference **
** and file area. Conference #208 is dedicated to **
** MR/2 support and files. File area #45 contains **
** MR/2-related files. Any file uploaded into **
** conference 208 will be placed in file area 45. **
**************************************************************************
**************************************************************************
Nerd's does support file requests (157/2 or 157/3)
Compuserve: I check in here only when I have to. Try mail to my
user ID - 76066,1240, although this isn't the best
approach.
---------------------------------------------------
ALSO READ: MR2.DOC (v1.0) and MR2.HST (v1.0->v1.4)
---------------------------------------------------
Changes included in v1.61x
--------------------------
o INTERNAL: Dlist class modified. Added a "fmarked" flag. Also added
methods is_marked(), mark(int) and mark_all(int). Since this class is
a low-level building block used by *lots* of code, recompiled all source.
o INTERNAL: Dlselect.cpp modified to start support of markable linked-list
displays.
o 'E' is now available from the message viewer to enter NEW messages w/o
having to return to the Packet menu. The current conference will be
the default for the new message, but To and Subject remain blank.
o INTERNAL: Modified the Event class once again. My code to disable
and enable the event handler (for external editing) closed the event
semaphore, the opened it on enable. This was unnecessary and could
cause problems with my multiple-instance logic. Now, DosSemClose is
skipped, and semaphore need not be re-opened.
o INTERNAL: QWK class now uses a the unique semaphore internal ID set
by the event class. This in an attempt to get multiple instances
running.
o You may now specify the name of a unique MR2 sub directory to use
as the work directory right on the command line. For example,
"MR2 /Wtmp$$$" will override the INI setting for work path and
create/use a "tmp$$$" sub directory for unpacking and reading the
QWK packet. Another aid in what will eventually allow multiple
instances.
o OK! I was able to run 3 simultaneous copies of MR/2. I ran three
windowed sessions and was able to (using OS/2's window menu) cut
and paste between them. All that's *really* required is that
you specify a different work directory for each session using the
/Wpath command mentioned above. I can see myself having either
"MR/2 - 2" and "MR/2 - 3" icons on the desktop or multiple command
files for when I need to reference other packets. I was able to open
up two instances w/o specifying a work path, the second instance
after a packet was already open. I was able to read the same packet
*in two different windows*, allowing me have two separate spots
visible at one time. Exiting one occurence messed things up a bit,
as it deleted most of the unzipped work files. I play with this
idea some more ... and I'll play with my own code to access the
clipboard in full-screen sessions.
o Fixed a bug in No-packet entry. If target conference was changed
BEFORE creating a reply, this conference would be forgotten and
the original conference would be defaulted on the AFTER pass. Fixed.
o Address book lookup failed to close the .adr file when tag was found.
Found this while trying to rewrite the .adr file. Fixed.
o Address book maintenance. Add new or modify existing records from
the address book selection screen. ALT-A to add, highlight an entry
and press ALT-C to change. ALT-D to delete (confirms w/a prompt).
Text file is rewritten each time, previous version is copied to
bbsname.old or mr2.old, depending on which book is being modified.
o NOTE: Address book tags are resolved in a first-found order. The
local address book, if one exists, is checked first. If not found
there, the global MR2.ADR is checked. If duplicates exist, only
the first one found (searching the file(s) sequantially) is the one
that's used. Pick list selections go through the same process ... so
picking the "other" one doesn't matter.
o I am now displaying both the packet name, BBS name AND the "logical"
conference name in two places on the message viewer. I'm trying to
determine which spot I like more. The bottom status line position
overwrites the old first-time-user help prompts. This worries me,
which means I'd make it an INI toggle that defaults to the help
prompts. The display in the middle of the divisor bar is "safe",
but it looks a tad cluttered to me. Votes?
o Rot13 support. The internal editor will now rot13 a clock of
highlighted text. Just press ALT-E (E for "Encrypt"?). A block
must be highlighted, tho. In the message viewer, ALT-E will rot13
the whole message. Read the desired part and ALT-E to return the
message to normal viewing. Replying to a message displayed in
rot13'd form is OK, the message buffer is only temporarily converted
and almost any action switches it back.
o RemoveReplyBookmarks now defauls to YES. I'm trying to remove the
problem of missing origin lines. If it doesn't go away, I'll set
this back. INI file can still override this ...
o New INI parameter "FileViewer". If you set FileViewer=List, for
example, you will invoke the command "List filename" whenever a
bulletin, news file or file list is selected for viewing. OR,
specify your editor ("FileViewer=Q" in my case). This eliminates
file size restraints withing my internal viewer (which I intend to
remove anyway). It also allows more power ... it's a user's choice,
at least.
o Listening to someone from a while ago ... I've taken a small amount
of time to encrypt and otherwise protect my copyright notice and banner.
It was reported that my reader was available in Hong Kong with another
name and copyright notice on it. It won't be so easy to change this
information any more. Users will notice no difference ... just FYI.
o Spell checker crashing. This was reported by two users, but I couldn't
get it to happen for me. Luckily, one of the users was a coworker and
I was able to see it first hand on his machine. Turns out the crash
occurs only if the reply starts with a quoted line. Mine always start
with an attribution line ... "In a message dated ...". I reworked the
quote-skipping logic within the spell checker (and eliminated another
bug at the same time). I've tested with all forms of quoted lines that
I could think of an all seems to be in order. I guess you'll tell me :).
Changes included in v1.60x
--------------------------
NOTE: Most versions from this point on until the end of the year will
contain **lots** of new code. For those that consider themselves
less-than-adventurous, it might pay to stick with what you're using
until all the new features shake out some. Still, I *do* use MR/2 every
day, so I have a great incentive for keeping it functional.
NOTE that all address book and dictionary logic is in development and
subject to radical changes at any time. Version numbers may not jump
very fast, but these are all considered v2.0 features. I consider every
version released (in limited fashion only) from now until Jan 1st to
be a v2.0 beta.
o I removed the necessity to have a "String = " clause in a custom
conference definition. It was pointed out that, if you could search
on "anything", you'd be able to build combined conference for easier
manual scanning. Before, if you defined a conference with no search
criteria or a NULL string, nothing would match. If you searched on
a space, it would work, but the highlighting was awful! Now,
either include the clause "String =" (followed by a CR/LF) or leave
if out altogther, list a bunch of conference number to search, and
a combo-conference is built.
o `NewRime` template section now available for "new" messages written
to an address-book target whose private mail section-type is `Rime`.
To add `NewRime` to your existing template file, simply add a
section in this format:
;---------------
`NewRime`
$Body
->@RimeSiteNo@
Your name here
;----------------
o Also, the NewInternet and NewNetmail sections should be changed. The
routing lines (the very first lines of each section) should now match
the normal Internet and Netmail sections, respectively.
o Address Book. I've added the ability to record email addresses and
other pertainent information in a simple text file. At this time
there is no way to add or maintain the address book other than via
direct text editor modifications. I expect this to change. See
example.adr for a starter kit/example file. My email addresses
are pre-recorded here in various forms :)
To access an address-book entry, you use the first field of the
record as the identifier or "tag". When filling out the message
header information, enter a "!" followed by an existing address
book tag, tab or enter out of this field and the address book data
will be accessed and automatically applied. For example, to send
an internet message to me (assuming you have a private internet
mail conference defined), simply type "!NK-I" as the TO user and
press ENTER. Oh, you must first copy the file example.adr to
mr2.adr. MR/2 looks for a BBSname.adr (e.g., "NERDNOOK.adr")
first, then "MR2.Adr" second, both in the MR/2 base directory.
The format is:
Tag | Description | TO name | Conference | Private? | Section | Address
where:
Tag is a short identifier you'll use to reference the address,
Description is a free-form field to help you remember who/what this
address is for.
To name is the name to plug into the TO; header field.
Conference is the conference in which to place the message. NOTE that
this is usually a specific number, but "I" is allowed and will be
replaced with the conference number set as your "Internet" conference.
Also, "N" is allowed and represents the defined Netmail conference.
Private is either "Y" or "N", representing the privacy flag.
Section identifies the template section to use. Sometime this may
obviously be unnecessary, but it does allow for user-defined "special"
sections to be created and used for specific address book entries.
"Internet", "Netmail" and "Rime" will probably be used most frequently.
NOTE that "New" is automatically prepended by MR/2 when entering "new"
messages.
Address is the first-line address code. If the template section uses
the @Internet@, @Fidonet@ or either of the @Rime*@ variables, the
contents of these variables will be set to this string.
NOTES: There is no error checking or identification by BBS name, other
than allowing for BBS-specific address books. MR2.Adr, if it exists,
is always references, but after any bbs-specific file has been checked.
Use of the "N" and "I" conference identifiers helps make some addresses
less BBS-specific. For example, I can send Fidonet netmail from any of
three separate BBS's. My MR2.adr can contain netmail addresses for
use on all BBS's, as long as my template file(s) have been set up
correctly and private mail conferences have been identifies in the
BBS-specific INI's. This can get complex - but it also can be quite
powerful and handy.
o Not labeled as of yet on the Edit Header screen: F6 calls up the
address book pick-list. Contains BOTH bbs.adr and mr2.adr.
o Internal dictionary available when using the INTERNAL editor. You'll
need one of the two dictionary files available:
MR2DICTL.ZIP (280k) - 120,000 words, 480K uncompressed
MR2DICTS.ZIP (128k) - 60,000 words, 248K uncompressed
The spelling checker logic is fairly good. The suggested word part
needs a little work. You can add words to a "user" dictionary. I'll
provide a utility later to manipulate dictionaries (add/delete words,
merge user dictionary, etc.,.).
CTRL-F2 while editing a reply. ESCAPE stops the speller in between
checks. If a word is not found in either dictionary (base or user),
then you are given up to 10 suggested spellings. You are allowed to
pick one of these, skip the word, ignore the word for the rest of the
time you are editing the current file, add the word to your user
dictionary, edit the word by hand, or stop the spelling check
procedure. The mispelled word is highlighted, and the menus/pick
lists move to opposite sides of the display in an attempt to give you
an unobstructed view of the word "in context".
QEdit users will notice the menu's look a bit familiar :). It was
quite timely of Qedit to get me my v3.0 upgrade around the same
time as my dictionary thinking started ...
MR2DICT.BIN is the dictionary used ... it must be in the MR/2 home
directory with MR2.EXE. MR2USER.BIN is the user dictionary. It will
be created whenever the first word is added to it.
Due to the size of these dictionary files, the base dictionaries
themselves will remain separate zip files for distribution purposes.
NOTE: Dictionary is English-only; no support for hi-end ASCII
characters at all. Sorry.
Changes included in v1.57
-------------------------
o Changed the internal QWK initialization routine that matches NDX
files to master conference names. Previously, the master conference
was sequentially searched until the number associated with the index
file (e.g., 1695 for "1695.NDX") was matched. On a 3000 conference
BBS, this resulted in an average of 1500 checks before a match. If
you had mail from 100 conferences ... yikes! It took awhile,
although, in reality, it was only a matter of seconds. The new
logic searches the master list once and a compressed easy/quick to
search array of conference numbers is searched to see if the master
name is needed. If found, it is processed. This makes things just a
tad more snappier.
o Ooops. It was pointed out to me today that sorting by message number
didn't work correctly. I was using string compares, where message
number is left justified. This means that message number "1000 "
would come *before* message "9 ". WRONG! Easy to fix - I now
convert to numbers and compare.
o INTERNAL: Event class now checks for errors when creating the event
semaphore. If the named semaphore already exists, a new name is
created and another attempt is made. This is to aid in running
multiple instances. Also, a global variable is set with the final
"ID" used. This is necessary when creating some of the other
control semaphores.
o Mods made to logic that builds "Conferences w/Mail" list caused the
sort order to be alphabetical. While this may be desirable to some,
I've become acustom to and still prefer the default "numerical" order
by conference number. I'm the only one that saw this happen, but it
sure confused me. I reworked the code a little more and got the "old"
sort order back. I also managed to make it even more efficient in
the process :).
o Someone noticed that when using NO PACKET ENTRY, the Inbasket was
inaccessible. This has been corrected.
o Internet private mail (replying). While replying to various Usenet
messages via private Internet mail, I noticed MR/2 was leaving alot of
To: addresses blank (@INTERNET@ values not found, replaced with blanks).
The address was usually easy to find, on the first line identified
by the PC-Board "@From:" command. MR/2 now extracts valid addresses
from these lines and can reply properly.
NOTE: I've heard from some users that their internet mail was
getting bounced because, when copied from the message header FROM
field, the address was in all upper case. My upper-case addresses
seem to work, but there are several different qwk->internet systems
in use. To be safe, I've modified the default template file to
convert internet addressed to lower case. If you're using a
template file, and you'd like to do the same, simply find @INTERNET@
variable and change it to @LOWER@@INTERNET@.
o Conference names containing hi-end ASCII characters were getting
truncated. Switched to using unsigned characters and the problem is
now gone!
o INTERNAL: Small patch to GetMessageLine(). If pMessage is NULL,
this function instantly returns -1. No packet entry into private mail
conferences crashed inside this function when templates were being
processed.
o I had introduced a few bugs with no-packet entry. There were various
cases where internal information was not correctly set and crashes
would occur. Things seem to work much smoother now.
o I received an Internet message just today about deferred messages and
how zeros seem to be mysteriously appearing. I checked my inbasket
(remembering that I'd seen this happen before) and did some
experimenting. Sure enough, one character of every message was
being changed; the most frequent occurence was a ' ' being changed to
a '0'. I was marking the 'archived' bit (my personal invention) of
the message header, only I was changing the 127th byte of the actual
message, instead. The archive bit is bit 16, which will change a ' '
to a '0', an 'a' to a 'q' and so on. I now have moved this mark back
into the message header, where it belongs. The "archived" indicator
that's supposed to be showing for folder messages will probably work
now, too.
Changes included in v1.55 - v1.56
---------------------------------
o Inbasket packing often left killed replies visable and available across
packets. Fixed - killed messages will once again disappear the next
time the packet (and related inbasket) is closed.
o Conversion of the master conference linked list to my new,
experimental "quick heap" routines. I'm maintaining a separate heap
for memory needed for this linked list. The list is freed in huge
chunks instead of 2 parts per conference name (i.e., PC-Ohio's 3000
conferences caused the old heap to have to free 6000 linked entries,
maintaining the "available block" information as each one is
released). This *should* speed up the exiting of packets. Deleting
the files is still a source for delay ... perhaps I can multithread
this and overlap things a bit.
o Modified MR2UTIL.CPP - RemoveWorkFiles() routine. You wouldn't
believe the amount of code I was executing to delete a packet's
files! I was actually building a sorted linked list of file names
with details (sizes, dates, etc.,.), then immediately deleting each
file found in this list. Now, this routine merely finds the "next"
file and removes it. Results in a noticable speed up when exiting a
packet. Between the above quick-heap mod, and this one, I think I've
licked this problem. These changes are to the core QWK engine, so
they'll help both MR/2 and the PM version.
o I've made all internal linked lists use the new QHEAP. Should result
in improved "snappiness". Also has big-bug potential. I'll test
thoroughly before releasing.
o Made some new routines for general use. Includes a low-overhead
delete-by-wildcard routine and an "at least one file matching
this wildcard exists" function. Minor performance improvements
should result, as the code scattered about in several places used
previously had high overhead.
o Rewrote the bintree() class to use QHEAP. Master conference
sorting should be faster for large conferences. At least a tad ...
Changes included in v1.54 - Limitted distribution
-------------------------------------------------
o Message Sort can now be defined in the INI as no order, Subject,
From or To. The FROM and TO options are new.
o NOTE that if you don't sort by subject but then ask for a quick
thread summary (by pressing Q), messages are sorted by subject from
that point on. Previously, Q would just beep at you if SUBJECT was not
the specified message sort.
o From the Message Index, ALT-O now allows you to change the message
sort on-the-fly. You may select from a menu the option to
sort by NUMBER, SUBJECT, FROM USER or TO USER. Once mesasges are
sorted, normal reading (e.g., ENTER for next) will give you the next
message in the NEW sort order. Again, pressing Q resorts by
Subject ... this will probably change too, as I've got ideas :)
o OK, the "Q" key has been changed once again. I'm still trying to
figure out what the correct method should be. Now, if you press the
Q key and message sorting is by subject, it works the same ... you
get the Quick Thread Summary list. If you happen to be sorted by
FROM or TO user, you get a by-user summary. If there is no sort or
message number sort and Q is pressed, the sort is changed to subject
and the thread summary is displayed.
o I added a new function on the message reading screen triggered by
pressing the C key. This is the "Copy" function. It simply places
a copy of the current message in the reply conference, changes the
FROM user to your name and places the EDIT HEADER screen up. Right
now you can copy any message to someone else and make it "from you";
not just your own replies. This may change. Copy loops for multiple
copies until your ESCAPE from the "next" message header edit.
I also plan to add a manner to copy to predefined distribution lists.
o Forwarding messages: If a `Forward` template section and accessed
message header information, this information would be copied from the
header AFTER the header editing process. That meant that if you
changed the conference or subject, the changed data would be used.
This has been corrected to show correct original data.
o When creating some types of new message where MR/2 defaulted the TO
user to blank, the cursor would be one character over. This was a
bug in the internal EditHdr trim function. Fixed.
Changes included in v1.53
-------------------------
o Messages.Dat and mr2bm.bin would never get deleted from the tmp$$
directory when a packet was closed. Just a minor flaw, but this did
waste some disk space when MR/2 was not in use. Fixed.
o When MR/2 builds it's own NDX files, it now opens the target index in
APPEND mode. No biggy, except in playing around qith QWK merge logic,
I found that my QWK engine assumes all conference's message are
together. This may or may not be true for most mail doors, but I
should be able to handle non-contiguous conference messages with out
breaking anything.
o ALT-E to enter new messages w/o an existing packet failed to read and
configure based on the selected BBS's "local" INI. The local INI is
now added to MR/2's configuration parameters when one for the selected
BBS is found.
o New INI parameter "RemoveReplyBookmarks". This is NO by default, but
may be set to YES if it is found that MR/2's bookmarks are interfering
with a networks routing or origin lines. There was a problem on
ILink where someone's origin lines were not appended about 50% of the
time. It was blamed on my use of the last byte of the message header
as a bookmark flag. Setting this INI option to YES will cause MR/2
to replace any bookmak character at this position with a space (0x20).
You lose any bookmark information stored in this byte with this option,
but the bookmark flags saved with replies is minimal anyway.
o Modified the confirmation button screen routines to accept the pressing
of a "k" or "K" to mean "keep" when prompting about existing replies.
For an "Ok/Cancel" choice, "o" or "O" means OK, and "Y" still works as
a positive response on all versions of this screen.
o Reply splitting: instead of "(Cont'd)" being attached to the subject
of a plit message, MR/2 now numbers each part and gives a total count.
The counters are placed at the far right of the subject space, so
subjects like "MR/2 1/2". This preserves as much of
the original subject as possible. This also will assist in MR/2's
sorting of multiple part messages (when sorting by thread).
o When a single piece of a split message is later modified, the last
line of that part would often be removed before entering the editor.
This has been corrected, although more changes to come might
render this fix useless ...
o Save file selection screen now supports long file names. I changed the
order of the display to place the file name last. I don't like this
as much as when it's first, as you can't use keyboard chars to jump
to filename (i.e., pressing "M" no longer moves to the first M file).
I may play with trying to fit the long file name in front, maybe with
leader dots to line it up with the corresponding date/time and size.
o Improved the long file name selection logic. Moved the name back to
the front of each line so shortcut keys work again. Selection box
expands to fit around longest name (I've set a max of 42 characters
for save file names ... at least it's better that 8 :).
o Decision Button logic changed once again. I like this even more.
Now, if the screen reads YES/NO, the only letters MR/2 responds to
are Y and N. KEEP/DELETE recognize only K and D, and OK/CANCEL see
only O and C. All other typing characters are ignored. Also,
if you use the right arrow key, the right box is highlighted and
becomes the default when ENTER is pressed. If you press left arrow,
the highlight moves back to the left box and this is again the ENTER
default selection.
o Form filling logic changed somewhat. Implemented the TAB key to
advance one field as the down arrow key does now. Also implemented
SHIFT-TAB as a previous field key synonomous with the up arrow key.
o Added the capability to split messages at a user defined point.
Used SLMR's ".pg" marker technique. Start a line with ".pg" and
MR/2 will force a split at this position.
o Made Fast Exit from the message viewer *really* fast! Instead of
filtering back through all those nasty C++ destructers, I simply call
DOSExit after some simple cleanup. Seems to work nicely even on
packets with a large number of conferences (~3000). I'll spend some
watching for bugs ... I think I can multithread my freeing of many
internal structures and linked lists too. (This is what takes MR/2
so long when closing a large packet w/lotsa conferences - all the
freeing of memory. ZTC doesn't handle this very quickly ... I'll
try to help them some :).
o If you specified a static, hard-coded tagline, then hit F2 to "pick"
a new tagline, MR/2 would crash. Now it puts up a nicer "empty list"
message, although it still doesn't let you pick a new one :).
Changes included in v1.52
-------------------------
o New variables for use with templates to allow random and user-selected
phrase insertion. First, there must exist a text file containing a
list of possible phrases, one per line. Then, the template file
must contain one of the following (assuming "phrases.phr" is the file
name and it resides in the MR/2 home directory. Remember, when
replying, you're pathed into the TMP$$ sun directory):
@SELECT:..\phrases.phr@
@RANDOM:..\phrases.phr@
Select will build a list of te file's contents and display the
phrases in a selection box for you to pick from. If you ESCAPE
from the selection w/o picking an entry, MR/2 will randomly select
one for you. If you choose the RANDOM option, no user prompting is
performed; MR/2 randomly selects one of the phrases to include.
You may have multiple phrases per template line; as many as you want
in any given section. They're processed one at a time. Phrases may
even contain other @ variables, however, these variables are not
replaced with data until AFTER the phrase is selected. Hmmm, I'll
have to test this, but there should be no reason a random phrase
couldn't reference another select/random phrase clause. Ah, I'm
thinking too hard :)
When you're selecting a phrase manually, the template line in
progress is displayed on the bottom "status" line of the screen.
OK, how about an example? Here's what I tested with in my template
file:
==================================================
On @MSGDATE@, @FROM@ @SELECT:..\SAID.PHR@ to @TO@:
$BODY
To which, @SELECT:..\TOD.PHR@, I reply:
Nick
====================================================
The contents of the file "SAID.PHR" I used for testing was:
said
spewed
bellowed
expounded
proclaimed
jabbered
mumbled
and "TOD.PHR" contained:
on this brisk morning
in the heat of the night
in a babbling frenzy
without a hint of intelligence
all just jibberish to test with. It works very nicely, tho.
The sysops will love me now! BTW, I used a .PHR suffix to stand
for "phrases". Phrases should be of a reasonable length (none
longer than 200 chars, for select, only 76 are usable).
Please, let me know if you can think of any "colorful" extensions
to this idea! :)
o ADD/DROP conference would not work if a DOOR.ID file was not present in
the packet. I now default to QMAIL format in these cases, and create
QMAIL-style add/drop messages.
o When you would modify a reply and change the header data, the index
list would not reflect these changes. The "I"/Insert index list will
now accurately match reply header data.
o Ooops. "InBasket" Folder was not being packed. In other words,
messages that were deferred, then later killed/deleted would still
be physically contained in the InBasket.Dat file. They were marked
as inactive, so they couldn't be read. Code to pack this file
has been reinstituted.
o Double oops :) FolderPath was never sufficiently documented as a
valid MR2.INI parameter. It was metioned in the read.me file, but
was never entered into the MR2INI.ORG file. It's there now, and ...
o It never really worked, anyway. It "kinda" worked, as it did
everything correctly except allow you to actually read deferred message
from anywhere except off of the MR2 home directory.
o I just spent 3 days tracking and fixing a bug ... one that ends up I
put in just 5 days ago :). In tracking this down, I did discover some
potential problems and even a memory leak with the Quick Thread
Selection screen logic. These problems may have been the cause of some
of the rare/random reports of crashing I've received. Well, at least
the memory leak is gone! (it was relatively minor)
o In case you're just tuning in, MR/2, while an OS/2 app, still
"polls" the keyboard for input. This is to ease mouse support. It's
technically possible to use semaphores and other OS/2 resources to
support both devices (kbd and mouse) w/o polling, and most OS/2-ers
will tell you this is the route to take. Still, I could think of no
clean way of removing polling, short of spending a couple of weeks
and adding tons of code. When I asked for suggestions in various
OS/2 programming conferences, it got fairly quiet. Zortech's default
libraries originally used a very tight polling loop. MR/2 uses a
much friendlier loop, using calls to DOSSleep between every poll.
I've increased the default sleep time from .30 seconds to .50
seconds. Using PM SysInfo, my CPU showed 19% usage w/o MR/2 loaded.
At 30 ms delay, the meter showed 23%. At 50 ms, it reads 21%. I
investigated this in response to a reported problem where MR/2
allegedly hogged the CPU from a comm program (OS/2 hosted - HA5?).
I've never seen this myself ... MR/2 has never caused my system to
seem slow or impeeded my TE/2 use. I'm in MR/2 more than anyone :),
and by default I'm using TE/2 probably more than the average user.
Anyway, .50 seconds is the new default. I'll probably make this
configurable for those that see a difference :). I'm also planning
on playing with the background search thread priority now that OS/2
2.1 is out. I'll see if the old IDLE thread bug still exists.
o Modified the origin line find logic. Original code, for some stupid
reason, started at the beginning of a message and search forward. I
now start at the end and work backwards. This will help prevent
erroneous detection of the origin when user-entered dashed lines are
entered as section separaters.
In addition, I revamped the whole routine. It seems to do a much
better job of finding the start of the origin section.
o There was a problem on some systems with the personal conference not
showing in the selection list. This was when working on an HPFS
drive, and the personal.ndx file was unpacked with a lower case file
name. When MR/2 scanned conferences, it always matched on capital
letters for the personal index. This was never a problem BEFORE
long name support, as the names always came back capitalized. Now,
they come back as they are on disk. I've fixed this problem and
scanned for other possibilities. I think that was it ... time will
tell! NOTE: The report I received that finally solved this one
specifically mentioned a 32-bit UNZIP.EXE. He mentioned that all
worked OK with the -U switch added to the command line. Just FYI.
o Message Header Edit screen now allows you to enter conference numbers
that are not present within the control.dat master conference list.
Maximus QWK doors and PC Board's built-in QWK feature do not supply
complete conference lists. Some QWK doors also make this optional to
reduce packet size. Previously, you could not post into a conference
that was not defined in the contorl.dat file. Now, you may manually
enter ANY number. If MR/2 cannot find it in the master list, it will
beep and clearly identify the conference number as a possible problem
with the tag: "** WARNING: Unknown Conference **". It's the user's
resposibility to make sure a message is posted to the correct
conference number. Maybe I'll add a user-definable master list later.
Changes included in v1.51
-------------------------
o RIME routed messages are now recognized as having a "header area" at
the top of the message. If the message is "split" due to length,
the header area should be automically pasted into the top
of each part.
o FILE_ID.DIZ files were crossed between classic and PM. Fixed.
o After a brief "vacation" <NOT!>, work is once again progressing :)
o OK, I linked in HPFS longname support and modified some code to
retrieve and handle long file names. The packet select screen
now shows TE/2-renamed files like "pc-ohio.qwk;1". This will need
some testing and polish, but it works. FileSpec in MR2.INI should
be changed to "*.q*" in order to see these files.
o Ooops. I couldn't find a PKUnzip that would work with long names.
Even the older OS/2 version puked. This'll definitely be a problem
with other DOS based archivers. So, I added a little diddy to
unqwk.cmd that, if a long name is detected, will copy the selected
file into the tmp$$ directory as MR2$TMP.QWK and unpack this. It
then deletes the "temporary" QWK packet. Works great with even
the DOS PKUnzip now!
If you want to use TE/2 on a HPFS system and unpack the "BBS.QWK;1"
type names with a DOS or PK* product, you *must* set your unzipper
to unqwk.cmd.
o Selecting an alternate conference using F4 from the Message Header
Edit screen was broken. This has been fixed.
o Packet path would get reset after every packet. That meant that if
you used ALT-P to change to a different directory and opened a packet,
you'd lose that path when that packet was exited. Packet path and
Video mode now are kept across packets
o An MR/2 INI file other than MR2.INI may be specified via command line
parameter. Use "MR2 /IMR2_ALT.INI" to use a file named MR2_ALT.INI as
the global MR/2 INI file. I'm hoping that this helps in allowing
multiple instances of MR/2 to be open on the desktop. Needs more
testing and experimentation ... Opening two different MR/2 seesion
still crashes.
Changes included in v1.50
-------------------------
o Read.me is now shifted around so that most recent changes (from now
on, at least) list at the top. The old mr2.hst file that used to
house the list of modifications up to v1.00 (beta changes) is gone.
Mr2.hst now contains a list of changes from v1.00 up to v1.40.
This read.me file contains changes made in v1.40 and beyond.
o Welcome and Goodbye screen now list on the Bulletins select menu.
You can view these, unobstructed and at length, any time you choose.
o Minor change to the parsing of the @Fidonet@ variable. Removed any
@fidonet suffix that exists in the origin line.
o Ooops. When using the internal editor, and editing mr2.ini, the
read clock string would pop onto every edit screen. The clock display
is now suspended/resumed correctly.
o Clock would still pop up if you would request HELP while inside the
editor, then CANCEL to clear the help screen. Fixed.
o ALT-W now "works" when inside the internal editor. It will write the
entire file currently being edited, to another file named by you.
This does not change the original file's name. It will overwrite any
existing file ... I guess there's an enhancement idea right there :)
NOTE: The internal editor works similarly to the E and EPM editors
as far as CR/LF's go. If you type in a long reply letting the
editor do the wrapping, there are not necessarily CR/LF's at the end
of every line. These occur only where they previously occur, or
when you force a "hard return" by pressing ENTER. MR/2's reply
saving logic places hard returns into the replies. This means that
files that are created by using ALT-W *may* appear to be one long
line (or at least one long line per user-typed paragraph) when
viewed with another editor, printed, or typed to the screen. If you
want to ALT-W write a reply with correct CR/LF placement, save the
reply AND THEN go into the reply conference and re-edit it. Once it
has been saved, CR/LF's will be placed properly. Let's see if this
causes a problem for anyone.
Changes included in v1.48x
--------------------------
o Add/Drop - you can add or drop a conference via "door" command now.
Simply highlight a conference on the Conferences w/mail or the Write
New selection list. Press ALT-A to add, ALT-D to drop, and confirm
the action. Adding/Dropping a non-BBS conference (MR/2 created, for
example) does nothing.
o Internal Editor: cursor would not be visible in with screen displays
of 40 lines or more. I was drawing the cursor, just too thin! Now,
the cursor setting routine queries # lines and adjusts.
o Modified the "no packets exist" screen to report the option of
pressing ALT-E to enter message to a known BBS even though no packets
exist. Formatted the text on this screen a little better.
o Added code to trim off nulls at end of any message. Was trimming spaces,
but Internet messages sometimes had nulls. Messes up the reply file
editing. Also, if any embedded nulls are found, these *aren't* written
to the reply file OR save file.
o Processing for IDATE improved a little. I saw some DATE: lines that
started with weekday names like "Sun, ".
o New INI parameter - ReplyStripTagline defaulting to YES. Set it to NO
if you want to use SmartQuoting (which strips the original messages
tagline) but still want the tag quoted.
o QuoteStyle now has an optional parameter, which is ON by default.
If you specify TagStyle=PCBoard,Autosense, you're saying that quote
style can use hi-end ASCII chars, but if it's a Fidonet reply,
change to Fidonet mode. I'm not sure if I should include Internet
messages as Fido-typed tags ... I probably should. I'll research.
Without the "Autosense" keyword, tag style will adhere strictly to
what's been specified.
o NOTE: starting with the next release, this file will begin to list the
latest changes at the TOP of the file, with older revisions towards
the bottom.
Changes included in v1.47x
--------------------------
o Added new Template file sections: SaveHeader and PrintHeader. Lets
you define the header for messages when printed or saved. If these
sections don't exist, the old default header is used.
o Added more variables to aid in the support of the new header sections:
MsgRefNbr, MsgNumber, MsgStatus. In addition, added some more variables
to aid in formatting sections. @COL:45@ sets the next column to 45.
@RCOL:72@ says to right justify the next variable referenced at col 72.
@Center:40@ says to center the next variable referenced over column 40.
The @RCOL@ and @CENTER@ variables can be used w/o column specs to
right justify at "wrap column" or center the entire line between wrap
column and 1.
Negative @COL@ specs may be supplied. This will delete the specified
number of characters before the variable. For example, @ITIME@@COL:-4@
would change 07:54:30 GMT to just 07:54:30. Messes up, tho, if MSGDATE
ends up getting substituted for IDATE (no IDATE is found).
See example.tf, at the end. There's a section `unused` with some
doc/examples.
o The template file now supports comment lines. Simply start the line
(very first columns) with ";;" and the line is ignored.
o Save message - if your "default" file in the INI has a "*" or a"?"
in the name, MR/2 shows the file selection list immediately upon
hitting the "S" to save.
o MR/2 now will highlight all occurences of a search string within a
"hit" message. This includes custom conferences, and soundex hits.
Soundex highlights may appear longer or shorter than the actual hit.
Since the length of these matches is variable, a "best-guess" is made.
Header area hits are highlighted also. A multiple part search string
will cause ALL strings that have matched to be highlighted. Color
defaults to yellow background, black letters, but ...
o I added yet another 2-byte color combination to the end of my "archaic"
(as it's been referred to :) color specification. Modify your INI
color line (example given):
Colors=1E171E??
replace the ?? with the two-digit color code for the HIGHLIGHT color to
use when displaying search result "hits". The default, black on yellow,
would be specified as E0.
If you don't like new the highlighted text, just define the highlight
color to be the same as normal text. This will still show differently
in the header and quoted text sections ... let me know.
o INTERNAL: had to modify csoundex to return hit pointer.
check_for_string() now returns a point to a hit, and sets a global
length variable, __cfs_match_lgth. ViewBuffer now has code to search
for match string(s) and hilite any/all found.
INI.cpp: added another parse for new color possibility.
o While viewing any message, you can press "~" to rewrap it. This is
useful only in USENET (Internet) conferences where sometimes a message
gets posted without linefeeds. MR/2 would display it on a single line,
but only give you access to the first 160 characters. This rewrapping
is quite temporary (if you "go back" later to view the same message,
you'll have to rewrap it again), and totally manual; performed by user
keypress only. I may INI-ize an automated/detection scheme later.
o GetMessageLine: added a new parameter, maxline_length. This defaults
to 32000, but may be overridden. Problem was with long usenet message
(no linefeeds), stacked string variable were getting overflowed. This
becase apparent when searching for varibale values ... may exist in
other places.
o Specified maxline_length on all calls to GetMessageLine() found in
MR2.cpp and MR2Util.cpp.
o Added a bunch of code to better detect message display lines that are
"quotes" from previous messages. This is not configurable at this time.
If I did too much, yell and I'll make this optional. With all the
messages I looked at, quoting highlights were right 99% of the time.
o New QuoteBody option - Paragraph. If you specify something like:
QuoteBody="%i│▌",Paragraph
then you'll get a quotes like:
MN│▌Yes- DOS 6 upgrade is... (lines chopped for brevity)
│▌number of files that...
MN│▌And then after your DOS...
│▌the manual of files you...
│▌release the whole thing...
you can do the same thing with "%i>", and secondary lines
get just " >". Use the "|" (shifted backslash) and Fidonet
sysops may not yell at you :) (it's not hi-end ASCII).
Bummer! I just saw someone (a registered MR/2 user using a DOS
package, hmmmph!) quote with a technique that this doesn't yet
handle :(. Just a minor nit, maybe I'll add something later to do
this (YOU CAN'T DO THIS WITH MR/2):
MN┤Yes- DOS 6 upgrade is... (lines chopped for brevity)
│number of files that...
o Prewrapping still screws up. I'll look at this tomorrow. :(
HA! I had a problem where I saw too many lines as being "quoted".
Fixed this and text is flowing much nicer. Time will tell.
o Editor: Hi-end ASCII (>127) is now available via the ALT-nnn (numeric
keypad entry). Hi end characters that used to display with different
attributes now display correctly (normal text color).
o Forms: ALT-nnn combinations can now be used to enter characters into
forms. The Header Editing form will now accept these characters.
Still a problem ... display rountines aren't showing them ...
OK, fixed displays. It was a trimming problem, hi-end ASCII getting
trimmed off the end as, when seen as signed chars, they're actually
LESS THAN a ' ' and would get trimmed.
o Oops, old quote detect now also uses new "extended" quoted line
detection logic.
Changes included in v1.46x
--------------------------
Beta bug fixes...
o Trying to declare SmartWrapping or SmartQuoting in the INI file
resulted in a crash. I messed up by referencing an uninitialized
pointer. Sorry ... fixed now.
o Modified the logic to pick out the quoting initials to better parse
Internet "from" fields. Still needs some other strange-character
detection added (nick.knight@pc-ohio should reduce to nk>).
o Fixed a bug where internet from fields that were filled to 25 characters
resulted in your own last initial being inserted as the senders second
initial (Michael.Hagerty@nitelog.com to Nick Knight, reply would
be quoted MK>) This *was* fixed in v1.45 but not documented.
o So my wrapping logic needs a little work :) I added some things.
First SmartWrapping and SmartQuoting have three levels: No, Yes and
Full. Full is aggressive, rewrapping all non-quoted text to the
defined wrap column (This is the old "YES"). If set to Yes (the
"new" option), wrapping occurs ONLY after a line feed has been
inserted by MR/2 (an overlength line was detected). The defaults are
"YES" ... we'll see if this works any better. Limited testing, but
you *can* now shut these off w/o crashing!
o Also, add an "~" to the end of any line (before the linefeed) and
MR/2 will strip out the "~" and keep the return that follows intact.
This is for stubborn wrapping problems. Just in case :)
Changes included in v1.45x
--------------------------
Another limitted release beta ...
o INTERNAL: get_origin into mr2util.cpp from qwksrch.cpp. Previously
it was considered part of the searching logic but now has more
applications.
o If the quoting initials ended up longer than 9 characters (FROM name
had no spaces), the string was not properly terminated. This resulted
in garbage in the initials and in one reported case, a crash. This
would occur most often in internet conferences.
o New module: Wrap.cpp - WrapMessageText() called from MakeReply()
and SaveReply().
o New function in mr2util.cpp: fQuoteLine(). This used to be a simple
macro used in a single place. It was needed in another chunk of
code so I made it a function. This also allows for extensions, as
all MR/2 currently recognizes is a '>' in any of columns 1 through
5. If one's there, I call it a quote line.
o New INI variable: SmartQuoting, defaulting to "YES" but may be
manually set to NO via INI settings. SmartQuoting will "prewrap"
the reply file that MR/2 generates, compensating for the user
initial prefix string. In other words, when you first see the
reply, the original sender's text will be rewrapped and quoted so
as to fit inside the WrapLinesAtColumn defined in MR2.INI.
NOTE: that existing quoted lines ARE NOT REWRAPPED.
ALSO NOTE: SmartQuoting will *not* quote past the first tearline.
If this creates an incovenience, please let me know.
o New INI variable: SmartWrapping, defaulting to "YES" but may be
manually set to NO via INI settings. SmartWrapping will change
the logic used by MR/2 when the edited reply file is saved.
If set to NO, the old wrapping method is used. When left on,
MR/2 will format your NEW text with some intellegence. There is
logic to differentiate between a "hard" and "soft" return, and
soft returns will be removed if necessary.
The old technique would simply insert hard returns to make the line
fit within the declared wrap column. The remaining section of the
original line would often be short (one or two words) and look out
of place, stranded on a line by itself. The new technique attempts
to rewrap the text as a whole and eliminate some of the older
method's ugly results.
NOTE: Quoted lines ARE NOT REWRAPPED, these are always considered
to be prefixed and terminated by hard returns.
o New template sections are definable: NewInternet and NewNetmail
for creating new messages in these private-mail conferences.
o The NewMessage template section was never actually used ... the
"default" direct section was always being used for new messages.
Fixed.
o When editing a message header and the conference is the Internet or
Netmail defined conference, the "private" flag is set to YES.
o INTERNAL: SetSection() moved into mr2util.cpp.
o INTERNAL: AppendFile() - replaced fpreamble with multivalued
"subsection" parameter.
o New template section: `RIME` can be defined for use when replying
to a message in private mode. If a reply is private, and the
source message is determined to be from a RIME source (Postlink
origin is last line of message), then this section is used in
generating the reply. This allows for private, routed mail.
Not sure what to do about "new" private, routed messages.
o New variables: @RimeIDCode@ and @RimeSiteNo@ for use in the RIME
section for "routing" private messages. Will result in blanks unless
replying to a message with a Postlink origin line.
o New Variables:
@RimeIDCode@ and @RimeSiteNo@, defined above.
@Version@ for the MR/2 version.
@SerialNumber@ is replaced by the registered serial number
(empty if not registered).
@UserName@ is replaced by your user names as found in the QWK
control.dat structure.
@IDate@ is replaced with the Internet "Date:" spec, or the
the same results as @MDATE@ if a date string is not
found.
o New template section: `Forward`. If this section is declared, it is
used as the template "prefix" for forwarded messages. NOTE: $Body is
not required, this section is inserted as a whole. If not declared,
the old MR/2 default forward prefix is used.
o See EXAMPLE.TF for examples of all new section capabilities. My name
and email addresses are plastered all through here. You'll want to,
of course, change these to your own :)
o ** DO NOT USE THE ALT-W feature inside the internal editor. **
ALT-R seems to work ok (Read or "insert" file).
Changes included in v1.44x
--------------------------
o When replying into the Internet mail conference, the @INTERNET@
variable will better represent a true Internet address. If the
Reply-To: line isn't present, MR/2 then looks for a "From:" line and
attempts to parse out an address. If no From: line is detected,
MR/2 now looks to the last line of the message. If the sender has
included his address inside of parenthesis, then this is used as the
INTERNET value.
o Added ALT-R and ALT-W support to the internal editor. ALT-R prompts
for a file name, then reads that file into the current cursor
position. ALT-W prompts for a file name and writes the entire edit
buffer to that file (overwritting). I'm not happy this code ... and
it doesn't seem to work that well. I also noticed that the editor
doesn't save files in full text mode (no CR's).
o Modified msg2rep.cmd so that if archiver.id file isn't found, it
defaults to pkzip (configurable). If using no packet entry, no
unarchiver was called, so no archiver.id is created. We need to
be able to specify a packet as a default.
o If a local INI specified a value for Internet and/or Netmail, it
was not cleared when the packet was exitted. If the next packet
opened did not reset these values (or did not have a local INI), then
some erroneous detection of network mail would result. Fixed.
o The internal editor now saves and ALT-W writes files in TEXT mode.
I had to do cr/lf translations myself :(. Writing is OK now, although
I'm still hoping to recognize and write only a block, if something is
highlighted/marked. Reading/importing a text file also works OK, but
since I'm tricking the editor by inserting the file into the internal
editor keyboard buffer, it runs more slowly than it should. Plenty of
room for improvement here :)
THIS IS BUGGY AND MAY GET YANKED !!!!
o I modified the "origin" line finding logic to recognize more common
reader/network tearline styles. For instance, MR/2's own TwoLine
style tagline is now recognized as the beginning of the origin section
(and end of the BODY section).
o INTERNAL: QwkSrch.cpp - modified fopen() call to open custom conference
NDX file. It now prepends the BaseDir and WorkPath. MR2PM, under some
interesting circumstances, would write these files to the wrong
directory. MR/2 classic probably could have, too.
o Qwksrch.cpp - James Schmidt found a couple of problems.
If you set the CHECK= parameter for a custom conference to TO, FROM
and/or SUBJECT, and the source message used mixed case text, a match
would never be found. Fixed. Also, if a message had no detectable
origin line, for some strange reason I called the whole message part
of the origin/tagline area (and it had no "body" section). This is now
reversed - a message with no tearline is all "body" and has no origin
section.
Changes included in v1.43x
--------------------------
FOLKS: Same as before ... 1.42 was kept *very* internal. This version
is still beta stuff.
o Started coding of a REXX script to handle detection of the archiver
used to pack the mail packet. A code is returned that will be used to
branch to the correct command for unpacking. To me, this is the ideal
solution, as it is forever extensible. I've got a scheme for a packer
script (for replies) that will match the unpacker used. I'm new to
REXX coding (this was the perfect excuse to get my feet wet :), so
if anyone wants to make improvements and/or enhancements, I'll welcome
them. (file is named Unqwk.cmd)
o Create msg2rep.cmd - a REXX script for packing replies into a .rep
file based on the method used to unpack the original packet. The source
packet *must* have been unpacked with unqwk.cmd (or, at least, the file
"archiver.id" must exist and identify the correct packer to use). This
script opens up "archiver.id" and extracts the id number. Based on that
number, a branch is made to the correct packet command.
NOTE: You may have to modify these files a tad IF your archivers
are not in your "PATH" environment variable.
NOTE: These command are useful if you use multiple packet sources
(BBS's) that use different compression techniques. If you can get
by with a single zipper/unzipper command, the "old" way is OK, and
in fact, still more efficient. These new files simply provide
additional flexibility for those that frequent a variety of BBS's and
need this functionality.
INSTALLATION: Modify your MR2.INI file to declare:
Zipper=..\msg2rep
Unzipper=..\unqwk
the default .cmd files depend on all archivers being in your "path".
If not, you may modify the path = '' statement at the top of each
file to reflect the correct path, or modify each zipper command
separately to reflect each's valid path.
o INTERNAL: packet_exists() now returns TRUE+1 if a .msg file is found
in the work directory.
o INTERNAL: packet_exists() and remove_packet_exists now use the file
name "control.dat" when checking (and removing) packet exist status.
If you left a no-packet entry session with ALT-X, then tried to go back
in later, MR/2 would not see the existing work (since no messages.dat
file ever existed). Control.dat will always exist if a "packet" is
open.
o The prompt "Work area has an open packet" has been enhanced. You may
still see this prompt. However, if the work directory is found to
contain replies, the prompt will read "Open packet with REPLIES found".
o If an error occurs when unpacking the packet, you will now remain
inside MR/2 to select a new packet, or whatever.
o IF an error occurs while packing replies, the work directory is *not*
purged. Previously, any error while spawning the packer still let the
files be deleted. What happens now is, after the command error is
reported, you're prompted that an open packet with replies exists. The
correct course of action is to go back in the packet (continue working
with the open packet) fast exit with ALT-X and correct the zipper
problem.
o Cleaned up and tested UNQWK.CMD and MSG2REP.CMD. Made sure error codes
were properly returned to MR/2. Seems to work well with the new error
handling described above.
o Added new variable @ISUBJECT@ that resolves to the Internet message
subject line (often different than the QWK "subject" field).
I hope there's a limit to the size of these things ... I only
accomodate "realistic" lengths. We'll see.
o Ooops. New template section logic didn't accomodate new messages
created w/o replying. The template file can now define a section for
`NewMessage`.
o There was a problem with clearing of search results if there was no
local INI when a packet was closed. Previously, hit counters for custom
conferences would not represent the correct counts (counts would not
be cleared for the next packet). Now, all data is cleared (MR2.INI is
always reloaded after a packet is closed).
o The INI parameter SplitLongMessages has been enhanced. YES/NO still
function in the old way; YES will cause messages to be split at 92
lines (90 lines of message, 2 lines for the <cont..d> footer). You
can now, however, place a number here as an option. This sets
splitting to YES, but modifies the line count cutoff to be the specified
value (instead of 92). This value *must* be greater than or equal
to 10 (I've been told of a BBS system that requires no more than 16
lines <really!>, so I figure 10 will be a "safe" minimum). I would
suggest using a reasonable number if you need to change the default
at all.
Changes included in v1.42x
--------------------------
FOLKS!!!: This is truely a beta ... please save your old working
MR/2 version before trying this release. I changed alot of code, and while
eveything appears to be OK so far ... well, we all know better than to
get too relaxed, eh? :)
o New INI parameters V0 through V9 allow you to set user-defined text
strings as template variables. Uses of the strings @V0@ through @V9@
in the tenplate file will be replced with the corresponding defined
text string.
These variables can contain any other variables, including other "V"
variables. This allows for a template to be defined with an
attribution line of @V0@, for example, and this line can be changed
for each BBS by defining different values to V0 in the BBSs local
INI file. The variable replacement is recursive, so any number of
replacemnet levels is possible. It's also possible to confuse the
system by circularly defining variables. My rule: keep it where
it's understandable.
For example, if you add a line to MR2.INI that says "V0=1:157/200"
and your template file starts "...writing from Fidonet address @V0@",
the fidonet node address will be placed in the reply.
o New INI parameters "INTERNET" and "NETMAIL". Use these variables to
declare which conferences, if any, handle Internet mail and Fidonet
netmail, respectively. For example, PC-Ohio has Internet mail in
conference 5 and Fidonet netmail in conference 6. My PC-OHIO.INI
file has:
Internet=5
Netmail=6
Nerd' Nook has Netmail in conference in 139 and no Internet capabilities.
My NerdNook.INI file has the lines:
Internet=-1
Netmail=139
The "-1" tells MR/2 that there is no Internet support, and makes sure
that the Internet section template is not referenced.
o New variables @INTERNET@ and @FIDONET@. The INTERNET variable will
be replaced with the "Reply-to:" address found in Internet mail. The
target address will be stripped of extra verbage and should represent
a correct and "ready-to-go" internet address. The FIDONET variable
will be replaced with the full Fidonet address found in the origin
line of the current message. If either one of these variable can
not be resolved, then an empty string is substituted.
These variables are meant to be used for personal mail addressing
using template "sections". See next blurb.
o Sections in the template file `Internet` and `Netmail`. You may now
allocate "sections" within the template file. Sections are denoted
and named by a string between "accent" characters (`). The first
template file section has no name and will be refered to as the
"default" section. A section ends at the next section name string,
or at the end of the file.
When replying to messages targetted for a conference declared to
be the INTERNET or NETMAIL conferences, MR/2 will switch template
sections to the corresponding section. If ever a section is not found
(by name matching), the default section is used.
This allows for Fidonet netmail and Internet mail to have templates
that correctly set up destination addressing. See the file Example.tf
for examples of sections.
o Mods to reply creation ... removed the beginning CR/LF when creating
the reply file. Made changes to the way the template file handled
CR/LF spacing. Template file's allignment matches reply files
better now (line spacing/blank lines).
o When replying and the FROM user name is an Internet made-up name with
periods imbedded, MR/2 nulls-out the quoting initials. The quoted text
is simply marked with whatever symbol is defined in the INI, usually
a ">" (no initials preceed the ">").
o Oh boy. I modified the Save Reply logic of my QWK class. This is
dangerous, simply because it changes the way replies are saved. I'll
test it thoroughly before letting it out. *Please* report any problems
to me quickly.
The change comes when splitting messages (it may effect more, my hope
is that it doesn't :). IF you're in sending Internet mail or Netmail,
the message "header" will be copied to each split section. In most
cases, this will be the correct function. There may be cases where
it isn't. Yell at me and I'll make it configurable. In other words,
netmail or internet mail that's split will be addressed properly for
all "parts" if addressing is done on the first line(s) of the message.
o When replying into the Fidonet netmail conference, the source message
is first checked to see if the first line starts "From:". If so, and
what follows appears to be a Fidonet node designation (it has a ":" and
a "/"), then this is used as the value of the FIDONET variable.
If not found, the origin line is found. In netmail messages (the ones
I receive at least), there is no origin line, just a "From:" identifier
on the very first line of the message.
Changes included in v1.41x
--------------------------
o Template file processor would lockup if the named template file did
not exist. Same ZTC bug where fopen() doesn't return NULL on error.
Fixed with a call to my file_size() function.
o Taglines now are filtered for variables (e.g., @FROM@).
o Took template file checking one step further - if file name is
empty, processing doesn't even start.
o Distribution packets now contain a FILE_ID.DIZ file to help automate
BBS description entry.
o The initial MR2.INI file now specifies that the INTERNAL editor now
be used as the default. The initial INI editing is still performed
inside the E editor.
Changes included in v1.40x
--------------------------
Not much feedback on the internal editor yet. I used it for a while but
switched back to QEdit. I need file import/export capabilities myself; I'll
be adding that to the internal editor soon.
o Save file wildcarding logic fix. First, if you entered a spec like
"c:\tmp\*" and pressed ENTER, MR/2 would save the message to that file
name, which is illegal. No error would be reported. Now, when ENTER
is pressed and a wildcard is in the file name specified, MR/2 converts
the ENTER into an F2 keypress and shows a file pick list.
o If "C:\tmp\*" was provided as the save file pick list, and a file was
selected from the list, the file name returned would be grunged. The
file name field would be filled with some mutation of the subject line
from the message display. This was due to the missing ".", which I
assumed would always be there. This has been corrected.
o New INI parameter: "TemplateFile". This is another one of those
features that is merely a starting place and has lots of future
expansion possibilities. Place a file name here that defines a
template for all message replies. The reply will created using this
file as a guide BEFORE you edit it. This allows for any necessary
cleanup. The "template" file I used for testing looked like this
(note that the variables used will be documented below):
-------------------------------------------------------------------
Subject: @Subject@
In a message dated @DATE@, @FROM@ said to @TO@:
$BODY
Nick Knight
From @from@ reading @CONFNAME@ (@CONFNUM@) on @BBSID@, to @TO@
Subject: @Subject@
FidoNet: 1:157/2
Internet: nick.knight@pcohio.com
Compuserve: 76066,1240
To First: @tofirst@
To Last: @tolast@
YYMMDD: @yymmdd@
Date: @date@
From First: @fromfirst@
From Last: @FromLast@
Msg Date: @msgdate@
Msg Time: @msgtime@
Day: @Day@
Julian: @Julian@
Time: @Time@
Time 24: @Time24@
AM/PM: @AmPm@
Upper: @Upper@@Subject@ @upper@@day@
Lower: @lOWER@@Subject@ @lower@@day@
Mixed: @mix@@From@ -> @mix@@to@
-------------------------------------------------------------------
The quoted version of the original message is inserted at the $BODY
marker, which is required. NOTE that this is not an appropriate
template file for use within internationally echoed conferences.
It's offered here merely as an example.
The section before the $BODY line allows for an "attribution"
line or section. The area below the $BODY marker works as a
signoff or signature section.
AGAIN, this feature is under development and may be changed in the
next couple of versions. My idea is to add more blocks to this file.
For example, a definition for saved message headers, forwarded
header definition, etc.,. I've got plenty of ideas.
The reply file generated by my test template file looked like:
-----------------------------------------------------------------
Subject: NEW ZOO
In a message dated 03/06/93, DAN HANSON said to ALL:
DH>I saw this in Time Magazine. The New York Bronx Zoo has been
DH>renamed to the International Wildlife Conservation Park. In
<My reply would be inserted here.>
Nick Knight
From DAN HANSON reading Main Board (0) on PC-OHIO, to ALL
Subject: NEW ZOO
FidoNet: 1:157/2
Internet: nick.knight@pcohio.com
Compuserve: 76066,1240
To First: ALL
To Last: ALL
YYMMDD: 930306
Date: 03/06/93
From First: DAN
From Last: HANSON
Msg Date: 03-06-93
Msg Time: 14:21
Day: Saturday
Julian: 065
Time: 03:08
Time 24: 15:08
AM/PM: PM
Upper: NEW ZOO SATURDAY
Lower: new zoo saturday
Mixed: Dan Hanson -> All
-----------------------------------------------------------------
o Variables are available for use in the template file. They are
currently only used by the reply file generator. I'll add the
capability to other areas as I think of them.
The following variables have been provided:
BBSID TIME
CONFNAME TIME24
CONFNUM TO
DATE TOFIRST
DAY TOLAST
FROM YYMMDD
FROMFIRST UPPER
FROMLAST LOWER
MSGDATE MIX
MSGTIME AMPM
SUBJECT JULIAN
The literals UPPER, LOWER and MIX are not actual variables, but
modifiers. They will convert the case of the NEXT variable
replacement to either all upper, all lower or mixed case, respectively.
Mixed case basically lower cases all letters except the first letter
of each word. See the example above for more detail.
o GREATER CHICAGO Online BBS is now offering a service called the
"OS/2 Shareware Author Support Program". They are willing to handle
Visa/Mastercard charges for shareware authors. Starting immediately,
MR/2 may be registered by "charging" it! You can register online by
calling Greater Chicago Online BBS at (708) 895-4042. Alternatively,
you can provide your charge card information to me directly on the
MR/2 registration form provided (register.doc). There is a $2.00
handling fee associated with all charged registrations, making the
total charged registration cost $22.00 US for domestic orders.
Shareware authors may get more information on the OS/2 Shareware
Author Support Program by calling the GREATER CHICAGO Online BBS at
the number above (leave a note to the sysop) or by Compuserve mail
at 70404,3277. Fidonet netmail can be sent to Bill Cook at 1:115/895.
KNOWN BUGS AND STUFF
====================
The TEMPORARY directory MUST remain a subdirectory of the MR2 home dir.
You can't use "\" or "&" as part of any search text (since MR/2 uses them
as delimiters).
You can't cancel a search until the first "hit" is displayed. This is
particularly irritating when soundex searching, since soundexing is
noticably slower.
If you set "SkipReadMessages" to true, you cannot gain access to a
conferences where all messages have previously been read.
Other frills that have not yet been addressed: Bulk marking,
twit filter, function key assigning. There are probably others.
Feel free to bombard me with requests.
************************************************************************
NOTE: READ.ME format has changed! Go to the BEGINNING of the file for
the most recent changes!!!
************************************************************************