Subversion Repositories liboop

Compare Revisions

Ignore whitespace Rev 26 → Rev 27

/tags/1.0-5/debian/changelog
0,0 → 1,100
liboop (1.0-5) unstable; urgency=low
 
* Build with GLib 2.0 instead of 1.2 (Closes: #523688).
* Switch to Debhelper level 5.
* Bump Standards-Version to 3.8.1.
* Skip unnecessary dh_installdirs; delete unused files from the debian
directory.
 
-- Magnus Holmgren <holmgren@debian.org> Mon, 13 Apr 2009 20:36:57 +0200
 
liboop (1.0-4) unstable; urgency=low
 
* New maintainer (Closes: #487130).
* Fix documentation file name extensions (Closes: #307732).
* Build liboop-doc in binary-indep target (Closes: #475573).
* Add debian/compat; remove DH_COMPAT from debian/rules.
* Don't ignore "make distclean" errors.
* Move sharutils to Build-Depends-Indep.
* debian/copyright: Update postal address of the FSF.
* Patch configure.ac as suggested in bug 359930, run autoreconf for good
measure and remove autogenerated files in clean target. I don't like
huge Debian diffs. Copying files from autotools-dev thus becomes
redundant.
* Update doc-base section to match current structure.
* debian/control: Replace ${Source-Version} with ${binary:Version}.
* Standards-Version upgraded to 3.8.0 with the above change.
* Add Homepage field and watch file, and update download location in
debian/copyright to one that works.
 
-- Magnus Holmgren <holmgren@debian.org> Wed, 25 Jun 2008 13:03:42 +0200
 
liboop (1.0-3.3) unstable; urgency=high
 
* Non-maintainer upload.
* Drop unused libwww-dev build-dependency. Closes: #458866.
* This fixes an FTBFS in testing, set urgency to high.
 
-- Regis Boudin <regis@debian.org> Thu, 10 Apr 2008 21:47:16 +0100
 
liboop (1.0-3.2) unstable; urgency=low
 
* Non-maintainer upload.
* Relibtoolize. Closes: #359930.
 
-- Aurelien Jarno <aurel32@debian.org> Wed, 23 Jan 2008 22:22:53 +0100
 
liboop (1.0-3.1) unstable; urgency=medium
 
* Non-maintainer upload.
* Build against libreadline5. Closes: #350647.
 
-- Matej Vela <vela@debian.org> Thu, 16 Mar 2006 16:50:24 +0100
 
liboop (1.0-3) unstable; urgency=low
 
* Include pkg-config files. (Closes: Bug#227061)
* New liboop-doc package that includes documentation from liboop.org.
(Closes: Bug#224392)
 
-- Simon Law <sfllaw@debian.org> Sun, 11 Jul 2004 16:53:38 -0400
 
liboop (1.0-2) unstable; urgency=low
 
* New maintainer.
* Update 'missing' binary from Automake 1.6.
* Use Policy 3.6.1.
* Use Debconf 4.
 
-- Simon Law <sfllaw@debian.org> Wed, 02 Jun 2004 17:39:12 -0400
 
liboop (1.0-1) unstable; urgency=low
 
* New upstream release (closes: #224210)
 
-- Timshel Knoll <timshel@debian.org> Fri, 19 Dec 2003 00:55:53 +1100
 
liboop (0.9-1) unstable; urgency=low
 
* New upstream release (closes: #191305)
+ liboop SONAME has been bumped to 4, so name of source and binary
packages is now liboop4, to allow co-existence with liboop3
* Moved liboop-dev to libdevel section
* Fixed configure{.in,} to build libwww support, Build-Depend on libwww-dev
* Policy 3.5.9
 
-- Timshel Knoll <timshel@debian.org> Wed, 30 Apr 2003 22:50:34 +1000
 
liboop (0.8-2) unstable; urgency=low
 
* debian/rules: update config.{sub,guess} in `clean' target
(closes: #142310)
 
-- Timshel Knoll <timshel@debian.org> Sat, 20 Apr 2002 02:25:49 +1000
 
liboop (0.8-1) unstable; urgency=low
 
* Initial Release. (closes: #135810)
 
-- Timshel Knoll <timshel@debian.org> Tue, 26 Feb 2002 13:29:09 +1100
 
/tags/1.0-5/debian/rules
0,0 → 1,172
#!/usr/bin/make -f
# debian/rules file for libraries
#
# To build the packages, run `dpkg-buildpackage' or `debuild' from the
# parent directory of this file. (You may need to specify the `-rfakeroot'
# option if you are using dpkg-buildpackage and are not running as root)
#
# $Id: rules,v 1.8 2003/04/30 07:45:50 timshel Exp $
#
# Copyright (C) 1999, 2000, 2001, 2002 Timshel Knoll <timshel@debian.org>
# Licensed under the terms of the GNU General Public License
#
# Based originally on Sample debian/rules that uses debhelper, from dh-make,
# GNU copyright 1997 to 1999 by Joey Hess.
 
# Uncomment this to turn on verbose mode.
#export DH_VERBOSE=1
 
# These are used for cross-compiling and for saving the configure script
# from having to guess our platform (since we know it already)
DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE)
DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE)
 
 
CFLAGS += -g
ifeq (, $(findstring noopt, $(DEB_BUILD_OPTIONS)))
CFLAGS += -O2
else
CFLAGS += -O0
endif
 
 
# The name of the library - this is the base name of the packages that
# will be built
LIBRARY = liboop
 
# This is the soname of the package being built - we have to know this
# before the start of the build because changing the control file half
# way though the build probably isn't a good idea, and this would also
# mean renaming the $(LIBRARY)$(SONAME).{files,docs,...} files
SONAME = 4
 
# A list of variables to substitute when generating files from .in files
# If you put an 'x' here, then all @x@'s in .in files will be substituted
# with the value of $(x) in the output file
SUBSTS = SONAME
 
GENFILES = debian/control \
debian/$(LIBRARY)$(SONAME).files \
debian/$(LIBRARY)$(SONAME).dirs
 
# We can't use these until after the package has been built ... otherwise
# they will fail because no .libs/lib*.so.* exists
version = $(shell ls .libs/lib*.so.* | \
awk '{if (match($$0,/[0-9]+\.[0-9]+\.[0-9]+$$/)) \
print substr($$0,RSTART)}')
major = $(shell ls .libs/lib*.so.* | \
awk '{if (match($$0,/\.so\.[0-9]+$$/)) print substr($$0,RSTART+4)}')
 
# This builds a substitution list for sed based on the SUBSTS variable
# and the variables whose names SUBSTS contains ...
SUBSTLIST = $(foreach subst, $(SUBSTS),s/@$(subst)@/$($(subst))/g;)
 
# A sane default rule
default:
@echo "Try: debian/rules [configure|build|clean|install|binary|binary-arch|binary-indep]"
@echo "Vars:"
@echo " SUBSTLIST: $(SUBSTLIST)"
@echo " SONAME: $(SONAME)"
 
# Pattern rules:
 
# How to generate files from .in's
debian/%: debian/%.in debian/rules
sed -e '$(SUBSTLIST)' < $< > $@
 
# This puts the $(LIBRARY)* packaging files in their right places
# Could I / should I use ln?
debian/$(LIBRARY)$(SONAME).%: debian/$(LIBRARY).%
cp $< $@
 
# Do the substitution/moving stuff
packaging-files: $(GENFILES)
 
configure: packaging-files configure-stamp
configure-stamp:
dh_testdir
 
autoreconf -sfi
 
env CFLAGS="$(CFLAGS)" ./configure --host=$(DEB_HOST_GNU_TYPE) \
--build=$(DEB_BUILD_GNU_TYPE) --prefix=/usr
 
touch $@
 
build: configure-stamp build-stamp
build-stamp:
dh_testdir
 
$(MAKE)
 
touch $@
 
clean:
dh_testdir
dh_testroot
rm -f build-stamp configure-stamp
 
[ ! -f Makefile ] || $(MAKE) distclean
$(MAKE) -C liboop.org distclean
 
rm -rf Makefile.in aclocal.m4 ltmain.sh configure mkinstalldirs config.sub config.guess autom4te.cache missing depcomp install-sh
dh_clean
 
install-indep:
dh_testdir
dh_testroot
dh_clean -k
 
$(MAKE) -C liboop.org install \
DESTDIR=$(CURDIR)/debian/tmp/usr/share/doc/liboop-doc/html
 
install-arch: build
dh_testdir
dh_testroot
dh_clean -k
 
$(MAKE) install DESTDIR=$(CURDIR)/debian/tmp
 
binary-indep: install-indep
dh_testdir
dh_testroot
dh_movefiles -i
 
dh_installdocs -i
dh_installman -i
dh_installinfo -i
dh_installchangelogs -i
dh_link -i
dh_compress -i -Xliboop-doc/html
dh_fixperms -i
dh_installdeb -i
dh_gencontrol -i
dh_md5sums -i
dh_builddeb -i
 
binary-arch: install-arch
dh_testdir
dh_testroot
dh_movefiles -a
 
dh_installdocs -a
dh_installman -a
dh_installinfo -a
dh_installchangelogs -a
dh_link -a
dh_strip -a
dh_compress -a -Xliboop-doc/html
dh_fixperms -a
dh_makeshlibs -a
dh_installdeb -a
# Don't add the depends for adapter libraries - programs which link
# with them will also link with the appropriate library
dh_shlibdeps -a -Xliboop-
dh_gencontrol -a
dh_md5sums -a
dh_builddeb -a
 
binary: binary-indep binary-arch
 
.PHONY: packaging-files configure build install
.PHONY: binary-indep binary-arch binary clean
Property changes:
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: 1.0-5/debian/control
===================================================================
--- 1.0-5/debian/control (nonexistent)
+++ 1.0-5/debian/control (revision 27)
@@ -0,0 +1,58 @@
+Source: liboop
+Section: libs
+Priority: optional
+Maintainer: Magnus Holmgren <holmgren@debian.org>
+Build-Depends: libtool, autoconf, automake1.9,
+ debhelper (>= 5), libadns1-dev,
+ libglib2.0-dev,
+ libreadline5-dev | libreadline-dev,
+ tcl8.4-dev | tcl8.3-dev
+Build-Depends-Indep: sharutils
+Standards-Version: 3.8.1
+Homepage: http://liboop.ofb.net/
+
+Package: liboop4
+Section: libs
+Architecture: any
+Depends: ${shlibs:Depends}
+Provides: liboop
+Replaces: liboop3
+Description: Event loop management library
+ Liboop is a low-level event loop management library for POSIX-based
+ operating systems. It supports the development of modular, multiplexed
+ applications which may respond to events from several sources. It
+ replaces the "select() loop" and allows the registration of event
+ handlers for file and network I/O, timers and signals. Since processes
+ use these mechanisms for almost all external communication, liboop can
+ be used as a basis for almost any application.
+
+Package: liboop-dev
+Section: libdevel
+Architecture: any
+Depends: liboop4 (= ${binary:Version}), libc6-dev
+Description: Event loop management library - development files
+ Liboop is a low-level event loop management library for POSIX-based
+ operating systems. It supports the development of modular, multiplexed
+ applications which may respond to events from several sources. It
+ replaces the "select() loop" and allows the registration of event
+ handlers for file and network I/O, timers and signals. Since processes
+ use these mechanisms for almost all external communication, liboop can
+ be used as a basis for almost any application.
+ .
+ This package contains the liboop development libraries and header
+ files, required to develop and/or compile applications that use liboop.
+
+Package: liboop-doc
+Section: doc
+Architecture: all
+Description: Event loop management library - documentation
+ Liboop is a low-level event loop management library for POSIX-based
+ operating systems. It supports the development of modular, multiplexed
+ applications which may respond to events from several sources. It
+ replaces the "select() loop" and allows the registration of event
+ handlers for file and network I/O, timers and signals. Since processes
+ use these mechanisms for almost all external communication, liboop can
+ be used as a basis for almost any application.
+ .
+ This package contains a mirror of the http://liboop.org website and its
+ associated HTML documentation for the liboop library.
Index: 1.0-5/debian/compat
===================================================================
--- 1.0-5/debian/compat (nonexistent)
+++ 1.0-5/debian/compat (revision 27)
@@ -0,0 +1 @@
+5
Index: 1.0-5/debian/copyright
===================================================================
--- 1.0-5/debian/copyright (nonexistent)
+++ 1.0-5/debian/copyright (revision 27)
@@ -0,0 +1,31 @@
+This package was debianized by Timshel Knoll <timshel@debian.org> on
+Tue, 26 Feb 2002 13:29:09 +1100.
+
+It was downloaded from http://download.ofb.net/liboop/
+
+Upstream Author: Dan Egnor <egnor@ofb.net>
+With contributions by Ian Jackson <ian@chiark.greenend.org.uk>
+
+Copyright:
+
+ Copyright (C) 1999, 2000, 2001 Dan Egnor, Ian Jackson
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free
+ Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ 02110-1301, USA.
+
+On Debian GNU/Linux systems, the complete text of the GNU Lesser
+General Public License can be found in `/usr/share/common-licenses/LGPL'.
+
+ -- Timshel Knoll <timshel@debian.org> Tue, 26 Feb 2002 13:47:55 +1100
Index: 1.0-5/debian/watch
===================================================================
--- 1.0-5/debian/watch (nonexistent)
+++ 1.0-5/debian/watch (revision 27)
@@ -0,0 +1,3 @@
+version=3
+
+http://download.ofb.net/liboop/liboop-(.*)\.tar\.gz
Index: 1.0-5/debian/liboop-doc.doc-base
===================================================================
--- 1.0-5/debian/liboop-doc.doc-base (nonexistent)
+++ 1.0-5/debian/liboop-doc.doc-base (revision 27)
@@ -0,0 +1,11 @@
+Document: liboop-doc
+Title: Liboop Website and Manuals
+Author: Dan Egnor
+Abstract: This website describes the liboop library, and includes manuals.
+ There is an introduction and overview of the library, as well as a
+ hypertext reference manual.
+Section: Programming/C
+
+Format: HTML
+Index: /usr/share/doc/liboop-doc/html/index.html
+Files: /usr/share/doc/liboop-doc/html/*
Index: 1.0-5/debian/README.Debian
===================================================================
--- 1.0-5/debian/README.Debian (nonexistent)
+++ 1.0-5/debian/README.Debian (revision 27)
@@ -0,0 +1,28 @@
+liboop for Debian
+-----------------
+
+I've chosen at this stage not to package the adapter libraries separately,
+since the package only weighs in at just over 500k when unpacked. If anyone
+would rather that these were all in separate packages, please let me know
+and I'll think again about doing this ... At the moment, the package _DOES
+NOT DEPEND_ on any of the libraries required to use the adapter libraries,
+so if your package uses one of the adapter libraries, you _must_ depend on
+the appropriate library (ie. if you link with liboop-tcl, you must also
+depend on tcl8.3 ...). The same goes for Build-Depends.
+
+My reasoning for packaging liboop in this way is to avoid having to install
+excessive numbers of large-ish packages (tcl for instance) just to install
+your program that depends on liboop.
+
+I haven't compiled in the libwww adapter support - this is primarily because
+the current libwww0 package in Debian doesn't include libwwwxml, because when
+this library is compiled there is a name clash (libwww also includes
+libxmltok and libxmlparse, which are in the libxmltok1 package). It's
+difficult to compile liboop support for libwww libraries excluding libwwwxml,
+as the configure script simply links liboop-www with all of the libwww
+libraries, including libwwwxml. I'm working on a solution to this with the
+libwww maintainer. In the meantime, liboop Build-Conflicts: libwww-dev. If
+you need this support urgently, feel free to contact me and I'll hurry up
+my work on this (no real urgency at the moment, however ...)
+
+ -- Timshel Knoll <timshel@debian.org> Tue, 5 Mar 2002 15:41:41 +1100
Index: 1.0-5/debian/liboop-dev.files
===================================================================
--- 1.0-5/debian/liboop-dev.files (nonexistent)
+++ 1.0-5/debian/liboop-dev.files (revision 27)
@@ -0,0 +1,4 @@
+usr/include/*
+usr/lib/lib*.a
+usr/lib/lib*.so
+usr/lib/pkgconfig/*
Index: 1.0-5/debian/liboop-doc.files
===================================================================
--- 1.0-5/debian/liboop-doc.files (nonexistent)
+++ 1.0-5/debian/liboop-doc.files (revision 27)
@@ -0,0 +1 @@
+usr/share/doc/liboop-doc/html/*
Index: 1.0-5/debian/liboop4.files
===================================================================
--- 1.0-5/debian/liboop4.files (nonexistent)
+++ 1.0-5/debian/liboop4.files (revision 27)
@@ -0,0 +1 @@
+usr/lib/lib*.so.*
Index: 1.0-5/debian
===================================================================
--- 1.0-5/debian (nonexistent)
+++ 1.0-5/debian (revision 27)
/1.0-5/debian
Property changes:
Added: mergeWithUpstream
## -0,0 +1 ##
+1
\ No newline at end of property
Index: 1.0-5/liboop.org/Makefile
===================================================================
--- 1.0-5/liboop.org/Makefile (nonexistent)
+++ 1.0-5/liboop.org/Makefile (revision 27)
@@ -0,0 +1,19 @@
+FILES := alloc.html how.html index.html logo on_fd.html on_signal.html \
+ on_time.html oop_adns.html oop_adns_query.html oop_glib.html \
+ oop_rl.html oop_sys.html oop_sys_run.html oop_sys_source.html \
+ oop_tcl.html oop_www.html ref.html style.css why.html
+
+INSTALL := $(shell which install)
+
+.PHONY: install clean distclean
+install: logo
+ $(INSTALL) -d $(DESTDIR)
+ $(INSTALL) $(FILES) $(DESTDIR)
+
+clean:
+ -rm -f logo
+
+distclean: clean
+
+logo: logo.shar
+ /bin/sh logo.shar
Index: 1.0-5/liboop.org/alloc.html
===================================================================
--- 1.0-5/liboop.org/alloc.html (nonexistent)
+++ 1.0-5/liboop.org/alloc.html (revision 27)
@@ -0,0 +1,62 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>liboop: oop_malloc(), oop_free()</title>
+<link rel="stylesheet" type="text/css" href="style.css">
+</head><body>
+
+<h2>oop_malloc(), oop_free()</h2>
+
+<pre>
+#include &lt;oop.h&gt;
+
+extern void *(*oop_malloc)(size_t len); /* <em>Allocate memory.</em> */
+extern void *(*oop_realloc<a href="#note-realloc">*</a>)(void *ptr,size_t len); /* <em>Resize memory.</em> */
+extern void (*oop_free)(void *ptr); /* <em>Free allocated memory.</em> */
+</pre>
+
+<h3>Arguments.</h3>
+
+<dl>
+<dt><b>size_t len</b>
+<dd>Size, in bytes, of the memory block to allocate.<p>
+
+<dt><b>void *ptr</b>
+<dd>Pointer to memory block to free or reallocate.<p>
+</dl>
+
+<h3>Description.</h3>
+
+These are global function pointers, initialized by default to the standard C
+library functions <em>malloc</em>, <em>realloc</em>, and <em>free</em>.
+Applications using liboop may reset these pointers to allocation and
+deallocation routines with a compatible interface; libraries should use
+these function pointers wherever possible to allocate and release memory.
+These pointers are normally set before calling any liboop code; if they
+are changed during operation, the new <em>oop_free</em> and
+<em>oop_realloc</em> functions should be
+capable of handling memory obtained with the old <em>oop_malloc</em>.
+
+<dl>
+<dt><b>oop_malloc</b>
+<dd>This function allocates a block of memory of size <em>len</em> and returns
+a pointer to the start of the block. If allocation fails, NULL is returned.<p>
+
+<dt><b>oop_realloc</b><a href="#note-realloc">*</a>
+<dd>This function resizes a block of memory at <em>ptr</em> to have the new
+length <em>len</em>. If <em>ptr</em> is NULL, fresh memory is allocated.
+If <em>len</em> is zero, memory is freed and NULL is returned.
+If <em>ptr</em> is NULL and <em>len</em> is zero, nothing is done and NULL
+is returned. If reallocation fails, NULL is returned.<p>
+
+<dt><b>oop_free</b>
+<dd>This function releases a block of memory, designated by <em>ptr</em>,
+previously allocated by <em>oop_malloc</em>. Once released, the memory may
+be immediately overwritten, and/or reused by subsequent calls to
+<em>oop_malloc</em>.
+</dl>
+
+<hr>
+<p><a name="note-realloc">*</a> <b>Compatibility note:</b> oop_realloc
+is only available in version 0.7 or newer.</p>
+
+<hr><a href="ref.html">liboop reference</a></body></html>
Index: 1.0-5/liboop.org/how.html
===================================================================
--- 1.0-5/liboop.org/how.html (nonexistent)
+++ 1.0-5/liboop.org/how.html (revision 27)
@@ -0,0 +1,80 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>liboop: How?</title>
+<link rel="stylesheet" type="text/css" href="style.css">
+</head><body>
+
+<h2>Overview of liboop.</h2>
+
+<h4>The basic idea.</h4>
+
+Liboop is primarily an <em>interface definition</em>. It defines an interface
+which components may use to request notification when an <em>event</em>
+(activity on a file descriptor, the real-time clock reaches a certain value,
+a particular signal is received) occurs. The component which owns the event
+loop -- the component whose code is active when the system is idle --
+implements the interface; it is an <em>event source</em>. Components which
+are interested in events register themselves with the event source; they are
+<em>event sinks</em>. Event sinks may themselves source other, higher-level
+events, but that is outside liboop's scope.
+
+<h4>Control flow.</h4>
+
+During initialization, the event source is created. At least one event sink
+is also created, and registered with the event source. Once initialization
+completes, control is transferred to the event source, which (at its core)
+waits for events, usually using a system function like select() or poll().
+When an event occurs, the event source gives a <em>callback</em> to all the
+event sinks which registered interest in that event.
+<p>
+During callbacks, the event sinks react to the event as appropriate (usually
+performing some I/O, or at least modifying internal state). Event sinks for
+events which are no longer relevant may be unregistered; new event sinks may
+be registered for additional events. Each event sink, when it finishes,
+returns a value which tells the event source whether to continue processing
+events or whether to terminate.
+<p>
+While the event source must be fully reentrant (registration and deregistration
+may, and indeed usually are, performed within the context of an event), event
+sinks need not be; no event sink will be called while another event sink is
+active.
+<p>
+If no event sink instructs the event source to terminate, the event source
+continues waiting for events. Otherwise, the event source returns to its
+caller, which usually shuts down the system.
+
+<h4>The system event source.</h4>
+
+Liboop comes with a single "reference" implementation of an event source.
+This event source uses select() to dispatch events. Most programs built
+around liboop will probably use the standard system event source; legacy
+programs with their own event loop, or programs with specialized needs may
+implement their own event source.
+
+<h4>Adapters.</h4>
+
+Liboop supports <em>adapters</em> to enable legacy components to use the liboop
+interface. For example, many widget sets have their own event loop and their
+own mechanism for registering callbacks on timeouts and file descriptor
+activity; liboop uses <em>source adapters</em> that accept registration,
+register corresponding callbacks with the widget set's event loop, and route
+events appropriately. Such adapters let general-purpose liboop-based
+components work in an application based on that widget set.
+<p>
+Similarly, some components are designed to work in a non-blocking fashion, and
+they might be used with a <em>sink adapter</em> to work with liboop. An
+asynchronous DNS query package, for example, could work as a liboop sink that
+ultimately generates a higher-level "success" or "failure" callback to the
+invoking routine.
+
+<h4>Code.</h4>
+
+Liboop's abstract event source interface is implemented as a structure
+containing C function pointers. These functions accept a pointer to the
+structure as their first argument; sources are expected to include their
+own data (in whatever format) with the core function pointers. Callbacks
+are also C function pointers, with "void *" arguments to pass data.
+<p>
+For more about the liboop interface, see the <a href="ref.html">reference</a>.
+
+<hr><a href="">liboop home</a></body></html>
Index: 1.0-5/liboop.org/on_fd.html
===================================================================
--- 1.0-5/liboop.org/on_fd.html (nonexistent)
+++ 1.0-5/liboop.org/on_fd.html (revision 27)
@@ -0,0 +1,84 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>liboop: on_fd(), cancel_fd()</title>
+<link rel="stylesheet" type="text/css" href="style.css">
+</head><body>
+
+<h2>on_fd(), cancel_fd()</h2>
+
+<pre>
+#include &lt;oop.h&gt;
+
+/* <em>Types of file descriptor activity.</em> */
+typedef enum {
+ OOP_READ,
+ OOP_WRITE,
+ OOP_EXCEPTION<a href="#note-exception">*</a>,
+} oop_event;
+
+/* <em>Callback function prototype.</em> */
+typedef void *oop_call_fd(oop_source *source,int fd,oop_event event,void *user);
+
+/* <em>Register and unregister file descriptor activity event sinks.</em> */
+void (*on_fd)(oop_source *source,int fd,oop_event event,oop_call_fd *call,void *user);
+void (*cancel_fd)(oop_source *source,int fd,oop_event event);
+</pre>
+
+<h3>Arguments.</h3>
+
+<dl>
+<dt><b>oop_source *source</b>
+<dd>The event source to register or unregister the event sink with. This must
+be the same event source you got the function pointer from:
+"src-&gt;on_fd(src,...);".<p>
+
+<dt><b>int fd</b>
+<dd>The file descriptor to watch (or stop watching).<p>
+
+<dt><b>oop_event event</b>
+<dd>The kind of activity to watch for (or stop watching for). Must be one of
+OOP_READ (triggered when data is available for reading on the specified file
+descriptor), OOP_WRITE (triggered when buffer space is available to write on
+the specified file descriptor), or OOP_EXCEPTION<a href="#note-exception">*</a>
+(triggered on any number of "exceptional" events, such as TCP urgent data
+or system error).<p>
+
+<dt><b>oop_call_fd *call</b>
+<dd>The callback function (event sink) to add (or remove).<p>
+
+<dt><b>void *user</b>
+<dd>User data passed through to the callback function.<p>
+</dl>
+
+<h3>Description.</h3>
+
+Note that these are not global functions, but function pointers supplied
+by the event source (in the <em>oop_source</em> structure) or by the user.
+
+<dl>
+<dt><b>on_fd</b>
+<dd>After this function is called, whenever the source's event loop detects
+the condition indicated by <em>event</em> (OOP_READ, OOP_WRITE, or
+OOP_EXCEPTION<a href="#note-exception">*</a>) on the file descriptor
+<em>fd</em>, it will call the function
+<em>call</em>, passing it a pointer to the event source, the file descriptor,
+the event type, and the same opaque <em>user</em> pointer passed to on_fd.
+This callback will be called repeatedly as long as the condition persists and
+it is not deactivated (see below). Only one callback may be registered per
+(event,fd) pair.<p>
+
+<dt><b>cancel_fd</b>
+<dd>Deactivate an event sink callback registered using on_fd (above).
+Any callback associated with the (event,fd) pair in question is removed.<p>
+
+<dt><b>oop_call_fd</b>
+<dd>Called when the event is triggered. Performs a user_specific action.
+Should return OOP_CONTINUE if the event loop should continue operating; any
+other value (including OOP_HALT) will cause termination of the event loop.
+</dl>
+
+<hr>
+<p><a name="note-exception">*</a> <b>Compatibility note:</b> OOP_EXCEPTION
+is only available in version 0.7 or newer.</p>
+
+<hr><a href="ref.html">liboop reference</a></body></html>
Index: 1.0-5/liboop.org/on_signal.html
===================================================================
--- 1.0-5/liboop.org/on_signal.html (nonexistent)
+++ 1.0-5/liboop.org/on_signal.html (revision 27)
@@ -0,0 +1,67 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>liboop: on_signal(), cancel_signal()</title>
+<link rel="stylesheet" type="text/css" href="style.css">
+</head><body>
+
+<h2>on_signal(), cancel_signal()</h2>
+
+<pre>
+#include &lt;oop.h&gt;
+#include &lt;signal.h&gt;
+
+/* <em>Callback function prototype.</em> */
+typedef void *oop_call_signal(oop_source *source,int sig,void *user);
+
+/* <em>Register and unregister UNIX signal event sinks.</em> */
+void (*on_signal)(oop_source *source,int sig,oop_call_signal *call,void *user);
+void (*cancel_signal)(oop_source *source,int sig,oop_call_signal *call,void *user);
+</pre>
+
+<h3>Arguments.</h3>
+
+<dl>
+<dt><b>oop_source *source</b>
+<dd>The event source to register or unregister the event sink with. This must
+be the same event source you got the function pointer from:
+"src-&gt;on_signal(src,...);".<p>
+
+<dt><b>int sig</b>
+<dd>The UNIX signal to monitor (SIGINT, SIGHUP, etc.).<p>
+
+<dt><b>oop_call_signal *call</b>
+<dd>The callback function (event sink) to add (or remove).<p>
+
+<dt><b>void *user</b>
+<dd>User data passed through to the callback function.<p>
+</dl>
+
+<h3>Description.</h3>
+
+Note that these are not global functions, but function pointers supplied
+by the event source (in the <em>oop_source</em> structure) or by the user.
+
+<dl>
+<dt><b>on_signal</b>
+<dd>After this function is called, if the signal <em>sig</em> is received,
+when the event loop next runs (immediately, if it is currently waiting for
+events), the event source will call the function <em>call</em>, passing it a
+pointer to the event source, the signal received, and the same opaque
+<em>user</em> pointer passed to on_signal. This callback will be called
+again if the signal occurs again, but if the signal is received multiple times
+in quick succession the event sink may only receive a single callback.
+Many callbacks may be registered for the same signal.<p>
+
+<dt><b>cancel_signal</b>
+<dd>Deactivate an event sink callback registered using on_signal (above). If
+the passed <em>sig</em>, <em>call</em> and <em>user</em> match a previously
+registered callback, it will be removed; if they match more than one, one of
+them will be removed; otherwise, no action is taken.<p>
+
+<dt><b>oop_call_fd</b>
+<dd>Called when the event is triggered. Performs a user_specific action.
+Should return OOP_CONTINUE if the event loop should continue operating; any
+other value (including OOP_HALT) will cause termination of the event loop.
+</dl>
+
+<hr><a href="ref.html">liboop reference</a></body></html>
Index: 1.0-5/liboop.org/on_time.html
===================================================================
--- 1.0-5/liboop.org/on_time.html (nonexistent)
+++ 1.0-5/liboop.org/on_time.html (revision 27)
@@ -0,0 +1,70 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>liboop: on_time(), cancel_time()</title>
+<link rel="stylesheet" type="text/css" href="style.css">
+</head><body>
+
+<h2>on_time(), cancel_time()</h2>
+
+<pre>
+#include &lt;oop.h&gt;
+#include &lt;sys/time.h&gt;
+
+/* <em>Zero time, for scheduling an event immediately.</em> */
+static const struct timeval OOP_TIME_NOW = { 0, 0 };
+
+/* <em>Callback function prototype.</em> */
+typedef void *oop_call_time(oop_source *source,struct timeval tv,void *user);
+
+/* <em>Register and unregister time-triggered event sinks.</em> */
+void (*on_time)(oop_source *source,struct timeval tv,oop_call_time *call,void *user);
+void (*cancel_time)(oop_source *source,struct timeval tv,oop_call_time *call,void *user);
+</pre>
+
+<h3>Arguments.</h3>
+
+<dl>
+<dt><b>oop_source *source</b>
+<dd>The event source to register or unregister the event sink with. This must
+be the same event source you got the function pointer from:
+"src-&gt;on_time(src,...);".<p>
+
+<dt><b>struct timeval tv</b>
+<dd>The time to wait for. OOP_TIME_NOW (or any time in the past) will cause
+immediate scheduling.<p>
+
+<dt><b>oop_call_time *call</b>
+<dd>The callback function (event sink) to add (or remove).<p>
+
+<dt><b>void *user</b>
+<dd>User data passed through to the callback function.<p>
+</dl>
+
+<h3>Description.</h3>
+
+Note that these are not global functions, but function pointers supplied
+by the event source (in the <em>oop_source</em> structure) or by the user.
+
+<dl>
+<dt><b>on_time</b>
+<dd>After this function is called, when the event loop is running and the
+time <em>tv</em> is reached (or immediately upon entry to the event loop, if
+the specified time occurs in the past), the event source will call the function
+<em>call</em>, passing it a pointer to the event source, the scheduled time,
+and the same opaque <em>user</em> pointer passed to on_time. This callback
+will only be called once. Many callbacks may be registered for the same
+time.<p>
+
+<dt><b>cancel_time</b>
+<dd>Deactivate an event sink callback registered using on_time (above). If the
+passed <em>tv</em>, <em>call</em> and <em>user</em> match a previously
+registered callback, it will be removed; if they match more than one, one of
+them will be removed; otherwise, no action is taken.<p>
+
+<dt><b>oop_call_time</b>
+<dd>Called when the event is triggered. Performs a user_specific action.
+Should return OOP_CONTINUE if the event loop should continue operating; any
+other value (including OOP_HALT) will cause termination of the event loop.
+</dl>
+
+<hr><a href="ref.html">liboop reference</a></body></html>
Index: 1.0-5/liboop.org/oop_adns.html
===================================================================
--- 1.0-5/liboop.org/oop_adns.html (nonexistent)
+++ 1.0-5/liboop.org/oop_adns.html (revision 27)
@@ -0,0 +1,58 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>liboop: oop_adns_new(), oop_adns_delete()</title>
+<link rel="stylesheet" type="text/css" href="style.css">
+</head><body>
+
+<h2>oop_adns_new(), oop_adns_delete()</h2>
+
+<pre>
+#include &lt;oop.h&gt;
+#include &lt;adns.h&gt;
+#include &lt;oop-adns.h&gt;
+
+oop_adapter_adns *oop_adns_new(oop_source *source,adns_initflags flags,FILE *diag);
+void oop_adns_delete(oop_adapter_adns *adapter);
+</pre>
+
+<h3>Arguments.</h3>
+
+<dl>
+<dt><b>oop_source *source</b>
+<dd>The event source to use. The adapter will use this event source to wait
+asynchronously for network communication.<p>
+
+<dt><b>adns_initflags flags</b>
+<dd>Any initialization flags used to create the instance of adns. Refer to the
+adns documentation for details.<p>
+
+<dt><b>FILE *diag</b>
+<dd>The file to send adns diagnostics to. Refer to the adns documentation for
+details.<p>
+
+<dt><b>oop_adapter_adns *adapter</b>
+<dd>An adns adapter to delete, with no outstanding
+<a href="oop_adns_query.html">queries</a>.<p>
+</dl>
+
+<h3>Description.</h3>
+
+<dl>
+<dt><b>oop_adns_new</b>
+<dd>Create a new liboop adns adapter. This adapter manages an instance of
+<a href="http://www.chiark.greenend.org.uk/~ian/adns/">Ian Jackson's
+asychronous DNS resolver</a> and supplies it with events from <em>source</em>.
+The adns instance is initialized with the supplied <em>flags</em> and
+<em>diag</em> file; refer to the adns documentation for details.<p>
+
+If a malloc failure or other catastrophic system error occurs creating the
+adapter, NULL is returned. The caller must handle this failure.<p>
+
+<dt><b>oop_adns_delete</b>
+<dd>Destroy the liboop adns adapter <em>adns</em>. This frees all resources
+associated with the adapter, including the underlying adns instance. Any
+callbacks registered with the event source are cancelled. The adapter can have
+no active queries when it is deleted.<p>
+</dl>
+
+<hr><a href="ref.html">liboop reference</a></body></html>
Index: 1.0-5/liboop.org/oop_adns_query.html
===================================================================
--- 1.0-5/liboop.org/oop_adns_query.html (nonexistent)
+++ 1.0-5/liboop.org/oop_adns_query.html (revision 27)
@@ -0,0 +1,94 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>liboop: oop_adns_submit(), oop_adns_cancel()</title>
+<link rel="stylesheet" type="text/css" href="style.css">
+</head><body>
+
+<h2>oop_adns_submit(), oop_adns_cancel()</h2>
+
+<pre>
+#include &lt;oop.h&gt;
+#include &lt;adns.h&gt;
+#include &lt;oop-adns.h&gt;
+
+/* <em>Callback function prototype.</em> */
+typedef void *oop_adns_call(oop_adapter_adns *adapter,adns_answer *answer,void *data);
+
+/* <em>Submit an asynchronous DNS query.</em> */
+oop_adns_query *oop_adns_submit(
+ oop_adapter_adns *adapter,
+ const char *owner,adns_rrtype type,adns_queryflags flags,
+ oop_adns_call *call,void *user);
+
+/* <em>Cancel a running query.</em> */
+void oop_adns_cancel(oop_adns_query *query);
+</pre>
+
+<h3>Arguments.</h3>
+
+<dl>
+<dt><b>oop_adapter_adns *adns</b>
+<dd>The <a href="oop_adns.html">adns adapter</a> to use for the query.<p>
+
+<dt><b>adns_answer *answer</b>
+<dd>The answer to the query (status and RR data). Refer to the adns
+documentation for details.<p>
+
+<dt><b>const char *owner</b>
+<dd>The DNS domain name to query.<p>
+
+<dt><b>adns_rrtype type</b>
+<dd>The DNS Resource Record type to query. Refer to the adns documentation for
+the list of valid RR types.<p>
+
+<dt><b>adns_queryflags flags</b>
+<dd>Flags for the DNS query. Refer to the adns documentation for details.<p>
+
+<dt><b>oop_call_fd *call</b>
+<dd>The callback function (event sink) to use for reporting query succcess or
+failure.<p>
+
+<dt><b>void *user</b>
+<dd>User data passed through to the callback function.<p>
+
+<dt><b>oop_adns_query *query</b>
+<dd>The query to cancel.
+</dl>
+
+<h3>Description.</h3>
+
+<dl>
+<dt><b>oop_adns_submit</b>
+<dd>This function begins a DNS query using an adns adapter. Most of the
+parameters are passed directly to adns. The query will be processed
+asynchronously using the event source specified when the adapter was created;
+when it completes (successfully or not), the specified callback will be
+invoked.<p>
+
+On malloc failure or catastrophic system error, NULL will be returned.
+(Simple name resolution errors, such as not finding the name, do not result
+in a NULL query; instead, the callback is invoked with an error status.)<p>
+
+The returned pointer is valid (and may be used to cancel the query) until
+either the query is cancelled or the callback is invoked (the query
+completes).<p>
+
+<dt><b>oop_adns_cancel</b>
+<dd>Stop processing a query started with oop_adns_submit (above). This must
+be called with a non-NULL pointer returned from oop_adns_submit before the
+query has completed (and the callback function invoked). Any query may only
+be cancelled once. All resources associated with the query will be
+released.<p>
+
+<dt><b>oop_adns_call</b>
+<dd>Called when the query completes, successfully or not. Performs a
+user-specific action with the results of the query. All resources associated
+with the query will be released before the function is called, except for the
+answer structure itself. (The user is responsible for freeing the answer
+structure, as per the conventions established by adns. Note that adns does
+not use oop_alloc!)
+Should return OOP_CONTINUE if the event loop should continue operating;
+any other value (including OOP_HALT) will cause termination of the event loop.
+</dl>
+
+<hr><a href="ref.html">liboop reference</a></body></html>
Index: 1.0-5/liboop.org/oop_glib.html
===================================================================
--- 1.0-5/liboop.org/oop_glib.html (nonexistent)
+++ 1.0-5/liboop.org/oop_glib.html (revision 27)
@@ -0,0 +1,48 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>liboop: oop_glib_new(), oop_glib_delete(), oop_glib_return()</title>
+<link rel="stylesheet" type="text/css" href="style.css">
+</head><body>
+
+<h2>oop_glib_new(), oop_glib_delete(), oop_glib_return()</h2>
+
+<pre>
+#include &lt;oop.h&gt;
+#include &lt;glib.h&gt;
+#include &lt;oop-glib.h&gt;
+
+oop_source *oop_glib_new();
+void oop_glib_delete();
+void *oop_glib_return();
+</pre>
+
+<h3>Description.</h3>
+
+<dl>
+<dt><b>oop_glib_new</b>
+<dd>Create a liboop source which uses the
+<a href="http://www.gtk.org/rdp/glib/glib-the-main-event-loop.html">GLib
+Main Event Loop</a> for events. There is only one such event loop (the
+GMainLoop structure really represents a loop context, not a fully independent
+event loop), so this function is global. You may call it multiple times; it
+will return the same event source, but keep count of the number of users.<p>
+
+Events will be dispatched when the GLib event loop is run, either directly
+via g_main_run() or indirectly via gtk_main().<p>
+
+<dt><b>oop_glib_delete</b>
+<dd>Delete the liboop source created with oop_glib_new(). This decrements the
+count of users; when oop_glib_delete has been called as many times as
+oop_glib_new, the event source is removed.<p>
+
+<dt><b>oop_glib_return</b>
+<dd>Since the event source is run by GLib, the main program has no direct way
+of retrieving a value returned by an event handler. Instead, when the loop is
+terminated, the GLib event loop should return, and the caller can use this
+function to request the specific termination code.<p>
+
+This function isn't commonly used. <b>Furthermore, GLib event loop termination
+does not currently work.</b> In other words, ignore this for now.
+</dl>
+
+<hr><a href="ref.html">liboop reference</a></body></html>
Index: 1.0-5/liboop.org/oop_rl.html
===================================================================
--- 1.0-5/liboop.org/oop_rl.html (nonexistent)
+++ 1.0-5/liboop.org/oop_rl.html (revision 27)
@@ -0,0 +1,47 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>liboop: oop_readline_register(), oop_readline_cancel()</title>
+<link rel="stylesheet" type="text/css" href="style.css">
+</head><body>
+
+<h2>oop_readline_register(), oop_readline_cancel()</h2>
+
+<pre>
+#include &lt;oop.h&gt;
+#include &lt;oop-rl.h&gt;
+
+void oop_readline_register(oop_source *source);
+void oop_readline_cancel(oop_source *source);
+</pre>
+
+<h3>Arguments.</h3>
+
+<dl>
+<dt><b>oop_source *source</b>
+<dd>The event source to use. The adapter will use this event source to wait
+asynchronously for console input.<p>
+</dl>
+
+<h3>Description.</h3>
+
+<dl>
+<dt><b>oop_readline_register</b>
+<dd>Register a liboop <em>source</em> with the
+<a href="http://cnswww.cns.cwru.edu/~chet/readline/rltop.html">GNU Readline
+Library</a>. The adapter responds asynchronously to console input and notifies
+Readline when it arrives via rl_callback_read_char(). You should use the
+Readline <a href="http://cnswww.cns.cwru.edu/~chet/readline/readline.html#SEC38">alternate
+interface</a> to prompt the user and receive input.<p>
+
+Note well that Readline will
+<a href="http://cnswww.cns.cwru.edu/~chet/readline/readline.html#SEC40">install
+its own signal handlers</a> by default. Make sure to disable this behavior
+by setting rl_catch_signals to zero if you wish to manage signals with
+liboop.<p>
+
+<dt><b>oop_readline_cancel</b>
+<dd>Unregister liboop with Readline. After this is called,
+rl_readback_read_char() will no longer be invoked automatically.<p>
+</dl>
+
+<hr><a href="ref.html">liboop reference</a></body></html>
Index: 1.0-5/liboop.org/oop_sys.html
===================================================================
--- 1.0-5/liboop.org/oop_sys.html (nonexistent)
+++ 1.0-5/liboop.org/oop_sys.html (revision 27)
@@ -0,0 +1,46 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>liboop: oop_sys_new(), oop_sys_delete()</title>
+<link rel="stylesheet" type="text/css" href="style.css">
+</head><body>
+
+<h2>oop_sys_new(), oop_sys_delete()</h2>
+
+<pre>
+#include &lt;oop.h&gt;
+
+/* <em>Create and destroy a system event source.</em> */
+oop_source_sys *oop_sys_new(void);
+void oop_sys_delete(oop_source_sys *sys);
+</pre>
+
+<h3>Arguments.</h3>
+
+<dl>
+<dt><b>oop_source_sys *sys</b>
+<dd>The event source to deallocate and destroy.
+</dl>
+
+<h3>Description.</h3>
+
+<dl>
+<dt><b>oop_sys_new</b>
+<dd>Create a new system event source. The system event source implements the
+event source interface and manages a select() loop. Once the system event
+source is created, use <a href="oop_sys_source.html">oop_sys_source()</a> to
+access the event source interface (which lets you register event sinks), and
+<a href="oop_sys_run.html">oop_sys_run()</a> or
+<a href="oop_sys_run.html">oop_sys_run_once()</a> to actually process events.
+More than one system event source can exist, though it is rarely useful to do
+so (since only one may be active at a time).<p>
+
+If a malloc failure occurs creating the system event source, NULL is returned.
+It is up to the caller to handle this failure.<p>
+
+<dt><b>oop_sys_delete</b>
+<dd>Destroy the system event source <em>sys</em>. This frees all resources
+associated with the event source. The source cannot have any active callbacks
+(event sinks) associated with it.<p>
+</dl>
+
+<hr><a href="ref.html">liboop reference</a></body></html>
Index: 1.0-5/liboop.org/oop_sys_run.html
===================================================================
--- 1.0-5/liboop.org/oop_sys_run.html (nonexistent)
+++ 1.0-5/liboop.org/oop_sys_run.html (revision 27)
@@ -0,0 +1,45 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>liboop: oop_sys_run()</title>
+<link rel="stylesheet" type="text/css" href="style.css">
+</head><body>
+
+<h2>oop_sys_run(), oop_sys_run_once()</h2>
+
+<pre>
+#include &lt;oop.h&gt;
+
+/* <em>Run the event loop.</em> */
+oop_source *oop_sys_run(oop_source_sys *sys);
+oop_source *oop_sys_run_once(oop_source_sys *sys);
+</pre>
+
+<h3>Arguments.</h3>
+<dl>
+<dt><b>oop_source_sys *sys</b>
+<dd>The event source to operate.
+</dl>
+
+<h3>Description.</h3>
+
+The oop_sys_run() function starts waiting for events registered with the
+system event source <em>sys</em>. As events (file descriptor activity, timed
+events, and signals) occur, the appropriate event sinks are called. As long
+as these callbacks return OOP_CONTINUE, the function continues running and
+processing events.<p>
+
+When one of the callbacks returns some other value, oop_sys_run returns this
+value. You can use this technique to allow callbacks to return data to the
+"owner" of the event loop (the caller of oop_sys_run). You may then decide
+whether to restart the event loop (by calling oop_sys_run again) or not.<p>
+
+If an error occurs waiting for events, oop_sys_run returns OOP_ERROR.
+If no event sinks are registered (which would lead to an infinite delay),
+oop_sys_run returns OOP_CONTINUE.<p>
+
+The oop_sys_run_once() function behaves just like oop_sys_run(), but returns
+immediately after processing any pending results. The return values are the
+same as oop_sys_run(), except that a return of OOP_CONTINUE does not
+necessarily mean that no event sinks are registered.<p>
+
+<hr><a href="ref.html">liboop reference</a></body></html>
Index: 1.0-5/liboop.org/oop_sys_source.html
===================================================================
--- 1.0-5/liboop.org/oop_sys_source.html (nonexistent)
+++ 1.0-5/liboop.org/oop_sys_source.html (revision 27)
@@ -0,0 +1,30 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>liboop: oop_sys_source()</title>
+<link rel="stylesheet" type="text/css" href="style.css">
+</head><body>
+
+<h2>oop_sys_source()</h2>
+
+<pre>
+#include &lt;oop.h&gt;
+
+/* <em>Get the source interface for a system event source.</em> */
+oop_source *oop_sys_source(oop_source_sys *sys);
+</pre>
+
+<h3>Arguments.</h3>
+<dl>
+<dt><b>oop_source_sys *sys</b>
+<dd>The event source from which to fetch the interface.
+</dl>
+
+<h3>Description.</h3>
+
+This function returns the standard <em>oop_source</em> interface for the
+system event source <em>sys</em>. The interface structure returned contains
+function pointers for registering and unregistering callbacks with the event
+source; you can pass it to modules which simply want an event source, without
+needing to know that you use the system event source in particular.<p>
+
+<hr><a href="ref.html">liboop reference</a></body></html>
Index: 1.0-5/liboop.org/oop_tcl.html
===================================================================
--- 1.0-5/liboop.org/oop_tcl.html (nonexistent)
+++ 1.0-5/liboop.org/oop_tcl.html (revision 27)
@@ -0,0 +1,38 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>liboop: oop_tcl_new(), oop_tcl_delete()</title>
+<link rel="stylesheet" type="text/css" href="style.css">
+</head><body>
+
+<h2>oop_tcl_new(), oop_tcl_delete()</h2>
+
+<pre>
+#include &lt;oop.h&gt;
+#include &lt;oop-tcl.h&gt;
+
+oop_source *oop_tcl_new();
+void oop_tcl_delete();
+</pre>
+
+<h3>Description.</h3>
+
+<dl>
+<dt><b>oop_tcl_new</b>
+<dd>Create a liboop source which uses the
+<a href="http://www.purl.org/tcl/home/man/tcl8.3.2/TclLib/DoOneEvent.htm">Tcl
+event loop</a> for events. There is only one such event loop, so this
+function is global. You may call it multiple times; it will return the same
+event source, but keep count of the number of users.<p>
+
+Events will be dispatched when the Tcl event loop is run, either directly
+via Tcl_DoOneEvent() or indirectly via Tk_MainLoop(). Unfortunately, there
+is no way to stop the Tcl event loop, so return values from event handlers
+are ignored.<p>
+
+<dt><b>oop_tcl_delete</b>
+<dd>Delete the liboop source created with oop_tcl_new(). This decrements the
+count of users; when oop_tcl_delete has been called as many times as
+oop_tcl_new, the event source is removed.<p>
+</dl>
+
+<hr><a href="ref.html">liboop reference</a></body></html>
Index: 1.0-5/liboop.org/oop_www.html
===================================================================
--- 1.0-5/liboop.org/oop_www.html (nonexistent)
+++ 1.0-5/liboop.org/oop_www.html (revision 27)
@@ -0,0 +1,58 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>liboop: oop_www_register(), oop_www_cancel(), oop_www_memory()</title>
+<link rel="stylesheet" type="text/css" href="style.css">
+</head><body>
+
+<h2>oop_www_register(), oop_www_cancel(), oop_www_memory()</h2>
+
+<pre>
+#include &lt;oop.h&gt;
+#include &lt;HTEvent.h&gt;
+#include &lt;oop-www.h&gt;
+
+void oop_www_register(oop_source *source);
+void oop_www_cancel();
+void oop_www_memory();
+</pre>
+
+<h3>Arguments.</h3>
+
+<dl>
+<dt><b>oop_source *source</b>
+<dd>The event source to use. The adapter will use this event source to wait
+asynchronously for network communication.<p>
+</dl>
+
+<h3>Description.</h3>
+
+<dl>
+<dt><b>oop_www_register</b>
+<dd>Register a liboop <em>source</em> with the
+<a href="http://www.w3.org/Library/">W3C Protocol Library</a> (libwww).
+The adapter acts as an event manager for the libwww
+<a href="http://www.w3.org/Library/src/HTEvent.html">HTEvent module</a>,
+replacing the
+<a href="http://www.w3.org/Library/src/HTEvtLst.html">default event
+manager</a>; it relies on the supplied source for actual event handling.
+Refer to the libwww documentation for the details of its event architecture.<p>
+
+<dt><b>oop_www_cancel</b>
+<dd>Unregister liboop with libwww. This frees resources associated with the
+adapter, and leaves libwww with no event manager. You may use
+<b>HTEventInit</b> in the
+<a href="http://www.w3.org/Library/src/HTInit.html">HTInit module</a> to
+reinstate the libwww default event manager. The adapter can have no active
+events when it is deleted. (Take care; libwww tends to cache persistent
+connections to Web servers, which may cause events to be registered even if
+there are no open requests.)<p>
+
+<dt><b>oop_www_memory</b>
+<dd>Set <a href="alloc.html">oop_malloc, oop_realloc, and oop_free</a> to
+<a href="http://www.w3.org/Library/src/HTMemory.html">HTMemory_malloc
+and HTMemory_free</a>, respectively. You do not need to do this, but it
+may help to keep your memory allocations consistent with the libwww
+framework. If you do this, do so before calling any other liboop functions.
+</dl>
+
+<hr><a href="ref.html">liboop reference</a></body></html>
Index: 1.0-5/liboop.org/ref.html
===================================================================
--- 1.0-5/liboop.org/ref.html (nonexistent)
+++ 1.0-5/liboop.org/ref.html (revision 27)
@@ -0,0 +1,160 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>liboop: Reference</title>
+<link rel="stylesheet" type="text/css" href="style.css">
+</head><body>
+
+<h2>Liboop Reference.</h2>
+
+<h4>Event Source Interface.</h4>
+
+<pre>
+#include &lt;oop.h&gt;
+
+/* <em>Applications can set these; liboop libraries will use them.</em> */
+extern void *(*<a href="alloc.html">oop_malloc</a>)(size_t); /* <em>returns NULL on failure</em> */
+extern void *(*<a href="alloc.html">oop_realloc</a>)(void *,size_t); /* <em>returns NULL on failure</em> */
+extern void (*<a href="alloc.html">oop_free</a>)(void *);
+
+typedef struct oop_source oop_source;
+struct oop_source {
+ /* <em>File descriptor activity events.</em> */
+ void (*<a href="on_fd.html">on_fd</a>)(oop_source *,int fd,oop_event,oop_call_fd *,void *);
+ void (*<a href="on_fd.html">cancel_fd</a>)(oop_source *,int fd,oop_event);
+
+ /* <em>Timer events.</em> */
+ void (*<a href="on_time.html">on_time</a>)(oop_source *,struct timeval,oop_call_time *,void *);
+ void (*<a href="on_time.html">cancel_time</a>)(oop_source *,struct timeval,oop_call_time *,void *);
+
+ /* <em>UNIX signal events.</em> */
+ void (*<a href="on_signal.html">on_signal</a>)(oop_source *,int sig,oop_call_signal *,void *);
+ void (*<a href="on_signal.html">cancel_signal</a>)(oop_source *,int sig,oop_call_signal *,void *);
+};
+</pre>
+
+<h4>System Event Source.</h4>
+
+<pre>
+typedef struct oop_source_sys oop_source_sys;
+
+/* <em>Create and destroy a system event source.</em> */
+oop_source_sys *<a href="oop_sys.html">oop_sys_new</a>(void); /* <em>returns NULL on failure</em> */
+void <a href="oop_sys.html">oop_sys_delete</a>(oop_source_sys *);
+
+/* <em>Run the system event loop.</em> */
+void *<a href="oop_sys_run.html">oop_sys_run</a>(oop_source_sys *);
+void *<a href="oop_sys_run.html">oop_sys_run_once</a>(oop_source_sys *);
+
+/* <em>Get the standard source interface for a system event source.</em> */
+oop_source *<a href="oop_sys_source.html">oop_sys_source</a>(oop_source_sys *);
+</pre>
+
+<hr>
+<h4><a href="http://www.chiark.greenend.org.uk/~ian/adns/">ADNS</a> Event Sink
+Adapter.</h4>
+
+<p><em>Please note that while the core of liboop is distributed under the
+Lesser GPL, ADNS is covered by the
+<a href="http://www.fsf.org/copyleft/gpl.html">full GPL</a>.</em></p>
+
+<pre>
+#include &lt;adns.h&gt;
+#include &lt;oop-adns.h&gt;
+
+typedef struct oop_adapter_adns oop_adapter_adns;
+typedef struct oop_adns_query oop_adns_query;
+
+/* <em>Create and destroy a liboop adns adapter, including an instance of adns.</em> */
+oop_adapter_adns *<a href="oop_adns.html">oop_adns_new</a>(oop_source *,adns_initflags,FILE *diag); /* <em>returns NULL on failure</em> */
+void <a href="oop_adns.html">oop_adns_delete</a>(oop_adapter_adns *);
+
+/* <em>Submit an asynchronous DNS query.</em> */
+oop_adns_query *<a href="oop_adns_query.html">oop_adns_submit</a>( /* <em>returns NULL on failure</em> */
+ oop_adapter_adns *,
+ const char *owner,adns_rrtype type,adns_queryflags flags,
+ oop_adns_call *,void *);
+
+/* <em>Cancel a running query.</em> */
+void <a href="oop_adns_query.html">oop_adns_cancel</a>(oop_adns_query *);
+</pre>
+
+<hr>
+<h4><a href="http://gtk.org/">GLib</a> Event Source Adapter.</h4>
+
+<p><em>GLib is copyrighted by Peter Mattis, Spencer Kimball and Josh MacDonald,
+and licensed under the terms of the
+<a href="http://www.fsf.org/copyleft/lgpl.html">GNU Library GPL</a>.</em></p>
+
+<pre>
+#include &lt;glib.h&gt;
+#include &lt;oop-glib.h&gt;
+
+/* <em>Create and destroy a liboop GLib adapter.</em> */
+oop_source *<a href="oop_glib.html">oop_glib_new</a>();
+void <a href="oop_glib.html">oop_glib_delete</a>();
+
+/* <em>Get the value used to terminate the event loop (e.g. OOP_HALT)</em>. */
+void *<a href="oop_glib.html">oop_glib_return</a>();
+</pre>
+
+<hr>
+<h4><a href="http://www.purl.org/tcl/home/">Tcl/Tk</a>
+Event Source Adapter.</h4>
+
+<p><em>Tcl is copyrighted by the Regents of the University of California,
+Sun Microsystems, Inc., and other parties.</em></p>
+
+<pre>
+#include &lt;oop-tcl.h&gt;
+
+/* <em>Create and destroy a liboop Tcl adapter.</em> */
+oop_source *<a href="oop_tcl.html">oop_tcl_new</a>();
+void <a href="oop_tcl.html">oop_tcl_delete</a>();
+</pre>
+
+<hr>
+<h4><a href="http://www.w3.org/Library/">Libwww</a> Event Sink Adapter.</h4>
+
+<p><em>Libwww is covered by this <a
+href="http://www.w3.org/Consortium/Legal/libwww-copyright-notice-19980720.html"
+>copyright notice</a> and distributed under the terms of the
+<a href="http://www.w3.org/Consortium/Legal/copyright-software.html">W3C
+Software License</a>.</em></p>
+
+<pre>
+#include &lt;HTEvent.h&gt;
+#include &lt;oop-www.h&gt;
+
+/* <em>Register a liboop event source as a libwww "event manager".</em> */
+void <a href="oop_www.html">oop_www_register</a>(oop_source *);
+
+/* <em>Unregister the event source, leaving libwww with no event manager.
+ This function cannot be executed with outstanding event requests.</em> */
+void <a href="oop_www.html">oop_www_cancel</a>();
+
+/* <em>Use libwww for liboop's oop_malloc, oop_realloc, and oop_free.
+ <b>If you use this, you must call it before any other liboop function!</b></em> */
+void <a href="oop_www.html">oop_www_memory</a>();
+</pre>
+
+<hr>
+<h4><a href="http://cnswww.cns.cwru.edu/~chet/readline/rltop.html">GNU
+Readline Library</a> Event Sink Adapter.</h4>
+
+<p><em>Please note that while the core of liboop is distributed under the
+Lesser GPL, Readline is covered by the
+<a href="http://www.fsf.org/copyleft/gpl.html">full GPL</a>.</em></p>
+
+<pre>
+#include &lt;oop-rl.h&gt;
+
+/* <em>Use a liboop event source to call rl_callback_read_char().
+ It is up to you to call rl_callback_handler_install().
+ Note well that Readline uses malloc(), not oop_malloc().</em> */
+void <a href="oop_rl.html">oop_readline_register</a>(oop_source *);
+
+/* <em>Stop notifying readline of input characters.</em> */
+void <a href="oop_rl.html">oop_readline_cancel</a>(oop_source *);
+</pre>
+
+<hr><a href="">liboop home</a></body></html>
Index: 1.0-5/liboop.org/why.html
===================================================================
--- 1.0-5/liboop.org/why.html (nonexistent)
+++ 1.0-5/liboop.org/why.html (revision 27)
@@ -0,0 +1,136 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>liboop: Why?</title>
+<link rel="stylesheet" type="text/css" href="style.css">
+</head><body>
+
+<h2>Why use liboop?</h2>
+
+<h4>The problem.</h4>
+
+Developers often wish to write applications which serve as a mediator between
+several logical interfaces simultaneously; in fact, most applications work
+this way. For example, a browser application might wish to maintain a user
+interface while also managing a network connection and occasionally exchanging
+data with the local filesystem. A server application might be communicating
+with several clients at once while also occasionally receiving a signal from
+the administrator directing it to reload its configuration. A multiplayer game
+might want to maintain several active user interfaces at once.
+<p>
+Furthermore, each of these interfaces may be quite complex, sufficiently so to
+merit shared code modules which specialize in managing the interface.
+Widget sets deal with the details of the X protocol and graphical user
+interface management; "curses" deals with the arcana of character-based
+terminals; WWW libraries offer high-level access to whole families of Internet
+transfer protocols; standard I/O and database routines manage filesystem data.
+<p>
+However, the existing techniques available for multiplexing interface code are
+very poor. Most of these libraries work in "blocking" fashion; once
+instructed to complete a task (such as downloading a file, or presenting a
+dialog to the user), they do not return until the task is complete (or failed),
+even though this may mean waiting an arbitrary amount of time for some external
+agent (such as the user or the network) to respond. Some of the better systems
+are able to manage several concurrent tasks internally, but cannot work with
+other components.
+<p>
+Developers are thus left with several unpalatable choices:
+<ol>
+<li>Accept "blocking" operation. User interfaces stop functioning while the
+application waits for the network; one network client's access is stalled
+while another client performs a transaction. As more data moves from local
+storage (where access is fast enough that blocking is acceptable) to
+delay-prone networked media, this is becoming less and less acceptable.
+<li>Use multiple threads for concurrency. While this is a good solution for
+some problems, developers who choose this route must struggle with relatively
+immature and unportable threading models, and deal with the many libraries
+which are not thread-safe; furthermore, threaded programming requires
+thought-intensive and error-prone synchronization.
+<li>Use multiple processes ("forking") for concurrency. This can also work,
+but requires all communication between modules to use some form of
+inter-process communication, which increases complexity and decreases
+performance. Forking itself is a slow operation, leading to complex
+"pre-forking" schemes for better performance. Worst of all, each process
+must somehow multiplex IPC from other processes with whatever I/O task it had
+to accomplish in the first place; this brings back the very problem forking
+was designed to address.
+<li>Attempt to multiplex each library's I/O operations directly in a master
+"select loop". This requires the developer to understand intimately the
+exact details of each library's I/O interactions, thus breaking modularity,
+fostering unhealthy dependency and leading to a single central snarl through
+which all I/O must pass.
+</ol>
+The paucity of options is reflected in the quality of applications. How many
+programs hang unpleasantly while performing simple network operations like
+hostname resolution? How many user interfaces are unnecessarily "modal"?
+How many simple servers fork for no good reason? How many network applications
+simply don't exist because it's so difficult to write them?
+
+<h4>The solution.</h4>
+
+Liboop offers a single, simple, central event loop. Modules wishing to perform
+I/O without blocking request <em>callbacks</em> from the central <em>event
+source</em>. These callbacks may be tied to file-descriptor activity, the
+system time, or process signals. Liboop is responsible for invoking these
+callbacks as appropriate.
+<p>
+With this system, each module "owns" its own I/O; it can perform arbitrarily
+complex operations without blocking anything else in the program. But since
+callbacks are executed purely sequentially, there is no complex concurrent code
+to manage. From the application developer's point of view, working with liboop
+is very simple; the developer simply makes calls to libraries which work their
+magic and call the application back when they finish. Applications can easily
+manage an arbitrary amount of multiplexed I/O operations using as many
+interface libraries as they like without blocking.
+<p>
+To work with this system, libraries and applications must be liboop-aware.
+Development with legacy code uses <em>adapters</em> which translate the I/O
+model of an application or library into liboop's model. This does require
+knowledge of the code's I/O structure, but can at least keep the modules in
+an application independent of each other.
+<p>
+For more about liboop, see the <a href="how.html">documentation</a>.
+
+<h4>Q&amp;A</h4>
+
+<dl>
+<dt><em>Why don't you just use (favorite widget set), which lets you register
+callbacks on file descriptors and all that good stuff?</em>
+<dd>Because not everyone might want to be tied to that widget set. In
+particular, the developer of a general-purpose I/O library would want to
+allow everyone to use it, without requiring a particular widget set.
+Liboop lets the library developer write to a standard interface,
+which can then be used with most widget sets and other event loops.<p>
+
+<a name="glib"></a>
+<dt><em>Doesn't GLib's <a
+href="http://developer.gnome.org/doc/API/glib/glib-the-main-event-loop.html">Main
+Event Loop</a> do all this, and more?</em>
+<dd>Not quite. GLib is a fine implementation of an event loop (with
+bells and whistles) that supports some extensibility (such as the ability to
+add extra sources). However, I'm doubtful that it extends far enough that
+it could run on top of someone else's event loop (such as the Tk event loop).
+Furthermore, the GLib event loop doesn't manage signals; synchronous handling
+of asynchronous signals is very difficult to do properly and safely in most
+existing systems (without kludges like polling).
+
+<p>In any case, we do have a
+<a href="oop_glib.html">GLib source adapter</a> so you can use the GLib event loop
+with the liboop interface.</p>
+
+<dt><em>How does liboop compare to Niels Provos' <a
+href="http://www.monkey.org/~provos/libevent/">libevent</a>?</em>
+<dd>Like GLib, libevent is a concrete implementation of an event loop, not
+an abstract interface for many event loops; also like GLib, libevent does not
+manage signals. Libevent is smaller and simpler than either liboop or Glib.
+While liboop and GLib are both licensed under the
+<a href="http://www.fsf.org/copyleft/lesser.html">Lesser GPL</a>, libevent
+appears to be licensed under the original BSD license, including the
+advertising clause. Note that the advertising clause renders libevent
+incompatible with GPL software!
+
+<p>It is entirely possible to imagine a libevent source adapter for liboop.
+If anyone is interested in such an adapter, please contact me.</p>
+
+</dl>
+
+<hr><a href="">liboop home</a></body></html>
Index: 1.0-5/liboop.org/index.html
===================================================================
--- 1.0-5/liboop.org/index.html (nonexistent)
+++ 1.0-5/liboop.org/index.html (revision 27)
@@ -0,0 +1,114 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>liboop home page</title>
+<link rel="stylesheet" type="text/css" href="style.css">
+</head><body>
+<img src="logo" alt="liboop" width=202 height=50>
+<p>
+Liboop is a low-level event loop management library for POSIX-based operating
+systems. It supports the development of modular, multiplexed applications
+which may respond to events from several sources. It replaces the "select()
+loop" and allows the registration of event handlers for file and network I/O,
+timers and signals. Since processes use these mechanisms for almost all
+external communication, liboop can be used as the basis for almost any
+application.
+<p>
+Liboop is licensed under the
+<a href="http://www.fsf.org/copyleft/lesser.html">Lesser General Public
+License</a>.
+<p>
+Similar free software includes the GLib <a
+href="http://developer.gnome.org/doc/API/glib/glib-the-main-event-loop.html">Main
+Event Loop</a>, Niels Provos' <a href="http://www.monkey.org/~provos/libevent/">libevent</a>, and (for Perl) <a href="http://poe.perl.org/">POE</a>.
+Refer to the <a href="why.html#glib">rationale</a> for a detailed comparison.
+<p>
+Software which uses or supports liboop includes
+<a href="http://www.lysator.liu.se/~nisse/lsh/">lsh</a>,
+<a href="http://www.nongnu.org/ruli/">RULI</a>,
+<a href="http://www.lysator.liu.se/lyskom/lyskom-server/">lyskom-server</a>,
+<a href="http://gale.org/">Gale</a> and
+<a href="http://gdn.berlios.de/">GDN</a>. (Let me know if I'm missing any.)
+
+<h3>Download.</h3>
+
+Get the
+<a href="http://download.ofb.net/liboop/liboop.tar.gz">latest version</a>.
+Read the included INSTALL file.
+<p>
+You may also browse the CVS repository for
+<a href="http://liboop.org/cvs/gale/liboop/">source code</a> or
+<a href="http://liboop.org/cvs/liboop.org/">documentation</a>.
+
+<h3>Documentation.</h3>
+
+<dl>
+<dt><a href="why.html">Extended rationale</a>
+<dd>Why everyone should be using liboop.
+<dt><a href="how.html">Introduction and overview</a>
+<dd>How liboop works; basic principles of operation.
+<dt><a href="ref.html">Reference</a>
+<dd>Specific functions and data structures.
+</dl>
+
+<h3>News.</h3>
+<dl>
+<dt>27 October 2003
+<dd>Version 1.0 released. (The number has no special meaning, it's just
+the next increment.) The build is little more robust now, and you can enable
+and disable specific adapters in the configure script. The ADNS adapter
+returns error messages, the GLib adapter works with GLib 2, and there's a
+new oop_sys_run_once() function so you can poll an event source.<p>
+
+<dt>11 January 2003
+<dd>Version 0.9 released. A memory leak when creating and destroying the
+system event source was fixed, the robustness of signal handling is improved,
+and some minor portability problems were fixed.<p>
+
+<dt>18 September 2001
+<dd>Version 0.8 released, including a <a href="oop_tcl.html">source adapter</a>
+for <a href="http://www.purl.org/tcl/home/">Tcl/Tk</a>. (0.7 was never
+announced.)<p>
+
+<dt>7 October 2000
+<dd>Version 0.6 released, including a <a href="oop_rl.html">sink adapter</a>
+for the <a href="http://cnswww.cns.cwru.edu/~chet/readline/rltop.html">GNU
+Readline Library</a>.<p>
+
+<dt>5 September 1999
+<dd>Version 0.4 released. Besides the usual bug fixes, the
+<a href="on_fd.html">file descriptor deregistration interface</a> changed, and we
+now have a <a href="oop_glib.html">source adapter</a> for
+<a href="http://gtk.org/">GLib</a>, and a <a href="oop_www.html">sink adapter</a>
+for the <a href="http://www.w3.org/Library/">W3C Protocol Library
+(libwww)</a>! The test/sample program (test-oop) is also quite improved.<p>
+
+<dt>15 August 1999
+<dd>Version 0.3 released. This version includes an
+<a href="oop_adns.html">adapter</a> for
+<a href="http://www.chiark.greenend.org.uk/~ian/adns/">Ian Jackson's
+asynchronous DNS resolver library</a>.<p>
+
+<em>Note that while liboop is
+covered by the lesser GPL, ADNS is covered by the <strong>full GPL</strong>,
+and therefore any program which uses ADNS with (or without) liboop must
+support distribution under the terms of the full GPL.</em><p>
+
+<dt>1 August 1999
+<dd>Version 0.2 released. This release fixes several bugs, uses
+<a href="http://www.gnu.org/software/autoconf/autoconf.html">autoconf</a>,
+<a href="http://www.gnu.org/software/automake/automake.html">automake</a> and
+<a href="http://www.gnu.org/software/libtool/libtool.html">libtool</a>,
+and includes an interface for using
+<a href="alloc.html">alternate memory allocation functions</a>.
+<a href="">Gale</a> now uses liboop!<p>
+
+<dt>5 July 1999
+<dd>Version 0.1 released. This is a very, very simple initial release that
+should nevertheless work as a functional event loop. No adapters are included
+yet. Testing is minimal, but give it a whirl!
+</dl>
+
+<hr><a href="http://ofb.net/~egnor/">Dan Egnor</a> (egnor
+@
+ofb.net)</body></html>
Index: 1.0-5/liboop.org/logo.shar
===================================================================
--- 1.0-5/liboop.org/logo.shar (nonexistent)
+++ 1.0-5/liboop.org/logo.shar (revision 27)
@@ -0,0 +1,149 @@
+#!/bin/sh
+# This is a shell archive (produced by GNU sharutils 4.2.1).
+# To extract the files from this archive, save it to some FILE, remove
+# everything before the `!/bin/sh' line above, then type `sh FILE'.
+#
+# Made on 2004-07-11 17:56 EDT by <sfllaw@ethiopia>.
+# Source directory was `/home/sfllaw/packages/liboop-1.0/liboop.org'.
+#
+# Existing files will *not* be overwritten unless `-c' is specified.
+#
+# This shar contains:
+# length mode name
+# ------ ---------- ------------------------------------------
+# 2358 -rw-r--r-- logo
+#
+save_IFS="${IFS}"
+IFS="${IFS}:"
+gettext_dir=FAILED
+locale_dir=FAILED
+first_param="$1"
+for dir in $PATH
+do
+ if test "$gettext_dir" = FAILED && test -f $dir/gettext \
+ && ($dir/gettext --version >/dev/null 2>&1)
+ then
+ set `$dir/gettext --version 2>&1`
+ if test "$3" = GNU
+ then
+ gettext_dir=$dir
+ fi
+ fi
+ if test "$locale_dir" = FAILED && test -f $dir/shar \
+ && ($dir/shar --print-text-domain-dir >/dev/null 2>&1)
+ then
+ locale_dir=`$dir/shar --print-text-domain-dir`
+ fi
+done
+IFS="$save_IFS"
+if test "$locale_dir" = FAILED || test "$gettext_dir" = FAILED
+then
+ echo=echo
+else
+ TEXTDOMAINDIR=$locale_dir
+ export TEXTDOMAINDIR
+ TEXTDOMAIN=sharutils
+ export TEXTDOMAIN
+ echo="$gettext_dir/gettext -s"
+fi
+if touch -am -t 200112312359.59 $$.touch >/dev/null 2>&1 && test ! -f 200112312359.59 -a -f $$.touch; then
+ shar_touch='touch -am -t $1$2$3$4$5$6.$7 "$8"'
+elif touch -am 123123592001.59 $$.touch >/dev/null 2>&1 && test ! -f 123123592001.59 -a ! -f 123123592001.5 -a -f $$.touch; then
+ shar_touch='touch -am $3$4$5$6$1$2.$7 "$8"'
+elif touch -am 1231235901 $$.touch >/dev/null 2>&1 && test ! -f 1231235901 -a -f $$.touch; then
+ shar_touch='touch -am $3$4$5$6$2 "$8"'
+else
+ shar_touch=:
+ echo
+ $echo 'WARNING: not restoring timestamps. Consider getting and'
+ $echo "installing GNU \`touch', distributed in GNU File Utilities..."
+ echo
+fi
+rm -f 200112312359.59 123123592001.59 123123592001.5 1231235901 $$.touch
+#
+if mkdir _sh01050; then
+ $echo 'x -' 'creating lock directory'
+else
+ $echo 'failed to create lock directory'
+ exit 1
+fi
+# ============= logo ==============
+if test -f 'logo' && test "$first_param" != -c; then
+ $echo 'x -' SKIPPING 'logo' '(file already exists)'
+else
+ $echo 'x -' extracting 'logo' '(binary)'
+ sed 's/^X//' << 'SHAR_EOF' | uudecode &&
+begin 600 logo
+MB5!.1PT*&@H````-24A$4@```,H````R"``````XSQL````(_4E$051XG-6:
+M>W!4U1W'/S?[R/L!+"%`2$("B4F0-RDH#T&I:%%48`#IC"(5U,X(='S@0&EG
+MP)F.4!0+@J!0Z@.'MC*#V`)!H12&9R"H`9*0!X&2$$A"LKM)-KM[3__8>S?W
+MWDUH(HLTWW_V_L[YGM_]_>X]O]_YG;-7$G08S=<`2.WXB)\4YDYP"V8!A!3=
+M)5/N%*VNY,M-A7+-HK#VN<TE`"'&9KFLGMK+@I1'[H)]G8#YR.=4W."B$P$"
+M\=)M7&D3G[SH$2"`E??:E0L;[TQ!'^$-CB5WC)#HT#M38`N8</<*(;:(>VU"
+ML&".[4$4UC"2(@[4_Q@%?5.D$*[?#+9=/P+F[(^\_8CI!9<?^U^NQ,^#@`QF
+MV]O;RIOOW"7S.@-SQ(0.<P=L::LU.6BVW"$ZLT1*IKMF1C#P?Y-_[AR=>2O!
+M0EUM)9"8T/YJ+*[7U($U,;XSYG6(6ZM-4&%)MV%ZZFX6.S$/B^[1CN+&JX=S
+M2QTU0,\>0V=D]PADB(:2O<>NV.U@L<6/?28UTM_C;%"ONH?*MTJ/E)^#A,SQ
+M]W>7E)$JRC,!;HDVH,M/.6T0W@!8)<3IQ2/-`-;!KQQTM\%S?3VKFT:5^<$]
+M'B.E?OUD[:(=,3??W[4N0\&H,W7OC%59(:.W.8000@33E9+Y49*?%O;S;XTL
+M[P^/&$N+T"55.DKS5YF&W"+9-C<IG5/4MG[+DK0LRX0";W!=F3):;T2O#4X=
+MJ7%[?P(0.MNAH=3]QA9(B5G;(H00PAWOM]TP>Z7L4T*(((;]7H-\?4G]:Q:-
+MO&)]L^\B;D`&<L4Y!X#K;^F_]=M0]^Q^V7>5.+`/+:5Y`#2L'/`$0(E#Y;D-
+M=Q(%R_\2W[&P3Y_A^ZTZ8502B/X#8VCX3Z$':%GI^KV_W?GV>QZ`7@\]-]IJ
+M`4_M)UM+!'C631ZK4"I>V2<`*7W*W`R+">$I_>"O-4#=Z^/B@,O#/;1<;%3(
+MD3F/#QZ)_>2.7`>0NVE%Q\)>Q3]BN<T$`TS9&POL0CA*M@P+`8C=+RL,>6LX
+M@'G,P69UD/=,E@2P4`G]Y@4F@/`Y15Z5XMH9#<`70@C15%55=539C5LG_;W.
+M1W%NB03H>[-CL=)A5^:5J2V5<ZT`/ZM6Y/R^`-;%M:V#9'&J/T#Z15D60LC;
+MP@%LFUNTFC='`SRI1MV!6``B5C7Y&9YWPP'3MJ"Z8EYD;VUJ^I4)"-GNDYHG
+M2@!O-VH&R4)>!A"Z3Y9E610E`D1][=5I=CP$<%^)(KXG`73;I,WA#<,`GFL.
+M9N$R:'E4JQ#V6C8@?^*;VP<."I`FOQJN&R#-D@!7F22!9]-5P+SH<;U%D=,`
+M*F\I8IX`3,N?U^;BZ&D`Y<X@NA*^0I=),Q8`%!4#.#X$Z+-&XZH0"&'K"U`)
+M$L6[`28N,6H="E"O!OMI@$=?TB]/.0#7&H/H2F:.7IX3`U05`Q0=!9A_OZ97
+M`D2->@HG.%(*F)<&5#)Q6N'Z52!NF6'CJ]1R071E4&^]'#$$:"D!^'<MT&-J
+M:RV`0,)[^LU*@"*WD-@M`\,'!VAU`YB4"76L!<@Q/#+J`2+-070EW:#+E`)P
+M#>`PP-`T7;=\;=.L?\H`>XZ`_2P@3>P>H/4D0*)2N9UW`[.-:^$I@)2HGV2_
+MXKH$D*FM)*7&#Q][H]PWOYQOE5+6#%B&!YCC_08@S5>S-'TG0TRZ@>(Y"DC9
+MD4%TI=AP_"Q7`<0"E7:`=,W\HGS!ZNKH.-_=Q8DM#9>;`;/^O0&4Y`.,\D6,
+M_3P0'66@Y!4`Y@E2$&NP2S7Z6M!]"C!E`5X!8-5V)F_#[-[UHAV8T.O<ZI2>
+M`I`L&+&C`F"FSV='6\?5[@TW@7[C@KF+S/_7=)V\ZQ;0,\4OZPYT)#.X_F@'
+MXM:G-MJETP"RW:BS<+47&#G()YUV`7:'CB'OVPF8%X8%,X,Y_Z0S]OI6@+3!
+M0$($P,DF;;<DN=\_"TBSTL-M*<E)H4#+<<,<K5[F!,)?45[H]P`-AW24"\M=
+M0,9T@EI.6A8U:=J66@!\A<NC``EG=6/<[X<")%4(61;B>F^`L34Z2MWS`/S"
+MI8P8#T!RF892.!R`S:*#6Z\.NH)UL5H]BOH540!C?)O$M0#\4KL5JWTK%B!J
+MBR(_#F#Z0%-<><NFF0&2\I2&LBP`0J96JA17;J8$2,_>$D+0Z%!P/@/@FBJV
+M/F!9;7)\&0.,\(N^$M;I<#C4<L,Z*;?>)83;F3?7`A#VN:_(/]<;('*)0ZWY
+MFTX\90(PO:IN(C\U`21][/+?=<<HG\[/U`+SD+KJ3#WF$D+(S>6+$P"DI'(A
+MA)!FGU?ZW:4N(%LMU!Y:I\[&AG'JE;W""Q$#5''I'(`QC5!5[9^[F<.&4'XF
+MSP-@6KC!U]CRNS\`,';6`YGA-!3F?WFH&<`R_UWU!.G&[&\!3#.G#<Z"JH*\
+MG?E>@-@U\]4DONEE]2:A3XQ/HO#,/E^5F?%GWU9\!&WCR=:IT`Z#]X400AC3
+M?"O,+]Q4=30,]>47BRTE+2VYAY)T(WZMV=@?[Z4TQJ>EI27&*H\T_N/6[<O+
+M6MU1ZI&(-.28[UT'T96<!$G7;9U_H]70[X=+QN%2]S4-FN#Q[NH9<(>0E/VN
+M5D86$/&TX=%9IA8KLS:(KJSZ8:9VB<OZ2&A1,L,P.OR94[*.(7*'&R@]%UW3
+M=%='`KVO[!ZD?1P#/_+G$G-J$VVBG__*E-6.*[XHO$_=2]BR/W[ALV-53L`4
+MGS3WJ40=.77KI.V%Z@Z*T+XY+P^+-NA[^*MU>TI<JA3=?]*"5.W&Y)P'L/7I
+M.^R+3ROJ`*SQ`Z<_G>!?&:7*EK;M#/>_;OEJ.ZYTBP:XHBYKL;'@+2Z]?(F8
+MK.3TN$!^]7>'3U^LAN[I&0]G#@@L4H"RL]\4%-J1DI-'/)#=3]^W]G49YFT%
+MKA:5%7KIG9:<$:DEB*Z"IKD`&]LG=)T_)>R%0'1V^X1[\:=$Y^$64%L$]+$I
+M\6`)2(A(G?C&Y=YAXBUP70`B^RO//C?P<+E+N%(QT)B;,HYU"V!UB5@Y$_#!
+MQL`V/ISH$JX<-[HB/=C&AQ-=(>P;&P886D+;2F1=(5;D:F-%(O6,#*3]%ZUY
+2O5.WPP60`````$E%3D2N0F""
+`
+end
+SHAR_EOF
+ (set 20 00 10 22 14 52 21 'logo'; eval "$shar_touch") &&
+ chmod 0644 'logo' ||
+ $echo 'restore of' 'logo' 'failed'
+ if ( md5sum --help 2>&1 | grep 'sage: md5sum \[' ) >/dev/null 2>&1 \
+ && ( md5sum --version 2>&1 | grep -v 'textutils 1.12' ) >/dev/null; then
+ md5sum -c << SHAR_EOF >/dev/null 2>&1 \
+ || $echo 'logo:' 'MD5 check failed'
+0556ef38d43151f5924a67a3f639950f logo
+SHAR_EOF
+ else
+ shar_count="`LC_ALL= LC_CTYPE= LANG= wc -c < 'logo'`"
+ test 2358 -eq "$shar_count" ||
+ $echo 'logo:' 'original size' '2358,' 'current size' "$shar_count!"
+ fi
+fi
+rm -fr _sh01050
+exit 0
Index: 1.0-5/liboop.org/style.css
===================================================================
--- 1.0-5/liboop.org/style.css (nonexistent)
+++ 1.0-5/liboop.org/style.css (revision 27)
@@ -0,0 +1,13 @@
+BODY { color: black; background-color: white; background-image: none; }
+H1 { color: #0000FF; }
+H2 { color: #0000BF; }
+H3 { color: #00009F; }
+H4 { color: #00009F; }
+# A:link { color: #004080; }
+# A:visited { color: #804080; }
+.heading { color: #00009F; font-weight: bold; }
+.divider { margin-top: 6pt; font-weight: bold; }
+.items { margin-left: 10pt; }
+
+TH { background: lightgrey; font-weight: bold; text-align: center; }
+TD { vertical-align: top; }
Index: 1.0-5/configure.ac
===================================================================
--- 1.0-5/configure.ac (nonexistent)
+++ 1.0-5/configure.ac (revision 27)
@@ -0,0 +1,127 @@
+dnl Process this file with autoconf to produce a configure script.
+AC_INIT(INSTALL)
+AM_INIT_AUTOMAKE(liboop,1.0)
+AC_CANONICAL_HOST
+AM_PROG_LIBTOOL
+AC_PROG_CC
+AC_PROG_INSTALL
+PROG_LDCONFIG=:
+
+AC_ARG_WITH(adns, AC_HELP_STRING(--without-adns,disable ADNS adapter))
+AC_ARG_WITH(readline, AC_HELP_STRING(--without-readline,disable readline adapter))
+AC_ARG_WITH(glib, AC_HELP_STRING(--without-glib,disable GLib adapter))
+AC_ARG_WITH(tcl, AC_HELP_STRING(--without-tcl,disable Tcl/Tk adapter))
+AC_ARG_WITH(libwww, AC_HELP_STRING(--with-libwww,build libwww adapter))
+
+dnl System type checks.
+case "$host" in
+ *-linux-*|*-k*bsd*|*-gnu*)
+ AC_PATH_PROG(PROG_LDCONFIG, ldconfig, :, $PATH:/usr/sbin:/sbin)
+ no_wacky_libs=yes
+ ;;
+ *-sgi-irix6*)
+ if test -n "$LPATH" ; then
+ LDFLAGS="-Wl,-rpath,$LPATH $LDFLAGS"
+ fi
+ no_wacky_libs=yes
+ ;;
+esac
+
+AC_CHECK_HEADERS(poll.h sys/select.h sys/socket.h string.h strings.h)
+
+if test xno != x$with_adns; then
+ AC_CHECK_LIB(adns,adns_init,[
+ LIBOOP_LIBS="liboop-adns.la $LIBOOP_LIBS"
+ ADNS_LIBS="-ladns"
+ AC_DEFINE(HAVE_ADNS)
+ ])
+fi
+
+if test xno != x$with_readline; then
+ AC_CHECK_LIB(readline,rl_callback_handler_install,[
+ AC_CHECK_HEADER(readline/readline.h,[
+ LIBOOP_LIBS="liboop-rl.la $LIBOOP_LIBS"
+ READLINE_LIBS="-lreadline"
+ AC_DEFINE(HAVE_READLINE)
+ ])])
+fi
+
+if test xno != x$with_glib; then
+ save_libs="$LIBS"
+ save_cppflags="$CPPFLAGS"
+ AC_CHECK_PROG(PROG_GLIB_CONFIG,glib-config,glib-config)
+ if test -n "$PROG_GLIB_CONFIG" ; then
+ GLIB_INCLUDES="`glib-config --cflags`"
+ GLIB_LIBS="`glib-config --libs`"
+ LIBS="$save_libs $GLIB_LIBS"
+ CPPFLAGS="$save_cppflags $GLIB_INCLUDES"
+ AC_CHECK_FUNC(g_main_set_poll_func,[
+ AC_CHECK_HEADER(glib.h,[
+ LIBOOP_LIBS="liboop-glib.la $LIBOOP_LIBS"
+ AC_DEFINE(HAVE_GLIB)
+ ])])
+ fi
+ LIBS="$save_libs"
+ CPPFLAGS="$save_cppflags"
+
+ PKG_CHECK_MODULES(GLIB2,glib-2.0 >= 2.0,[
+ LIBOOP_LIBS="liboop-glib2.la $LIBOOP_LIBS"
+ AC_DEFINE(HAVE_GLIB)
+ ],[:])
+fi
+
+if test xno != x$with_tcl; then
+ for version in 8.4 8.3 8.2 8.1 8.0 ; do
+ CPPFLAGS="$save_cppflags -I/usr/include/tcl$version"
+ AC_CHECK_LIB(tcl$version,Tcl_Main,[
+ AC_CHECK_HEADER(tcl.h,[
+ LIBOOP_LIBS="liboop-tcl.la $LIBOOP_LIBS"
+ AC_DEFINE(HAVE_TCL)
+ TCL_INCLUDES="-I/usr/include/tcl$version"
+ TCL_LIBS="-ltcl$version"
+ break
+ ])])
+ done
+ CPPFLAGS="$save_cppflags"
+fi
+
+if test xyes = x$with_libwww; then
+ save_libs="$LIBS"
+ save_cppflags="$CPPFLAGS"
+ AC_CHECK_PROG(PROG_WWW_CONFIG,libwww-config,libwww-config)
+ if test -n "$PROG_WWW_CONFIG" ; then
+ WWW_INCLUDES="`libwww-config --cflags`"
+ WWW_LIBS="`libwww-config --libs`"
+ LIBS="$save_libs $WWW_LIBS"
+ CPPFLAGS="$save_cppflags $WWW_INCLUDES"
+ AC_CHECK_FUNC(HTEvent_setRegisterCallback,[
+ LIBOOP_LIBS="liboop-www.la $LIBOOP_LIBS"
+ AC_DEFINE(HAVE_WWW)
+ ])
+ fi
+ LIBS="$save_libs"
+ CPPFLAGS="$save_cppflags"
+fi
+
+if test -z "$no_wacky_libs" ; then
+ AC_CHECK_LIB(resolv,res_query)
+ AC_SEARCH_LIBS(gethostbyname,nsl)
+ AC_SEARCH_LIBS(socket,socket)
+fi
+
+test yes = "$GCC" &&
+CFLAGS="-Wall -Wno-comment -Wmissing-prototypes -Wstrict-prototypes -Wpointer-arith -Wwrite-strings $CFLAGS"' $(EXTRA_CFLAGS)'
+
+AC_SUBST(PROG_LDCONFIG)
+AC_SUBST(GLIB_INCLUDES)
+AC_SUBST(GLIB_LIBS)
+AC_SUBST(GLIB2_CFLAGS)
+AC_SUBST(GLIB2_LIBS)
+AC_SUBST(TCL_INCLUDES)
+AC_SUBST(TCL_LIBS)
+AC_SUBST(ADNS_LIBS)
+AC_SUBST(WWW_INCLUDES)
+AC_SUBST(WWW_LIBS)
+AC_SUBST(READLINE_LIBS)
+AC_SUBST(LIBOOP_LIBS)
+AC_OUTPUT([Makefile liboop.pc liboop-glib2.pc])