(TODO list at bottom)

GRn 2.0 now:

    works properly on 2.04, 2.1, 3.0 and 3.1

    automatically depth arranges custom screens when required

    uses the same text in requesters everywhere

    removes files from T: when using NNTP

    has more modularized code

    no longer crashes when a file isn't in news article format

    has the busy pointer set when Subscribing

    fails if NNTP startup fails

    is *much* smarter about screen and window sizing

    uses LESS THAN 1/2 the memory of 1.16f

    doesn't have problems with NNTP/socket.library startup

    doesn't have problems with Gadtools on 3.0 and 3.1

    has custom memory allocation routines that make it run much faster

    starts up faster

    no longer assumes that the user's grnrc has not gotten corrupted

    no longer assumes that Path:, Subject: and From: are valid

    doesn't leave a hanging signal when CTRL-C'ed

    handles errors from socket.library correctly

    strips NNTP messages properly and NNTP operations are now enhanced

    adds a References: header when following up to the first message in
    a thread

    has Cancel working with NNTP

    has all I/O  AmigaDOS based

    has had all known Enforcer and Mungwall hits removed, including one
    due to an AmigaDOS FGets() bug

    deals properly with empty newsgroups

    supports sockser.device and dnet.device in a system-friendly manner

    updates gadgets properly when subscribing

    has been completely ANSI-fied

    sorts the displayed newsgroup list prior to allowing the user to subscribe

    implements the SUBSCRIBE keyword

    implements the "Rescan News" button

    sets GTLV_Selected for the current article

    implements ROT-13 support with CTRL-X (no mouse equivalent)

    is not case-sensitive when scanning message headers

    is now case-insensitive when sort-by-subject

    implements Hide-Read messages -- this is the default

    has a friendlier crosspost message

    shows the first newsgroup after subscribing

    displays the error number when a posting error occurs

    sets GTLV_MakeVisible for V39 and above systems

    has been prepared for localization

    closes the custom screen when a low-memory abort occurs

    no longer requires the UULib: assign

    generates MIME headers for all mail messages and news articles

    implements the DISCARD option, such that read article do not have an
    entry written to the user's grnrc -- reduces startup time and memory
    usage of GRn

    presumes that if the user-defined nodename has a period in it, it is
    a FQDN and the domainname is ignored

    prefixes a period to the user-defined domainname if it doesn't begin
    with one

    when using socket.library NNTP, the hostname (FQDN) is obtained from
    socket.library, and the user may not override those variables

    implements NNTP authentication

    has an improved grn/8 font

    does double click timing according to user preferences

    immediately observes a Hide Read request

    sets the busy pointer whenever the user's grnrc file is saved, or
    the newsgroup status information is updated

    does not have memory leaks when a file was Published or a message is
    mailed; and all temporary files are removed

    consolidates all ASL activities and has been prepared for an ASL
    screenmode requester

    asks the user whether they wish to post a README as part 0 of a
    Publish'ed file

    treats an empty file name as an abort condition in Publish

    uses the following algorithm:
        /*
        **  SetWhoAmI
        **
        **      Try to reasonably setup the string used for the From: and
        **      Submitted-By: headers.
        **
        **      Finding the hostname is unreasonably complicated because
        **      AmigaUUCP and Amiga C News and socket.library do not use the
        **      same set of environment/configuration variables to set the
        **      hostname.
        **
        **      The following precedence is used for determination of the
        **      originating hostname:
        **
        **          1) If node is set, and domain is set, then the
        **             originating host is the concatenation of those
        **             two strings. If domain does not begin with a
        **             period, one is added.
        **
        **          2) If node is set, and domain is not set then the
        **             originating host is the node IF the node contains
        **             a period. If the node does NOT contain a period,
        **             then .UUCP is appended, and that becomes the
        **             hostname.
        **
        **          3) Domain is not referred to any farther.
        **
        **          4) If node is not set, the mygethostname() is called
        **             which should return the fully qualified hostname
        **             from whatever networking software is in use (currently
        **             it calls the socket.library gethostname()).
        **
        **          5) If mygethostname() failed (returns < 0), then host
        **             is used to set the hostname.
        **
        **          6) If host is not set, we abort.
        **
        **      RealName and userName are used as they always have been.
        */

        has shift-cursor-right do "Next Group with Articles"

        has shift-cursor-left do "Previous Group"

        implements the BugAddress environment variable for specifying the
        email address to send bug reports

        sorts the newsgroup list after a subscribe

        uses a safer, Intuition friendly, method for locking out user input
        when a requester is displayed

        has the Save and Print command set the busy pointer, and display the
        "fuel gauge" requester immediately after filename selection

        has all requesters look alike

        implements the "_mark" button to allow a message to be marked as
        unread

        prefers the NNTPSERVER command over HOSTNAME

        updates the window title after each article is displayed

        allows an empty UULib:Config file

        displays a message when retrieving the newsgroup list from an
        NNTP server

        sets the busypointer when sending mail or posting news

        uses 32-bit values everywhere

        treats "re:" and "Re:" as equivalent when sorting by subject

        recognizes requester shortcuts per AUISG

        recognizes ESCape as a NO synonym in all requesters

        implements SCANALL to scan all files in subscribed newsgroups
        during startup (to be used with CNEWS and UPDATERC)

        updates the article status display after Catchup

        updates the group status display after Junk

        respects scrollable public screens and does not require that all
        of the window fit in the display clip

        sets up Gadgets per AUISG standards

        allows a TOP and LEFT specification of zero

        centers the status bars in Article and Group mode

        enforces a minimum window size of 620x200

        implements '0' as a synonym for 'C'atchup in Article Mode

        implements a guick move feature in subscribe mode

        implements HOST, USER=NAME and REALNAME as parameters and tooltypes;
        not just environment variables

        implements the same keyboard shortcuts for Subscribe as are present
        in Article Mode

        only retrieves the newsgroup file from an NNTP server once

        displays a fuel gauge if more than 5 articles have to be processed
        in a newsgroup at startup

        implements the NOSCAN parameter

        only activates requester windows when the original window was
        active

        no longer opens commodities.library

        properly parses boolean options from its icon

        allows its window to be resized

        implements the NORESIZE parameter to disallow resizing

GRn still doesn't:

        implement KILL files

        have localization features

        have an ASL screen-mode requester

        have a "Mark Mode"

        support XPK or UMS

        support a Unix-standard .newsrc

        have an Iconify option

        directly support MIME messages

        have menus
