diff --git a/foreign/HTEvent.h b/foreign/HTEvent.h
deleted file mode 100644
index 655027623a8b447f3b850fe99cad602c4ef40771..0000000000000000000000000000000000000000
--- a/foreign/HTEvent.h
+++ /dev/null
@@ -1,246 +0,0 @@
-/*
-
-  					W3C Sample Code Library libwww Event Class
-
-
-!
-  The Event Class
-!
-*/
-
-/*
-**	(c) COPYRIGHT MIT 1995.
-**	Please first read the full copyright statement in the file COPYRIGH.
-*/
-
-/*
-
-The Event Class defines any event manager to be used by libwww for handling
-events. An event is not strictly defined as it is highly platform
-dependent and hence out of scope for the Library. If you are using the libwww
-pseudo threads on Unix then an event is when the select() system
-call returns a notification on a socket descriptor, but it may as well
-be an asynchronous event from the windows manager etc. If your application
-is not using anything but traditional blocking sockets then you do not need
-an event manager at all. In that case, libwww will block on any socket or
-system call until the process can proceed.
-
-The libwww interface to an event manager is very simple as it consists of
-registering a socket descriptor, the location in the
-program, and the current state when an operation (for example
-read) would block. When the event manager at a later point in
-time gets a notification that the socket has become ready, it can then call
-libwww with the state saved from the registration and libwww can continue.
-Second, libwww must be able to unregister a socket when it is not
-anymore in a state where it can block. Only in case the application
-wishes to use non-blocking sockets it should register methods for
-handling the registration process as described below.
-
-Note: The library core does not define any event manager
-- it is considered part of the application. The library comes with a
-default event manager which can be initiated
-using the function HTEventInit() in HTInit
-module
-
-This module is implemented by HTEvent.c, and it is
-a part of the W3C Sample Code Library.
-*/
-
-#ifndef HTEVENT_H
-#define HTEVENT_H
-#include "wwwsys.h"
-#ifdef IN_EVENT
-typedef struct _HTTimer HTTimer;
-#endif
-
-typedef enum _HTPriority {
-    HT_PRIORITY_INV = -1,
-    HT_PRIORITY_OFF = 0,
-    HT_PRIORITY_MIN = 1,
-    HT_PRIORITY_MAX = 20
-} HTPriority; 
-
-#define HTEVENT_INDEX 0x10
-typedef enum {
-#ifdef WWW_WIN_ASYNC
-    HTEvent_READ    = (0x001 | 0 << HTEVENT_INDEX),
-    HTEvent_WRITE   = (0x002 | 1 << HTEVENT_INDEX),
-    HTEvent_OOB     = (0x004 | 2 << HTEVENT_INDEX),
-    HTEvent_ACCEPT  = (0x008 | 3 << HTEVENT_INDEX),
-    HTEvent_CONNECT = (0x010 | 4 << HTEVENT_INDEX),
-    HTEvent_CLOSE   = (0x020 | 5 << HTEVENT_INDEX),
-    HTEvent_TYPES   = 6,	/* winsock has seperate events for all of these */
-#define HTEVENT_TYPES	6 /* use in constructing the fake event below */
-#else /* WWW_WIN_ASYNC */
-    HTEvent_READ    = (0x001 | 0 << HTEVENT_INDEX),
-    HTEvent_ACCEPT  = (0x002 | 0 << HTEVENT_INDEX),
-    HTEvent_CLOSE   = (0x004 | 0 << HTEVENT_INDEX),
-    HTEvent_WRITE   = (0x008 | 1 << HTEVENT_INDEX),
-    HTEvent_CONNECT = (0x010 | 1 << HTEVENT_INDEX),
-    HTEvent_OOB     = (0x020 | 2 << HTEVENT_INDEX),
-    HTEvent_TYPES   = 3,	/* only READ, WRITE, and OOB are real types */
-#define HTEVENT_TYPES	3 /* use in constructing the fake event below */
-#endif /* !WWW_WIN_ASYNC */
-    /*
-    **	fake events - these don't correspond to event manager events, but they
-    **	are usefull for communicating with the protocol modules
-    */
-    HTEvent_TIMEOUT = (0x040 | HTEVENT_TYPES << HTEVENT_INDEX),
-    HTEvent_BEGIN   = (0x000 | HTEVENT_TYPES << HTEVENT_INDEX),
-    HTEvent_END     = (0x080 | HTEVENT_TYPES << HTEVENT_INDEX),
-    HTEvent_FLUSH   = (0x100 | HTEVENT_TYPES << HTEVENT_INDEX),
-    HTEvent_RESET   = (0x200 | HTEVENT_TYPES << HTEVENT_INDEX),
-    HTEvent_ALL     = 0xFFFF
-} HTEventType;
-
-#define HTEvent_BITS(type) (type & 0xFFFF)
-#define HTEvent_INDEX(type) (type >> HTEVENT_INDEX)
-
-#define HT_EVENT_INITIALIZER \
-    {HTEvent_READ, "HTEvent_READ"}, \
-    {HTEvent_ACCEPT, "HTEvent_ACCEPT"}, \
-    {HTEvent_CLOSE, "HTEvent_CLOSE"}, \
-    {HTEvent_WRITE, "HTEvent_WRITE"}, \
-    {HTEvent_CONNECT, "HTEvent_CONNECT"}, \
-    {HTEvent_OOB, "HTEvent_OOB"}, \
-    {HTEvent_TIMEOUT, "HTEvent_TIMEOUT"}, \
-    {HTEvent_BEGIN, "HTEvent_BEGIN"}, \
-    {HTEvent_END, "HTEvent_END"}, \
-    {HTEvent_FLUSH, "HTEvent_FLUSH"}, \
-    {HTEvent_RESET, "HTEvent_RESET"}
-
-extern char * HTEvent_type2str(HTEventType type);
-
-/*
-.
-  Event Handlers
-.
-
-A location is a function that can be registered by the event manager
-and called at a later point in time in order to continue an operation. All
-locations must be of type &nbsp;HTEventCallback as defined here:
-*/
-
-typedef int HTEventCallback (SOCKET, void *, HTEventType);
-typedef struct _HTEvent HTEvent;
-
-/* Avoid circular include for HTReq->HTNet->HTHost: HTEvent blah */
-#include "HTReq.h"
-
-/*
-
-There are many default event handlers provided with the Library. For example,
-all the protocol modules such as the HTTP client module
-are implemented as event handlers. In stead of using blocking sockets, this
-allows a protocol module to register itself when performing an operation
-that would block. When the sockets becomes ready the handler is called with
-th socket in question, the request object, and the socket operation &nbsp;
-.
-  Registering and Unregistering Events
-.
-
-As mentioned above, the only interface libwww requires from an event manager
-is a method to register an event when an operation would block and
-unregister it when the operation has completed The library registers
-and unregisters events by calling the following two functions:
-*/
-
-extern int HTEvent_register	(SOCKET, HTEventType, HTEvent *);
-extern int HTEvent_unregister	(SOCKET, HTEventType);
-
-/*
-
-The register function contains information about which socket we are waiting
-on to get ready and which operation we are waiting for (read, write, etc.),
-the request object containing the current request, the event handler that
-we want to be called when the socket becomes reasy, and finally the priority
-by which we want the thread to be processed by the event manager. Likewise,
-libwww can unregister a operation on a socket which means that libwww is
-no longer waiting for this actiion to become ready.
-.
-  Registering an Event Manager
-.
-
-Libwww core does not contain any event manager as it depends on whether you
-want to use pseudo threads no threads, or real threads. Instead, libwww comes
-with a default implementation that you may register,
-but you may as well implement and register your own. The register and unregister
-functions above actually does nothing than looking for a registered event
-manager and then passes the call on to that. You register your own event
-manager by using the methods below:
-*/
-
-typedef int HTEvent_registerCallback(SOCKET, HTEventType, HTEvent *);
-typedef int HTEvent_unregisterCallback(SOCKET, HTEventType);
-
-extern void HTEvent_setRegisterCallback(HTEvent_registerCallback *);
-extern void HTEvent_setUnregisterCallback(HTEvent_unregisterCallback *);
-
-/*
-(
-  Has Register and Unregister Callbacks been setup?
-)
-
-Replies YES if both an HTEvent_setRegisterCallback and
-HTEvent_setUnregisterCallback have been called with non NULL callbacks.
-*/
-
-extern BOOL HTEvent_isCallbacksRegistered(void);
-
-/*
-.
-  Create and Delete Events
-.
-*/
-
-extern HTEvent * HTEvent_new (HTEventCallback * cbf, void * context,
-			      HTPriority pritority, int timeoutInMillis);
-extern BOOL HTEvent_delete (HTEvent * event);
-
-/*
-(
-  Event Timeouts, Priorities, Callbacks, and Contexts
-)
-
-Normally, these are set when creating the event.
-*/
-
-extern BOOL HTEvent_setParam(HTEvent * event, void * param);
-extern BOOL HTEvent_setPriority(HTEvent * event, HTPriority priority);
-extern BOOL HTEvent_setTimeout(HTEvent * event, int timeoutInMillis);
-extern BOOL HTEvent_setCallback(HTEvent * event, HTEventCallback * cbf);
-
-/*
-.
-  The Raw Event Type
-.
-
-Don't use this directly, use the methods above instead.
-*/
-
-struct _HTEvent {
-    HTPriority		priority;	 /* Priority of this request (event) */
-    int                 millis;              /* Timeout in ms for this event */
-#ifdef IN_EVENT
-    HTTimer *		timer;
-#endif
-    HTEventCallback *	cbf;			   /* Protocol state machine */
-    void *		param;		       /* HTEvent_register parameter */
-    HTRequest *		request;
-};
-
-/*
-
-You can register the event manager provided together with libwww by using
-the HTEventInit() in the HTInit module
-*/
-
-#endif /* HTEVENT_H */
-
-/*
-
-  
-
-  @(#) $Id: HTEvent.h,v 1.1 1999-10-09 19:05:39 egnor Exp $
-
-*/
diff --git a/foreign/HTMemory.h b/foreign/HTMemory.h
deleted file mode 100644
index f859b459d1c9da6d7fa4e19dab8337d3468947a2..0000000000000000000000000000000000000000
--- a/foreign/HTMemory.h
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
-
-  
-  					W3C Sample Code Library libwww Dynamic Memory Handlers
-
-
-!
-  Dynamic Memory Handlers
-!
-*/
-
-/*
-**	(c) COPYRIGHT MIT 1995.
-**	Please first read the full copyright statement in the file COPYRIGH.
-*/
-
-/*
-
-This module defines any memory handler to be used by libwww for allocating
-and de-allocating dynamic memory. As dynamic memory may be a scarce resource,
-it is required that an application can handle memory exhaustion gracefully.
-This module provides an interface that covers the following situations:
-
-	 
-	   o 
-	     Handling of allocation, reallocation and de-allocation
-    of dynamic memory
-  o 
-	     Recovering from temporary lack of available memory
-  o 
-	     Panic handling in case a new allocation fails
-
-	 
-Note: The Library core provides a default set of memory handlers
-for allocating and de-allocating dynamic memory. In order to maintain a
-reasonable performance, they are not registered dynamically but assigned
-using C style macros. Hence, it is not possible to swap memory handler
-at run time but this was considered to be a reasonable trade-off.
-
-This module is implemented by HTMemory.c, and it
-is a part of the W3C Sample Code
-Library.
-*/
-
-#ifndef HTMEMORY_H
-#define HTMEMORY_H
-
-#include "HTUtils.h"
-
-/*
-.
-  Allocation, Reallocation and De-allocation
-.
-
-The Library provides a default set of methods for handling dynamic memory.
-They are very basic and essentially identical to the C style
-malloc, calloc, realloc, and
-free:
-*/
-extern void* HTMemory_malloc(size_t size);
-extern void* HTMemory_calloc(size_t count, size_t size);
-extern void* HTMemory_realloc(void * ptr, size_t size);
-extern void HTMemory_free(void* ptr);
-
-/*
-(
-  Memory Macros
-)
-
-The methods above are not referred directly in the Library. Instead we use
-a set of C style macros. If you don't wany any memory management beyond normal
-malloc and alloc then you can just use that instead of the HTMemory_* function.
-You can of course also provide your own methods as well.
-*/
-
-#define HT_MALLOC(size)		HTMemory_malloc((size))
-#define HT_CALLOC(count, size)	HTMemory_calloc((count), (size))
-#define HT_REALLOC(ptr, size)	HTMemory_realloc((ptr), (size))
-#define HT_FREE(pointer)	{HTMemory_free((pointer));((pointer))=NULL;}
-
-/*
-.
-  Memory Freer Functions
-.
-
-The dynamic memory freer functions are typically functions that are capable
-of freeing large chunks of memory. In case a new allocation fails, the allocation
-method looks for any registered freer functions to call. There can be multiple
-freer functions and after each call, the allocation method tries again to
-allocate the desired amount of dynamic memory. The freer functions are called
-in reverse order meaning that the last one registered gets
-called first. That way, it is easy to add temporary freer functions
-which then are guaranteed to be called first if a methods fails.
-(
-  Add a Freer Function
-)
-
-You can add a freer function by using the following method. The Library may
-itself register a set of free functions during initialization. If the application
-does not register any freer functions then the Library looks how it can free
-internal memory. The freer function is passed the total number of
-bytes requested by the allocation.
-*/
-typedef void HTMemoryCallback(size_t size);
-
-extern BOOL HTMemoryCall_add (HTMemoryCallback * cbf);
-
-/*
-(
-  Delete a Freer Function
-)
-
-Freer functions can be deleted at any time in which case they are not called
-anymore.
-*/
-
-extern BOOL HTMemoryCall_delete (HTMemoryCallback * cbf);
-extern BOOL HTMemoryCall_deleteAll (void);
-
-/*
-.
-  Panic Handling
-.
-
-If the freer functions are not capable of de-allocation enough memory then
-the application must have an organized way of closing down. This is done
-using the panic handler. In the libwww, each allocation is tested and
-HT_OUTOFMEM is called if a NULL was returned.
-HT_OUTOFMEM is a macro which by default calls
-HTMemory_outofmem() but of course can point to any method. The
-default handler calls an exit function defined by the application in a call
-to HTMemory_setExit(). If the application has not defined
-an exit function, HTMemory_outofmem() prints an error message
-and calls exit(1).
-*/
-
-typedef void HTMemory_exitCallback(char *name, char *file, unsigned long line);
-
-extern void HTMemory_setExit(HTMemory_exitCallback * pExit);
-extern HTMemory_exitCallback * HTMemory_exit(void);
-
-/*
-(
-  Call the Exit Handler
-)
-
-If an allocation fails then this function is called. If the application has
-registered its own panic handler then this is called directly from this function.
-Otherwise, the default behavior is to write a small message to stderr and
-then exit.
-*/
-
-#define outofmem(file, name)	HT_OUTOFMEM(name)
-#define HT_OUTOFMEM(name)	HTMemory_outofmem((name), __FILE__, __LINE__)
-
-extern void HTMemory_outofmem(char * name, char * file, unsigned long line);
-
-/*
-*/
-
-#endif /* HTMEMORY_H */
-
-/*
-
-  
-
-  @(#) $Id: HTMemory.h,v 1.1 1999-10-09 19:37:59 egnor Exp $
-
-*/
diff --git a/foreign/HTReq.h b/foreign/HTReq.h
deleted file mode 100644
index 013b80ce2e3292b8dc2cb39e30c0da5ee5a502e9..0000000000000000000000000000000000000000
--- a/foreign/HTReq.h
+++ /dev/null
@@ -1,8 +0,0 @@
-/* HTReq.h spoof -- exists only to make HTEvent.h work */
-
-#ifndef HTREQ_H_SPOOF
-#define HTREQ_H_SPOOF
-
-typedef struct HTRequest_spoof HTRequest;
-
-#endif
diff --git a/foreign/HTUtils.h b/foreign/HTUtils.h
deleted file mode 100644
index 24d3a8a108479ce46c47c592227eab387aa0b720..0000000000000000000000000000000000000000
--- a/foreign/HTUtils.h
+++ /dev/null
@@ -1,409 +0,0 @@
-/*
-
-  					W3C Sample Code Library libwww Debug Information and General Purpose
-  Macros
-
-
-!
-  Debug Information and General Purpose Macros
-!
-*/
-
-/*
-**	(c) COPYRIGHT MIT 1995.
-**	Please first read the full copyright statement in the file COPYRIGH.
-*/
-
-/*
-
-This module is a part of the  W3C Sample
-Code Library. See also the system dependent file
-sysdep module for system specific information.
-*/
-
-#ifndef HTUTILS_H
-#define HTUTILS_H
-
-/*
-.
-  Destination for User Print Messages
-.
-
-You can send print messages to the user to various destinations
-depending on the type of your application. By default, on Unix the
-messages are sent to stdout using
-fprintf. If we are on MSWindows and have a windows
-applications then register a HTPrintCallback
-function. This is done with HTPrint_setCallback. It tells
-HTPrint to call a HTPrintCallback. If
-HTDEBUG
-is not defined then don't do any of the above.
-*/
-
-typedef int HTPrintCallback(const char * fmt, va_list pArgs);
-extern void HTPrint_setCallback(HTPrintCallback * pCall);
-extern HTPrintCallback * HTPrint_getCallback(void);
-
-extern int HTPrint(const char * fmt, ...);
-
-/*
-.
-  Debug Message Control
-.
-
-This is the global flag for setting the WWWTRACE options.
-The verbose mode is no longer a simple boolean but a bit field so that it
-is possible to see parts of the output messages.
-*/
-
-#if defined(NODEBUG) || defined(NDEBUG) || defined(_NDEBUG)
-#undef HTDEBUG
-#else
-#ifndef HTDEBUG
-#define HTDEBUG		1
-#endif /* HTDEBUG */
-#endif
-
-/*
-(
-  C Preprocessor defines
-)
-
-Make sure that the following macros are defined
-*/
-
-#ifndef __FILE__
-#define __FILE__	""
-#endif
-
-#ifndef __LINE__
-#define __LINE__	0L
-#endif
-
-/*
-(
-  Definition of the Global Trace Flag
-)
-
-The global trace flag variable is available everywhere.
-*/
-
-#ifdef HTDEBUG
-#ifdef WWW_WIN_DLL
-extern int *		WWW_TraceFlag;	 /* In DLLs, we need the indirection */
-#define WWWTRACE	(*WWW_TraceFlag) 
-#else
-extern unsigned int	WWW_TraceFlag;	     /* Global flag for all W3 trace */
-#define WWWTRACE	(WWW_TraceFlag)
-#endif /* WWW_WIN_DLL */
-#else
-#define WWWTRACE	0
-#endif /* HTDEBUG */
-
-/*
-(
-  Select which Trace Messages to show
-)
-
-Libwww has a huge set of trace messages and it is therefor a good idea to
-be able to select which ones to see for any particular trace. An easy way
-to set this is using the funtion
-HTSetTraceMessageMask. The WWWTRACE
-define outputs messages if verbose mode is active according to the following
-rules:
-*/
-
-typedef enum _HTTraceFlags {
-    SHOW_UTIL_TRACE	= 0x1,
-    SHOW_APP_TRACE	= 0x2,
-    SHOW_CACHE_TRACE	= 0x4,
-    SHOW_SGML_TRACE	= 0x8,
-    SHOW_BIND_TRACE	= 0x10,
-    SHOW_THREAD_TRACE	= 0x20,
-    SHOW_STREAM_TRACE	= 0x40,
-    SHOW_PROTOCOL_TRACE = 0x80,
-    SHOW_MEM_TRACE	= 0x100,
-    SHOW_URI_TRACE	= 0x200,
-    SHOW_AUTH_TRACE	= 0x400,
-    SHOW_ANCHOR_TRACE	= 0x800,
-    SHOW_PICS_TRACE	= 0x1000,
-    SHOW_CORE_TRACE	= 0x2000,
-    SHOW_MUX_TRACE      = 0x4000,
-    SHOW_SQL_TRACE      = 0x8000,
-    SHOW_XML_TRACE      = 0x10000,
-    SHOW_ALL_TRACE	= 0xFFFFFFFF
-} HTTraceFlags;
-
-/*
-
-The flags are made so that they can serve as a group flag for correlated
-trace messages, e.g. showing messages for SGML and HTML at the same time.
-*/
-
-#define UTIL_TRACE	(WWWTRACE & SHOW_UTIL_TRACE)
-#define APP_TRACE	(WWWTRACE & SHOW_APP_TRACE)
-#define CACHE_TRACE	(WWWTRACE & SHOW_CACHE_TRACE)
-#define SGML_TRACE	(WWWTRACE & SHOW_SGML_TRACE)
-#define BIND_TRACE	(WWWTRACE & SHOW_BIND_TRACE)
-#define THD_TRACE	(WWWTRACE & SHOW_THREAD_TRACE)
-#define STREAM_TRACE	(WWWTRACE & SHOW_STREAM_TRACE)
-#define PROT_TRACE	(WWWTRACE & SHOW_PROTOCOL_TRACE)
-#define MEM_TRACE	(WWWTRACE & SHOW_MEM_TRACE)
-#define URI_TRACE	(WWWTRACE & SHOW_URI_TRACE)
-#define AUTH_TRACE	(WWWTRACE & SHOW_AUTH_TRACE)
-#define ANCH_TRACE	(WWWTRACE & SHOW_ANCHOR_TRACE)
-#define PICS_TRACE	(WWWTRACE & SHOW_PICS_TRACE)
-#define CORE_TRACE	(WWWTRACE & SHOW_CORE_TRACE)
-#define MUX_TRACE	(WWWTRACE & SHOW_MUX_TRACE)
-#define SQL_TRACE	(WWWTRACE & SHOW_SQL_TRACE)
-#define XML_TRACE	(WWWTRACE & SHOW_XML_TRACE)
-#define ALL_TRACE	(WWWTRACE & SHOW_ALL_TRACE)
-
-/*
-(
-  Destination for Trace Messages
-)
-
-You can send trace messages to various destinations depending on the type
-of your application. By default, on Unix the messages are sent to
-stderr using fprintf. If we are on MSWindows and
-have a windows applications then register a HTTraceCallback
-function. This is done with HTTrace_setCallback. It tells
-HTTrace to call a HTTraceCallback. If 
-HTDEBUG is not defined then don't do any of the above.
-*/
-
-typedef int HTTraceCallback(const char * fmt, va_list pArgs);
-extern void HTTrace_setCallback(HTTraceCallback * pCall);
-extern HTTraceCallback * HTTrace_getCallback(void);
-
-/*
-
-The HTTRACE macro uses "_" as parameter separater
-instead of ",". This enables us to use a single macro instead
-of a macro for each number of arguments which we consider a more elegant
-and flexible solution. The implication is, however, that we can't have variables
-that start or end with an "_" if they are to be used in a trace
-message.
-*/
-
-#ifdef HTDEBUG
-#undef _
-#define _ ,
-#define HTTRACE(TYPE, FMT) \
-	do { if (TYPE) HTTrace(FMT); } while (0);
-extern int HTTrace(const char * fmt, ...);
-#else
-#define HTTRACE(TYPE, FMT)		/* empty */
-#endif /* HTDEBUG */
-
-/*
-(
-  Data Trace Logging
-)
-
-A similar mechanism exists for logging data, except that is adds a data and
-length argument to the trace call. Again, you can register your own callbacks
-if need be.
-*/
-
-typedef int HTTraceDataCallback(char * data, size_t len, char * fmt, va_list pArgs);
-extern void HTTraceData_setCallback(HTTraceDataCallback * pCall);
-extern HTTraceDataCallback * HTTraceData_getCallback(void);
-
-/*
-
-Again we use the same macro expansion mechanism as for HTTrace
-*/
-
-#ifdef HTDEBUG
-#define HTTRACEDATA(DATA, LEN, FMT) HTTraceData((DATA), (LEN), FMT)
-extern int HTTraceData(char * data, size_t len, char * fmt, ...);
-#else
-#define HTTRACEDATA(DATA, LEN, FMT)	/* empty */
-#endif /* HTDEBUG */
-
-/*
-(
-  Debug Breaks
-)
-
-Call this function and the program halts. We use the same macro expansion
-mechanism as for HTTrace
-*/
-
-extern void HTDebugBreak(char * file, unsigned long line, const char * fmt, ...);
-
-#ifdef HTDEBUG
-#define HTDEBUGBREAK(FMT) HTDebugBreak(__FILE__, __LINE__, FMT)
-#else
-#define HTDEBUGBREAK(FMT)		/* empty */
-#endif /* HTDEBUG */
-
-/*
-.
-  Macros for Function Declarations
-.
-
-These function prefixes are used by scripts and other tools and helps figuring
-out which functions are exported and which are not. See also the
-libwww style guide.
-*/
-
-#define PUBLIC			/* Accessible outside this module     */
-#define PRIVATE static		/* Accessible only within this module */
-
-/*
-.
-  Often used Interger Macros
-.
-(
-  Min and Max functions
-)
-*/
-
-#ifndef HTMIN 
-#define HTMIN(a,b) ((a) <= (b) ? (a) : (b))
-#define HTMAX(a,b) ((a) >= (b) ? (a) : (b))
-#endif
-
-/*
-(
-  Double abs function
-)
-*/
-
-#ifndef HTDABS
-#define HTDABS(a) ((a) < 0.0 ? (-(a)) : (a))
-#endif
-
-/*
-
-
-.
-  Return Codes for Protocol Modules and Streams
-.
-
-Theese are the codes returned from the protocol modules, and the stream modules.
-Success are (>=0) and failure are (<0)
-*/
-
-#define HT_OK			0	/* Generic success */
-#define HT_ALL			1	/* Used by Net Manager */
-
-#define HT_CONTINUE             100     /* Continue an operation */
-#define HT_UPGRADE              101     /* Switching protocols */
-
-#define HT_LOADED		200  	/* Everything's OK */
-#define HT_CREATED  	        201     /* New object is created */
-#define HT_ACCEPTED  	        202     /* Accepted */
-#define HT_NO_DATA		204  	/* OK but no data was loaded */
-#define HT_RESET_CONTENT        205     /* Reset content */
-#define HT_PARTIAL_CONTENT	206  	/* Partial Content */
-
-#define HT_MULTIPLE_CHOICES     300     /* Multiple choices */
-#define HT_PERM_REDIRECT	301  	/* Permanent redirection */
-#define HT_FOUND        	302  	/* Found */
-#define HT_SEE_OTHER            303     /* See other */
-#define HT_NOT_MODIFIED         304     /* Not Modified */
-#define HT_USE_PROXY            305     /* Use Proxy */
-#define HT_PROXY_REDIRECT       306     /* Proxy Redirect */
-#define HT_TEMP_REDIRECT        307     /* Temporary redirect */
-
-#define HT_IGNORE		900  	/* Ignore this in the Net manager */
-#define HT_CLOSED		901  	/* The socket was closed */
-#define HT_PENDING		902  	/* Wait for connection */
-#define HT_RELOAD		903  	/* If we must reload the document */
-
-#define HT_ERROR		-1	/* Generic failure */
-
-#define HT_NO_ACCESS		-401	/* Unauthorized */
-#define HT_FORBIDDEN		-403	/* Access forbidden */
-#define HT_NOT_FOUND		-404	/* Not found */
-#define HT_NOT_ACCEPTABLE	-406	/* Not Acceptable */
-#define HT_NO_PROXY_ACCESS      -407    /* Proxy Authentication Failed */
-#define HT_CONFLICT             -409    /* Conflict */
-#define HT_LENGTH_REQUIRED      -411    /* Length required */
-#define HT_PRECONDITION_FAILED  -412    /* Precondition failed */
-#define HT_TOO_BIG              -413    /* Request entity too large */
-#define HT_URI_TOO_BIG          -414    /* Request-URI too long */
-#define HT_UNSUPPORTED          -415    /* Unsupported */
-#define HT_BAD_RANGE            -416    /* Request Range not satisfiable */
-#define HT_EXPECTATION_FAILED   -417    /* Expectation Failed */
-#define HT_REAUTH               -418    /* Reauthentication required */
-#define HT_PROXY_REAUTH         -419    /* Proxy Reauthentication required */
-
-#define HT_RETRY		-503	/* If service isn't available */
-#define HT_BAD_VERSION		-505	/* Bad protocol version */
-
-#define HT_INTERNAL		-900    /* Weird -- should never happen. */
-#define HT_WOULD_BLOCK		-901    /* If we are in a select */
-#define HT_INTERRUPTED 		-902    /* Note the negative value! */
-#define HT_PAUSE                -903    /* If we want to pause a stream */
-#define HT_RECOVER_PIPE         -904    /* Recover pipe line */
-#define HT_TIMEOUT              -905    /* Connection timeout */
-#define HT_NO_HOST              -906    /* Can't locate host */
-
-/*
-.
-  Upper- and Lowercase macros
-.
-
-The problem here is that toupper(x) is not defined officially unless isupper(x)
-is. These macros are CERTAINLY needed on #if defined(pyr) || define(mips)
-or BDSI platforms. For safefy, we make them mandatory.
-*/
-
-#ifndef TOLOWER
-#define TOLOWER(c) tolower((int) (c))
-#define TOUPPER(c) toupper((int) (c))
-#endif
-
-/*
-.
-  Max and Min values for Integers and Floating Point
-.
-*/
-
-#ifdef FLT_EPSILON				    /* The ANSI C way define */
-#define HT_EPSILON FLT_EPSILON
-#else
-#define HT_EPSILON 0.00000001
-#endif
-
-/*
-.
-  The local equivalents of CR and LF
-.
-
-We can check for these after net ascii text has been converted to the local
-representation. Similarly, we include them in strings to be sent as net ascii
-after translation.
-*/
-
-#define LF   FROMASCII('\012')  /* ASCII line feed LOCAL EQUIVALENT */
-#define CR   FROMASCII('\015')  /* Will be converted to ^M for transmission */
-
-/*
-.
-  Library Dynamic Memory Magement
-.
-
-The Library has it's own dynamic memory API which is declared in
-memory management module.
-*/
-
-#include "HTMemory.h"
-
-/*
-*/
-
-#endif /* HT_UTILS.h */
-
-/*
-
-  
-
-  @(#) $Id: HTUtils.h,v 1.1 1999-10-09 19:37:59 egnor Exp $
-
-*/
diff --git a/foreign/README b/foreign/README
deleted file mode 100644
index 78a46829eb1bc7902607378f3d7e9ea6e70fda6e..0000000000000000000000000000000000000000
--- a/foreign/README
+++ /dev/null
@@ -1,56 +0,0 @@
-This directory contains public header files for those foreign components for
-which liboop includes "adapters".  By including them here, we can build the
-adapters without requiring the presence of the foreign components in question.
-
-An adapter will still not function without the code it adapts, of course, but
-at least this way we eliminate pesky build ordering issues.
-
-Many of these have specific licensing terms and agreements:
-
-adns.h
-
-    adns is Ian Jackson's asynchronous DNS access package.
-    <URL:http://www.chiark.greenend.org.uk/~ian/adns/>
-
-    While adns is licensed under the GPL, Ian has graciously consented to the
-    distribution of its public header file (adns.h) under the LGPL:
-
-        I hereby relicence adns.h - and only adns.h - to you (and all third
-        parties) under the GNU Library General Public Licence.  This
-        statement applies to all versions of adns.h I have released so far,
-        and to any files adns.h with similar contents and function I might
-        release during the remainder of this calendar year (1999).
-
-HTEvent.h
-HTMemory.h
-HTUtils.h
-
-    These header files are extracted from libwww.
-    Libwww is a general-purpose Web API written in C.
-    <URL:http://www.w3.org/Library/>
-
-    Libwww code is subject to this copyright:
-
-    Copyright � 1995-1998 World Wide Web Consortium, (Massachusetts Institute
-    of Technology, Institut National de Recherche en Informatique et en
-    Automatique, Keio University). All Rights Reserved. This program is
-    distributed under the W3C's Software Intellectual Property License. This
-    program is distributed in the hope that it will be useful, but WITHOUT ANY
-    WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
-    FOR A PARTICULAR PURPOSE.
-
-    See W3C License http://www.w3.org/Consortium/Legal/ for more details.
-
-    Copyright � 1995 CERN. "This product includes computer software created and
-    made available by CERN. This acknowledgment shall be mentioned in full in
-    any product which includes the CERN computer software included herein or
-    parts thereof." 
-
-glib.h
-
-    This is the public header file for GLIB, a "library of useful routines
-    for C programming" used heavily by the popular GTK+ widget set.
-    <URL:http://www.gtk.org/>
-
-    GLIB is licensed under the GNU Library GPL, version 2.  The copyright
-    is held by Peter Mattis, Spencer Kimball and Josh MacDonald.
diff --git a/foreign/adns.h b/foreign/adns.h
deleted file mode 100644
index c78e5eaf41811164e30dca961f4aeaff1bd3ef65..0000000000000000000000000000000000000000
--- a/foreign/adns.h
+++ /dev/null
@@ -1,815 +0,0 @@
-/*
- * adns.h
- * - adns user-visible API (single-threaded, without any locking)
- */
-/*
- *
- *  This file is
- *    Copyright (C) 1997-1999 Ian Jackson <ian@davenant.greenend.org.uk>
- *
- *  It is part of adns, which is
- *    Copyright (C) 1997-1999 Ian Jackson <ian@davenant.greenend.org.uk>
- *    Copyright (C) 1999 Tony Finch <dot@dotat.at>
- *  
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2, or (at your option)
- *  any later version.
- *  
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- * 
- *  For the benefit of certain LGPL'd `omnibus' software which provides
- *  a uniform interface to various things including adns, I make the
- *  following additional licence.  I do this because the GPL would
- *  otherwise force either the omnibus software to be GPL'd or for the
- *  adns-using part to be distributed separately.
- *  
- *  So, you may also redistribute and/or modify adns.h (but only the
- *  public header file adns.h and not any other part of adns) under the
- *  terms of the GNU Library General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at
- *  your option) any later version.
- *  
- *  Note that adns itself is GPL'd.  Authors of adns-using applications
- *  with GPL-incompatible licences, and people who distribute adns with
- *  applications where the whole distribution is not GPL'd, are still
- *  likely to be in violation of the GPL.  Anyone who wants to do this
- *  should contact Ian Jackson.  Please note that to avoid encouraging
- *  people to infringe the GPL as it applies the body of adns, I think
- *  that if you take advantage of the special exception to redistribute
- *  just adns.h under the LGPL, you should retain this paragraph in its
- *  place in the appropriate copyright statements.
- *
- *
- *  You should have received a copy of the GNU General Public License,
- *  or the GNU Library General Public License, as appropriate, along
- *  with this program; if not, write to the Free Software Foundation,
- *  Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- *
- *  $Id: adns.h,v 1.3 1999-10-29 06:59:19 egnor Exp $
- */
-
-#ifndef ADNS_H_INCLUDED
-#define ADNS_H_INCLUDED
-#ifdef __cplusplus
-extern "C" { /* I really dislike this - iwj. */
-#endif
-
-#include <stdio.h>
-
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <sys/types.h>
-#include <sys/time.h>
-#include <unistd.h>
-
-/* All struct in_addr anywhere in adns are in NETWORK byte order. */
-
-typedef struct adns__state *adns_state;
-typedef struct adns__query *adns_query;
-
-typedef enum {
-  adns_if_noenv=        0x0001, /* do not look at environment */
-  adns_if_noerrprint=   0x0002, /* never print output to stderr (_debug overrides) */
-  adns_if_noserverwarn= 0x0004, /* do not warn to stderr about duff nameservers etc */
-  adns_if_debug=        0x0008, /* enable all output to stderr plus debug msgs */
-  adns_if_noautosys=    0x0010, /* do not make syscalls at every opportunity */
-  adns_if_eintr=        0x0020, /* allow _wait and _synchronous to return EINTR */
-  adns_if_nosigpipe=    0x0040, /* applic has SIGPIPE set to SIG_IGN, do not protect */
-  adns_if_checkc_entex= 0x0100, /* do consistency checks on entry/exit to adns funcs */
-  adns_if_checkc_freq=  0x0300  /* do consistency checks very frequently (slow!) */
-} adns_initflags;
-
-typedef enum {
-  adns_qf_search=          0x00000001, /* use the searchlist */
-  adns_qf_usevc=           0x00000002, /* use a virtual circuit (TCP connection) */
-  adns_qf_owner=           0x00000004, /* fill in the owner field in the answer */
-  adns_qf_quoteok_query=   0x00000010, /* allow quote-requiring chars in query domain */
-  adns_qf_quoteok_cname=   0x00000000, /* allow ... in CNAME we go via - now default */
-  adns_qf_quoteok_anshost= 0x00000040, /* allow ... in things supposed to be hostnames */
-  adns_qf_quotefail_cname= 0x00000080, /* refuse if quote-req chars in CNAME we go via */
-  adns_qf_cname_loose=     0x00000100, /* allow refs to CNAMEs - without, get _s_cname */
-  adns_qf_cname_forbid=    0x00000200, /* don't follow CNAMEs, instead give _s_cname */
-  adns__qf_internalmask=   0x0ff00000
-} adns_queryflags;
-
-typedef enum {
-  adns__rrt_typemask=  0x0ffff,
-  adns__qtf_deref=     0x10000, /* dereference domains and perhaps produce extra data */
-  adns__qtf_mail822=   0x20000, /* make mailboxes be in RFC822 rcpt field format */
-  
-  adns_r_none=               0,
-  
-  adns_r_a=                  1,
-  
-  adns_r_ns_raw=             2,
-  adns_r_ns=                    adns_r_ns_raw|adns__qtf_deref,
-  
-  adns_r_cname=              5,
-  
-  adns_r_soa_raw=            6,
-  adns_r_soa=                   adns_r_soa_raw|adns__qtf_mail822, 
-  
-  adns_r_ptr_raw=           12,
-  adns_r_ptr=                   adns_r_ptr_raw|adns__qtf_deref,
-  
-  adns_r_hinfo=             13,  
-  
-  adns_r_mx_raw=            15,
-  adns_r_mx=                    adns_r_mx_raw|adns__qtf_deref,
-  
-  adns_r_txt=               16,
-  
-  adns_r_rp_raw=            17,
-  adns_r_rp=                    adns_r_rp_raw|adns__qtf_mail822,
-
-  adns_r_addr=                  adns_r_a|adns__qtf_deref
-  
-} adns_rrtype;
-
-/*
- * In queries without qf_quoteok_*, all domains must have standard
- * legal syntax, or you get adns_s_querydomainvalid (if the query
- * domain contains bad characters) or adns_s_answerdomaininvalid (if
- * the answer contains bad characters).
- * 
- * In queries _with_ qf_quoteok_*, domains in the query or response
- * may contain any characters, quoted according to RFC1035 5.1.  On
- * input to adns, the char* is a pointer to the interior of a "
- * delimited string, except that " may appear in it, and on output,
- * the char* is a pointer to a string which would be legal either
- * inside or outside " delimiters, and any characters not usually
- * legal in domain names will be quoted as \X (if the character is
- * 33-126 except \ and ") or \DDD.
- *
- * If the query goes via a CNAME then the canonical name (ie, the
- * thing that the CNAME record refers to) is usually allowed to
- * contain any characters, which will be quoted as above.  With
- * adns_qf_quotefail_cname you get adns_s_answerdomaininvalid when
- * this happens.  (This is a change from version 0.4 and earlier, in
- * which failing the query was the default, and you had to say
- * adns_qf_quoteok_cname to avoid this; that flag is now deprecated.)
- *
- * In version 0.4 and earlier, asking for _raw records containing
- * mailboxes without specifying _qf_quoteok_anshost was silly.  This
- * is no longer the case.  In this version only parts of responses
- * that are actually supposed to be hostnames will be refused by
- * default if quote-requiring characters are found.
- */
-
-/*
- * If you ask for an RR which contains domains which are actually
- * encoded mailboxes, and don't ask for the _raw version, then adns
- * returns the mailbox formatted suitably for an RFC822 recipient
- * header field.  The particular format used is that if the mailbox
- * requires quoting according to the rules in RFC822 then the
- * local-part is quoted in double quotes, which end at the next
- * unescaped double quote.  (\ is the escape char, and is doubled, and
- * is used to escape only \ and ".)  Otherwise the local-part is
- * presented as-is.  In any case this is followed by an @ and the
- * domain.  The domain will not contain any characters not legal in
- * hostnames.  adns will protect the application from local parts
- * containing control characters - these appear to be legal according
- * to RFC822 but are clearly a bad idea.
- *
- * If you ask for the domain with _raw then _no_ checking is done
- * (even on the host part, regardless of adns_qf_quoteok_anshost), and
- * you just get the domain name in master file format.
- *
- * If no mailbox is supplied the returned string will be `.' in either
- * caswe.
- */
-
-typedef enum {
-  adns_s_ok,
-
-  /* locally induced errors */
-  adns_s_nomemory,
-  adns_s_unknownrrtype,
-  adns_s_systemfail,
-
-  adns_s_max_localfail= 29,
-  
-  /* remotely induced errors, detected locally */
-  adns_s_timeout,
-  adns_s_allservfail,
-  adns_s_norecurse,
-  adns_s_invalidresponse,
-  adns_s_unknownformat,
-
-  adns_s_max_remotefail= 59,
-  
-  /* remotely induced errors, reported by remote server to us */
-  adns_s_rcodeservfail,
-  adns_s_rcodeformaterror,
-  adns_s_rcodenotimplemented,
-  adns_s_rcoderefused,
-  adns_s_rcodeunknown,
-
-  adns_s_max_tempfail= 99,
-
-  /* remote configuration errors */
-  adns_s_inconsistent, /* PTR gives domain whose A does not exist and match */
-  adns_s_prohibitedcname, /* CNAME found where eg A expected (not if _qf_loosecname) */
-  adns_s_answerdomaininvalid,
-  adns_s_answerdomaintoolong,
-  adns_s_invaliddata,
-  
-  adns_s_max_misconfig= 199,
-
-  /* permanent problems with the query */
-  adns_s_querydomainwrong,
-  adns_s_querydomaininvalid,
-  adns_s_querydomaintoolong,
-  
-  adns_s_max_misquery= 299,
-
-  /* permanent errors */
-  adns_s_nxdomain,
-  adns_s_nodata,
-
-  adns_s_max_permfail= 499
-  
-} adns_status;
-
-typedef struct {
-  int len;
-  union {
-    struct sockaddr sa;
-    struct sockaddr_in inet;
-  } addr;
-} adns_rr_addr;
-
-typedef struct {
-  char *host;
-  adns_status astatus;
-  int naddrs; /* temp fail => -1, perm fail => 0, s_ok => >0 */
-  adns_rr_addr *addrs;
-} adns_rr_hostaddr;
-
-typedef struct {
-  char *(array[2]);
-} adns_rr_strpair;
-
-typedef struct {
-  int i;
-  adns_rr_hostaddr ha;
-} adns_rr_inthostaddr;
-
-typedef struct {
-  /* Used both for mx_raw, in which case i is the preference and str the domain,
-   * and for txt, in which case each entry has i for the `text' length,
-   * and str for the data (which will have had an extra nul appended
-   * so that if it was plain text it is now a null-terminated string).
-   */
-  int i;
-  char *str;
-} adns_rr_intstr;
-
-typedef struct {
-  adns_rr_intstr array[2];
-} adns_rr_intstrpair;
-
-typedef struct {
-  char *mname, *rname;
-  unsigned long serial, refresh, retry, expire, minimum;
-} adns_rr_soa;
-
-typedef struct {
-  adns_status status;
-  char *cname; /* always NULL if query was for CNAME records */
-  char *owner; /* only set if requested in query flags */
-  adns_rrtype type; /* guaranteed to be same as in query */
-  time_t expires; /* expiry time, defined only if _s_ok, nxdomain or nodata. NOT TTL! */
-  int nrrs, rrsz; /* nrrs is 0 if an error occurs */
-  union {
-    void *untyped;
-    unsigned char *bytes;
-    char *(*str);                     /* ns_raw, cname, ptr, ptr_raw */
-    adns_rr_intstr *(*manyistr);      /* txt (list of strings ends with i=-1, str=0) */
-    adns_rr_addr *addr;               /* addr */
-    struct in_addr *inaddr;           /* a */
-    adns_rr_hostaddr *hostaddr;       /* ns */
-    adns_rr_intstrpair *intstrpair;   /* hinfo */
-    adns_rr_strpair *strpair;         /* rp, rp_raw */
-    adns_rr_inthostaddr *inthostaddr; /* mx */
-    adns_rr_intstr *intstr;           /* mx_raw */
-    adns_rr_soa *soa;                 /* soa, soa_raw */
-  } rrs;
-} adns_answer;
-
-/* Memory management:
- *  adns_state and adns_query are actually pointers to malloc'd state;
- *  On submission questions are copied, including the owner domain;
- *  Answers are malloc'd as a single piece of memory; pointers in the
- *  answer struct point into further memory in the answer.
- * query_io:
- *  Must always be non-null pointer;
- *  If *query_io is 0 to start with then any query may be returned;
- *  If *query_io is !0 adns_query then only that query may be returned.
- *  If the call is successful, *query_io, *answer_r, and *context_r
- *  will all be set.
- * Errors:
- *  Return values are 0 or an errno value.
- *
- *  For _init, _init_strcfg, _submit and _synchronous, system errors
- *  (eg, failure to create sockets, malloc failure, etc.) return errno
- *  values.
- * 
- *  For _wait and _check failures are reported in the answer
- *  structure, and only 0, ESRCH or (for _check) EAGAIN is
- *  returned: if no (appropriate) requests are done adns_check returns
- *  EAGAIN; if no (appropriate) requests are outstanding both
- *  adns_query and adns_wait return ESRCH.
- *
- *  Additionally, _wait can return EINTR if you set adns_if_eintr.
- *
- *  All other errors (nameserver failure, timed out connections, &c)
- *  are returned in the status field of the answer.  After a
- *  successful _wait or _check, if status is nonzero then nrrs will be
- *  0, otherwise it will be >0.  type will always be the type
- *  requested.
- */
-
-int adns_init(adns_state *newstate_r, int flags /*adns_initflags*/,
-	      FILE *diagfile /*0=>stderr*/);
-
-int adns_init_strcfg(adns_state *newstate_r, int flags /*adns_initflags*/,
-		     FILE *diagfile /*0=>discard*/, const char *configtext);
-
-/* Configuration:
- *  adns_init reads /etc/resolv.conf, which is expected to be (broadly
- *  speaking) in the format expected by libresolv.  adns_init_strcfg
- *  is instead passed a string which is interpreted as if it were the
- *  contents of resolv.conf.  In general, configuration which is set
- *  later overrides any that is set earlier.
- *
- * Standard directives understood in resolv.conf:
- * 
- *  nameserver <address>
- *   Must be followed by the IP address of a nameserver.  Several
- *   nameservers may be specified, and they will be tried in the order
- *   found.  There is a compiled in limit, currently 5, on the number
- *   of nameservers.  (libresolv supports only 3 nameservers.)
- *
- *  search <domain> ...
- *   Specifies the search list for queries which specify
- *   adns_qf_search.  This is a list of domains to append to the query
- *   domain.  The query domain will be tried as-is either before all
- *   of these or after them, depending on the ndots option setting
- *   (see below).
- *
- *  domain <domain>
- *   This is present only for backward compatibility with obsolete
- *   versions of libresolv.  It should not be used, and is interpreted
- *   by adns as if it were `search' - note that this is subtly
- *   different to libresolv's interpretation of this directive.
- *
- *  sortlist <addr>/<mask> ...
- *   Should be followed by a sequence of IP-address and netmask pairs,
- *   separated by spaces.  They may be specified as
- *   eg. 172.30.206.0/24 or 172.30.206.0/255.255.255.0.  Currently up
- *   to 15 pairs may be specified (but note that libresolv only
- *   supports up to 10).
- *
- *  options
- *   Should followed by one or more options, separated by spaces.
- *   Each option consists of an option name, followed by optionally
- *   a colon and a value.  Options are listed below.
- *
- * Non-standard directives understood in resolv.conf:
- *
- *  clearnameservers
- *   Clears the list of nameservers, so that further nameserver lines
- *   start again from the beginning.
- *
- *  include <filename>
- *   The specified file will be read.
- *
- * Additionally, adns will ignore lines in resolv.conf which start with a #.
- *
- * Standard options understood:
- *
- *  debug
- *   Enables debugging output from the resolver, which will be written
- *   to stderr.
- *
- *  ndots:<count>
- *   Affects whether queries with adns_qf_search will be tried first
- *   without adding domains from the searchlist, or whether the bare
- *   query domain will be tried last.  Queries which contain at least
- *   <count> dots will be tried bare first.  The default is 1.
- *
- * Non-standard options understood:
- *
- *  adns_checkc:none
- *  adns_checkc:entex
- *  adns_checkc:freq
- *   Changes the consistency checking frequency; this overrides the
- *   setting of adns_if_check_entex, adns_if_check_freq, or neither,
- *   in the flags passed to adns_init.
- * 
- * There are a number of environment variables which can modify the
- * behaviour of adns.  They take effect only if adns_init is used, and
- * the caller of adns_init can disable them using adns_if_noenv.  In
- * each case there is both a FOO and an ADNS_FOO; the latter is
- * interpreted later so that it can override the former.  Unless
- * otherwise stated, environment variables are interpreted after
- * resolv.conf is read, in the order they are listed here.
- *
- *  RES_CONF, ADNS_RES_CONF
- *   A filename, whose contets are in the format of resolv.conf.
- *
- *  RES_CONF_TEXT, ADNS_RES_CONF_TEXT
- *   A string in the format of resolv.conf.
- *
- *  RES_OPTIONS, ADNS_RES_OPTIONS
- *   These are parsed as if they appeared in the `options' line of a
- *   resolv.conf.  In addition to being parsed at this point in the
- *   sequence, they are also parsed at the very beginning before
- *   resolv.conf or any other environment variables are read, so that
- *   any debug option can affect the processing of the configuration.
- *
- *  LOCALDOMAIN, ADNS_LOCALDOMAIN
- *   These are interpreted as if their contents appeared in a `search'
- *   line in resolv.conf.
- */
-
-int adns_synchronous(adns_state ads,
-		     const char *owner,
-		     adns_rrtype type,
-		     int flags /*adns_queryflags*/,
-		     adns_answer **answer_r);
-
-/* NB: if you set adns_if_noautosys then _submit and _check do not
- * make any system calls; you must use some of the asynch-io event
- * processing functions to actually get things to happen.
- */
-
-int adns_submit(adns_state ads,
-		const char *owner,
-		adns_rrtype type,
-		int flags /*adns_queryflags*/,
-		void *context,
-		adns_query *query_r);
-
-/* The owner should be quoted in master file format. */
-
-int adns_check(adns_state ads,
-	       adns_query *query_io,
-	       adns_answer **answer_r,
-	       void **context_r);
-
-int adns_wait(adns_state ads,
-	      adns_query *query_io,
-	      adns_answer **answer_r,
-	      void **context_r);
-
-/* same as adns_wait but uses poll(2) internally */
-int adns_wait_poll(adns_state ads,
-		   adns_query *query_io,
-		   adns_answer **answer_r,
-		   void **context_r);
-
-void adns_cancel(adns_query query);
-
-/* The adns_query you get back from _submit is valid (ie, can be
- * legitimately passed into adns functions) until it is returned by
- * adns_check or adns_wait, or passed to adns_cancel.  After that it
- * must not be used.  You can rely on it not being reused until the
- * first adns_submit or _transact call using the same adns_state after
- * it became invalid, so you may compare it for equality with other
- * query handles until you next call _query or _transact.
- *
- * _submit and _synchronous return ENOSYS if they don't understand the
- * query type.
- */
-
-int adns_submit_reverse(adns_state ads,
-			const struct sockaddr *addr,
-			adns_rrtype type,
-			int flags /*adns_queryflags*/,
-			void *context,
-			adns_query *query_r);
-/* type must be _r_ptr or _r_ptr_raw.  _qf_search is ignored.
- * addr->sa_family must be AF_INET or you get ENOSYS.
- */
-
-void adns_finish(adns_state ads);
-/* You may call this even if you have queries outstanding;
- * they will be cancelled.
- */
-
-
-void adns_forallqueries_begin(adns_state ads);
-adns_query adns_forallqueries_next(adns_state ads, void **context_r);
-/* Iterator functions, which you can use to loop over the outstanding
- * (submitted but not yet successfuly checked/waited) queries.
- *
- * You can only have one iteration going at once.  You may call _begin
- * at any time; after that, an iteration will be in progress.  You may
- * only call _next when an iteration is in progress - anything else
- * may coredump.  The iteration remains in progress until _next
- * returns 0, indicating that all the queries have been walked over,
- * or ANY other adns function is called with the same adns_state (or a
- * query in the same adns_state).  There is no need to explicitly
- * finish an iteration.
- *
- * context_r may be 0.  *context_r may not be set when _next returns 0.
- */
-
-void adns_checkconsistency(adns_state ads, adns_query qu);
-/* Checks the consistency of adns's internal data structures.
- * If any error is found, the program will abort().
- * You may pass 0 for qu; if you pass non-null then additional checks
- * are done to make sure that qu is a valid query.
- */
-
-/*
- * Example expected/legal calling sequence for submit/check/wait:
- *  adns_init
- *  adns_submit 1
- *  adns_submit 2
- *  adns_submit 3
- *  adns_wait 1
- *  adns_check 3 -> EAGAIN
- *  adns_wait 2
- *  adns_wait 3
- *  ....
- *  adns_finish
- */
-
-/*
- * Entrypoints for generic asynch io:
- * (these entrypoints are not very useful except in combination with *
- * some of the other I/O model calls which can tell you which fds to
- * be interested in):
- *
- * Note that any adns call may cause adns to open and close fds, so
- * you must call beforeselect or beforepoll again just before
- * blocking, or you may not have an up-to-date list of it's fds.
- */
-
-int adns_processany(adns_state ads);
-/* Gives adns flow-of-control for a bit.  This will never block, and
- * can be used with any threading/asynch-io model.  If some error
- * occurred which might cause an event loop to spin then the errno
- * value is returned.
- */
-
-int adns_processreadable(adns_state ads, int fd, const struct timeval *now);
-int adns_processwriteable(adns_state ads, int fd, const struct timeval *now);
-int adns_processexceptional(adns_state ads, int fd, const struct timeval *now);
-/* Gives adns flow-of-control so that it can process incoming data
- * from, or send outgoing data via, fd.  Very like _processany.  If it
- * returns zero then fd will no longer be readable or writeable
- * (unless of course more data has arrived since).  adns will _only_
- * use that fd and only in the manner specified, regardless of whether
- * adns_if_noautosys was specified.
- *
- * adns_processexceptional should be called when select(2) reports an
- * exceptional condition, or poll(2) reports POLLPRI.
- *
- * It is fine to call _processreabable or _processwriteable when the
- * fd is not ready, or with an fd that doesn't belong to adns; it will
- * then just return 0.
- *
- * If some error occurred which might prevent an event loop to spin
- * then the errno value is returned.
- */
-
-void adns_processtimeouts(adns_state ads, const struct timeval *now);
-/* Gives adns flow-of-control so that it can process any timeouts
- * which might have happened.  Very like _processreadable/writeable.
- *
- * now may be 0; if it isn't, *now must be the current time, recently
- * obtained from gettimeofday.
- */
-
-void adns_firsttimeout(adns_state ads,
-		       struct timeval **tv_mod, struct timeval *tv_buf,
-		       struct timeval now);
-/* Asks adns when it would first like the opportunity to time
- * something out.  now must be the current time, from gettimeofday.
- * 
- * If tv_mod points to 0 then tv_buf must be non-null, and
- * _firsttimeout will fill in *tv_buf with the time until the first
- * timeout, and make *tv_mod point to tv_buf.  If adns doesn't have
- * anything that might need timing out it will leave *tv_mod as 0.
- *
- * If *tv_mod is not 0 then tv_buf is not used.  adns will update
- * *tv_mod if it has any earlier timeout, and leave it alone if it
- * doesn't.
- *
- * This call will not actually do any I/O, or change the fds that adns
- * is using.  It always succeeds and never blocks.
- */
-
-void adns_globalsystemfailure(adns_state ads);
-/* If serious problem(s) happen which globally affect your ability to
- * interact properly with adns, or adns's ability to function
- * properly, you or adns can call this function.
- *
- * All currently outstanding queries will be made to fail with
- * adns_s_systemfail, and adns will close any stream sockets it has
- * open.
- *
- * This is used by adns, for example, if gettimeofday() fails.
- * Without this the program's event loop might start to spin !
- *
- * This call will never block.
- */
-
-/*
- * Entrypoints for select-loop based asynch io:
- */
-
-void adns_beforeselect(adns_state ads, int *maxfd, fd_set *readfds,
-		       fd_set *writefds, fd_set *exceptfds,
-		       struct timeval **tv_mod, struct timeval *tv_buf,
-		       const struct timeval *now);
-/* Find out file descriptors adns is interested in, and when it would
- * like the opportunity to time something out.  If you do not plan to
- * block then tv_mod may be 0.  Otherwise, tv_mod and tv_buf are as
- * for adns_firsttimeout.  readfds, writefds, exceptfds and maxfd_io may
- * not be 0.
- *
- * If *now is not 0 then this will never actually do any I/O, or
- * change the fds that adns is using or the timeouts it wants.  In any
- * case it won't block.
- */
-
-void adns_afterselect(adns_state ads, int maxfd, const fd_set *readfds,
-		      const fd_set *writefds, const fd_set *exceptfds,
-		      const struct timeval *now);
-/* Gives adns flow-of-control for a bit; intended for use after
- * select.  This is just a fancy way of calling adns_processreadable/
- * writeable/timeouts as appropriate, as if select had returned the
- * data being passed.  Always succeeds.
- */
-
-/*
- * Example calling sequence:
- *
- *  adns_init _noautosys
- *  loop {
- *   adns_beforeselect
- *   select
- *   adns_afterselect
- *   ...
- *   adns_submit / adns_check
- *   ...
- *  }
- */
-
-/*
- * Entrypoints for poll-loop based asynch io:
- */
-
-struct pollfd;
-/* In case your system doesn't have it or you forgot to include
- * <sys/poll.h>, to stop the following declarations from causing
- * problems.  If your system doesn't have poll then the following
- * entrypoints will not be defined in libadns.  Sorry !
- */
-
-int adns_beforepoll(adns_state ads, struct pollfd *fds, int *nfds_io, int *timeout_io,
-		    const struct timeval *now);
-/* Finds out which fd's adns is interested in, and when it would like
- * to be able to time things out.  This is in a form suitable for use
- * with poll(2).
- * 
- * On entry, usually fds should point to at least *nfds_io structs.
- * adns will fill up to that many structs will information for poll,
- * and record in *nfds_io how many structs it filled.  If it wants to
- * listen for more structs then *nfds_io will be set to the number
- * required and _beforepoll will return ERANGE.
- *
- * You may call _beforepoll with fds==0 and *nfds_io 0, in which case
- * adns will fill in the number of fds that it might be interested in
- * in *nfds_io, and always return either 0 (if it is not interested in
- * any fds) or ERANGE (if it is).
- *
- * NOTE that (unless now is 0) adns may acquire additional fds
- * from one call to the next, so you must put adns_beforepoll in a
- * loop, rather than assuming that the second call (with the buffer
- * size requested by the first) will not return ERANGE.
- *
- * adns only ever sets POLLIN, POLLOUT and POLLPRI in its pollfd
- * structs, and only ever looks at those bits.  POLLPRI is required to
- * detect TCP Urgent Data (which should not be used by a DNS server)
- * so that adns can know that the TCP stream is now useless.
- *
- * In any case, *timeout_io should be a timeout value as for poll(2),
- * which adns will modify downwards as required.  If the caller does
- * not plan to block then *timeout_io should be 0 on entry, or
- * alternatively, timeout_io may be 0.  (Alternatively, the caller may
- * use _beforeselect with timeout_io==0 to find out about file
- * descriptors, and use _firsttimeout is used to find out when adns
- * might want to time something out.)
- *
- * adns_beforepoll will return 0 on success, and will not fail for any
- * reason other than the fds buffer being too small (ERANGE).
- *
- * This call will never actually do any I/O.  If you supply the
- * current time it will not change the fds that adns is using or the
- * timeouts it wants.
- *
- * In any case this call won't block.
- */
-
-#define ADNS_POLLFDS_RECOMMENDED 2
-/* If you allocate an fds buf with at least RECOMMENDED entries then
- * you are unlikely to need to enlarge it.  You are recommended to do
- * so if it's convenient.  However, you must be prepared for adns to
- * require more space than this.
- */
-
-void adns_afterpoll(adns_state ads, const struct pollfd *fds, int nfds,
-		    const struct timeval *now);
-/* Gives adns flow-of-control for a bit; intended for use after
- * poll(2).  fds and nfds should be the results from poll().  pollfd
- * structs mentioning fds not belonging to adns will be ignored.
- */
-
-
-adns_status adns_rr_info(adns_rrtype type,
-			 const char **rrtname_r, const char **fmtname_r,
-			 int *len_r,
-			 const void *datap, char **data_r);
-/*
- * Get information about a query type, or convert reply data to a
- * textual form.  type must be specified, and the official name of the
- * corresponding RR type will be returned in *rrtname_r, and
- * information about the processing style in *fmtname_r.  The length
- * of the table entry in an answer for that type will be returned in
- * in *len_r.  Any or all of rrtname_r, fmtname_r and len_r may be 0.
- * If fmtname_r is non-null then *fmtname_r may be null on return,
- * indicating that no special processing is involved.
- *
- * data_r be must be non-null iff datap is.  In this case *data_r will
- * be set to point to a string pointing to a representation of the RR
- * data in master file format.  (The owner name, timeout, class and
- * type will not be present - only the data part of the RR.)  The
- * memory will have been obtained from malloc() and must be freed by
- * the caller.
- *
- * Usually this routine will succeed.  Possible errors include:
- *  adns_s_nomemory
- *  adns_s_rrtypeunknown
- *  adns_s_invaliddata (*datap contained garbage)
- * If an error occurs then no memory has been allocated,
- * and *rrtname_r, *fmtname_r, *len_r and *data_r are undefined.
- *
- * There are some adns-invented data formats which are not official
- * master file formats.  These include:
- *
- * Mailboxes if __qtf_mail822: these are just included as-is.
- *
- * Addresses (adns_rr_addr): these may be of pretty much any type.
- * The representation is in two parts: first, a word for the address
- * family (ie, in AF_XXX, the XXX), and then one or more items for the
- * address itself, depending on the format.  For an IPv4 address the
- * syntax is INET followed by the dotted quad (from inet_ntoa).
- * Currently only IPv4 is supported.
- *
- * Text strings (as in adns_rr_txt) appear inside double quotes, and
- * use \" and \\ to represent " and \, and \xHH to represent
- * characters not in the range 32-126.
- *
- * Hostname with addresses (adns_rr_hostaddr): this consists of the
- * hostname, as usual, followed by the adns_status value, as an
- * abbreviation, and then a descriptive string (encoded as if it were
- * a piece of text), for the address lookup, followed by zero or more
- * addresses enclosed in ( and ).  If the result was a permanent
- * failure, then a single ?  appears instead of the ( ).  If the
- * result was a temporary failure then an empty pair of parentheses
- * appears (which a space in between).  For example, one of the NS
- * records for greenend.org.uk comes out like
- *  ns.chiark.greenend.org.uk ok "OK" ( INET 195.224.76.132 )
- * an MX referring to a nonexistent host might come out like:
- *  50 sun2.nsfnet-relay.ac.uk nxdomain "No such domain" ( )
- * and if nameserver information is not available you might get:
- *  dns2.spong.dyn.ml.org timeout "DNS query timed out" ?
- */
-
-const char *adns_strerror(adns_status st);
-const char *adns_errabbrev(adns_status st);
-const char *adns_errtypeabbrev(adns_status st);
-/* Like strerror but for adns_status values.  adns_errabbrev returns
- * the abbreviation of the error - eg, for adns_s_timeout it returns
- * "timeout".  adns_errtypeabbrev returns the abbreviation of the
- * error class: ie, for values up to adns_s_max_XXX it will return the
- * string XXX.  You MUST NOT call these functions with status values
- * not returned by the same adns library.
- */
-
-#ifdef __cplusplus
-} /* end of extern "C" */
-#endif
-#endif
diff --git a/foreign/glib.h b/foreign/glib.h
deleted file mode 100644
index 8618bc56f51c94db7cc55bbe6368e03fb8bbfbf4..0000000000000000000000000000000000000000
--- a/foreign/glib.h
+++ /dev/null
@@ -1,2795 +0,0 @@
-/* GLIB - Library of useful routines for C programming
- * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the GLib Team and others 1997-1999.  See the AUTHORS
- * file for a list of people on the GLib Team.  See the ChangeLog
- * files for a list of changes.  These files are distributed with
- * GLib at ftp://ftp.gtk.org/pub/gtk/. 
- */
-
-#ifndef __G_LIB_H__
-#define __G_LIB_H__
-
-/* system specific config file glibconfig.h provides definitions for
- * the extrema of many of the standard types. These are:
- *
- *  G_MINSHORT, G_MAXSHORT
- *  G_MININT, G_MAXINT
- *  G_MINLONG, G_MAXLONG
- *  G_MINFLOAT, G_MAXFLOAT
- *  G_MINDOUBLE, G_MAXDOUBLE
- *
- * It also provides the following typedefs:
- *
- *  gint8, guint8
- *  gint16, guint16
- *  gint32, guint32
- *  gint64, guint64
- *
- * It defines the G_BYTE_ORDER symbol to one of G_*_ENDIAN (see later in
- * this file). 
- *
- * And it provides a way to store and retrieve a `gint' in/from a `gpointer'.
- * This is useful to pass an integer instead of a pointer to a callback.
- *
- *  GINT_TO_POINTER(i), GUINT_TO_POINTER(i)
- *  GPOINTER_TO_INT(p), GPOINTER_TO_UINT(p)
- *
- * Finally, it provide the following wrappers to STDC functions:
- *
- *  g_ATEXIT
- *    To register hooks which are executed on exit().
- *    Usually a wrapper for STDC atexit.
- *
- *  void *g_memmove(void *dest, const void *src, guint count);
- *    A wrapper for STDC memmove, or an implementation, if memmove doesn't
- *    exist.  The prototype looks like the above, give or take a const,
- *    or size_t.
- */
-#include <glibconfig.h>
-
-/* include varargs functions for assertment macros
- */
-#include <stdarg.h>
-
-/* optionally feature DMALLOC memory allocation debugger
- */
-#ifdef USE_DMALLOC
-#include "dmalloc.h"
-#endif
-
-
-#ifdef NATIVE_WIN32
-
-/* On native Win32, directory separator is the backslash, and search path
- * separator is the semicolon.
- */
-#define G_DIR_SEPARATOR '\\'
-#define G_DIR_SEPARATOR_S "\\"
-#define G_SEARCHPATH_SEPARATOR ';'
-#define G_SEARCHPATH_SEPARATOR_S ";"
-
-#else  /* !NATIVE_WIN32 */
-
-/* Unix */
-
-#define G_DIR_SEPARATOR '/'
-#define G_DIR_SEPARATOR_S "/"
-#define G_SEARCHPATH_SEPARATOR ':'
-#define G_SEARCHPATH_SEPARATOR_S ":"
-
-#endif /* !NATIVE_WIN32 */
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-
-/* Provide definitions for some commonly used macros.
- *  Some of them are only provided if they haven't already
- *  been defined. It is assumed that if they are already
- *  defined then the current definition is correct.
- */
-#ifndef	NULL
-#define	NULL	((void*) 0)
-#endif
-
-#ifndef	FALSE
-#define	FALSE	(0)
-#endif
-
-#ifndef	TRUE
-#define	TRUE	(!FALSE)
-#endif
-
-#undef	MAX
-#define MAX(a, b)  (((a) > (b)) ? (a) : (b))
-
-#undef	MIN
-#define MIN(a, b)  (((a) < (b)) ? (a) : (b))
-
-#undef	ABS
-#define ABS(a)	   (((a) < 0) ? -(a) : (a))
-
-#undef	CLAMP
-#define CLAMP(x, low, high)  (((x) > (high)) ? (high) : (((x) < (low)) ? (low) : (x)))
-
-
-/* Define G_VA_COPY() to do the right thing for copying va_list variables.
- * glibconfig.h may have already defined G_VA_COPY as va_copy or __va_copy.
- */
-#if !defined (G_VA_COPY)
-#  if defined (__GNUC__) && defined (__PPC__) && (defined (_CALL_SYSV) || defined (_WIN32))
-#  define G_VA_COPY(ap1, ap2)	  (*(ap1) = *(ap2))
-#  elif defined (G_VA_COPY_AS_ARRAY)
-#  define G_VA_COPY(ap1, ap2)	  g_memmove ((ap1), (ap2), sizeof (va_list))
-#  else /* va_list is a pointer */
-#  define G_VA_COPY(ap1, ap2)	  ((ap1) = (ap2))
-#  endif /* va_list is a pointer */
-#endif /* !G_VA_COPY */
-
-
-/* Provide convenience macros for handling structure
- * fields through their offsets.
- */
-#define G_STRUCT_OFFSET(struct_type, member)	\
-    ((gulong) ((gchar*) &((struct_type*) 0)->member))
-#define G_STRUCT_MEMBER_P(struct_p, struct_offset)   \
-    ((gpointer) ((gchar*) (struct_p) + (gulong) (struct_offset)))
-#define G_STRUCT_MEMBER(member_type, struct_p, struct_offset)   \
-    (*(member_type*) G_STRUCT_MEMBER_P ((struct_p), (struct_offset)))
-
-
-/* inlining hassle. for compilers that don't allow the `inline' keyword,
- * mostly because of strict ANSI C compliance or dumbness, we try to fall
- * back to either `__inline__' or `__inline'.
- * we define G_CAN_INLINE, if the compiler seems to be actually
- * *capable* to do function inlining, in which case inline function bodys
- * do make sense. we also define G_INLINE_FUNC to properly export the
- * function prototypes if no inlining can be performed.
- * we special case most of the stuff, so inline functions can have a normal
- * implementation by defining G_INLINE_FUNC to extern and G_CAN_INLINE to 1.
- */
-#ifndef G_INLINE_FUNC
-#  define G_CAN_INLINE 1
-#endif
-#ifdef G_HAVE_INLINE
-#  if defined (__GNUC__) && defined (__STRICT_ANSI__)
-#    undef inline
-#    define inline __inline__
-#  endif
-#else /* !G_HAVE_INLINE */
-#  undef inline
-#  if defined (G_HAVE___INLINE__)
-#    define inline __inline__
-#  else /* !inline && !__inline__ */
-#    if defined (G_HAVE___INLINE)
-#      define inline __inline
-#    else /* !inline && !__inline__ && !__inline */
-#      define inline /* don't inline, then */
-#      ifndef G_INLINE_FUNC
-#	 undef G_CAN_INLINE
-#      endif
-#    endif
-#  endif
-#endif
-#ifndef G_INLINE_FUNC
-#  ifdef __GNUC__
-#    ifdef __OPTIMIZE__
-#      define G_INLINE_FUNC extern inline
-#    else
-#      undef G_CAN_INLINE
-#      define G_INLINE_FUNC extern
-#    endif
-#  else /* !__GNUC__ */
-#    ifdef G_CAN_INLINE
-#      define G_INLINE_FUNC static inline
-#    else
-#      define G_INLINE_FUNC extern
-#    endif
-#  endif /* !__GNUC__ */
-#endif /* !G_INLINE_FUNC */
-
-
-/* Provide simple macro statement wrappers (adapted from Perl):
- *  G_STMT_START { statements; } G_STMT_END;
- *  can be used as a single statement, as in
- *  if (x) G_STMT_START { ... } G_STMT_END; else ...
- *
- *  For gcc we will wrap the statements within `({' and `})' braces.
- *  For SunOS they will be wrapped within `if (1)' and `else (void) 0',
- *  and otherwise within `do' and `while (0)'.
- */
-#if !(defined (G_STMT_START) && defined (G_STMT_END))
-#  if defined (__GNUC__) && !defined (__STRICT_ANSI__) && !defined (__cplusplus)
-#    define G_STMT_START	(void)(
-#    define G_STMT_END		)
-#  else
-#    if (defined (sun) || defined (__sun__))
-#      define G_STMT_START	if (1)
-#      define G_STMT_END	else (void)0
-#    else
-#      define G_STMT_START	do
-#      define G_STMT_END	while (0)
-#    endif
-#  endif
-#endif
-
-
-/* Provide macros to feature the GCC function attribute.
- */
-#if	__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ > 4)
-#define G_GNUC_PRINTF( format_idx, arg_idx )	\
-  __attribute__((format (printf, format_idx, arg_idx)))
-#define G_GNUC_SCANF( format_idx, arg_idx )	\
-  __attribute__((format (scanf, format_idx, arg_idx)))
-#define G_GNUC_FORMAT( arg_idx )		\
-  __attribute__((format_arg (arg_idx)))
-#define G_GNUC_NORETURN				\
-  __attribute__((noreturn))
-#define G_GNUC_CONST				\
-  __attribute__((const))
-#define G_GNUC_UNUSED				\
-  __attribute__((unused))
-#else	/* !__GNUC__ */
-#define G_GNUC_PRINTF( format_idx, arg_idx )
-#define G_GNUC_SCANF( format_idx, arg_idx )
-#define G_GNUC_FORMAT( arg_idx )
-#define G_GNUC_NORETURN
-#define G_GNUC_CONST
-#define	G_GNUC_UNUSED
-#endif	/* !__GNUC__ */
-
-
-/* Wrap the gcc __PRETTY_FUNCTION__ and __FUNCTION__ variables with
- * macros, so we can refer to them as strings unconditionally.
- */
-#ifdef	__GNUC__
-#define	G_GNUC_FUNCTION		__FUNCTION__
-#define	G_GNUC_PRETTY_FUNCTION	__PRETTY_FUNCTION__
-#else	/* !__GNUC__ */
-#define	G_GNUC_FUNCTION		""
-#define	G_GNUC_PRETTY_FUNCTION	""
-#endif	/* !__GNUC__ */
-
-/* we try to provide a usefull equivalent for ATEXIT if it is
- * not defined, but use is actually abandoned. people should
- * use g_atexit() instead.
- */
-#ifndef ATEXIT
-# define ATEXIT(proc)	g_ATEXIT(proc)
-#else
-# define G_NATIVE_ATEXIT
-#endif /* ATEXIT */
-
-/* Hacker macro to place breakpoints for elected machines.
- * Actual use is strongly deprecated of course ;)
- */
-#if defined (__i386__) && defined (__GNUC__) && __GNUC__ >= 2
-#define	G_BREAKPOINT()		G_STMT_START{ __asm__ __volatile__ ("int $03"); }G_STMT_END
-#elif defined (__alpha__) && defined (__GNUC__) && __GNUC__ >= 2
-#define	G_BREAKPOINT()		G_STMT_START{ __asm__ __volatile__ ("bpt"); }G_STMT_END
-#else	/* !__i386__ && !__alpha__ */
-#define	G_BREAKPOINT()
-#endif	/* __i386__ */
-
-
-/* Provide macros for easily allocating memory. The macros
- *  will cast the allocated memory to the specified type
- *  in order to avoid compiler warnings. (Makes the code neater).
- */
-
-#ifdef __DMALLOC_H__
-#  define g_new(type, count)		(ALLOC (type, count))
-#  define g_new0(type, count)		(CALLOC (type, count))
-#  define g_renew(type, mem, count)	(REALLOC (mem, type, count))
-#else /* __DMALLOC_H__ */
-#  define g_new(type, count)	  \
-      ((type *) g_malloc ((unsigned) sizeof (type) * (count)))
-#  define g_new0(type, count)	  \
-      ((type *) g_malloc0 ((unsigned) sizeof (type) * (count)))
-#  define g_renew(type, mem, count)	  \
-      ((type *) g_realloc (mem, (unsigned) sizeof (type) * (count)))
-#endif /* __DMALLOC_H__ */
-
-#define g_mem_chunk_create(type, pre_alloc, alloc_type)	( \
-  g_mem_chunk_new (#type " mem chunks (" #pre_alloc ")", \
-		   sizeof (type), \
-		   sizeof (type) * (pre_alloc), \
-		   (alloc_type)) \
-)
-#define g_chunk_new(type, chunk)	( \
-  (type *) g_mem_chunk_alloc (chunk) \
-)
-#define g_chunk_new0(type, chunk)	( \
-  (type *) g_mem_chunk_alloc0 (chunk) \
-)
-#define g_chunk_free(mem, mem_chunk)	G_STMT_START { \
-  g_mem_chunk_free ((mem_chunk), (mem)); \
-} G_STMT_END
-
-
-#define g_string(x) #x
-
-
-/* Provide macros for error handling. The "assert" macros will
- *  exit on failure. The "return" macros will exit the current
- *  function. Two different definitions are given for the macros
- *  if G_DISABLE_ASSERT is not defined, in order to support gcc's
- *  __PRETTY_FUNCTION__ capability.
- */
-
-#ifdef G_DISABLE_ASSERT
-
-#define g_assert(expr)
-#define g_assert_not_reached()
-
-#else /* !G_DISABLE_ASSERT */
-
-#ifdef __GNUC__
-
-#define g_assert(expr)			G_STMT_START{		\
-     if (!(expr))						\
-       g_log (G_LOG_DOMAIN,					\
-	      G_LOG_LEVEL_ERROR,				\
-	      "file %s: line %d (%s): assertion failed: (%s)",	\
-	      __FILE__,						\
-	      __LINE__,						\
-	      __PRETTY_FUNCTION__,				\
-	      #expr);			}G_STMT_END
-
-#define g_assert_not_reached()		G_STMT_START{		\
-     g_log (G_LOG_DOMAIN,					\
-	    G_LOG_LEVEL_ERROR,					\
-	    "file %s: line %d (%s): should not be reached",	\
-	    __FILE__,						\
-	    __LINE__,						\
-	    __PRETTY_FUNCTION__);	}G_STMT_END
-
-#else /* !__GNUC__ */
-
-#define g_assert(expr)			G_STMT_START{		\
-     if (!(expr))						\
-       g_log (G_LOG_DOMAIN,					\
-	      G_LOG_LEVEL_ERROR,				\
-	      "file %s: line %d: assertion failed: (%s)",	\
-	      __FILE__,						\
-	      __LINE__,						\
-	      #expr);			}G_STMT_END
-
-#define g_assert_not_reached()		G_STMT_START{	\
-     g_log (G_LOG_DOMAIN,				\
-	    G_LOG_LEVEL_ERROR,				\
-	    "file %s: line %d: should not be reached",	\
-	    __FILE__,					\
-	    __LINE__);		}G_STMT_END
-
-#endif /* __GNUC__ */
-
-#endif /* !G_DISABLE_ASSERT */
-
-
-#ifdef G_DISABLE_CHECKS
-
-#define g_return_if_fail(expr)
-#define g_return_val_if_fail(expr,val)
-
-#else /* !G_DISABLE_CHECKS */
-
-#ifdef __GNUC__
-
-#define g_return_if_fail(expr)		G_STMT_START{			\
-     if (!(expr))							\
-       {								\
-	 g_log (G_LOG_DOMAIN,						\
-		G_LOG_LEVEL_CRITICAL,					\
-		"file %s: line %d (%s): assertion `%s' failed.",	\
-		__FILE__,						\
-		__LINE__,						\
-		__PRETTY_FUNCTION__,					\
-		#expr);							\
-	 return;							\
-       };				}G_STMT_END
-
-#define g_return_val_if_fail(expr,val)	G_STMT_START{			\
-     if (!(expr))							\
-       {								\
-	 g_log (G_LOG_DOMAIN,						\
-		G_LOG_LEVEL_CRITICAL,					\
-		"file %s: line %d (%s): assertion `%s' failed.",	\
-		__FILE__,						\
-		__LINE__,						\
-		__PRETTY_FUNCTION__,					\
-		#expr);							\
-	 return val;							\
-       };				}G_STMT_END
-
-#else /* !__GNUC__ */
-
-#define g_return_if_fail(expr)		G_STMT_START{		\
-     if (!(expr))						\
-       {							\
-	 g_log (G_LOG_DOMAIN,					\
-		G_LOG_LEVEL_CRITICAL,				\
-		"file %s: line %d: assertion `%s' failed.",	\
-		__FILE__,					\
-		__LINE__,					\
-		#expr);						\
-	 return;						\
-       };				}G_STMT_END
-
-#define g_return_val_if_fail(expr, val)	G_STMT_START{		\
-     if (!(expr))						\
-       {							\
-	 g_log (G_LOG_DOMAIN,					\
-		G_LOG_LEVEL_CRITICAL,				\
-		"file %s: line %d: assertion `%s' failed.",	\
-		__FILE__,					\
-		__LINE__,					\
-		#expr);						\
-	 return val;						\
-       };				}G_STMT_END
-
-#endif /* !__GNUC__ */
-
-#endif /* !G_DISABLE_CHECKS */
-
-
-/* Provide type definitions for commonly used types.
- *  These are useful because a "gint8" can be adjusted
- *  to be 1 byte (8 bits) on all platforms. Similarly and
- *  more importantly, "gint32" can be adjusted to be
- *  4 bytes (32 bits) on all platforms.
- */
-
-typedef char   gchar;
-typedef short  gshort;
-typedef long   glong;
-typedef int    gint;
-typedef gint   gboolean;
-
-typedef unsigned char	guchar;
-typedef unsigned short	gushort;
-typedef unsigned long	gulong;
-typedef unsigned int	guint;
-
-typedef float	gfloat;
-typedef double	gdouble;
-
-/* HAVE_LONG_DOUBLE doesn't work correctly on all platforms.
- * Since gldouble isn't used anywhere, just disable it for now */
-
-#if 0
-#ifdef HAVE_LONG_DOUBLE
-typedef long double gldouble;
-#else /* HAVE_LONG_DOUBLE */
-typedef double gldouble;
-#endif /* HAVE_LONG_DOUBLE */
-#endif /* 0 */
-
-typedef void* gpointer;
-typedef const void *gconstpointer;
-
-
-typedef gint32	gssize;
-typedef guint32 gsize;
-typedef guint32 GQuark;
-typedef gint32	GTime;
-
-
-/* Portable endian checks and conversions
- *
- * glibconfig.h defines G_BYTE_ORDER which expands to one of
- * the below macros.
- */
-#define G_LITTLE_ENDIAN 1234
-#define G_BIG_ENDIAN    4321
-#define G_PDP_ENDIAN    3412		/* unused, need specific PDP check */	
-
-
-/* Basic bit swapping functions
- */
-#define GUINT16_SWAP_LE_BE_CONSTANT(val)	((guint16) ( \
-    (((guint16) (val) & (guint16) 0x00ffU) << 8) | \
-    (((guint16) (val) & (guint16) 0xff00U) >> 8)))
-#define GUINT32_SWAP_LE_BE_CONSTANT(val)	((guint32) ( \
-    (((guint32) (val) & (guint32) 0x000000ffU) << 24) | \
-    (((guint32) (val) & (guint32) 0x0000ff00U) <<  8) | \
-    (((guint32) (val) & (guint32) 0x00ff0000U) >>  8) | \
-    (((guint32) (val) & (guint32) 0xff000000U) >> 24)))
-
-/* Intel specific stuff for speed
- */
-#if defined (__i386__) && defined (__GNUC__) && __GNUC__ >= 2
-#  define GUINT16_SWAP_LE_BE_X86(val) \
-     (__extension__					\
-      ({ register guint16 __v;				\
-	 if (__builtin_constant_p (val))		\
-	   __v = GUINT16_SWAP_LE_BE_CONSTANT (val);	\
-	 else						\
-	   __asm__ __const__ ("rorw $8, %w0"		\
-			      : "=r" (__v)		\
-			      : "0" ((guint16) (val)));	\
-	__v; }))
-#  define GUINT16_SWAP_LE_BE(val) (GUINT16_SWAP_LE_BE_X86 (val))
-#  if !defined(__i486__) && !defined(__i586__) \
-      && !defined(__pentium__) && !defined(__i686__) && !defined(__pentiumpro__)
-#     define GUINT32_SWAP_LE_BE_X86(val) \
-        (__extension__						\
-         ({ register guint32 __v;				\
-	    if (__builtin_constant_p (val))			\
-	      __v = GUINT32_SWAP_LE_BE_CONSTANT (val);		\
-	  else							\
-	    __asm__ __const__ ("rorw $8, %w0\n\t"		\
-			       "rorl $16, %0\n\t"		\
-			       "rorw $8, %w0"			\
-			       : "=r" (__v)			\
-			       : "0" ((guint32) (val)));	\
-	__v; }))
-#  else /* 486 and higher has bswap */
-#     define GUINT32_SWAP_LE_BE_X86(val) \
-        (__extension__						\
-         ({ register guint32 __v;				\
-	    if (__builtin_constant_p (val))			\
-	      __v = GUINT32_SWAP_LE_BE_CONSTANT (val);		\
-	  else							\
-	    __asm__ __const__ ("bswap %0"			\
-			       : "=r" (__v)			\
-			       : "0" ((guint32) (val)));	\
-	__v; }))
-#  endif /* processor specific 32-bit stuff */
-#  define GUINT32_SWAP_LE_BE(val) (GUINT32_SWAP_LE_BE_X86 (val))
-#else /* !__i386__ */
-#  define GUINT16_SWAP_LE_BE(val) (GUINT16_SWAP_LE_BE_CONSTANT (val))
-#  define GUINT32_SWAP_LE_BE(val) (GUINT32_SWAP_LE_BE_CONSTANT (val))
-#endif /* __i386__ */
-
-#ifdef G_HAVE_GINT64
-#  define GUINT64_SWAP_LE_BE_CONSTANT(val)	((guint64) ( \
-      (((guint64) (val) &						\
-	(guint64) G_GINT64_CONSTANT(0x00000000000000ffU)) << 56) |	\
-      (((guint64) (val) &						\
-	(guint64) G_GINT64_CONSTANT(0x000000000000ff00U)) << 40) |	\
-      (((guint64) (val) &						\
-	(guint64) G_GINT64_CONSTANT(0x0000000000ff0000U)) << 24) |	\
-      (((guint64) (val) &						\
-	(guint64) G_GINT64_CONSTANT(0x00000000ff000000U)) <<  8) |	\
-      (((guint64) (val) &						\
-	(guint64) G_GINT64_CONSTANT(0x000000ff00000000U)) >>  8) |	\
-      (((guint64) (val) &						\
-	(guint64) G_GINT64_CONSTANT(0x0000ff0000000000U)) >> 24) |	\
-      (((guint64) (val) &						\
-	(guint64) G_GINT64_CONSTANT(0x00ff000000000000U)) >> 40) |	\
-      (((guint64) (val) &						\
-	(guint64) G_GINT64_CONSTANT(0xff00000000000000U)) >> 56)))
-#  if defined (__i386__) && defined (__GNUC__) && __GNUC__ >= 2
-#    define GUINT64_SWAP_LE_BE_X86(val) \
-	(__extension__						\
-	 ({ union { guint64 __ll;				\
-		    guint32 __l[2]; } __r;			\
-	    if (__builtin_constant_p (val))			\
-	      __r.__ll = GUINT64_SWAP_LE_BE_CONSTANT (val);	\
-	    else						\
-	      {							\
-	 	union { guint64 __ll;				\
-			guint32 __l[2]; } __w;			\
-		__w.__ll = ((guint64) val);			\
-		__r.__l[0] = GUINT32_SWAP_LE_BE (__w.__l[1]);	\
-		__r.__l[1] = GUINT32_SWAP_LE_BE (__w.__l[0]);	\
-	      }							\
-	  __r.__ll; }))
-#    define GUINT64_SWAP_LE_BE(val) (GUINT64_SWAP_LE_BE_X86 (val))
-#  else /* !__i386__ */
-#    define GUINT64_SWAP_LE_BE(val) (GUINT64_SWAP_LE_BE_CONSTANT(val))
-#  endif
-#endif
-
-#define GUINT16_SWAP_LE_PDP(val)	((guint16) (val))
-#define GUINT16_SWAP_BE_PDP(val)	(GUINT16_SWAP_LE_BE (val))
-#define GUINT32_SWAP_LE_PDP(val)	((guint32) ( \
-    (((guint32) (val) & (guint32) 0x0000ffffU) << 16) | \
-    (((guint32) (val) & (guint32) 0xffff0000U) >> 16)))
-#define GUINT32_SWAP_BE_PDP(val)	((guint32) ( \
-    (((guint32) (val) & (guint32) 0x00ff00ffU) << 8) | \
-    (((guint32) (val) & (guint32) 0xff00ff00U) >> 8)))
-
-/* The G*_TO_?E() macros are defined in glibconfig.h.
- * The transformation is symmetric, so the FROM just maps to the TO.
- */
-#define GINT16_FROM_LE(val)	(GINT16_TO_LE (val))
-#define GUINT16_FROM_LE(val)	(GUINT16_TO_LE (val))
-#define GINT16_FROM_BE(val)	(GINT16_TO_BE (val))
-#define GUINT16_FROM_BE(val)	(GUINT16_TO_BE (val))
-#define GINT32_FROM_LE(val)	(GINT32_TO_LE (val))
-#define GUINT32_FROM_LE(val)	(GUINT32_TO_LE (val))
-#define GINT32_FROM_BE(val)	(GINT32_TO_BE (val))
-#define GUINT32_FROM_BE(val)	(GUINT32_TO_BE (val))
-
-#ifdef G_HAVE_GINT64
-#define GINT64_FROM_LE(val)	(GINT64_TO_LE (val))
-#define GUINT64_FROM_LE(val)	(GUINT64_TO_LE (val))
-#define GINT64_FROM_BE(val)	(GINT64_TO_BE (val))
-#define GUINT64_FROM_BE(val)	(GUINT64_TO_BE (val))
-#endif
-
-#define GLONG_FROM_LE(val)	(GLONG_TO_LE (val))
-#define GULONG_FROM_LE(val)	(GULONG_TO_LE (val))
-#define GLONG_FROM_BE(val)	(GLONG_TO_BE (val))
-#define GULONG_FROM_BE(val)	(GULONG_TO_BE (val))
-
-#define GINT_FROM_LE(val)	(GINT_TO_LE (val))
-#define GUINT_FROM_LE(val)	(GUINT_TO_LE (val))
-#define GINT_FROM_BE(val)	(GINT_TO_BE (val))
-#define GUINT_FROM_BE(val)	(GUINT_TO_BE (val))
-
-
-/* Portable versions of host-network order stuff
- */
-#define g_ntohl(val) (GUINT32_FROM_BE (val))
-#define g_ntohs(val) (GUINT16_FROM_BE (val))
-#define g_htonl(val) (GUINT32_TO_BE (val))
-#define g_htons(val) (GUINT16_TO_BE (val))
-
-
-/* Glib version.
- * we prefix variable declarations so they can
- * properly get exported in windows dlls.
- */
-#ifdef NATIVE_WIN32
-#  ifdef GLIB_COMPILATION
-#    define GUTILS_C_VAR __declspec(dllexport)
-#  else /* !GLIB_COMPILATION */
-#    define GUTILS_C_VAR extern __declspec(dllimport)
-#  endif /* !GLIB_COMPILATION */
-#else /* !NATIVE_WIN32 */
-#  define GUTILS_C_VAR extern
-#endif /* !NATIVE_WIN32 */
-
-GUTILS_C_VAR const guint glib_major_version;
-GUTILS_C_VAR const guint glib_minor_version;
-GUTILS_C_VAR const guint glib_micro_version;
-GUTILS_C_VAR const guint glib_interface_age;
-GUTILS_C_VAR const guint glib_binary_age;
-
-#define GLIB_CHECK_VERSION(major,minor,micro)    \
-    (GLIB_MAJOR_VERSION > (major) || \
-     (GLIB_MAJOR_VERSION == (major) && GLIB_MINOR_VERSION > (minor)) || \
-     (GLIB_MAJOR_VERSION == (major) && GLIB_MINOR_VERSION == (minor) && \
-      GLIB_MICRO_VERSION >= (micro)))
-
-/* Forward declarations of glib types.
- */
-typedef struct _GAllocator	GAllocator;
-typedef struct _GArray		GArray;
-typedef struct _GByteArray	GByteArray;
-typedef struct _GCache		GCache;
-typedef struct _GCompletion	GCompletion;
-typedef	struct _GData		GData;
-typedef struct _GDebugKey	GDebugKey;
-typedef struct _GHashTable	GHashTable;
-typedef struct _GHook		GHook;
-typedef struct _GHookList	GHookList;
-typedef struct _GList		GList;
-typedef struct _GMemChunk	GMemChunk;
-typedef struct _GNode		GNode;
-typedef struct _GPtrArray	GPtrArray;
-typedef struct _GRelation	GRelation;
-typedef struct _GScanner	GScanner;
-typedef struct _GScannerConfig	GScannerConfig;
-typedef struct _GSList		GSList;
-typedef struct _GString		GString;
-typedef struct _GStringChunk	GStringChunk;
-typedef struct _GTimer		GTimer;
-typedef struct _GTree		GTree;
-typedef struct _GTuples		GTuples;
-typedef union  _GTokenValue	GTokenValue;
-typedef struct _GIOChannel	GIOChannel;
-
-/* Tree traverse flags */
-typedef enum
-{
-  G_TRAVERSE_LEAFS	= 1 << 0,
-  G_TRAVERSE_NON_LEAFS	= 1 << 1,
-  G_TRAVERSE_ALL	= G_TRAVERSE_LEAFS | G_TRAVERSE_NON_LEAFS,
-  G_TRAVERSE_MASK	= 0x03
-} GTraverseFlags;
-
-/* Tree traverse orders */
-typedef enum
-{
-  G_IN_ORDER,
-  G_PRE_ORDER,
-  G_POST_ORDER,
-  G_LEVEL_ORDER
-} GTraverseType;
-
-/* Log level shift offset for user defined
- * log levels (0-7 are used by GLib).
- */
-#define	G_LOG_LEVEL_USER_SHIFT	(8)
-
-/* Glib log levels and flags.
- */
-typedef enum
-{
-  /* log flags */
-  G_LOG_FLAG_RECURSION		= 1 << 0,
-  G_LOG_FLAG_FATAL		= 1 << 1,
-  
-  /* GLib log levels */
-  G_LOG_LEVEL_ERROR		= 1 << 2,	/* always fatal */
-  G_LOG_LEVEL_CRITICAL		= 1 << 3,
-  G_LOG_LEVEL_WARNING		= 1 << 4,
-  G_LOG_LEVEL_MESSAGE		= 1 << 5,
-  G_LOG_LEVEL_INFO		= 1 << 6,
-  G_LOG_LEVEL_DEBUG		= 1 << 7,
-  
-  G_LOG_LEVEL_MASK		= ~(G_LOG_FLAG_RECURSION | G_LOG_FLAG_FATAL)
-} GLogLevelFlags;
-
-/* GLib log levels that are considered fatal by default */
-#define	G_LOG_FATAL_MASK	(G_LOG_FLAG_RECURSION | G_LOG_LEVEL_ERROR)
-
-
-typedef gpointer	(*GCacheNewFunc)	(gpointer	key);
-typedef gpointer	(*GCacheDupFunc)	(gpointer	value);
-typedef void		(*GCacheDestroyFunc)	(gpointer	value);
-typedef gint		(*GCompareFunc)		(gconstpointer	a,
-						 gconstpointer	b);
-typedef gchar*		(*GCompletionFunc)	(gpointer);
-typedef void		(*GDestroyNotify)	(gpointer	data);
-typedef void		(*GDataForeachFunc)	(GQuark		key_id,
-						 gpointer	data,
-						 gpointer	user_data);
-typedef void		(*GFunc)		(gpointer	data,
-						 gpointer	user_data);
-typedef guint		(*GHashFunc)		(gconstpointer	key);
-typedef void		(*GFreeFunc)		(gpointer	data);
-typedef void		(*GHFunc)		(gpointer	key,
-						 gpointer	value,
-						 gpointer	user_data);
-typedef gboolean	(*GHRFunc)		(gpointer	key,
-						 gpointer	value,
-						 gpointer	user_data);
-typedef gint		(*GHookCompareFunc)	(GHook		*new_hook,
-						 GHook		*sibling);
-typedef gboolean	(*GHookFindFunc)	(GHook		*hook,
-						 gpointer	 data);
-typedef void		(*GHookMarshaller)	(GHook		*hook,
-						 gpointer	 data);
-typedef gboolean	(*GHookCheckMarshaller)	(GHook		*hook,
-						 gpointer	 data);
-typedef void		(*GHookFunc)		(gpointer	 data);
-typedef gboolean	(*GHookCheckFunc)	(gpointer	 data);
-typedef void		(*GHookFreeFunc)	(GHookList      *hook_list,
-						 GHook          *hook);
-typedef void		(*GLogFunc)		(const gchar   *log_domain,
-						 GLogLevelFlags	log_level,
-						 const gchar   *message,
-						 gpointer	user_data);
-typedef gboolean	(*GNodeTraverseFunc)	(GNode	       *node,
-						 gpointer	data);
-typedef void		(*GNodeForeachFunc)	(GNode	       *node,
-						 gpointer	data);
-typedef gint		(*GSearchFunc)		(gpointer	key,
-						 gpointer	data);
-typedef void		(*GScannerMsgFunc)	(GScanner      *scanner,
-						 gchar	       *message,
-						 gint		error);
-typedef gint		(*GTraverseFunc)	(gpointer	key,
-						 gpointer	value,
-						 gpointer	data);
-typedef	void		(*GVoidFunc)		(void);
-
-
-struct _GList
-{
-  gpointer data;
-  GList *next;
-  GList *prev;
-};
-
-struct _GSList
-{
-  gpointer data;
-  GSList *next;
-};
-
-struct _GString
-{
-  gchar *str;
-  gint len;
-};
-
-struct _GArray
-{
-  gchar *data;
-  guint len;
-};
-
-struct _GByteArray
-{
-  guint8 *data;
-  guint	  len;
-};
-
-struct _GPtrArray
-{
-  gpointer *pdata;
-  guint	    len;
-};
-
-struct _GTuples
-{
-  guint len;
-};
-
-struct _GDebugKey
-{
-  gchar *key;
-  guint	 value;
-};
-
-
-/* Doubly linked lists
- */
-void   g_list_push_allocator    (GAllocator     *allocator);
-void   g_list_pop_allocator     (void);
-GList* g_list_alloc		(void);
-void   g_list_free		(GList		*list);
-void   g_list_free_1		(GList		*list);
-GList* g_list_append		(GList		*list,
-				 gpointer	 data);
-GList* g_list_prepend		(GList		*list,
-				 gpointer	 data);
-GList* g_list_insert		(GList		*list,
-				 gpointer	 data,
-				 gint		 position);
-GList* g_list_insert_sorted	(GList		*list,
-				 gpointer	 data,
-				 GCompareFunc	 func);
-GList* g_list_concat		(GList		*list1,
-				 GList		*list2);
-GList* g_list_remove		(GList		*list,
-				 gpointer	 data);
-GList* g_list_remove_link	(GList		*list,
-				 GList		*llink);
-GList* g_list_reverse		(GList		*list);
-GList* g_list_copy		(GList		*list);
-GList* g_list_nth		(GList		*list,
-				 guint		 n);
-GList* g_list_find		(GList		*list,
-				 gpointer	 data);
-GList* g_list_find_custom	(GList		*list,
-				 gpointer	 data,
-				 GCompareFunc	 func);
-gint   g_list_position		(GList		*list,
-				 GList		*llink);
-gint   g_list_index		(GList		*list,
-				 gpointer	 data);
-GList* g_list_last		(GList		*list);
-GList* g_list_first		(GList		*list);
-guint  g_list_length		(GList		*list);
-void   g_list_foreach		(GList		*list,
-				 GFunc		 func,
-				 gpointer	 user_data);
-GList* g_list_sort              (GList          *list,
-		                 GCompareFunc    compare_func);
-gpointer g_list_nth_data	(GList		*list,
-				 guint		 n);
-#define g_list_previous(list)	((list) ? (((GList *)(list))->prev) : NULL)
-#define g_list_next(list)	((list) ? (((GList *)(list))->next) : NULL)
-
-
-/* Singly linked lists
- */
-void    g_slist_push_allocator  (GAllocator     *allocator);
-void    g_slist_pop_allocator   (void);
-GSList* g_slist_alloc		(void);
-void	g_slist_free		(GSList		*list);
-void	g_slist_free_1		(GSList		*list);
-GSList* g_slist_append		(GSList		*list,
-				 gpointer	 data);
-GSList* g_slist_prepend		(GSList		*list,
-				 gpointer	 data);
-GSList* g_slist_insert		(GSList		*list,
-				 gpointer	 data,
-				 gint		 position);
-GSList* g_slist_insert_sorted	(GSList		*list,
-				 gpointer	 data,
-				 GCompareFunc	 func);
-GSList* g_slist_concat		(GSList		*list1,
-				 GSList		*list2);
-GSList* g_slist_remove		(GSList		*list,
-				 gpointer	 data);
-GSList* g_slist_remove_link	(GSList		*list,
-				 GSList		*llink);
-GSList* g_slist_reverse		(GSList		*list);
-GSList*	g_slist_copy		(GSList		*list);
-GSList* g_slist_nth		(GSList		*list,
-				 guint		 n);
-GSList* g_slist_find		(GSList		*list,
-				 gpointer	 data);
-GSList* g_slist_find_custom	(GSList		*list,
-				 gpointer	 data,
-				 GCompareFunc	 func);
-gint	g_slist_position	(GSList		*list,
-				 GSList		*llink);
-gint	g_slist_index		(GSList		*list,
-				 gpointer	 data);
-GSList* g_slist_last		(GSList		*list);
-guint	g_slist_length		(GSList		*list);
-void	g_slist_foreach		(GSList		*list,
-				 GFunc		 func,
-				 gpointer	 user_data);
-GSList*  g_slist_sort           (GSList          *list,
-		                 GCompareFunc    compare_func);
-gpointer g_slist_nth_data	(GSList		*list,
-				 guint		 n);
-#define g_slist_next(slist)	((slist) ? (((GSList *)(slist))->next) : NULL)
-
-
-/* Hash tables
- */
-GHashTable* g_hash_table_new		(GHashFunc	 hash_func,
-					 GCompareFunc	 key_compare_func);
-void	    g_hash_table_destroy	(GHashTable	*hash_table);
-void	    g_hash_table_insert		(GHashTable	*hash_table,
-					 gpointer	 key,
-					 gpointer	 value);
-void	    g_hash_table_remove		(GHashTable	*hash_table,
-					 gconstpointer	 key);
-gpointer    g_hash_table_lookup		(GHashTable	*hash_table,
-					 gconstpointer	 key);
-gboolean    g_hash_table_lookup_extended(GHashTable	*hash_table,
-					 gconstpointer	 lookup_key,
-					 gpointer	*orig_key,
-					 gpointer	*value);
-void	    g_hash_table_freeze		(GHashTable	*hash_table);
-void	    g_hash_table_thaw		(GHashTable	*hash_table);
-void	    g_hash_table_foreach	(GHashTable	*hash_table,
-					 GHFunc		 func,
-					 gpointer	 user_data);
-guint	    g_hash_table_foreach_remove	(GHashTable	*hash_table,
-					 GHRFunc	 func,
-					 gpointer	 user_data);
-guint	    g_hash_table_size		(GHashTable	*hash_table);
-
-
-/* Caches
- */
-GCache*	 g_cache_new	       (GCacheNewFunc	   value_new_func,
-				GCacheDestroyFunc  value_destroy_func,
-				GCacheDupFunc	   key_dup_func,
-				GCacheDestroyFunc  key_destroy_func,
-				GHashFunc	   hash_key_func,
-				GHashFunc	   hash_value_func,
-				GCompareFunc	   key_compare_func);
-void	 g_cache_destroy       (GCache		  *cache);
-gpointer g_cache_insert	       (GCache		  *cache,
-				gpointer	   key);
-void	 g_cache_remove	       (GCache		  *cache,
-				gpointer	   value);
-void	 g_cache_key_foreach   (GCache		  *cache,
-				GHFunc		   func,
-				gpointer	   user_data);
-void	 g_cache_value_foreach (GCache		  *cache,
-				GHFunc		   func,
-				gpointer	   user_data);
-
-
-/* Balanced binary trees
- */
-GTree*	 g_tree_new	 (GCompareFunc	 key_compare_func);
-void	 g_tree_destroy	 (GTree		*tree);
-void	 g_tree_insert	 (GTree		*tree,
-			  gpointer	 key,
-			  gpointer	 value);
-void	 g_tree_remove	 (GTree		*tree,
-			  gpointer	 key);
-gpointer g_tree_lookup	 (GTree		*tree,
-			  gpointer	 key);
-void	 g_tree_traverse (GTree		*tree,
-			  GTraverseFunc	 traverse_func,
-			  GTraverseType	 traverse_type,
-			  gpointer	 data);
-gpointer g_tree_search	 (GTree		*tree,
-			  GSearchFunc	 search_func,
-			  gpointer	 data);
-gint	 g_tree_height	 (GTree		*tree);
-gint	 g_tree_nnodes	 (GTree		*tree);
-
-
-
-/* N-way tree implementation
- */
-struct _GNode
-{
-  gpointer data;
-  GNode	  *next;
-  GNode	  *prev;
-  GNode	  *parent;
-  GNode	  *children;
-};
-
-#define	 G_NODE_IS_ROOT(node)	(((GNode*) (node))->parent == NULL && \
-				 ((GNode*) (node))->prev == NULL && \
-				 ((GNode*) (node))->next == NULL)
-#define	 G_NODE_IS_LEAF(node)	(((GNode*) (node))->children == NULL)
-
-void     g_node_push_allocator  (GAllocator       *allocator);
-void     g_node_pop_allocator   (void);
-GNode*	 g_node_new		(gpointer	   data);
-void	 g_node_destroy		(GNode		  *root);
-void	 g_node_unlink		(GNode		  *node);
-GNode*	 g_node_insert		(GNode		  *parent,
-				 gint		   position,
-				 GNode		  *node);
-GNode*	 g_node_insert_before	(GNode		  *parent,
-				 GNode		  *sibling,
-				 GNode		  *node);
-GNode*	 g_node_prepend		(GNode		  *parent,
-				 GNode		  *node);
-guint	 g_node_n_nodes		(GNode		  *root,
-				 GTraverseFlags	   flags);
-GNode*	 g_node_get_root	(GNode		  *node);
-gboolean g_node_is_ancestor	(GNode		  *node,
-				 GNode		  *descendant);
-guint	 g_node_depth		(GNode		  *node);
-GNode*	 g_node_find		(GNode		  *root,
-				 GTraverseType	   order,
-				 GTraverseFlags	   flags,
-				 gpointer	   data);
-
-/* convenience macros */
-#define g_node_append(parent, node)				\
-     g_node_insert_before ((parent), NULL, (node))
-#define	g_node_insert_data(parent, position, data)		\
-     g_node_insert ((parent), (position), g_node_new (data))
-#define	g_node_insert_data_before(parent, sibling, data)	\
-     g_node_insert_before ((parent), (sibling), g_node_new (data))
-#define	g_node_prepend_data(parent, data)			\
-     g_node_prepend ((parent), g_node_new (data))
-#define	g_node_append_data(parent, data)			\
-     g_node_insert_before ((parent), NULL, g_node_new (data))
-
-/* traversal function, assumes that `node' is root
- * (only traverses `node' and its subtree).
- * this function is just a high level interface to
- * low level traversal functions, optimized for speed.
- */
-void	 g_node_traverse	(GNode		  *root,
-				 GTraverseType	   order,
-				 GTraverseFlags	   flags,
-				 gint		   max_depth,
-				 GNodeTraverseFunc func,
-				 gpointer	   data);
-
-/* return the maximum tree height starting with `node', this is an expensive
- * operation, since we need to visit all nodes. this could be shortened by
- * adding `guint height' to struct _GNode, but then again, this is not very
- * often needed, and would make g_node_insert() more time consuming.
- */
-guint	 g_node_max_height	 (GNode *root);
-
-void	 g_node_children_foreach (GNode		  *node,
-				  GTraverseFlags   flags,
-				  GNodeForeachFunc func,
-				  gpointer	   data);
-void	 g_node_reverse_children (GNode		  *node);
-guint	 g_node_n_children	 (GNode		  *node);
-GNode*	 g_node_nth_child	 (GNode		  *node,
-				  guint		   n);
-GNode*	 g_node_last_child	 (GNode		  *node);
-GNode*	 g_node_find_child	 (GNode		  *node,
-				  GTraverseFlags   flags,
-				  gpointer	   data);
-gint	 g_node_child_position	 (GNode		  *node,
-				  GNode		  *child);
-gint	 g_node_child_index	 (GNode		  *node,
-				  gpointer	   data);
-
-GNode*	 g_node_first_sibling	 (GNode		  *node);
-GNode*	 g_node_last_sibling	 (GNode		  *node);
-
-#define	 g_node_prev_sibling(node)	((node) ? \
-					 ((GNode*) (node))->prev : NULL)
-#define	 g_node_next_sibling(node)	((node) ? \
-					 ((GNode*) (node))->next : NULL)
-#define	 g_node_first_child(node)	((node) ? \
-					 ((GNode*) (node))->children : NULL)
-
-
-/* Callback maintenance functions
- */
-#define G_HOOK_FLAG_USER_SHIFT	(4)
-typedef enum
-{
-  G_HOOK_FLAG_ACTIVE	= 1 << 0,
-  G_HOOK_FLAG_IN_CALL	= 1 << 1,
-  G_HOOK_FLAG_MASK	= 0x0f
-} GHookFlagMask;
-
-#define	G_HOOK_DEFERRED_DESTROY	((GHookFreeFunc) 0x01)
-
-struct _GHookList
-{
-  guint		 seq_id;
-  guint		 hook_size;
-  guint		 is_setup : 1;
-  GHook		*hooks;
-  GMemChunk	*hook_memchunk;
-  GHookFreeFunc	 hook_free; /* virtual function */
-  GHookFreeFunc	 hook_destroy; /* virtual function */
-};
-
-struct _GHook
-{
-  gpointer	 data;
-  GHook		*next;
-  GHook		*prev;
-  guint		 ref_count;
-  guint		 hook_id;
-  guint		 flags;
-  gpointer	 func;
-  GDestroyNotify destroy;
-};
-
-#define	G_HOOK_ACTIVE(hook)		((((GHook*) hook)->flags & \
-					  G_HOOK_FLAG_ACTIVE) != 0)
-#define	G_HOOK_IN_CALL(hook)		((((GHook*) hook)->flags & \
-					  G_HOOK_FLAG_IN_CALL) != 0)
-#define G_HOOK_IS_VALID(hook)		(((GHook*) hook)->hook_id != 0 && \
-					 G_HOOK_ACTIVE (hook))
-#define G_HOOK_IS_UNLINKED(hook)	(((GHook*) hook)->next == NULL && \
-					 ((GHook*) hook)->prev == NULL && \
-					 ((GHook*) hook)->hook_id == 0 && \
-					 ((GHook*) hook)->ref_count == 0)
-
-void	 g_hook_list_init		(GHookList		*hook_list,
-					 guint			 hook_size);
-void	 g_hook_list_clear		(GHookList		*hook_list);
-GHook*	 g_hook_alloc			(GHookList		*hook_list);
-void	 g_hook_free			(GHookList		*hook_list,
-					 GHook			*hook);
-void	 g_hook_ref			(GHookList		*hook_list,
-					 GHook			*hook);
-void	 g_hook_unref			(GHookList		*hook_list,
-					 GHook			*hook);
-gboolean g_hook_destroy			(GHookList		*hook_list,
-					 guint			 hook_id);
-void	 g_hook_destroy_link		(GHookList		*hook_list,
-					 GHook			*hook);
-void	 g_hook_prepend			(GHookList		*hook_list,
-					 GHook			*hook);
-void	 g_hook_insert_before		(GHookList		*hook_list,
-					 GHook			*sibling,
-					 GHook			*hook);
-void	 g_hook_insert_sorted		(GHookList		*hook_list,
-					 GHook			*hook,
-					 GHookCompareFunc	 func);
-GHook*	 g_hook_get			(GHookList		*hook_list,
-					 guint			 hook_id);
-GHook*	 g_hook_find			(GHookList		*hook_list,
-					 gboolean		 need_valids,
-					 GHookFindFunc		 func,
-					 gpointer		 data);
-GHook*	 g_hook_find_data		(GHookList		*hook_list,
-					 gboolean		 need_valids,
-					 gpointer		 data);
-GHook*	 g_hook_find_func		(GHookList		*hook_list,
-					 gboolean		 need_valids,
-					 gpointer		 func);
-GHook*	 g_hook_find_func_data		(GHookList		*hook_list,
-					 gboolean		 need_valids,
-					 gpointer		 func,
-					 gpointer		 data);
-/* return the first valid hook, and increment its reference count */
-GHook*	 g_hook_first_valid		(GHookList		*hook_list,
-					 gboolean		 may_be_in_call);
-/* return the next valid hook with incremented reference count, and
- * decrement the reference count of the original hook
- */
-GHook*	 g_hook_next_valid		(GHookList		*hook_list,
-					 GHook			*hook,
-					 gboolean		 may_be_in_call);
-
-/* GHookCompareFunc implementation to insert hooks sorted by their id */
-gint	 g_hook_compare_ids		(GHook			*new_hook,
-					 GHook			*sibling);
-
-/* convenience macros */
-#define	 g_hook_append( hook_list, hook )  \
-     g_hook_insert_before ((hook_list), NULL, (hook))
-
-/* invoke all valid hooks with the (*GHookFunc) signature.
- */
-void	 g_hook_list_invoke		(GHookList		*hook_list,
-					 gboolean		 may_recurse);
-/* invoke all valid hooks with the (*GHookCheckFunc) signature,
- * and destroy the hook if FALSE is returned.
- */
-void	 g_hook_list_invoke_check	(GHookList		*hook_list,
-					 gboolean		 may_recurse);
-/* invoke a marshaller on all valid hooks.
- */
-void	 g_hook_list_marshal		(GHookList		*hook_list,
-					 gboolean		 may_recurse,
-					 GHookMarshaller	 marshaller,
-					 gpointer		 data);
-void	 g_hook_list_marshal_check	(GHookList		*hook_list,
-					 gboolean		 may_recurse,
-					 GHookCheckMarshaller	 marshaller,
-					 gpointer		 data);
-
-
-/* Fatal error handlers.
- * g_on_error_query() will prompt the user to either
- * [E]xit, [H]alt, [P]roceed or show [S]tack trace.
- * g_on_error_stack_trace() invokes gdb, which attaches to the current
- * process and shows a stack trace.
- * These function may cause different actions on non-unix platforms.
- * The prg_name arg is required by gdb to find the executable, if it is
- * passed as NULL, g_on_error_query() will try g_get_prgname().
- */
-void g_on_error_query (const gchar *prg_name);
-void g_on_error_stack_trace (const gchar *prg_name);
-
-
-/* Logging mechanism
- */
-extern	        const gchar		*g_log_domain_glib;
-guint		g_log_set_handler	(const gchar	*log_domain,
-					 GLogLevelFlags	 log_levels,
-					 GLogFunc	 log_func,
-					 gpointer	 user_data);
-void		g_log_remove_handler	(const gchar	*log_domain,
-					 guint		 handler_id);
-void		g_log_default_handler	(const gchar	*log_domain,
-					 GLogLevelFlags	 log_level,
-					 const gchar	*message,
-					 gpointer	 unused_data);
-void		g_log			(const gchar	*log_domain,
-					 GLogLevelFlags	 log_level,
-					 const gchar	*format,
-					 ...) G_GNUC_PRINTF (3, 4);
-void		g_logv			(const gchar	*log_domain,
-					 GLogLevelFlags	 log_level,
-					 const gchar	*format,
-					 va_list	 args);
-GLogLevelFlags	g_log_set_fatal_mask	(const gchar	*log_domain,
-					 GLogLevelFlags	 fatal_mask);
-GLogLevelFlags	g_log_set_always_fatal	(GLogLevelFlags	 fatal_mask);
-#ifndef	G_LOG_DOMAIN
-#define	G_LOG_DOMAIN	((gchar*) 0)
-#endif	/* G_LOG_DOMAIN */
-#ifdef	__GNUC__
-#define	g_error(format, args...)	g_log (G_LOG_DOMAIN, \
-					       G_LOG_LEVEL_ERROR, \
-					       format, ##args)
-#define	g_message(format, args...)	g_log (G_LOG_DOMAIN, \
-					       G_LOG_LEVEL_MESSAGE, \
-					       format, ##args)
-#define	g_warning(format, args...)	g_log (G_LOG_DOMAIN, \
-					       G_LOG_LEVEL_WARNING, \
-					       format, ##args)
-#else	/* !__GNUC__ */
-static void
-g_error (const gchar *format,
-	 ...)
-{
-  va_list args;
-  va_start (args, format);
-  g_logv (G_LOG_DOMAIN, G_LOG_LEVEL_ERROR, format, args);
-  va_end (args);
-}
-static void
-g_message (const gchar *format,
-	   ...)
-{
-  va_list args;
-  va_start (args, format);
-  g_logv (G_LOG_DOMAIN, G_LOG_LEVEL_MESSAGE, format, args);
-  va_end (args);
-}
-static void
-g_warning (const gchar *format,
-	   ...)
-{
-  va_list args;
-  va_start (args, format);
-  g_logv (G_LOG_DOMAIN, G_LOG_LEVEL_WARNING, format, args);
-  va_end (args);
-}
-#endif	/* !__GNUC__ */
-
-typedef void	(*GPrintFunc)		(const gchar	*string);
-void		g_print			(const gchar	*format,
-					 ...) G_GNUC_PRINTF (1, 2);
-GPrintFunc	g_set_print_handler	(GPrintFunc	 func);
-void		g_printerr		(const gchar	*format,
-					 ...) G_GNUC_PRINTF (1, 2);
-GPrintFunc	g_set_printerr_handler	(GPrintFunc	 func);
-
-/* deprecated compatibility functions, use g_log_set_handler() instead */
-typedef void		(*GErrorFunc)		(const gchar *str);
-typedef void		(*GWarningFunc)		(const gchar *str);
-GErrorFunc   g_set_error_handler   (GErrorFunc	 func);
-GWarningFunc g_set_warning_handler (GWarningFunc func);
-GPrintFunc   g_set_message_handler (GPrintFunc func);
-
-
-/* Memory allocation and debugging
- */
-#ifdef USE_DMALLOC
-
-#define g_malloc(size)	     ((gpointer) MALLOC (size))
-#define g_malloc0(size)	     ((gpointer) CALLOC (char, size))
-#define g_realloc(mem,size)  ((gpointer) REALLOC (mem, char, size))
-#define g_free(mem)	     FREE (mem)
-
-#else /* !USE_DMALLOC */
-
-gpointer g_malloc      (gulong	  size);
-gpointer g_malloc0     (gulong	  size);
-gpointer g_realloc     (gpointer  mem,
-			gulong	  size);
-void	 g_free	       (gpointer  mem);
-
-#endif /* !USE_DMALLOC */
-
-void	 g_mem_profile (void);
-void	 g_mem_check   (gpointer  mem);
-
-/* Generic allocators
- */
-GAllocator* g_allocator_new   (const gchar  *name,
-			       guint         n_preallocs);
-void        g_allocator_free  (GAllocator   *allocator);
-
-#define	G_ALLOCATOR_LIST	(1)
-#define	G_ALLOCATOR_SLIST	(2)
-#define	G_ALLOCATOR_NODE	(3)
-
-
-/* "g_mem_chunk_new" creates a new memory chunk.
- * Memory chunks are used to allocate pieces of memory which are
- *  always the same size. Lists are a good example of such a data type.
- * The memory chunk allocates and frees blocks of memory as needed.
- *  Just be sure to call "g_mem_chunk_free" and not "g_free" on data
- *  allocated in a mem chunk. ("g_free" will most likely cause a seg
- *  fault...somewhere).
- *
- * Oh yeah, GMemChunk is an opaque data type. (You don't really
- *  want to know what's going on inside do you?)
- */
-
-/* ALLOC_ONLY MemChunk's can only allocate memory. The free operation
- *  is interpreted as a no op. ALLOC_ONLY MemChunk's save 4 bytes per
- *  atom. (They are also useful for lists which use MemChunk to allocate
- *  memory but are also part of the MemChunk implementation).
- * ALLOC_AND_FREE MemChunk's can allocate and free memory.
- */
-
-#define G_ALLOC_ONLY	  1
-#define G_ALLOC_AND_FREE  2
-
-GMemChunk* g_mem_chunk_new     (gchar	  *name,
-				gint	   atom_size,
-				gulong	   area_size,
-				gint	   type);
-void	   g_mem_chunk_destroy (GMemChunk *mem_chunk);
-gpointer   g_mem_chunk_alloc   (GMemChunk *mem_chunk);
-gpointer   g_mem_chunk_alloc0  (GMemChunk *mem_chunk);
-void	   g_mem_chunk_free    (GMemChunk *mem_chunk,
-				gpointer   mem);
-void	   g_mem_chunk_clean   (GMemChunk *mem_chunk);
-void	   g_mem_chunk_reset   (GMemChunk *mem_chunk);
-void	   g_mem_chunk_print   (GMemChunk *mem_chunk);
-void	   g_mem_chunk_info    (void);
-
-/* Ah yes...we have a "g_blow_chunks" function.
- * "g_blow_chunks" simply compresses all the chunks. This operation
- *  consists of freeing every memory area that should be freed (but
- *  which we haven't gotten around to doing yet). And, no,
- *  "g_blow_chunks" doesn't follow the naming scheme, but it is a
- *  much better name than "g_mem_chunk_clean_all" or something
- *  similar.
- */
-void g_blow_chunks (void);
-
-
-/* Timer
- */
-GTimer* g_timer_new	(void);
-void	g_timer_destroy (GTimer	 *timer);
-void	g_timer_start	(GTimer	 *timer);
-void	g_timer_stop	(GTimer	 *timer);
-void	g_timer_reset	(GTimer	 *timer);
-gdouble g_timer_elapsed (GTimer	 *timer,
-			 gulong	 *microseconds);
-
-
-/* String utility functions that modify a string argument or
- * return a constant string that must not be freed.
- */
-#define	 G_STR_DELIMITERS	"_-|> <."
-gchar*	 g_strdelimit		(gchar	     *string,
-				 const gchar *delimiters,
-				 gchar	      new_delimiter);
-gdouble	 g_strtod		(const gchar *nptr,
-				 gchar	    **endptr);
-gchar*	 g_strerror		(gint	      errnum);
-gchar*	 g_strsignal		(gint	      signum);
-gint	 g_strcasecmp		(const gchar *s1,
-				 const gchar *s2);
-gint	 g_strncasecmp		(const gchar *s1,
-				 const gchar *s2,
-				 guint 	      n);
-void	 g_strdown		(gchar	     *string);
-void	 g_strup		(gchar	     *string);
-void	 g_strreverse		(gchar	     *string);
-/* removes leading spaces */
-gchar*   g_strchug              (gchar        *string);
-/* removes trailing spaces */
-gchar*  g_strchomp              (gchar        *string);
-/* removes leading & trailing spaces */
-#define g_strstrip( string )	g_strchomp (g_strchug (string))
-
-/* String utility functions that return a newly allocated string which
- * ought to be freed from the caller at some point.
- */
-gchar*	 g_strdup		(const gchar *str);
-gchar*	 g_strdup_printf	(const gchar *format,
-				 ...) G_GNUC_PRINTF (1, 2);
-gchar*	 g_strdup_vprintf	(const gchar *format,
-				 va_list      args);
-gchar*	 g_strndup		(const gchar *str,
-				 guint	      n);
-gchar*	 g_strnfill		(guint	      length,
-				 gchar	      fill_char);
-gchar*	 g_strconcat		(const gchar *string1,
-				 ...); /* NULL terminated */
-gchar*   g_strjoin		(const gchar  *separator,
-				 ...); /* NULL terminated */
-gchar*	 g_strescape		(gchar	      *string);
-gpointer g_memdup		(gconstpointer mem,
-				 guint	       byte_size);
-
-/* NULL terminated string arrays.
- * g_strsplit() splits up string into max_tokens tokens at delim and
- * returns a newly allocated string array.
- * g_strjoinv() concatenates all of str_array's strings, sliding in an
- * optional separator, the returned string is newly allocated.
- * g_strfreev() frees the array itself and all of its strings.
- */
-gchar**	 g_strsplit		(const gchar  *string,
-				 const gchar  *delimiter,
-				 gint          max_tokens);
-gchar*   g_strjoinv		(const gchar  *separator,
-				 gchar       **str_array);
-void     g_strfreev		(gchar       **str_array);
-
-
-
-/* calculate a string size, guarranteed to fit format + args.
- */
-guint	g_printf_string_upper_bound (const gchar* format,
-				     va_list	  args);
-
-
-/* Retrive static string info
- */
-gchar*	g_get_user_name		(void);
-gchar*	g_get_real_name		(void);
-gchar*	g_get_home_dir		(void);
-gchar*	g_get_tmp_dir		(void);
-gchar*	g_get_prgname		(void);
-void	g_set_prgname		(const gchar *prgname);
-
-
-/* Miscellaneous utility functions
- */
-guint	g_parse_debug_string	(const gchar *string,
-				 GDebugKey   *keys,
-				 guint	      nkeys);
-gint	g_snprintf		(gchar	     *string,
-				 gulong	      n,
-				 gchar const *format,
-				 ...) G_GNUC_PRINTF (3, 4);
-gint	g_vsnprintf		(gchar	     *string,
-				 gulong	      n,
-				 gchar const *format,
-				 va_list      args);
-gchar*	g_basename		(const gchar *file_name);
-/* Check if a file name is an absolute path */
-gboolean g_path_is_absolute	(const gchar *file_name);
-/* In case of absolute paths, skip the root part */
-gchar*  g_path_skip_root	(gchar       *file_name);
-
-/* strings are newly allocated with g_malloc() */
-gchar*	g_dirname		(const gchar *file_name);
-gchar*	g_get_current_dir	(void);
-gchar*  g_getenv		(const gchar *variable);
-
-
-/* we use a GLib function as a replacement for ATEXIT, so
- * the programmer is not required to check the return value
- * (if there is any in the implementation) and doesn't encounter
- * missing include files.
- */
-void	g_atexit		(GVoidFunc    func);
-
-
-/* Bit tests
- */
-G_INLINE_FUNC gint	g_bit_nth_lsf (guint32 mask,
-				       gint    nth_bit);
-#ifdef	G_CAN_INLINE
-G_INLINE_FUNC gint
-g_bit_nth_lsf (guint32 mask,
-	       gint    nth_bit)
-{
-  do
-    {
-      nth_bit++;
-      if (mask & (1 << (guint) nth_bit))
-	return nth_bit;
-    }
-  while (nth_bit < 32);
-  return -1;
-}
-#endif	/* G_CAN_INLINE */
-
-G_INLINE_FUNC gint	g_bit_nth_msf (guint32 mask,
-				       gint    nth_bit);
-#ifdef G_CAN_INLINE
-G_INLINE_FUNC gint
-g_bit_nth_msf (guint32 mask,
-	       gint    nth_bit)
-{
-  if (nth_bit < 0)
-    nth_bit = 32;
-  do
-    {
-      nth_bit--;
-      if (mask & (1 << (guint) nth_bit))
-	return nth_bit;
-    }
-  while (nth_bit > 0);
-  return -1;
-}
-#endif	/* G_CAN_INLINE */
-
-G_INLINE_FUNC guint	g_bit_storage (guint number);
-#ifdef G_CAN_INLINE
-G_INLINE_FUNC guint
-g_bit_storage (guint number)
-{
-  register guint n_bits = 0;
-  
-  do
-    {
-      n_bits++;
-      number >>= 1;
-    }
-  while (number);
-  return n_bits;
-}
-#endif	/* G_CAN_INLINE */
-
-/* String Chunks
- */
-GStringChunk* g_string_chunk_new	   (gint size);
-void	      g_string_chunk_free	   (GStringChunk *chunk);
-gchar*	      g_string_chunk_insert	   (GStringChunk *chunk,
-					    const gchar	 *string);
-gchar*	      g_string_chunk_insert_const  (GStringChunk *chunk,
-					    const gchar	 *string);
-
-
-/* Strings
- */
-GString* g_string_new	    (const gchar *init);
-GString* g_string_sized_new (guint	  dfl_size);
-void	 g_string_free	    (GString	 *string,
-			     gint	  free_segment);
-GString* g_string_assign    (GString	 *lval,
-			     const gchar *rval);
-GString* g_string_truncate  (GString	 *string,
-			     gint	  len);
-GString* g_string_append    (GString	 *string,
-			     const gchar *val);
-GString* g_string_append_c  (GString	 *string,
-			     gchar	  c);
-GString* g_string_prepend   (GString	 *string,
-			     const gchar *val);
-GString* g_string_prepend_c (GString	 *string,
-			     gchar	  c);
-GString* g_string_insert    (GString	 *string,
-			     gint	  pos,
-			     const gchar *val);
-GString* g_string_insert_c  (GString	 *string,
-			     gint	  pos,
-			     gchar	  c);
-GString* g_string_erase	    (GString	 *string,
-			     gint	  pos,
-			     gint	  len);
-GString* g_string_down	    (GString	 *string);
-GString* g_string_up	    (GString	 *string);
-void	 g_string_sprintf   (GString	 *string,
-			     const gchar *format,
-			     ...) G_GNUC_PRINTF (2, 3);
-void	 g_string_sprintfa  (GString	 *string,
-			     const gchar *format,
-			     ...) G_GNUC_PRINTF (2, 3);
-
-
-/* Resizable arrays, remove fills any cleared spot and shortens the
- * array, while preserving the order. remove_fast will distort the
- * order by moving the last element to the position of the removed 
- */
-
-#define g_array_append_val(a,v)	  g_array_append_vals (a, &v, 1)
-#define g_array_prepend_val(a,v)  g_array_prepend_vals (a, &v, 1)
-#define g_array_insert_val(a,i,v) g_array_insert_vals (a, i, &v, 1)
-#define g_array_index(a,t,i)      (((t*) (a)->data) [(i)])
-
-GArray* g_array_new	          (gboolean	    zero_terminated,
-				   gboolean	    clear,
-				   guint	    element_size);
-void	g_array_free	          (GArray	   *array,
-				   gboolean	    free_segment);
-GArray* g_array_append_vals       (GArray	   *array,
-				   gconstpointer    data,
-				   guint	    len);
-GArray* g_array_prepend_vals      (GArray	   *array,
-				   gconstpointer    data,
-				   guint	    len);
-GArray* g_array_insert_vals       (GArray          *array,
-				   guint            index,
-				   gconstpointer    data,
-				   guint            len);
-GArray* g_array_set_size          (GArray	   *array,
-				   guint	    length);
-GArray* g_array_remove_index	  (GArray	   *array,
-				   guint	    index);
-GArray* g_array_remove_index_fast (GArray	   *array,
-				   guint	    index);
-
-/* Resizable pointer array.  This interface is much less complicated
- * than the above.  Add appends appends a pointer.  Remove fills any
- * cleared spot and shortens the array. remove_fast will again distort
- * order.  
- */
-#define	    g_ptr_array_index(array,index) (array->pdata)[index]
-GPtrArray*  g_ptr_array_new		   (void);
-void	    g_ptr_array_free		   (GPtrArray	*array,
-					    gboolean	 free_seg);
-void	    g_ptr_array_set_size	   (GPtrArray	*array,
-					    gint	 length);
-gpointer    g_ptr_array_remove_index	   (GPtrArray	*array,
-					    guint	 index);
-gpointer    g_ptr_array_remove_index_fast  (GPtrArray	*array,
-					    guint	 index);
-gboolean    g_ptr_array_remove		   (GPtrArray	*array,
-					    gpointer	 data);
-gboolean    g_ptr_array_remove_fast        (GPtrArray	*array,
-					    gpointer	 data);
-void	    g_ptr_array_add		   (GPtrArray	*array,
-					    gpointer	 data);
-
-/* Byte arrays, an array of guint8.  Implemented as a GArray,
- * but type-safe.
- */
-
-GByteArray* g_byte_array_new	           (void);
-void	    g_byte_array_free	           (GByteArray	 *array,
-					    gboolean	  free_segment);
-GByteArray* g_byte_array_append	           (GByteArray	 *array,
-					    const guint8 *data,
-					    guint	  len);
-GByteArray* g_byte_array_prepend           (GByteArray	 *array,
-					    const guint8 *data,
-					    guint	  len);
-GByteArray* g_byte_array_set_size          (GByteArray	 *array,
-					    guint	  length);
-GByteArray* g_byte_array_remove_index	   (GByteArray	 *array,
-					    guint	  index);
-GByteArray* g_byte_array_remove_index_fast (GByteArray	 *array,
-					    guint	  index);
-
-
-/* Hash Functions
- */
-gint  g_str_equal (gconstpointer   v,
-		   gconstpointer   v2);
-guint g_str_hash  (gconstpointer   v);
-
-gint  g_int_equal (gconstpointer   v,
-		   gconstpointer   v2);
-guint g_int_hash  (gconstpointer   v);
-
-/* This "hash" function will just return the key's adress as an
- * unsigned integer. Useful for hashing on plain adresses or
- * simple integer values.
- * passing NULL into g_hash_table_new() as GHashFunc has the
- * same effect as passing g_direct_hash().
- */
-guint g_direct_hash  (gconstpointer v);
-gint  g_direct_equal (gconstpointer v,
-		      gconstpointer v2);
-
-
-/* Quarks (string<->id association)
- */
-GQuark	  g_quark_try_string		(const gchar	*string);
-GQuark	  g_quark_from_static_string	(const gchar	*string);
-GQuark	  g_quark_from_string		(const gchar	*string);
-gchar*	  g_quark_to_string		(GQuark		 quark);
-
-
-/* Keyed Data List
- */
-void	  g_datalist_init		 (GData		 **datalist);
-void	  g_datalist_clear		 (GData		 **datalist);
-gpointer  g_datalist_id_get_data	 (GData		 **datalist,
-					  GQuark	   key_id);
-void	  g_datalist_id_set_data_full	 (GData		 **datalist,
-					  GQuark	   key_id,
-					  gpointer	   data,
-					  GDestroyNotify   destroy_func);
-void	  g_datalist_id_remove_no_notify (GData		 **datalist,
-					  GQuark	   key_id);
-void	  g_datalist_foreach		 (GData		 **datalist,
-					  GDataForeachFunc func,
-					  gpointer	   user_data);
-#define	  g_datalist_id_set_data(dl, q, d)	\
-     g_datalist_id_set_data_full ((dl), (q), (d), NULL)
-#define	  g_datalist_id_remove_data(dl, q)	\
-     g_datalist_id_set_data ((dl), (q), NULL)
-#define	  g_datalist_get_data(dl, k)		\
-     (g_datalist_id_get_data ((dl), g_quark_try_string (k)))
-#define	  g_datalist_set_data_full(dl, k, d, f)	\
-     g_datalist_id_set_data_full ((dl), g_quark_from_string (k), (d), (f))
-#define	  g_datalist_remove_no_notify(dl, k)	\
-     g_datalist_id_remove_no_notify ((dl), g_quark_try_string (k))
-#define	  g_datalist_set_data(dl, k, d)		\
-     g_datalist_set_data_full ((dl), (k), (d), NULL)
-#define	  g_datalist_remove_data(dl, k)		\
-     g_datalist_id_set_data ((dl), g_quark_try_string (k), NULL)
-
-
-/* Location Associated Keyed Data
- */
-void	  g_dataset_destroy		(gconstpointer	  dataset_location);
-gpointer  g_dataset_id_get_data		(gconstpointer	  dataset_location,
-					 GQuark		  key_id);
-void	  g_dataset_id_set_data_full	(gconstpointer	  dataset_location,
-					 GQuark		  key_id,
-					 gpointer	  data,
-					 GDestroyNotify	  destroy_func);
-void	  g_dataset_id_remove_no_notify	(gconstpointer	  dataset_location,
-					 GQuark		  key_id);
-void	  g_dataset_foreach		(gconstpointer	  dataset_location,
-					 GDataForeachFunc func,
-					 gpointer	  user_data);
-#define	  g_dataset_id_set_data(l, k, d)	\
-     g_dataset_id_set_data_full ((l), (k), (d), NULL)
-#define	  g_dataset_id_remove_data(l, k)	\
-     g_dataset_id_set_data ((l), (k), NULL)
-#define	  g_dataset_get_data(l, k)		\
-     (g_dataset_id_get_data ((l), g_quark_try_string (k)))
-#define	  g_dataset_set_data_full(l, k, d, f)	\
-     g_dataset_id_set_data_full ((l), g_quark_from_string (k), (d), (f))
-#define	  g_dataset_remove_no_notify(l, k)	\
-     g_dataset_id_remove_no_notify ((l), g_quark_try_string (k))
-#define	  g_dataset_set_data(l, k, d)		\
-     g_dataset_set_data_full ((l), (k), (d), NULL)
-#define	  g_dataset_remove_data(l, k)		\
-     g_dataset_id_set_data ((l), g_quark_try_string (k), NULL)
-
-
-/* GScanner: Flexible lexical scanner for general purpose.
- */
-
-/* Character sets */
-#define G_CSET_A_2_Z	"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
-#define G_CSET_a_2_z	"abcdefghijklmnopqrstuvwxyz"
-#define G_CSET_LATINC	"\300\301\302\303\304\305\306"\
-			"\307\310\311\312\313\314\315\316\317\320"\
-			"\321\322\323\324\325\326"\
-			"\330\331\332\333\334\335\336"
-#define G_CSET_LATINS	"\337\340\341\342\343\344\345\346"\
-			"\347\350\351\352\353\354\355\356\357\360"\
-			"\361\362\363\364\365\366"\
-			"\370\371\372\373\374\375\376\377"
-
-/* Error types */
-typedef enum
-{
-  G_ERR_UNKNOWN,
-  G_ERR_UNEXP_EOF,
-  G_ERR_UNEXP_EOF_IN_STRING,
-  G_ERR_UNEXP_EOF_IN_COMMENT,
-  G_ERR_NON_DIGIT_IN_CONST,
-  G_ERR_DIGIT_RADIX,
-  G_ERR_FLOAT_RADIX,
-  G_ERR_FLOAT_MALFORMED
-} GErrorType;
-
-/* Token types */
-typedef enum
-{
-  G_TOKEN_EOF			=   0,
-  
-  G_TOKEN_LEFT_PAREN		= '(',
-  G_TOKEN_RIGHT_PAREN		= ')',
-  G_TOKEN_LEFT_CURLY		= '{',
-  G_TOKEN_RIGHT_CURLY		= '}',
-  G_TOKEN_LEFT_BRACE		= '[',
-  G_TOKEN_RIGHT_BRACE		= ']',
-  G_TOKEN_EQUAL_SIGN		= '=',
-  G_TOKEN_COMMA			= ',',
-  
-  G_TOKEN_NONE			= 256,
-  
-  G_TOKEN_ERROR,
-  
-  G_TOKEN_CHAR,
-  G_TOKEN_BINARY,
-  G_TOKEN_OCTAL,
-  G_TOKEN_INT,
-  G_TOKEN_HEX,
-  G_TOKEN_FLOAT,
-  G_TOKEN_STRING,
-  
-  G_TOKEN_SYMBOL,
-  G_TOKEN_IDENTIFIER,
-  G_TOKEN_IDENTIFIER_NULL,
-  
-  G_TOKEN_COMMENT_SINGLE,
-  G_TOKEN_COMMENT_MULTI,
-  G_TOKEN_LAST
-} GTokenType;
-
-union	_GTokenValue
-{
-  gpointer	v_symbol;
-  gchar		*v_identifier;
-  gulong	v_binary;
-  gulong	v_octal;
-  gulong	v_int;
-  gdouble	v_float;
-  gulong	v_hex;
-  gchar		*v_string;
-  gchar		*v_comment;
-  guchar	v_char;
-  guint		v_error;
-};
-
-struct	_GScannerConfig
-{
-  /* Character sets
-   */
-  gchar		*cset_skip_characters;		/* default: " \t\n" */
-  gchar		*cset_identifier_first;
-  gchar		*cset_identifier_nth;
-  gchar		*cpair_comment_single;		/* default: "#\n" */
-  
-  /* Should symbol lookup work case sensitive?
-   */
-  guint		case_sensitive : 1;
-  
-  /* Boolean values to be adjusted "on the fly"
-   * to configure scanning behaviour.
-   */
-  guint		skip_comment_multi : 1;		/* C like comment */
-  guint		skip_comment_single : 1;	/* single line comment */
-  guint		scan_comment_multi : 1;		/* scan multi line comments? */
-  guint		scan_identifier : 1;
-  guint		scan_identifier_1char : 1;
-  guint		scan_identifier_NULL : 1;
-  guint		scan_symbols : 1;
-  guint		scan_binary : 1;
-  guint		scan_octal : 1;
-  guint		scan_float : 1;
-  guint		scan_hex : 1;			/* `0x0ff0' */
-  guint		scan_hex_dollar : 1;		/* `$0ff0' */
-  guint		scan_string_sq : 1;		/* string: 'anything' */
-  guint		scan_string_dq : 1;		/* string: "\\-escapes!\n" */
-  guint		numbers_2_int : 1;		/* bin, octal, hex => int */
-  guint		int_2_float : 1;		/* int => G_TOKEN_FLOAT? */
-  guint		identifier_2_string : 1;
-  guint		char_2_token : 1;		/* return G_TOKEN_CHAR? */
-  guint		symbol_2_token : 1;
-  guint		scope_0_fallback : 1;		/* try scope 0 on lookups? */
-};
-
-struct	_GScanner
-{
-  /* unused fields */
-  gpointer		user_data;
-  guint			max_parse_errors;
-  
-  /* g_scanner_error() increments this field */
-  guint			parse_errors;
-  
-  /* name of input stream, featured by the default message handler */
-  const gchar		*input_name;
-  
-  /* data pointer for derived structures */
-  gpointer		derived_data;
-  
-  /* link into the scanner configuration */
-  GScannerConfig	*config;
-  
-  /* fields filled in after g_scanner_get_next_token() */
-  GTokenType		token;
-  GTokenValue		value;
-  guint			line;
-  guint			position;
-  
-  /* fields filled in after g_scanner_peek_next_token() */
-  GTokenType		next_token;
-  GTokenValue		next_value;
-  guint			next_line;
-  guint			next_position;
-  
-  /* to be considered private */
-  GHashTable		*symbol_table;
-  gint			input_fd;
-  const gchar		*text;
-  const gchar		*text_end;
-  gchar			*buffer;
-  guint			scope_id;
-  
-  /* handler function for _warn and _error */
-  GScannerMsgFunc	msg_handler;
-};
-
-GScanner*	g_scanner_new			(GScannerConfig *config_templ);
-void		g_scanner_destroy		(GScanner	*scanner);
-void		g_scanner_input_file		(GScanner	*scanner,
-						 gint		input_fd);
-void		g_scanner_sync_file_offset	(GScanner	*scanner);
-void		g_scanner_input_text		(GScanner	*scanner,
-						 const	gchar	*text,
-						 guint		text_len);
-GTokenType	g_scanner_get_next_token	(GScanner	*scanner);
-GTokenType	g_scanner_peek_next_token	(GScanner	*scanner);
-GTokenType	g_scanner_cur_token		(GScanner	*scanner);
-GTokenValue	g_scanner_cur_value		(GScanner	*scanner);
-guint		g_scanner_cur_line		(GScanner	*scanner);
-guint		g_scanner_cur_position		(GScanner	*scanner);
-gboolean	g_scanner_eof			(GScanner	*scanner);
-guint		g_scanner_set_scope		(GScanner	*scanner,
-						 guint		 scope_id);
-void		g_scanner_scope_add_symbol	(GScanner	*scanner,
-						 guint		 scope_id,
-						 const gchar	*symbol,
-						 gpointer	value);
-void		g_scanner_scope_remove_symbol	(GScanner	*scanner,
-						 guint		 scope_id,
-						 const gchar	*symbol);
-gpointer	g_scanner_scope_lookup_symbol	(GScanner	*scanner,
-						 guint		 scope_id,
-						 const gchar	*symbol);
-void		g_scanner_scope_foreach_symbol	(GScanner	*scanner,
-						 guint		 scope_id,
-						 GHFunc		 func,
-						 gpointer	 user_data);
-gpointer	g_scanner_lookup_symbol		(GScanner	*scanner,
-						 const gchar	*symbol);
-void		g_scanner_freeze_symbol_table	(GScanner	*scanner);
-void		g_scanner_thaw_symbol_table	(GScanner	*scanner);
-void		g_scanner_unexp_token		(GScanner	*scanner,
-						 GTokenType	expected_token,
-						 const gchar	*identifier_spec,
-						 const gchar	*symbol_spec,
-						 const gchar	*symbol_name,
-						 const gchar	*message,
-						 gint		 is_error);
-void		g_scanner_error			(GScanner	*scanner,
-						 const gchar	*format,
-						 ...) G_GNUC_PRINTF (2,3);
-void		g_scanner_warn			(GScanner	*scanner,
-						 const gchar	*format,
-						 ...) G_GNUC_PRINTF (2,3);
-gint		g_scanner_stat_mode		(const gchar	*filename);
-/* keep downward source compatibility */
-#define		g_scanner_add_symbol( scanner, symbol, value )	G_STMT_START { \
-  g_scanner_scope_add_symbol ((scanner), 0, (symbol), (value)); \
-} G_STMT_END
-#define		g_scanner_remove_symbol( scanner, symbol )	G_STMT_START { \
-  g_scanner_scope_remove_symbol ((scanner), 0, (symbol)); \
-} G_STMT_END
-#define		g_scanner_foreach_symbol( scanner, func, data )	G_STMT_START { \
-  g_scanner_scope_foreach_symbol ((scanner), 0, (func), (data)); \
-} G_STMT_END
-
-
-/* GCompletion
- */
-
-struct _GCompletion
-{
-  GList* items;
-  GCompletionFunc func;
-  
-  gchar* prefix;
-  GList* cache;
-};
-
-GCompletion* g_completion_new	       (GCompletionFunc func);
-void	     g_completion_add_items    (GCompletion*	cmp,
-					GList*		items);
-void	     g_completion_remove_items (GCompletion*	cmp,
-					GList*		items);
-void	     g_completion_clear_items  (GCompletion*	cmp);
-GList*	     g_completion_complete     (GCompletion*	cmp,
-					gchar*		prefix,
-					gchar**		new_prefix);
-void	     g_completion_free	       (GCompletion*	cmp);
-
-
-/* GDate
- *
- * Date calculations (not time for now, to be resolved). These are a
- * mutant combination of Steffen Beyer's DateCalc routines
- * (http://www.perl.com/CPAN/authors/id/STBEY/) and Jon Trowbridge's
- * date routines (written for in-house software).  Written by Havoc
- * Pennington <hp@pobox.com> 
- */
-
-typedef guint16 GDateYear;
-typedef guint8  GDateDay;   /* day of the month */
-typedef struct _GDate GDate;
-/* make struct tm known without having to include time.h */
-struct tm;
-
-/* enum used to specify order of appearance in parsed date strings */
-typedef enum
-{
-  G_DATE_DAY   = 0,
-  G_DATE_MONTH = 1,
-  G_DATE_YEAR  = 2
-} GDateDMY;
-
-/* actual week and month values */
-typedef enum
-{
-  G_DATE_BAD_WEEKDAY  = 0,
-  G_DATE_MONDAY       = 1,
-  G_DATE_TUESDAY      = 2,
-  G_DATE_WEDNESDAY    = 3,
-  G_DATE_THURSDAY     = 4,
-  G_DATE_FRIDAY       = 5,
-  G_DATE_SATURDAY     = 6,
-  G_DATE_SUNDAY       = 7
-} GDateWeekday;
-typedef enum
-{
-  G_DATE_BAD_MONTH = 0,
-  G_DATE_JANUARY   = 1,
-  G_DATE_FEBRUARY  = 2,
-  G_DATE_MARCH     = 3,
-  G_DATE_APRIL     = 4,
-  G_DATE_MAY       = 5,
-  G_DATE_JUNE      = 6,
-  G_DATE_JULY      = 7,
-  G_DATE_AUGUST    = 8,
-  G_DATE_SEPTEMBER = 9,
-  G_DATE_OCTOBER   = 10,
-  G_DATE_NOVEMBER  = 11,
-  G_DATE_DECEMBER  = 12
-} GDateMonth;
-
-#define G_DATE_BAD_JULIAN 0U
-#define G_DATE_BAD_DAY    0U
-#define G_DATE_BAD_YEAR   0U
-
-/* Note: directly manipulating structs is generally a bad idea, but
- * in this case it's an *incredibly* bad idea, because all or part
- * of this struct can be invalid at any given time. Use the functions,
- * or you will get hosed, I promise.
- */
-struct _GDate
-{ 
-  guint julian_days : 32; /* julian days representation - we use a
-                           *  bitfield hoping that 64 bit platforms
-                           *  will pack this whole struct in one big
-                           *  int 
-                           */
-
-  guint julian : 1;    /* julian is valid */
-  guint dmy    : 1;    /* dmy is valid */
-
-  /* DMY representation */
-  guint day    : 6;  
-  guint month  : 4; 
-  guint year   : 16; 
-};
-
-/* g_date_new() returns an invalid date, you then have to _set() stuff 
- * to get a usable object. You can also allocate a GDate statically,
- * then call g_date_clear() to initialize.
- */
-GDate*       g_date_new                   (void);
-GDate*       g_date_new_dmy               (GDateDay     day, 
-                                           GDateMonth   month, 
-                                           GDateYear    year);
-GDate*       g_date_new_julian            (guint32      julian_day);
-void         g_date_free                  (GDate       *date);
-
-/* check g_date_valid() after doing an operation that might fail, like
- * _parse.  Almost all g_date operations are undefined on invalid
- * dates (the exceptions are the mutators, since you need those to
- * return to validity).  
- */
-gboolean     g_date_valid                 (GDate       *date);
-gboolean     g_date_valid_day             (GDateDay     day);
-gboolean     g_date_valid_month           (GDateMonth   month);
-gboolean     g_date_valid_year            (GDateYear    year);
-gboolean     g_date_valid_weekday         (GDateWeekday weekday);
-gboolean     g_date_valid_julian          (guint32      julian_date);
-gboolean     g_date_valid_dmy             (GDateDay     day,
-                                           GDateMonth   month,
-                                           GDateYear    year);
-
-GDateWeekday g_date_weekday               (GDate       *date);
-GDateMonth   g_date_month                 (GDate       *date);
-GDateYear    g_date_year                  (GDate       *date);
-GDateDay     g_date_day                   (GDate       *date);
-guint32      g_date_julian                (GDate       *date);
-guint        g_date_day_of_year           (GDate       *date);
-
-/* First monday/sunday is the start of week 1; if we haven't reached
- * that day, return 0. These are not ISO weeks of the year; that
- * routine needs to be added.
- * these functions return the number of weeks, starting on the
- * corrsponding day
- */
-guint        g_date_monday_week_of_year   (GDate      *date);
-guint        g_date_sunday_week_of_year   (GDate      *date);
-
-/* If you create a static date struct you need to clear it to get it
- * in a sane state before use. You can clear a whole array at
- * once with the ndates argument.
- */
-void         g_date_clear                 (GDate       *date, 
-                                           guint        n_dates);
-
-/* The parse routine is meant for dates typed in by a user, so it
- * permits many formats but tries to catch common typos. If your data
- * needs to be strictly validated, it is not an appropriate function.
- */
-void         g_date_set_parse             (GDate       *date,
-                                           const gchar *str);
-void         g_date_set_time              (GDate       *date, 
-                                           GTime        time);
-void         g_date_set_month             (GDate       *date, 
-                                           GDateMonth   month);
-void         g_date_set_day               (GDate       *date, 
-                                           GDateDay     day);
-void         g_date_set_year              (GDate       *date,
-                                           GDateYear    year);
-void         g_date_set_dmy               (GDate       *date,
-                                           GDateDay     day,
-                                           GDateMonth   month,
-                                           GDateYear    y);
-void         g_date_set_julian            (GDate       *date,
-                                           guint32      julian_date);
-gboolean     g_date_is_first_of_month     (GDate       *date);
-gboolean     g_date_is_last_of_month      (GDate       *date);
-
-/* To go forward by some number of weeks just go forward weeks*7 days */
-void         g_date_add_days              (GDate       *date, 
-                                           guint        n_days);
-void         g_date_subtract_days         (GDate       *date, 
-                                           guint        n_days);
-
-/* If you add/sub months while day > 28, the day might change */
-void         g_date_add_months            (GDate       *date,
-                                           guint        n_months);
-void         g_date_subtract_months       (GDate       *date,
-                                           guint        n_months);
-
-/* If it's feb 29, changing years can move you to the 28th */
-void         g_date_add_years             (GDate       *date,
-                                           guint        n_years);
-void         g_date_subtract_years        (GDate       *date,
-                                           guint        n_years);
-gboolean     g_date_is_leap_year          (GDateYear    year);
-guint8       g_date_days_in_month         (GDateMonth   month, 
-                                           GDateYear    year);
-guint8       g_date_monday_weeks_in_year  (GDateYear    year);
-guint8       g_date_sunday_weeks_in_year  (GDateYear    year);
-
-/* qsort-friendly (with a cast...) */
-gint         g_date_compare               (GDate       *lhs,
-                                           GDate       *rhs);
-void         g_date_to_struct_tm          (GDate       *date,
-                                           struct tm   *tm);
-
-/* Just like strftime() except you can only use date-related formats.
- *   Using a time format is undefined.
- */
-gsize        g_date_strftime              (gchar       *s,
-                                           gsize        slen,
-                                           const gchar *format,
-                                           GDate       *date);
-
-
-/* GRelation
- *
- * Indexed Relations.  Imagine a really simple table in a
- * database.  Relations are not ordered.  This data type is meant for
- * maintaining a N-way mapping.
- *
- * g_relation_new() creates a relation with FIELDS fields
- *
- * g_relation_destroy() frees all resources
- * g_tuples_destroy() frees the result of g_relation_select()
- *
- * g_relation_index() indexes relation FIELD with the provided
- *   equality and hash functions.  this must be done before any
- *   calls to insert are made.
- *
- * g_relation_insert() inserts a new tuple.  you are expected to
- *   provide the right number of fields.
- *
- * g_relation_delete() deletes all relations with KEY in FIELD
- * g_relation_select() returns ...
- * g_relation_count() counts ...
- */
-
-GRelation* g_relation_new     (gint	    fields);
-void	   g_relation_destroy (GRelation   *relation);
-void	   g_relation_index   (GRelation   *relation,
-			       gint	    field,
-			       GHashFunc    hash_func,
-			       GCompareFunc key_compare_func);
-void	   g_relation_insert  (GRelation   *relation,
-			       ...);
-gint	   g_relation_delete  (GRelation   *relation,
-			       gconstpointer  key,
-			       gint	    field);
-GTuples*   g_relation_select  (GRelation   *relation,
-			       gconstpointer  key,
-			       gint	    field);
-gint	   g_relation_count   (GRelation   *relation,
-			       gconstpointer  key,
-			       gint	    field);
-gboolean   g_relation_exists  (GRelation   *relation,
-			       ...);
-void	   g_relation_print   (GRelation   *relation);
-
-void	   g_tuples_destroy   (GTuples	   *tuples);
-gpointer   g_tuples_index     (GTuples	   *tuples,
-			       gint	    index,
-			       gint	    field);
-
-
-/* Prime numbers.
- */
-
-/* This function returns prime numbers spaced by approximately 1.5-2.0
- * and is for use in resizing data structures which prefer
- * prime-valued sizes.	The closest spaced prime function returns the
- * next largest prime, or the highest it knows about which is about
- * MAXINT/4.
- */
-guint	   g_spaced_primes_closest (guint num);
-
-
-/* GIOChannel
- */
-
-typedef struct _GIOFuncs GIOFuncs;
-typedef enum
-{
-  G_IO_ERROR_NONE,
-  G_IO_ERROR_AGAIN,
-  G_IO_ERROR_INVAL,
-  G_IO_ERROR_UNKNOWN
-} GIOError;
-typedef enum
-{
-  G_SEEK_CUR,
-  G_SEEK_SET,
-  G_SEEK_END
-} GSeekType;
-typedef enum
-{
-  G_IO_IN	GLIB_SYSDEF_POLLIN,
-  G_IO_OUT	GLIB_SYSDEF_POLLOUT,
-  G_IO_PRI	GLIB_SYSDEF_POLLPRI,
-  G_IO_ERR	GLIB_SYSDEF_POLLERR,
-  G_IO_HUP	GLIB_SYSDEF_POLLHUP,
-  G_IO_NVAL	GLIB_SYSDEF_POLLNVAL
-} GIOCondition;
-
-struct _GIOChannel
-{
-  guint channel_flags;
-  guint ref_count;
-  GIOFuncs *funcs;
-};
-
-typedef gboolean (*GIOFunc) (GIOChannel   *source,
-			     GIOCondition  condition,
-			     gpointer      data);
-struct _GIOFuncs
-{
-  GIOError (*io_read)   (GIOChannel 	*channel, 
-		         gchar      	*buf, 
-		         guint      	 count,
-			 guint      	*bytes_read);
-  GIOError (*io_write)  (GIOChannel 	*channel, 
-		 	 gchar      	*buf, 
-			 guint      	 count,
-			 guint      	*bytes_written);
-  GIOError (*io_seek)   (GIOChannel   	*channel, 
-		 	 gint       	 offset, 
-		  	 GSeekType  	 type);
-  void (*io_close)      (GIOChannel	*channel);
-  guint (*io_add_watch) (GIOChannel     *channel,
-			 gint            priority,
-			 GIOCondition    condition,
-			 GIOFunc         func,
-			 gpointer        user_data,
-			 GDestroyNotify  notify);
-  void (*io_free)       (GIOChannel	*channel);
-};
-
-void        g_io_channel_init   (GIOChannel    *channel);
-void        g_io_channel_ref    (GIOChannel    *channel);
-void        g_io_channel_unref  (GIOChannel    *channel);
-GIOError    g_io_channel_read   (GIOChannel    *channel, 
-			         gchar         *buf, 
-			         guint          count,
-			         guint         *bytes_read);
-GIOError  g_io_channel_write    (GIOChannel    *channel, 
-			         gchar         *buf, 
-			         guint          count,
-			         guint         *bytes_written);
-GIOError  g_io_channel_seek     (GIOChannel    *channel,
-			         gint           offset, 
-			         GSeekType      type);
-void      g_io_channel_close    (GIOChannel    *channel);
-guint     g_io_add_watch_full   (GIOChannel    *channel,
-			         gint           priority,
-			         GIOCondition   condition,
-			         GIOFunc        func,
-			         gpointer       user_data,
-			         GDestroyNotify notify);
-guint    g_io_add_watch         (GIOChannel    *channel,
-			         GIOCondition   condition,
-			         GIOFunc        func,
-			         gpointer       user_data);
-
-
-/* Main loop
- */
-typedef struct _GTimeVal	GTimeVal;
-typedef struct _GSourceFuncs	GSourceFuncs;
-typedef struct _GMainLoop	GMainLoop;	/* Opaque */
-
-struct _GTimeVal
-{
-  glong tv_sec;
-  glong tv_usec;
-};
-struct _GSourceFuncs
-{
-  gboolean (*prepare)  (gpointer  source_data, 
-			GTimeVal *current_time,
-			gint     *timeout,
-			gpointer  user_data);
-  gboolean (*check)    (gpointer  source_data,
-			GTimeVal *current_time,
-			gpointer  user_data);
-  gboolean (*dispatch) (gpointer  source_data, 
-			GTimeVal *current_time,
-			gpointer  user_data);
-  GDestroyNotify destroy;
-};
-
-/* Standard priorities */
-
-#define G_PRIORITY_HIGH            -100
-#define G_PRIORITY_DEFAULT          0
-#define G_PRIORITY_HIGH_IDLE        100
-#define G_PRIORITY_DEFAULT_IDLE     200
-#define G_PRIORITY_LOW	            300
-
-typedef gboolean (*GSourceFunc) (gpointer data);
-
-/* Hooks for adding to the main loop */
-guint    g_source_add                        (gint           priority, 
-					      gboolean       can_recurse,
-					      GSourceFuncs  *funcs,
-					      gpointer       source_data, 
-					      gpointer       user_data,
-					      GDestroyNotify notify);
-gboolean g_source_remove                     (guint          tag);
-gboolean g_source_remove_by_user_data        (gpointer       user_data);
-gboolean g_source_remove_by_source_data      (gpointer       source_data);
-gboolean g_source_remove_by_funcs_user_data  (GSourceFuncs  *funcs,
-					      gpointer       user_data);
-
-void g_get_current_time		    (GTimeVal	   *result);
-
-/* Running the main loop */
-GMainLoop*	g_main_new		(gboolean	 is_running);
-void		g_main_run		(GMainLoop	*loop);
-void		g_main_quit		(GMainLoop	*loop);
-void		g_main_destroy		(GMainLoop	*loop);
-gboolean	g_main_is_running	(GMainLoop	*loop);
-
-/* Run a single iteration of the mainloop. If block is FALSE,
- * will never block
- */
-gboolean	g_main_iteration	(gboolean	may_block);
-
-/* See if any events are pending */
-gboolean	g_main_pending		(void);
-
-/* Idles and timeouts */
-guint		g_timeout_add_full	(gint           priority,
-					 guint          interval, 
-					 GSourceFunc    function,
-					 gpointer       data,
-					 GDestroyNotify notify);
-guint		g_timeout_add		(guint          interval,
-					 GSourceFunc    function,
-					 gpointer       data);
-guint		g_idle_add	   	(GSourceFunc	function,
-					 gpointer	data);
-guint	   	g_idle_add_full		(gint   	priority,
-					 GSourceFunc	function,
-					 gpointer	data,
-					 GDestroyNotify destroy);
-gboolean	g_idle_remove_by_data	(gpointer	data);
-
-/* GPollFD
- *
- * System-specific IO and main loop calls
- *
- * On Win32, the fd in a GPollFD should be Win32 HANDLE (*not* a file
- * descriptor as provided by the C runtime) that can be used by
- * MsgWaitForMultipleObjects. This does *not* include file handles
- * from CreateFile, SOCKETs, nor pipe handles. (But you can use
- * WSAEventSelect to signal events when a SOCKET is readable).
- *
- * On Win32, fd can also be the special value G_WIN32_MSG_HANDLE to
- * indicate polling for messages. These message queue GPollFDs should
- * be added with the g_main_poll_win32_msg_add function.
- *
- * But note that G_WIN32_MSG_HANDLE GPollFDs should not be used by GDK
- * (GTK) programs, as GDK itself wants to read messages and convert them
- * to GDK events.
- *
- * So, unless you really know what you are doing, it's best not to try
- * to use the main loop polling stuff for your own needs on
- * Win32. It's really only written for the GIMP's needs so
- * far.
- */
-
-typedef struct _GPollFD GPollFD;
-typedef gint	(*GPollFunc)	(GPollFD *ufds,
-				 guint	  nfsd,
-				 gint     timeout);
-struct _GPollFD
-{
-  gint		fd;
-  gushort 	events;
-  gushort 	revents;
-};
-
-void        g_main_add_poll          (GPollFD    *fd,
-				      gint        priority);
-void        g_main_remove_poll       (GPollFD    *fd);
-void        g_main_set_poll_func     (GPollFunc   func);
-
-/* On Unix, IO channels created with this function for any file
- * descriptor or socket.
- *
- * On Win32, use this only for plain files opened with the MSVCRT (the
- * Microsoft run-time C library) _open(), including file descriptors
- * 0, 1 and 2 (corresponding to stdin, stdout and stderr).
- * Actually, don't do even that, this code isn't done yet.
- *
- * The term file descriptor as used in the context of Win32 refers to
- * the emulated Unix-like file descriptors MSVCRT provides.
- */
-GIOChannel* g_io_channel_unix_new    (int         fd);
-gint        g_io_channel_unix_get_fd (GIOChannel *channel);
-
-#ifdef NATIVE_WIN32
-
-GUTILS_C_VAR guint g_pipe_readable_msg;
-
-#define G_WIN32_MSG_HANDLE 19981206
-
-/* This is used to add polling for Windows messages. GDK (GTk+) programs
- * should *not* use this. (In fact, I can't think of any program that
- * would want to use this, but it's here just for completeness's sake.
- */
-void        g_main_poll_win32_msg_add(gint        priority,
-				      GPollFD    *fd,
-				      guint       hwnd);
-
-/* An IO channel for Windows messages for window handle hwnd. */
-GIOChannel *g_io_channel_win32_new_messages (guint hwnd);
-
-/* An IO channel for an anonymous pipe as returned from the MSVCRT
- * _pipe(), with no mechanism for the writer to tell the reader when
- * there is data in the pipe.
- *
- * This is not really implemented yet.
- */
-GIOChannel *g_io_channel_win32_new_pipe (int fd);
-
-/* An IO channel for a pipe as returned from the MSVCRT _pipe(), with
- * Windows user messages used to signal data in the pipe for the
- * reader.
- *
- * fd is the file descriptor. For the write end, peer is the thread id
- * of the reader, and peer_fd is his file descriptor for the read end
- * of the pipe.
- *
- * This is used by the GIMP, and works.
- */
-GIOChannel *g_io_channel_win32_new_pipe_with_wakeups (int   fd,
-						      guint peer,
-						      int   peer_fd);
-
-void        g_io_channel_win32_pipe_request_wakeups (GIOChannel *channel,
-						     guint       peer,
-						     int         peer_fd);
-
-void        g_io_channel_win32_pipe_readable (int   fd,
-					      guint offset);
-
-/* Get the C runtime file descriptor of a channel. */
-gint        g_io_channel_win32_get_fd (GIOChannel *channel);
-
-/* An IO channel for a SOCK_STREAM winsock socket. The parameter is
- * actually a SOCKET.
- */
-GIOChannel *g_io_channel_win32_new_stream_socket (int socket);
-
-#endif
-
-/* Windows emulation stubs for common Unix functions
- */
-#ifdef NATIVE_WIN32
-#  define MAXPATHLEN 1024
-#  ifdef _MSC_VER
-typedef int pid_t;
-
-/* These POSIXish functions are available in the Microsoft C library
- * prefixed with underscore (which of course technically speaking is
- * the Right Thing, as they are non-ANSI. Not that being non-ANSI
- * prevents Microsoft from practically requiring you to include
- * <windows.h> every now and then...).
- *
- * You still need to include the appropriate headers to get the
- * prototypes, <io.h> or <direct.h>.
- *
- * For some functions, we provide emulators in glib, which are prefixed
- * with gwin_.
- */
-#    define getcwd		_getcwd
-#    define getpid		_getpid
-#    define access		_access
-#    define open		_open
-#    define read		_read
-#    define write		_write
-#    define lseek		_lseek
-#    define close		_close
-#    define pipe(phandles)	_pipe (phandles, 4096, _O_BINARY)
-#    define popen		_popen
-#    define pclose		_pclose
-#    define fdopen		_fdopen
-#    define ftruncate(fd, size)	gwin_ftruncate (fd, size)
-#    define opendir		gwin_opendir
-#    define readdir		gwin_readdir
-#    define rewinddir		gwin_rewinddir
-#    define closedir		gwin_closedir
-#    define NAME_MAX 255
-struct DIR
-{
-  gchar    *dir_name;
-  gboolean  just_opened;
-  guint     find_file_handle;
-  gpointer  find_file_data;
-};
-typedef struct DIR DIR;
-struct dirent
-{
-  gchar  d_name[NAME_MAX + 1];
-};
-/* emulation functions */
-extern int	gwin_ftruncate	(gint		 f,
-				 guint		 size);
-DIR*		gwin_opendir	(const gchar	*dirname);
-struct dirent*	gwin_readdir  	(DIR		*dir);
-void		gwin_rewinddir 	(DIR		*dir);
-gint		gwin_closedir  	(DIR		*dir);
-#  endif /* _MSC_VER */
-#endif	 /* NATIVE_WIN32 */
-
-
-/* GLib Thread support
- */
-typedef struct _GMutex		GMutex;
-typedef struct _GCond		GCond;
-typedef struct _GPrivate	GPrivate;
-typedef struct _GStaticPrivate	GStaticPrivate;
-typedef struct _GThreadFunctions GThreadFunctions;
-struct _GThreadFunctions
-{
-  GMutex*  (*mutex_new)       (void);
-  void     (*mutex_lock)      (GMutex		*mutex);
-  gboolean (*mutex_trylock)   (GMutex		*mutex);
-  void     (*mutex_unlock)    (GMutex		*mutex);
-  void     (*mutex_free)      (GMutex		*mutex);
-  GCond*   (*cond_new)        (void);
-  void     (*cond_signal)     (GCond		*cond);
-  void     (*cond_broadcast)  (GCond		*cond);
-  void     (*cond_wait)       (GCond		*cond,
-			       GMutex		*mutex);
-  gboolean (*cond_timed_wait) (GCond		*cond,
-			       GMutex		*mutex, 
-			       GTimeVal 	*end_time);
-  void      (*cond_free)      (GCond		*cond);
-  GPrivate* (*private_new)    (GDestroyNotify	 destructor);
-  gpointer  (*private_get)    (GPrivate		*private_key);
-  void      (*private_set)    (GPrivate		*private_key,
-			       gpointer		 data);
-};
-
-GUTILS_C_VAR GThreadFunctions	g_thread_functions_for_glib_use;
-GUTILS_C_VAR gboolean		g_thread_use_default_impl;
-GUTILS_C_VAR gboolean		g_threads_got_initialized;
-
-/* initializes the mutex/cond/private implementation for glib, might
- * only be called once, and must not be called directly or indirectly
- * from another glib-function, e.g. as a callback.
- */
-void	g_thread_init	(GThreadFunctions	*vtable);
-
-/* internal function for fallback static mutex implementation */
-GMutex*	g_static_mutex_get_mutex_impl	(GMutex	**mutex);
-
-/* shorthands for conditional and unconditional function calls */
-#define G_THREAD_UF(name, arglist) \
-    (*g_thread_functions_for_glib_use . name) arglist
-#define G_THREAD_CF(name, fail, arg) \
-    (g_thread_supported () ? G_THREAD_UF (name, arg) : (fail))
-/* keep in mind, all those mutexes and static mutexes are not 
- * recursive in general, don't rely on that
- */
-#define	g_thread_supported()	(g_threads_got_initialized)
-#define g_mutex_new()            G_THREAD_UF (mutex_new,      ())
-#define g_mutex_lock(mutex)      G_THREAD_CF (mutex_lock,     (void)0, (mutex))
-#define g_mutex_trylock(mutex)   G_THREAD_CF (mutex_trylock,  TRUE,    (mutex))
-#define g_mutex_unlock(mutex)    G_THREAD_CF (mutex_unlock,   (void)0, (mutex))
-#define g_mutex_free(mutex)      G_THREAD_CF (mutex_free,     (void)0, (mutex))
-#define g_cond_new()             G_THREAD_UF (cond_new,       ())
-#define g_cond_signal(cond)      G_THREAD_CF (cond_signal,    (void)0, (cond))
-#define g_cond_broadcast(cond)   G_THREAD_CF (cond_broadcast, (void)0, (cond))
-#define g_cond_wait(cond, mutex) G_THREAD_CF (cond_wait,      (void)0, (cond, \
-                                                                        mutex))
-#define g_cond_free(cond)        G_THREAD_CF (cond_free,      (void)0, (cond))
-#define g_cond_timed_wait(cond, mutex, abs_time) G_THREAD_CF (cond_timed_wait, \
-                                                              TRUE, \
-                                                              (cond, mutex, \
-							       abs_time))
-#define g_private_new(destructor)	  G_THREAD_UF (private_new, (destructor))
-#define g_private_get(private_key)	  G_THREAD_CF (private_get, \
-                                                       ((gpointer)private_key), \
-                                                       (private_key))
-#define g_private_set(private_key, value) G_THREAD_CF (private_set, \
-                                                       (void) (private_key = \
-                                                        (GPrivate*) (value)), \
-                                                       (private_key, value))
-/* GStaticMutexes can be statically initialized with the value
- * G_STATIC_MUTEX_INIT, and then they can directly be used, that is
- * much easier, than having to explicitly allocate the mutex before
- * use
- */
-#define g_static_mutex_lock(mutex) \
-    g_mutex_lock (g_static_mutex_get_mutex (mutex))
-#define g_static_mutex_trylock(mutex) \
-    g_mutex_trylock (g_static_mutex_get_mutex (mutex))
-#define g_static_mutex_unlock(mutex) \
-    g_mutex_unlock (g_static_mutex_get_mutex (mutex)) 
-struct _GStaticPrivate
-{
-  guint index;
-};
-#define G_STATIC_PRIVATE_INIT { 0 }
-gpointer g_static_private_get (GStaticPrivate	*private_key);
-void     g_static_private_set (GStaticPrivate	*private_key, 
-			       gpointer        	 data,
-			       GDestroyNotify    notify);
-
-/* these are some convenience macros that expand to nothing if GLib
- * was configured with --disable-threads. for using StaticMutexes,
- * you define them with G_LOCK_DEFINE_STATIC (name) or G_LOCK_DEFINE (name)
- * if you need to export the mutex. With G_LOCK_EXTERN (name) you can
- * declare such an globally defined lock. name is a unique identifier
- * for the protected varibale or code portion. locking, testing and
- * unlocking of such mutexes can be done with G_LOCK(), G_UNLOCK() and
- * G_TRYLOCK() respectively.  
- */
-extern void glib_dummy_decl (void);
-#define G_LOCK_NAME(name)		(g__ ## name ## _lock)
-#ifdef	G_THREADS_ENABLED
-#  define G_LOCK_DEFINE_STATIC(name)	static G_LOCK_DEFINE (name)
-#  define G_LOCK_DEFINE(name)		\
-    GStaticMutex G_LOCK_NAME (name) = G_STATIC_MUTEX_INIT 
-#  define G_LOCK_EXTERN(name)		extern GStaticMutex G_LOCK_NAME (name)
-
-#  ifdef G_DEBUG_LOCKS
-#    define G_LOCK(name)		G_STMT_START{		  \
-        g_log (G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG,			  \
-	       "file %s: line %d (%s): locking: %s ",	          \
-	       __FILE__,	__LINE__, G_GNUC_PRETTY_FUNCTION, \
-               #name);                                            \
-        g_static_mutex_lock (&G_LOCK_NAME (name));                \
-     }G_STMT_END
-#    define G_UNLOCK(name)		G_STMT_START{		  \
-        g_log (G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG,			  \
-	       "file %s: line %d (%s): unlocking: %s ",	          \
-	       __FILE__,	__LINE__, G_GNUC_PRETTY_FUNCTION, \
-               #name);                                            \
-       g_static_mutex_unlock (&G_LOCK_NAME (name));               \
-     }G_STMT_END
-#    define G_TRYLOCK(name)		G_STMT_START{		  \
-        g_log (G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG,			  \
-	       "file %s: line %d (%s): try locking: %s ",         \
-	       __FILE__,	__LINE__, G_GNUC_PRETTY_FUNCTION, \
-               #name);                                            \
-     }G_STMT_END,	g_static_mutex_trylock (&G_LOCK_NAME (name))
-#  else	 /* !G_DEBUG_LOCKS */
-#    define G_LOCK(name) g_static_mutex_lock	   (&G_LOCK_NAME (name)) 
-#    define G_UNLOCK(name) g_static_mutex_unlock   (&G_LOCK_NAME (name))
-#    define G_TRYLOCK(name) g_static_mutex_trylock (&G_LOCK_NAME (name))
-#  endif /* !G_DEBUG_LOCKS */
-#else	/* !G_THREADS_ENABLED */
-#  define G_LOCK_DEFINE_STATIC(name)	extern void glib_dummy_decl (void)
-#  define G_LOCK_DEFINE(name)		extern void glib_dummy_decl (void)
-#  define G_LOCK_EXTERN(name)		extern void glib_dummy_decl (void)
-#  define G_LOCK(name)
-#  define G_UNLOCK(name)
-#  define G_TRYLOCK(name)		(FALSE)
-#endif	/* !G_THREADS_ENABLED */
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-
-#endif /* __G_LIB_H__ */
diff --git a/foreign/glibconfig.h b/foreign/glibconfig.h
deleted file mode 100644
index 691eeba76e0774b2ff9a9848278541f1bf8421e4..0000000000000000000000000000000000000000
--- a/foreign/glibconfig.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/* glibconfig.h spoof -- exists only to make glib.h work */
-
-#ifndef GLIBCONFIG_H_SPOOF
-#define GLIBCONFIG_H_SPOOF
-
-/* cheesy */
-typedef unsigned char guint8;
-typedef unsigned short guint16;
-typedef unsigned int guint32;
-typedef int gint32;
-
-#ifdef HAVE_POLL_H
-#include <poll.h>
-#endif
-
-#if defined(POLLIN) && defined(POLLOUT)
-#define GLIB_SYSDEF_POLLIN =POLLIN
-#define GLIB_SYSDEF_POLLOUT =POLLOUT
-#define GLIB_SYSDEF_POLLPRI =POLLPRI
-#define GLIB_SYSDEF_POLLERR =POLLERR
-#define GLIB_SYSDEF_POLLHUP =POLLHUP
-#define GLIB_SYSDEF_POLLNVAL =POLLNVAL
-#else
-#define GLIB_SYSDEF_POLLIN =1
-#define GLIB_SYSDEF_POLLOUT =4
-#define GLIB_SYSDEF_POLLPRI =2
-#define GLIB_SYSDEF_POLLERR =8
-#define GLIB_SYSDEF_POLLHUP =16
-#define GLIB_SYSDEF_POLLNVAL =32
-#endif
-
-#endif
diff --git a/foreign/wwwsys.h b/foreign/wwwsys.h
deleted file mode 100644
index 964b912c0e31d3e4f2742762ee146668556350b0..0000000000000000000000000000000000000000
--- a/foreign/wwwsys.h
+++ /dev/null
@@ -1,9 +0,0 @@
-/* wwwsys.h spoof -- exists only to make HTEvent.h work */
-
-#ifndef WWWSYS_H_SPOOF
-#define WWWSYS_H_SPOOF
-
-typedef char BOOL;
-typedef int SOCKET;
-
-#endif