ANU-News V6.2.0 Release Notes -- Change log

Appended is a selection of source change notes since the relase date of V6.1B10.

The V6.2.0 Release Notes are available in separate document.

New files

(see README.TXT for details):
  README.TXT
  LICENSE_README.TXT
  LICENSE_GHUSTON.TXT
  LICENSE_GNUGPL.TXT
  GROUPS_CONVERT_V62.COM
  PGPCALL.COM
  PUBRING.PGP
  MD5.H
  MD5.C

ALL MODULES

* V6.1b11 14-Apr-1997       Mark Martinec   mark.martinec@ijs.si
* - replace several calls to strcpy/strcat with safer strnncpy/strnncat
* - replace pattern strcpy(news_malloc(strlen(x)+1),x) with news_strdup
* - replace pattern strcat(err_oline,x) with err_oline_cat(x)
* - change %s to %.s in sprintf to guard against overwriting buffer
* V6.1b11  7-May-1997       Mark Martinec   mark.martinec@ijs.si
* - decouple group name size (new constant GRPNAMELEN)
*   from the size of item titles (SUBJLEN)
* - decouple the in-memory grp_name size (GRPNAMELEN) from the
*   size of the groups file record field (GRPNAMELEN_F).
*   Now the file record may contain group name which is
*   not '\0'-terminated, thus gaining one character
*   in the group name length, and ANU in a NNTP client mode
*   may access groups with longer names than local database
*   would accomodate.
* - grp_name field in the GRP structure is now dynamically allocated
*   to save on virtual memory by storing only the actual title sizes

NEWSDEFINE.H

* V6.1b10  5-Sep-1996     Mark Martinec   mark.martinec@ijs.si
* - make two separate structures for newsgroup:
*   * GRP  is used for in-memory structure;
*   * GRPF is used for file I/O and exactly corresponds
*          to a record in NEWS.GROUPS file.
*   This change is reflected in many modules but only documented here.
*   The main reason for this was to significantly reduce page faulting
*   when the number of newsgroups is very high. For a single loop e.g.
*   to set a flag for each group (say 10000 groups), it was necessary
*   to page through 10000*524/512 = 10k pages and now this is reduced
*   to 10000*160/512 = 3k pages, which has a far better chance of
*   staying in the process' working set. Also virtual memory is somewhat
*   reduced since space for blanks in the newsgroup title, notice
*   and NNTP server node is not allocated. The in-memory structures
*   now have a more optimal memory alignment for AXP.
*   Routines for conversion of in-memory <--> i/o structures are provided
*   (see: cnvgroup_inmemory_to_filerec,
*         cnvgroup_filerec_to_inmemory, new_group).
* V6.1b10  9-Sep-1996     Mark Martinec   mark.martinec@ijs.si
* - add field grp_firstnum (lowest article number) to the group record;
*   It appears that this field was updated in the file even though
*   the comments claimed that it is in the memory-only region of the
*   group structure. NNTP server uses this info for the clients.
*   It is updated by the skim procedure (plus at some other locations).
* NOTE: the location of this field in the file record is now changed
*   (to avoid having a field in the middle of the filler).
*   This introduces inconsistency with the upgrade, but the SKIM phase
*   will recalculate this value, so this should not be a problem.
* V6.1b10  9-Dec-1996       Mark Pizzolato  mark@infocomm.com
* - Changed the definition of "establish_handler" when working under
*   DEC C, to properly cast the argument function type to return
*   unsigned int.  It seems that recent changes to the signal.h
*   include file uses a typedefed prototype which is incompatible.

NEWSVARIABLES.H

* V6.1b11  7-May-1997     Mark Martinec   mark.martinec@ijs.si
* - now this modules is used by the NNTP server and support programs
*   as well as for the NEWS program. This is to assure that common
*   variables, used by the support routines in modules common
*   to NEWS and NNTP server, see the same variable declarations.

NEWSINCLUDE.H

* V6.1b11 May-1995        Mark Martinec   mark.martinec@ijs.si
* - for TCPWARE include , not 

NNTPINCLUDE.H

* V6.1b10 30-Jan-1996     Mark Pizzolato   mark@infocomm.com
* - Multinet V3.5 ended up defining somethings that we defined
*   here, so added conditional to avoid the problem

CACHE.C

* V6.1b10 31-Jul-1995     Mark Pizzolato  mark@infocomm.com
* - fixed an original bug which has received numerous mention on the
*   mailing list regarding the errors that it logs. "Lock check
*   variable already set to 1".  The code originally checked to see
*   if the lock check variable was set prior to actually aquiring the
*   lock manager lock for the global section.
* - Code has been modified to properly create and initialize the
*   CACHE_FILENAME file if it doesn't exist.  This removes any external
*   steps from being necessary to create and initialize the cache file.

FEEDCHECK.C

* V6.1b10  9-Dec-1996     Mark Pizzolato  mark@infocomm.com
* - minor declaration cleanup to get warningless compile under
*   DEC C V5.3 on VAX

INPATHS.C

* V2.6    22-Jul-1996     Mark Martinec   mark.martinec@ijs.si
* - renamed 'getopt' to 'mygetopt' (as suggested by
*   James Kirkpatrick ) to cure conflicting
*   declarations with standard library (VMS V6.? / DECC)

NEWS.C

* V6.1b10 10-Dec-1996     Mark Pizzolato  mark@infocomm.com
* - defined _NEWS_MAIN_PROGRAM which now causes the NEWSVARIABLES.H
*   to define all global variables instead of merely references to
*   them.
* V6.1b11 21-Feb-1997     Mark Martinec   mark.martinec@ijs.si
* - fp_open, fpa_open and fpd_open are now int;
*   don't try to delete_file_versions(fp*_open);
* V6.1b11 28-Mar-1997     Mark Martinec   mark.martinec@ijs.si
* - use new procedures available_proto, proto_name and name_to_proto
*   to replace frequent code patterns and to make possible
*   using ANU with different TCP transport library
*   without changing NEWSRC user files (automatically changes
*   requested and unavailable TCP library to the one
*   that is compiled-in with the program).

NEWSADD.C

* V6.1b10 22-Feb-1996     Mark Martinec   mark.martinec@ijs.si
* - in add_file() added option "shr=nil" to fopen and ignore
*   RMS$_FLK & RMS$_FNF errors to enable multiple ADD FILE processes
*   to be running concurrently on the same set of batch files
* - correctly handle /DEFNEWSGROUP and /NEWSGROUP qualifiers
*   in a combinations of global and positional placements
* - allow qualifiers /DEFNEWSGROUP and /NEWSGROUP to specify
*   a list of values, which are then concatenated using commas
*   as separators. This is just for convenience, the meaning of
*   /NEWSGROUP=(a,b,c) is the same as /NEWSGROUP="a,b,c".
*   As a side effect longer lists (up to 1023 characters)
*   can now be specified (not that we would need that, but ...)
* V6.1b10 16-Mar-1996     Mark Martinec   mark.martinec@ijs.si
* - new functions lock_filename() and unlock_filename() call
*   lock manager directly to avoid timing problems with
*   nonatomic call to { fclose(); delete(); }
*   NOTE: All ANU-NEWS jobs running ADD FILE on the same set of files
*         should be running under the same gid (group id) to enable
*         locks to be recognized between jobs !
* V6.1b11 24-Mar-1997     Mark Martinec   mark.martinec@ijs.si
* - recognize header 'X-PGP-Sig:' and store information
*   required for checking PGP signature of the control mesages
* - collect common code in routine find_header_name
* - remove array 'headers' (with lowercased names from fheaders),
*   now 'fheaders' is used for both purposes (matching and writing).
* V6.1b11 14-Apr-1997     Mark Martinec   mark.martinec@ijs.si
* - replace several calls to strcpy with safer strnncpy
* - replace pattern strcpy(news_malloc(strlen(x)+1),x) with news_strdup
* - fix the year 2000 problem when generating the missing 'Date:' header
* - quick check of pgp_verify() before ADD FILE processing starts
* V6.1b11 22-May-1997     Mark Martinec   mark.martinec@ijs.si
* - replace single flag EXECUTE_CONTROL with one for each type
*   of control messages: EXECUTE_CONTROL_CHECKGROUPS,
*   EXECUTE_CONTROL_NEWGROUP and EXECUTE_CONTROL_RMGROUP.
* - flags EXECUTE_CONTROL_RMGROUP_DELETE and
*   EXECUTE_CONTROL_RMGROUP_LOCAL are now used strictly as a modifier
*   to the way groups are deleted/removed and affect the commands
*   placed in DCL procedures as well as immediate execution.
* - add qualifier /RMGROUP to ADD FILE which implements part
*   of the semantics formerly under /EXECUTE.  Default: /RMGROUP=RETAIN
* - add list of keywords to qualifier /EXECUTE to distinguish between
*   different types of control messages by accepting qualifier values
*   CHECKGROUPS, NEWGROUP and RMGROUP. If only /EXECUTE is specified,
*   it defaults to /EXECUTE=(NEWGROUP,RMGROUP).
*   /EXECUTE=ALL equals /EXECUTE=(CHECKGROUPS,NEWGROUP,RMGROUP).
*   This permits us to use /EXECUTE qualifier with PGP signature
*   verification (which presently works only on newgroup & rmgroup
*   control messages) without fear that Checkgroups control messages
*   would also be executed, and at the same time keeping
*   backwards compatibility.

NEWSCALLEDIT.C

* V6.1b10 17-Aug-1995     Mark Martinec   mark.martinec@ijs.si
* - removed '#include ' since it is already included
*   from  newsinclude.h --> rms.h

NEWSCLASSES.C

* V6.1b10 12-Sep-1996     Mark Martinec   mark.martinec@ijs.si
* - add parameter avoid_duplicates to add_class_member()
*   and new routine remove_duplicates_class. This linearizes
*   the very slow O(n^2) loop while adding many newsgroups
*   to large classes like $net.

NEWSCONTROL.C

* V6.1b10  4-Nov-1996     mark@infocomm.com
*  - fixed accvio bug with control checkgroups for groups that
*    previously didn't have a topic string set.
* V6.1b11 26-Mar-1997     Mark Martinec   mark.martinec@ijs.si
*  - new procedure pgp_verify
* V6.1b11 14-Apr-1997     Mark Martinec   mark.martinec@ijs.si
*  - add 'const' attributes to control_* routines arguments
*  - fix the year 2000 problem when generating the 'Date:' header line
*  - new procedure put_pgp_message(); integrate pgp_verify into
*    control_newgroup() and control_rmgroup()
* V6.1b11 22-May-1997     Mark Martinec   mark.martinec@ijs.si
*  - append_control(): assure proper commenting ($!) of very long lines
*  - replace single flag EXECUTE_CONTROL with one for each type
*    of control messages: EXECUTE_CONTROL_CHECKGROUPS,
*    EXECUTE_CONTROL_NEWGROUP and EXECUTE_CONTROL_RMGROUP.
*  - flags EXECUTE_CONTROL_RMGROUP_DELETE and
*    EXECUTE_CONTROL_RMGROUP_LOCAL are now used strictly as a modifier
*    to the way groups are deleted/removed and affect the commands
*    placed in DCL procedures as well as immediate execution.

NEWSDISPLAY.C

* V6.1b10   30-May-1995     Mark Martinec   mark.martinec@ijs.si
* - call new routine fit_line to cope with the problem of truncated
*   'Unread:' count in the 'Group:' header line of the items display

NEWSDELETE.C

* V6.1b11 21-Feb-1997  Mark Martinec   mark.martinec@ijs.si
* - fp_open is now int;  pass it by ref;
*   don't try to delete_file_versions(fpd_open);
* V6.1b11 14-Apr-1997  Mark Martinec   mark.martinec@ijs.si
* - add attribute 'const to hist_check()'s parameter
* - fix the year 2000 problem when generating the
*   'Date:' header line for CANCEL posting

NEWSDIR.C

* V6.1b11 14-Apr-1997       Mark Martinec   mark.martinec@ijs.si
* - use new variable displ_subjlen to dynamically control the
*   item title and newsgroup name size on the display, depending
*   on the current screen width

NEWSDISPLAY.C

* V6.1b11   21-Feb-1997     Mark Martinec   mark.martinec@ijs.si
* - fpd_open/fp_open is now int;  pass it by ref;
*   don't try to delete_file_versions(fpd_open);
* V6.1b11 14-Apr-1997       Mark Martinec   mark.martinec@ijs.si
* - fix the year 2000 problem when generating the missing 'Date:' header

NEWSDIST.C

* V6.1b11 14-Apr-1997     Mark Martinec   mark.martinec@ijs.si
* - add attribute 'const' to several char* parameters
* - rewrite check_distribution_string(), scannet() and aliases()
*   to not modify their parameter
* - add length parameter to search_aliases()

NEWSEXTRACT.C

* V6.1b10 9-Dec-1996      Mark Pizzolato  mark@infocomm.com
* - minor DEC C cleanup.
* V6.1b11 21-Feb-1997     Mark Martinec   mark.martinec@ijs.si
* - fp_open is now int;  pass it by ref;
*   don't try to delete_file_versions(fp_open);

NEWSFILES.C

* V6.1b10  5-Sep-1996     Mark Martinec   mark.martinec@ijs.si
* - new routines:  new_group, cnvgroup_inmemory_to_filerec,
*   and cnvgroup_filerec_to_inmemory.  For the description
*   of changes see NEWSDEFINE.H .
* - hard-code the largest CPU consumer in the NNTP client:
*     sscanf(cp,"%s %d %d %s",newsg,&last,&first,mod)
* V6.1b11 28-Mar-1997     Mark Martinec   mark.martinec@ijs.si
* - use new procedures available_proto, proto_name and name_to_proto
*   to replace frequent code patterns and to make possible
*   using ANU with different TCP transport library
*   without changing NEWSRC user files (automatically changes
*   requested and unavailable TCP library to the one
*   that is compiled-in with the program).
* - abort with NEWS$_NONNTP if NNTP client mode is requested
*   but the client support code is not compiled-in.
* V6.1b11  3-Jun-1997     Mark Martinec   mark.martinec@ijs.si
* - rms_get(): parameter size is now supposed to be sizeof(buffer)
*   (inconsistent use lead to a buffer overflow in NEWSPOST)
* - initng(): preserve group names longer than GRPNAMELEN_F;

NEWSFORWARD.C

* V6.1b10 14-Sep-1996     Mark Martinec   mark.martinec@ijs.si
* - add space after "Subject:" and "Message-ID:" when forming headers
* V6.1b11 21-Feb-1997     Mark Martinec   mark.martinec@ijs.si
* - fp_open is now int;  pass it by ref;
*   don't try to delete_file_versions(fp_open);

NEWSKILL.C

* V6.1b11 21-Feb-1997     Mark Martinec   mark.martinec@ijs.si
* - fp_open is now int;  pass it by ref;
*   don't try to delete_file_versions(fp_open);

NEWSPOST.C

* V6.1b11 21-Feb-1997     Mark Martinec   mark.martinec@ijs.si
* - fp_open is now int;  pass it by ref;
*   don't try to delete_file_versions(fp_open);
* V6.1b11 14-Apr-1997     Mark Martinec   mark.martinec@ijs.si
* - add extra parameter (buffer size) to parse_newsgroups()
* - fix the year 2000 problem when generating 'Date:' headers
* - when generating 'Path:' header as a NNTP client, do not put
*   our host name into the path - it belongs to the 'Nntp-Posting-Host:'
*   Puting posting host name in path causes a problem when the posting
*   host is also running a Usenet server. Articles posted via NNTP
*   to another server will not propagate to the server which happen
*   to be running on the posting host.

NEWSPROFILE.C

* V6.1b10  9-Sep-1996     mark.martinec@ijs.si
* - to avoid a *big* waste when calling reggroup in a loop for
*   each group and letting reggroup find THE SAME group in the
*   ga array by its name using linear search: introduced new routine
*   reggroup2, which handles both cases (given index or name)
* - use binary search routine to locate group by name
* V6.1b11 14-Apr-1997     Mark Martinec   mark.martinec@ijs.si
* - fix the year 2000 problem when generating NEWGROUPS command for the
*   NNTP server; prefer GMT time over local time in NEWGROUPS command

NEWSRC.C

* V6.1b10 24-Aug-1995     Mark Martinec   mark.martinec@ijs.si
* - added some checking in read_reg_file() to survive certain
*   syntax errors in the NEWSRC file without ACCVIO
* V6.1b11 28-Mar-1997     Mark Martinec   mark.martinec@ijs.si
* - use new procedure available_proto to make possible
*   using ANU with different TCP transport library
*   without changing NEWSRC user files (automatically changes
*   requested and unavailable TCP library to the one
*   that is compiled-in with the program).
* V6.1b12 10-Jun-1997     Mark Martinec   mark.martinec@ijs.si
* - hash_find() used to cause 60% of all page faults with
*   large number (16000) of newsgroups. Added field arb_readtime
*   to the GRP structure, avoiding to keep group names in two locations
*   and avoiding hash+linear searches through names.

NEWSREAD.C

* V6.1b11 21-Feb-1997     Mark Martinec   mark.martinec@ijs.si
* - fp_open is now int;  pass it by ref;
*   don't try to delete_file_versions(fp_open);
* - abort with NEWS$_NONNTP if NNTP client mode is requested
*   but the client support code is not compiled-in.

NEWSREMCLIENT.C

* V6.1b10  5-Sep-1996     Mark Martinec   mark.martinec@ijs.si
* - allow for the possibility that node name might be NULL
* V6.1b11 21-Feb-1997     Mark Martinec   mark.martinec@ijs.si
* - change parameter name tmp_name to file_opened and its type to int,
*   clean logic behind it
* - remove \n at the end of generated error messages
* - comment out 'Connecting to NNTP server' messages
* - change wmg() from macro to a routine to minimize code
* - add 'const' attribute to passed read-only strings in:
*   get_host_adrs, open_net, get_group_topnum,
*   server_get_newsgroups, nntp_call, post_to_server
* - change %s to %.s in sprintf to guard against overwriting buffer
*   (somewhat arbitrary limits: limit node name to 48 chars;
*   group name and message id to 200 chars)
* - return more informative diagnostics in client_msg
* V6.1b11 17-Mar-1997     Mark Martinec   mark.martinec@ijs.si
* - add procedure getsyserrmsg;
* - make NNTP error messages more informative;
* - add error messages to nntp_call, nntp_one_call, nntp_one_call
* - remove variable cmd_msg, now client_msg contains either
*   low-level diagnostics or server response. This simplified
*   and unified error reporting.
* - replaced all remaining printf with calls to wmg()
* - allow NNTP server to be specified by IP address as well
*   (not only by dns name) (transports: MULTINET,WIN,TCPWARE)
* V6.1b11 28-Mar-1997     Mark Martinec   mark.martinec@ijs.si
* - new procedures available_proto, proto_name and name_to_proto
*   to replace frequent code patterns and to make possible
*   using ANU with different TCP transport library
*   without changing NEWSRC user files (automatically changes
*   requested and unavailable TCP library to the one
*   that is compiled-in with the program).
* - clean-up syntactic errors when using UCXSOCKETS
* V6.1b11 14-Apr-1997     Mark Martinec   mark.martinec@ijs.si
* - fix the year 2000 problem when generating NNTP commands
*   NEWNEWS, NEWGROUPS and XUPDGROUP.  Prefer GMT over local time
*   in these commands.
* V6.1b11  3-Jun-1997     Mark Martinec   mark.martinec@ijs.si
* - add parameters to nntp_read() and nntp_read_line()
*   (b_m == sizeof(b);  returns length in b_len)
* - nntp_read() now reads directly into caller's buffer
* - several routines: reestablish NNTP connection
*   in case NNTP server timed out and closed down our link.

NEWSRTL.C

* V6.1b10 17-Aug-1995     Mark Martinec   mark.martinec@ijs.si
* - check for input==NULL in util_*cpy routines to prevent
*   NEWSUTILITY\xoverni() from failing in case of illegal input
* V6.1b10 23-Aug-1995     Mark Martinec   mark.martinec@ijs.si
* - moved 'sa_l=0' in c$cks_routine() to the inside of 'if',
*   to prevent clobbering of sa_l in case of c$cks_routine routine
*   being called from nosysprv() which in turn may be called during
*   another exception processing from send_signal_array().
*   The common symptom was:
*     %NEWS-E-INVSA, Invalid signal array length, sa_l = 0
* V6.1b10  4-Sep-1995     Mark Martinec   mark.martinec@ijs.si
* - strip_compress_lower(): convert properly ISO Latin 1 char set
* V6.1b11 14-Apr-1997     Mark Martinec   mark.martinec@ijs.si
* - new routines strnncpy and strnncat (finally got fed up
*   with programming the same tricks and test over and over again :)
* - new routine err_oline_cat to replace common code pattern
* - new routine news_strdup to replace common
*   code pattern:  strcpy(news_malloc(strlen(x)+1),x)
* V6.1b11  7-May-1997     Mark Martinec   mark.martinec@ijs.si
* - new routines util_grp_name_str() and util_grp_name_len()
*   aiding with handling of possibly not '\0'-terminated
*   group name in the groups file record

NEWSSEARCH.C

* 6.1b10 27-Apr-1995  Bob Sloane     sloane@kuhub.cc.ukans.edu
* - added Kent Covert's changes to search newsgroup names.
* V6.1b11 21-Feb-1997     Mark Martinec   mark.martinec@ijs.si
* - fp_open is now int;  pass it by ref;
*   don't try to delete_file_versions(fp_open);

NEWSSETSHOW.C

* V6.1b11 21-Feb-1997     Mark Martinec   mark.martinec@ijs.si
* - fp_open, fpa_open and fpd_open are now int;
* V6.1b11 28-Mar-1997     Mark Martinec   mark.martinec@ijs.si
* - use new procedures available_proto, proto_name and name_to_proto
*   to replace frequent code patterns and to make possible
*   using ANU with different TCP transport library
*   without changing NEWSRC user files (automatically changes
*   requested and unavailable TCP library to the one
*   that is compiled-in with the program).

NEWSSHUTDOWN.C

* V6.1b10 09-DEC-1996     Mark Pizzolato  mark@infocomm.com
* - minor declaration cleanup to get warningless compile under
*   DEC C V5.3 on VAX

NEWSSITE.C

* V6.1b11 14-Apr-1997     Mark Martinec   mark.martinec@ijs.si
* - partially fix dsformatline() to handle narrow displays

NEWSSKIM.C

* V6.1b10 28-Feb-1996     Mark Pizzolato  mark@infocomm.com
* - revised SKIM/ITEMS to delete items in reverse numeric order
*   which will always be quicker on any ODS II file system.
* V6.1b10 25-Oct-1996     Mark Pizzolato  mark@infocomm.com
* - fixed previous reverse order delete to avoid memory leak that
*   it introduced.
* V6.1b10 25-Oct-1996     Mark Pizzolato  mark@infocomm.com
* - Changed SKIM/ITEMS and SKIM/NEWSGROUPS to process groups in
*   lexical order when processing all newsgroups.
* V6.1b10 02-Dec-1996     Mark Pizzolato  mark@infocomm.com
* - Changed file delete logic for SKIM/ITEMS to actually delete
*   files in several AST threads that run in parallel with other SKIM
*   processing.  This allows for much more overlapped I/O (even
*   overlapped I/O for file deletes since we will potentially be
*   deleting files for up to n different newsgroups at any one time,
*   n in this case is specified by the user with SKIM/ITEMS=n, n
*   defaults to 5, A value of 0 for n disables this AST based
*   delete processing).
* V6.1b11 28-Feb-1997     Mark Martinec   mark.martinec@nsc.ijs.si
* - remove unused variable list from asynch_search_complete()
*   and asynch_parse_complete()

NEWSUTIL1.C

* V6.1b10 17-Aug-1995     Mark Martinec   mark.martinec@ijs.si
* - modify xoverni() to avoid dereferencing NULL pointer in case
*   of invalid input.
* V6.1b10 23-Aug-1996     Mark Martinec   mark.martinec@ijs.si
* - map_items tried to allocate unreasonably large initial memory chunk
*   for gap->grp_ia in case when user had once peeked at a newsgroup
*   with heavy traffic and never visited it again. The attempted
*   allocation was for all items (now mostly nonexistent) from
*   the very old and small grp_funread (from the user's newsrc file)
*   up to the current gap->grp_topnum (now very high).
*   Solution: clip the initial gap->grp_iasize to gap->grp_count.
*   It is just an initial allocation - it will grow later if necessary.
*   The symptom was unreasonably large virtual memory usage,
*   or: %NEWS-E-ASSERT, Assert failed, expr not true:
*                       "size < MALLOC_SANITY_LIMIT"
* V6.1b10  9-Sep-1996     Mark Martinec   mark.martinec@ijs.si
* - new routines: ga_find_group_by_name (uses binary search),
*   and test_groups_sorted()
* - hand optimize the hot CPU spot in the client:
*     sprintf(err_oline,"   %-5d %c %-*.*s           %5d", ...
* V6.1b10 12-Sep-1996     Mark Martinec   mark.martinec@ijs.si
* - split module NEWSUTILITY.C into NEWSUTIL[1,2,3].C
*   because of its size (4800 lines) which made testing tedious.
*   Also split revision history comments.
*   NEWSUTIL1 - handles mostly application code, file i/o,
*               groups and items-related data structures, NNTP, ...
*   NEWSUTIL2 - more general-purpose routines, formatting,
*               SMG, error handling, ...
*   NEWSUTIL3 - support routines needed by NEWS and NNTP_SERVER
*               (like gen_id() and its support routines)
* V6.1b10 09-DEC-1996     Mark Pizzolato  mark@infocomm.com
* - minor declaration cleanup to get warningless compile under
*   DEC C V5.3 on VAX
* - moved definition of global nntp_currgroup to NEWSVARIABLES.H
*   this was referenced elsewhere in NEWSREMCLIENT.C.
* V6.1b11 21-Feb-1997     Mark Martinec   mark.martinec@ijs.si
* - cleanup semantics: change parameter name server_name
*   to file_opened and its type to int
* - pass nntp_node as a server name when calling
*   get_server_file and get_server_header (fixes EXTRACT/TITLE bug)
* - clean-up syntactic problems when compiling with NNTP_CLIENT=1
* V6.1b11 14-Apr-1997     Mark Martinec   mark.martinec@ijs.si
* - get_itm_by_ident() now returns *rg properly even as a nntp client
*   (READ/REF was failing with ACCVIO)
* - change %s to %.s in sprintf to guard against overwriting buffer
*   (with somewhat arbitrary limits) - some of them still left unchecked
* - use new variable displ_subjlen to dynamically control the
*   item title and newsgroup name size on the display, depending
*   on the current screen width
* - ga_search_name(): perform a caseless search, since we must
*   store newsgroup names as received from NNTP server exactly
*   (see RFC977, chapter: 3.2.1. GROUP) but match them
*   regardless of case.

NEWSUTIL2.C

* V6.1b10 27-Apr-1995  Bob Sloane sloane@kuhub.cc.ukans.edu
* - added Kent Covert's definitions for left and right arrow keys.
* V6.1b10 12-Sep-1996     Mark Martinec   mark.martinec@ijs.si
* - split module NEWSUTILITY.C into NEWSUTIL[1,2,3].C
*   because of its size (4800 lines) which made testing tedious.
*   Also split revision history comments.
*   NEWSUTIL1 - handles mostly application code, file i/o,
*               groups and items-related data structures, NNTP, ...
*   NEWSUTIL2 - more general-purpose routines, formatting,
*               SMG, error handling, ...
*   NEWSUTIL3 - support routines needed by NEWS and NNTP_SERVER
*               (like gen_id() and its support routines)
* V6.1b11 10-May-1997     Mark Martinec   mark.martinec@ijs.si
* - util_dir: allow group name size to be at most GRPNAMELEN_F chars,
*   thus accepting also the not necessarily '\0'-terminated
*   newsgrp.grp_name as a parameter.

NEWSUTIL3.C

* V6.1b10 11-Sep-1996     Mark Martinec   mark.martinec@ijs.si
* - rewrite gen_id() to generate a non-talking unique message id
*   and to avoid reading record #1 of groups file where
*   an undocumented field was used as a sequence number.
*   Now works the same for NNTP client and full ANU server.
* V6.1b10 12-Sep-1996     Mark Martinec   mark.martinec@ijs.si
* - split module NEWSUTILITY.C into NEWSUTIL[1,2,3].C
*   because of its size (4800 lines) which made testing tedious.
*   Also split revision history comments.
*   NEWSUTIL1 - handles mostly application code, file i/o,
*               groups and items-related data structures, NNTP, ...
*   NEWSUTIL2 - more general-purpose routines, formatting,
*               SMG, error handling, ...
*   NEWSUTIL3 - support routines needed by NEWS and NNTP_SERVER
*               (like gen_id() and its support routines)

NNTP_SERVER.C

* V6.1b10 17-Aug-1995     Mark Martinec   mark.martinec@ijs.si
* - changed first argument of get_head() to be passed by reference
*   (char *line --> char **line) and changed the code accordingly.
*   This fixes an elusive bug when server side XOVER was enabled
*   and an article was read with header line longer than 1024
*   characters.  get_head() would reallocate the buffer to get
*   a larger one, but the calling code in xover() kept using
*   the old (now free-ed) buffer.  This led to the reuse of the
*   old (free) memory in the driver routine write_thread() - but not
*   until several articles later.
* V6.1b10 6-Aug-1995      Mark Pizzolato mark@infocomm.com
* - changed logic that writes out the newsbatch files to not write more
*   than 32750 bytes per call to fputs.  Some versions of the VAXCRTL
*   can't handle fputs with large strings correctly.  This logic was
*   adopted from similar code in NEWSDIST.C.
* V6.1b10 10-Dec-1996     Mark Pizzolato mark@infocomm.com
* - changed the OPEN_{WRITE|APPEND}_OPT{0|1|2} declarations to
*   explicitly include "shr=get".  This is done since the VAXC rtl
*   always did this implicitly, but the DEC C RTL seems to default
*   to "shr=nil" as might actually be expected from reading the
*   RMS manual.  In any case, the real motivation for this is that
*   some existing batch procedures depended on the "shr=get"
*   behaviour.
* V6.1b11  7-May-1997     Mark Martinec   mark.martinec@ijs.si
* - move global variables to NEWSVARIABLES.H to assure that common
*   variables, used by the support routines in modules common
*   to NEWS and NNTP server, see the same variable declarations.
*   This also avoids the problem with VAXC which stores 'const int'
*   in writable psections if they are not defined in the main program,
*   causing conflicts when linking.
* - argparse(): fixed buffer overflow, avoid copying to temp string
* - group(): avoid buffer overflow - return '411 no such news group'
*   if newsgroup name is longer than GRPNAMELEN_F
* - sprintf format %.s (where n>512) does not work in VAXC - it
*   does not write the field. Avoid that.
* - fix the year 2000 problem
* V6.2.0 19-Jun-1997	Alan Greig A.Greig@tay.ac.uk
* - XOVER save to disk code. This code allows ANU News
*   to save overview info to disk by having the server
*   rather than the NEWSADD code update the information.
*   The more frequently read a group the more up-to-date
*   the information. Stale information should never be returned.
*   Both XOVER and XOVER_SAVE_TO_DISK must be defined
*   and then the option can be controlled dynamically
*   by defining (or undefining) the logical NEWS_DEVICE_OVERVIEW
*   Normally this would be set as
*     $ DEFINE/SYS/EXEC NEWS_DEVICE_OVERVIEW NEWS_DEVICE
*   but could point to a different tree if (say) only
*   a subset of groups were to be handled this way.
*   Add the following to your nightly (or weekly) skim
*     $ delete news_device_overview:[*...]*.nntp;* /log/before="-15-"
*   This just prevents groups which are only read once
*   in a blue moon from taking up extra disk space

NNTP_TCPUCX.C

* V6.1b11    Jun-1997   Alan Greig  A.Greig@tay.ac.uk
* - XOVER support added

NNTP_XFER.C

* V6.1b11  3-Jun-1997     Mark Martinec   mark.martinec@ijs.si
* - replace routines nntp_read and nntp_read_line with newer
*   from module NEWSREMCLIENT.C

NNTP_XMIT.C

* V6.1b11  3-Jun-1997     Mark Martinec   mark.martinec@ijs.si
* - replace routines nntp_read and nntp_read_line with newer
*   from module NEWSREMCLIENT.C

NEWGRPFILE.C

* V6.1b10  9-Dec-1996     Mark Pizzolato  mark@infocomm.com
* - minor declaration cleanup to get warningless compile under
*   DEC C V5.3 on VAX
* V6.1b11  7-May-1997     Mark Martinec   mark.martinec@ijs.si
* - decouple group name size (new constant GRPNAMELEN)
*   from the size of item titles (SUBJLEN)
* - decouple the in-memory grp_name size (GRPNAMELEN) from the
*   size of the groups file record field (GRPNAMELEN_F).
*   Now the file record may contain group name which is
*   not '\0'-terminated, thus gaining one character
*   in the group name length

NEWITMFILE.C

* V6.1b10  9-Dec-1996     Mark Pizzolato  mark@infocomm.com
* - minor declaration cleanup to get warningless compile under
*   DEC C V5.3 on VAX

NEWSBUILD.COM

* V6.1b10  04-Dec-1996  Mark Pizzolato  mark@infocomm.com
* - added extra build option to allow specification of the compiler on
*   the command line that invokes this procedure.
* - added the compiler used to the stored information in the file
*   [.news_build]compile.defines, so if the compiler changes, then
*   the need for a complete rebuild can be determined.
* - added NOPARMLIST & KNRFUNC to the warning messages that are
*   excluded when compiling with DECC (on VAX with DEC C V5.3).
* - enabled interpretation of P6 which controls purging of
*   objects & executables.
* - make sure to create object libraries on a forced compile
* V6.1b11 14-Jun-1997  Richard Levitte  levitte@lp.se
* - added file types everywhere.  This helps a lot against the
*   frustration with logical names like, say, "NEWS"...

NEWSCMD.CLD

* V6.2.0 23-May-1997  Mark Martinec  mark.martinec@nsc.ijs.si
* - Add qualifier /RMGROUP to ADD FILE which implements part
*   of the semantics formerly under /EXECUTE. Add keywords to
*   /EXECUTE to enable individual control over execution
*   of different types of control messages.