0.90    First release

0.91    Provide one extra connection so that lpq requests can get
	through and return status. Lprm requests fail; they make no
	sense.

	Display IP address of client.

	Rudimentary security. Server and client must both be on same
	subnet. Can be disabled with -s option.

	More security; allow and deny IP lists.

	Distribution includes lpr.pl for the ifilter and banner.pl for
	the ofilter on Berkeley LPD systems.

	Announce available printers with tones: C,D,E

0.92    More information on lpq status: on/offline, paper out.

	Option -n to override number of printers reported by BIOS.

	Option -lhostip logs startup message and status changes to
	syslogd on host.

	Fixed bug in lpr.pl. Was sending out data file again as control
	file. Remnants of test implementation. Made lpr.pl unworkable
	with standard LPDs and also wasted channel capacity.

0.93    Report jobname, username and hostname on completion of job.

	Use name resolution so names can be specified for -a, -d and
	-l.

0.94    Conformance to RFC1179. Control and data files in either
	order.  Use N for jobname rather than J. Limits on username and
	hostname now conform to RFC. Jobname truncated to 31 chars
	though.

	Respond to long query request as for short query.

	Changes to lpr.pl to match. Try to use ports 721 to 731
	inclusive.  Naming conventions for data and control files as
	RFC.

0.95    Add -j option to select direct (telnet-like) protocol. Just
	a raw byte stream, ended by closing the connection. On port
	9100+n (n=0,1,2) by default.

	Provided jd.pl to send data by direct protocol.

	Fixed harmless comparison operator bugs in lpr.pl.

	Fixed bug in lpr.pl where control and data were using same
	count of bytes because same variable was used.

	Improved buffering strategy: if printer is busy, keep
	collecting data as long as there is room in buffer. Allows
	clients that send small packets to continue sending without
	being blocked by printer handshake.

0.96	Fixed bug where server closed connection before printing everything
	in direct mode. Doesn't happen in lpd mode because of handshake.

	Forgot to provide jd.pl in last release.

	New program jd.exe, a DOS client for direct protocol.

	Use DOS LPT to COM redirection in conjunction with TSRCOMM,
	an interrupt I/O serial driver. See documentation in LPTCOM.ZIP.

	Provided documentation in pprd.doc and jd.doc.

0.97	Added -i option to pprd to reinitialise printer via hardware line
	when job aborted via C-Fn keys.

	Send a reset via sock_abort when job cancelled from console so
	that client will receive notification of a broken connection.
	Lpr.pl and jd.pl changed to take note of this.

	New program jdlprd.pl for Unix systems to provide a jd to lpr
	gateway so jd.exe can send jobs to Unix also.

	Harmless typo in jd.pl.

	No need to call tcp_shutdown() in jd.c. It will be done by
	atexit().

0.98	Bug in pprd.c. Under some circumstances, PPRD may miss a EOF
	from the client, leaving it stuck in the protocol.

	Bug on lpr.pl. Forgot to adjust length to send EOF byte too.

	New feature. Printers can be assigned names in wattcp.cfg.
	Defaults are lpt[123].

0.99    For printing via BIOS, interface will not be ready after the
	print call, so check again. Should be able to batch the
	bytes better.

	Direct write to hardware port can be selected by -b. Should
	be able to handle fast interfaces better than BIOS. Won't
	make much difference with slow printers because the bottleneck
	is the printer in that case.

	Moved most operation instructions out of README.  Documentation
	in nroff format. Printable version supplied.

1.00	Final version.

	Tweak printer status checking in loop.

	Print out statistics at end of job.

1.01	Bug fix

	Steve Pacenka discovered that ack not sent at end of job.

1.95	New cycle

	Try to improve buffering strategy and memory usage, so:
	Circular buffer instead of fill/empty strategy.
	Compile in compact memory model to use far heap.
	Allocate larger buffers from far heap.

	Put under Artistic License instead of GNU Copyleft because
	of disgust with RMS's tasteless handing of Lignux affair.

1.96	Bug in buffer size tracking. Macros would fail if < 63k allocated.

	Do status polling right when using BIOS printing routines.

	Institute a turn counter for fairness between reading and writing.

	Implement joblen == 0 means EOF == EOJ for lpd protocol. Not tested.

1.97	Adaptive task scheduling, give reader/writer a turn for every 1/8th
	of the buffer empty/full.

	Limit BIOS printer output to 2048 bytes at a time to prevent
	printer from hogging schedule.

1.98	Made memory debugging display a command line option

	Added option to skip printing, just to show transfer stats

	Add checked tcp_tick call to WAITING state, otherwise a quick
	connect and exit hangs the channel.

	Added hack to jd.pl to wait for server to be ready again before
	exiting, or it will fail to connect on next job while current one
	is printing.

	Skip printing stats if connection closed without any data transfer.
	Also if connection closed with NAK.

1.99	Added 1 second delay between sock_flush and sock_close to cater
	to TCP/IP stacks and clients that can't handle a connection close
	too soon after final data. The problem client: pmlpr on top of
	MS tcp32b. Not sure which one is the guilty party. Maybe other
	clients too. (Gee I never get such problems with decent clients
	like Unix lprs, or even the DOS lprs.)

	Implemented suggestions from Scott Brynen: flag to output
	to console for testing. Arguments to -a and -d can be network
	addresses, where the hostid part, as determined using the netmask,
	is all 0.

	Abort the job if sender disconnects.  Some clients don't handle
	this properly, in this case DOS lprs.  Unix lpr works fine.

	Use getopt instead of doing argument parsing ourselves. Side
	effect, -j requires an argument now.

2.00	Link with library built from wat9609 which has some bug fixes.
	Seems to improve TCP transfer rates a bit.
