commit b1c4c9d7c204bc5c3a6f20be65582e153b8d31c5
parent 34ead97e601c33575186a62c2eb41be9aee8190d
Author: Gerrit Pape <pape@smarden.org>
Date: Thu, 24 Apr 2003 11:26:38 +0000
html.
Diffstat:
12 files changed, 144 insertions(+), 109 deletions(-)
diff --git a/doc/runit-init.8.html b/doc/runit-init.8.html
@@ -39,12 +39,12 @@ execute by owner permission of the files <I>/etc/runit/reboot</I> and <I>/etc/ru
<B>runit-init</B>
returns 111 on error, 0 in all other cases.
<H2><A NAME="sect4">See Also</A></H2>
-<I>runit(8)</I>, <I>svwaitdown(8)</I>,
-<I>svwaitup(8)</I>, <I>utmpset(8)</I> <P>
+<I>runit(8)</I>, <I>runsv(8)</I>,
+<I>runsvctrl(8)</I>, <I>runsvstat(8)</I>, <I>runsvdir(8)</I>, <I>runsvchdir(8)</I>, <I>svlogd(8)</I>, <I>utmpset(8)</I>
+<P>
<I>http://smarden.org/runit/</I>
<H2><A NAME="sect5">Author</A></H2>
-Gerrit Pape <pape@smarden.org>
-<P>
+Gerrit Pape <pape@smarden.org> <P>
<HR><P>
<A NAME="toc"><B>Table of Contents</B></A><P>
diff --git a/doc/runit.8.html b/doc/runit.8.html
@@ -49,11 +49,12 @@ if <B>runit</B> receives an INT signal, a
ctrl-alt-del keyboard request is triggered.
<H2><A NAME="sect8">See Also</A></H2>
<I>runit-init(8)</I>, <I>runsvdir(8)</I>,
-<I>runsv(8)</I>, <I>svwaitdown(8)</I>, <I>svwaitup(8)</I>, <I>utmpset(8)</I> <P>
-<I>http://smarden.org/runit/</I>
-
+<I>runsvchdir(8)</I>, <I>runsv(8)</I>, <I>runsvctrl(8)</I>, <I>runsvstat(8)</I>, <I>svwaitdown(8)</I>, <I>svwaitup(8)</I>,
+<I>svlogd(8)</I>, <I>utmpset(8)</I> <P>
+<I>http://smarden.org/runit/</I>
<H2><A NAME="sect9">Author</A></H2>
-Gerrit Pape <pape@smarden.org> <P>
+Gerrit Pape <pape@smarden.org>
+<P>
<HR><P>
<A NAME="toc"><B>Table of Contents</B></A><P>
diff --git a/doc/runsv.8.html b/doc/runsv.8.html
@@ -116,7 +116,8 @@ if another <B>runsv</B> is running in <I>service</I>. <P>
<B>runsv</B> exits 0 if it was told to
exit.
<H2><A NAME="sect6">See Also</A></H2>
-<I>runit(8)</I>, <I>runit-init(8)</I>, <I>runsvdir(8)</I>, <I>svc(8)</I>, <I>supervise(8)</I>
+<I>runsvctrl(8)</I>, <I>runsvstat(8)</I>, <I>runit(8)</I>, <I>runit-init(8)</I>, <I>runsvdir(8)</I>,
+<I>runsvchdir(8)</I>, <I>svlogd(8)</I>, <I>svwaitdown(8)</I>, <I>svwaitup(8)</I>, <I>svc(8)</I>, <I>supervise(8)</I>
<P>
<I>http://smarden.org/runit/</I><BR>
<I>http://cr.yp.to/daemontools.html</I><BR>
diff --git a/doc/runsvchdir.8.html b/doc/runsvchdir.8.html
@@ -31,11 +31,12 @@ error. <B>runsvchdir</B> exits 0 on success.
/etc/runit/runsvdir/current.new<BR>
<H2><A NAME="sect5">See Also</A></H2>
-<I>runsvdir(8)</I>, <I>runsv(8)</I>, <I>runit(8)</I>, <I>runit-init(8)</I> <P>
-<I>http://smarden.org/runit/</I>
-
+<I>runsvdir(8)</I>, <I>runsv(8)</I>, <I>runsvctrl(8)</I>, <I>runsvstat(8)</I>, <I>runit(8)</I>, <I>runit-init(8)</I>,
+<I>svwaitdown(8)</I>, <I>svwaitup(8)</I> <P>
+<I>http://smarden.org/runit/</I>
<H2><A NAME="sect6">Author</A></H2>
-Gerrit Pape <pape@smarden.org> <P>
+Gerrit Pape <pape@smarden.org>
+<P>
<HR><P>
<A NAME="toc"><B>Table of Contents</B></A><P>
diff --git a/doc/runsvctrl.8.html b/doc/runsvctrl.8.html
@@ -90,8 +90,9 @@ process), <B>runsvctrl</B> increases the exit code by one and exits non zero. Th
maximum is 100. <P>
<B>runsvctrl</B> exits 111 on error.
<H2><A NAME="sect5">See Also</A></H2>
-<I>runsvstat(8)</I>, <I>runit(8)</I>,
-<I>runit-init(8)</I>, <I>runsvdir(8)</I>, <I>runsv(8)</I>, <I>svwaitdown(8)</I>, <I>svwaitup(8)</I> <P>
+<I>runsvstat(8)</I>, <I>runsv(8)</I>,
+<I>runit(8)</I>, <I>runit-init(8)</I>, <I>runsvdir(8)</I>, <I>runsvchdir(8)</I>, <I>svlogd(8)</I>, <I>svwaitdown(8)</I>,
+<I>svwaitup(8)</I> <P>
<I>http://smarden.org/runit/</I><BR>
<H2><A NAME="sect6">Author</A></H2>
diff --git a/doc/runsvdir.8.html b/doc/runsvdir.8.html
@@ -36,10 +36,13 @@ Normally <B>runsvdir</B>
is started by <B><I>runit</B>(8)</I> in stage 2.
<H2><A NAME="sect3">Signals</A></H2>
If <B>runsvdir</B> receives a TERM signal,
-it sends a TERM signal to each <B><I>runsv</B>(8)</I> process it is monitoring and then
-exits with 0.
+it exits with 0 immediately. <P>
+If <B>runsvdir</B> receives a HUP signal, it sends
+a TERM signal to each <B><I>runsv</B>(8)</I> process it is monitoring and then exits
+with 111.
<H2><A NAME="sect4">See Also</A></H2>
-<I>runit(8)</I>, <I>runit-init(8)</I>, <I>runsv(8)</I>, <I>readproctitle(8)</I>,
+<I>runsvchdir(8)</I>, <I>runsv(8)</I>, <I>runsvctrl(8)</I>, <I>runsvstat(8)</I>, <I>runit(8)</I>,
+<I>runit-init(8)</I>, <I>svlogd(8)</I>, <I>svwaitdown(8)</I>, <I>svwaitup(8)</I>, <I>readproctitle(8)</I>,
<I>svscan(8)</I> <P>
<I>http://smarden.org/runit/</I><BR>
<I>http://cr.yp.to/daemontools.html</I><BR>
diff --git a/doc/runsvstat.8.html b/doc/runsvstat.8.html
@@ -40,8 +40,9 @@ process), <B>runsvstat</B> increases the exit code by one and exits non zero. Th
maximum is 100. <P>
<B>runsvstat</B> exits 111 on error.
<H2><A NAME="sect5">See Also</A></H2>
-<I>runsvctrl(8)</I>, <I>runit(8)</I>,
-<I>runit-init(8)</I>, <I>runsvdir(8)</I>, <I>runsv(8)</I>, <I>svwaitdown(8)</I>, <I>svwaitup(8)</I> <P>
+<I>runsvctrl(8)</I>, <I>runsv(8)</I>,
+<I>runsvdir(8)</I>, <I>runsvchdir(8)</I>, <I>runit(8)</I>, <I>runit-init(8)</I>, <I>svlogd(8)</I>, <I>svwaitdown(8)</I>,
+<I>svwaitup(8)</I> <P>
<I>http://smarden.org/runit/</I><BR>
<H2><A NAME="sect6">Author</A></H2>
diff --git a/doc/svlogd.8.html b/doc/svlogd.8.html
@@ -70,87 +70,98 @@ long, or starts with a ``#'', it is ignored. A line of the form
<DT>s<I>size</I> </DT>
<DD>sets the
maximum file size of <I>current</I> when <B>svlogd</B> should rotate the current log
-file to <I>size</I> bytes. Default is 1000000. </DD>
+file to <I>size</I> bytes. Default is 1000000. If <I>size</I> is zero, <B>svlogd</B> doesn't rotate
+log files. You should set <I>size</I> to at least (2 * <I>len</I>). </DD>
<DT>n<I>num</I> </DT>
-<DD>sets the maximum number of old
-log files <B>svlogd</B> should maintain to <I>num</I>. If <B>svlogd</B> sees more that <I>num</I> old
-log files in <I>log</I> after log file rotation, it deletes the oldest one. Default
-is 10. </DD>
+<DD>sets the maximum
+number of old log files <B>svlogd</B> should maintain to <I>num</I>. If <B>svlogd</B> sees more
+that <I>num</I> old log files in <I>log</I> after log file rotation, it deletes the oldest
+one. Default is 10. </DD>
<DT>!<I>processor</I> </DT>
-<DD>tells <B>svlogd</B> to feed each recent log file through <I>processor</I>
-(see above) on log file rotation. By default log files are not processed.
-</DD>
+<DD>tells <B>svlogd</B> to feed each recent log file
+through <I>processor</I> (see above) on log file rotation. By default log files
+are not processed. </DD>
</DL>
<P>
-If a line starts with a <I>-</I>, <I>+</I>, <I>e</I>, or <I>E</I>, <B>svlogd</B> matches the first <I>len</I> characters
-of each log message against <I>pattern</I> and acts accordingly:
+If a line starts with a <I>-</I>, <I>+</I>, <I>e</I>, or <I>E</I>, <B>svlogd</B> matches
+the first <I>len</I> characters of each log message against <I>pattern</I> and acts accordingly:
+
<DL>
<DT>-<I>pattern</I> </DT>
-<DD>the log
-message is deselected. </DD>
+<DD>the log message is deselected. </DD>
<DT>+<I>pattern</I> </DT>
-<DD>the log message is selected </DD>
+<DD>the log message is selected
+</DD>
<DT>e<I>pattern</I> </DT>
-<DD>log
-messages matching <I>pattern</I> are printed to standard error. </DD>
+<DD>log messages matching <I>pattern</I> are printed to standard error. </DD>
-<DT>E<I>pattern</I> </DT>
-<DD>log messages
-not matching <I>pattern</I> are printed to standard error. </DD>
+<DT>E<I>pattern</I>
+</DT>
+<DD>log messages not matching <I>pattern</I> are printed to standard error. </DD>
</DL>
<P>
-Initially each line
-is selected. Deselected log messages are discarded from <I>log</I>.
-<H2><A NAME="sect7">Options</A></H2>
+Initially
+each line is selected. Deselected log messages are discarded from <I>log</I>.
+<H2><A NAME="sect7">Pattern
+Matching</A></H2>
+<B>svlogd</B> matches a log message against the string <I>pattern</I> as follows:
+<P>
+<I>pattern</I> is applied to the log message one character by one, starting with
+the first. A character not a star (``*'') and not a plus (``+'') matches itself.
+A plus matches the next character in <I>pattern</I> in the log message one or
+more times. A star before the end of <I>pattern</I> matches any string in the log
+message that does not include the next character in <I>pattern</I>. A star at the
+end of <I>pattern</I> matches any string.
+<H2><A NAME="sect8">Options</A></H2>
<DL>
<DT><B>-t</B> </DT>
-<DD>timestamp.
-Prefix each selected line with a precise timestamp (see <B><I>tai64n</B>(8)</I>) when
-writing to <I>log</I> or to standard error. </DD>
+<DD>timestamp. Prefix each selected
+line with a precise timestamp (see <B><I>tai64n</B>(8)</I>) when writing to <I>log</I> or to
+standard error. </DD>
<DT><B>-r <I>c</B> </I></DT>
-<DD>replace. <I>c</I> must be a single character.
-Replace non-printable characters in log messages with <I>c</I>. Character are replaced
-before pattern matching is applied. </DD>
+<DD>replace. <I>c</I> must be a single character. Replace non-printable
+characters in log messages with <I>c</I>. Characters are replaced before pattern
+matching is applied. </DD>
<DT><B>-R <I>abc</B> </I></DT>
-<DD>replace characters. Additionally
-to non-printable characters, replace all characters found in <I>abc</I> with <I>c</I>
-(default ``_''). </DD>
+<DD>replace charset. Additionally to non-printable
+characters, replace all characters found in <I>abc</I> with <I>c</I> (default ``_''). </DD>
-<DT><B>-l <I>len</B> </I></DT>
-<DD>line length. Pattern matching applies to the first <I>len</I>
-characters of a log message only. Default is 1000. </DD>
+<DT><B>-l <I>len</B>
+</I></DT>
+<DD>line length. Pattern matching applies to the first <I>len</I> characters of a log
+message only. Default is 1000. </DD>
<DT><B>-b <I>buflen</B> </I></DT>
-<DD>buffer size. Set
-the size of the buffer <B>svlogd</B> uses when reading from standard input and
-writing to <I>logs</I> to <I>buflen</I>. Default is 1024. <I>buflen</I> must be greater than <I>len</I>.
-</DD>
+<DD>buffer size. Set the size of the buffer
+<B>svlogd</B> uses when reading from standard input and writing to <I>logs</I> to <I>buflen</I>.
+Default is 1024. <I>buflen</I> must be greater than <I>len</I>. </DD>
</DL>
-<H2><A NAME="sect8">Signals</A></H2>
-If <B>svlogd</B> is sent a HUP signal, it closes and reopens all <I>logs</I>,
-and updates their configuration according to <I>log/config</I>. <P>
+<H2><A NAME="sect9">Signals</A></H2>
If <B>svlogd</B> is sent
-a TERM signal, or if it sees end-of-file on standard input, it closes standard
-input, waits for all <I>processor</I> subprocesses to finish if any, and exits
-0 as soon as possible. <P>
-If <B>svlogd</B> is sent an ALRM signal, it tries for all
-<I>logs</I> to rotate the current log file, if it is not empty.
-<H2><A NAME="sect9">See Also</A></H2>
-<I>runsvstat(8)</I>,
-<I>runit(8)</I>, <I>runit-init(8)</I>, <I>runsv(8)</I>, <I>runsvstat(8)</I>, <I>runsvctrl(8)</I>, <I>runsvdir(8)</I>,
-<I>runsvchdir(8)</I>, <I>svwaitdown(8)</I>, <I>svwaitup(8)</I> <P>
+a HUP signal, it closes and reopens all <I>logs</I>, and updates their configuration
+according to <I>log/config</I>. <P>
+If <B>svlogd</B> is sent a TERM signal, or if it sees
+end-of-file on standard input, it stops reading standard input, processes
+the data in the buffer, waits for all <I>processor</I> subprocesses to finish
+if any, and exits 0 as soon as possible. <P>
+If <B>svlogd</B> is sent an ALRM signal,
+it forces log file rotation for all <I>logs</I> with a non empty <I>current</I> log file.
+
+<H2><A NAME="sect10">See Also</A></H2>
+<I>runsv(8)</I>, <I>runsvstat(8)</I>, <I>runsvctrl(8)</I>, <I>runsvdir(8)</I>, <I>runsvchdir(8)</I>,
+<I>runit(8)</I>, <I>runit-init(8)</I>, <I>multilog(8)</I> <P>
<I>http://smarden.org/runit/</I>
-<H2><A NAME="sect10">Author</A></H2>
+<H2><A NAME="sect11">Author</A></H2>
Gerrit
Pape <pape@smarden.org> <P>
@@ -166,9 +177,10 @@ Pape <pape@smarden.org> <P>
<LI><A NAME="toc5" HREF="#sect5">Processor</A></LI>
<LI><A NAME="toc6" HREF="#sect6">Config</A></LI>
</UL>
-<LI><A NAME="toc7" HREF="#sect7">Options</A></LI>
-<LI><A NAME="toc8" HREF="#sect8">Signals</A></LI>
-<LI><A NAME="toc9" HREF="#sect9">See Also</A></LI>
-<LI><A NAME="toc10" HREF="#sect10">Author</A></LI>
+<LI><A NAME="toc7" HREF="#sect7">Pattern Matching</A></LI>
+<LI><A NAME="toc8" HREF="#sect8">Options</A></LI>
+<LI><A NAME="toc9" HREF="#sect9">Signals</A></LI>
+<LI><A NAME="toc10" HREF="#sect10">See Also</A></LI>
+<LI><A NAME="toc11" HREF="#sect11">Author</A></LI>
</UL>
</BODY></HTML>
diff --git a/doc/svwaitdown.8.html b/doc/svwaitdown.8.html
@@ -14,52 +14,55 @@ svwaitdown - waits for services controlled by <I>supervise(8)</I> to be down
<H2><A NAME="sect1">Synopsis</A></H2>
<B>svwaitdown</B> [ <B>-v</B> ] [ <B>-k</B> ] [ <B>-t</B> <I>sec</I> ] <I>services</I>
<H2><A NAME="sect2">Description</A></H2>
-<I>services</I> consist
+<I>services</I> consists
of one or more arguments. Each <I>service</I> directory must start with a slash.
<P>
-<B>svwaitdown</B> checks each <I>service</I> given at the command line for being down.
-The <I>services</I> given at the command line must be controlled by <B><I>supervise</B>(8)</I>.
-<P>
-<B>svwaitdown</B> blocks, limited by a <I>timeout</I>, until all <I>services</I> are down or
-reports errors.
+<B>svwaitdown</B> sends each <I>service</I> given at the command line the ``down'' command
+if not yet done, and waits for it to become down. The <I>services</I> given at
+the command line must be controlled by <B><I>supervise</B>(8)</I>. <P>
+<B>svwaitdown</B> blocks,
+limited by a <I>timeout</I>, until all <I>services</I> are down or reports errors.
<H2><A NAME="sect3">Options</A></H2>
<DL>
-<DT><B>-v</B> </DT>
+<DT><B>-v</B>
+</DT>
<DD>verbose. Print verbose messages to stderr. </DD>
-<DT><B>-t <I>sec</B>
-</I></DT>
-<DD>Set the timeout for waiting for <I>services</I> to become down to <I>sec</I> seconds.
-<I>sec</I> must be between 2 and 6000. Default is 600 (10 minutes). </DD>
+<DT><B>-t <I>sec</B> </I></DT>
+<DD>Set the timeout for waiting
+for <I>services</I> to become down to <I>sec</I> seconds. <I>sec</I> must be between 2 and 6000.
+Default is 600 (10 minutes). </DD>
<DT><B>-k</B> </DT>
-<DD>Kill. If the
-timeout is reached before all <I>services</I> are down, tell the <B><I>supervise</B>(8)</I>
-processes to send the <I>services</I> a KILL signal. </DD>
+<DD>Kill. If the timeout is reached before all
+<I>services</I> are down, tell the <B><I>supervise</B>(8)</I> processes to send the <I>services</I>
+a KILL signal. </DD>
<DT><B>-x</B> </DT>
-<DD>Exit. Wait for the corresponding
-<B><I>runsv</B>(8)</I> processes to exit instead for the <I>services</I> to be down. This option
-should only be used by <B><I>runit</B>(8)</I> in stage 3 when <B><I>runsvdir</B>(8)</I> is already
-stopped. <P>
+<DD>Exit. Send each <I>service</I> the ``exit'' command additionally to
+the ``down'' command, and wait for the corresponding <B><I>runsv</B>(8)</I> processes to
+exit instead for the <I>services</I> to be down. This option should only be used
+by <B><I>runit</B>(8)</I> in stage 3 when <B><I>runsvdir</B>(8)</I> is already stopped. <P>
</DD>
</DL>
<H2><A NAME="sect4">Exit Codes</A></H2>
-<B>svwaitdown</B> returns 0 as soon as all <I>services</I> are down.
-<P>
-If a <I>service</I> is usually controlled by <B><I>supervise</B>(8)</I>, but no <B><I>supervise</B>(8)</I>
-process is currently running, <B>svwaitdown</B> treats this <I>service</I> as if it would
-be down. <P>
-For each <I>service</I> that causes an error while checking, <B>svwaitdown</B>
-increases the exit code by one and exits non zero. The maximum is 100. <P>
<B>svwaitdown</B>
-returns 111 if the timeout <I>sec</I> was reached.
+returns 0 as soon as all <I>services</I> are down. <P>
+If a <I>service</I> is usually controlled
+by <B><I>supervise</B>(8)</I>, but no <B><I>supervise</B>(8)</I> process is currently running, <B>svwaitdown</B>
+treats this <I>service</I> as if it would be down. <P>
+For each <I>service</I> that causes
+an error while checking, <B>svwaitdown</B> increases the exit code by one and
+exits non zero. The maximum is 100. <P>
+<B>svwaitdown</B> returns 111 if the timeout
+<I>sec</I> was reached.
<H2><A NAME="sect5">See Also</A></H2>
-<I>svwaitup(8)</I>, <I>runit(8)</I>,
-<I>runit-init(8)</I>, <I>runsvdir(8)</I>, <I>runsv(8)</I>, <I>supervise(8)</I>, <I>svscan(8)</I> <P>
+<I>svwaitdown(8)</I>, <I>runsv(8)</I>, <I>runsvctrl(8)</I>, <I>runsvstat(8)</I>,
+<I>runsvdir(8)</I>, <I>runsvchdir(8)</I>, <I>runit(8)</I>, <I>runit-init(8)</I>, <I>supervise(8)</I>, <I>svscan(8)</I>
+<P>
<I>http://smarden.org/runit/</I><BR>
<I>http://cr.yp.to/daemontools.html</I><BR>
diff --git a/doc/svwaitup.8.html b/doc/svwaitup.8.html
@@ -50,8 +50,8 @@ and exits non zero. The maximum is 100. <P>
<B>svwaitup</B> returns 111 on error.
<H2><A NAME="sect5">See
Also</A></H2>
-<I>svwaitdown(8)</I>, <I>runit(8)</I>, <I>runit-init(8)</I>, <I>runsvdir(8)</I>, <I>runsv(8)</I>, <I>supervise(8)</I>,
-<I>svscan(8)</I> <P>
+<I>svwaitdown(8)</I>, <I>runsv(8)</I>, <I>runsvctrl(8)</I>, <I>runsvstat(8)</I>, <I>runsvdir(8)</I>, <I>runsvchdir(8)</I>,
+<I>runit(8)</I>, <I>runit-init(8)</I>, <I>supervise(8)</I>, <I>svscan(8)</I> <P>
<I>http://smarden.org/runit/</I><BR>
<I>http://cr.yp.to/daemontools.html</I><BR>
diff --git a/doc/upgrade.html b/doc/upgrade.html
@@ -10,6 +10,18 @@
<h1>runit - upgrading from previous versions</h1>
<hr>
+<h3>0.8.0 or 0.8.1 to 0.9.0</h3>
+The <a href="svlogd.8.html">svlogd</a> program is new.
+<i>svlogd</i> is a service logging daemon designed to be run from
+<tt>log/run</tt> files, similar to
+<a href="http://cr.yp.to/daemontools/multilog.html">multilog</a>.
+The <i>runsvdir</i> program no longer propagates the TERM signal to the
+<i>runsv</i> processes if it receives one, but exits immediately, and
+<i>runsvdir</i> now supports handling of the HANGUP signal, see the
+<a href="runsvdir.8.html">man page</a> for details.
+<a href="svwaitdown.8.html">svwaitdown</a> has changed to additionally send
+the <tt>down</tt> command to the <i>services</i> it works on, if not yet
+done.
<h3>0.7.x to 0.8.0 or 0.8.1</h3>
With this version <i>runit</i>'s handling of its magic files has changed
slightly for better support of read-only root filesystems.
diff --git a/doc/utmpset.8.html b/doc/utmpset.8.html
@@ -40,12 +40,12 @@ run scripts, e.g.: <P>
<B>utmpset</B> returns 111 on error, 1 on wrong
usage, 0 in all other cases.
<H2><A NAME="sect5">See Also</A></H2>
-<I>runit(8)</I>, <I>runit-init(8)</I>, <I>svwaitdown(8)</I>,
-<I>svwaitup(8)</I> <P>
-<I>http://smarden.org/runit/</I>
+<I>runsv(8)</I>, <I>runsvctrl(8)</I>, <I>runsvstat(8)</I>,
+<I>runsvdir(8)</I>, <I>runsvchdir(8)</I>, <I>runit(8)</I>, <I>runit-init(8)</I>, <I>getty(8)</I> <P>
+<I>http://smarden.org/runit/</I>
+
<H2><A NAME="sect6">Author</A></H2>
-Gerrit Pape <pape@smarden.org>
-<P>
+Gerrit Pape <pape@smarden.org> <P>
<HR><P>
<A NAME="toc"><B>Table of Contents</B></A><P>