NewsWatcher Mod History

November 1, 1993

John Norstad

Academic Computing and Network Services

Northwestern University

j-norstad@nwu.edu

This document gives a detailed list of all the changes to NewsWatcher
since version 1.0.2.

\[Comments inside brackets like this give details for programmers.\]

\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\--

Version 2.0d17

November 1, 1993

\-- Errors fixed.

The new version fixes an error which could cause crashes when expanding
threads in subject windows. Thanks to Dan Murphy, Stephan Somogyi, and
Marshall Clow for reporting this error.

The new version fixes an error under A/UX with the "Get Group List from
Host" command. Under A/UX, this command resulted in bogus "Lost
Connection to Server" error messages. Thanks to Ole Solberg for helping
to investigate and fix this error.

The new version should fix another error under A/UX. The problem in the
old version was with the "Path" and "Message-ID" header lines in
postings, which sometimes contained garbage characters following the
Mac's domain name. This fix has not been tested. If you use NewsWatcher
with A/UX, and if you still have this problem with the new version,
please let me know.

In some circumstances, under System 6, the old version would crash
instead of presenting the alert telling you that NewsWatcher requires
System 7. This error is fixed.

\-- New feature.

Network managers can now create a customized version of NewsWatcher for
distribution at their site. The customized version contains
preconfigured news and mail server addresses and server options. At NU,
the version of NewsWatcher we distribute for local use on our Plato file
server is preconfigured, while the version we distribute on
ftp.acns.nwu.edu is a "generic" version which is not preconfigured. For
details on how to do this, see the new "Appendix F - Customizing
NewsWatcher" in the user document.

\-- User document changes.

There are several changes to the user document, in an attempt to clarify
confusing issues or provide answers to frequently asked questions.

\-- \[Internal changes.\]

I am now using Think C 6.0.1 for NewsWatcher development. 6.0.1 fixes
the smart link problem. The application is now built with the smart link
option turned on, which decreases the size of the application file by
about 23K.

I am now using the latest and greatest MacTCP header files and dnr.c
file (from the August 1993 Developer's CD). I had to make two changes to
dnr.c to get it to compile with Think C 6.0.1.

\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\--

Version 2.0d16

September 21, 1993

The most important change in version 2.0d16 is that it fixes a problem
which sometimes caused crashes when opening subject windows. There are a
few other changes and minor new features.

Version 2.0d15 contained an error which caused infrequent crashes when
opening subject windows (usually bus errors). The error is fixed. Thanks
to the many people who reported this problem.

\[In subject.c/OpenGroupCell, I created an array of pointers into a
relocatable block, then unlocked the block, then called toolbox routines
which can move memory, then used the pointer array. Oops. Very stupid.
This was a hard one to find. Heap scramble didn't catch it, because even
when the block moved, the program still usually continued to work
fine.\]

In response to popular demand, and with some reluctance, I added two new
checkbox options to the "General Options" preferences topic: "Zoom
windows" and "Auto save on quit". Both of these new options are off by
default.

If you turn on the "Zoom windows" option, NewsWatcher automatically
rezooms windows whenever you expand a thread, show an article header,
subscribe to a new group, or change the font or size of a window. Note
that new windows are always automatically zoomed, no matter how this
option is set. The option only affects rezooming of windows after
actions which change their contents. Also note that with the exception
of font/size changes, this option only makes windows bigger, never
smaller.

If you turn on the "Auto save on quit" option, NewsWatcher automatically
saves any changed old user group list windows when you quit the program.
The usual "Save changes" alert is not presented.

One sick ANU server was sending garbage characters in subject lines.
This made NewsWatcher very confused, resulting in bad saved user group
list files or crashes. The errors this sick server uncovered in
NewsWatcher have been fixed. Thanks to Stephan Somogyi for reporting and
helping to investigate this problem.

"Restricted" groups are now treated the same as deleted groups. In
particular, when you open a user group list, if one of the groups is
restricted, it is now removed from your user group list. In the old
version, a server error message was presented, and the group list was
not opened. Thanks to Wayne Westmoreland and Paul E. Jacoby for
reporting this problem.

\[Whenever a GROUP command is sent to the server, the new version treats
the server error code 502 (access restriction or permission denied) the
same as 411 (no such group).\]

\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\--

Version 2.0d15

August 31, 1993

Version 2.0d14 contained a bad error which caused crashes in the
Preferences dialog. 2.0d15 fixes this error. Thanks to John Werner for
finding the error.

\[The MDEF id for the Topic popup menu resource somehow got changed from
0 to 1.\]

\[The resources for NewsWatcher are now split into two files.
NewsWatcher.rsrc contains the main resources. Filters.rsrc inside the
"Filtering Code" folder contains the resources for John Werner's
inactive filtering code. Both of these ".rsrc" files are part of the
Think C 6.0 NewsWatcher.π project. John and I did this to make it easier
for John to work on his filtering code while I simultaneously work on
the rest of the code.\]

\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\--

Version 2.0d14

August 30, 1993

Version 2.0d14 introduces an important new preferences topic, fixes
several errors reported by users, and adds a few minor new features.

\-- New "Server Options" preferences topic.

This topic contains four checkbox options which make NewsWatcher faster.
Unfortunately, the options don't work with all servers. The default
value for all four options is off. With these default values,
NewsWatcher should work with almost any news server.

In previous versions, NewsWatcher attempted to figure out some of these
options automatically. This is not possible for some of the options, and
the way NewsWatcher decided which options should be turned on was not
always correct. As much as I dislike these kind of very technical and
very obscure preference settings, I don't see any good way to avoid
them.

You need to know what kind of news server you are using. To find out
this information, use the "Get Server Info" command in the Special menu.
If your server is identified as "NNTP", you are using what is called the
"reference implementation" server. "INN" and "ANU" are other popular
kinds of servers.

The options are described briefly below. See Appendix E of the user
document for more detailed discussions.

1\. Use batched GROUP commands.

This is by far the most important of the four server options. It has a
major impact on the performance of NewsWatcher. Most people can and
should turn on this option.

This option makes the check for new articles operation much faster.
Typically, checking for new articles is 4 to 5 times faster when the
option is turned on. This operation is performed whenever you open a
user group list file, whenever you fetch a newsrc file from a remote
host, and whenever you use the "Check for New Articles" command.

You should leave this option turned off if you are using version 1.5.10
of the reference implementation server (NNTP). Otherwise, try turning
the option on. If NewsWatcher hangs forever when you try to open a user
group list or check for new articles, turn the option off. (The exact
symptom of the problem is that the status window appears with the
message "Checking for new articles" and the beachball cursor spins until
you cancel the operation.)

If you are using version 1.5.10 of the reference implementation server,
you should encourage your local news administrator to upgrade to version
1.5.11 or switch to INN.

2\. Use XPAT command for searches.

This option makes the "Search Selected Groups" command significantly
faster.

You should turn this option on only if you are using an INN server and
your server administrator has installed the special patch included in
Appendix E of the user document.

3\. Don't open new connection when checking for new articles.

This option makes the "Check for New Articles" command a little bit
faster.

You should turn this option on if you are using an INN server. Leave it
turned off if you are using the reference implementation server (NNTP).

With other kinds of servers, try turning the option on. If the "Check
for New Articles" command never finds any new articles, turn the option
off.

4\. Don't send MODE READER command.

This option makes program startup a little bit faster.

Most people should be able to turn on this option. With some INN
servers, you will get server error messages when you try to read or post
articles. If this happens, turn the option off.

\-- Errors fixed.

With some servers, the old version of NewsWatcher would hang forever
whenever you tried to open a user group list or check for new articles.
The status window would appear with the message "Checking for new
articles" and the beachball cursor would spin forever. You had to cancel
the operation, and NewsWatcher was unusable. This problem is fixed.
Thanks to Carl-Erik Lundgren for helping to investigate the problem. The
new logging facility led to the solution to this problem.

\[When checking for new articles, NewsWatcher must send a sequence of
GROUP commands to the server to get the current \[low,high\] article
range for each subscribed group. To significantly improve performance,
the old version sent all the GROUP commands in a single buffer, then
gathered together the responses as they arrived, rather than sending the
commands one at a time. Sending the commands in a batch is typically 4-5
times faster than sending them one at a time. This worked fine for most
people with most servers. With version 1.5.10 of the reference
implementation server, however, the server only responded to the first
GROUP command in the batch, and NewsWatcher hung waiting for the other
responses to arrive. In the new version, by default, NewsWatcher sends
the GROUP commands one at a time. This is much slower, but it works with
all servers. If you use a server which does accept batched GROUP
commands, you should turn on the new "Use batched GROUP commands"
preference to get the much faster response time.\]

With large newsrc files fetched from remote hosts, NewsWatcher sometimes
wrote garbage and/or extra blank lines when sending the newsrc file back
to the remote host. These problems have been fixed. Thanks to JQ Johnson
for reporting the problems and helping to investigate them. The new
logging facility was a big help in solving these problems.

\[One of these errors was due to a typical beginners mistake: I forgot
to lock the source handle before calling HandAndHand. It seems rather
stupid for the Mac OS to require this, but I can attest that it is
indeed necessary.\]

The old version could crash or have other problems if it encountered a
subject or author in a header line or a group name longer than 255
characters. Thanks to Ken J. Lafredo for reporting this problem.

Pasting server domain names into the preferences dialog or the initial
server information dialog did not work properly. Thanks to David Inman
and the many other people who reported this problem.

The old version reported a syntax error for newsrc lines with article
read ranges which began with article number 0. The new version treats a
read range 0-x the same as 1-x. Thanks to Stephan Somogyi for reporting
this problem.

\[I still don't know how these bogus article number ranges got into
Stephan's saved user group list file, and that bothers me.\]

Peter DiCamillo reported several errors which have been fixed. Thanks,
Peter!

\-- New features and changes to existing features.

The old "Zoom windows" option has been removed, and we have changed the
way NewsWatcher zooms windows. In the new version, all windows are
automatically zoomed when they are opened, but they are not
automatically zoomed later when their contents change. For example, if
you subscribe to a new group, NewsWatcher no longer automatically
rezooms your user group list window. Similarly, if you expand a thread,
NewsWatcher no longer automatically rezooms the subject window.

The old "Use XPAT if available" option in the "General Options"
preference topic has been moved to the new "Server Options" topic and
renamed "Use XPAT command for searches".

Article windows now display the date and time the article was posted in
your local time, in localized Macintosh date/time format, in the panel
area at the top of the window. In the old version, the date and time
were displayed in the panel area in the same format they appeared in the
"Date" message header line \[RFC822 format\]. This new date/time
reformatting is only done if you have installed and configured the Map
control panel. Thanks to John Werner for contributing the code to do
this. If you want to see the untranslated "Date" header line, use the
"Show Header" command.

The about box now uses a read-only text field with a scroll bar, and it
uses a regular OK button. The about box text has been expanded.

The \"Get Server Info\" command now reports the following additional
information: the date and time, the NewsWatcher version number, and the
news server domain name and IP address.

The log file now includes the NewsWatcher version number.

\-- \[Internal changes\]

I am now using Symantec's Think C 6.0 to do NewsWatcher development.
Unfortunately, the "Smart Link" option in Think C 6.0 sometimes causes
garbage to be written in the jump table, which can cause NewsWatcher to
crash, so remember to turn off this option when building the NewsWatcher
application.

The preferences dialog now uses a single dialog with multiple item lists
for the different topics, instead of separate topic dialogs. I use the
System 7 AppendDITL and ShortenDITL Dialog Manager procedures. This
avoids a problem with multiple dialogs sharing the same popup menu,
which doesn't work properly in all circumstances. This also results in
less redrawing in the dialog window when topics are switched.

\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\--

Version 2.0d13

August 16, 1993

This version fixes yet another set of problems reported by users.

If no preferences file exists at startup, NewsWatcher asks you to enter
your news and mail server addresses. One of the changes in 2.0d12 could
cause NewsWatcher to crash at this point. Thanks to Peter DiCamillo for
reporting this problem.

If NewsWatcher does not successfully establish a connection to your news
server at startup, it lets you modify your preferences, but that\'s all.
One of the changes in 2.0d12 caused NewsWatcher to crash when you quit
the program in this situation. Thanks to the many people who reported
this problem.

2.0d13 checks for new groups at startup before opening user group list
files or autofetching a newsrc file from a remote host. This solves the
following problem reported by Robin Walker: You are using both a UNIX
newsreader and NewsWatcher, using a shared newsrc file. You use the UNIX
newsreader and subscribe to some new groups. You then run NewsWatcher.
In the old version, the newsrc was fetched before new groups were
checked, and NewsWatcher deleted the new groups from the newsrc file
because they didn\'t appear in

NewsWatcher\'s saved full group list. NewsWatcher then checked for new
groups, and displayed the new groups in its New Groups window. You had
to subscribe to the new groups all over again at this point.

Because of the way news servers work, in some situations, it\'s possible
for NewsWatcher to think that there are unread articles in a group even
when there aren\'t really any new articles (e.g., when articles are
canceled). When you try to open such a group, NewsWatcher correctly
informs you that the group was not opened because it didn\'t contain any
unread articles. However, the old version did not properly remember that
it had learned this new information, and it did not save your user group
list when you closed it later. Thanks to Wayne Westmoreland for
reporting this problem.

If groups are deleted for some reason when a user group list is opened,
the old version did not properly remember that the group list was
modified, and did not save it when you closed the window later.

2.0d13 notifies you if you have logging turned on and there\'s a problem
opening the log file.

\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\--

Version 2.0d12

August 11, 1993

This version introduces yet another collection of miscellaneous fixes
and minor new features.

IMPORTANT: If you use the keypad shortcuts, read the next paragraph
carefully!

Several new users wrote saying that they tried to use keypad keys
expecting them to do the usual sorts of things (especially the Enter
key), and were very surprised when bizarre other things happened
instead. They had not yet read the user document and learned about the
keypad shortcuts. Our keypad shortcuts, as useful and beloved as they
are, are indeed highly non-standard for the Macintosh. To avoid this
kind of beginner confusion, there is a new checkbox named \"Keypad
shortcuts\" in the \"General Options\" preferences topic. This
preference is off initially. You have to turn it on to use the
shortcuts. When the preference is off, the keypad behaves as in
\"normal\" Mac programs.

The \"Save Password\" option in the \"Remote Host Information\"
preferences topic did not work properly. The problem has been fixed. It
used to work in 2.0d10, and I have no idea how it got broken in 2.0d11.
I sometimes think demons sneak onto my Mac while I\'m sleeping and make
random changes to my code. Thanks to the many people who reported the
problem.

NewsWatcher was once again not closing connections properly under A/UX.
It has once again been fixed (I hope). Thanks to Gerard Brochu for
finding the error and telling me how to fix it.

The Edit menu commands Cut, Copy, Paste, Clear, and Select All now work
properly with all dialog text fields (e.g., you can now paste in a
password and have bullets appear instead of the plain text). The
commands are also properly enabled and disabled (e.g., Cut, Copy, and
Clear are enabled if and only if something is selected).

The server information dialog now uses a read only text field. If there
is more text than will fit in the field, a scroll bar lets you scroll
through the information. Usually, with the reference implementation
server, no scroll bar is needed, while with INN we do need a scroll bar.

\[See the many changes to our humongous and very grungy universal dialog
filter in dlgutil.c.\]

The \"Get Server Info\" command sometimes did not properly wait until
all the information arrived from the server. This caused NewsWatcher to
get rather spectacularly confused when processing subsequent
transactions with the news server. This problem has been fixed. Thanks
to Kenneth Knight for reporting this.

In some situations, when NewsWatcher wrote a user group list or sent a
newsrc file to a remote host, some of the information for some of the
groups was not saved properly. When you later tried to read the user
group list or get the newsrc file, the group was deleted from the user
group list. This has been fixed.

\[If none of the articles in the group had ever been expired, so the low
article number for the group on the server was 1, and if you had read
some of the articles in the group, and if you had NOT read article
number 1, then a bogus initial comma was written preceding the first
read article range. E.g., \"groupname: ,18-42\". This is my second
problem with commas in newsrc files. I should have paid more attention
to grammar in school.\]

When NewsWatcher opened a saved user group list file, or when you got a
newsrc file from a remote host, if a group was present on NewsWatcher\'s
full group list, but the group had been deleted on the server,
NewsWatcher did not properly delete the group from the user group list,
and when the user group list was later saved or sent back to the host,
bogus information was saved for the group. This problem has been fixed.

Thanks to JQ Johnson for reporting these last two problems.

Programs are not supposed to open dialog windows when they are in the
background. NewsWatcher violated this rule, and got confused as a result
when you brought it to the foreground. In 2.0d12, NewsWatcher waits
until it is brought to the foreground before presenting any dialogs. The
user is alerted that NewsWatcher requires attention via a small blinking
icon in the far right hand side of the menu bar, and via a small diamond
next to the program name in the Application menu. Thanks to Russell E
Owen for reporting this problem.

Some people like to select all of their subscribed groups, press the
Return key to open all of them at once, and work on something else while
NewsWatcher gets all the subjects and authors for all the groups in the
background. In the previous version, if any of the groups had no unread
articles, an alert was presented informing you of this fact. Russell E
Owen found this annoying and asked that it be removed. In the new
version, an alert is presented only if all the selected groups have no
unread articles. A warning to people who do this: watch out for memory
problems. If you have lots of groups with lots of unread articles, you
might run out of memory. NewsWatcher does not yet do any memory error
checking, and it will probably crash and die a horrible death.

NewsWatcher did not work properly together with the UNIX \"rn\" news
reader if you used a shared newsrc file which contained empty groups
(groups with no

articles on the server). Thanks to Bill Lewandowski for identifying this
problem and helping to investigate it.

\[This is quite complicated, and is best illustrated by an example.
Suppose, for example, group g is empty, and the shared newsrc file has
the line \"groupname: 1-50\" for group g. This line indicates that you
have read articles 1 through 50 in the group. When NewsWatcher reads the
newsrc file, it sends a GROUP command to the server to get the
\[low,high\] article range for the group. On the active file, the
\[low,high\] article range for g is \[51,50\]. However, the GROUP
command returns a \[low,high\] article range of \[0,0\], which is where
the problem starts (at least with INN this is what happens). The old
version of NewsWatcher recorded 0 as the high article number for the
group in its internal data structures, and set its internal \[low,high\]
range for the group to \[1,0\]. As a result, when the newsrc was
rewritten, it was written as just \"groupname:\", with no article list.
This reportedly confuses rn (but not nn or NewsWatcher itself). Go
figure. The new version has special case code to work around this
problem. If the GROUP command returns a \[low,high\] range of \[0,0\],
then NewsWatcher uses the highest read article number on the newsrc line
for the group as the \"real\" high article number in the group, and sets
its internal \[low,high\] range for the group to \[high+1,high\] instead
of \[1,0\]. In our example, when the newsrc is later rewritten,
NewsWatcher writes \"groupName: 1-50\", which is the same as how the
line looked on the original newsrc. This keeps rn happy.\]

NewsWatcher now obscures the cursor whenever a non-command key is
pressed. Thanks to Jonathan D Baumgartner for suggesting this.

I continue to get reports from a few people that NewsWatcher hangs
forever whenever it checks for new groups. They have to cancel the
operation. I still haven\'t found the cause of this problem, even after
staring at the relevant sections of my code for hours. Also, I have had
a number of reports of a variety of problems reading and writing newsrc
files. I fixed many of these problems in 2.0d12, but I\'m not convinced
that they are all solved.

These two problems are examples of the worse kind of problems in
programs - problems which the author cannot reproduce on his own Mac,
and which he cannot figure out just by looking at his code.

In an attempt to help solve these problems and any future similar
problems which might occur, I have added a logging facility to
NewsWatcher. To turn on logging, use the new \"Log actions to file\"
checkbox in the \"General Options\" preference topic. NewsWatcher logs
detailed diagnostic information to the file named \"NewsWatcher Log\" in
the same folder as the NewsWatcher program. You can then send me the log
via electronic mail along with your problem report.

You should not turn on this new logging option unless we ask you to do
it to help us investigate a problem you are having. It slows down the
program and consumes disk space. You are welcome to turn it on if you
are curious, but remember to turn it off after playing with it!

In 2.0d12, I have added detailed log messages for the various stages of
the check for new articles operation, and detailed log messages for the
various stages of reading and writing newsrc files.

\[All logging is handled by the new module log.c.\]

When a user group list is read from disk or fetched from a remote host,
NewsWatcher automatically deletes \"bad\" groups from the list. There
are three

reasons why a group might be \"bad\": If there\'s a syntax error in the
saved information for the group, if the group is not present in
NewsWatcher\'s full group list, or if the group has been deleted on the
news server. 2.0d12 now reports all such deleted groups to the user. The
report is presented in a dialog window after the group list window has
been opened. The dialog window contains a read-only text field with a
scroll bar (if necessary) which lists all the deleted groups and the
reason each one was deleted.

The \"Check for Deleted Groups\" command in the Special menu now
displays a list of all the deleted groups, in a dialog containing a
read-only text field with scroll bar (if necessary).

\[The new code for read-only text fields with scroll bars in our
universal dialog filter came in handy for these last two items. It now
takes only a few lines of code to present such a dialog.\]

When NewsWatcher is busy performing some operation, the cursor is a
spinning beachball, and there may or may not be a status window. 2.0d12
now properly handles the menu bar during these busy operations. The
NewsWatcher menus are all disabled, but the system Help and Application
menus are enabled and may be used.

The position of the full group list window is now saved and restored
properly between runs of the program.

\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\--

Version 2.0d11

July 29, 1993

This version introduces miscellaneous minor error corrections, feature
enhancements, and new features. Most of these changes are in response to
error reports and suggestions from users.

Although the new version of NewsWatcher seems to be working quite well
for most people, I have received reports from a number of people of a
wide variety of problems: crashes, hangs, damaged user group list files,
erratic behavour, etc. I suspect that there is a memory management or
similar insidious error somewhere in the program. I have not yet found
this error, although I continue to look for it.

The Subscribe command in the Special menu caused crashes, although
subscribing by dragging groups worked fine. Thanks to John Werner for
fixing this.

We now permit people to use the program (read and post news) when an
error occurs during a startup check for new groups. The old version
would only let the user change preferences and admire the about box in
this situation. These errors are almost always caused by a broken news
server, and the user should nag his or her news administrator to get the
problem fixed. See Appendix E of the user document for details. The
program still issues the usual server error message alert, and will
issue this alert each time the program is run, unless the user turns off
the \"Check for new groups at startup\" preference. If this happens to
you, it\'s important to have your administrator fix your server, because
otherwise you will never be notified when new groups appear.

Users find server error messages from the news server confusing. They
often think these messages mean that something is wrong with
NewsWatcher, and write

to me. I have to patiently (and sometimes, I confess, not so patiently)
tell them that there\'s nothing I can do. In the new version, the news
server error message alert includes additional information about the
error, and includes a new paragraph of explanatory text telling people
to report the error to their local administrator and to show him or her
Appendix E of the user document, which contains detailed notes for
server administrators. People can copy all the server error information
to the clipboard and then paste it into (for example) a mail message to
their administrator. To see a sample of the new server error alert, use
the following magic cookie: open the about box and type Command-1.

There is a new command \"Get Server Info\" in the Special menu designed
to help when investigating NewsWatcher problems. This command displays
the server name and version number information and a list of all the
NNTP commands supported by the server. This information can be copied to
the clipboard and then pasted into a mail message.

\[The information displayed by this new command consists of the initial
\"hello\" message issued by the server plus the response sent by the
server to a HELP command. The dialog window isn\'t very pretty in this
version - I will improve it to use a read-only text field with a scroll
bar. I didn\'t quite have enough time to get it perfect for this
release.\]

With the new \"Check for New Articles\" command introduced in version
2.0d9, people can and do keep NewsWatcher open all the time. It\'s not a
good idea for large numbers of NewsWatcher users to keep open server
connections when most of them are idle at any given time. This could
quickly use up all the process slots and swap space on typical UNIX news
servers. To alleviate this problem, NewsWatcher now closes the news
server connection after 10 minutes of idle time. A new connection is
automatically opened when it is needed. No alerts or status windows are
presented, so this process is invisible to the user. The 10 minute idle
time is not configurable. There is no significant benefit in keeping an
idle connection open longer, and it could cause significant harm.

\[These new automatic server connection close operations are done in the
background, using asynchronous MacTCP device driver PBControl calls with
chained interrupt level completion routines. Thanks to Steve Dorner for
contributing this code. We can\'t use our synchronous stream closing
code here because this automatic close cannot be permitted to interfere
with user actions in the foreground.\]

Sending mail messages and getting and putting newsrc files to remote
hosts sometimes took a long time, especially over dialup connections.
This problem has been fixed.

\[The problem was due to an error in MacTCP when closing connections. I
found a workaround which fixes the problem. The basic problem is that
MacTCP gets confused if both sides of a connection attempt to close at
the same time, and a close operation which normally only takes a second
or two can take 20-40 seconds. The workaround for closing NewsWatcher\'s
SMTP connections and FTP control connections is to wait for the other
side to close first before closing the NewsWatcher side. Also, in the
previous version, NewsWatcher was aborting the NNTP connection instead
of closing it gracefully to avoid the long delays. In the new version,
all connections are closed gracefully.\]

It was very difficult to select the Desktop level as your default folder
for saving text files. I have designed a new \"select folder\" dialog
which makes this easier.

\[My new folder selection dialog doesn\'t follow Apple\'s new guidelines
for such dialogs. Unfortunately, I couldn\'t figure out how people are
supposed to select the desktop folder with Apple\'s guidelines, so I had
to make up my own.\]

NewsWatcher now adds a \"\-- \" separator line before your signature in
all message windows. Although this is not required by any standards, it
is a common convention. If you don\'t like this, turn off the new
checkbox option in the \"Signature\" topic in the preferences dialog.

The new version checks all \"NewsWatcher Preferences\" files for the
proper creator and type, not just ones in the Preferences folder.

A few people reported problems with NewsWatcher \"missing double
clicks\". I changed some code which I hope will fix this problem. Let me
know if it doesn\'t.

The old version did not properly locate old \"News Prefs\" files from
versions 1.3d8 and earlier in the System Folder. It was supposed to move
them into the Preferences folder and rename them \"NewsWatcher
Preferences\". This error has been fixed.

\[Someone at Symantec should fix the Think Reference page for
FSpCatMove - the \"dest\" parameter is not a pointer to \"the file\'s
location and name after the move\", it is a pointer to \"the file\'s
destination folder\".\]

We now check the saved text window and list window fonts at program
startup. If a font doesn\'t exist, Monaco is used, and the following
alert is presented:

The font \"xxxxxxx\" does not exist on this system. Monaco will

be used instead.

The default for the \"Distribution\" header line on postings is now no
\"Distribution\" header instead of \"world\" distribution. This tells
the news server to use its default distribution for the group, which is
the correct thing to do.

The \"Check for New Articles\" command now autoscrolls the user group
window to bring the selected group into view if necessary.

\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\--

Version 2.0d10

July 23, 1993

This version fixes several errors and problems in version 2.0d9 and adds
just a few very small new features.

Version 2.0d9 had a really horrible error which could lead to corrupt
user

group lists, and which could cause you to miss news or have entire
groups

dropped from your user group lists unceremoniously and without warning.

\[The error was that, when writing a newsrc file, NewsWatcher sometimes
did not write the comma separating the last pair of article ranges. This
hopelessly confused the poor program when it later tried to read the
newsrc file back in.\]

The old version would not let you even read news if the news server did
not permit posting. This was more than a bit stupid.

\[The program now checks for the server code 201 in addition to 200 in
the initial hello message.\]

Several people reported that the \"Check for New Articles\" command
didn\'t work. The status window appeared for a few seconds, which is
normal, but no new articles were found when there really were new
articles. I cannot reproduce this problem with our INN server at NU, but
I made a change which I hope will fix the problem. Let me know if you
still have problems.

\[This is a hack piled on top of a conjecture. It it does indeed work, I
hope we can find some way to do it more cleanly in the future. The new
version of NewsWatcher uses the GROUP command when checking for new
groups. The server replies with the current \[low,high\] article range
for the group. This information is obtained from the server\'s \"active
file\". My theory is that the reference implementation server only reads
the active file when the client first connects, and never updates its
internal copy, so the \[low,high\] range returned in response to a GROUP
command is stale. INN, on the other hand, always returns the current
\[low,high\] range. This theory explains the reported behavior
perfectly, so it might even be correct. Version 2.0d10 does the
following: When it first connects to the server, the server sends back a
\"hello\" message. NewsWatcher searches this message for the substring
\"INN\" to figure out whether or not it is talking to an INN server.
Later, whenever a GROUP command is sent to the server, if it\'s not INN,
NewsWatcher closes the server connection and opens a new one. This
forces non-INN servers to reread the active file.\]

The new version did not work with some INN servers at some sites.

\[With INN, clients can either be \"news readers\" like NewsWatcher or
\"news feeders\" (other server sites with whom the server exchanges
news). The news administrator can configure INN to specify which clients
are readers and which are feeders. Unfortunately, many INN servers are
not configured properly, and Macs which connect are erroneously
considered to be feeders instead of readers, and NewsWatcher doesn\'t
work. Fortunately, the client can send a special \"MODE READER\" command
to tell INN it\'s a reader, not a feeder. Unfortunately, this is not a
standard NNTP command, it only makes sense to INN, and other servers
think it\'s gobbledygook. Fortunately, because of the hack described
above, NewsWatcher now knows whether or not it\'s talking to an INN
server. If NewsWatcher determines that it is talking to an INN server,
it sends a \"MODE READER\" command. Are you confused yet? I am.\]

(Did you know that Microsoft\'s spelling dictionary for Word 4 does NOT
contain \"substring\", but DOES contain \"gobbledygook\"? Go figure.)

The new preference for setting a default folder for saving text files
conflicted with at least one Standard File enhancement extension
(\"Default Folder\"). Another user raised some valid objections to the
way the new feature is implemented altogether. Indeed, forcing
non-standard behaviour down the user\'s throat is presumptuous. To solve
these problems, there is a new checkbox which turns the entire feature
on and off. The default value is off. When the checkbox is off,
NewsWatcher does not attempt to coerce any kind of default folder, and
the standard save file dialog works in the usual way as in old
NewsWatcher versions. People who use the conflicting \"Default Folder\"

extension or who do not like the feature should simply leave the
checkbox turned off. People who do like the feature have to turn on the
checkbox.

A few people reported problems with the \"Send Group List to Host\" and
\"Get Group List from Host\" commands. In particular, I got a report of
\"connection reset by peer\" server errors, and a report of errors under
A/UX. I cannot reproduce these problems, but I made some changes which
should fix them. Let me know if you still have problems.

\[I put the code back the way it was in 1.3d8.\]

When dragging groups, if you dragged the group to the top of a user
group list, then moved the mouse out of the window to the left or right,
then released the mouse button, the group was improperly moved or
subscribed to, and the window was left in an inconsistent state.

If you set one of the fonts to Chicago, then quit, then reran the
program, an alert appeared telling you that the system did not have the
Chicago font and that Monaco would be used instead.

\[GetFNum returns 0 if a font doesn't exist. Unfortunately, it also
returns 0 for Chicago! Nice.\]

When opening a large subject window with more total articles than the
\"maximum number of articles to fetch\" preference, NewsWatcher was
getting the proper articles and the proper number of articles from the
server (only the most recent ones were fetched, which is how it\'s
supposed to work). However, the unread article count in the group window
was not updated properly - frequently you would see the count set to
9999.

If you canceled a save file dialog when saving a user group list, an
alert appeared telling you that the file could not be saved because of
an error.

You can now specify the path name of your \".newsrc\" file with the
\"Send Group List to Host\" and \"Get Group List from Host\" commands.
Some news systems use a different path name. \".newsrc\" is the default.

After a \"Check for New Articles\" command, the new version now selects
the first group with unread messages (if any).

\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\--

Version 2.0d9

July 21, 1993

This version introduces many changes and new features. It incorporates a
large amount of code contributed by John Werner of UC Berkeley. Many
thanks, John! Other contributors include Steve Klingsporn, Peter Lewis
and Howard Rafal.

\-- Version number changed from 1.3 to 2.0.

The new version of NewsWatcher we are working on now will be version
number 2.0 rather than 1.3. This version is 2.0d9.

\-- System 7 required.

Starting with this version, NewsWatcher requires System 7.0 or later.

\-- New user document.

The user document is new and improved. It is nowhere near finished yet,
but it is much better than the old version.

\-- Improved performance for dialup users.

NewsWatcher no longer downloads the full group list from the news server
each time the program is run. Instead, it uses the full group list saved
on the preferences file.

This dramatically improves startup time with dialup connections. For
example, with a 14.4K V.42bis MacSLIP connection on a PowerBook 180 with
Apple\'s Express Modem, with 3000 groups and 30 subscribed groups, using
a fast INN 1.4 news server, startup time has been decreased from about 1
minute to about 10 seconds.

NewsWatcher still downloads the full group list the very first time the
program is run (no prefs file found). This takes a long time over a
dialup connection. After this first time, however, the full group list
is not downloaded again unless explicitly requested by the user.

The first time you run the new version 2.0d9 after using previous
versions, you will also notice that it takes a long time to do the check
for new groups. Don\'t worry - this long delay only happens the first
time you run the new version.

\[This new feature required major architectural changes. In the old
version, during startup, NewsWatcher sent a LIST command to the NNTP
server to get a fresh copy of the full group list. In addition to
returning the names of the groups, the LIST command also returns the
current \[low,high\] article range for each group. NewsWatcher needs
these article ranges in the following contexts: whenever a user group
list is opened or fetched from a UNIX host, whenever a new group is
subscribed to, whenever a Search command is performed, and whenever a
group is opened from the full group list or new groups list windows. The
new version sends individual GROUP commands to the server to get the
article range information in all these contexts.\]

\-- Three new commands for managing the full group list.

In the old version, NewsWatcher fetched a fresh new full group list from
the server each time it was run. Among other things, this guaranteed
that the real full group list on the server and the full group list
presented to the user by NewsWatcher were always reasonably
synchronized. In the new version, this goal is no longer so easily
achieved. Three new commands in the Special menu deal with this
synchronization problem:

\- Check for New Groups.

This command checks to see if any new groups have been created since the
last time the check was done. If any new groups have been created, they
are added to the full group list. In addition, just the new groups are
shown to the user

in a \"New Groups\" window. You can open the new groups, subscribe to
them, or just close the new groups window if you aren\'t interested in
any of them. In the old version, this check for new groups was
automatically done by NewsWatcher each time the program was run. In the
new version, the user can specify a preference to control whether or not
NewsWatcher checks for new groups at startup. If the preference is on
(the default), the new version behaves just like the old version (except
it\'s faster). If the preference is turned off, NewsWatcher checks for
new groups only when you explicitly select the \"Check for New Groups\"
command. Turning off the preference speeds up startup a little bit.

Most people will want to check for new groups fairly frequently, either
manually or automatically at each startup. This operation is normally
quite fast, even over dialup connections.

\[In the old version, the new groups check was done by comparing the new
full group list as downloaded from the server to the old full group list
saved on the preferences file. This check was always done automatically
at startup. Since we no longer download a new full group list from the
server at startup, we have do this check differently.

The new version uses the NEWGROUPS NNTP command to check for new groups.
This command has date and time parameters to tell the server to only
return information for groups created since the given date and time.
NewsWatcher keeps track of the last date/time this command was sent to
the server on its prefs file. When the NEWGROUPS command is sent to the
server, 36 hours are subtracted from the saved date/time of the last
check. The resulting returned new group names are compared to the
current full group list and duplicates are discarded. Subtracting 36
hours takes care of time-related problems such as the client and server
being in different time zones, clock drift, and daylight savings time
differences.\]

\- Check for Deleted Groups.

This command checks to see if any groups have been deleted. Deleted
groups are removed from the full group list. This command does not check
for new groups, only for deleted groups.

Most people will want to use this command infrequently to weed out bogus
old deleted groups from their full group list. The command is reasonably
fast over a direct network connection, but is quite slow over a dialup
connection.

\[Unfortunately, there is no DELETEDGROUPS NNTP command, so NewsWatcher
must download a new full group list to process this command.\]

\- Rebuild Full Group List.

This command is for emergency use in case the full group list becomes
corrupted or gets seriously out of synch with the real full group list
on the server (e.g., because the clock on the user\'s Mac was set
improperly). NewsWatcher discards the old full group list and downloads
a completely new fresh full group list from the server.

Most people will not need to use this command. It is quite slow over a
dialup connection.

\-- Checking for new articles.

You can now check for new articles without having to quit and rerun
NewsWatcher. People can keep NewsWatcher open in the background all day
and switch to it whenever they need a news fix.

To check for new articles, first bring your user group list window to
the front. Then use the \"Check for New Articles\" command in the News
menu, or use the Command-Y keyboard shortcut.

NewsWatcher first closes any open subject and article windows associated
with the user group list window, then sends a query to the news server
asking if any new articles have appeared for each group in the user
group list. The unread article counts in the window are updated.

\[NewsWatcher sends individual GROUP commands to the server to check for
new articles. One GROUP command is sent for each group in the user group
list. The GROUP commands are sent all at once in a single buffer. Then
the responses from the server are gathered together and processed as
they arrive. This is much more efficient than sending the GROUP commands
one at a time. For most average size user group lists and with a
reasonably fast server, this should only take a few seconds, even over
dialup connections. This is the same operation used by NewsWatcher
whenever a user group list window is opened.\]

\-- Sharing NewsWatcher.

It is now possible for more than one person to share NewsWatcher on a
single Mac (e.g., in a lab). Each user can have his or her own
preferences file and user group list file. In a lab environment, users
can carry these two files around on a floppy disk. This new feature can
also be used by a single user to create multiple newsreading
environments.

To create a personal newsreading environment on a shared Mac, first run
NewsWatcher and configure the preferences (news server address, mail
server address, your name, organization, email address, etc.). Subscribe
to some groups and save a personal user group list file. Then quit
NewsWatcher. Create a new folder anywhere on the hard drive. Move your
user group list file into this folder. Also move the \"NewsWatcher
Preferences\" file from the Preferences folder into this folder.

In the future, whenever you want to run NewsWatcher using your personal
environment, double-click on your user group list icon. Do not double
click on the NewsWatcher program icon to run NewsWatcher. When you
double click on your user group list icon, NewsWatcher uses the
preferences file in the same folder instead of the preferences file
inside the Preferences folder.

Network administrators can easily create pre-configured user group lists
and preferences files to distribute to users to get them started. See
the new version of the NewsWatcher user document for details.

In a lab environment or on some other shared Macintosh, you can and
should force users to use personal preferences file, and not the
NewsWatcher Preferences file in the Preferences folder. To do this,
create a dummy \"NewsWatcher Preferences\" file in the Preferences
folder. An empty TeachText file will do fine. When NewsWatcher is
launched, it checks the creator and type of the \"NewsWatcher
Preferences\" file. It the file was not created by NewsWatcher or has
the wrong file type, the following alert is presented, and then
NewsWatcher quits:

The owners of this shared Macintosh insist that you open

NewsWatcher using a personal preferences file. Ask them for

help, or see the NewsWatcher document.

Most of the ideas for these new features were adapted from Eudora.
Thanks, Steve!

\[When NewsWatcher is launched, it uses the following rules to locate
and open the preferences file. The \"document list\" is obtained from
the initial ODOC Apple Event (if any). If NewsWatcher gets an initial
OAPP Apple event instead

of an initial ODOC event, the document list is empty (the user opened
the application instead of one or more documents).

A. If there is a document list, and if one of the documents in the list
is a NewsWatcher preferences file, NewsWatcher uses the first preference
file in the list. (E.g., if you double-click on a preferences file,
NewsWatcher uses that preferences file.)

B. Otherwise, if there is a document list, and if one of the documents
in the list is a NewsWatcher user group list file, then NewsWatcher
looks for the preferences file in the following folders in order:

1\. The folder containing the first user group list file

in the document list.

2\. The Preferences folder.

(E.g., if you double-click on a user group list file which is in the
same folder as a preferences file, NewsWatcher uses that preferences
file.)

C. Otherwise, NewsWatcher looks for the preferences file in the
following folders in order:

1\. The folder containing the NewsWatcher application.

2\. The Preferences folder.\]

\-- Improved Search command.

The \"Search Selected Groups\" command now uses the XPAT command if the
news server supports it (e.g., INN). This improves searching speed.

Unfortunately, INN 1.4 has an error in the code which handles the XPAT
command. The last article in a group never matches any search. There are
two ways to fix this problem:

1\. Have your server administrator apply a simple patch to INN. The
patch is included in Appendix E of the new user document.

2\. Turn off the \"Use XPAT if available\" preference in NewsWatcher. If
you turn off this preference, NewsWatcher always does searches the old
way, without using the XPAT command.

This error should be fixed in the next version of INN, and eventually we
can probably get rid of the preference.

The previous version of NewsWatcher had a bad error which could cause
crashes when the Search command was used. The new version should fix
this error.

The searching code was rewritten from scratch to improve performance and
fix a number of miscellaneous other problems.

\-- New preferences dialog.

The old Prefs, Font, and Size menus have been removed and replaced by a
single new \"Preferences\" command in the File menu. This command
presents a dialog which you use to select all the many NewsWatcher
preferences. A popup menu at the top of the dialog is used to select
different topics.

There is a new preference to save the password used by the \"Get Group
List from Host\" and \"Send Group List to Host\" commands. Don\'t set
this new preference if you are worried about security, since your
password will be saved on your preferences file on disk. If this
preference is set, and you also set the \"Automatically get/put
.newsrc\" preference, then NewsWatcher will automatically get your
newsrc file at startup without prompting for your password.

There are new preferences to set the application to open saved text
files and the default directory for saved text files.

The preferences file has been renamed and moved. In the old version, the
preferences file was named \"News Prefs\" and was stored in the System
Folder. In the new version, the preferences file is named \"NewsWatcher
Preferences\" and is stored in the Preferences folder inside the System
Folder. When the new version is run for the first time, it renames the
old preferences file and moves it into the Preferences folder.

\-- Menus reorganized.

The menu bar and menus have been rearranged significantly, and some of
the command-key shortcuts have changed. We eliminated several entire
menus and a number of other commands, without sacrificing any really
useful features. The menus are now much less cluttered.

All of the menus now fit comfortably on a classic 9\" Mac screen without
any scrolling.

The new menu bar contains the following menus: Apple, File, Edit, News,
Search, Special and Windows.

In addition to getting rid of the old Prefs, Font, and Size menus, we
have also removed the old Mail menu. The old \"Reply to Article\"
command in the Mail menu has been replaced by the new \"Reply via
Email\" command in the News menu. The old \"Send Mail\" command in the
Mail menu has been replaced by the \"Send Message\" command in the News
menu. The remaining commands in the old Mail menu were all
unimplemented. The planned functionality of these commands (and more)
will be implemented in a new message window design, without the need for
an additional menu or menu commands (see the \"To Do\" document).

The old News menu has been split into two menus named \"News\" and
\"Special\". The \"News\" menu contains the most frequently used
commands, all of which have command key shortcuts. The Special menu
contains the less frequently used commands, none of which have command
key shortcuts.

The Search menu is new. It contains the not yet implemented \"Find\" and
\"Find Again\" commands, the \"Search Selected Groups\" command, and the
not yet implemented article filtering commands.

The following command key equivalents have been changed. Eudora users
should appreciate these changes.

Command-N: Post New Article.

Command-R: Follow-Up to Article.

Command-K: Reply via Email.

Command-E: Send Message.

The two unimplemented \"Revert\" commands in the File menu have been
removed. We will not be implementing these commands. We will, however,
be implementing the \"Undo\" command to undo at least the \"Next Group\"
command.

The unimplemented \"Remove Read Articles\" command in the Edit menu has
been removed. We will not be implementing this command.

The three commands in the Edit menu for collapsing and expanding threads
have been removed. In the new version, all of these functions can easily
be accomplished via new command key combinations (as in the Finder):

Expand all Threads: Command-A, Command-right arrow.

Collapse all Threads: Command-A, Command-left arrow.

Expand/Collapse Selected Thread: Command-right arrow or Command-left
arrow.

The \"Open Selected Items\" command in the News menu has been deleted.
Selected items are opened by double-clicking or pressing Return. Nobody
ever used the command.

The various scrolling and paging commands in the Windows menu have been
removed. These commands were not very useful, and just cluttered up the
menu.

\-- Date header lines.

Some news and mail servers require that all postings and mail messages
include standard \"Date\" header lines. This is particularly common in
Europe. Indeed, \"Date\" header lines are required according to the
Internet RFCs. In the United States, most servers are lenient and will
supply a Date header line if it is missing.

NewsWatcher can generate \"Date\" header lines to meet this requirement,
but the Mac user must first install and properly configure the standard
Apple \"Map\" control panel. The control panel must be properly
configured with the world location of the Mac. NewsWatcher needs this
information so it can put the proper time zone information in the Date
header line.

If the Map control panel has never been installed, or if it has never
been configured, then NewsWatcher does not include any \"Date\" header
lines in postings and mail messages, because it has no way of knowing in
which time zone the Mac is located. This is the same convention used by
Eudora.

\-- Other changes and new features.

The program has a new about box. Check it out. Thanks to Steve
Klingsporn for the nice pictures.

When run for the first time (no preferences file found), NewsWatcher now
presents the personal information dialog in addition to the server
addresses dialog. The user must enter at least his email address, which
is required in news and mail headers.

The three personal information fields have been removed from the posting
and mail message dialogs (full name, organization, and email address).
NewsWatcher now asks for this information when it is run for the first
time. The user can change the information using the Preferences command.

NewsWatcher now preserves unsubscribed groups when it gets a group list
(newsrc file) from a UNIX host and then later sends the group list back
to the host. The lines in the newsrc file for unsubscribed groups are
saved by Newswatcher and written back to the UNIX host unmodified
(except for being all moved to the end of the list). NewsWatcher
doesn\'t use these unsubscribed groups in any way - it just saves them
and writes them back to the UNIX host. This fixes a complaint from
people who tried to use both NewsWatcher and a UNIX newsreader to read
the news using a shared newsrc file stored on the UNIX host. NewsWatcher
never saves unsubscribed groups on disk file user group lists, however.
So if you get a group list from a host, save it to disk, reopen it from
disk, and then send it back to the host, you will lose your unsubscribed
groups.

The human interface for moving groups between and within windows has
been improved (e.g., when subscribing to a new group by dragging a group
from the full group list window or new groups window to a user group
list window, or when rearranging the order of groups in a user group
list window). NewsWatcher now shows a bold dividing line between
destination groups as the user moves the mouse. This gives better visual
feedback. New groups are now inserted at the location where the user
drops them, instead of at the end of the list. The target window also
now autoscrolls as the user moves the mouse above and below the window.

On color and gray-scale monitors, the expand/collapse triangle controls
are colorized as in the Finder, and the system highlight color is used
to highlight selected list entries.

In subject windows, Command-right arrow and Command-left arrow expand
and collapse selected threads, as in the Finder.

Option-clicking on a triangle thread control no longer expands/collapses
all threads. Instead, use Command-A followed by Command-right arrow or
Command-left arrow.

The forward delete key on the extended keyboard now works in message
windows and in dialog box text fields.

Command-D can now be used as a keyboard shortcut for the \"Don\'t Save\"
button in the alert which asks if you want to save a user group list,
and for the \"Discard\" button in the alert which asks if you want to
send a message.

NewsWatcher now supports the four required Apple events (open
application, open documents, print documents, and quit application).

NewsWatcher rewrites the full group list back to the preferences file on
disk at termination only if it has changed. This helps speed up
termination, since in the new version, the full group list frequently
doesn\'t change at all.

NewsWatcher is smarter about keeping track of the correct width of the
zoomed full group list window. This information is saved on the prefs
file between runs of the program. This helps speed up opening the full
group list window when the \"zoom windows\" preference is on. You should
be able to keep the full group list window open all the time now (if you
wish), without noticing any significant delay every time you run the
program.

If you double-click on a user group list icon in the Finder, and if
NewsWatcher is already running with that user group list window open,

NewsWatcher is brought to the front and the window for that user group
list is brought to the front. In the old version, a second window was
opened for the user group list.

When posting a message, you can now type lists of group names using
either spaces or commas as separators. NewsWatcher translates the list
into a comma-separated list, and removes any extraneous spaces.

When making the initial connection to the news server, NewsWatcher now
properly handles long initial \"hello\" lines from the server.

When saving articles and messages, NewsWatcher now saves a final return
character at the end of the last line.

When a group in a user group list is marked read or unread, the \"window
dirty\" flag is set so that the save changes dialog appears when the
user closes the window or quits the program.

The menus are disabled properly if NewsWatcher fails to connect to the
news server at startup.

In the previous version, if you canceled a Quit, the full group list
window was sometimes improperly disposed, and the program could
subsequently crash. This error has been fixed.

Window titles which began with a hyphen \"-\" were not being displayed
properly in the Windows menu. This error has been fixed.

Demo mode has been removed.

\-- \[Internal changes\].

This version includes tons of new and revised code.

The following modules are new:

full.c - everything involving the full group list.

newart.c - the \"Check for New Articles\" command handler.

aevt.c - Apple events.

ldefstub.c - a new \"stub\" LDEF.

dlgutil.c - dialog utilities.

popup.c - popup menu utilities.

prefsdlog.c - preferences dialog.

about.c - about box.

sfutil.c - standard file utilities.

drag.c - dragging groups.

The following modules were rewritten from scratch: newsrc.c, nntp.c,
ldef.c, search.c.

The remove.c module was deleted.

The following modules are part of John Werner\'s new filtering code.
This

code has been deactivated because I feel that it is not yet developed
enough for production use. If you want to work with this code, define
the \"FILTERS\" symbol in your project prefix to activate it. See the To
Do list for a preliminary list of things I\'d like to do with this code.

killdata.c - filter data structure management.

killdlg.c - filter dialogs.

kill.c - filtering code.

killfile.c - reading and writing the kill file.

strutil.c - string utilities.

filebuff.c - stdio-like file buffering.

We now use a simple LDEF \"stub\" stand-alone LDEF 128 code resource in
the ldef.π project. The actual LDEF code is contained in the main
newswatcher.π project, and is pointed to by the refcon field of the list
record. This lets us use global variables in the LDEF code, call other
functions, and in general enjoy all the advantages of \"real\" code as
opposed to stand-alone code. We also no longer have to remember to
rebuild the ldef.π project whenever we make changes to the data
structure definitions in glob.h. Thanks, Peter Lewis!

We now take advantage of many of the new API\'s in System 7. All file
management is done using FSSpec records and the FSSpec File Manager
calls. The system popup menu CDEF is used in many places. The system
WDEF for movable modal dialogs is used for the status window. The
initial document list is processed using Apple events. The new standard
file dialogs are used. We use the Dialog Manager auto-centering feature.

We no longer attempt to support MPW for NewsWatcher development. Only
Think C is supported. I am currently using Think C 5.0. I have not yet
tried using Think C 6.0 (although I plan to soon, as soon as I get my
copy of the next ETO CD).

\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\--

Version 1.3d8

May 2, 1993

Version 1.3d8 is a maintenance release to fix several errors and
problems reported by users. There are no new features.

The To Do and Wish List documents have been combined, expanded, and
reorganized. There are several new ideas in the document, including a
major new design for message windows. If you are interested in the
future of NewsWatcher, you should read the new To Do document.

Fixed an error reported by several users in the \"Get Group List from
Host\" and \"Send Group List to Host\" commands. For some people, in
some situations, these commands would fail with an unexpected server
error number 425. \[When doing the asynchronous passive data stream open
for the FTP transfer, NW passes a 0 for the local port number to ask
MacTCP to assign an unused port number. 1.3d8 waits for the port number
in the parameter block to become non-zero before extracting it and using
it.\]

Fixed an error reported by Charles Allen. The error caused NewsWatcher
to crash when opening a subject window for a group containing an article
with a very long subject line (255 or more characters).

Installed a new icon family contributed by Steve Klingsporn. Added
Steve\'s name to the about box. You may need to rebuild your desktop to
see the new icons.

Marshall Clow ran SoftPolish on NewsWatcher and sent the report. Fixed
several problems reported by SoftPolish.

Steve Dorner reported that the \"Open Selected Items\" command was
active when an article window was on top, and selecting the command
caused NW to crash.

Steve Dorner and Larry Rosenstein complained that 1.3d6 used too much
CPU time even when it was idle - other processes were not getting as
much CPU time as they should. \[1.3d8 uses GetCaretTime() instead of 0
as the value for the sleep parameter in its idle call to
WaitNextEvent.\]

Christopher Chen discovered the following error: If you used the keypad
shortcut key \"\*\" to close the full group list window, the \"Hide Full
Group List\" command in the \"Windows\" menu was not properly changed to
\"Show Full Group List\". If you selected this command, NW crashed.

The Cancel button now works properly in the remote host information
dialog presented by the \"Get Group List from Host\" and \"Send Group
List to Host\" commands.

The \"OK\" button in the dialog presented by the \"Remote Host
Information\" command in the \"Prefs\" menu was improperly labelled
\"Connect\" in 1.3d6.

In 1.3d6, if you had no signature and posted a new article, the group
name did not appear in the panel area of the message window, the header
appeared even if you had hide headers selected as your preference, and
the cursor was not positioned properly. \[NW was getting confused about
where the header ended and the body began if the body was empty.\]

In 1.3d6, if you quit with an unsaved user group list, clicked \"Save\"
in the \"do you want to save\" alert, then clicked \"Cancel\" in the
standard file dialog, the program would quit instead of returning
control to the user.

\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\--

Version 1.3d7

This version was never released to the public, just to a few individuals
for testing purposes.

\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\--

Version 1.3d6

August 21, 1992

This version introduces another experiment for keyboard shortcuts, tunes
up some of the human interface elements, and fixes several errors
reported by users.

The first test to see how \"plain\" command keys would work (introduced
in version 1.3d4) has been judged to be a failure. We have gone back to
\"normal\" Mac command key equivalents for the following commands:

Next Article: Command-I

Next Thread: Command-T

Next Group: Command-J

As another test, in this version we are trying the keypad keys as
convenient keyboard shortcuts for common operations. The goal is to
permit simple everyday news reading (but not writing) operations to be
performed with a single hand using only the keypad.

The bottom row of three keys are used for the three \"Next\" commands:

0: Next article.

period: Next thread.

enter: Next group.

The 3x3 square of numeric keys 1-9 are used to scroll within a window:

1: End.

2: Line down.

3: Page down.

4: Previous section (scroll left).

5: Unused so far.

6: Next section (scroll right).

7: Home.

8: Line up.

9: Page up.

The remaining keys on the keypad are used for other common operations:

clear: Unused so far.

=: Select all.

/: Expand or collapse selected thread.

\*: Close window.

-: Mark unread.

+: Mark read.

The \"Line up\" and \"Line down\" keys (8 and 2) perform different
operations in text and list windows.

In text windows, these keys scroll the text window up or down one line.
You can hold down the keys to get smooth continuous scrolling of text
through the window. This IS the same as pressing on the arrows at the
ends of scroll bars with the mouse. This is NOT the same as the up and
down arrow keys, which move the selection point up or down one line in
the text.

In list windows, these keys move the selection to the previous or next
item in the list. This IS the same as using the up and down arrow keys.
To get smooth scrolling, you have to use the mouse.

The \"Next section\" and \"Previous section\" keys (6 and 4) are used
only with large articles which have been split into sections. The keys
scroll through the sections, and are an alternative to using the
horizontal scroll bar.

The \"Expand or collapse selected thread\" operation (keypad key /) is a
new operation. It is also a new command \"Expand/Collapse Selected
Thread\" in the Edit menu, with command key equivalent CMD-/. This new
command is only active if a subject window is on top, exactly one item
in the subject list is selected, and the selected item is part of a
thread.

The \"Home\", \"End\", \"Page up\", and \"Page down\" keys on the
extended keyboard now work.

Powerbooks have neither extended keyboard paging keys nor keypads.
Powerbook users need keyboard scrolling shortcuts even more than others,
since scrolling with the trackball can be clumsy. To accomodate this
need, I added the following commands and command key equivalents to the
Windows menu:

Line Up (CMD-1)

Line Down (CMD-2)

Page Up (CMD-3)

Page Down (CMD-4)

Home (CMD-5)

End (CMD-6)

Next Section (CMD-7)

Previous Section (CMD-8)

Note that the new keypad keys and the new Window menu commands and
command key equivalents add no new functionality to NewsWatcher. They
are only a convenience. There is some other standard way to do each of
the operations without using the keypad or the new commands.

Some keypad hints:

In your user group list window, use \"0\" to open the next unread group.

In subject windows, use:

a\. \"2\" to quickly advance to the next interesting article.

b\. \"0\" to open the interesting article.

c\. \"\*\" after you\'ve read the interesting article(s).

repeat steps a-c to read all the interesting articles.

d\. \"enter\" to mark this group read and open the next unread group.

In article windows, use:

a\. \"\*\" if you\'re done and want to go back to the subject window.

b\. \"0\" if you want to see the next article.

c\. \".\" if you get sick of a thread and want to skip to the first
article

in the next thread.

In all windows, use \"1\" - \"9\" for scrolling.

The \"Reduction Filter\" command has been officially decommissioned. It
has been removed from the Edit menu. \[I kept the source code module
\"filter.c\", just in case we need it some day, but it is no longer part
of the project.\]

Keyboard navigation in group list windows has been reactivated.

Article window panels now display the organization and date in addition
to the author. In a future verson, the dates will be translated into
local time in the panel area, which I think will be a nice feature. See
the To Do list.

Mail and posting message windows now contain a \"Send\" button.

Article windows opened by the \"Open Selected Reference\" and \"Open All
References\" commands now have the window title \"nnn.Subject\", where
\"nnn\" is a number 1,2,3,\... In the old version, message ids were used
as window titles, which was ugly and not at all useful.

Command-T used to be the command key equivalent for the \"Open All
References\" command. This command no longer has any command key
equivalent.

When getting subjects and authors from the server, the status window now
shows the name of the group. The window has been made wider to leave
more room for longer group names.

In the Next Article/Thread/Group commands, when looking for the next
unread article or the next group with unread articles, if an article
cannot be opened because it is no longer on the server, or if a group
cannot be opened because it contains no unread articles, NewsWatcher now
continues on to the next article or group instead of presenting an alert
and giving up.

Fixed some errors in the user group list file saving code which could
cause crashes or other problems.

When collapsing a thread, if no list items are selected after the
collapse, the item for the thread is selected.

With windows which are already zoomed to the full screen height, there
is less annoying flickering after showing headers or expanding threads.

Fixed the \"are you sure you want to post\" alert to refer to the proper
command in the proper menu for getting rid of the alert when you get
sick of it.

Fixed an error when authors are not shown and the user changes the font
or size of a subject window.

Fixed an error in the Next Article command when used with an article
window open corresponding to an item in an expanded thread in a subject
window when earlier items in the same thread were unread. In the old
version, the command erroneously opened the first unread article in the
thread, rather than the next unread article in the thread.

Fixed an error in the \"Max \# articles to fetch\" preference. Let x =
the value of this preference. If the number of unread articles exceeds
x, only the most recent x articles are fetched and displayed when a
subject window is opened. In the previous version, when the subject
window was closed, all the articles in the group were marked read. This
was incorrect. In the new version, only the most recent x articles are
marked read. If you open the group again, you will get the next most
recent x articles fetched and displayed in the subject window.

NewsWatcher now automatically adjusts the height of all windows so that
they show an exact even multiple of list items or lines of text.

When run for the first time, after presenting the server address dialog,
NewsWatcher 1.3d5 told the user that he must restart for the change to
take affect. This is wrong, and has been fixed in 1.3d6.

Added two new unimplemented commands: \"Check for Deleted Groups\" in
the News menu, and \"Time Information\" in the Prefs menu. See the To Do
list for details.

\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\--

Version 1.3d5

July 24, 1992

This version fixes two stupid mistakes in 1.3d4.

Saving message windows (postings or mail messages) caused NewsWatcher to
crash. This problem has been fixed.

The scroll bar was not being initialized properly on new article and
message windows when the \"Zoom Windows\" preference was turned off.
This problem has been fixed.

\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\--

Version 1.3d4

July 22, 1992

This version introduces many new features. There are many changes to the
windows. The menus have been rearranged. There are many new commands.

This is the first version which really \"looks and feels\" like a new
program. I hope you like it.

I had to break a few eggs to make this omelet. The Reduction Filter
command, the Remove Read Articles command, and keyboard navigation in
list windows no longer work. See below for details.

The command keys for Next Article and Next Group have changed yet again
(and may very well change in the future too). See below for details.

The \"User Doc\", \"To Do\", and \"Wish List\" documents have all had
major revisions. You should read the new versions.

\[The source code is now compatible with both Think C 5.0 and MPW C 3.2.
See the new Read Me file in the source code folder for details. I am now
using Think instead of MPW to do my NewsWatcher development.\]

\-- The great keyboard shortcut controversy.

The Apple Human Interface Thought Police will surely arrest me for the
following gross violation of the guidelines.

As a test (this is only a test to see how it works out in practice), I
have made the following PLAIN keys work (no Command key held down):

Space Bar: Next Article

T: Next Thread (a new command - see below)

G: Next Group

These keys work whenever an article window, subject window, or group
window is on top. Thus, for example, if you want to read every single
unread article in every single group in your user group list, Space Bar
will sequence through all of them.

These three commands no longer have any regular command key equivalents.
Command-F and Command-G, the old command key equivalents for Next
Article and Next Group, are now reserved for the new (not yet
implemented) Find and Find Again commands. I tried Command-I, Command-T,
and Command-J for a while, but it was just too horrible for words.

The items in the News menu for these commands look like the following:

Next Article (Space Bar)

Next Thread (T)

Next Group (G)

I have put the plain key shortcuts in parentheses following the command
names. Yes, it looks goofy.

Article windows, unlike message windows, are read-only, so it is
possible to use PLAIN keys as command keys in this context, even though
it violates the Human Interface Guidelines in a rather major way.

In previous versions of NewsWatcher, in group and subject windows, PLAIN
keys were used for keyboard navigation (e.g., type \"c.s.m.a\" in the
full group list to jump to comp.sys.mac.announce). As part of this test,
I have been forced to DISABLE the old keyboard navigation feature - it
no longer works at all.

See the To Do list for details on my plans for the new Find and Find
Again commands. These new commands will work in list windows, with the
same kind of searching capabilities that were in the old keyboard
navigation. When these commands are implemented, there won\'t be so much
need for the old keyboard navigation feature anymore.

I just added this code at the very last minute, so I haven\'t had a
chance to use it on a regular basis yet. I don\'t know what I think yet.
I did find myself trying to type plain \"W\" to close a window, and of
course that didn\'t work. (Gee, maybe those guidelines are there for a
reason after all :-) (Please don\'t tell me to simply make plain \"W\"
work to close a window - then we\'ll have people trying to type plain
\"W\" to close posting and mail message windows, which of course will
just enter the character \"W\" into the text in the window. That would
be just too confusing.)

After you use these new shortcuts for a while, let me know what you
think. Do you like this idea, or do you find it truly horrible? How much
do you miss keyboard navigation, if at all? If you miss it, do you think
the new Find and Find Again commands will be an adequate substitute? Do
you find it confusing that for some operations you need to hold down the
Command key and for others you don\'t? Do you think novice users would
find this useful, confusing, or both?

Note that we still don\'t have scrolling keyboard shortcuts, and the
paging keys on the extended keyboard still don\'t work. That\'s on the
To Do list - maybe next version.

\-- Problems with the Reduction Filter command.

I found it almost impossible to make any sense out of how the Reduction
Filter command should work together with the new features of 1.3d4,
especially with the new features for threads and thread controls in
subject windows (see below).

The reduction filter never worked well with many of the other features
of NewsWatcher anyway. Subscribing, unsubscribing, and moving groups
never worked in a filtered user group list window.

For these reasons, I have disabled the Reduction Filter command in
1.3d4. The command is still in the Edit menu, and you can select it, but
it will just present an alert telling you it has been disabled.

See the To Do list for my plans for the new Find and Find Again
commands. I think these new commands, when they are implemented, will
make up for losing the Reduction Filter command.

I haven\'t deleted the code or made a final decision on this issue yet.
However, I am very much leaning in the direction of nuking this feature
altogether. Let me know what you think.

\-- Problems with the Remove Read Articles command.

The code for the Remove Read Articles command needs to be rewritten to
work together with the new features for threads. There\'s no conceptual
problem with doing this, I just haven\'t gotten around to it yet.

This command is disabled in 1.3d4. You can select it, but it will just
present an alert. I\'ll get it working again in the next version (this
is the first item on the To Do list).

\-- Group Windows.

User group windows now contain a count of the number of unread articles
in the group. For groups with no unread articles, no count is displayed.
The count is approximate: it should always be at least as large as the
actual number of unread articles, but it may be larger. The counts are
continuously updated as articles are opened and read and marked read or
unread.

Groups which have unread articles are no longer displayed in boldface.
The presence or absence of the count now clearly indicates which groups
contain unread articles, so boldface is no longer necessary.

The full group list window and the new groups window do not show an
article count. It would be possible to do this in 1.3d4, but this will
no longer be possible when we make the change to not get the full group
list info from the server every time the program is run (see the To Do
list).

\-- Subject Windows.

Author names can now be displayed in subject windows, under control of a
new preference. The default is to display authors. Unfortunately,
displaying author names in addition to subjects takes about twice as
long as displaying only subjects. This is because separate server
requests have to be issued to get the authors. \[It\'s really a crime
that NNTP is so brain dead: the XHDR command won\'t return more than one
header field at a time.\]

Subject windows contain new \"thread controls\": little triangles at the
left side of the window next to the first article in each thread. These
controls work like the triangle controls in System 7 Finder windows.
Click on a control to expand or collapse a thread. When a thread is
collapsed, only the first article in the thread is displayed, and the
triangle control points to the right. When a thread is expanded, all the
articles in the thread are displayed, and the triangle control points
down.

A new preference controls whether threads are initially displayed
expanded or collapsed. The default is collapsed.

For threads, the number of articles in the thread is displayed following
the triangle control. This helps tell how big a thread is when it is
collapsed.

For articles which are not part of a thread, a dash (-) is displayed
instead of a triangle.

For collapsed threads, a check mark appears if and only if all the
articles in the thread have been read.

For collapsed threads, marking the subject line read or unread marks the
entire thread read or unread.

There are two new commands \"Expand all Threads\" and \"Collapse all
Threads\" in the Edit menu which do the obvious. Option-clicking on a
thread control is a shortcut.

Article numbers are no longer displayed in subject windows. Users could
care less about these numbers, and shouldn\'t have to see them.

Sorting large subject windows is much faster.

\[When NewsWatcher opens a subject window, it first fetches the subjects
from the server and then sorts the subjects into \"thread\" order:
articles which are part of the same thread are placed together. The old
version used an order n\*\*2 algorithm to do the sort. The new version
uses a carefully coded and rather complicated order n\*log(n) algorithm
(it\'s not just a single simple sort). Thanks to Phil Burns for helping
design the algorithm. See function SortSubjectArray in module subject.c
for details. As a test, I used both the old and the new versions to open
comp.sys.mac.programmer from the full group list on my IIci. There were
566 articles in the group. The old version took 108.5 seconds to do the
sort. The new version took 0.8 seconds! This does not make opening
subject windows super fast, because it still takes the server quite some
time to send the subjects for a large number of articles. For example,
in the same tests, it took our NU server between 25 and 60 seconds to
send the 566 subjects. This was just to get subjects, with no authors.
With authors, these times would approximately double. Unfortunately, the
NNTP XHDR command, as it is currently implemented in most servers, is
very inefficient. The server has to actually open each of the individual
article files and extract the requested header lines.\]

\-- Article and Message Windows.

Article windows now contain a \"panel\" area immediately below the
window title bar. This panel area is not scrolled. The panel displays
the author of the article. If the article is part of a thread, the panel
also displays the message \"Article x of y in thread\". In addition, for
articles in threads, an ellipsis is displayed if the article is not the
last article in the thread, or a bullet is displayed if the article is
the last article in the thread. This should make it easy to tell when
you have come to the end of a thread (e.g., if you want to read the
whole thread before composing a follow-up).

Message windows also contain a panel. For posting message windows, the
panel contains the message \"Posting to: xxxxxxx\", where \"xxxxxxx\" is
the newsgroup name(s). For mail message windows, the panel contains the
message \"Mail to: xxxxxxx\", where \"xxxxxxx\" is the name of the
recipient of the mail message.

The user now has the option of displaying headers or not displaying
headers in article and message windows. Most people want to know the
subjects and authors of articles, but usually could care less about the
other cryptic header lines. The subject is in the window title, and the
author is in the new panel area. So it makes sense to hide the full
header. I have been using NewsWatcher with headers turned off for over a
week now, and I find that I rarely need or want to see them.

A new preference controls whether or not headers are displayed by
default in new article and message windows. The default value is off:
headers are not displayed.

The new command \"Show/Hide Header\" in the Edit menu (CMD-H) can be
used to toggle between showing and hiding the header in a window.

Headers are always included when articles and messages are saved to disk
or printed (for now - perhaps this should be an option?).

Article numbers are no longer displayed as part of the window titles of
article windows. Users could care less about these numbers, and
shouldn\'t have to see them. For articles in threads, a dash ( - ) and
the number of the article within the thread (1,2,3,\...) is appended to
the window title. This makes it possible to distinguish between multiple
open articles in the same thread, and it gives the windows unique names
in the Windows menu.

\-- Menus and Commands.

The menus have been rearranged. There are many new commands. The ones
marked \"NYI\" below are not yet implemented. You can select them, but
you will just get an alert saying \"Not yet implemented.\" These
commands are also marked with a not sign in the menus. I have included
them in 1.3d4 just so we can get an early picture of what the menus will
look like in 1.3 final. See the To Do list for details on these
commands.

The File menu has five new commands:

Print Selection. (NYI)

Revert to Saved. Reverts a user group list to the last saved version.

(NYI).

Revert Selected Groups. Reverts only the selected groups in a user

group list to their last saved versions. This command was added

to solve the common problem of people using the \"Next Group\" command

by mistake. It\'s not an \"undo\" operation for this mistake, but it\'s

second best. (NYI).

Get Group List from Host. Used to be the \"Get Group List from Net\"

command in the old Network menu.

Send Group List to Host. Used to be the \"Send Group List to Net\"

command in the old Network menu.

The Edit menu has six new commands:

Paste as Quotation (CMD-\'). Like paste, except inserts \"\>\" quotation

marks in front of the quoted text. See the To Do list for a nifty

idea for this new feature. (NYI)

Find (CMD-F). Locates text in a window. (NYI)

Find Again (CMD-G). Locates text in a window, using the same search

string as specified in the most recent Find command. (NYI)

Show/Hide Header (CMD-H). Shows or hides the header in the current

article or message window.

Expand all Threads. Expands all threads in a subject window.

Option-clicking on any collapsed triangle control is a shortcut.

Collapse all Threads. Collapses all threads in a subject window.

Option-clicking on any expanded triangle control is a shortcut.

The \"Remove Read Articles\" command has been moved from the News menu
to the Edit menu.

The \"Search\" command has been moved from the Edit menu to the News
menu and renamed \"Search Selected Groups\".

The \"Rot-13\" command no longer has a command key equivalent. It used
to be Command-D, but I\'m now using that for the \"Send Posting\" and
\"Send Mail\" commands (see below).

The News menu has three new commands:

Next Thread (T). Marks all articles in the current thread

read and opens the next unread article or group.

Check for New Articles (CMD-Y). Checks for new articles on the news

server. (NYI)

Check for New Groups (CMD-B). 1.3 final will not get the full group list

and check for new groups every time it is run. People will use this

command to do this. (NYI).

The \"Send Message\" command in the News menu has been renamed to \"Send
Posting\". It has a new command key equivalent, CMD-D.

The \"Open Selection\" command in the News menu has been renamed \"Open
Selected Items\".

There is a new \"Mail\" menu which contains all the commands for email.
There will be several useful new mail commands.

Reply to Article (CMD-E). Used to be the \"Respond through Mail\"

command in the News menu.

Send Article to Self. A new command. Mails a copy of an

article to yourself. (NYI)

Edit and Send Article to Self. A new command. Same as \"Send Article

to Self,\" except the user is given a chance to add comments to

the copy of the article before it is mailed. (NYI)

Forward Article. A new command to forward a copy of an

article to someone else. (NYI)

Edit and Forward Article. A new command. Same as \"Forward Article,\"

except the user is given a chance to add comments to the copy

of the article before it is mailed. (NYI)

New Mail Message. A new command used to send a mail message to

someone. No article is copied into the message. This is just a

convenience for sending quick mail messages from inside NewsWatcher.

(NYI)

Send Mail (CMD-D). Sends the active mail message window. Used to be the

\"Send Message\" command in the News menu.

Note that the old \"Send Message\" command in the News menu has been
replaced by two commands: \"Send Posting\" in the News menu, and \"Send
Mail\" in the Mail

menu. Both of the new commands have the same command key equivalent,
CMD-D. At most one of them is active at any time.

There is a new \"Prefs\" menu which can be used to set all of the
various parameters and options for NewsWatcher. If a parameter is not
specified in advance, the program asks for it when and if it needs it.
The new menu contains the following commands. Each of these commands
brings up a modal dialog.

Personal Information. Full name, email address, and organization to

be included in the headers of all postings and mail messages.

This is a new command.

Signature. Signature to be added to the end of all postings and mail

messages. This command used to be in the File menu.

Server Addresses. News and mail server addresses. Used to be two

separate commands in the old Network menu.

Remote Host Information. Host address, username, and password for

getting and sending group lists (newsrc files). This is a new

command.

Authentication. Username and password for NNTP 1.5.11 authentication.

This information is needed only if the server requires authentication.

This is a new command. (NYI).

Saved Text Files. Brings up a standard file dialog from which the

user selects the editor or word processor which should \"own\"

text files saved by NewsWatcher. This is a new command. (NYI)

Other Options. Miscellaneous switches and the max number of

articles to fetch option. Used to be the old Preferences

command in the File menu.

The \"Offset Windows from Parent\" preference and the horizontal and
vertical offset amount preferences have been removed. Windows are always
offset from their parents, and a fixed offset is used. These preferences
just weren\'t useful enough to be retained. Fewer preferences, each of
which do something really useful or important, is better.

The old Network menu has been removed. The \"Get Group List from Net\"
and \"Send Group List to Net\" commands are now in the File menu, and
have been renamed \"Get Group List from Host\" and \"Send Group List to
Host\". The \"Set News Server Address\" and \"Set Mail Server Address\"
commands have been combined into the new \"Server Addresses\" command in
the new Preferences menu.

\-- Miscellany.

There is a new \"demo\" mode which can be used to demonstrate
NewsWatcher or work on NewsWatcher development on a Mac not connected to
a network. To run NewsWatcher in demo mode, set the news server address
to \"demo\". In demo mode, the program expects to find a news hierarchy
in the folder named \"demo\" in the same folder which contains the
NewsWatcher application. The text file \"active\" in the \"demo\" folder
must contain a full group list, as it would be sent by an NNTP \"LIST\"
command. The \"demo\" folder must also contain a hierarchy of subfolders
corresponding to the hierarchy of demo newsgroups. For example, for the
demo newsgroup \"alt.bogosity\", the \"demo\" folder contains a
subfolder named \"alt\", the \"alt\" folder contains a subfolder named
\"bogosity\", and the \"bogosity\" folder contains the individual
article text files. The article file names are the article numbers
within the group. The following commands do not work in demo mode (an
alert is presented): Get Group List from Host, Send Group List to Host,
Send Posting, Send Mail, Open Selected Reference, and Open

All References. A small sample demo hierarchy is included in the
NewsWatcher source code distribution.

The initial check for new groups was broken in 1.3d3. It has been fixed
in 1.3d4. Unfortunately, this fix is not retroactive: any new groups
which were created while you used 1.3d3 will NOT be reported the first
time you use 1.3d4.

The full group list window now has a close box, and the Close command in
the File menu is active when the full group list window is on top.
Closing the full group list window is the same as hiding it - i.e.., it
is the same as using the \"Hide Full Group List\" command in the Windows
menu. You can always use the \"Show Full Group List\" command to get it
back again.

Fixed more errors in window zooming. They are still not all fixed, but
some day I\'ll get there :-)

If the \"zoom windows\" preference is on, user group windows are
rezoomed after subscribing to a new group or groups.

If the \"zoom windows\" preference is on, windows are rezoomed after a
font or size change.

The default font for the group and subject windows has been changed from
Geneva 12 to Monaco 9. This change is not retroactive: If you have been
using older versions of NewsWatcher, and if you want to try Monaco 9,
you\'ll have to use the Font and Size menus. Try it - in the old
versions, because of the use of bold face in the group windows, Monaco 9
was not very attractive. It looks quite nice now. Also, because of the
new information in the subject windows, using a 12 point font on a
classic 9\" monitor doesn\'t leave much room to display the subjects.

Fixed an error in the Signature dialog. The font for the window beneath
the dialog was being changed to Chicago 12 by mistake. This rather
thoroughly messed up the appearance of that window. It even more
thoroughly confused a few users, who mistook it for a feature :-)

The \"Next Group\" command is faster and does less annoying hilighting
and dehilighting of cells in subject windows.

The \"Show Full Group List\" command now brings the full group list
window to the front as well as making it visible.

Saving and restoring the position of the full group list window now
works when the zoom windows preference is on.

Dragging non-frontmost windows with the Command key held down now works
properly.

During startup, NewsWatcher checks to make certain that the system is
version 6.0.5 or later. If it isn\'t, an alert is presented and the
program quits.

NewsWatcher requires that the news server support the XHDR command. If
it doesn\'t, when the user tries to open a subject window, the following
error message is issued: \"Sorry, NewsWatcher cannot be used with this
server because it does not support the XHDR command.\" Two users
reported confusion because of this problem with their servers. This new
error message should help.

When replying to an article via mail, the reply text preceding the
quoted article text now reads \"In article \<xxxxx\>, you wrote:\"

Many other small changes too numerous too mention.

\[Lots of typecasts have been eliminated, with the help of a new type
CStr255 defined in glob.h. CStr255 is the same as Str255, except it\'s
for C format strings instead of Pascal format strings. It uses type char
instead of unsigned char.\]

\[The source code has been reorganized into a larger collection of
smaller modules. I find this makes it much easier to locate what I\'m
looking for and organize my work. The new modules are:

activate.c: Window activation and deactivation.

article.c: Create article windows.

child.c: Manage parent/child window relationship.

close.c: Close windows.

cmd.c: Dispatch commands.

collapse.c: Collapse/expand all threads.

dnr.c: MacTCP domain name resolver glue.

draw.c: Draw windows.

filter.c: Reduction filter.

font.c: Font and size menus.

ftp.c: Handle all transactions with FTP servers.

glob.c: Global variables.

header.c: Show/hide header command and header utilities.

init.c: Initialization.

key.c: Keyboard events.

ldef.c: List definition function.

mark.c: Mark and unmark articles.

message.c: Create message windows.

mouse.c: Mouse events.

newsrc.c: Open/save disk files and get/send newsrc files.

newswatcher.c: Main program and main event loop.

next.c: Next article/thread/group commands.

nntp.c: Handle all transactions with NNTP servers.

open.c: Generic window opening tasks.

prefs.c: Preferences.

print.c: Printing.

qsort.c: Fast quicksort.

remove.c: Remove read articles command.

resize.c: Window resizing (growing and zooming).

save.c: Save article and message windows.

scroll.c: Manage TextEdit window scroll bars.

search.c: Search selected groups.

send.c: Send posting or mail message.

smtp.c: Handle all transactions with SMTP servers.

subject:c Create subject windows.

subscribe.c: Subscribe and unsubscribe.

tcp.c: High level MacTCP interface.

tcplow.c: Low level MacTCP interface.

util.c: General utilities.

wind.c: Windows menu commands.

\]

\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\--

Version 1.3d3

July 2, 1992

This version fixes a number of problems and completes the project to
redesign all of the major internal data structures.

I promised several people that this version would be compatible with
Think C 5.0. Unfortunately, my copy of Think C arrived too late to make
this possible. I will do this for 1.3d4, however.

Fixed an error in the FTP code which gets and sends newsrc files. The
error could sometimes cause crashes, bogus error messages, or other
problems.

In 1.3d2, user group list files created by 1.3d2 could not be opened by
the 1.3d2 \"Open Group List\" command! (Although they still worked if
the user double-clicked on them in the Finder.) This error has been
fixed. \[New user group lists are now saved with file type NEWS instead
of file type TEXT.\] (The problem of saving user group lists as plain
text files in newsrc format will be readdressed later - see the To Do
list.)

Version 1.3d2 still didn\'t work right under A/UX (it would still
sometimes hang when closing connections, and the user had to cancel).
1.3d3 should finally fix this problem, thanks to a hack by Ron Flax.

Fixed an error when closing the NNTP server connection at termination.
If the connection has already been closed (e.g., because the user
canceled a previous server transaction), an \"unexpected error -23008\"
is no longer reported.

The VAX/VMS ANU-NEWS server is not compliant with RFC 977. \[It does not
send an acknowledgement in response to the QUIT command, it just closes
the connection.\] In version 1.3d2, NewsWatcher reported an \"unexpected
error -23005\" in this situation. In 1.3d3, NewsWatcher ignores this
particular error in this circumstance, to work around the problem with
this particular server.

Fixed the \"Path\" header line on postings to comply with RFC 1036. The
new form is \"Path: xxxxx!user\", where \"xxxxx\" is the full domain
name of the posting Mac if the Mac has a domain name, or \"NewsWatcher\"
if the Mac does not have a domain name. This fixes another problem with
the VAX/VMS ANU-NEWS server, which requires the format \"host!user\" in
the \"Path\" header.

We removed the feature which tried to provide command key shortcuts for
buttons in dialogs. This feature violated the Apple Human Interface
guidelines and caused problems (e.g., in the signature dialog, Command-C
was being interpreted as \"Cancel\" instead of \"Copy\").

Removed the \"list most recent articles first\" preference. This
preference simply didn\'t work right with the rest of the program - the
way it worked, nobody in their right mind would want to use it. I see no
good reason for keeping it. It\'s not worth fixing.

All known problems with the Windows menu have been fixed (there were
several). One exception: it is possible to have more than window with
the same name, and in this case the Windows menu will show two copies of
the name, but both copies of the name in the menu will bring the same
window to the front! See the To Do list for a planned fix to guarantee
unique window names.

All known problems with checking to see if a window is already open and
bringing it to the front if it is already open have been fixed.

Fixed a problem with using the Paste command to paste text into a dialog
(e.g., into the signature dialog). Sometimes the most recent text copied
to the clipboard was not being used.

When opening multiple selections in a list, the selected items are now
opened in reverse order. For example, if you select a sequence of
articles in a subject window and open them all at once, the window for
the earliest article now appears on top.

If a server goes down or the connection to a server goes down during a
transaction, the user no longer gets an \"unexpected\" error alert.
Instead, the error message \"Lost connection to server\" is presented.
If the problem is intermittent, the user should be able to try again and
the connection will be reestablished.

When subscribing to an empty group, in 1.3d2, the new group name in the
user group list window was improperly drawn in bold face. This error has
been fixed.

If the user attempts to subscribe, unsubscribe, or move groups while a
reduction filter is active in a user group window, an error message is
presented.

When a change is made in a window involving articles being marked read
or unread, if any other window contains related information which also
requires changing, the other window is updated immediately. This rather
complex and subtle feature is best explained by the following examples.

Example 1. Suppose you have both a user group list window open and a
child subject list window open. Suppose all but one of the subjects in
the subject window are marked read, and you mark the last one read
(either by opening it, or by using the \"Mark Read\" command). The group
name in the user group list window will immediately change from bold to
unbold, indicating that the group has no more unread articles. Now, if
you unmark any of the subjects in the subject window, the group name
will go back from unbold to bold.

Example 2. Suppose you have both a subject list window and a child
article window open, with the article window active. Use Command-M and
Command-U to toggle the article window between read and unread. You will
see check marks appear and disappear in both the article window title
bar and in the subject window line for the article as you do this. (The
check marks also appear and disappear in the Windows menu.) The same
thing will happen if you make the subject list active, select the
subject for the child article window, and use Command-M and Command-U to
toggle the article between read and unread.

Example 3. Suppose you have a user group list window, a child subject
list window, and several child article windows open. Activate the user
group list window. Click on the group name. Use Command-M and Command-U
to toggle the entire group between all read and all unread. As you do
this, you will see all the subjects in the subject window get checked
and unchecked, and you will see the titles of all the article windows
get checked and unchecked.

Example 4. This is an acid test. Find any article which has been
cross-posted. Create a user group window containing two of the groups to
which the article has been posted. Open both subject windows for the two
groups. Open both

copies of the article. You now have five windows open on the screen.
Position the windows so that you can see them all at the same time (if
your screen is big enough). In one of the subject windows, mark all of
the subjects read except for the open one. Activate either one of the
article windows. Use Command-M and Command-U to toggle the article
between read and unread. You will see check marks appear and disappear
in both subject windows and in the titles of both article windows. You
will also see one of the group names in the user group window toggle
between bold and unbold. (For cross-posted articles, whenever one of the
opened copies is marked read or unread, all other copies are also marked
read or unread.)

Increased the limit on the number of groups in user group list windows
to 16384 groups. The old limit was 32768 on the sum of the lengths of
all the group names, plus one or two extra characters per name. \[The
internal data structure for user group list windows was completely
rewritten. User group list windows now use the same data structure as
the full group list window and the new groups window. The TGroup structs
for a user group list window are stored in an expandable relocatable
array rather than in a linked list. The List Manager cell data is a
simple two byte offset into this array. When the user reorders groups in
a user group list window, only the List Manager cells are moved, not the
elements in the expandable array. When the user unsubscribes to a group,
only the List Manager cell is deleted - we don\'t bother with removing
the TGroup struct from the array. When the user subscribes to a new
group, its TGroup struct is added at the end of the array, and the array
is expanded to make room. These changes make the code simpler, make
possible the greatly expanded limit on the number of groups in the
window, and improve memory management and performance.\]

Increased the maximum group name length from 50 to 255 characters. \[All
group name strings are now stored in a single relocatable block as
consecutive C-format strings. Instead of storing 50 character group
names in the TGroup struct, we now store a long offset into the
relocatable block. This makes much more efficient use of memory. For
example, at NU, this saves over 60K of memory. This change also speeds
up the initial sorting of the full group list, since only the 4 byte
offsets have to be moved around, not the full group names.\]

Increased the limit on the number of subjects in subject list windows to
16384 subjects. The old limit was 32768 of the sum of the lengths of all
the subject strings, plus three extra characters per subject. \[The
internal data structure for subject windows was completely rewritten.
Subject list windows now use much the same data structure as group list
windows. The List Manager cell data is a simple two byte offset into an
expandable relocatable array of TSubject structs. All the subject
strings for a given subject list window are stored in a single
relocatable block as consecutive C-format strings, and long offsets into
this block are stored in the TSubject structs.\]

\[Got rid of the multi-type and multi-purpose data and data2 fields in
the TwindowInfo struct and replaced them by separate fields theList,
theTE, groupArray, fullText, and subjectArray. This eliminates ugly type
casts and makes the code much easier to read.\]

\[Renamed the TReadRec struct to TUnReadRec. Renamed the TUnReadRec
fields firstRead and lastRead to firstUnRead and lastUnRead. Renamed the
TGroup field read to unRead. NewsWatcher uses these internal data
structures to keep track of lists of ranges of UNREAD articles.
Externally, in saved user group lists and in newsrc files, lists of
ranges of READ articles are used. This is more than a little confusing
for people working on the code. Having struct and

field names which reflect reality rather than its opposite helps a great
deal.\]

\[The parentGroup field in the TwindowInfo struct has been changed from
a pointer to the parent TGroup struct to the index in the group list
array of the parent window of the parent TGroup struct. Added a similar
field named parentSubject for article windows.\]

\[Child window linked list elements, unread article linked list
elements, group arrays, and window info structs are now stored in
relocatable blocks instead of in fixed blocks.\]

\[Renamed nntp.h to glob.h. Added new module glob.c containing
declarations of all global variables. Added extern declarations for
these globals to glob.h. Got rid of all extern declarations for these
globals in the various .c modules.\]

\[Lots of other miscellaneous code cleanups: renaming functions, field
names, variables, etc., to better describe what they actually do,
combining similar functions into a single function, rewriting chunks of
code, fixing array overflow errors and other problems, etc., etc.,
etc.\]

\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\--

Version 1.3d2

June 23, 1992

Version 1.3d2 fixes one very serious problem in 1.3d1, fixes a number of
less serious problems, and includes a grab bag of miscellaneous other
changes.

When forming message ids, version 1.3d1 included a trailing period at
the end of the id. This is illegal, and a number of news sites have been
discarding postings generated by 1.3d1. Version 1.3d2 fixes this serious
problem.

Version 1.3d1 crashed on some Macs when saving a user group list (e.g.,
on the Plus, SE, and Classic). This error has been fixed. \[The stack
was running into the heap - the new version calls SetApplLimit to
increase the allocated stack space.\]

Some of the low-level TCP/IP changes in 1.3d1 caused NewsWatcher to stop
working under A/UX. These problems have been fixed (I hope - my fixes
have only been tested under A/UX 2.0.1). \[The problems involve
differences in the way that the TCP/IP stacks under the regular Mac OS
and under A/UX go through the state transitions involved in tearing down
a TCP stream. See function CloseConnection in module tcphi.c for
details.\]

NewsWatcher no longer crashes if it gets a very long subject from the
news server (longer than 253 characters).

The command key equivalent for the \"Next Article\" command has been
changed back from Command-Space Bar to Command-F. There were at least
two problems with Command-Space Bar: Apple has reserved this for
switching script systems, and the Command symbol followed by nothing
looks very confusing to most users in the menu.

The command key equivalent for the \"Follow-Up to Article\" command has
been changed from Command-F to Command-R.

There is a new command key equivalent Command-K for the \"Post New
Article\" command.

When replying to a posting via mail, if the posting contains a
\"Reply-To:\" header line, it is used instead of the \"From:\" header
line to set the default recipient of the mail message, as per RFC 1036.

Increased the limit on the number of groups in the full group list
window and the new group list window from 8192 groups to 16384 groups.
\[I simplified the List Manager cell data for these kinds of windows.
Only the two byte index into the group list array is stored, not the old
trailing 0 byte or bold face 0xff flag byte.\]

Fixed an error in the full group list and new group list windows. If the
group contained only one active article, the group name was sometimes
being displayed non-bold instead of bold.

When run for the first time, NewsWatcher asks the user to supply the
domain names of the news server and the mail server. In 1.3d1, if no
name was supplied in one of these dialogs, NewsWatcher presented the
dialog again until a name was entered. In 1.3d2, if no news server name
is supplied, an error message is issued and the startup process is
canceled. If no mail server name is supplied, the user is asked to
supply one when and if he tries to send a mail message.

If an error occurs during startup, or if the user cancels startup, the
following error message is presented: \"An error occurred during the
startup process, or you canceled the startup process. You may adjust
NewsWatcher\'s settings and preferences, but you will not be able to
read or post news.\"

In the standard file dialog presented by the \"Open Group List\"
command, only files of type \'NEWS\' are shown (that is, only group list
files previously saved by NewsWatcher). In 1.3d1, all \'TEXT\' files
were also shown, but unfortunately if an arbitrary text file was chosen,
NewsWatcher often crashed. This problem will be readdressed in some
later version of NewsWatcher (see the To Do list).

In 1.3d1, pressing any key would cancel a long operation. This error has
been fixed. Only the Escape and Command-Period keys cancel. All other
keys are ignored.

The \"Next Article\" command now works with the full group list window
and with the new groups window.

The \"Next Group\" command now works with the full group list window,
with the new groups window, and with article windows.

Fixed an error in the \"Next Article\" and \"Next Group\" commands: If
there are multiple selections in a group list or subject list before one
of these commands is used, the additional selected list items are
deselected.

Version 1.3d1 introduced the following error: When an article window was
opened, the window title was missing the checkmark indicating that the
article was read. This caused at least the following two problems: The
\"Mark Unread\" command didn\'t work, and opening the same article again
caused it to be opened a second time in a second window rather than
having the previously opened copy brought to the front. All these
problems are fixed.

During startup, the user can now cancel the last phase of startup which
checks for new groups. In version 1.3d1, if this phase was canceled,
when the user tried to open a subject list from the full group list, he
got the error message \"Could not reestablish news server connection.\"
This problem has been fixed.

After turning on the automatically get/put .newsrc preference, the
following alert is presented: \"You must quit and restart the program
for the \"Automatically get/put .newsrc\" preference to take effect.\"
One user found the way this preference works confusing, and I hope the
alert helps alleviate the confusion.

Fixed yet another error in window zooming - subject windows were almost
always zoomed too wide.

After several \"Send Group List to Net\" commands in a single session,
1.3d1 would put up several out of memory alerts and then crash. This
problem has been fixed. \[This was a horrible memory leak - I was
forgetting to dispose a pointer to a 150K buffer.\]

\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\--

Version 1.3d1

June 15, 1992

The main changes in 1.3d1 involve error detection, error recovery, error
reporting, and human interface details.

There is a new command named \"Open Selected Reference\" in the \"News\"
menu. Click on or select all or part of any cross-reference inside angle
brackets (\<\...\>) in an article window, then use this command to open
the referenced article in a new window. Option-clicking on such a
reference is a convenient keyboard shortcut for this command.

There is a new command named \"Remove Read Articles\" in the \"News\"
menu. This command removes read subjects from subject windows.

There is a new preference titled \"Automatically get/put .newsrc\". If
this preference is selected, NewsWatcher automatically does a \"Get
Group List from Net\" command at startup and a \"Send Group List to
Net\" command at termination. People who use both NewsWatcher and a UNIX
newsreader to read the news will find this preference useful.

There is a new preference titled \"Mail copies of replies to me\". If
this preference is selected, all replies to articles sent via mail
include a \"cc\" field to send a carbon copy to the user.

All of the low-level TCP/IP code has been extensively revised or
completely rewritten \[modules TCPRoutines.c, TCPHi.c, NNTPLow.c,
SMTPLow.c, and FTPLow.c\]. All errors involving transactions with NNTP,
SMTP, and FTP servers are now handled properly and reported to the user
properly. Canceling server transactions now works properly.

The status window now contains a Cancel button. Command-Period and
Escape are keyboard shortcuts for canceling operations. All time
consuming operations can

be canceled. When such an operation is canceled, control is returned to
the user immediately.

When an NNTP server transaction is canceled, the NNTP connection is
aborted. NewsWatcher attempts to reestablish the connection when the
next transaction is begun. If the connection cannot be reestablished, an
error message is presented to the user.

The status window messages have been revised. There are fewer of these
messages.

All dialogs and alerts have been revised to follow Apple\'s Human
Interface Guidelines. They are properly centered on the screen. Buttons
are flashed when keyboard equivalents are used. Update events are
handled properly.

The command key shortcut for the \"Next Article\" command has been
changed from Command-F to Command-Space Bar. The command has been
improved. It now always opens the next unread article or group, skipping
any read articles.

The About box has been modified to mention contributor\'s names.

The host/username dialog and the password dialog have been combined into
a single dialog.

There are new dialogs for reporting errors.

The posting dialog contains new fields for specifying the
\"Followup-To\" and \"Distribution\" header fields.

The 1.3d1 \"News Prefs\" file is fully compatible with the \"News
Prefs\" files used by versions 1.2(NU) and 1.1(NU) and the original
version 1.0.2.

The \"Select All\" command has been moved to its proper location in the
Edit menu.

The command key shortcut for the \"Zoom Window\" command has been
changed from Command-B to Command-\\.

The following commands now have command key shortcuts:

Rot-13 Text: Command-D.

Mark Unread: Command-U.

Follow-Up to Article: Command-F.

Respond through Mail: Command-E.

The \"Track Thread Backwards\" command has been renamed \"Open All
References\".

The \"Show/Hide Group Window\" command has been renamed \"Show/Hide Full
Group List\".

The \"Groups\" window has been renamed \"Full Group List\".

NewsWatcher now does a better job of relinquishing the CPU to other
processes. During lengthy operations, the CPU is relinquished only once
every tick (1/60 second).

The annoying flickering double-arrow cursor has been abolished. During
lengthy operations, NewsWatcher now presents a reasonably smoothly
rotating beachball cursor.

Replying to articles via mail now works properly with the VAX/VMS
Multinet mail server. \[NewsWatcher uses the HELO command as specified
in RFC 821.\]

Periods at beginnings of lines are now properly converted to double
periods when sending postings and mail messages, as specified by the
RFCs 821 and 977. When receiving postings and mail messages, double
periods at beginnings of lines are converted back to single periods.

Window zooming has been further improved.

Trailing blank lines are removed when sending postings and mail
messages.

Trailing blank lines are removed when receiving postings. Zoomed article
windows no longer contain superfluous white space at the bottom of the
window.

When sending mail messages, NewsWatcher now recognizes all three legal
formats for recipient addresses in the To:, Cc:, and Bcc: fields:

address

address (comment)

comment \<address\>

Printing of long articles now works properly. The entire article is
printed, not just the current section.

Printing page ranges now works properly.

Saving user group lists is much faster, especially over slow links like
ARA.

Startup is faster if the full group list window is hidden. When the full
group list window is shown, NewsWatcher must calculate the width of the
widest group name. This takes several seconds. This is now done only
when and if the full group list window is actually shown, rather than
doing it every time the program is run at startup.

Backspace/underscore and underscore/backspace combinations are removed
when fetching articles. These combinations make sense on UNIX hosts, but
not on the Mac.

When a TCP stream is closed, NewsWatcher now waits for the server to
close its end of the connection before releasing the stream. This avoids
crashes, especially on slow links.

For large articles, scrolling between sections redraws the window
properly.

When following up to a posting, if the article contains a
\"Followup-To:\" header line, it is used instead of the \"NewsGroups:\"
header line to set the default newsgroups for the follow-up posting. If
the \"Followup-To:\" header is \"poster\", the follow-up is sent to the
author of the article via email rather than being posted. (As per RFC
1036).

The \"Path\" header line on postings is now set to the first word of the
domain name of the posting Mac, or to \"NewsWatcher\" if the Mac has no
domain name.

NewsWatcher now creates reasonable message ids for all posted articles.

When getting the full group list from the server, only groups with
status \"y\", \"n\", or \"m\" are added to the list. All other groups
(e.g., those with status \"x\" or \"=\") are ignored.

The default value for the \"Offset windows from parent\" preference was
changed from false to true.

Many, many nasty potentially crash-causing errors in the code have been
fixed.

\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\--

Version 1.2(NU)

May 7, 1992

All of the startup code has been optimized. On my Ethernet IIci, I got a
54 second startup time down to 12 seconds. On a LocalTalk SE, it\'s down
from 248 to 38 seconds.

\[When getting the full group list from the server, the old version
allocated one record at a time in the full group array, calling
SetHandleSize once per group to increase the array size. To make things
even worse, the relocatable block was moved to the top of the heap with
MoveHHi each time. This resulted in n(n-1)/2 group record memory move
operations, where n is the number of groups in the full group list. The
new version starts by allocating enough room for 2000 records, and grows
the array by 500 records at a time if and when this is necessary. This
eliminates all but a minimal amount of memory moving, and makes getting
the full group list much, much, faster.\]

\[When sorting the full group list, the old version called GiveTime once
every comparison operation to give time to background tasks. The new
version only does this every 256 comparison operations. I also now use
Haydn Huntley\'s fastqsort instead of MPW\'s standard qsort. Thanks to
Matt Mora for these suggestions, and for sending me the fastqsort code.
These changes make the sorting operation much, much faster - about a
second on my IIci.\]

\[When building the full group list List Manager data structure, the old
version called LSetCell to add each new cell. The new version instead
builds the List Manager data structure by hand using efficient C code.
This is now very fast - only a fraction of a second on my IIci.\]

Posting and mail windows are now word wrapped. When the posting or mail
message is sent to the server, paragraphs are broken into lines of 75
characters or less. Header lines and all lines beginning with \"\>\" are
always sent as is, without being broken. These windows are also zoomed
more intelligently, and they are now opened zoomed if the \"Open Windows
Zoomed\" preference is set. Article windows are also now word wrapped,
and they are zoomed more intelligently.

The new \"Signature\" command in the \"File\" menu can be used to set a
signature for all postings and mail messages. The signature is saved on
the News Prefs file. It is automatically included at the end of all
posting and mail windows when they are opened.

Articles longer than 32K can now be viewed. Long articles are split into
\"sections\" of 32K or less. A horizontal scroll bar at the bottom of
the article window is used to scroll through the sections. A status
message saying \"Section x of y\" also appears at the bottom of the
window. An attempt is made

to split long articles into sections intelligently. The program first
tries to split at a line of dashes (e.g., separator lines in digests
like info-mac), then at a paragraph boundary, and then at a line
boundary. Saving an article to disk saves the entire article, not just
the current section.

There is a new command named \"Next Group\" (Command-G) in the \"News\"
menu. If a subject window is on top, this command marks all of the
articles read, closes the window, and opens the next group with unread
messages. This is equivalent to typing Command-A-M-W-F in the old
version. The new command is intended to be a convenient shortcut for
that common operation. If a user group window is on top, the new command
is equivalent to \"Next Article\".

I fixed error checking during startup. Any errors are reported to the
user, rather than just opening an empty group window. If the server is
up but refuses to accept the connection for some reason, the error
message issued by the server is displayed to the user. If a startup
error occurs, no windows are opened, and the only menu commands
available are About NewsWatcher, Preferences, Signature, Quit, Set News
Server Address, and Set Mail Server Address.

The default preferences have been changed to open windows zoomed and not
staggered. There is a new preference to get rid of the \"Are you sure
you want to post\" alert. The new preference file format is fully
compatible with the old format. The new version of NewsWatcher can read
the old version prefs files and vice versa.

When posting a new article, the program now tries to fill in a default
for the group name in the posting dialog. If the top window is a subject
list or article window, the group to which the subject list or article
belongs is used as the default. If the top window is a group list with a
single selected group name, that group name is used.

I got rid of the \"Distribution\" field in the posting dialogs. Users
can edit this information in the header portion of the article window if
they wish.

Keyboard navigation in the full group window is much faster \[I use a
binary search instead of a linear search\]. Abbreviated navigation
strings can also be used. For example, typing \"n.a.n\" jumps to
\"news.announce.newgroups\". Basically, any period typed matches
everything up to and including the next period in a group name. This
doesn\'t always work perfectly \[there are some holes in the
algorithm\]. But it works quite well in practice. Sometimes you need to
type an extra character or two. For example, with our full group list,
\"c.s.m.d\" doesn\'t jump to \"comp.sys.mac.digest,\" but \"c.s.ma.d\"
works fine. You may need to experiment to find what works with your full
group list.

The \"Track Thread Backwards\" command now orders the opened windows so
that the window on top is the earliest referenced article. This is the
reverse of the ordering used in the old version. A status window is now
displayed during this operation.

The Escape key can now be used to cancel all dialogs and alerts which
have a Cancel button. The cursor is now changed to an ibeam whenever it
is over a textedit field in a dialog.

The new version no longer uses any progress bars in the status window.
This helps speed up the program. They never worked very well anyway. The
status window has also been made quite a bit wider to accommodate longer
status message like the ones presented during a Search command.

During program startup, the status window does not disappear until the
program is ready to be used. There are two new status messages during
startup: \"Opening Documents\...\" and \"Checking for New Groups\...\".
The New Groups window (if any) now opens on top of any opened document
windows.

When saving articles to disk, the program no longer fetches a new copy
of the article from the server. Saving articles is now very fast. This
works properly even with articles longer than 32K. The old version did
not properly save articles whose header contained \"Message-id:\" rather
than \"Message-ID:\" This problem has been fixed. The old version also
did not notify the user properly if an error occurred during a save
operation. The new version presents an alert if anything goes wrong.

Retrieving subject lists from the server and retrieving articles from
the server are a bit faster. Errors in retrieving articles are now
reported to the user.

Fixed an error in window zooming. The top of the window was not being
zoomed to the top of the screen properly.

I fixed an error in the \"Windows\" menu. Sometimes selecting a window
title from the menu failed to bring the specified window to the front.

The program now permits users to change the mail server name without
having to restart.

The program now checks for quoted text too long in a follow-up window.
If the quoted text is too long, it is truncated, and the program
presents an alert. This problem could cause crashes in the old version.

In the old version, if a brand new group was subscribed to (first
article was article number 1), and the subject list for the new group
was opened, but none of the new articles were marked read, some or all
of the articles could be marked read by mistake. This error has been
fixed.

For articles posted to more than one group, when one of the copies is
read, NewsWatcher marks all the other copies read. There was an error in
the old version which could sometimes cause additional articles to be
marked read by mistake. This error has been fixed.

In user group windows opened as the result of searches and getting group
lists from the net, the first group in the window is now selected when
the window is opened. In the old version, no group was selected.

\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\--

Version 1.1(NU)

April 29, 1992

The most important new feature in version 1.1(NU) is that the full group
list is no longer restricted to 32K in size (the sum of the lengths of
the full names of all the groups, plus one or two extra bytes per
group). The new limit is about 8000 newsgroups total (the lengths of
their names no longer matters), which is many more than most sites
currently have and should be enough for the foreseeable future.

\[The old limit was due to a 32K limit on the total amount of cell data
in a single List Manager data structure. The old version 1.0.2 stored
full group names directly in the cell data, hence the limit. In my new
version, instead of storing the group names in the cell data, I instead
store a two byte index into a separate \"group list\" array. I do this
only for the full group list window (kind=cGroup) and for the new groups
window (kind=cNewGroup). The \"group list\" array already existed in
version 1.0.2 for these two kinds of windows, and it already contained a
separate copy of each group name, plus lots of other info about the
groups. I didn\'t make any changes to this data structure.\]

The new version no longer crashes on 68000 Macs when posting. \[This
error in the old version was actually due to an error in code generation
in the MPW C compiler. My MPW C 3.2 compiler still generates the bogus
code. I had to rearrange and simplify the relevant part of the posting
code to work around the compiler error. \]

When creating a follow-up to another posting, the old version did not
always properly copy the \"Newsgroups\" field from the header of the
original posting to the header of the follow-up. In particular, it
failed to do this properly if the original posting contained the
\"Newsgroups\" line as the very first line of the header. This problem
has been fixed in the new version.

At the very end of the process of sending a posting to the NNTP server,
the old version timed out if the server did not send its final status
message within 20 seconds. Slow servers can take much longer to digest a
new posting. (For example, the sadly overloaded beast we use here at NU
can sometimes take several minutes to digest even the smallest
postings.) The new version does not time out. If the user wishes to
cancel a posting which appears to be hung or taking too long, he must
type Command-Period to manually cancel the operation.

The old version contained a bad error in the posting code. If anything
went wrong during an attempt to post, the failure to successfully post
was not properly reported to the user. The new version fixes this error.
If the server does not fully accept the posting for any reason, an alert
will so inform the user. I have noticed in the past that sometimes my
NewsWatcher postings have simply disappeared into a black hole, and
I\'ve had to repost them. This problem should be fixed now (I hope).

Each time the user quits NewsWatcher, it writes the full group list to
the \"News Prefs\" file. This used to take quite a long time, and the
program presented an alert with a progress bar to amuse the user during
the wait. I improved the code so that this operation is now almost
instantaneous. The new version no longer presents the alert.

I fixed a minor error in the \"Reduction Filter\" command which could
sometimes cause stray garbage characters to appear at the bottom of a
newsgroup or subject list window after the Delete key was pressed.

\[I incorporated a change recommended by Cecil Coupe of J. R. Simplot
Co.: \"We did have one other problem with the \'Put Group list\...\'
menu selection command not working. I don\'t know if the binary versions
have this problem, but recompiling the source with MPW can cause this to
stop working. The cure (in the source code) is to replace \'short
portnum\' with \'tcp_port portnum\' in ftplow.c.\" (from a posting on
comp.sys.mac.comm on Oct. 22, 1991).\]