Date: Fri, 26 Aug 1994 13:34:29 -0500
From: Dugal James P. <jpd@usl.edu>
To: nos-bbs@hydra.carleton.ca
Subject: JNOS 1.10G released

I've placed JNOS 1.10g on several ftp sites today; what follows describes
the changes I made to 1.10f to yield 1.10g.  Thanks to all who contributed
code, constructive criticism, or their time to test new code.
Jnos 1.10g can be found on:
	PC.USL.EDU:/pub/ham/jnos
	FTP.UCSD.EDU:/hamradio/packet/tcpip/incoming
	FTP.ECE.ORST.EDU:/pub/ham/wg7j/incoming

James Dugal, N5KNX
jpd@usl.edu
26 Aug 1994

dirutil.c			handle MSDOS <drive_letter>:\ properly.
				Display free space remaining correctly.

nntpcli.c			fix group first-letter loss.  Avoid
				--more-- prompt for arrival notifications.
				Permit group name mapping. Disallow redundant
				kick.  Support LZW.  Compensate for GMT. 
				Add 'nntp firstpoll #days' cmd.

nntpserv.c			Eliminate infinite wait for history lock.
				Compensate for GMT.  Add 'nntp firstpoll #days'
				cmd and more pwait() calls.

bmutil.c			Remove .inf timestamp file when area is deleted.
				Prompt for input based on LINEMODE setting.
				Corrected display of an invalid msg number.

expire.c			Remove .inf timestamp file when area is deleted.

i8250.c,i8250.h			Put back 1.10c behaviour: don't require CTS.
				Add support for chained IRQs, a 6th serial
				port, and NRS-CTS protocol.

config.c, internet.h		Support encap RX using protocol code 4.

nrcmd.c				minor display formatting change.

pc.c				Eliminate confusion in session status line.
				Add MAIL msg to status line 1.

mailfor.c			Add unread-personal-mail feature.

ftpcli.c,ftpcli.h		Allow LZW compression for put, mput, and rput
				commands.  Disable LZW attempts after first
				XLZW request is rejected in a session, unless
				'reclzw on' is issued again.  Disable LZW
				attempts unless an ASCII (not image or logical)
				transfer is intended (since LZW is implemented
				only for ascii sockets).

ftpsubr.c			Prompt for input based on LINEMODE setting.

mboxmail.c			Prompt for input based on LINEMODE setting.
				Validate area name given by sysop.

mailbox.c,mailbox.h		Add XP mailbox command, to toggle LINEMODE
				flag.

smtpserv.c			"New mail for xxx" message is only displayed
				if SMTPTRACE is defined in config.h and
				Smtptrace value is non-zero.  If PRINTEROK
				is defined in config.h, mail written to a
				printer device is followed by a FormFeed, and
				no index file is written.  Bids found in
				non-dup msgs are now stored into the bid
				history file.  Timezone now checked for DST.

smtpcli.c			The Smtptrace value must now be > 1 to see
				any trace output from the smtp client.
				Increased smtp_send stack.

dialer.c			Accommodate 115200 baud.  Correct trace output.

asy.c				Accommodate 115200 baud in attach, and 'n'
				attach flag meaning NRS-CTS.

asy.h				Add asy5vec and permit a 6th serial port.

pcgen.asm			Add chained IRQ support.

asyvec.asm			Add chained IRQ support + a 6th serial port.

pop2cli.c, pop3cli.c		Eliminate "New mail arrived for..." msg if
				pop trace value set to zero.  Support LZW.

pop3serv.c			Support LZW.

mailcli.c			Add 'pop lzw on/off' cmd.

mboxcmds.txt			Add XP cmd description.

alloc.c				Refuse morecore requests > 32K.

main.c				Cleaner swap away from trace screen.
				Change DOS device test.  Improve help.

lzw.c				Added lzw trace cmd, showing LZW efficiency.

proc.h, ksubr.c			Make stkutil() externally callable.

files.c,file.h,nos.cfg		Added CmdHelpdir, defaulted to "/help".

ip.c				Test for packets with lost bytes.

ipcmd.c				Correct ip heard count when reusing oldest
				slot.

axheard.c			Correct heard count when reusing oldest slot.

look.c				Accept socket # for mailbox user specification.
=================

I fixed wildcardize() in dirutil.c to handle MSDOS <drive_letter>:\
often found in the ftpusers file.  This bug was causing the ftp DIR command
to not produce any output unless '*.*' was explicitly given.  I also
corrected some minor problems when dealing with CDROMS.  Notable is the
case where the normalize-path function returns \\H.\A. as a path to drive H.

I introduced a problem in 1.10f nntpcli.c for newsgroups NOT containing a
period. This is now fixed!  I also changed the news article arrival msg to
not incur the --more-- prompt halt for input, and (like smtp notifications),
to be displayed only if the console was in a command session.
Also, a newsgroup can be renamed locally, by using NNTP DIR old=new
Example:  nntp dir usl.maillist.tcp-group=tcp
          nntp dir rec.radio.amateur.=
Use old== to delete a mapping specification.  Mappings are examined in
the same order they were specified.
I found it was possible for nntp kick to create a second client process
connected to the same server.  Now fixed.  Also, an nntp timer is restarted
if jnos is unable to create an nntp client process when the timer matures.
LZW is also now supported, thanks to Ron, N8FOW.  If the client runs on GMT,
the NEWNEWS command is modified to reflect this.  Finally, the 'nntp firstpoll
#days' cmd was added, from Andrew G8FSL.  The initial poll to a new server
will ask for only #days worth of news, rather than all news since 1990.
The default is 5 days.

In bmutil.c and expire.c, I added code to delete the .inf timestamp
file when the area becomes empty and is deleted (if USERLOG is defined).
This would eliminate notification of areas having new msgs when they are
in fact empty.  I also changed several routines in bmutil.c to check
the linemode setting (toggled by XP) before trying to read a single
char from a telnetted user.  The user may ultimately be using ax.25 and
be incapable of returning a single char.  Anyone have an automatic solution?
I also corrected the display of an invalid msg #.

In mailbox.c I added the XP maibox command (toggles the LINEMODE flag;
default is off), and the charmode_ok() subroutine to test the flag and
connection type.  Then sendfile() in ftpsubr.c and dombmovemail() in
mboxmail.c were changed to call charmode_ok() before prompting for input.
I added area name validation to doarea() in mboxmail.c, so that the
sysop cannot provide an invalid name (that is likely to provoke the
repeated "Mail file busy.  Retry?" syndrome).

i8250.c no longer requires an input CTS signal.  This is a return to the
behaviour of Jnos 1.10c in this regard.  I merged the i8250.c from 1.10c
with 1.10f, so as to eliminate TX lockups with modems using CTS for flow
control.  I added support for a 6th serial port and chained IRQs, from
PA0GRI via N2RJT.  To indicate an interrupt vector is chained, suffix
the vector number with "_c" in the attach command.  The vector number
remains specified in HEX so as not to break any existing config files.
pcgen.asm and asyvec.asm were changed to support chained interrupts,
from PA0GRI and N2RJT.  NRS-CTS protocol was added, to support the NEDA
node-stack diode matrix, from WZ2B via N2RJT.

KA9Q noted that IP within IP encapsulation should be using IP protocol
code 4 instead of 94.  Jnos now accepts either value, but still generates
code 94.  A future version of JNOS should generate code 4, thereby obsoleting
Jnos versions prior to 1.10g.  Change made to config.c and internet.h.

In pc.c I changed StatusLine3() to dynamically access some session
variables, rather than relying on a static copy, and test return codes.
This seems to have cured the occasional trashing of a netrom session display.

I changed xfer_article2() in nntpserv.c to give up if it can't lock the
history file after trying a minute, based on Doug WA3DSP's comments.
A log message is written.  Also, an nntp timer is restarted if jnos is
unable to create an nntp client process when the timer matures.  I also
added support for the GMT keyword on the NEWNEWS command, both as a client
and a server.  Finally, I added G8FSL's 'nntp firstpoll #days' cmd, to
ask for only #days worth of news, rather than all news since 1990, in the
initial poll to a new server.  The default is 5 days.

ftpcli.c was lacking code to invoke LZW compression for put, mput and
rput commands, now fixed.  I also noticed that batching of ftp cmds was
not handled correctly if LZW was enabled, also fixed.  Thanks to I1VDM
for pointing out the LZW problem.  I changed the ftp client to abandon
lzw attempts after the first XLZW command is rejected.  No point in
seeing all those 500 Unknown Command messages after the first one.
But, if you really want to re-attempt lzw in the same session, issue a
'reclzw on' command.

Thanks to Jan, PE1DGZ for mailfor.c and pc.c modifications to show that
unread personal mail is waiting via the MAIL string on status line 1.
I added the 'mbox mailfor watch call_1 ... call_n' command to permit
specification of which mailboxes are to be checked.  To initiate this
feature, you must activate mailfor (eg, mbox mailfor 600) and set the
watch list (eg, mbox mailfor watch n5knx).  To remove the MAIL string,
first read the mailbox's last message, and then force the mailfor process
(eg, mbox mailfor now) or await the mailfor timer's maturation.
Note that the calls to be watched must not appear in /spool/areas!

In an attempt to provide a means of eliminating the "New mail for xxx"
message when desired, I changed smtpserv.c to display the message only
if Smtptrace were non-zero (eg, 1).  And, smtpcli.c was changed to do
no tracing unless the Smtptrace value were greater than 1.
If SMTPTRACE is not defined in config.h, neither module does tracing.
In keeping with this behaviour, pop2cli.c and pop3cli.c were changed
to eliminate the "New mail arrived for..." msg when the pop trace value
is zero.  To avoid a loop when mail can't be delivered locally, such as
to an offline/notready printer, or to a locked mailbox, the smtptick()
call was eliminated just before the smtpserv process exits.  We'll rely
instead on a retry when the smtp timer matures.
I also found a problem in smtpcli.c: when invoking retmail() to return
a message to sender, it could overflow the process stack, probably just when
LZW was compiled in.  I changed the stack size from 1024 to 1536 for
smtp_send(), and this seems to have eliminated the problem.
Dave, N9HKM, provided code to have smtp always save bids in the history
file when unique.  I was prompted by Geoff KE6QH to change smtpserv'c ptime()
routine to test for daylight savings time.  The problem is that Borland's
runtime probably doesn't change to/from DST at the same time as your
government decrees!  In this case, don't put a dst zone in your TZ variable.
 
I found that in asy.c, asy_attach() was passing the speed specification as
an int16 rather than a long, causing 115200 bps to be unrecognized.  Fixed.
A similar change was made in dialer.c for asy_speed() calls.  I added code
from WZ2B and N2RJT to check for the attach flag 'n' implying the NRS-CTS
protocol, in the case where NRS is #defined.  dialer.c's trace display
was corrected in many places.

I added code in alloc.c to disallow a morecore() request for more than 32767
bytes, per Andrew G8FSL.

main.c changed to delay swapscreen() until the Current session variable
is changed, to help prevent trace output appearing on non-trace screens.
Also, the test for opening a MSDOS device was not catching the case where
a device name was followed by a period, and perhaps an extension.  MSDOS
was all too happy to equate "/spool/mail/lpt1.txt" with LPT1.  BUT if
you #define PRINTEROK in config.h, then Jnos will allow opening a printer
for output if it is online and has no errors flagged.  Thus the sysop can
issue: copy filename lpt2 , or within the mailbox, type: MC 3 \dev\prn
A companion change was made in smtpserv.c.  If PRINTEROK is defined, and the
destination is actually a printer device file, a FormFeed separator is
issued and no index file update is attempted.
Ron N8FOW provided code to enhance dohelp() in main.c, that displays
files corresponding to Jnos commands, that are stored in "/help" by default.
You might wish to redefine CmdsHelpdir to "/spool/help/cmds", or some other
location, via nos.cfg.  Preliminary help files are provided in cmdshelp.zip.
Files.c, files.h and nos.cfg were similarly modified to define CmdsHelpdir.

lzw.c changed to allow lzw tracing.  If 'lzw trace' is nonzero, when a LZW
socket is closed, the compression statistics are displayed.

LZW support added to pop3cli.c and pop3serv.c (and mailcli.c).

I made stkutil() in ksubr.c externally callable, for example by kernel.c
when PROCLOG is defined (to spot processes with unsufficient stack space).

ip.c now checks for packets missing data bytes, per VE3DTE.
ipcmd.c now zeroes ip_heard count when reusing the oldest slot, per VE3DTE.
I made a similar change to axheard.c.

I changed look.c to allow specifying a mailbox user by socket number.
Previously, the callsign was required, contrary to docs.  Thanks to Greg,
KE4DPX, for pointing out the problem.
