7#@G<<<<<<,>>>> >d?L?L?`x>? ?@*@G<@@ @@@G@@@@@@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 Macs 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 Developers 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 didnt 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 Werners 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 dont 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 dont 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. Dont 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. Dont 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 dont know how these bogus article number ranges got into Stephans 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 Symantecs 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 doesnt 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 doesnt 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 , 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
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).] u^4 b8 @*+8`x+,z{fgZ[rs * + B C # $ 0 1 @ A T U   56hifgvw#$uv%&tu ! ! ! ! ! ! ! W !LMNORSrsop!2!3!!"""N"O""#;#<##$$$$$$% % %%%%%''++----..//0m0n001<1=1>1p1q3I3J336@6A667}7~777! ! ! ! ! ! ! ! ! ! ! N77788::::::; ; ;L;M<=<>=j=k@?@@BBCUCVCCDDDDD$D%DDDDGGHHIIJJL L LiLjMMNNPPR8R9RuRvTTWWXX^_^`^^``aeafc3c4dGdHe e e?! ! !  ! ! ! !  ! ! ! ! Oe?e@gghhiUiVjjjjkLkMk\k]kkkll&l'mmnQnRqMqNttuuw[w\z^z_{{||:;cdjk%&tuMKL!  !  ! ! ! ! !  ! ! R^_"#wxxyZ[VWXnoBCDnoWXlm[\>?@xy#$=> !  ! ! ! ! !  ! !  ! ! ! Owxij[\qrKL/0rsĔĕ67ʼnŊȹȺ-.ɿVstuʑʒIJno~΀ΛΜϾϿчш! ! ! ! ! ! ! UшӥӦӧӽӾ ՅՆٷٸ =^zړڔlm-yz޵޶޷wx#$?@ 78IJ*+HILMAB[\cO4Xrs6QR,-CD"#12>?}~&'ABWX         & '          de(>?c.=>yzGHop!"56}7qC  ( )  !h!i""#B#C##$D$E$$%C%D&&(()K)L****+++++ c+ +!+R+S++,f,g,,,,,,-c-d--..////0V0W0X0000111111224-4.4u4v44445555778k8l::<<=+=,=-=\=]>J>K? ? ??@@AGAHAIA|A}BLBMCCCCCDDEQERFsFtFFH@HAJ4J5JJKBKCcKCKKL L LsLtMMMMMMSSSS(S)UUVVXXY@YAYYZJZK\\\\\ ]]]]^^O^\^^_3_}__``J`q`r```a'aNaabbNbobbc:ccccdJdKddeeeZeeef8fffg!g"gxgyggh4hOhhhi7ipiijjZcjZjjkk\kikkklln"n&nmnnooPoop pOp^ppqq]qqr#rbrrssuKuLuMu\u]yyzz|R|S||},}-}}:;"#uv  >?./!G| %Dd 'Lq"Qc&Z<amn|}YZ23()ijcd?@cd&'yz<=@A\]abijxy !cST*+ĺĻmnuv˃˄̼̽VWUVϤϥϳϴ45шщ  [\ijefab׳״ؑؒqrٲٳ :;ڥڦ78ۉۊ'?Wxܙܚ;<tuWXcXjkyz 01de\]@AYZ  cd56^_,-pq7856_`{|   V W  c      b c_`;<   0Cis&2>uIW&dp~n(Ôrξٓ?Q H h*3>IUak~xn)  ʃA6 c p     @@P@P@Pp@P'@P@P@LP@FPw@ gP!@"P#@@$P%P@&P'@(^P)@*P+(@,P-@.  7e?ш+ KCjZX  HH(FG(HH(d'@=/R@H-:LaserWriter 8 Monaco (Vp