
---------------------------Suggested implementations of Types
 APRIint16, APRInt32, APRUInt32, etc.
	Proper sized (Un)signed or integers where APRU signifies unsigned, and
	the integer is the number of bytes.
 APRINTN
        Native Integers
	For right now, assume these are staying in.  If we decide against them,
	they will all be replaced with an integer size that makes sense.  Right
	now, I don't want to change them all.
 APRFile
	Windows:  Handle.
	UNIX:  structure {
			 ap_int32_t file descriptor
			 char *name
			 int mode
			 int user id
			 int group id
			 APTime access time
			 APTime modified time
			 APTime change time
			 }
			 
			 Basically, the File structure stores all the stat information 
			 about the structure.  This allows us to only open the file, stat
			 it, and use the file if we are serving a page.  We do not need
			 to stat it more than once.  However, we provide the stat function,
			 because other types of programs may need it.  For example, a database
			 should not rely upon the data in a APRFile variable to be kept up to
			 date.  It is provided to help us "cheat" whenever possible.
	 
			 We have a file pointer and a file descriptor, because this is an easy
			 way to determine if the output is buffered or not.  We could do this 
			 with a simple boolean flag, it doesn't really metter to me.

 APRDIR
	UNIX:  structure {
			 char *dirname
			 DIR *dirstruct;


 APRSocket			 in the future. */
	APRInt32
 APRLock                       /* A generic lock, not a mutex or a condition
				  variable, just a generic way to lock the
				  thread/process.  (Not Apache centric, but
				  a useful function.)
     IF PTHREADS
	1)  mutex: pthread_mutex_t; the actual lock
	2)  notified: Notified_node; array of conditions notified
	3)  owner: pthread_t; current owner of lock.
     ELSE
	We will define this later, because all initial platforms have pthreads.
 Notified_node
	1)  lenght: APRINTN; # of entries in this node.
	Array of abstracted size of:
		1) condvar: APRCond; condition variable notified
		2) numtimes: APRINTN; number of times notified
	2)  next: Notified_node; next one of these in list.
 APRCOND
	1) lock: APRLock; underlying APRLock
	2) cond: pthread_cond_t; pthreads condition
	3) notify_pending: APRINTN; cond has pending notification
 APRTime
	APRINT64
 APRStatus
	APRInt32
 APRERRORCODE
	APRInt32
 APR_EXPORT
	Should be able to use same def as APRI_EXPORT
 APR_NETDB_BUF_SIZE
	size of host entry table.
 APRIOVec
	1) base addr: void *; starting point in memory of data
	2) len: APRInt32; length of data.
 APRFileInfo
	1) type: APRFileType; enumerated type see below
	2) size: APRUInt32; size in bytes of file
	3) creation time: APRTime; Creation time of file per def of APRTime
	4) modify time: APRTime; last mod time of file per def of APRTime
 APRFileType
	enumerated type
		APRFILE:		It's a file
		APRDIRECTORY:	It's a directory
		APROTHER:	It's something else, ex: pipe
 APRSeekWhere
	enumerated type
		APR_SEEK_SET	Set's file pointer to offset parameter
		APR_SEEK_CUR	Set's file pointer to current position
				plus offset
		APR_SEEK_END	Set's file pointer to end of file
 APR_MAX_IOVEC_SIZE
	APRInt32
	Maximum size for APRIOVec array.  For right now, let's make it 16, but
	we can change it later.
 APRTHDPRIV
	void *
 APRNetAddrValue
	enumerated type
		APR_IpAddrNull		do not overswrite the IP addr.
		APR_IpAddrAny		INADDR_ANY equivalent
		APR_IpAddrLoopback	INADDR_LOOPBACK equivalent
 APRNetAddr
	1) family: APRUInt16; Address Family
	2) port: APRUInt16; port
	3) ip: APRUInt32; the 32 bit ip address
 APRHostEnt
	1) name: char *; name of host
	2) aliases: char **; list of aliases
	3) addrtype: Win=> APRInt16 Unix=> APRInt32; host addr type
	4) length: Win=> APRInt16 Unix=>APRInt32; length of addr
	5) addr_list: char *; list of addr's from Name Server
 APRSocketOptionData
	APRInt32
	1) APR_SockOpt_NoDelay
	2) APR_SockOpt_Reuseaddr
	3) APR_SockOpt_SendBufferSize
	4) APR_SockOpt_Keepalive
	5) APR_SockOpt_Linger	
 APRPollDesc
	1) fdarr: APRFile; Array of File Desc's to check.
	2) events: APRInt16; events to look for.
	3) retevents: APRInt16; events that were triggered.
 APRTimeParametersFn	
	function which when given a time instant in GMT, returns the timezone
	information.  We need to implement one function for GMT and one for
	local timezones.  This allows us to generalize changes in DST.
 APRTHDDESTFN
	function which de-allocates thread-private data.
 APRExplodedTime
	1)  year: APRInt32; store in 4 digit format to avoid y2k bugs.
	2)  month: APRInt32; # of months into year [0,11]
	3)  mday: APRInt32; day of month [1, 31]
	4)  hour: APRInt32; hours into the day [0, 24]
	5)  min: APRInt32; minutes into the hour [0,60]
	6)  sec: APRInt32; seconds into the min [0,0]
	7)  params: APRTimeParametersFn; local timezone info.
	Not needed when giving Exp time as input, but nice if we should add 
	them when creating output
	9)  wday: APRInt32; day of week [0,6]
	10)  yday: APRInt32; day of year [0,365 | 366 (leAPR year)]
 APRTHREADTYPE
	enumerated type
		APR_USER_THREAD
		APR_SYSTEM_THREAD
 APRTHREADPriority
	enumerated type
		APR_PRIORITY_FIRST	placeholder
		APR_PRIORITY_LOW         the lowest possible priority
		APR_PRIORITY_NORMAL      most common expected priority 
		APR_PRIORITY_HIGH        slightly more aggressive scheduling
		APR_PRIORITY_URGENT      no sense to have more than one
		APR_PRIORITY_LAST        placeholder
 APRTHREADScope
	enumerated type
		APR_LOCAL_THREAD
		APR_GLOBAL_THREAD
 APRTHREADState
	enumerated type
		APR_JOINABLE_THREAD,
		APR_UNJOINABLE_THREAD
 APRProcess
	1)  pid: UNIX=> pid_t;OS specific process id. 
 APRPROCESSATTR
	1)  stdinFd: APRFile *
	2)  stdoutFd: APRFile *
	3)  stderrFd: APRFile *
	4)  currdir: char * ; current directory.
 APRPrimaryFn
	(APRINTN *)(APRINTN, char **)
 APRShutdownHow
	enumerated type
		APR_SHUTDOWN_RCV		Further receives not allowed. 
                APR_SHUTDOWN_SEND	Further sends not allowed. 
                APR_SHUTDOWN_BOTH	Further sends and receives not allowed.
 APRSYSINFO
	enumerated type
		APR_SI_HOSTNAME		get name of the host 
                APR_SI_SYSNAME           get name of the system
                APR_SI_RELEASE           get release number of the system
                APR_SI_ARCHITECTURE      get architecture of the system
 APRFilePerms
	enumerated type
		APR_ACCESS_READ_OK	Test for read permission. 
                APR_ACCESS_WRITE_OK	Test for write permission. 
                APR_ACCESS_EXISTS	Check existence of file.
 DPRINTF
	debug printf.  (Only print arguement if in debug mode)
 APRTHREAD
	1)  state:  APRUInt32;  thread's creation state 
	2)  priority:  APRTHREADPriority;    APRparent priority, loosly defined 
	3)  errstrsize:  APRInt32;  byte length of current error string | zero 
	4)  errorCode;  APRErrorCode; current APR error code | zero 
	5)  osErrorCode:  APRInt32;  mAPRping of errorCode | zero 
	6)  errorString:  char *;   current error string | NULL 
	7)  arg:  void *;   argument to the client's entry point 
	8)  startfunc:  (void *)(void *arg);  the root of the client's thread 
	9)  stack:  APRTHREADStack;  info about thread's stack (for GC) 
	10)  environment:  void *;   pointer to execution environment 

	11)  dump:  APRTHREADDumpProc;   dump thread info out 
	12)  dumpArg:  void *;   argument for the dump function 
    If PThreads defined
	13)  id:pthread_t;pthread identifier for the thread 
	14)  okToDelete:  APRBool;   ok to delete the APRTHREAD struct? 
	15)  io_cv:  APRCondVar *;a condition used to run i/o 
	16)  waiting:  APRCondVar *;  where the thread is waiting | NULL 
	17)  sp:  void *;recorded sp for garbage collection 
	18)  next, prev:  APRTHREAD *;   simple linked list of all threads 
	19)  suspend:  APRUInt32;used to store suspend and resume flags
 APRBool
	APRInt16  nly valid values are 1 and 0.

No decision how to implement yet.
 APRTHREADPROCDUMP
 APRFILEPERMS

Events
 APRPOLL_READ:  File descriptor is readable
 APRPOLL_WRITE:  File descriptor is writable
 APRPOLL_EXCEPT:  File descriptor has an exception
 APRPOLL_ERROR:  File descriptor has an error
 APRPOLL_INVALID:  File descriptor is invalid

Timing Defines
 DEFAULT_TIMEOUT:  default timeout value
 DEFAULT_KEEPALIVE_TIMEOUT:  default value for keepalive connections

