Changes made to 1.10g to yield version 1.10h:

cmdshelp.zip			More files added.  Others corrected.

nntpserv.c			Move pwait(NULL) to inner loop. Fix ihave bug.
				Handle smtp->nntp when no subject is given.
				Add NntpUsers counter.

mboxmail.c			Test linemode for Send? prompt method.
				Multi-column Areas listing.  Add FBBFWD code.
				Reject invalid send cmds.

mboxcmd.c			Remember XP setting in users.dat.  Add FBBFWD
				code.  Add MB RESET cmd.  Make dombpast()
				externally callable.

mailbox.c			Xpert prompt now contains current msg #.
				Handle incoming NUL and IAC better.

mailbox.h			Add FBBFWD code.  Ask AX.25 users for passwords
				if AX25PASSWORD is defined.

at.c				Handle properly: at mm "cmd args+"

main.c				Tail cmd path arg now relative to current dir.
				Fix false positive in newfopen device test.
				Process -g[012] option if TRACE #defined.
				Add RemoveNntpLocks() call.

session.c			Added 'session # split on|off' command.

makefile			emmlibl.lib now distributed as emmlib.bil.

telnet.c			Accommodate uppercase BBS cmd.

*.asm				change asmglobal.h to asmgloba.h
twin_at.c			change devparams.h to devparam.h

pop2serv.c, usock.h		Handle long lines as does pop3serv.
				Add PopUsers counter.

pop3serv.c, pop3cli.c		Add PopUsers counter.

nr4mail.c			Fix ttylink server invocation.

dialer.c			Improved error cleanup.

rspf.c				Fix for hearing own RRH bcsts, and non-manual
                                route.
ipcmd.c				Fix to detect automatically-added RSPF routes.
				Added IP ENCAP [4|94] command.

ipdump.c, config.c,		Added support for variable ENCAP PID.
internet.h, iproute.c

axheard.c, ax25cmd.c		Fix to sync hsize changes with mem allocs.

lapb.c				Fixes for zero-len I frames from ROSE switches.

forward.c			Accommodate uucp-style addresses.  Add
				lots of FBBFWD code.  Improve Message-ID to
				bid translation. Allow time-differentiated entries
				for same host in forward.bbs.

trace.c				Add ANSI color sequences to console trace.

bmutil.c			Add FBBFWD code.

version.c			Add FBBFWD code.  Display WHOFOR if defined.

config.h			Add AX25PASSWORD, FBBFWD defines.

files.c, files.h		Add protocol-specific default access
ftpserv.c, convers.c,		permission check, augmenting univperm.
mailbox.c, ppppap.c

pc.c				Fix EMS memory leak.  Display NNTP, POP user
				counts in status line.

mbuf.c				Add Imaxrq which remembers largest ibuf needed.

smtpcli.c			Prevent infinite loop in 'smtp list' cmd.
				Add SmtpUsers counter.  No LZW attempt if local
				delivery.

smtpserv.c			Add SmtpUsers counter.

nntpcli.c			Eliminate tmpfile leak. Add NntpUsers counter.
                                Handle newsgroup names ending in an asterisk.

expire.c			Add RemoveNntpLocks() routine.

qrz.c				Eliminate open file leak.

fingerd.c			Reference dombstatus() iff MAILBOX defined.
				Add mpast and aheard fingers.

asy.c, slip.h,slip.c		Added "c" attach option for KISS with cksum.

i8250.c				Eliminate "invalid free" errs during detach.

bmutil.c, index.c, mboxmail.c	Add setvbuf() calls to expedite i/o.
====================================================================
I changed nntpserv.c check_article() to put a pwait(NULL) call inside
the for loop rather than just after the loop.  Tnx Brent WY6S.
I also added Tomi OH2BNS' code to fix ihave and Lines: header bugs.
Mat DL1BJL fixed a problem where incoming SMTP msgs without Subject:
lines were being mishandled.

I corrected dosend() in mboxmail.c to test for char-at-a-time mode before
sending the "Send(N=no)?" prompt.  Also changed mboxcmd.c to remember the
last XP setting.    Code from Mat DL1BJL.  I added a test for illegal
Sx commands, where x is not in " BPTCFR".
doarea() in mboxmail.c changed to list areas in multi-column format, by
Ron, WA7TAS.  I added Jack KF5MG's changes to support FBBFWD handling.

I changed doat() in at.c to handle differently the case of MM mins after
the hour, especially needed when the recursion flag "+" is used after the
command.  Otherwise the command could run multiple times instead of once
each hour.  This still needs a little work, as we still get (admittedly
fewer) multiple executions.

dotail() in main.c changed to make the provided filename relative to current
dir, by WA7TAS.  Of course, if it begins with a '/' or contains a ':' it
is taken as an absolute path.  Also fixed a problem in newfopen's test
for reserved file names.  Thanks to Mark, VE3DTE.
I removed the lost timer-tick test in dostatus(); time() doesn't provide an
independent measurement, and rdate() can further confuse things.  The code
was wrong anyhow.  Uptime is now displayed via tformat().  Trailing dot
removed from hostname (thanks Selcuk & G8FSL).  I also added a call to
RemoveNntpLocks() unless the -l option was given.  Should help clean up after
a crash during an NNTP transfer.  The code for RemoveNntpLocks was placed in
expire.c.  I changed the Jnos start and stop msgs in the log to include
the version number and WHOFOR string (if defined).

I also added Jan PE1DGZ's code to parse the -gN trace-color option (when TRACE
is #defined in config.h).  -g0 (the default) means to not use any ANSI
color sequences.  This is suitable for black and white monitors, and for
users not using ANSI.SYS or its variants.  -g1 means to use the bold attribute
for the trace-header of sent frames, and to use an intensity just below white,
for the data portions of frames.  This is suitable for monochrome displays
that map colors to intensities.  -g2 means to use red for sent frame trace-
headers, green for received frame trace-headers, and cyan for the data portion
of all frames.  If the trace is directed to a file, no ANSI sequences are
generated.

I added code in session.c from N2RJT to implement 'session # split on|off'.
This enables or disables the split-screen capability of a session, where
keyed lines are displayed in a small window at the screen bottom, and incoming
data are displayed at the screen top.

I renamed emmlibl.lib to emmlibl.bil, and changed the makefile to copy
it to emmlibl.lib so as to recover from the common problem of deleting *.lib!
Thanks to Ron N8FOW for the idea.

I fixed dotelnet() in telnet.c to accommodate uppercase BBS/TELNET/TTYLINK
commands.

Kurt, WB5BBW pointed out that BC3.1 under OS/2 (DOS VDM) doesn't grok
"include asmglobal.h" since the file is actually named asmgloba.h.
I changed all the .asm src to reference the file as 'asmgloba.h'.
Similarly, in the makefile and in twin_at.c I changed devparams.h to
devparam.h.

Per Mat DL1BJL's suggestion, the Xpert prompt was changed in mailbox.c to
contain the current message number.  I also added Jack KF5MG's FBBFWD code,
as well as his code to ask and validate passwords from AX.25 users (if
AX25PASSWORD was defined in config.h).   Certain garbage chars (NUL, IAC)
present in FBB-forwarded msgs were causing a forwarding deadlock.  I changed
mbxrecvline() per Tomi OH2BNS's idea to accept telnet options only when
appropriate to the type of link, and to strip NULs.

pop2serv.c and usock.h changed to properly accommodate long lines, as
does pop3serv, by Ralph KD1SM.

Thanks to Mike IW1CFL for code fix for ttylink invocation in nr4mail.c.

Applied dialer.c fix to cleanup after errors, from Mike N1BEE.

I put Mike N8RAW's fix into rspf.c for the case where we hear our own bcst.
Also added IT9LTA's fix for proper non-manually-added route test in ipcmd.c
dumproute(), and in rspf.c rspfmain() to flag a non-manually-added route.

Joe K5JB provided fixes to axheard.c and ax25cmd.c to keep a true count
of allocated mem when ax25 hsize, and ax25 flush, commands are used.

K5JB also provided two changes for lapb.c:
In procdata() a test for zero length information frames is added.  They are
common from ROSE switches.  They are supposed to be acknowledged but not
acted on, since otherwise when received by JNOS they can spawn an unwanted
mailbox session.
In lapb_input(), during ax25 link setup, if the UA frame from the other
station is missed, and an I frame with poll bit set, or poll RR frame is
received, JNOS formerly sent a DM.  Joe changed the code to ignore frames
with the poll bit set, citing AX.25 protocol paragraph 2.4.3.1:
"The DXE sending a SABM command will ignore and discard any frames except
SABM, DISC, UA, and DM frames from the other DXE."

I applied Mat DL1BJL's changes to forward.c so that messages that arrived
via UUCP (or otherwise have !-style from and to paths) are parsed correctly.
I made a slight change would allow multiple entries for the same host
in forward.bbs, each presumed to be for different time ranges.  This is
probably worthwhile despite the risk of a race where a connection is made
based on one entry, and then the time test after the connection is established
leads to using a second entry for determining which areas to forward.

Also, lots of code from Jack KF5MG was added (if FBBFWD is defined) to
forward.c to bundle up to 5 messages when forwarding to an FBB bbs (determined
by an "F" in its mbox ID string).  There is NO compression involved (yet).
You may need to find more memory (;-) if you encounter problems with FBBFWD.
Also, additional logging is enabled if FBBVERBOSELOG is #defined.
Note: we are seeing memory fragmentation or perhaps a small memory leak prevent
the return of freed memory back to MSDOS.  This means that eventually you
can't shell out.  Fixes are welcome, hi hi.  FDDFWD is thus a PRELIMINARY
release with more to come.

In makecl() (still forward.c) I inserted code inspired by KF5MG, to map
Message-Ids from SMTP msgs, into bids for forwarding.  This should cure the
problems experienced with the PINE mailer (which likes to generate very
long message-ids) since a CRC is derived from the id and used as the bid.

Jack KF5MG's code added to bmutil.c to accommodate FBBFWD.
Same for version.c.

I added the display of the WHOFOR string, if defined, by the info command,
or by the status command if info is not configured.  version.c and main.c.
This taken from PSINOS.  One would typically define WHOFOR in config.h.
Example:   #define WHOFOR "PGW switch"

I added N2RJT/PSINOS-inspired protocol-dependent default access permissions.
Affected were userlogin() in files.c), and all invocations of userlogin() in
ftpserv.c, convers.c, mailbox.c, and ppppap.c.  The permission name has
higher precedence than "univperm".  The names are:
	tcpperm - telnet login to mailbox
	ax25perm - ax.25 login to mailbox
	nrperm - netrom login to mailbox
	confperm - convers signin
	pppperm - PPP's call to userlogin
	ftpperm - ftp login
	tipperm - tip login to mailbox

In convers.c I removed the setflush(cp->fd, -1) call, since Mark VE3DTE
and others report lossage.  Perhaps someone's KISS can't handle long packets?
This change will yield a flush at each line of output from the converse cmds.

I added dombreset() to mboxcmd.c, inspired by N2RJT/PSINOS.  This permits
mailbox users to be disconnected by the sysop MB RESET <id-list> cmd.
MB RESET without arguments lists all mailbox users by userid.  Also fixed
#ifdefs to make 'mb newmail' available even when AX25 is undefined (thanks,
Selcuk).

freescreen() in pc.c fixed to free EMS memory (by K5JB).
usputs() in sockuser.c fixed to not duplicate output to look sessions (by K5JB).

I added code from Andrew G8FSL to remember and display the largest interrupt
buffer requested (in mbuf.c alloc_mbuf() and iqstat()) so that the memory status
command will provide enough data to set ibufsize and intqlen optimally.
Andrew writes about 'mem stat':
  "Imaxrq" is the size of the largest request made of the interrupt buffers.
  If "Imaxrq" is much less than "Ibufsize" (after several hours of running),
  then it is likely that "Ibufsize" is too large. If "Ibuffail" is non-zero,
  if "Iminfree" is zero then "Intqlen" is too small, but if "Iminfree" is
  non-zero then "Ibufsize" is too small and "Imaxrq" indicates how large
  "Ibufsize" needs to be made.

In smtpcli.c dosmtplist() would loop forever if it got an error opening
a .wrk file.  Fixed to just bypass it.  Probably only happens when file
handles are exhausted.  I added a check to avoid attempting LZW if the
delivery is local (tnx KF5MG for the idea).

I found in nntpcli.c getarticle() would leave a tmpfile opened when
it found a newsgroup was locked.  Eventually this would cause all file
handles to be used, so logins would be refused (as the ftpusers file
couldn't be opened).  Thanks to Richard KB7RMU for pointing out that
newsgroup names ending with '*' were ignored ... now fixed.

I added fclose(fp) commands to qrz.c to eliminate open-file leaks, which
would occur only if there were errors accessing the CDROM.

I applied Ralph, KD1SM's mods to pc.c, pop[23]{cli,serv}.c, smtp{cli,serv}.c
and nntp{cli,serv}.c to count concurrent invocations and display on the
top status line.  Zero counters are not displayed.

In fingerd.c I changed the reference to dombstatus() to be made only
if MAILBOX were defined, since this is a prerequisite.  I added mpast
and aheard fingers, from PSINOS.

I applied Tomi OH2BNS's mods to asy.c, slip.h and slip.c to permit using
BPQ-style checksums on KISS ports.  When POLLEDKISS is #defined, a kiss
attach will accept a "c" option to generate and check a checksum byte on
each packet, eg, attach asy 0x3f8 4 ax25 tnc 2048 1024 9600 c
The corresponding BPQ option is KISSOPTIONS=CHECKSUM.

I modified ipdump.c, iproute.c, ipcmd.c, internet.h, and  config.c to
use a variable PID to indicate IP-IP encapsulation.  Choices are 4 or 94,
with 4 being the preferred value.  The EncapPID is set or displayed by
the IP ENCAP command.  The default remains 94, but at some future date
we can switch to using the new value of 4.  JNOS versions prior to 1.10G
will only accept a PID of 94, and should be upgraded!  If you are behind
an Internet firewall, changing from 94 may present a problem.  Please
send your comments to nos-bbs@hydra.carleton.ca.  The ip encap cmd was
adapted from Doug WA3DSP's 1.08dff jnos code.

Based on a comment by Mike N1BEE, I added setvbuf() calls to closenotes() in
bmutil.c, IndexFile() in index.c and to msgidcheck() in mboxmail.c.  Since
the default buffer is 512 bytes, I picked 2048 bytes to enhance performance
when a disk cache program is not used.  At least, I hope it's an improvement!

In i8250.c asy_stop() I eliminated a race to terminate the monitor proc,
which was yielding invalid free() errors in killproc.

