Changes in 1.16f: 1. GRn now has (by popular demand) a version string in the executable that can be found by the C:Version command. 2. With so-called "Smart-UUCP" addresses GRn would sometimes display an error message: "FixName error (6)". This has been corrected. This has also improved the cases where nothing was being displayed in the From gadget in Article Mode. 3. Fixed a Publish() numbering bug introduced in 1.16e (publish was not counting correctly: 1/1, 2/2, 3/3 instead of 1/3, 2/3, 3/3). 4. Followup now gives you a warning if you would be posting to multiple groups. 5. The suffix ".GRn" has been added to all temporary files, for users of editors that load preferences based on suffix (like CED). 6. Implemented a "cancel article" function after much thought. Use the letter "D" (capital D) for "Delete". Capital C was not available (used for "Catchup") and a lower-case c is too easy to hit by mistake. There is NO gadget for this function. It shouldn't be executed often enough to need one. Note that Dillon's AmigaUUCP does NOT process Control messages properly. This function just causes the correct control message to be generated and sent out to your feed host and downstream hosts. It will not cause the message to "disappear" from your own computer. 7. The ScanAndLoadHeaders() function would try to close an already closed file if it could not find an empty line in the first 4096 bytes of a file. This would cause an eventual system failure. (This was mainly a problem for people who subscribed to the "junk" newsgroup.) 8. A change in the way IDCMP messages are processed was made. This resulted in improved modularity in several areas, and made keyboard response a little "snappier". 9. New keyboard short-cuts for Article Mode: cursor-left : previous article cursor-right : next article backspace : display previous page (opposite of space) 10. GRn now detects whether it is being run on a monochrome monitor and adjusts colors appropriately. Previously, none of the requesters that GRn presents were readable (white on white) in monochrome. 11. The current article pointer was not being cleared properly. GRn would still have a current article pointer when returning to Group Mode. This would cause some functions, such as Post, to fail, as they tried to access an article in an incorrect group. 12. Major changes that move toward support of serial NNTP and Ethernet NNTP. Some preliminary work toward support of XPK compressed news articles. 13. Addition of a Subscribe function from Group Mode. When the 'S' key is entered while in Group Mode (or the 'Subscribe' button is clicked), GRn will open a new window displaying the valid Newsgroups that may be subscribed to (for AmigaUUCP, UULib:Newsgroups is the source, for C-News, UULib:news/active, for NNTP, the servers LIST command is obtained for the first request in each session). Single-clicking on a newsgroup causes the newsgroup to be shown in the view area at the bottom of the window. Double-clicking on the newsgroup causes a requester to be displayed confirming that you want to subscribe to the newsgroup. If not, the request is discarded. If yes, the newsgroup is added to your subscription list, and the newsgroup is scanned for articles. (If you are already subscribed to that newsgroup, GRn will inform the user of that.) GRn no longer scans the entire news spool when a grnrc file is not present. An empty user.grnrc file is created, and the user is locked in Group Mode until at least one news group is subscribed to (or the user aborts out of GRn). Note that if you are a user of Dillon's AmigaUUCP, you will not be allowed to subscribe to a newsgroup until you have placed it into your UULib:Newsgroups file. This is because RNews will simply discard all articles for that newsgroup until it is in the Newsgroups file. It would be a waste for GRn to be subscribed to it. Similar reasoning applies to the restrictions for the C-News active file, and the newsgroup list from NNTP hosts. 14. A new tooltype CNEWS is recognized. When CNEWS is present, GRn scans for all articles during the pruning phase, instead of stopping with the first located article. This is required due to differences in the way trimnews (AmigaUUCP) and expire (C-News) work. When set, FOR C-NEWS ONLY, GRn will use a SIGNIFICANTLY smaller amount of memory. It also will extend the amount of time the pruning phase takes to run. If you set it when running AmigaUUCP, you will experience no added benefits, and the pruning phase will take much longer. Don't set it if you run AmigaUUCP. 15. GRn now allows the user to execute with NO subscribed newsgroups without crashing. GRn also will not create a grnrc file unless the user exits by using the Quit Button, in the case of no subscribed newsgroups. Until a user has subscribed to at least one newsgroup, the only allowed commands are: Quit, Subscribe, and Bug Report. 16. Changes have been made to the Button imagery in both of Group Mode and Article Mode. GRn now attempts to balance the buttons on the page for a more pleasing look. (I think it succeeded.) (For the amount of time this took me to code, I could've done kill file logic. Gadgets, even on 2.x, take too damn long. ) 17. For a net 350-byte penalty in binary-size, the routines controlling whether a "click" is currently accepted were replaced by defines for additional speed. Article Mode is snappier now. 18. Sort has been fixed! Changing article sorts (Number, From, Subject) would previously cause a loss of articles when two articles in a row met the same criteria (i.e., for "From:", two articles in a row with the same "From:" header; for "Subject:" when two articles in a row had the same "Subject:" header less "Re: "s). This was an insidious side effect of using Exec Lists to store the information. This has been corrected. As a side benefit, sort speed has been significantly improved. Also, "Re:"s are now ignored in the "Subject" sort, with the article number being the secondary sort criteria. 19. Invisible to the user. TwoGadgetRequest() now has a default of "_Yes" and "_No" for leftText and rightText. This gives me back about 400 bytes. OneGadgetRequest() has a default of "OK" for the requestText. 20. The Forward command did not append a newline to the "ORIGINALLY FROM" line of the mail message. It does now. Also, "ORIGINALLY FROM" has been capitalized (it used to be "Originally From"). 21. GRn now recognizes the tooltype for PUBSCREEN although it isn't currently acted upon. 22. A new button is available from Group Mode. "Save/Update GRnRC" causes the current in-core copy of the GRnRC file to be saved to disk. Why, you may ask? Well, I really needed this while I was testing some changes, so I put it in. So, why not? 23. I couldn't leave it be. I FINALLY came up with a way to place the button gadgets accurately. Now, the button gadgets in Article Mode and in Group Mode are placed by a new procedure in system.c named PlaceGadgets(). The placement is accurate to within a pixel. I'm happy now. :) This change also saved about 1.5K of code space, and has replaced a great deal of what was once Topaz-8 specific code with more general purpose font code. Not quite ready for arbitrary fonts in the gadgets, but we are closer... To make that work, the two lines of buttons in Article Mode are going to have to be placed on top of each other, and it is ugly. I'll have to give that some additional thought. 24. GRn now accepts all run-time options as both tooltypes and as arguments from the CLI. Currently recognized options: TOP LEFT WIDTH HEIGHT FONT=MSGFONT FONTSIZE=MSGFONTSIZE LOG=LOGFILE WRAP UPDATERC CNEWS SCREEN=PUBSCREEN * NNTP * SERIAL * HOSTNAME * PORT=PORTNAME TOOLPRI=PRIORITY DEVICE * UNIT * * == recognized, but option not yet implemented. Personally, I've taken to running GRn from the CLI with the command: grn width 670 wrap 83 priority 2 If you specify an illegal option, GRn prints out a rather cryptic error message (from the CLI or to the logfile from Workbench) and then exits. It needs more work. :) Thanks to Christopher A. Wichura for the basic code to make this work. 25. Fixed (again) the last-line problem on PAL systems (and those with weird fonts), with a hack. Yes, I admit it, a hack. It even says so, in the source. So, get over it. :) Using the spacebar, you should be able to see the last line of every post. Even on PAL systems and systems with weird fonts. 26. GRn was repainting the titlebar every INTUITICKS in Group Mode. This has been corrected. 27. GRn now has a path when started from the WorkBench. (Yes, it's magic!) This should minimize problems with GRn not being able to find some executables (such as SendMail and PostNews). Note that for this to do any good, a path must have been set prior to the LOADWB call, or "LOADWB NEWPATH" must have been executed after a path was set. This works if GRn was compiled from SAS/C or DICE, but does not work for GCC compilation. :( 28. Lots of minor changes to be able to compile GRn with collected strings. Not there yet, though. 29. First cut at NNTP support. No promises. GRn now requires the Network Developers Kit to compile. Sorry, folks. * * * KNOWN TO NOT WORK PROPERLY/ALWAYS -- USE AT OWN RISK * * * The SERIAL keyword in item 24 has been removed. NNTP, DEVICE, UNIT, and HOSTNAME are now recognized and acted upon. Use DEVICE and UNIT for NNTP across a serial port. You must have already connect and logged in to the appropriate host. You must have nntp up and active. You MUST be using MNP-5 modems. I tested using JR-Comm, and a UDS/Motorola V.32 modem. Your mileage may vary. I DO NOT intend for GRn to become a term program, so I'm not going to do major things with this. DEVICE and UNIT may work with dnet.device. I don't know. Someone try it and let me know. It depends on how faithful the emulation is. HOSTNAME indicates that you are using the AS225 package (or equivalent). GRn uses socket.library. If you don't have it, I CANNOT give it to you. Sorry. HOSTNAME should be a host named in the inet:etc/hosts file, or a hostname that can be resolved through DNS. It may be a Internet style dotted address. To use NNTP, you should first remove (after backing up of course) your existing username.grnrc file. Then: grn nntp device serial.device unit 0 or grn nntp hostname 127.0.0.1 etc. Let me know how well it doesn't work for you. Give me DETAILED bug reports. I don't have AS225, so I'm shooting in the dark here. 30. SOMEWHERE, a bad one slipped in -- if the ABORT requester was chosen while the grnrc file was being read in, GRn would attempt to close the window while the requester was still being displayed. A certain recipe for disaster. This has been corrected. 31. SortArticlesByState() has been removed (#ifdef'ed out, actually). It is no longer used. Some source file reorganization has occurred, moving various utility routines from system.c to misc.c. 32. DoFmt.a has been added (which has the assembler for DoFmt() in it). It will allow stdio to be removed. A few uses of sprintf() and printf() have been changed to use DoFmt(). The definition of the routine is: extern __stkargs void DoFmt (char *buf, const char *fmt, ...); It basically uses the ROM RawDoFmt(). It will eventually lead to a much smaller executable for GRn. 33. The PUBSCREEN argument/tooltype has been implemented. If a public screen is specified, GRn will examine the dimensions of the screen. If it is large enough, GRn will open as a visitor on the public screen. If the screen is not large enough, GRn will print out an error message and exit. If PUBSCREEN is NOT specified, GRn will attempt to open on the default public screen (normally Workbench). If the dimensions of the default public screen are not large enough, GRn will attempt to open a custom screen that is large enough. The "large enough" is typically 640x400. However, the user may change that by using the HEIGHT and WIDTH arguments/tooltypes. Note that GRn does NOT properly handle all dimensions of screens. Beware! 34. GRn 1.16e broke a patch designed to stop gadtools.library from barfing over itself when too many mouse-clicks happened too quickly for gadtool.library to process. This has been un-broken. 35. FixName() has been re-written again, hopefully for more speed and some simplification. If it cannot obtain a valid appearing "From", then the entire field from the article is displayed. 36. A long term bug in the article setup code, where GRn would use memory it had already free()'ed has been eliminated. 37. The way GRn handles environment variables has been improved. Now, GRn will allocate only the memory needed to store environment variables (an overall reduction of at least 5KB), and GRn can use local environment variables, as well as global environment variables. Also, GRn now is aware of RealName, NodeName, DomainName and Organization. These were required for the NNTP implementation, and are currently used only by the NNTP implementation. GRn now requires ONLY that UserName be set. It may be set as an environment variable (local then global), in S:UUConfig, or in UULib:Config. All other variables have reasonable defaults. This was required for NNTP and C-News, as they may not have a standard AmigaUUCP configuration file. Only the first found occurence is used. Any later occurence of a variable is ignored (precedence is as described for UserName). PostNews is ignored for NNTP. Sendmail must still be available. 38. When I put in CLI arguments, I changed the name of WRAPCOL to WRAP. It is now changed back. 39. The CNEWS option is now used to determine which file to use for valid newsgroups when subscribing. If CNEWS is set, the file UULib:News/Active is used, if NNTP is set, this file is checked for existence, and if it exists it is used. If NNTP is set, and the file doesn't exist, GRn requests a list of valid newsgroups from the NNTP server, and saves it throughout a session. If neither of CNEWS or NNTP is set, GRn uses UULib:Newsgroups. 40. Removed the TextLen() routine from system.c, and its last callers in amode.c. Call TextLength() directly now. 41. Damn! WRAPCOL *SHOULD* be WRAP. Changed back again. 42. sprintf() removed for speed and codefile size. Some formats are now hardcoded, some use RawDoFmt(). GRn now back under 70K - but not by much. 43. Re-wrote panic() and panic0() to use VFPrintf(). GRn down to 67K. Panics do not double print to Output() anymore. All PROCDEBUG code now routes to myprintf(), which calls VPrintf(), not the standard c.lib printf(). Eliminated use of "FILE *" in PostNNTP() and ParseConfig(). Now use 2.04 buffered I/O. Eliminated use of "FILE *" in Publish(). GRn down to 66K. No more "FILE *" style I/O in GRn. 44. Finally squashed a bug where if a user clicked on a gadget too many times before GRn could disable the window, GRn would hang. It happened because the Eventhandler() has a loop: while (GT_GetIMsg().... and if the particular message caused a DisableWindow() to occur, then GRn did not have matching EnableWindows() (he expected only one to occur). GRn now checks prior to returning to a WaitPort() to ENSURE that the mainWindow is enabled. GRn down to 65K. 45. Implement 7WIRE and BPS=BAUD arguments to both GRn-Term and GRn. Fix a problem in InputHandler of GRn-Term that could cause a GURU when using dnet.device. 46. Remove a miss-placed semi-colon in ParseConfig() that was causing NewsEditor/MailEditor/UUSpool/UULib/UUNews configuration entries to be ignored. 47. USER is now a synonym for USERNAME (ENVIRONMENT VARIABLES only) HOSTNAME is now a synonym for NODENAME (ENVIRONMENT VARIABLES only). 48. If an error occurred when reading NNTP input, GRn would stomp a random byte of memory (a CTRL-C would trigger this). Fixed. Implement NOECHO for external serial.device's. See the NOECHO doc in GRn.man for why. WriteNNTP() now allocates its buffer only once per invocation of GRn; and checks to make sure it got the memory. It also now disallows NNTP writes larger than 512 bytes. PostNews() was not properly checking the results from a POST NNTP command. Fixed. PostNews() no longer requires a RealName for a POST NNTP. 49. Implement IOADDR in GRn, and have GRn-Term pass it when dnet.device is being used. Eliminate t_printf(), replace with title() [no Window pointer parameter]. Eliminate '//' comments, replace with standard-C style comments. Start debugging with "gcc -Wall". Changes to let GRn-Term compile with GCC. Fix GRn-Term to compile with SAS/C. GRn-Term now automatically passes those parameters to GRn that it knows about (NNTP, DEVICE, UNIT, 7WIRE, BAUD, IOADDR). The user only need pass GRn-specific ones (TOP/LEFT/etc.). Check for a CTRL-C in reads(), even when SendQuery() says there is no I/O to be done. This avoid a hard loop between reads() and ReadNNTP() being unbreakable. GetNNTPFile() was not properly checking the result from WriteNNTP(). Corrected. GRn at 66K (barely). 50. Publish() did not remove() the temporary uuencode file. Does now. 51. Subscribe() did not handle IDCMP_REFRESHWINDOW correctly. Does now. 52. ARG_BAUD and ARG_IOADDR conflicted. Don't now. 53. Use CreateMsgPort() and CreateIORequest() in exec.library, not amiga.lib. Make all windows WA_SimpleRefresh. GRn at 65K. 54. Added a busy pointer in various places, so users would know that GRn was working, and not hung. GRn at 66K. 55. The subscription window is now draggable. 56. All GRn windows are now SmartRefresh. 57. More changes for GCC compatibility. 58. The CNEWS flag now takes priority over the existence of a ".next" file in a newsgroup, such that all articles are scanned. 59. GRn now checks for 10 articles after the last when either CNEWS is set, or a ".next" file cannot be found. This increases reliability with C-News, if expire has deleted articles in the middle. 60. Forgot to SetBusyWindow() on the Subscription window when scanning the spool directory. Done now. 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.