Changes in 1.16e: 1. As miss-spelling in the CloseWindow requester has been corrected ("cnanged" to "changed"). 2. An insidious problem in the NewsGroup Pruning code which could cause memory to be over-written, and already freed memory to be used has been corrected. (A struct NODE * pointer was being free()'d and then the node.ln_Succ field being extracted from the free()'d memory. On a busy system, this memory could already have been re-allocated. On some systems, GRn would guru; on others, GRn would hang.) Thanks to Christopher A. Wichura for helping me track this down. 3. When posting an article, if the user.nrefs file is not found, then user.headers is looked for (to be compliant with DNews). 4. GRn now looks at the post being editted, and if you did not change the post, asks you if you wish to continue with the post. You can discard the post at that time. This does require an editor that is smart enough to not re-write the file if no changes were made. 5. GRn now examines the return value from the editor used in posting an article. If the value was non-zero, a requester is displayed informing the user of that fact, and asking the user whether or not to continue with the post. 6. The Posting routines have been completely re-written to prepare for MIME. They should also be faster as a result of this. 7. Similar changes for all Mail (Reply, Bug report, etc.) has been made as in 4, 5, and 6. 8. The Publish routine was re-written. A couple of memory leaks were fixed. Publish also now checks return values, and give you an opportunity to abort when there are any questions about the process. 9. Under certain special data conditions, OutputFile() could enter an infinite loop (until memory was exahusted). A "while (len)" condition is now "while (len > 0)". 10. All SendMail routines and all PostNews routines have been modularized. Handling is now the same. Kinda boring, actually. :) 11. SendMail() was not removing the temporary file created if the user chose to not send the mail off. This was probably an original bug in BugReport(). :) 12. PROCDEBUG defined and installed in gmode.c and amode.c. What a help! 13. Cross posting is now honored. GRn used to just place the currently selected newsgroup in the editor buffer when a followup was being entered. It now properly includes all Newsgroups in the Newsgroup line. 14. The "Followup-To:" header is now honored (with the known exception of "poster"). Previously, GRn ignored the header. 15. Just like GRn allows user.nrefs for additional header information to be added to news articles, you may now have a user.mrefs file for additional header information to be added to mail messages. If that file doesn't exist, GRn also checks for user.header to be consistent (and compliant) with DMail and DNews. Do note that for News it is ".nrefs" and for Mail it is ".mrefs". There is a difference, although you can certainly link them to be the same. 16. GRn now redraws the screen more intelligently. It shouldn't happen when it doesn't need to, but it will redraw after a requestor has been seen. GRn used to not redraw the Article Mode screen after a Reply. If your editor opened on GRn's window, it was possible for the GRn screen to become corrupted. The user would have to exit to Group Mode and then return to Article Mode. 17. GRn now explicitly sets the stack of the PostNews and SendMail programs to 32000. I could be talked into making this configurable, but this is a reasonable number, I think. 18. A miss-spelling in the text for the "UUCP Bug Report" has been corrected. 19. When exiting, GRn now calculates the size of the GRnRC file, and attempts to go ahead and get memory for it. If GRn can acquire all the memory at once, the GRnRC file will be built in-core, and dumped to disk with a single write statement. This results in a SIGNIFICANT improvement in termination speed. If GRn cannot acquire the memory, or an error occurs while he tries to dump the file, GRn will try the old method. In general, the output error handling has been improved for this function (there wasn't any at all, and now there is some). :) 20. The documentation has been significantly reworked. The next release will probably approach GNU recommendations (MANIFEST, INSTALL, README, PROBLEMS, GRn.doc, GRn.man). 21. Two minor performance improvements to ScanAndLoadHeaders(), at the cost of a byte of memory. Worthwhile tradeoff. (Eliminated two if statements that were interested in whether or not the last read() was exactly the maximum size of the array, to avoid overwriting the last byte. I made the array one byte larger than the maximum I/O, so the code didn't have to care.) 22. A minor performance improvement to FixNames(). It examined every character in the "src" pointer, even though it had passed the "interesting" character. It now stops looking once it finds that character. 23. When subscribing to new newsgroups, BuildNewsTree() held a Lock() on every new newsgroup, even after it was done with it. This has been corrected. 24. GRn no longer uses a busy-loop "Delay()" when requesters are put up looking for input. GRn uses WaitPort() just like he should. This will make GRn more multi-tasking "friendly" to people who use things like Exploding Windows or Pointer Activate (which activates the window underneath the pointer always). 25. Minor changes were made to the way that Gadtools messages are handled with the requesters to eliminate an Enforcer/Mungwall hit. Thanks again to Christopher A. Wichura for working with me to figure this out. 26. The Forward gadget is now handled as worked-out on Usenet. Each forwarded message has "(fwd)" appended to the end of the "Subject:" header -- unless it already exists. No "Re:"s or anything else are prefixed. The "To:" header is no longer filled out as if it were a reply. The Forwarded text is headed by an "Originally From " line, and has "---------- End of Forwarded Article ----------" at the end. There is no prefix of ">" before each line of text. 27. In a FollowUp, if the Distribution header was not present in the article being followed-up-to, a blank Distribution line was put into the user's editor. This has been changed to "Distribution: world" to avoid any further confusion. 28. When Forwarding an article, if a line starts with "From ", a ">" is now placed in front of the "From " to avoid confusing mailers about where the article starts/stops. This is consistent with Elm (BSD) and mailx (SVR4). 29. Threading speed has been significantly improved by using AmigaDOS I/O and register pointers intead of stdio and regular pointers. 30. Shift-up-arrow now goes to the top of the article. Shift-down-arrow now goes to the bottom of the article. Both ENTER and RETURN go down one line. Previously, all of these were ignored. The shifted commands are a little odd - the SHIFT-IN only affects the NEXT character. So, SHIFT-UP-ARROW followed by DOWN-ARROW while the SHIFT is still in, and hasn't been released, will cause only a single line down from the top. This is due to the way Intuition gives us shift-in-out with Gadtools. There is a workaround, but it'll take quite a bit of work. Not right now. :) Just hit shift a lot. 31. A many-times-reported problem with scrolling (using the space bar to go through an article) not completely displaying the article has been corrected. The view-height of the display window was being calculated using Topaz-8 as the character size instead of the user specified font. Those persons using grn.font never saw the problem since grn.font is the same size as Topaz-8. Keep in mind, GRn does require fixed-length fonts. Proportional fonts will not work properly. 32. The Reply command now asks you whether to include the text of the original article or not. 33. The Publish command would, under certain conditions, prefix every line of the uuencoded file with "%s". This has been corrected. 34. SAS/C 5.10b compilation capability was restored. 35. Another change to make it easier to use GRn with C-News. Changes in 1.16d: This version was skipped to avoid confusion with Dillon's version numbering scheme. Changes in 1.16c: 1. The display of the group name when entering article mode happens much earlier than it used to. 2. A new toolttype "UPDATERC" and command-line option ('-u') are now recognized instead of using GRnrc. When GRn is executed with that option, no screens are opened, no output is generated (unless errors occur), etc, and it performs the same function that GRnrc used to. GRnrc is obsolete, does not work with HFS, and should be deleted from your disk (it is also MUCH slower than this release of GRn). 3. Memory allocations have been consolidated, and the number of them significantly reduced. Overall memory usage is down, and the reduction in allocations resulted in a large speedup in certain critical areas. 4. When in Article Mode, the Next Group button (or the "N" key) will now take you to the next group which has UNREAD articles. Not the next group in the list. This makes GRn much easier to use. You can still pick a particular group from Group Mode. 5. "FYI" in Replies and Forwards was changed to "Re:" to match the normal Usenet conventions. 6. GRn is MUCH more robust now. Errors which used to cause Panics() and GRn to terminate are now simply warnings. GRn recovers and continues. 7. GRn SHOULD be compatible with NFS mounting of C-News partitions. PLEASE someone verify this and let me know. 8. Signature file location searches are now consistent for all functions. 9. A "Percent Complete" gauge has been added to the WriteNewsTree function. So, you'll know how far along you are to letting GRn terminate. 10. Speed, SPEED, and more SPEED! GRn is MUCH faster than it was in almost every function. Certain critical path areas were completely rewritten (one of them, ShowMessage(), four times) to speed them up. There is more that can be done in this area (and it will be). But, I think the maximum speedups have now been realized. We've hit the limit using Gadtools ListViews. 11. Too many internal changes to mention. But ALL worthwhile. :) 12. Oh my god, I almost forgot -- SUBCRIPTIONS. You can now subscribe to new newsgroups without blowing away your user.grnrc file. When you start GRn, pass it a "-s" flag followed by the new newsgroups that you want to be added to your grnrc. Unfortunately, I'm lazy (and Myke Schwartz is the user interface guy), and I didn't add a way to do it online. So you WorkBench users will have to drop to the CLI to do this. One caveat: the NewsGroup MUST exist. If it doesn't, the subscription isn't allowed (by exist, I mean it must have a directory tree and a .next file on your system). For example: GRn -s alt.sex.stories comp.sys.amiga.emulations after GRn has executed, they are in your grnrc file permanently (or until you Junk them). So, you WorkBench users can leave the CLI alone. Oh, yeah. Due to some conflicts in the way things work you CANNOT do a "-u" (UPDATERC) and a "-s" in the same run. Sorry. You'll get an error message. :) 14. More speed enhancements in displaying articles (Article Mode). I don't think it can get any faster while staying in 'C'. It's pretty fast though. :) 15. The Article window is not cleared and relaid-out for every "Next Group" or "Previous Group" request. The article window stays until Article Mode is exited (either you Abort [close window] or go to Group Mode). This saves about 1.5 seconds on a 68000. 16. When there are no Newsgroups with unread articles, the "Next Group" request will take you to the NEXT GROUP in the list. This restores this behavior to the way it was in 1.16b and before -- when there are no unread articles left. 17. Some minor holes (unchecked exceptions) have been filled. I doubt anyone ever ran into them -- but now you never will. :) 18. Some more work in speeding up memory handling. A case of hanging pointers was corrected (how come no one every reported the memory leak???). It's as fast as it's going to get with DICE. I've put it on the list to write something better. *sigh* 19. Some minor speedups in "References:" header checking (when doing threading). Primarily because the check for "Re: " is now case sensitive per RFC. 20. Some preparation for future implementation. Code was written, but it was ifdef'ed out because I didn't have time to test it. 21. The GRn BUG Report has been changed to send mail to Michael B. Smith instead of Mike Schwartz. Changes in 1.16b: 1. Save article now appends instead of overwriting. 2. Space bar in article mode now goes down a full screen. 3. 'b' key does prev article instead of prev group! 4. Added code in article mode to open 1x1 requester (disable gadgets, IDCMP) during processing of events. This should prevent people from causing intuition/gadtools from queueing up bunches of events. Apparently there is a bug in one or the other if too many events get queued. 5. A problem with HFS support was corrected. Changes in 1.16a: 1. Mike Smith added HFS support. 2. The GRn version number is changed to match the current release of Dillon's AmigaUUCP (1.16). ******** Version Number Order Change Changes in 1.29: 1. Found the bug with the article view gadget not resetting to the top of the listview when using the thread and next unread gadgets. I normally don't use these, so I couldn't figure out what people were complaining about. But a very clear message from Norman R. Kraft made me see the problem and it was an easy one to fix. 2. Found a bug in the thread logic that can cause GURUs. No new guru bugs have been reported since V1.28 was released, but this will make GRn more bulletproof. 3. GRn is now being compiled with the DICE compiler. I am attempting to keep it SAS source compatible, but I can make no guarantees that if I stick with DICE that GRn sources will always be this way. GRn V1.28 compiled with SAS was 70844 bytes (LARGE CODE/DATA). With DICE, it is 52724 bytes (SMALL CODE/DATA). And DICE's library routines appear to work MUCH MUCH MUCH faster than those that SAS supplies. 4. Found a nasty bug in DICE startup code that kept GRn from working from workbench. This kept a new release of GRn from happening for a couple of weeks. Thanks to Georg Sassen for tracking this down for me!!! Changes in 1.28: 1. News editor and mail editor not parsed correctly. Fixed. 2. Use GetVPModeID() to find out workbench screen resolution. This makes GRn truly open its own custom interlace screen when necessary. 3. Added UUCP bug report. This posts a bug report to alt.sys.amiga.uucp in Matt Dillon's standard bug report format... 4. Improved the article display code to try to find a magical guru bug that I have yet to see for myself. The program is also now compiled with stack checking enabled. I would appreciate bug reports from people who get the crash and then run GRN from the CLI to see if it is a stack problem. Naturally, the fix for this would be to increase your STACK size in the CLI and the GRN icon! I personally run with a 64K stacksize in my CLI, and a 16K stack in my GRn icon and never see the problem. I always run GRn from the workbench/icon. 5. Actually added the 'b' key, which I missed in V1.27... :) 6. Added initial ToolType support for a few of the things that people are asking me for. I am not going to test these things thouroughly, however. I am depending on those of you who NEED these features to report problems to me and I will make the fixes. The tooltypes are: TOP=top y coordinate of window LEFT=left x coordinate of window WIDTH=width of window HEIGHT=height of window MSGFONT=name of font MSGFONTSIZE=size of font LOGFILE=filename (full path!) WRAPCOL=column The grn.icon that comes with this release has these tooltypes commented out so you can see the exact format. Note for MSGFONT, you MUST use fontname.font format or GRn will fail with an unpredictable error message :). If the TOP,LEFT,WIDTH,and HEIGHT are specified, then GRn will NOT attempt top open its custom screen. Also, if you specify screen dimensions, you must they will override GRn's concept of what they should be. The WRAPCOL tooltype allows you to specify what column to wrap article text at. You will need to specify this if you use a font of your own choosing. TOPAZ 8 point font requires a wrap at somewhere between 60 and 64, while grn.font requires it at 80-84. The LOGFILE tooltype lets you specify the name of a file which GRn uses to print error messages and other log messages (currently only errors). Type the logfile out to see why GRn is failing when run from workbench. Logfile defaults to uuspool:logfile (always when run from CLI) unless overridden by the tooltype. If GRn fails for some reason before getting to figure out your logfile, it will print its panic message to uuspool:logfile as well. 7. Fixed a bug in my ParseName() routine which didn't handle nested parenthesis correctly in usernames. 8. GRn bug report feature now puts the version number in the subject field so I know which version of GRN you are "bugging" me about :) 9. When posting news, GRn now looks for the file uulib:user.nrefs. The contents of this file are appended to the header portion of your article that will be posted. I've been asked to add this feature, though I don't know what real use it will be (please email me the answers :)!! Anyhow, GRn has already been doing something similar by adding the line "X-NewsSoftware: GRn..." to your news articles. Incidentally, even with hide-headers selected, any article posted by GRn will still show the X-NewsSoftware line in the message body - this way we all know who is using GRn :) 10. Fixed a nit in the publish feature. It included the full pathname to the file that was uuencoded (i.e. begin code:grn-src/grn.lzh 777). Now it just uses the filename. Changes in 1.27: 1. QueryOverscan used to determine window height. 2. A bug in v1.26 caused blank lines to be deleted from articles displayed. This is fixed. 3. Catch Up button added to articles mode. 4. The 'u' key (next unread) wasn't being processed in articles mode. 5. The 'b' key is aliased (does same thing as) the 'p' key in articles mode. I find it easier to hit n/b together to go next/prev article than to hunt for the 'p' key. This key is not shown as a GT_Underscore, as the 'p' key is still implemented. 6. GRn used to fail if PostNews or SendMail variables were not set. Now, these default to PostNews and SendMail. If these aren't on your path, or GRn is not in the same directory as your binaries, this will cause GRn to fail to find those binaries when run from Workbench. This is a WARNING so beware! 7. The panic routine now writes its error messages to uuspool:logfile as well as attempting to print to the cli window. GRn does not print error messages if run from workbench. 8. GT_Underscore added to YES/NO requester for "Quit". 9. GRnrc program implemented. It simply reads in the existing tree, if found, updates it, and writes it back out. Useful for cron to launch in the background and will speed up the launch of grn itself. 10. Increased size of internal buffers for from: and subject: fields to 512 bytes. Some turkeys out there actually have strings longer than 128 here :) 11. Increased size of all internal buffers that were 128 bytes to 256 bytes, except as in 10 above. 12. Added the publish feature. Now there is a way to post multipart binaries from directly within GRn. Additional information is in the grn.doc file. Changes in 1.26: I accidentally posted 1.25 with a bug in it. I tried to delete it from my UUSPOOL: before it got out. It should not be used. 1.26 is the one to use! 1. Lines starting with capital X are not stripped from headers when the hide-headers option is on. This way, we will all know who is using GRn :). Also, there might be other interesting items in the headers worth seeing! 2. Added date text gadget to the articles mode. Changes in 1.25: 1. Fixed problem with program openning its own custom screen in LoRes. 2. Window height will never exceed 400 pixels. 3. Tried to make requesters more system friendly (less tendancy to block others) 4. Fixed a bug in the Save feature. 5. Added my first cut at threading support! 6. TaskID added to tempfile names for posting and mail functions. 7. Long lines are split into two lines in article browser listview. 8. Tabs expanded into spaces in article browser listview. Changes in 1.24: Beta 1.24 was skipped because it was only sent to a few testers. Changes in 1.23: 1. GT_Underscore added to all requesters. 2. GT_Underscore added to junk gadget. If you use the key, the group is junked without asking you if it is ok. This is to make it very fast to trim a lot of newsgroups down to the few you want. I suggest you use the mouse and gadget, because it will ask, especially if it is only a few to junk! 3. GRn no longer chokes if a newsgroup has no .next file in it. Changes in 1.22: 1. The program now uses significantly less memory. It used to allocate 128 bytes for each article for the "From:" and "Subject:" headers. Now it allocates what it needs. The savings is dramatic! For my 30 groups and 3000 articles, the old GRn used 1,650,624 bytes. This new beta version, for the same newstree, uses 711,864 bytes. 2. The bug report button now sends bug reports to grnbugs@amiga0.sf-bay.org, so I can keep them separate from my regular mail. Changes in 1.20: 1. GRn is fully compliant with Dillon's UUCP package. It now uses the UUNews config entry instead of requiring a uunews: assign. GRn now looks for s:uuconfig first before looking for uulib:config. And if s:uuconfig exists, and there is a uulib config variable in it, it is used instead of the hard assign uulib:. 2. A single enforcer hit was found and squashed. I have egg all over my face after misreading the autodocs for gadtools and posting about the problem in csa.programmer. 3. GT_Underscore has been added to the various gadgets that now have keyboard equivalents. Keep in mind that the keyboard equivalents ARE case sensitive! All the gadgets are rendered in Topaz80 font now. The grn.font is still used for the listviews only! grn.font allows 84 columns of text in the listviews, while topaz allows about 60. 4. A new button has been added to the groups mode display called Junk. If you click on this, you will be asked if you really want to junk the selected newsgroup. When you junk a newsgroup, it is deleted from the news tree (but not your uunews:) so you can filter out the newsgroups you don't care to see in the group list LISTVIEW. 5. Fancier signature support has been added. The program now looks for user.signature in the uunews:newsgroup/ directory first. Then it looks for uulib:user.signature. Then it looks for uulib:.signature. The theory behind this is that you can have a unique .signature for each newsgroup you post to. 6. Full key support has been added to groups mode. The cursor keys scroll the group list LISTVIEW. 7. The requester package I wrote has been cleaned up quite a bit. It now uses Topaz 8-point font and should never mess up again!!! (famous last words...) 8. The very first grn.font I sent with the first beta (1.10) required you to run FixFonts on it to make it work. Many people got the now famous "Can't CreateGadget" error message. Sorry the message is so crude, but gadtools doesn't tell me why the gadget wasn't created... The new distribution will come with the fixed font. 9. GRn is designed for an interlaced display. If I cut out half the vertical resolution, the program would be unusable. However, some of you actually use a non-interlace workbench... This release of GRn detects that you aren't in interlace and will open its own custom screen. 10. Minor glitches in Next Unread, Next Group, and Prev Group have been fixed. These should work just fine now. 11. TEXT_KIND gadtools gadgets require that your software uses a static buffer to hold the text that the gadget will display. As I wrote earlier, I misunderstood the autodocs and thought that gadtools would copy the string to a safe place. Therefore, in the last release, some of the Text gadgets would display garbage at times. This is no longer the case. 12. The previous version of GRn was imploded (compressed). I will no longer distribute it in this form. You can go implode it yourself. I only imploded the binary because it is a sure way to ensure that debug hunks and symbol hunks are stripped from the executable. (SAS adds these hunks for debugging purposes only - but the executable loads real real real slow if they are in the file). 13. And best news of all. The grnrc file has been totally redone to reduce the disk space it uses and also speed up the initialization time. My grnrc went from 350K down to < 60K for 30 newsgroups and 2000 articles. GRn takes about 10 seconds to load it and be up and running now. 14. The grnrc file now has a version number embedded in it. The software will tell you to delete old grnrc files so it can create new ones. In the future, the grnrc file is likely to change when I add preferences items to it, kill files, and threading information. Changes in 1.10: 1. When the program was run from an Icon, the followup and reply functions broke. This is due to Execute() not being passed the full path to the PostNews and SendMail program. It works if you put the GRn executable in the same directory as your UUCP binaries. 2. Added spacebar to amode, which pages down a page. 3. Added cursor keys up/down to scroll listview up/down in amode. 4. Implemented Post button in gmode and amode. 5. Made the window open against the right edge of the screen. This is handy for when your news/mail editor opens on the left side... 6. Added my nifty (pat pat pat my own back :) requester package.