Here is sort of an edit history for netcat, in forward cron order.

950915 or so
	basic gethostpoop and doconnect layout established
950920 or so
	timeout handlers, improvements to gethostpoop, read-stdin-args,
	primitive select loop, and later the stdin-to-many saved-count thing
950923
	select loop is firm, connect and i/o works nicely
	added listen mode
	crocked in UDP and debugged how its back-connect works
950927
	unsnarled main a fair amount
	got "udptest" working right
	added HELP!! yow.
951003
	added exec-a-prog thing
	cleaned up routine-header comments
	signal catcher
	close stdin when we won't need it  [-z, etc]
951004
	getportpoop
	inbound options hexdump finally works  [forgot to preload "size" int]
951005 or so
	added random mode, which necessitated more main() logic cleanups
951008
	hammered out exit-status stuff, final main() argv loop cleanup
	massive readme cleanup pre-1.00 release
951010
	almost-1.00 release up for FTP, but not announced yet
	added a couple of wrapper scripts
951012  -- 1.00
	nc100 RELEASE, mailing-list spam, etc etc
951021
	doc tweak per cgull
	webproxy/webrelay scripts came together.  fuckin' yow.
951023
	added indication of *local* address in dolisten() connect handling
	reset errno before dolisten msgs -- gethostpoop might have munged it
951028	-- 1.01
	fixed exit status if -z on a single port -- was -1, is now 0 or 1
	like it should be
951029
	put "sent/rcvd" typeout more places, still only if -v -v
	Doc fix: It's *David* Borman, not Paul  [aka Mr. Environment
	Variables, this month...]
951106	-- 1.02
	added h_errno strings and updated holler, gethostpoop to find them
	Still slightly confused if gethostpoop() returns prematurely...
951107
	sys/select.h for them what needs it
	wrote_txt and more calls to print sent/rcvd
951110
	try rnd-options, but setsockopt tosses them.  Punt...
	dumped "x.y" microtiming idea; seconds are granular enough for now
	tweaked help text
951113	-- 1.03
	added first-net-read skip to select loop if we have saved stdin, and
	moved retry-count test ahead of this.  Makes multimode work much more
	sensibly...
	fleshed out this here edit history
951204	-- 1.04
	fixed duplication lameness with printing h_errno stuff
951215
	improved data.c; added xfer count and %r
951217
	rservice.c, an answer to mudge's k-rad script
951227
	port data.c to msloss, it might be useful
	some doc slogging; particularly the telnet-wrapper idea
960120	-- 1.05
	give totals even if we ^C out [that's what sigcatchers are *for*!]
	cleaned up big LSRR explanation comment
960131	-- 1.06
	flushed rndoption stuff
	report of closing stdin fucking up Solaris.  Not tried yet.
	extra arg to rservice.c
	documentation updates, added netcat-art and many udder tings
	added Bela Lubkin's #ifdefs for SIGURG  [SCO rel 5]
	added ignoring SIGPIPE  [lesson learned from webs.c]
960201
	genned up some more data dumps: pmap-mnt.d, showmount.d,
	various others; into real tree
960217	-- 1.07
	finally fixed stdin-read-args thing to retain and send leftover data
	added version to help text
	made ascii-art cuter
	added "probe" script
	added Nextstep systype
	finally fixed data.c to run "forever"
	created xor.c
960223	-- 1.08
	if doconnect skt is 0 grab another one, don't dup(). [stupid solaris..]
	threw in latest web scripts
	threw in irc
	more doc tweaks
	stuck 1.08 prerelease up for FTP
960227
	hexdump in -- it's actually gonna be quite useful!
	doc adds for hexdump; orig idea from dgaudet@wired
960229	-- 1.09
	telnet-opts responder in; left as OPTIONAL chunk since it mucks
	with the data stream.
	-e disables -o hexdump; avoid zero-length file turds
960310	-- 1.09a goddamnit-I'm-gonna-release-REAL-soon
	made -e work outbound, too
	random final cleanups and doc updates ... pant pant ...
960320	-- 1.10
	RELEASE version tested everywhere I could get to, up for FTP
