NEW FEATURES OF RN 4.4.3 o Configure changes: check for active.times (see new-group comments below), termios systems (see termios comments later on), and also ask if ORGANIZATION should be ignored. This latter change allows systems that use the ORGANIZATION variable for their own purposes a chance to only use NEWSORG, thus allowing them to take advantage of the default if NEWSORG is undefined (without this, everyone who uses rn would _have_ to define NEWSORG to avoid the ORGANIZATION define). o Pnews.SH: support ignoring of ORGANIZATION; echo --> $echo; cat --> $cat. o Rnmail.SH: support ignoring of ORGANIZATION. o Many files: I've change the parameters of any function trying to pass a character (including bool) into a type_int (e.g. char_int). This avoids errors for ANSI compilers that don't believe that the promoted argument type is valid (they try to pass a char as a char, without promoting it to an int, and complain about the old syntax). o addng.c: the new new-group-finding code is in here. Optimized the writing/reading of newsgroup lists by using "w+" and rewinding the file. If ACTIVE_TIMES is defined, the new function find_new_groups() uses the NEWGROUPS command (in NNTP) or the ACTIVE_TIMES file (in regular rn) to determine new groups. If it's not defined, then the find_new_groups() function does the old method (using the code moved here from init.c). o added the DEB_NNTP define to output some useful NNTP debugging info without having all information scroll by like it does with the NNTP clientlib's debugging turned on. o I optimized a few of the sscanf's to use "%*d" to skip numbers that were being ignored, and removed the useless variables. o art.c: enhanced the Newsgroups-magic code to show the Newsgroups line if it doesn't match the current group. I find this really useful for browsing through junk or seeing which articles have been redirected with C new's '=' directive. o autosub.c: reordered the include files to avoid a problem with ANSI compilers. o bits.c: fixed a bug in the instr() call in the !NORELAY section (the ", TRUE" was in the wrong place). o common.h, etc: if TERMIOS is defined, include termios.h and use some slightly different term functions. Configure was smart enough to NOT set this for suns, and a few other systems that don't like it. o common.h: if __STDC__ is defined, turn on the ANSI() prototypes automatically. o common.h: nullstr[] = ""; actually generates a warning(!) on some weird compilers -- changed to nullstr[1] = "";. o common.h: "Can't recreate..." message is used in the .newnewsrc writing code. o config.h.SH: conditionalize the including of the config.sh file like the other .SH files do. Also added the new Configure stuff. o config.h.SH needs to have its RCS comment character changed to "# ". o config.h.SH: all the changes in the tail end are tab/space changes that force the code to look pretty in config.h no matter if it is preceded by a "#define" or a "/*#undef". o final.c: int_catcher() needs an int parameter to agree with ANSI compilers. sig_catcher() had an assumed int parameter warning. o init.c: more new-group changes (i.e. it calls find_new_groups(), and the old new-group code was moved to addng.c). o intrp.c: changes to support ignoring ORGANIZATION. A slight tweak allows the organization file not not end in a newline. o intrp.c: moved the tmpbuf[] into the #ifdefs where it is used (to avoid an "unused" warning. In the process, discovered a bug in the non-BSD code that tries to copy an uninitialized (now undefined) tmpbuf into buf (when it should be copying 's'). o last.c: extended the contents of .rnlast to support the new-group code. Handles reading the old .rnlast style gracefully. o ng.c: reset the value of extractdest and extractprog when entering a newsgroup. This allows someone to set SAVEDIR to a roving value (like %c) and have an 'e' in group1 not affect an 'e' in group2. Within the group, each 'e' command will repeat the last destination and program if no parameters are used. o ng.c: note the values returned by the GROUP command in rrn so that we can add new articles that came in since our last fetch of the active file. I've upgraded the ngmax[] array to non-debug status, and now use it to keep the group's maximum value (like abs1st[] does for the minimum). This allows getngsize() to return a value higher than what is contained in the active file copy, and also to fetch a new copy of the active file if enough time has elapsed since our last fetch. o ng.c: fixed forcelast to get cleared before processing a command, and to get set on '-' just in case it goes to the end of the group. o ng.c: fixed some indent problems. o ngdata.c: added the lastactfetch variable (rrn) to keep track of when the active file copy was last fetched. o ngdata.c: getngsize() uses the value in ngmax[] to override the high active-file-copy value. If ngmax[] is bigger and enough time has gone by, a new copy of the active file is fetched. o ngdata.c: more indent tweaks. o ngdata.c: fixed a1st to be a long (it might have been int or long, and sscanf() was expecting an int), and added "last" to sscanf the high newsgroup value at the same time abs1st is being set. Fixed a problem with the sscanf being executed if the NNTP command failed. o ngdata.c: minor tweak to the "notdef" comment to make it accurate. o ngdata.h: MINFETCHTIME is set for 5 minutes before another active fetch is allowed. o rcln.c: minor optimization to remove tmpp; removed #ifdef DEBUGGING around the ngmax[] array; put \n's before the bogus newsgroup warnings. o Allow some slack in the "newsgroup was reset" check to allow for the interaction of the ngmax[] array setting a high value in .newsrc that a cached version of the active file doesn't reflect yet (can happen when starting up rn in some rare cases). o rcstuff.c: broke out the code that parses the newsrc line into the function parse_rcline(). This allows the addition of a new function, abandon_ng() that restores the startup values for the current group from the .oldnewsrc file (bound to the 'A' command at the newsgroup level). o rcstuff.c: made addnewbydefault a global variable so that it could be reset by the 'a' command. Without this, typing 'N' during the startup code would render the 'a' command useless, since all the groups you might want to add get an immediate 'n'o answer. o rcstuff.c: the "if (mode == 'i')" check is needed to keep the new-newsgroup-finding code sane. o rcstuff.c: I changed the code to add groups with a space after the ":" or "!". It's not really required, but it avoids having the construct "group!187,193" show up in your .newsrc file when cross- posted articles are marked as read for unsubscribed groups. o rcstuff.c: the .newnewsrc-writing code uses the "cantrecreate" message from common.h, and the comments and indentation are fixed, as well as one extra ferror() check added. o rcstuff.c: the newsrc-array-growing code now zeros the ngnum array. o respond.c: moved a negation used with strlen() to avoid problems if strlen() is declared to be unsigned. o respond.c: changed the behavior of the 'f' command to ask the user if it is an unrelated topic. o rn.c: added the "direction" flag that makes the 'p' and 'P' command work in all circumstances. Without this, if you have a restriction enabled and an empty non-matching group in the way, it won't backup at all (and might even go forward!). o rn.c: your change for outputting the prompt later in the game allows for the removal of the reprompt_newsgroup label with the moving of the dfltcmd initialization also. o rn.c: when rrn visits the end of the newsgroups prompt, it will fetch a new copy of the active file if enough time has elapsed. o rn.c: changed the "not found" prompt to mention the 'a' command (which is much more useful than 'g' alone). Made 'g's error message a little more clear too. o rn.c: more indentation twiddles. o rn.c: removed the check for ' ' from the catchup code, because it's getting changed into the default command by setdef(). o rn.c: added the 'A' command to abandon the current newsgroup's changes back to the startup state (which is contained in .oldnewsrc). o rn.c: have the 'a' command reset addnewbydefault to 0. o term.c: renamed ospeed "outspeed" so that it doesn't conflict with some weird system's polution of the name space. o term.c: support for the termios systems added. o term.c: winch_catcher() needed an int parameter for ANSI systems. o util.c: reorganized a couple returns to avoid warnings about not returning a value in a function. o Configure now knows about DG Avion. NEW FEATURES OF RN 4.4.2 vs RN 4.4 New % interpolation %E the last directory to which extracted files were placed. Configure improvements Configure knows about AIX and can build a version of rn that works correctly on AIX. Configure is generally smarter about getting symbols out of various type of archive files. The server.h include file is now generated outside of Configure via server.h.SH shell script. General improvements rn no longer incorrectly interprets a . in a header line as a meta- character. The memory management in the newrc array managment code is now much better. NEW FEATURES OF RN 4.4 vs RN 4.3 New or modified commands e extract a shar or uuencoded file. (article level) g number g command will go to a newsgroup by number where the the number corresponds to that used in the list supplied by the 'L' command. (newsgroup level) z supersede an article (article level) New magic (use +H to turn them off) -Hfrom displays only the commented portion of the user name. New environment variables AUTOSUBSCRIBE newsgroup pattern for groups to automatically subscribe to when found. Groups not matching are presented to the user via the usual subscription prompts. AUTOUNSUBSCRIBE newsgroup pattern for groups to not subscribe to. Groups matching this pattern are not subsribed to. EXSAVER shell command that starts an extraction. UNSHAR the unshar program to use (default /bin/sh). REPLYTO the value to use for the "Reply-To:" header, if needed. NEWSORG Same as ORGANIZATION. Used for those sites that need ORGANIZATION for other purposes (Apollos). SUPERSEDEHEADER The header format to use for a 'z' command. New % interpolations %# keeps an incremental count during a multi-file save, extract, etc. ":s part.%#" %e the last command executed to extract an article. Configure improvements Now uses nm to read contents of libc. ar is used if nm fails. Configure also provides the option of editing config.sh before config.h and all the shell scripts are created. Configure stores the origanization name in double quotes in config.sh. This avoids a problem with organization names that have single quotes in them (i.e. many French and Canadian organizations). Configure now knows about RISC/os, Stardents and uts environments. General improvements Makes use of POSIX capabilities if present. ANSI C Compatible Hostname may be read in from a file instead of using system calls. ClariNet news headers are now recognized by rn. All header operations can be done on those headers. rn will dynamically allocate its structures to cope with any number of newsgroups in .newsrc or the active file. MMDF is now officially supported as a mail transfer agent. Miscellaneous When GETPWENT it defined and an invalid userid is used, an error message is returned. Previously, rn would core dump. The newsgroups script now knows how to deal with "bogus" newsgroups. [These are groups in the active files marked with status 'x'.] If there is no news on rn startup and the user enters a "g" at the newsgroup level, the program will now correctly note that no newsgroup name has been entered and reprompt. Hostnames are now checked without respect to upper/lower case. This fixes a problem with the cancel command (academ.COM != academ.com before the fix). The NEWSADMIN code was buggy and often didn't work correctly. This has been fixed. %P is used to find a place for rrn to create active and article files. Previously, /tmp was hardcoded in most places. newsgroups would not remove the active file copy it made when used via NNTP. Now it does remove this copy when it exits. Corrected some null pointer problems in the search code. Specifically, entering entering / or ? when there was no previous search pattern would cause a core dump. Now, it tells the user there there is no previous pattern. rrn now exits and leaves the terminal in a usable state when a server timeout occurs. rrn now supports the longest lines allowed by the NNTP RFC. rn will try to preseve permissions on .newsrc when it recreates it. Previously, it didn't do this. rn deals with NFS timeouts better. If the active file (on an NFS mounted partition) goes away, rn shuts down gracefully now.