regularexpression without pcre doesn't work right, create temp table in sqlrelay
	exposes it

implement semaphoreset::wait() with timeout for systems without semtimedop by
	using alarm()

directory class rewind/next/previous/end iterators

update programming docs!

SCO openserver -
	native CC doesn't support 64-bit integers
	gcc doesn't produce working code

SCO openunix -
	unistd.h isn't detected when using C++ because the test program
		thinks I'm trying to re-declare std::exit(int) rather than
		call exit(int)

get a mingw port working
	(can I use libgw32?)

--------------------------------------------------------------------------------

some systems need -pthread in CFLAGS, other's don't like it

netbsd-3.0 statvfs:
	f_flag
	f_bsize/f_frsize/f_iosize seperately
	f_bresvd
	f_fsidx

file descriptor passing doesn't work on openbsd, cygwin, possibly netbsd

--------------------------------------------------------------------------------

daemonprocess constructor initializes static members, this is lame and messy

document error.h
document shmfile class
document sleep class
document modem*/chat classes

document: cygwin needs "file" command to be able to build dll's

freebsd IPV6_V6ONLY??? socket option
sysctl on netbsd?

should be able to associate a zlib handle with a file descriptor and read/write
	compressed data, just like ssl

fix math class

a bunch of static methods can probably be inlined
	
probably can combine memorypool and variablebuffer classes

xml:
	should be able to validate an xml document against the dtd
	test invalid xml
	handle CDATA/internal subsets better
	xml classes need to support entities defined in the DOCTYPE declaration

file class:
	move create*Link/resolveSymbolicLink into link class

implement these classes:
	directorylisting
	link
	pipe
	tty
	pseudotty
	shellcommand
	system
	loginrecord
	messagequeue
	thread
	table (dynamic 2d array)
	generic parser/lexer classes, use them for xmlsax

tests for:
	intervaltimer
	dynamiclib
	math
	rawbuffer
	memorymap
	mutex
	serialportprofile

--------------------------------------------------------------------------------

modemutil
serialportutil
inetsocketutil
	- sockaddrin
	- addr
	- port
rawsocketutil
fileutil
unixsocketutil
	- sockaddrun
	- file
msgqueueutil
shmutil
fifoutil
pipeutil

filedescriptor
	- read()
	- write()
	- close()
	file : filedescriptor
		- open(filename,...)
		device : file
		serialport : file
		fifo : file
	pipe : filedescriptor
	client : filedescriptor
		- initialize(namevaluepairs *nvp)=0
		- connect=0
		modemclient : client, modemutil
			- initialize(namevaluepairs *nvp)=0
			- initialize(device,initstring,dialstring,...)
			- connect()
			- connect(device,initstring,dialstring,...)
		serialportclient : client, serialportutil
			- initialize(namevaluepairs *nvp)=0
			- initialize(device,...)
			- connect()
			- connect(device,...)
		socketclient : client
			- nonblock()
			protected:
				- connect(...,timeout)
			inetsocketclient : socketclient, inetsocketutil
				- initialize(namevaluepairs *nvp)=0
				- initialize(host,port,...)
				- connect()
				- connect(host,port,...)
			unixsocketclient : socketclient, unixsocketutil
				- initialize(namevaluepairs *nvp)=0
				- initialize(filename,...)
				- connect()
				- connect(filename,...)
			rawsocketclient : client, rawsocketutil
				- initialize(namevaluepairs *nvp)=0
				- initialize(???,...)
				- connect()
				- connect(???,...)
		fileclient  : client, fileutil
			- initialize(namevaluepairs *nvp)=0
			- initialize(filename,...)
			- connect()
			- connect(filename,...)
		msgqueueclient : client, msgqueueutil
			- initialize(namevaluepairs *nvp)=0
			- initialize(key,...)
			- connect()
			- connect(key,...)
		shmclient : client, shmutil
			- initialize(namevaluepairs *nvp)=0
			- initialize(key,...)
			- connect()
			- connect(key,...)
		fifoclient : client, fifoutil
			- initialize(namevaluepairs *nvp)=0
			- initialize(filename,...)
			- connect()
			- connect(filename,...)
		pipeclient : client, pipeutil
			- initialize(namevaluepairs *nvp)=0
			- initialize(???,...)
			- connect()
			- connect(???,...)
		...
	server : filedescriptor
		- bind()=0
		- listen()=0
		- filedescriptor *accept()=0
		modemserver: server, modemutil
			- initialize(device,initstring,...)
			- bind()
			- listen()
			- filedescriptor *accept()
			- listen(device,initstring,...)
		serialportserver: server, serialportutil
			- initialize(device,...)
			- bind()
			- listen()
			- filedescriptor *accept()
			- listen(device,...)
		socketserver: server
			- linger()
			- reuseaddr()
			- nonblock()
			- listen()
			protected:
				- sslAccept()
			inetsocketserver: socketserver, inetsocketutil
				- initialize(addr,port,...)
				- bind()
				- filedescriptor *accept()
				- listen(addr,port,...)
			unixsocketserver: socketserver, unixsocketutil
				- initialize(filename,...)
				- bind()
				- filedescriptor *accept()
				- listen(filename,...)
			rawsocketserver: server, rawsocketutil
				- initialize(???,...)
				- bind()
				- filedescriptor *accept()
				- listen(???,...)
		fileserver: server, fileutil
			- initialize(filename,...)
			- bind()
			- listen()
			- filedescriptor *accept()
			- listen(filename,...)
		msgqueueserver: server, msgqueueutil
			- initialize(key,...)
			- bind()
			- listen()
			- filedescriptor *accept()
			- listen(key,...)
		shmserver: server, shmutil
			- initialize(key,...)
			- bind()
			- listen()
			- filedescriptor *accept()
			- listen(key,...)
		fifoserver: server, fifoutil
			- initialize(filename,...)
			- bind()
			- listen()
			- filedescriptor *accept()
			- listen(filename,...)
		pipeserver: server, pipeutil
			- initialize(???,...)
			- bind()
			- listen()
			- filedescriptor *accept()
			- listen(???,...)
		...

--------------------------------------------------------------------------------

charstring class:
	string.h/strings.h -
		strxfrm(_l)(), strcoll()

wordexpansion class:
	wordexp.h - wordexp()/wordfree() -
			shell-like word expansion (~,?,*,etc.)
	fnmatch.h - fnmatch()
	glob.h - glob()/globfree()

quota class:
	bsd/linux only (solaris uses an ioctl) - 
		sys/quota.h - quotactl() function, macros, defines

filesystem class:
	bsd/linux only - 
		fstab.h - /etc/fstab parser
			getfsent(),getfsspec(),getfsfile(),setfsent(),endfsent()
	sunos/linux only - 
		mntent.h - read/write fstab, mtab, etc.
				setmntent(),getmntent(_r)()
				addmntent(),endmntent(),hasmntopt()
	linux only -
		sys/mount.h - mount(),umount(),umount2()

timer class:
	not on many systems -
		time.h and sys/time.h -
				clock_getres(), clock_gettime(), clock_settime()
				clock_nanosleep(), clock_getcpuclockid()
				timer_create(), timer_delete(), timer_settime(),
				timer_gettime(), timer_getoverrun()
					CLOCK_REALTIME
					CLOCK_MONOTONIC
					CLOCK_PROCESS_CPUTIME_ID
					CLOCK_THREAD_CPUTIME_ID

filedescriptor class:
	fcntl.h - fcntl()
			F_GETFL - get flags
				O_RDONLY,O_WRONLY,O_RDWR,O_CREAT,O_EXCL,O_TRUNC,
				O_APPEND,O_ASYNC,O_DIRECT,O_NOATIME,O_NONBLOCK
			F_SETFL - set flags
				O_APPEND,O_ASYNC,O_DIRECT,O_NOATIME,O_NONBLOCK
			F_GET/SETOWN - get/set process group that will receive
					signals on i/o availability
			F_GET/SETSIG - get/set what signal to send to process
					group on i/o/availability
	sys/select.h - select(),pselect()
	sys/poll.h - poll()
	sys/uio.h - readv()/writev()
	linux only - 
		sys/sendfile.h - sendfile()
	not in many systems - 
		sys/epoll.h - epoll functions for speeding up network io
				epoll_create(),epoll_ctl(),epoll_wait()
		aio.h - aio_init(),aio_read(),aio_write(),lio_listio(),
			aio_error(),aio_return(),aio_cancel(),
			aio_suspend(),aio_fsync()

signals:
	stdlib.h - abort(), atexit(), exit(), _Exit()
	string.h - strsignal()
	unistd.h - pause(), _exit()
	setjmp.h - setjmp()/longjump()/sigsetjump() - save stack contexts
	signal.h - signal stuff - need to implement more of this
			sysv_signal(),bsd_signal(),signal()
			kill(),killpg(),raise()
			ssignal(),gsignal()
			psignal()
			sigpause(),sigblock()
			sigsetmask(),siggetmask()
			sigemptyset(),sigfillset(),sigaddset(),sigdelset()
			sigismember(),sigisemptyset(),sigandset,sigorset()
			sigprocmask(),sigaction(),sigpending(),sigwait(),
			sigwaitinfo(),sigtimedwait(),sigqueue()
			sigvec(),sigreturn(),siginterrupt(),
			sigstack(),signalstack()
			sighold(),sigrelse(),sigignore(),sigset()
	sys/wait.h - wait(),wait3(),wait4(),waitpid()
	not in many systems - 
		stdlib.h - on_exit()
		sys/wait.h - waitid()

catalogs ???:
	nl_types.h - catopen()/catgets()/catclose()

network:
	unistd.h - gethostname()/sethostname()
	netdb.h - netgroup functions
			herror(),hstrerror()
			rcmd(_af)(),rexec(_af)(),ruserok(_af)(),rresvport(_af)()
			gai_strerror(),getnameinfo(),getaddrinfo_a(),
	resolv.h - resolver functions, lots of these
	sys/socket.h - socket(),socketpair(),
			getsockname(),getpeername(),
			bind(),listen(),accept(),
			connect(),
			send(),recv(),
			sendto(),recvfrom(),
			sendmsg(),recvmsg(),
			getsockopt(),setsockopt(),
			shutdown()
	net/if.h - physical interface structs/defines
	net/if_arp.h - arp protocol structs/defines
	net/route.h - routing structs/defines
	netinet/in.h - ntohl,ntohs,htoln,htons
	netinet/icmp6.h - icmp structs
	netinet/if_ether.h - more arp structs???
	netinet/igmp.h - igmp structs???
	netinet/tcp.h - #defines for setsockopt, tcp packet structs
	netinet/udp.h - udp packet structs

	not on solaris -
		unistd.h - getdomainname()/setdomainname()
		netdb.h - gai_suspend(),gai_error(),gai_cancel()
		ifaddrs.h - discover network interfaces
				getifaddrs(),freeifaddrs()
		net/if_packet.h - packet sockets structs/defines
		net/if_ppp.h - ppp interfaces structs/defines
		netinet/in.h - ip/ipv6 address structs,
				bindresvport(),bindresvport6()
				inet6_option_space()
				inet6_option_init()
				inet6_option_append()
				inet6_option_alloc()
				inet6_option_next()
				inet6_option_find()
		netinet/ip.h - ip packet structs
		netinet/ip6.h - ipv6 packet structs
		netinet/ip_icmp.h - icmp packet structs
	not on many systems -
		sys/socket.h - sockatmark()
		net/ethernet.h - ethernet interface structs/defines
		net/if_shaper.h - traffic shaper structs/defines
		net/if_slip.h - slip interfaces structs/defines
		netinet/if_fddi.h - fddi packet struct???
		netinet/if_tr.h - ???
		netinet/ether.h - ethernet addresses to acii and back
					ether_ntoa(_r)()
					ether_aton(_r)()
					ether_ntohost()
					ether_hostton()
					ether_line()
		netpacket/packet.h - raw packet structs

internationalization:
	langinfo.h - locale info functions
	locale.h/xlocale.h - setlocale, localeconv, etc.
	iconv.h - character set conversion
	libintl.h - gettext functions
	stdlib.h - rpmatch() - response match
