YAN
===

Mods from Demon's 2.16d KA9Q:

-= version 1.0 =-

1. Command history for all TTY "cooked" sessions, in effect the 
   command session and ftp. Up/down arrows recall commands. Works in 
   command session and ftp (all "cooked" sessions). Recalled commands 
   can be edited and navigated via arrow keys. Size of circular history 
   can be set/displayed with "hi[story] command.

2. FTP command line scripts in the form; FTP @scriptname.
3. Extended online help:
        ? summary list, as normal.
        h[elp] gives the contents of a file called "help" in the
               helpdir.
	h[elp] cmd  gives the contents of a file called "cmd" in the 
	       helpdir.

   The helpdir is currently ka9q_root/spool/help. DISView is a ready 
   source of suitable help/info files and, if I remember, I'll 
   update/create versions for any mods I make. Dream on...
4. JW's http added and his ftp byte-count transfer display. I do
   like it !
5. Http session is now called Http and not Telnet !
6. F11/12 fkeys added, plus shifted, ctrl'd and alt'd versions. I think 
   I've opened up the option for 127 extra macro keys. This may be 
   superseded by built-in F11/12 session swap.
7. Two status bars - session (line 2) and status (line 1) added:
	   session - number, name and parms/message status. The
		     command session could display the cwd ?
	   status - clock, elapsed time, avail memory/free memory,
              active sessions list which flashes the numbers of
	      sessions with pending screen o/p. 
8. Screen colour added.
   Colours changed by command line parms:
	     -wf+b  - status bar (line 1).
	     -xf+b  - session bar (line 2).
	     -yf+b  - main text screen (all the rest).
    f = foreground colour, b = background colour.

-= version 1.1 =-

7a. Modified the status bar to show available heap size instead of
    available memory.
9.  View added. Bidirectional file viewer. A hack of Phil Karn's version 
    to both simplify the code and allow the time display in the status 
    bar to update. Deleted More.
	Command line:	v[iew] filename
	Navigation:	Key		Letter	Action
			Home    	h	Go to start of file.
			End		e	Go to end of file.
			Pgdn, Space	D	Move down one page.
			Pgup		U	Move up one page.
			Down arrow	d	Move down one line.
			Up arrow	u	Move up one line.
			Del, Ins 	q,Q,R	Quit.
	
10. Session swap with F11/12 + sh, alt, ctrl added. Looks OK.
11. TAB key sequential session swap added. Even better...
7b. Flashed up the status bar with a bit more colour. OK for default, 
    but it makes any command line changes look garish. Do I care ? Added 
    session 0 (command) to the status display.
2a. Modified the ftp client so that it starts off with pager off for 
    scripts, but the script can change that. Probably a one off while 
    I'm testing it.
6a. Removed F11, etc as function keys in favour of direct session
    swap, which I prefer. Forty odd fkeys should be enough for any
    man.

-= version 1.2 =-

7c. Added cwd(current working directory) display to the command session 
    session status. Do I like it ? I do.
12. Reformatted the PPP <interface> display by replacing the TABs
    with spaces. Nicer online.

***** This looks like my final version ! *****

Um....

Bugger.

Er, this in one of my final versions !

-= version 1.3 =-

13. Smtp switch put in to honour return receipt requests. Command format 
    "smtp receipt yes|no". "Smtp receipt" displays setting. Default is 
    NO.
12a.Still playing with the PPP display. I don't know why I bother.
14. Major trimming....
    	Stripped out all the ham radio stuff I can see.
	Removed Packet support in Tiny version..
    	Removed VJcompression (SLIP only ?) by default.
    	Tidied up the makefile and config.h.
2b. Reverted ftp scripts to forcing page off.
15. Tweaked dialer.c to rename the session to "Command Interpreter" when 
    it ends. Somewhat pointless, but it annoyed me. Added the same 
    description to the normal command session.
16. Replaced tzset.c with GeK's bugfixed version.
    Looking at his SMTP server, but I'm not unhappy with the current 
    version. Added the receipt switch to his source just in case I go 
    for it.
17. Added a switch for the memory display in the status line. Default is 
    not to have a memory display. Command format: "mstat yes|no" "mstat" 
    displays switch status, which is a bit pointless since the result is 
    bloody obvious. Duh !
18. Changed httpcli to allow # lines for comments, stopped a script 
    crashing if either a file overwrite was refused or a slow fetch was 
    reset. Odd errorcodes displayed at exit and wait is only for error 
    conditions.
19. Finally added the improved wildmat.c code. Put in the wildcard
    mailkill code, but untested since I don't do it.
20. Reset cursor type after shelling to DOS. We don't need no big
    blobs round here !
21. Added a BM-like browse command which shells out and runs HV.EXE by 
    default. This can be changed with the env variable BROWSER. Command 
    line: b[rowse] webpage.htm. Suffix not needed for HV. 
18a.Fixed orphaned sockets when file overwrite refused (httpcli).
18b.Added the option to change the filename in httpcli when the original 
    one already existed.
22. Replaced the external HV in 21. with an internal Browse. MUCH
    better performance. This micro-browser displays web pages, 
    highlights and selects links, feeds the URLs into http for fetching, 
    displays what its fetched and keeps a history of the last 10 pages 
    viewed.
	Command line:	b[rowse] URL
			b[rowse] #filename
	Navigation:	Key		Letter	Action
					s	skip to next link.
					S	skip to previous link.
			Enter			follow link.
			Home		h,F	Go to top of the page.
			Pgdn, Space	P	Move down one screen.
			Left arrow	J	Move back in history.
			Right arrow	L	Move forward in history.
                        Del             q,R     Quit.

    Fetched html docs and the log file saved in ka9q_root\cache dir.
22a.Added FTP links to browse.  Testing local menu, which looks OK. 
2c. Stopped command line ftp scripts pausing when they quit.
22b.Added the ability to pass a URL directly into browse.
22c.Added search engine driver. Http URL length increased to 256 to 
    allow it. With the right strings, all (?) search engines can be 
    driven.

-= version 1.4 =-

17a.Reworked the memory stats display into a more general diagnostic,
    which is now called Monitor stats :)

    Command format: mstat [n] where n = 1, 2 or 3
	Value	 Display       Display legends 
	1	 Free memory - Fh: (heap)     Fm: (memory)
	2	 Async data  - Rx: (received) Tx: (tranmitted)
	3	 News	     - Nr: (received) Nt: (total)        

	Values outside the range ( 0 & 4+) will result in no
	display at all.
	The  memory is in bytes, the async data is in kilobytes and
	the news in article headers.
22d.Added TELNET links to browse.
22e.Added local file links to browse.
18c.Added User_agent string to the http client.
18d.Added a spoof toggle for the User_Agent string. Command format: 
    "spoof yes|no". "spoof" displays the state (and http the string its 
    using). The default is no, which results in the YAN string being 
    used, but yes results in a spoof string claiming to be Netscape 2 
    being used. This, apart from amusing me, is intended to fox those 
    servers who refuse to send things to us poor-boy browser types. (It 
    doesn't work, though. Damn.)
18e.A bit more work on orphaned sockets from http.
23. Added colour reset to the command session prompt as a temporary
    (hopefully) measure to aid recovery after dohttp1 crash.
24. A POP3 version compiled. Appears to work OK, but the web stuff feels 
    a bit unstable. It's also smaller than expected, which is a bit 
    worrying. I don't see any advantage in it, so it's a dead end ?
23a.Deleted the colour reset and added a test in browse to stop it doing 
    any output unless its in a browse session.
23b.Added a percentage of file read display to the session status bar 
    for browse.
17b.Added a display of the news headers as they are initially picked up. 
    Would allow nntp to run completely with verbose off.
23c.Moved percentage display into the browse URL bar.
22f.While adding the percentage display, reworked the URL bar code to 
    stop flicker. 

-= version 1.5 =-

17c. Reworked the nntp code to separate the new news phase from the 
     delivery phase for the totals figure displayed with mstat.
24a. Merged the code base for YAN with the YANPOP version so that a 
     common code base can compile both the default SMTP-only version
     and the POP3 version. Damn, there appears to be a stability
     problem with http - I think Mark's browse memory bug has bit me.
     Shit !
22g. Split browse off into its own module and added http.h file to
     httpcli.c/browse.c.
24b. Reverted to the non-POP version, but pulled in GEK's conditional 
     bmutil/mailbox modules which saves as much size as the POP version 
     did. Added a POP3 option to leave mail on the server and a verbose 
     mode.
24c  Added a lot more of GEK's mods and bugfixes. Supposedly better and
     even smaller. This bloke knows more than I even realized there was
     to know ! They appear to be stable and save even more memory.
     Stuck with my SMTP default for not sending receipts, but replaced 
     my extra commands with his 'server + parm' integrated one.
18f. Added httpopt to control spoof and allow easy addition of proxy
     server, etc. Spoof command replaced.
18g. Added proxy server option along with a name def and on/off toggle
     additions to httpopt.
22h. Squashed *the* memory bug, I think. Well, *a* memory bug, anyway.

-= version 1.6 =-

        A unified SMTP/POP3 version with all of GEK's 01 bugfix code and
        a lot of his mods in it. (where they don't conflict with mine)

24d. Merged the POP3 and default version into one codebase. The normal
     version is the same size as the original and the POP3 is a lot 
     smaller than the old POP3 (sans GEK's stuff). Both appear to work 
     OK and may be slightly faster than of old. Rose tinted specs ?
24e. Added username to the logging of the POP3 STAT output. Reworked the 
     logic of the poll display and corrected the number type mismatch.
25.  Added an option to the telnet command to automatically record the
     session into a specified file (/filename) by hijacking the record
     code.
22i. Rewrote the telnet logic in browse to honour the, apparently, 
     correct URL format - sitename:port. Telnet link sessions will 
     *always* be logged into a file called telnet.log. I wonder if I 
     should change the telnet command to use the same convention ?
25a. Added an option to the telnet command to run a script 
     (@scriptname). Sod it - the text stream can have zero value 
     characters in it :( We'll ignore 'em for the 'mo, but better to 
     replace 'em with a real space ?
24f. Reworked the POP3 kick logic to make it work as intended - kicking
     multiple clients.
26.  Added a logfile option to the finger command, a la telnet.
22j. Added FRAME SRC links to browse. Removed gopher and wais as link 
     options. Tidied the end of HREF highlight to minimize colour 
     leakage. Frames are now indicated and colour leakage has been 
     further reduced.
     Stripped the #labelname from URLs since we can't handle 'em and 
     ignore 'em as links (unless I copy this option from the s/a 
     version).
     Reworked directory changes to allow *any* number, but never more 
     than there are in the original URL !
18h. Added the transfer rate display from ftpsubr to httpcli. Changed
     both to display the mean transfer rate, rather than the original
     instantaneous one (too busy for me).

-= version 1.7 =-

        This includes all (I think :) of the functional GremNOS 02 
	changes. The Demon-specific additions have not been included
	and the textwin stuff is obviously missing.
	The major server/clients (SMTP, NNTP and FTP) were dropped in,
	largely intact. Minor mods made and my stuff merged in:
	  SMTP - the return receipt default is OFF.
	  NNTP - The additions added to provide the figures for mstat.
	  FTP  - The command line script option added.
	a single name change made to domain.c to allow the POP3 client
	to be part of the single codebase.

22k. Added some entities to browse and merged the display method from 
     the s/a version. This allows a much nicer linewrap to be used - a 
     safe longer line without any word split. Default line is now 72
     chrs, 76 max.
     The s/a version now can follow #label references, across files if 
     necessary. Works OK, but is this worth it for online ?
22l. Educated FRAME SRC pull - it'll find SRC wherever it is. Added
     FRAME NAME for added flash, although mostly they're without
     meaning.
27.  Added the new alloc.c and smtpcli.c bugfixes from GEK.
26a. Added a hands-free option for finger automatic logging - no
     pager and no pause at the end.
28.  Added enhanced lines parm (-e) to command line to run in 43/50
     line mode. It will also attempt to pick up the existing number
     of lines when it starts and, in the absence of the -e parameter,
     try to use that, albeit with a 25 line minimum.
22m. Finally stuck in a FONT and SCRIPT killer. It appears that some
     HTML editors leave the ; terminator off the end of entities
     when followed by an HTML command. Sorted that out, maybe. Added
     BASE HREF decode. First attempt at MAP HREF links and ALT names.
     Green on black specifically set for the http client.
     Experiment:
		Rethought the page down in the light of the
		unreliable file pointer positioning. It'll back up
		*roughly* a line which has the nice byproduct of
                making the "hanging" word redundant.
24g. Reworked the POP3 kick and drop logic. Both can now action a
     single enabled server selected by username. Drop will do all of
     the enabled servers with a common hostname, a la kick.
     Added verbose feedback to both commands.

-= version 1.8 =-

29.  Added conditionals for bootp client and server. Rejigged the code
     to allow selective bootp compiles with either or both. Stuck in
     the fix for truncated IP addresses.
29a. Packet-only compile retested. Dospppd 0.5 was about as fast as 
     YAN's PPP and 0.6 is supposed to be some 25% faster. Do I hear 
     bollocks ? I do. Rock solid, though, and maybe more robust than
     the built-in version.
28a. Added background colour control to the whole of the Status line.
     This is an attempt to make the display screen reader-friendly
     since most screen readers like a black background and this can
     now be used for the whole of the screen (except in the browse
     function). It makes we weep, but monochrome *is* possible.
22q. Major browse effort.
     PgUp/u implemented, somewhat crudely, with a 4 screen history.
     Reworked the end-of-page logic which should minimize, hopefully
     stop, mangling at screen change/link highlight.
     (The offline version, naturally, has larger history for both
      pages and screen.)
     Finally added a file check to stop browse being started with a
     non-html file. (if I can't remember...)
     Added (crude - what else ?) image processing - highlighting and
     collection in YAN online version, highlight and display in the
     offline version. The offline version ignores any directory info
     so that provided the file is in the same dir as the webpage it
     will be found.
     Additions to do something with .asp files. These buggers are
     getting everywhere :( Only .asp and .asp? covered at the mo'.
     Added FORM which throws up an indication just to see how many of
     these there are. SCRIPT now also throws up an indication, again
     to see how many there are, not that much can be done with them
     other than, possibly, ripping out the links.
     Removed BROWSE.LOG, which makes, at least in theory, multiple 
     browse sessions somewhat less of a lottery. It's something of a 
     win-win game as well because the cache manager (now called Ccache) 
     is also somewhat simplified :)
     Added the &#123; entity format.
     Fairly major reworking of code to peel off parts of the mega-loop 
     and putting all of the value parsing into a common function. It'll 
     either work better or not at all !  Stripped out the space killing
     since I can't remember why that was done.
7d.  The flashing session number in the Status line for sessions with 
     pending output now changes colour to red when the buffer goes over 
     70% full. Not that clever if somebody uses red line/text, but it's 
     a bit better than nothing until a virtual screen can be cobbled 
     together. Resisted the temptation for multiple colours and a beep 
     as well :)
18h. Added POST to the http client. Two extra parms needed - post and 
     the data packet. Used only for FORMs ? In theory its drivable
     from a script, but not likely unless an offline FORMs scripter is
     created. Still, it's a thought.
22r. Added embryonic FORMs to browse. Single line text entry, checkboxes
     and radio buttons are done and select/options emulate radio buttons
     and checkboxes since I can't see any difference. Can't see any way
     to do textarea and it implies a mega INBUFSIZ, talking of which,
     it has had to be bumped up to 1024 !  Ye gods, is there no limit ? 
     Amazingly, it's all working (to some extent :) 

-= version 1.9 =-

22s. Major browse effort 2.
     FORMs evolving and stabilizing. Quite a few bugs squashed in both 
     the new forms and the reworked code. Input number increased to 32 
     and options are placed in two columns, if possible. Button added 
     and all files the http client is called to fetch are now placed in 
     the cache dir, which ought to make offline review easier if any 
     images have been collected. (Webot also scripts files to be saved 
     in the same dir). BASE HREF now allocated to INBUFSIZ limit. A 
     little more memory allocation reworked and I discover structures ! 
     The entity translation data is now held in a structure so additions 
     should be easy to add and since all of the major memory eaters are 
     now in heap memory I feel happier about increasing things like 
     page history size, screen history limit and forms size.  All search 
     engine output assumed to be HTML, including that from search 
     strings provided by a search engine. The FORM and INPUT count code 
     tightened, since I've found pages which browse renders with more 
     than 2 forms, and forms with more than 32 inputs, per screen. 'I' 
     is used to cycle round the form inputs in the reverse direction.
18i. A few bugs, introduced with the POST code, squashed. The data
     packet simplified since I've decided that Referer: is an option I
     don't need and the cache control code discarded. Cookies not
     refused, but ignored. They don't look that difficult to add, but 
     I've yet to see the point.
18j. Added a command line binary option to force a binary collection
     even when the server claims to be sending plain text. The default
     is now set by an httpopt switch as well.
     This should sort out those web-servers, like Demon's !, which
     think that things like .rar or .arc are "plain text" files :( 
30.  Added a user-set return code to the exit command.
2d.  Added a filter to the ftp client to stop the warnings when # is
     used for a comment line in the first character position.
31.  An attempt to make it multitasker-aware. Dragged in the JNOS code
     for OS/2, DOS 5+ (added v7) and DPMI. Added DRDOS 7+ and DRDOS
     multitasking (largely to see if I could).
     Looks OK with MSDOS 6.22, Windows 3.1, PCDOS 7 and DR-DOS 7.02.
     Also picks up DR-DOS taskswitching mode and disables direct key
     switching.
29b. Stuck in the pktdrvr code from JNOS, which adds a pkstat command. 
     You don't get much unless the packet driver provides it, but 
     DOSPPPD, from version 0.6, does, so that's OK :)
29c. Tweaked pkstat to provide throughput figures for mstat option 2 and 
     adjusted the mstat code accordingly. The async figures are used if 
     that interface is compiled in, otherwise the packet stats will be 
     used *if* any are provided by the driver.
9a.  Tarted up View's drivers to pass a defined session name. 
2e.  Tweaked FTP to allow the bytecount progress display to only be 
     generated when the session is current (no more background buffer 
     filling). You still get the termination messages which will flash 
     the session number. Needs sendfile, recvfile and hashit to take a
     session pointer as a parm.
     Tweaked the hash (verbose 3) display to break up the #'s (now +'s)
     with !'s.
     **Experimental** Added an ftpopt to use the bidirectional View in
     place of the default More lookalike for all file-viewing which is
     dir/list, ls/nlst and view. The option can take four values and it
     works, after a fashion - runs in the FTP session so you don't get
     any fancy session info :( On the other hand, it would make dropping
     in a litebar file selector easier to do :)
     View needed some surgery to inhibit starting a new session.
18k. Added the background bytecount progress display suppression code to
     httpcli as well. When it's hot, it's hot :)
29d. Some of the assembly changes made when pktstat added have been
     backed out. Pkstat and the multitasker code is unchanged, though.

-= version 2.0 =-

9b.  Modified View to handle \r, \n and \r\n in exactly the same way.
     Now uses binary mode instead of text. Looks OK.
25b. Put an attempt at ANSI formatting into ansi.c and modified the
     display code to use it for Telnet sessions. VT102 next ?
32.  Added the use of GROUP/STAT to NNTP as a fallback if NEWNEWS fails
     or is not used by the server. Uses as file called NGSTATUS in the
     news dir (~/spool/news/ngstatus) to hold a record for each newsgroup
     accessed for each server:

	news.demon.co.uk demon.ip.support.pc 0000000823
           news server       newsgroup	     high number

     The high number is the number of the last article on the server.
     It is updated every time this alternative news retrieval is used
     and only the records from the *last* access for each server are
     retained, although the previous ngstatus is saved as ngstatus.bak
     after each "kick".
     This means that if you have records for ten newsgroups on a
     particular server and then access that server for only seven
     newsgroups (which need not include any of the previous ten),
     ngstatus will hold records for only those seven on that server
     after the access. Records for all other server/newsgroup sets are
     retained. If you do several news collections in a session, both
     ngstatus and ngstatus.bak will be updated several times.
32a. Added the option to post news directly to the news server as well
     as via the mail2news gateway. The way it's done requires a new dir
     (nqueue) under spool (~/spool/nqueue). For each posting this holds
     two files - a news file (suffix .nws) and a complete news article
     (.txt suffix). The news file holds the message id and a list of the
     newsgroups to be posted to. At least one must me on the server.

     As it stands, there is currently no reader that I'm aware of making
     the file formats required. Snews only makes files for mail2news
     posts, but a modified version has been cobbled together to allow
     the option of making the new direct posting format. This needed a
     couple of parms added to the snews.rc file.
32b. In the light of comments in Demon's newsgroups tried using POST
     instead of IHAVE. I like it ! It's as fast (theoretically it ought 
     to be very slightly faster since it doesn't check the newsgroups),
     simpler and the mods to Snews are also easier/less. It should be
     easier to make a mail2news filter util since all that would be
     needed would be to move the .txt files to the new dir, dropping
     the mail2news line and deleting the .wrk files. Somebody else can 
     do that, though.
18l. Reinstated proxy cache control to the HTTP client and this time 
     with an httpopt to control it. Only effective if a proxy is in use, 
     but it might also perk up the non-proxy caches.
25c. Reworked the ANSI code to handle BS better (?) and tidied up a few 
     other things. Added an init routine to set the ANSI values to 
     default at the start of a telnet session. It dawns that each telnet 
     session should hold its ANSI values to allow multiple sessions, 
     but that's for the future. Improved the meshing of the ANSI screen 
     formatting and the non-ANSI data entry. Added a first attempt at 
     issuing ANSI cursor control sequences with four key combinations.

                   Ctrl-R
                     ^
                     |
         Ctrl-D <----|----> Ctrl-F
                     |
                     v
                   Ctrl-C

     They don't mix with the TTY data entry (which uses the arrow keys
     and which I don't want to rewrite), but screen navigation should
     be possible if no data entry is in progress.
     Menu navigation with Ctrl-R and Ctrl-C tested OK and Ctrl-D/Ctrl-F
     certainly move the cursor left and right.
     Maybe better keys can be selected ? 
32c. POST looks like it's a winner so removed the last of the IHAVE 
     code and fixed a couple of stupidities.
22t. Made the links filter more general to pick up HREFs wherever they
     are in the URL (should handle TARGET-style links and the mess a
     lot of HTML editors/processors produce). Doubled the length of the
     ACTION address string to cope with verbose search engine addresses
     and increased the length of the built-in search engine driver's
     searchterm string to 32 chrs. Added some special character encoding
     for text strings which are being sent to servers (the search engine
     driver will also use this).

-= version 2.1 =-

8b.  Added a command line option  (-t) to suppress the Status line
     elapsed time seconds display (to silence screen readers).
8c.  Changed the code for status and session line colours so that the
     text colours are not forced into high brightness, except for white
     on black (which is assumed to be for a mono screen).
18m. Added up/down arrows for link skipping.
     Added a ~\download directory. Initially, only used by Browse as an
     alternative to using the cache dir for all web collections. A new
     HTTPOPT option, usecache, to control it:
	usecache on  = as before, everything in cache dir
	usecache off = webpages into ~\cache, the rest into ~\download.
     Directory could be used for FTP as well ?
2f.  FTP quit command no longer pauses before it exits.
8d.  Added a config for the status lines (-cnces), where n enables the
     name, c enables the clock, e enables the elapsed timer, s enables
     the socket info.
     Added a choice of three throughput figures:
	mstat 2 = total data through the interface (original).
	mstat 22 = instantaneous cps throughput.
	mstat 222 = both figures in one display.
     *** these are experimental ***
18n. Rethought the download dir and dumped it. Usecache now swaps
     between the cache dir and the current working directory.
1a.  Added a configurable command length logged into the history.
     history [<n>] [<-x>] - n = recall size, x = min length logged.
     default 10, 1.
8e.  Added bps to the mstat 3 display and, as an experiment, made the
     NNTP trace 3 bps figures output in the command session only.
     *** these are experimental ***
8f.  mstat 2 and 22 retained, 222 and 33 dumped to be replaced by a
     new mstat 4 which displays news figures (running and total) along
     with news bps and interface bps.
1b.  Compiled a hybrid status-line free version which ought to be more
     friendly to screen readers, with the bonus of working with ANSI and
     VT102 TSRs since it used standard output functions for the
     scrolling display, while retaining the direct write display for
     View and Browse.
     Looks OK, so ifdef'd it and made it part of the regular codebase.
22u. Put the webpage suffix strings into a structure to easy updating.
18o. Increased the length of header strings which can be processed to
     192 to cope with the length of the redirection links. First try at
     automatic redirection - handles full URLs, root relative and file
     relative, but not ../file or even ../../file etc, mainly because
     I've never seen one.
18p. Crude authentication code added to make use of the the URL form
     userid:password@www.somewhere.com. Single realm only. Made the
     highlighting consistent - all highlights are now black on cyan.
     Added 301 (permanent moved) to 302 (temporary moved) for the
     redirection code.
     first step in cookie handling - logging only so far.
12b. Added a beep parm to the PPP idle options which just sounds an
     alarm after the idle timeout expires. PPP is *not* dropped.
     Added alarm to "line down" message. Both 500 Hz for 1 second.
22v. Added the blue highlighting for complete lines holding selected
     links from the offline browse. Httpopt highlight on/off controls
     it.

-= version 2.2 =-

	Rev a
22w. Had a go at sorting out the long-standing bug of orphaned
     sockets after spawning more than one FTP/TELNET session by
     spoofing a Command session origin for the new sessions.

	Rev b

33.  Added an option (l) to the socket command to generate a very
     brief display which is intended to give the users of screen
     readers an easier time since the plethora of numbers is often
     not required.
24h. Added two levels to POP3 verbose mode. 0 = off, 1 = delivery
     and 2 gives the lot.
24i. Increased to three levels:- 0 = off, 1 = initial poll message,
     2 = mail by mail delivery message and 3 = the lot.

	Rev c

32d. Force display of news articles available message in the VI version.
34.  Added an option for a very abbreviated ASYSTAT display.
32e. Added control of GROUP/STAT with a newnews command. 0 = newnews
     only, 1 = newnews then GROUP/STAT, 2 = GROUP/STAT only.
34a. Apparently, although the abbreviated ASYSTAT is fine under DOS, it
     blows up under W95. Recoded, slightly, a la Phil Karn, but
     basically I don't see what difference it'll make. Apparently, it
     was a red herring :(
22x. Reworked the spawnFTP code to handle links which don't pass a
     filename, but do have directories.

	Rev d

22y. Added dynamic history logging so that the arrow keys step over the
     history of pages *viewed*, not in the order they were collected.
     The history of viewed pages is twice the size of the saved ones.

	Rev e
  
2g.  Added an rget command in an attempt to resume failed get commands.
     It works (on Unix-based servers, anyway).
32f. Made the newnews "fudge factor" timing configurable using the
     newnews command.

	Rev f

12c  Changed the up/down scripts to accept any negotiated address as
     the trigger if the scripts file has a line with "negotiated" for
     the address, eg:
	  negotiated start finish.
     The first match runs, so if you use specific addresses to run
     different scripts, make the negotiated line the last one.
18q. Reworked URL parsing to allow for full pathnames, inc disks !
32g. Added a beep to the summary message for the VI version.

	Rev g

18r. Had a more serious go at cookies so that the latest replaces any
     earlier versions. Dropped in the return code which is *very* crude
     - it sends *all* the cookies which match the site/path criteria.
     No expiry done at all, but an offline util cleans the cookie file
     of unwanted cookies and expires the rest.
     A cookies httpopt controls all this:
	httpopt cookies 0 = ignore them completely
		        1 = log them
		        2 = log and return them
     Reworked the redirection code to eliminate a loop :(

	Rev h

22z. Added a beep to the highlighted link wrap for the VI version.
     Made all the inactive text white in the VI version. Added an
     option to do the same in the offline version.
2h.  Tidied up the FTP scripting so that a script with a "quit"
     command doesn't leave the file open when the session ends.
9c.  Added a check to make sure that view only runs in its calling
     session.
1a.  Added a filter to the history logging/recall to limit its action
     to the command and FTP sessions.
 
	Rev i

18s. Updated the spoof string to shout Netscape 4 since it appears that
     some sites sneer at Netscape 2 as much as they do at YAN !  I know
     it's hard to believe that anybody sneers at YAN, but there's no
     accounting for ignorance :)
22A. Flashed up the FORMs display with the prefix character reflecting
     the type of field displayed and 'x' indicating when a button is on.
     Didn't like it, apart from the buttoms. Tagged fields with words
     when values either not specified or not displayed.
20a. Added an editor option which shells out and lauches an editor with
     whatever file you gave as a parm in it. The editor needs to be
     fairly efficient at handling memory.
     Shell can also take a program name and parm so running a mailer
     online is a possibility.
     While I was about it, I reworked the shell code and it now reports
     non-zero return codes.
     The drive is now logged prior to shelling and reset on return so
     the setup should be unaffected by drive changes made while shelled
     out.
     
	Rev j

27a. Stuck in the alloc.c code from JNOS which attempts to reclaim
     surplus heap space back to main DOS memory. This ought to make
     shell a far more viable option since main memory is its thing.
25d. Breathed on telnet so that the arrow keys are honoured. Dumped
     the old Ctrl- sequences.
22B. Increased the maximum number of forms per screen and form inputs
     to 8 and 96.
     Reworked the text display to go to the limit of line width and
     added a last ditch line wrap to the preformated text where it
     goes over that limit. It's a mess, but at least it's all there.
     Made some attempt at eliminating gratuitous space.

	Rev k

22C. Stripped out the blue line highlighting and added a scrollable
     cursor (controlled by Ctrl+ and Ctrl+) for the VI version.
     The cursor is always visible, defaulting to the top LH corner.
     Offline version brought into line.
18t. Added sound to HTTP completion for the VI version and, at long
     last, fixed the POST redirection bug. while I was doing that I
     had a go at the solitary slash one as well.
22D. Changed the page/file logic to treat relative links lacking
     either a suffix or a slash as a webpage.
     Added DT (definition term) to the HTML tags honoured.
     Minor reworking of the entity logic. Them pesky free &'s again.
9d.  Modified view to allow scrollable cursor and pull line under
     cursor ready for menued ftp GET and CD.
2i.  Prototype menu command code added to ftpcli to display a remote
     directory and provide a litebar to select a line. It's pretty
     rough and may be showing the limitations of View.

	Rev l

2j.  Moved the menu command on a bit with surgery to recvfile, getsub,
     the things which call them and viewer - it'll fetch files and
     change directory, both directly or through a link entry.
     Amazingly, it appears to work...
     Added a crude display shifter to filter out as much of the initial
     garbage as desired. Logically, if the menu, now called xview to
     allow single key start, proves to be a winner, this will need to be
     saved across Viewer sessions and probably preset with and ftpopt.
2k.  It looks as if the shifting isn't going to be presetable, so the
     best I can think of is to make it change to just displaying the
     file, directory and link names at the press of a key and then shift
     to see any further detail.
     As it stands, '+' does the file-only shift, with <- and -> doing
     one-column-at-a-time shift.
     Whatever, it'll keep the shift across sessions, but isn't preset.
 
	Rev m

2l.  Added an "interval" ftpopt to set the interval between calculations
     for the bytecount progress display. This is a test to find a way of
     making the progress display less busy. The alternative is to make
     the size increment variable (easier, but the time frequency of
     calculation will vary with rate which may even be a plus :).
9e.  Modifed the action of the up/down arrows - in plain View they move
     the display window, but if called from FTP's xview they move the
     lightbar. It's a bit inconsistent, but somehow more natural !
18u. Greatly increased the cookie string allocations and, hopefully,
     made them simpler - buffers and string builds are set by INBUFSIZ
     (1024) and the cookie itself with COOKIESTR (256).
2m.  Added the option to xview of using time sorted directory listings.
9f.  Rewrote the whole bloody thing to allow for spaces in names and
     very long lines, but there may still be a problem since files are
     saved under their full name and the DOS-truncated version will
     need to be valid.
22E. changed the default action for FTP links without filenames to
     launch Xview automatically.

	Rev n

2n.  Added code to suppress the progress messages for directory changes
     and list fetching for xview. Changed the list colour from gray to
     brown. It may not be better, but it's different.
9g.  Recoded to remove snow when moving the litebar at the expense of
     major flicker when the eof is hit and several lines are backed up.
     Colour changed again, to cyan !
35.  Added autologging parm to Hop Check, a la Finger, but without the
     nopause option.
36.  Added autologging parm to Domain Query, a la Hop Check.
37.  Added autologging parm to Ping, a la Hop Check.
26b. Removed the no-pause from the end of finger even when the nopause
     option was used. Experimental.
2o.  Rejigged Xview to use an ftopt (xshort), which controls the
     default format (on = directory lists in short form :) and four
     optional command line switches. Made the + key a toggle between
     long and short formats. Killed off the left/right arrows keys for
     display shifting, but reused the left arrow for a .. directory
     change.

	Rev o

2p.  Recoded the Xview directory command to cope with those brain-dead
     sites which can't handle parameters with the ls command. Now uses
     list instead of ls.
38.  Cobbled together a makefile for a 386 CPU target. It compiles OK,
     the output is a bit smaller and, on my hardware, a bit quicker,
     but whether it was worth the effort I dunno. Still, it brings us
     into the eighties :) Currently, only 8086 and 80386 are provided
     for.
20b. Added a check for when shelled when multitasking so that command
     session output doesn't bleed into the DOS session. It *ought* to
     work, but the first bloody character still gets through :(
38a. Recoded some of the ASM stuff to make the 386 compile stable, ie
     stop abending when shelling :(
     Added a check for AT hardware in 8086 compiles, but made isat=on
     the default for 386 compiles.
39.  Added wildcards to the delete command.

	Rev p

2q.  Added a check to Xview so that if the file already exists it's
     assumed to need an rget instead of a get and and an rget is
     attempted.
20c. Rethought the code for shelling to DOS and all command session
     output is now completely suspended when shelled.
2r.  Added a check for a valid DOS local name being formed from the
     remote filename. If not, a new name can be entered.
2s.  Added a query whether to resume or not. Alternatively a new name
     can be entered. 
2t.  Added a check to see if a new name entered is already on the disk
     and if so, query whether to resume or not. Alternatively yet
     another name can be entered, but this isn't checked :)
18v. Reworked the redirection code for non-root relative locations. It
     now works where the old version didn't...
2u.  Tightened the code for getting responses and, since they do it the
     same way, did the same for browse and httpcli.

	Rev q

2v.  Upped the filename length to 125 characters. Any more and we're
     screwed and even at this level *reading* the name is a laugh :(
22F. Added the ability to pick up a redirection URL when it's provided
     inside a META statement since this is an increasingly common way
     of doing redirection. Why is a bloody mystery.
14a. Made IBUFSIZE conditional on what type of interface is compiled,
     2048 for PACKET and 256 for PPP/SLIP.
2w.  Added abort option (null entry) to resume dialogue.
22G. Added mailto: to the URLs handled. It uses an external mail program
     which (a) is called "mail" and (b) takes the address as a parm. At
     the moment the program used is my MAIL micro-mailer. This currently
     comes in two flavours - one written in PB which includes an editor
     and which needs very little memory (about 56k) and one in C which
     uses the editor of your choice and very much more memory, mainly
     because of the second spawning. In time, either a more efficient
     spawn function might be added to the C version or a better
     editor/mailer may appear if I, or somebody else, can be bothered
     to write it. Any *small* editor C source available ?
20d. Changed the default Editor from X to Q because Qedit is both better
     and more common.
22H. Added some location code for the mail program so that it can be
     found from any cwd. As it stands, the default MAIL program is
     assumed to be in the cwd, but if the MAILER environmental variable
     is set then it will be used instead.
29e. Added short form display.
2x.  Added beeps to download completion in the VI version.

	Rev r

40.  Added a Mail command using the same technique and program as used
     for the mailto: links in Browse and the Editor command.
18w. Added code to allow for a filename to be entered if the one from
     the server can't be opened, if say, it's a LFN and is invalid after
     truncation. Full path will be added if %s is in the new name,
     eg %s/newname.ext, but maybe acting on usecache would be better.
22I. Added access control FTP URL decode for the standard format of
     userid:password@site URL.
22J. Removed the wrap at EOF so that it just stops at EOF and can be
     paged back up the file which, if small enough, wraps at BOF ! This
     also revealed a stupid bit of coding :(
22K. Reworked the FTP script so that while a file fetch closes the FTP
     session, the others will just fire up Xview and leave it at that.
22L. Added a (k)eep command to save the current page under it's server
     name if possible, or a provided name if not.

	Rev s
