Summary of the more visible changes from DIS 2.16d
--------------------------------------------------
Several parts were pulled straight from the GEK griff, some of which I 
don't understand or use. (The technical stuff is his, so consult the 
original GNOS/gremNOS (01 & 02) docs if you need more.) A lot of GEK's
bugfixes are incorporated, but most will not be visible. Again, check 
the original docs. 

For those adventurous souls who stray beyond DIS 2.16d there are three
main options:
  Textwin - 2.16d + windowed interface and built-in VT102.
  GremNOS - 2.16d + lots of mods and extensions, using the original
            cryptic interface.
            GremNOS/TW is the same but with the addition of the Textwin
            interface.
  YAN     - 2.16d + (most) GremNOS + more mods and extensions. Uses a
            modified JNOS status lined interface.
            There was a YAN-TW which was much the same, but with the TW
            UI and without the Browse viewer. No longer compiled. 
            YANVI is a hybrid version without status lines, but with
            some attempt at making it VI-friendly.

What follows is for YAN and YANVI, but not at all for any of the others.

 1. The interface.

    Configurable colour (startup parms) and status lines (2 - a status
    and a session line). The VI version is without the status lines and
    uses stdout screen output.

    Command recall from a history file in all "cooked" sessions with 
    full key control for editing.

    Single key session navigation, either directly (F10, F11 etc for 
    session 0, session 1, etc) or sequentially with the TAB key.

    The ability to monitor some stats in the status line - memory,
    throughput and news delivery.

    The ability to run in 43/50 line mode with a command line parm and,
    in the absence of that parm, to detect the existing number of lines
    and use that, if 25 or over.

 2.  rewrite file and bounce addresses

    The return address for bounces generated by the SMTP client is
    checked with the rewrite file to ensure local addresses are handled
    correctly (with mail forwarding, there's currently no other way to
    determine if an address is local).  The rewrite file MUST NOT
    therefore mangle any non-local addresses - this includes rules such
    as:

      *.*@* $1_$2@$3 r
      *@* $1

    An example fixed replacement - the first line is only needed with
    mail forwarding; $h is replaced by your full hostname; the third
    line isn't strictly necessary either if your hostname is defined as
    sample.demon.co.uk:

      *@mydomain.org $1@$h r
      *.*@sample.demon.co.uk $1_$2@$h r
      *@sample.demon.co.uk $1

    'smtp server relay off' may not work correctly with a rewrite file
    that mangles non-local addresses.

    Source routing (@somehost.dom:x@y) is now stripped before rewriting
    so rules beginning @*: will no longer work (AFAIK Demon haven't
    delivered mail with this format for a while anyway).

 3. Login sequence and PPP are much quicker

    Any commands after the 'dial sl0 ...' line in autoexec.net may not
    be executed until after the routing is up and traffic is flowing.

 4. Command changes

    - 'domain qtype' now accepts record type e.g. 'domain qtype mx'

    - Finger, Ping, Hop Check and Domain Query have an additional option
      of a filename which will cause the session to be recorded into
      that file. Finger can also take an extra parm to stop the session
      pausing at page or final exit.

    - FTP client has command line scripts (ftp @scriptname) and a 
      verbose 4 mode displaying a bytecount progress indicator. It has
      the option of feeding files for viewing and dir listings into the
      View ASCII viewer. A command to put up a lightbar file selector
      which can be used for directory changes and file retrieval.

    - 'time server ...' doesn't resolve hostname until required
      'time server none' removes hostname.

    - 'time read' and 'time set' run without hogging the console
      Also timeouts on initial time connection and data read to prevent
      hanging connection.

    - 'smtp gateway ...' doesn't resolve hostname until required
      'smtp gateway none' removes hostname.

    - 'ppp sl0 lcp listen' results in a passive open as it did prior
      to v2.16d; 'ppp sl0 lcp open' configures an active open.
      The default is still an active open as with v2.16d.

    - Telnet now has two extra options. One, taking a filename which
      will cause the session to be recorded into that file and two, a
      scriptname to cause that file to be run as a script. Uses ANSI
      screen formatting and had crude cursor control.

    - Exit can take a number parm which sets the exit code.

 5. New commands

    - BROWSE is a very simple HTML viewer which, with the aid of various
      clients, will follow some links (HTTP, FTP, TELNET, local files)
      and fill in simple forms. Takes either a URL or local filename.

    - HISTORY controls the command history function.

    - HTTP client has numerous mods and extensions, including the option
      to use POST, a proxy server, spoof the user agent and forced binary
      mode.

    - HTTPOPT sets up and controls some HTTP parms - spoof, proxy use,
      proxy server name, binary mode, proxy cache control, cookies,
      verbose mode and, if Browse is compiled in, usecache.

    - MSTAT controls the monitored stats display, if any, in the status 
      line. Stats are one of memory, throughput or news delivery.

    - NNTP RETRY controls retries in response to 400 messages.

    - NNTP NEWNEWS controls how the new news list is built and the
      "fudge" factor.

    - POPMAIL controls POP3 mail delivery.

    - PKSTAT displays packet stats if the packet interface is compiled
      in and the driver in use provides such stats.      

    - SMTP SERVER allows control of disk cache, return receipt and the
      acceptance of non-local mail.

    - VIEW, a bidirectional text reader replaces More.

    - EDIT shells out and runs an external editor.

    - MAIL shells out and runs a mailer.
 
 6. NNTP client changes

    News killing is optimized to reduce the amount of header match
    tests needed - instead of using one internal list for kill and
    one for keep, there are 27 lists each - indexed by the first
    letter of the header.  This has the disadvantage of not allowing
    any wildcards at the start of a rule (except for '*' to kill all
    bodies, this is now handled more optimally).  Any rules which are
    ignored are notified to screen.

    Reported message-id count is only updated in stages beyond
    certain limits (performance killer with slow video card, IMHO).
    Added duplicate detection for ids appearing multiple times in
    one NEWNEWS response, reported as NewNews duplicates.

    Much better logging and handling of unexpected responses, full
    handling of '430 unavailable' and '502 no permission' responses
    for headers, bodies and articles.  Disconnections and state
    machine errors should be logged with message-id and full server
    response where possible.

    Figures for total and received post are generated for the MSTAT 
    display. These track the verbose figures, but are independent of 
    the mode.

    The bytes/sec calcs were off as it wasn't allowing for the
    \r\n -> \n translation and long lines so reported rates should be
    up anyway ;-)

    Delivery figures produced for feeding into the monitored stats 
    display (mstat 3).
    ---
    NNTP client supports username and password for use with servers 
    requiring authentication - 'nntp addserver news.foo.dom 600 user 
    sample mypasswd' specifies an account of 'sample', password 
    'mypasswd'. Note 'nntp list' now shows account name and password in 
    brackets.

    If NEWNEWS fails or isn't supported by the server an attempt can be
    made to use GROUP/STAT to retrieve the article ID list. Controlled
    by a newnews command (which also controls the "fudge" factor).

    Direct posting to the server is attempted before each news collection,
    if files are found in the news queue dir. 

 7. SMTP client changes

    Fixes for 400 and 500 response handling; this required some changes
    to the batching code - mail sending with 'smtp batch on' is NOT
    fully tested.

    Better disk space checks, less chance of deleting messages which
    can't be sent (as a last resort, bounce messages or receipts that
    somehow fail to be sent for fatal reasons are sent to Postmaster
    with an explanation).

    'While talking to' bounce is fixed to show both mail domain and
    actual mailhost name and IP address.

    'smtp list' fixed; only displays up to 3 recipients for each msg.

    When memory gets tight, the recipient list for messages to more
    than 3 recipients is not loaded into memory, it's read from disk
    as required during the SMTP transaction.

    ---
    Client now talks (basic) ESMTP

    ID returned from remote server on successful mail acceptance is 
    logged in nos.log

    Mail with the first line of the .WRK file matching the 'smtp 
    gateway' setting is treated as for a 'smarthost' and sent straight 
    to the address rather than via an MX record (Personally I don't 
    think this step is necessary by the procedure in RFC974 but it will 
    speed things up marginally and should continue to work regardless of 
    any line Demon eventually take on this issue).

    Client code reworked to try and address some fundamental flaws - 
    unfortunately it's not quite finished as a 400 response from a RCPT 
    TO: will quit the session and the whole mail will be retried - the
    alternative for the moment is to risk not resending the mail to that
    address. 'smtp batch on' currently has no effect.

 8. SMTP server changes
    There's a fix in place to unmangle MMDF's habit of quoting domain
    literals so any mailkill entries like  *@"\[127.0.0.1\]"  need to
    be adjusted to  *@\[127.0.0.1\]   My reason for fixing it is that
    when trying to forward any mail with such an envelope, most other
    MTAs will (correctly) reject the quoting as invalid syntax.

    EXPN and VRFY now use the same rewrite and alias expansion rules
    that incoming mail uses, so they're much better for checking
    correct alias setup.

    Mail to postmaster@ cannot be rejected (mail AUP) except by
    mis-configuration of the rewrite file.

    Mailkill now logs the matched rule against killed addresses (bit
    messy at present - 2 entries: one with the rule, one with the to
    address).  More system friendly, doesn't hog CPU with long kill
    files.  Mailkill returns errors in response to RCPT TO not 
    MAIL FROM in line with RFC, allows logging of to: address.

    ---
    Received: header now includes IP address of peer, contents of the
    to envelope before rewrite/alias and an improved timestamp format
    for security and traceability.

    Unknown address now takes precedence over a matching mailkill entry.

    Mailkill supports a 'not' syntax using '!' like newskill so:

	  *@some.domain
	  !myfriend@some.domain

    kills all mail from some.domain except those from myfriend@

    Alias expansion rewritten again - now opens alias file only once per 
    mail.  Any expanded alias which contains an invalid mailbox in 
    addition to other valid ones will no longer cause mail to bounce - 
    mail is sent to the valid recipients and an entry is made in nos.log 
    highlighting the problem alias.

    Percent hacks appearing in the alias file are automatically adjusted 
    if the domain on the RHS of the @ matches the 'smtp gateway' 
    hostname - this works around the problems of post.demon.co.uk not 
    reliably maintaining support for the %-hack. (e.g. with 'smtp 
    gateway post.demon.co.uk', foo%some.domain@post.demon.co.uk in the 
    alias file is sent to post.demon.co.uk as foo@some.domain)

    'close SMTP' log message includes a count of messages accepted out 
    of those offered.

 9. POP3 changes (from the unofficial KA9QPOP)
    Client only. Somewhat extended from the basic KA9Q client.
    A delete command controls the fate of delivered mail on the server 
    so that it is now possible to collect mail and leave it on the 
    server.
    Three verbose modes gives some display of progress and the action
    of drop and kick.
    Drop and kick both operate globally on server hostnames, but can 
    also be made specific to a single username.
 
 10.Wildcard matching

    The wildcard matching routines, used for mailkill, news kill and
    rewrite, now accepts ']' and '-' within []  ']' must be first in
    set, '-' may be first or last.  Bug fix and optimization to the
    wildmat() routine should also make it more efficient for complex
    patterns.

 11.HTTP
 
    Several additions and mods to the JW original. Some bug fixing and
    the addition of POST mode, proxy server use, proxy cache control, a
    user agent which is spoofable and a more complete data packet is
    sent to placate the sniffier servers. A forced binary mode option to
    cope with those servers (like Demon's :) which think that things like
    .arc or .rar files are plain text.
    Automatic redirection and authentication are also implemented, while
    cookies can be ignored, logged and returned, as required. It only
    pauses on exit if errors are encountered in the only, or last,
    transaction. HTTPOPT to control the default options. The progress
    display will only be generated when the session is visible.
    
 12.FTP

    Transfer progress can be tracked by a bytecount (verbose 4) as an
    alternative to the "hash" display (verbose 3). The bytecount display
    is only generated when the session is visible.
    The use of a bi-directional viewer is optional for directory and
    file displays.
    Fixed problems talking to Microsoft NT servers e.g. ftp.microsoft.com
    where the multiline response complies with the example in RFC959.
    Rget command to resume interrupted get commands. 
    Xview command provides a litebar'd directory list which can fetch
    files and change directory just by moving the bar and hitting enter.
    Automatic download resume is optionally attempted if a file is found
    to already exist.
    The interval between bytecount progress calculations can be set.

 13.View

    A bi-directional ASCII file viewer replaces More as both a util
    used by other functions and as a stand-alone function in its own
    right. More is not an alias.

 14.Help

    Now has three modes, the original ? displays a summary and each
    command will still show its options, but in addition 'help' will
    display a file ~spool/help/help and "help cmd" will display a
    file ~spool/help/cmd. DISview is a ready source of such files and
    the YAN docs are in the same format.

 15.TZ

    Relaxed checks on TZ abbreviations to allow 1-5 chars rather than 3 
    so CT and CEST can be used, for example.

    The GMT0BST1... syntax that Demon continue to recommend is wrong and 
    will cause the changeovers to occur 2 hours off - the 1 should not 
    appear after BST. GMT0BST,M3.5.0/1,M10.5.0/2 is correct for the UK.  
    For the NL, I reckon CET-1CEST,M3.5.0/2,M10.5.0/3 should be 
    correct...

 16.Browse

    A simplistic HTML viewer essentially there to ease link following 
    online. Text mode with false colour and crude page and screen 
    history. It will attempt to follow web, ftp, telnet, local links
    and mailto (with external mailer) with some image retrieval options.
    (There is an offline version which also follows #label links (both
    within and across documents), with a suitable graphics viewer
    display images, but it's doubtful if images will appear in the
    online version.)  Forms are implemented, somewhat, single screen at
    the moment.

 17.Multitaskers

    Many more multitaskers are identified and time-slices released. The
    "true" DOS multitaskers - DoubleDOS, DesqView, Windows, OS/2 and 
    DRDOS 7's Taskmgr (in multitasking mode) are found first and then
    generic DOS and DPMI. DRDOS Taskmgr in taskswitching mode is also
    identified and the taskswitching hotkeys disabled.

 18.Telnet

    A crude attempt at ANSI formatting in the YAN version. If you are
    into telnet, one of the Textwin compiles is by far the better way to
    go.

 19.Edit

    An edit command shells out and runs the editor of your choice. DOS
    memory is salvaged from the heap so a healthy amount should be
    maintained.

 20.Mail

    A mail command shells out and runs a mailer in the same way as the
    edit command.
