summaryrefslogtreecommitdiff
path: root/doc
diff options
context:
space:
mode:
Diffstat (limited to 'doc')
-rw-r--r--doc/index.html162
-rw-r--r--doc/s6-basename.html50
-rw-r--r--doc/s6-cat.html51
-rw-r--r--doc/s6-chmod.html45
-rw-r--r--doc/s6-chown.html52
-rw-r--r--doc/s6-clock.html54
-rw-r--r--doc/s6-cut.html44
-rw-r--r--doc/s6-dirname.html50
-rw-r--r--doc/s6-echo.html51
-rw-r--r--doc/s6-env.html45
-rw-r--r--doc/s6-expr.html50
-rw-r--r--doc/s6-false.html39
-rw-r--r--doc/s6-format-filter.html42
-rw-r--r--doc/s6-grep.html67
-rw-r--r--doc/s6-head.html55
-rw-r--r--doc/s6-linkname.html45
-rw-r--r--doc/s6-ln.html44
-rw-r--r--doc/s6-ls.html57
-rw-r--r--doc/s6-maximumtime.html53
-rw-r--r--doc/s6-mkdir.html50
-rw-r--r--doc/s6-mkfifo.html44
-rw-r--r--doc/s6-nice.html53
-rw-r--r--doc/s6-nuke.html56
-rw-r--r--doc/s6-pause.html39
-rw-r--r--doc/s6-printenv.html46
-rw-r--r--doc/s6-quote-filter.html56
-rw-r--r--doc/s6-quote.html57
-rw-r--r--doc/s6-rename.html35
-rw-r--r--doc/s6-rmrf.html35
-rw-r--r--doc/s6-sleep.html51
-rw-r--r--doc/s6-sort.html59
-rw-r--r--doc/s6-sync.html32
-rw-r--r--doc/s6-tail.html46
-rw-r--r--doc/s6-test.html53
-rw-r--r--doc/s6-touch.html45
-rw-r--r--doc/s6-true.html39
-rw-r--r--doc/s6-uniquename.html45
-rw-r--r--doc/s6-unquote-filter.html69
-rw-r--r--doc/s6-unquote.html58
-rw-r--r--doc/s6-update-symlinks.html83
-rw-r--r--doc/upgrade.html32
41 files changed, 2139 insertions, 0 deletions
diff --git a/doc/index.html b/doc/index.html
new file mode 100644
index 0000000..1775002
--- /dev/null
+++ b/doc/index.html
@@ -0,0 +1,162 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <title>s6-portable-utils - skarnet.org's tiny general Unix utilities</title>
+ <meta name="Description" content="s6-portable-utils - skarnet.org's tiny general Unix utilities" />
+ <meta name="Keywords" content="s6 unix administration root skarnet portable utilities tiny coreutils" />
+ <!-- <link rel="stylesheet" type="text/css" href="http://skarnet.org/default.css" /> -->
+ </head>
+<body>
+
+<p>
+<a href="http://skarnet.org/software/">Software</a><br />
+<a href="http://skarnet.org/">skarnet.org</a>
+</p>
+
+<h1> s6-portable-utils </h1>
+
+<ul>
+<li><a href="install.html">How to install s6-portable-utils</a></li>
+<li><a href="upgrade.html">Upgrading from previous versions of s6-portable-utils</a></li>
+</ul>
+
+<h2> What is it&nbsp;? </h2>
+
+<p>
+ s6-portable-utils is a set of tiny general Unix utilities, often
+performing well-known tasks such as <em>cut</em> and <em>grep</em>,
+but optimized for simplicity and small size. They were designed
+for embedded systems and other constrained environments, but they
+work everywhere.
+</p>
+
+<p>
+ Other set of small utilities are usually system-specific; for
+instance, the (otherwise excellent)
+<a href="http://busybox.net/">BusyBox</a> project only works on Linux.
+</p>
+
+<p>
+ Some of s6-portable-utils' programs are a conformant implementation
+of a POSIX utility as determined by the
+<a href="http://pubs.opengroup.org/onlinepubs/9699919799/nfindex.html">Single
+Unix Specification, version 4</a>; the relevant documentation pages mentions
+this.
+However, none of the s6-portable-utils programs supports internationalization.
+</p>
+
+<p>
+It is now an explicit non-goal of s6-portable-utils to duplicate the work of
+existing projects that aim to provide a lightweight implementation of
+standard commands.
+ No more rewriting of standard commands will occur in s6-portable-utils;
+the package is now used to host specific utilities such as
+<a href="s6-uniquename.html"><tt>s6-uniquename</tt></a>.
+</p>
+
+<hr />
+
+<h2> Installation </h2>
+
+<h3> Requirements </h3>
+
+<ul>
+ <li> A POSIX-compliant system with a standard C development environment </li>
+ <li> GNU make, version 3.81 or later </li>
+ <li> <a href="http://skarnet.org/software/skalibs/">skalibs</a> version
+2.0.0.0 or later </li>
+</ul>
+
+<h3> Licensing </h3>
+
+<p>
+ s6-portable-utils is free software. It is available under the
+<a href="http://opensource.org/licenses/ISC">ISC license</a>.
+</p>
+
+<h3> Download </h3>
+
+<ul>
+ <li> The current released version of s6-portable-utils is
+<a href="s6-portable-utils-2.0.0.0.tar.gz">2.0.0.0</a>. </li>
+ <li> Alternatively, you can checkout a copy of the s6-portable-utils git repository:
+<pre> git clone git://git.skarnet.org/s6-portable-utils </pre> </li>
+</ul>
+
+<h3> Compilation </h3>
+
+<ul>
+ <li> See the enclosed INSTALL file for installation details. </li>
+</ul>
+
+<h3> Upgrade notes </h3>
+
+<ul>
+ <li> <a href="upgrade.html">This page</a> lists the differences to be aware of between
+the previous versions of s6-portable-utils and the current one. </li>
+</ul>
+
+<hr />
+
+<h2> Reference </h2>
+
+<h3> Commands </h3>
+
+<p>
+ All these commands exit 111 if they encounter a temporary error, and
+100 if they encounter a permanent error - such as a misuse.
+</p>
+
+<ul>
+ <li> The <a href="s6-basename.html"><tt>s6-basename</tt></a> program </li>
+ <li> The <a href="s6-cat.html"><tt>s6-cat</tt></a> program </li>
+ <li> The <a href="s6-chmod.html"><tt>s6-chmod</tt></a> program </li>
+ <li> The <a href="s6-chown.html"><tt>s6-chown</tt></a> program </li>
+ <li> The <a href="s6-clock.html"><tt>s6-clock</tt></a> program </li>
+ <li> The <a href="s6-cut.html"><tt>s6-cut</tt></a> program </li>
+ <li> The <a href="s6-dirname.html"><tt>s6-dirname</tt></a> program </li>
+ <li> The <a href="s6-echo.html"><tt>s6-echo</tt></a> program </li>
+ <li> The <a href="s6-env.html"><tt>s6-env</tt></a> program </li>
+ <li> The <a href="s6-expr.html"><tt>s6-expr</tt></a> program </li>
+ <li> The <a href="s6-false.html"><tt>s6-false</tt></a> program </li>
+ <li> The <a href="s6-format-filter.html"><tt>s6-format-filter</tt></a> program </li>
+ <li> The <a href="s6-grep.html"><tt>s6-grep</tt></a> program </li>
+ <li> The <a href="s6-head.html"><tt>s6-head</tt></a> program </li>
+ <li> The <a href="s6-linkname.html"><tt>s6-linkname</tt></a> program </li>
+ <li> The <a href="s6-ln.html"><tt>s6-ln</tt></a> program </li>
+ <li> The <a href="s6-ls.html"><tt>s6-ls</tt></a> program </li>
+ <li> The <a href="s6-maximumtime.html"><tt>s6-maximumtime</tt></a> program </li>
+ <li> The <a href="s6-mkdir.html"><tt>s6-mkdir</tt></a> program </li>
+ <li> The <a href="s6-mkfifo.html"><tt>s6-mkfifo</tt></a> program </li>
+ <li> The <a href="s6-nice.html"><tt>s6-nice</tt></a> program </li>
+ <li> The <a href="s6-nuke.html"><tt>s6-nuke</tt></a> program </li>
+ <li> The <a href="s6-pause.html"><tt>s6-pause</tt></a> program </li>
+ <li> The <a href="s6-printenv.html"><tt>s6-printenv</tt></a> program </li>
+ <li> The <a href="s6-quote-filter.html"><tt>s6-quote-filter</tt></a> program </li>
+ <li> The <a href="s6-quote.html"><tt>s6-quote</tt></a> program </li>
+ <li> The <a href="s6-rename.html"><tt>s6-rename</tt></a> program </li>
+ <li> The <a href="s6-rmrf.html"><tt>s6-rmrf</tt></a> program </li>
+ <li> The <a href="s6-sleep.html"><tt>s6-sleep</tt></a> program </li>
+ <li> The <a href="s6-sort.html"><tt>s6-sort</tt></a> program </li>
+ <li> The <a href="s6-sync.html"><tt>s6-sync</tt></a> program </li>
+ <li> The <a href="s6-tail.html"><tt>s6-tail</tt></a> program </li>
+ <li> The <a href="s6-test.html"><tt>s6-test</tt></a> program </li>
+ <li> The <a href="s6-touch.html"><tt>s6-touch</tt></a> program </li>
+ <li> The <a href="s6-true.html"><tt>s6-true</tt></a> program </li>
+ <li> The <a href="s6-uniquename.html"><tt>s6-uniquename</tt></a> program </li>
+ <li> The <a href="s6-unquote-filter.html"><tt>s6-unquote-filter</tt></a> program </li>
+ <li> The <a href="s6-unquote.html"><tt>s6-unquote</tt></a> program </li>
+ <li> The <a href="s6-update-symlinks.html"><tt>s6-update-symlinks</tt></a> program </li>
+</ul>
+
+<h2> Related resources </h2>
+
+<ul>
+ <li> <tt>s6-portable-utils</tt> is discussed on the
+<a href="http://skarnet.org/lists.html#skaware">skaware</a> mailing-list. </li>
+ </li>
+</ul>
+
+</body>
+</html>
diff --git a/doc/s6-basename.html b/doc/s6-basename.html
new file mode 100644
index 0000000..b656599
--- /dev/null
+++ b/doc/s6-basename.html
@@ -0,0 +1,50 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <title>s6-portable-utils: the s6-basename program</title>
+ <meta name="Description" content="s6-portable-utils: the s6-basename program" />
+ <meta name="Keywords" content="s6-portable-utils command s6-basename basename" />
+ <!-- <link rel="stylesheet" type="text/css" href="http://skarnet.org/default.css" /> -->
+ </head>
+<body>
+
+<p>
+<a href="index.html">s6-portable-utils</a><br />
+<a href="http://skarnet.org/software/">Software</a><br />
+<a href="http://skarnet.org/">skarnet.org</a>
+</p>
+
+<h1> The <tt>s6-basename</tt> program </h1>
+
+<p>
+ s6-basename prints the basename of a pathname.
+</p>
+
+<h2> Interface </h2>
+
+<pre>
+ s6-basename [ -n ] <em>path</em> [ <em>suffix</em> ]
+</pre>
+
+<p>
+ s6-basename acts as the generic
+<a href="http://pubs.opengroup.org/onlinepubs/9699919799/utilities/basename.html">basename</a> utility.
+</p>
+
+<h2> Extra options </h2>
+
+<ul>
+ <li> <tt>-n</tt>&nbsp;: do not print a trailing newline after the output. </li>
+</ul>
+
+<h2> Posixness </h2>
+
+<p>
+ s6-basename <strong>is</strong> suitable as a Single Unix
+<a href="http://pubs.opengroup.org/onlinepubs/9699919799/utilities/basename.html">basename</a>
+program.
+</p>
+
+</body>
+</html>
diff --git a/doc/s6-cat.html b/doc/s6-cat.html
new file mode 100644
index 0000000..71610e8
--- /dev/null
+++ b/doc/s6-cat.html
@@ -0,0 +1,51 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <title>s6-portable-utils: the s6-cat program</title>
+ <meta name="Description" content="s6-portable-utils: the s6-cat program" />
+ <meta name="Keywords" content="s6-portable-utils command s6-cat cat" />
+ <!-- <link rel="stylesheet" type="text/css" href="http://skarnet.org/default.css" /> -->
+ </head>
+<body>
+
+<p>
+<a href="index.html">s6-portable-utils</a><br />
+<a href="http://skarnet.org/software/">Software</a><br />
+<a href="http://skarnet.org/">skarnet.org</a>
+</p>
+
+<h1> The <tt>s6-cat</tt> program </h1>
+
+<p>
+ s6-cat copies stdin to stdout.
+</p>
+
+<h2> Interface </h2>
+
+<pre>
+ s6-cat
+</pre>
+
+<p>
+ s6-cat transfers data from stdin to stdout, until it receives EOF or
+gets killed.
+</p>
+
+<h2> Notes </h2>
+
+<p>
+ On systems that support it (as of 2.0.0.0, only Linux 2.6.17 or later),
+s6-cat performs zero-copy transfer.
+</p>
+
+<h2> Posixness </h2>
+
+<p>
+ s6-cat <strong>is not</strong> suitable as a Single Unix
+<a href="http://pubs.opengroup.org/onlinepubs/9699919799/utilities/cat.html">cat</a>
+program.
+</p>
+
+</body>
+</html>
diff --git a/doc/s6-chmod.html b/doc/s6-chmod.html
new file mode 100644
index 0000000..165790c
--- /dev/null
+++ b/doc/s6-chmod.html
@@ -0,0 +1,45 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <title>s6-portable-utils: the s6-chmod program</title>
+ <meta name="Description" content="s6-portable-utils: the s6-chmod program" />
+ <meta name="Keywords" content="s6-portable-utils command s6-chmod chmod" />
+ <!-- <link rel="stylesheet" type="text/css" href="http://skarnet.org/default.css" /> -->
+ </head>
+<body>
+
+<p>
+<a href="index.html">s6-portable-utils</a><br />
+<a href="http://skarnet.org/software/">Software</a><br />
+<a href="http://skarnet.org/">skarnet.org</a>
+</p>
+
+<h1> The <tt>s6-chmod</tt> program </h1>
+
+<p>
+ s6-chmod changes the permissions of a file.
+</p>
+
+<h2> Interface </h2>
+
+<pre>
+ s6-chmod perms file
+</pre>
+
+<p>
+ s6-chmod changes <em>file</em>'s permissions to <em>perms</em>, which
+must be an absolute octal number such as 0755 for
+<tt>rwxr-xr-x</tt> or 2700 for <tt>rwx--S---</tt>.
+</p>
+
+<h2> Posixness </h2>
+
+<p>
+ s6-chmod <strong>is not</strong> suitable as a Single Unix
+<a href="http://pubs.opengroup.org/onlinepubs/9699919799/utilities/chmod.html">chmod</a>
+program.
+</p>
+
+</body>
+</html>
diff --git a/doc/s6-chown.html b/doc/s6-chown.html
new file mode 100644
index 0000000..0cbbe57
--- /dev/null
+++ b/doc/s6-chown.html
@@ -0,0 +1,52 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <title>s6-portable-utils: the s6-chown program</title>
+ <meta name="Description" content="s6-portable-utils: the s6-chown program" />
+ <meta name="Keywords" content="s6-portable-utils command s6-chown chown" />
+ <!-- <link rel="stylesheet" type="text/css" href="http://skarnet.org/default.css" /> -->
+ </head>
+<body>
+
+<p>
+<a href="index.html">s6-portable-utils</a><br />
+<a href="http://skarnet.org/software/">Software</a><br />
+<a href="http://skarnet.org/">skarnet.org</a>
+</p>
+
+<h1> The <tt>s6-chown</tt> program </h1>
+
+<p>
+ s6-chown changes the owner and/or group of a file.
+</p>
+
+<h2> Interface </h2>
+
+<pre>
+ s6-chown [ -U ] [ -u uid ] [ -g gid ] file
+</pre>
+
+<ul>
+ <li> s6-chown changes <em>file</em>'s owner to (numeric) <em>uid</em> and group
+to (numeric) <em>gid</em>. </li>
+ <li> If <em>uid</em> isn't provided, the owner remains the same; if <em>gid</em>
+isn't provided, the group remains the same. </li>
+ <li> The <tt>-U</tt> option sets <em>uid</em> to the value of the UID
+environment variable and <em>gid</em> to the value of the GID environment variable.
+This makes s6-chown easily usable with
+<a href="http://www.skarnet.org/software/s6/s6-envuidgid.html">s6-envuidgid</a>:
+<tt> s6-envuidgid account s6-chown -U file </tt> changes <em>file</em>'s uid and
+gid to <em>account</em>'s. </li>
+</ul>
+
+<h2> Posixness </h2>
+
+<p>
+ s6-chown <strong>is not</strong> suitable as a Single Unix
+<a href="http://pubs.opengroup.org/onlinepubs/9699919799/utilities/chown.html">chown</a>
+program.
+</p>
+
+</body>
+</html>
diff --git a/doc/s6-clock.html b/doc/s6-clock.html
new file mode 100644
index 0000000..37e05ec
--- /dev/null
+++ b/doc/s6-clock.html
@@ -0,0 +1,54 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <title>s6-portable-utils: the s6-clock program</title>
+ <meta name="Description" content="s6-portable-utils: the s6-clock program" />
+ <meta name="Keywords" content="s6-portable-utils command s6-clock clock" />
+ <!-- <link rel="stylesheet" type="text/css" href="http://skarnet.org/default.css" /> -->
+ </head>
+<body>
+
+<p>
+<a href="index.html">s6-portable-utils</a><br />
+<a href="http://skarnet.org/software/">Software</a><br />
+<a href="http://skarnet.org/">skarnet.org</a>
+</p>
+
+<h1> The <tt>s6-clock</tt> program </h1>
+
+<p>
+ s6-clock gets or sets the system clock.
+</p>
+
+<h2> Interface </h2>
+
+<pre>
+ s6-clock [ <em>label</em> ]
+</pre>
+
+<p>
+ When called without an argument, s6-clock writes the current system
+time, as a
+<a href="http://skarnet.org/software/skalibs/libstddjb/tai.html#timestamp">TAI64N
+timestamp</a>, to stdout.
+</p>
+
+<p>
+ When given an argument <em>label</em>, which must be a
+<a href="http://skarnet.org/software/skalibs/libstddjb/tai.html#timestamp">TAI64N
+timestamp</a>, s6-clock sets the system time to this value.
+</p>
+
+<h2> Notes </h2>
+
+<p>
+ s6-clock only prints or accepts TAI time, no matter what the system clock is set
+to (TAI-10 or UTC); it will automatically make the right conversions for your
+system clock. Make sure your
+<a href="http://skarnet.org/software/skalibs/">skalibs</a> has been built with
+the right settings.
+</p>
+
+</body>
+</html>
diff --git a/doc/s6-cut.html b/doc/s6-cut.html
new file mode 100644
index 0000000..2d93762
--- /dev/null
+++ b/doc/s6-cut.html
@@ -0,0 +1,44 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <title>s6-portable-utils: the s6-cut program</title>
+ <meta name="Description" content="s6-portable-utils: the s6-cut program" />
+ <meta name="Keywords" content="s6-portable-utils command s6-cut cut" />
+ <!-- <link rel="stylesheet" type="text/css" href="http://skarnet.org/default.css" /> -->
+ </head>
+<body>
+
+<p>
+<a href="index.html">s6-portable-utils</a><br />
+<a href="http://skarnet.org/software/">Software</a><br />
+<a href="http://skarnet.org/">skarnet.org</a>
+</p>
+
+<h1> The <tt>s6-cut</tt> program </h1>
+
+<p>
+ s6-cut prints selected portions of the lines of its input.
+</p>
+
+<h2> Interface </h2>
+
+<pre>
+ s6-cut [ -b list | -c list | -f list ] [ -n ] [ -s ] [ file ... ]
+</pre>
+
+<p>
+ s6-cut acts as the generic
+<a href="http://pubs.opengroup.org/onlinepubs/9699919799/utilities/cut.html">cut</a> utility.
+</p>
+
+<h2> Posixness </h2>
+
+<p>
+ s6-cut <strong>is</strong> suitable as a Single Unix
+<a href="http://pubs.opengroup.org/onlinepubs/9699919799/utilities/cut.html">cut</a>
+program.
+</p>
+
+</body>
+</html>
diff --git a/doc/s6-dirname.html b/doc/s6-dirname.html
new file mode 100644
index 0000000..4fee876
--- /dev/null
+++ b/doc/s6-dirname.html
@@ -0,0 +1,50 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <title>s6-portable-utils: the s6-dirname program</title>
+ <meta name="Description" content="s6-portable-utils: the s6-dirname program" />
+ <meta name="Keywords" content="s6-portable-utils command s6-dirname dirname" />
+ <!-- <link rel="stylesheet" type="text/css" href="http://skarnet.org/default.css" /> -->
+ </head>
+<body>
+
+<p>
+<a href="index.html">s6-portable-utils</a><br />
+<a href="http://skarnet.org/software/">Software</a><br />
+<a href="http://skarnet.org/">skarnet.org</a>
+</p>
+
+<h1> The <tt>s6-dirname</tt> program </h1>
+
+<p>
+ s6-dirname prints the dirname of a path.
+</p>
+
+<h2> Interface </h2>
+
+<pre>
+ s6-dirname [ -n ] path
+</pre>
+
+<p>
+ s6-dirname acts as the generic
+<a href="http://pubs.opengroup.org/onlinepubs/9699919799/utilities/dirname.html">dirname</a> utility.
+</p>
+
+<h2> Extra options </h2>
+
+<ul>
+ <li> <tt>-n</tt>&nbsp;: do not print a trailing newline after the output. </li>
+</ul>
+
+<h2> Posixness </h2>
+
+<p>
+ s6-dirname <strong>is</strong> suitable as a Single Unix
+<a href="http://pubs.opengroup.org/onlinepubs/9699919799/utilities/dirname.html">dirname</a>
+program.
+</p>
+
+</body>
+</html>
diff --git a/doc/s6-echo.html b/doc/s6-echo.html
new file mode 100644
index 0000000..5cbcc88
--- /dev/null
+++ b/doc/s6-echo.html
@@ -0,0 +1,51 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <title>s6-portable-utils: the s6-echo program</title>
+ <meta name="Description" content="s6-portable-utils: the s6-echo program" />
+ <meta name="Keywords" content="s6-portable-utils command s6-echo echo" />
+ <!-- <link rel="stylesheet" type="text/css" href="http://skarnet.org/default.css" /> -->
+ </head>
+<body>
+
+<p>
+<a href="index.html">s6-portable-utils</a><br />
+<a href="http://skarnet.org/software/">Software</a><br />
+<a href="http://skarnet.org/">skarnet.org</a>
+</p>
+
+<h1> The <tt>s6-echo</tt> program </h1>
+
+<p>
+ s6-echo writes its arguments to stdout.
+</p>
+
+<h2> Interface </h2>
+
+<pre>
+ s6-echo [ -n ] [ -s sep ] <em>args...</em>
+</pre>
+
+<p>
+ s6-echo writes its arguments <em>args</em> to stdout, separated with spaces.
+</p>
+
+<h2> Options </h2>
+
+<ul>
+ <li> <tt>-n</tt>&nbsp;: do not output a trailing newline. </li>
+ <li> <tt>-s</tt>&nbsp;<em>sep</em>&nbsp;: separate arguments with the <em>sep</em>
+character instead of a space. </li>
+</ul>
+
+<h2> Posixness </h2>
+
+<p>
+ s6-echo <strong>is not</strong> suitable as a Single Unix
+<a href="http://pubs.opengroup.org/onlinepubs/9699919799/utilities/echo.html">echo</a>
+program.
+</p>
+
+</body>
+</html>
diff --git a/doc/s6-env.html b/doc/s6-env.html
new file mode 100644
index 0000000..fa53a45
--- /dev/null
+++ b/doc/s6-env.html
@@ -0,0 +1,45 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <title>s6-portable-utils: the s6-env program</title>
+ <meta name="Description" content="s6-portable-utils: the s6-env program" />
+ <meta name="Keywords" content="s6-portable-utils command s6-env env" />
+ <!-- <link rel="stylesheet" type="text/css" href="http://skarnet.org/default.css" /> -->
+ </head>
+<body>
+
+<p>
+<a href="index.html">s6-portable-utils</a><br />
+<a href="http://skarnet.org/software/">Software</a><br />
+<a href="http://skarnet.org/">skarnet.org</a>
+</p>
+
+<h1> The <tt>s6-env</tt> program </h1>
+
+<p>
+s6-env prints the current environment or modifies the environment
+before running a program.
+</p>
+
+<h2> Interface </h2>
+
+<pre>
+ s6-env [ -i ] [ <em>name</em>=<em>value</em>... ] [ <em>prog...</em> ]
+</pre>
+
+<p>
+ s6-env acts as the generic
+<a href="http://pubs.opengroup.org/onlinepubs/9699919799/utilities/env.html">env</a> utility.
+</p>
+
+<h2> Posixness </h2>
+
+<p>
+ s6-env <strong>is</strong> suitable as a Single Unix
+<a href="http://pubs.opengroup.org/onlinepubs/9699919799/utilities/env.html">env</a>
+program.
+</p>
+
+</body>
+</html>
diff --git a/doc/s6-expr.html b/doc/s6-expr.html
new file mode 100644
index 0000000..b535eb6
--- /dev/null
+++ b/doc/s6-expr.html
@@ -0,0 +1,50 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <title>s6-portable-utils: the s6-expr program</title>
+ <meta name="Description" content="s6-portable-utils: the s6-expr program" />
+ <meta name="Keywords" content="s6-portable-utils command s6-expr expr" />
+ <!-- <link rel="stylesheet" type="text/css" href="http://skarnet.org/default.css" /> -->
+ </head>
+<body>
+
+<p>
+<a href="index.html">s6-portable-utils</a><br />
+<a href="http://skarnet.org/software/">Software</a><br />
+<a href="http://skarnet.org/">skarnet.org</a>
+</p>
+
+<h1> The <tt>s6-expr</tt> program </h1>
+
+<p>
+ s6-expr evaluates an expression and writes the result to stdout.
+</p>
+
+<h2> Interface </h2>
+
+<pre>
+ s6-expr <em>expression...</em>
+</pre>
+
+<p>
+ s6-expr acts as the generic
+<a href="http://pubs.opengroup.org/onlinepubs/9699919799/utilities/expr.html">expr</a> utility,
+except that the <strong>:</strong> operator (pattern matching) is not supported.
+</p>
+
+<p>
+ s6-expr accepts an arbitrary number of arguments.
+</p>
+
+<h2> Posixness </h2>
+
+<p>
+ s6-expr <strong>is not</strong> suitable as a Single Unix
+<a href="http://pubs.opengroup.org/onlinepubs/9699919799/utilities/expr.html">expr</a>
+program; however, if you are never using the pattern matching functionality, s6-expr
+scrupulously follows the rest of the specification.
+</p>
+
+</body>
+</html>
diff --git a/doc/s6-false.html b/doc/s6-false.html
new file mode 100644
index 0000000..4b21046
--- /dev/null
+++ b/doc/s6-false.html
@@ -0,0 +1,39 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <title>s6-portable-utils: the s6-false program</title>
+ <meta name="Description" content="s6-portable-utils: the s6-false program" />
+ <meta name="Keywords" content="s6-portable-utils command s6-false" />
+ <!-- <link rel="stylesheet" type="text/css" href="http://skarnet.org/default.css" /> -->
+ </head>
+<body>
+
+<p>
+<a href="index.html">s6-portable-utils</a><br />
+<a href="http://skarnet.org/software/">Software</a><br />
+<a href="http://skarnet.org/">skarnet.org</a>
+</p>
+
+<h1> The <tt>s6-false</tt> program </h1>
+
+<p>
+ s6-false returns 1.
+</p>
+
+<h2> Interface </h2>
+
+<pre>
+ s6-false
+</pre>
+
+<h2> Posixness </h2>
+
+<p>
+ s6-false <strong>is</strong> suitable as a Single Unix
+<a href="http://pubs.opengroup.org/onlinepubs/9699919799/utilities/false.html">false</a>
+program.
+</p>
+
+</body>
+</html>
diff --git a/doc/s6-format-filter.html b/doc/s6-format-filter.html
new file mode 100644
index 0000000..4492786
--- /dev/null
+++ b/doc/s6-format-filter.html
@@ -0,0 +1,42 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <title>s6-portable-utils: the s6-format-filter program</title>
+ <meta name="Description" content="s6-portable-utils: the s6-format-filter program" />
+ <meta name="Keywords" content="s6-portable-utils command s6-format filter printf format" />
+ <!-- <link rel="stylesheet" type="text/css" href="http://skarnet.org/default.css" /> -->
+ </head>
+<body>
+
+<p>
+<a href="index.html">s6-portable-utils</a><br />
+<a href="http://skarnet.org/software/">Software</a><br />
+<a href="http://skarnet.org/">skarnet.org</a>
+</p>
+
+<h1> The <tt>s6-format-filter</tt> program </h1>
+
+<p>
+s6-format-filter processes lines according to its arguments, and
+prints the result.
+</p>
+
+<h2> Interface </h2>
+
+<pre>
+ s6-format-filter <em>format</em> [ <em>args...</em> ]
+</pre>
+
+<ul>
+ <li> <em>format</em> is a format string that can contain the following special sequences:
+<tt>%%</tt>, <tt>%s</tt>, and <tt>%0</tt> to <tt>%9</tt>. </li>
+ <li> For every line it reads on stdin, s6-format-filter prints <em>format</em> on
+stdout, replacing <tt>%%</tt> with <tt>%</tt>, <tt>%0</tt> with the command name
+(probably <tt>s6-format-filter</tt>), <tt>%1</tt> to <tt>%9</tt> with the first
+to the ninth argument in <em>args</em>, and <tt>%s</tt> with the input line. </li>
+ <li> s6-format-filter exits 0 when it reads EOF. </li>
+</ul>
+
+</body>
+</html>
diff --git a/doc/s6-grep.html b/doc/s6-grep.html
new file mode 100644
index 0000000..fc0cb1b
--- /dev/null
+++ b/doc/s6-grep.html
@@ -0,0 +1,67 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <title>s6-portable-utils: the s6-grep program</title>
+ <meta name="Description" content="s6-portable-utils: the s6-grep program" />
+ <meta name="Keywords" content="s6-portable-utils command s6-grep grep" />
+ <!-- <link rel="stylesheet" type="text/css" href="http://skarnet.org/default.css" /> -->
+ </head>
+<body>
+
+<p>
+<a href="index.html">s6-portable-utils</a><br />
+<a href="http://skarnet.org/software/">Software</a><br />
+<a href="http://skarnet.org/">skarnet.org</a>
+</p>
+
+<h1> The <tt>s6-grep</tt> program </h1>
+
+<p>
+ s6-grep matches its input against a pattern.
+</p>
+
+<h2> Interface </h2>
+
+<pre>
+ s6-grep [ -E | -F ] [ -i ] [ -c ] [ -n ] [ -q ] [ -v ] <em>pattern</em>
+</pre>
+
+<ul>
+ <li> s6-grep compiles <em>pattern</em> as an
+<a href="http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap09.html#tag_09_03">Basic
+Regular Expression</a> </li>
+ <li> It reads stdin and matches every line against this regexp </li>
+ <li> If the line matches, it prints it to stdout </li>
+ <li> It exits on EOF with code 0 if one or more lines matched and 1
+otherwise. </li>
+</ul>
+
+<h2> Options </h2>
+
+<ul>
+ <li> <tt>-F</tt>&nbsp;: <em>pattern</em> is not compiled as a BRE, but is
+interpreted as a literal string. </li>
+ <li> <tt>-E</tt>&nbsp;: <em>pattern</em> is not compiled as a BRE, but as an
+<a href="http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap09.html#tag_09_04">Extended
+Regular Expression</a> (ERE). </li>
+ <li> <tt>-i</tt>&nbsp;: ignore case during the match </li>
+ <li> <tt>-c</tt>&nbsp;: do not write normal output; only write the number of
+lines that have matched <em>pattern</em> after EOF is received </li>
+ <li> <tt>-n</tt>&nbsp;: precede every output line by its number and a colon.
+The first input line has number 1. </li>
+ <li> <tt>-q</tt>&nbsp;: do not write anything to stdout </li>
+ <li> <tt>-v</tt>&nbsp;: invert the pattern matching (select lines that do not
+match <em>pattern</em>). </li>
+</ul>
+
+<h2> Posixness </h2>
+
+<p>
+ s6-grep <strong>is not</strong> suitable as a Single Unix
+<a href="http://pubs.opengroup.org/onlinepubs/9699919799/utilities/grep.html">grep</a>
+program.
+</p>
+
+</body>
+</html>
diff --git a/doc/s6-head.html b/doc/s6-head.html
new file mode 100644
index 0000000..3fd3360
--- /dev/null
+++ b/doc/s6-head.html
@@ -0,0 +1,55 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <title>s6-portable-utils: the s6-head program</title>
+ <meta name="Description" content="s6-portable-utils: the s6-head program" />
+ <meta name="Keywords" content="s6-portable-utils command s6-head head" />
+ <!-- <link rel="stylesheet" type="text/css" href="http://skarnet.org/default.css" /> -->
+ </head>
+<body>
+
+<p>
+<a href="index.html">s6-portable-utils</a><br />
+<a href="http://skarnet.org/software/">Software</a><br />
+<a href="http://skarnet.org/">skarnet.org</a>
+</p>
+
+<h1> The <tt>s6-head</tt> program </h1>
+
+<p>
+ s6-head prints the first lines of its input files.
+</p>
+
+<h2> Interface </h2>
+
+<pre>
+ s6-head [ -S ] [ -1..9 | -n <em>lines</em> | -c <em>chars</em> ] <em>file...</em>
+</pre>
+
+<p>
+ s6-head acts as the generic
+<a href="http://pubs.opengroup.org/onlinepubs/9699919799/utilities/head.html">head</a> utility.
+</p>
+
+<h2> Extra options </h2>
+
+<ul>
+ <li> <tt>-S</tt>&nbsp;: safe mode. s6-head stops reading its input files <em>right after</em>
+getting all the lines it needs. The rest of the stream can then be handled by other
+utilities without any data loss. </li>
+ <li> <tt>-1..9</tt>&nbsp;: equivalent to <tt>-n 1</tt> .. <tt>-n 9</tt>. </li>
+ <li> <tt>-c</tt>&nbsp;<em>chars</em>&nbsp;: cuts after <em>chars</em> characters instead
+of <em>lines</em> lines. </li>
+</ul>
+
+<h2> Posixness </h2>
+
+<p>
+ s6-head <strong>is</strong> suitable as a Single Unix
+<a href="http://pubs.opengroup.org/onlinepubs/9699919799/utilities/head.html">head</a>
+program.
+</p>
+
+</body>
+</html>
diff --git a/doc/s6-linkname.html b/doc/s6-linkname.html
new file mode 100644
index 0000000..e4caf84
--- /dev/null
+++ b/doc/s6-linkname.html
@@ -0,0 +1,45 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <title>s6-portable-utils: the s6-linkname program</title>
+ <meta name="Description" content="s6-portable-utils: the s6-linkname program" />
+ <meta name="Keywords" content="s6-portable-utils command s6-linkname linkname readlink" />
+ <!-- <link rel="stylesheet" type="text/css" href="http://skarnet.org/default.css" /> -->
+ </head>
+<body>
+
+<p>
+<a href="index.html">s6-portable-utils</a><br />
+<a href="http://skarnet.org/software/">Software</a><br />
+<a href="http://skarnet.org/">skarnet.org</a>
+</p>
+
+<h1> The <tt>s6-linkname</tt> program </h1>
+
+<p>
+ s6-linkname gives the content of a symbolic link or resolves a path.
+</p>
+
+<h2> Interface </h2>
+
+<pre>
+ s6-linkname [ -f ] <em>path</em>
+</pre>
+
+<ul>
+ <li> If <em>path</em> is a symbolic link, s6-linkname prints its
+content then exits 0. </li>
+ <li> Else it prints an error message and exits 111. </li>
+</ul>
+
+<h2> Options </h2>
+
+<ul>
+ <li> <tt>-f</tt>&nbsp;: s6-linkname fully resolves <em>path</em> then
+prints the result on stdout. <em>path</em> does not have to be a symbolic
+link. </li>
+</ul>
+
+</body>
+</html>
diff --git a/doc/s6-ln.html b/doc/s6-ln.html
new file mode 100644
index 0000000..392476f
--- /dev/null
+++ b/doc/s6-ln.html
@@ -0,0 +1,44 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <title>s6-portable-utils: the s6-ln program</title>
+ <meta name="Description" content="s6-portable-utils: the s6-ln program" />
+ <meta name="Keywords" content="s6-portable-utils command s6-ln ln link symbolic hard" />
+ <!-- <link rel="stylesheet" type="text/css" href="http://skarnet.org/default.css" /> -->
+ </head>
+<body>
+
+<p>
+<a href="index.html">s6-portable-utils</a><br />
+<a href="http://skarnet.org/software/">Software</a><br />
+<a href="http://skarnet.org/">skarnet.org</a>
+</p>
+
+<h1> The <tt>s6-ln</tt> program </h1>
+
+<p>
+ s6-ln creates a link to a file.
+</p>
+
+<h2> Interface </h2>
+
+<pre>
+ s6-ln [ -s ] [ -f ] [ -L ] [ -P ] <em>old</em> <em>new</em>
+</pre>
+
+<p>
+ s6-ln acts as the generic
+<a href="http://pubs.opengroup.org/onlinepubs/9699919799/utilities/ln.html">ln</a> utility.
+</p>
+
+<h2> Posixness </h2>
+
+<p>
+ s6-ln <strong>is</strong> suitable as a Single Unix
+<a href="http://pubs.opengroup.org/onlinepubs/9699919799/utilities/ln.html">ln</a>
+program.
+</p>
+
+</body>
+</html>
diff --git a/doc/s6-ls.html b/doc/s6-ls.html
new file mode 100644
index 0000000..492ea25
--- /dev/null
+++ b/doc/s6-ls.html
@@ -0,0 +1,57 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <title>s6-portable-utils: the s6-ls program</title>
+ <meta name="Description" content="s6-portable-utils: the s6-ls program" />
+ <meta name="Keywords" content="s6-portable-utils command s6-ls ls directory list" />
+ <!-- <link rel="stylesheet" type="text/css" href="http://skarnet.org/default.css" /> -->
+ </head>
+<body>
+
+<p>
+<a href="index.html">s6-portable-utils</a><br />
+<a href="http://skarnet.org/software/">Software</a><br />
+<a href="http://skarnet.org/">skarnet.org</a>
+</p>
+
+<h1> The <tt>s6-ls</tt> program </h1>
+
+<p>
+ s6-ls lists the contents of a directory.
+</p>
+
+<h2> Interface </h2>
+
+<pre>
+ s6-ls [ -0 ] [ -a | -A ] [ -x <em>exclude</em> ] <em>dir</em>
+</pre>
+
+<p>
+ s6-ls lists the contents of <em>dir</em>, one file per line. It
+omits files starting with a dot.
+</p>
+
+<h2> Options </h2>
+
+<ul>
+ <li> <tt>-0</tt>&nbsp;: separate file names with a null character
+instead of a newline. </li>
+ <li> <tt>-a</tt>&nbsp;: do not omit files starting with a dot. Do
+not list <tt>.</tt> or <tt>..</tt> though. </li>
+ <li> <tt>-A</tt>&nbsp;: do not omit files starting with a dot, even
+<tt>.</tt> and <tt>..</tt> </li>
+ <li> <tt>-x</tt>&nbsp;<em>exclude</em>&nbsp;: if a file name is
+<em>exclude</em>, do not print it. </li>
+</ul>
+
+<h2> Posixness </h2>
+
+<p>
+ s6-ls <strong>is not</strong> suitable as a Single Unix
+<a href="http://pubs.opengroup.org/onlinepubs/9699919799/utilities/ls.html">ls</a>
+program.
+</p>
+
+</body>
+</html>
diff --git a/doc/s6-maximumtime.html b/doc/s6-maximumtime.html
new file mode 100644
index 0000000..eea72b3
--- /dev/null
+++ b/doc/s6-maximumtime.html
@@ -0,0 +1,53 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <title>s6-portable-utils: the s6-maximumtime program</title>
+ <meta name="Description" content="s6-portable-utils: the s6-maximumtime program" />
+ <meta name="Keywords" content="s6-portable-utils command s6-maximumtime maximumtime timelimit time limit" />
+ <!-- <link rel="stylesheet" type="text/css" href="http://skarnet.org/default.css" /> -->
+ </head>
+<body>
+
+<p>
+<a href="index.html">s6-portable-utils</a><br />
+<a href="http://skarnet.org/software/">Software</a><br />
+<a href="http://skarnet.org/">skarnet.org</a>
+</p>
+
+<h1> The <tt>s6-maximumtime</tt> program </h1>
+
+<p>
+ s6-maximumtime executes a program with a time limit.
+</p>
+
+<h2> Interface </h2>
+
+<pre>
+ s6-maximumtime [ -0 | -a | -b | -i | -k | -q | -t | -x | -1 | -2 ] <em>milli</em> <em>prog...</em>
+</pre>
+
+<ul>
+ <li> s6-maximumtime forks and execs <em>prog...</em> as a child. </li>
+ <li> If <em>milli</em> milliseconds elapse before <em>prog</em> exits,
+s6-maximumtime sends it a signal and exits 99 with a message. </li>
+ <li> Else s6-maximumtime exits with the same exit code as <em>prog</em>. </li>
+</ul>
+
+<h2> Options </h2>
+
+<ul>
+ <li> <tt>-0</tt>&nbsp;: on timeout, do not send any signal, just exit </li>
+ <li> <tt>-a</tt>&nbsp;: on timeout, send a SIGALRM </li>
+ <li> <tt>-b</tt>&nbsp;: on timeout, send a SIGABRT </li>
+ <li> <tt>-i</tt>&nbsp;: on timeout, send a SIGINT </li>
+ <li> <tt>-k</tt>&nbsp;: on timeout, send a SIGKILL </li>
+ <li> <tt>-q</tt>&nbsp;: on timeout, send a SIGQUIT </li>
+ <li> <tt>-t</tt>&nbsp;: on timeout, send a SIGTERM - this is the default </li>
+ <li> <tt>-x</tt>&nbsp;: on timeout, send a SIGXCPU </li>
+ <li> <tt>-1</tt>&nbsp;: on timeout, send a SIGUSR1 </li>
+ <li> <tt>-2</tt>&nbsp;: on timeout, send a SIGUSR2 </li>
+</ul>
+
+</body>
+</html>
diff --git a/doc/s6-mkdir.html b/doc/s6-mkdir.html
new file mode 100644
index 0000000..8dd0e02
--- /dev/null
+++ b/doc/s6-mkdir.html
@@ -0,0 +1,50 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <title>s6-portable-utils: the s6-mkdir program</title>
+ <meta name="Description" content="s6-portable-utils: the s6-mkdir program" />
+ <meta name="Keywords" content="s6-portable-utils command s6-mkdir mkdir" />
+ <!-- <link rel="stylesheet" type="text/css" href="http://skarnet.org/default.css" /> -->
+ </head>
+<body>
+
+<p>
+<a href="index.html">s6-portable-utils</a><br />
+<a href="http://skarnet.org/software/">Software</a><br />
+<a href="http://skarnet.org/">skarnet.org</a>
+</p>
+
+<h1> The <tt>s6-mkdir</tt> program </h1>
+
+<p>
+ s6-mkdir creates directories.
+</p>
+
+<h2> Interface </h2>
+
+<pre>
+ s6-mkdir [ -p ] [ -v ] [ -m <em>mode</em> ] [ <em>dir...</em> ]
+</pre>
+
+<p>
+ s6-mkdir acts as the generic
+<a href="http://pubs.opengroup.org/onlinepubs/9699919799/utilities/mkdir.html">mkdir</a> utility.
+</p>
+
+<h2> Extra options </h2>
+
+<ul>
+ <li> <tt>-v</tt>&nbsp;: write what it does to stderr. </li>
+</ul>
+
+<h2> Posixness </h2>
+
+<p>
+ s6-mkdir <strong>is</strong> suitable as a Single Unix
+<a href="http://pubs.opengroup.org/onlinepubs/9699919799/utilities/mkdir.html">mkdir</a>
+program.
+</p>
+
+</body>
+</html>
diff --git a/doc/s6-mkfifo.html b/doc/s6-mkfifo.html
new file mode 100644
index 0000000..5f38072
--- /dev/null
+++ b/doc/s6-mkfifo.html
@@ -0,0 +1,44 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <title>s6-portable-utils: the s6-mkfifo program</title>
+ <meta name="Description" content="s6-portable-utils: the s6-mkfifo program" />
+ <meta name="Keywords" content="s6-portable-utils command s6-mkfifo mkfifo" />
+ <!-- <link rel="stylesheet" type="text/css" href="http://skarnet.org/default.css" /> -->
+ </head>
+<body>
+
+<p>
+<a href="index.html">s6-portable-utils</a><br />
+<a href="http://skarnet.org/software/">Software</a><br />
+<a href="http://skarnet.org/">skarnet.org</a>
+</p>
+
+<h1> The <tt>s6-mkfifo</tt> program </h1>
+
+<p>
+ s6-mkfifo creates FIFOs, a.k.a. named pipes.
+</p>
+
+<h2> Interface </h2>
+
+<pre>
+ s6-mkfifo [ -m mode ] [ <em>fifo...</em> ]
+</pre>
+
+<p>
+ s6-mkfifo acts as the generic
+<a href="http://pubs.opengroup.org/onlinepubs/9699919799/utilities/mkfifo.html">mkfifo</a> utility.
+</p>
+
+<h2> Posixness </h2>
+
+<p>
+ s6-mkfifo <strong>is</strong> suitable as a Single Unix
+<a href="http://pubs.opengroup.org/onlinepubs/9699919799/utilities/mkfifo.html">mkfifo</a>
+program.
+</p>
+
+</body>
+</html>
diff --git a/doc/s6-nice.html b/doc/s6-nice.html
new file mode 100644
index 0000000..98149c8
--- /dev/null
+++ b/doc/s6-nice.html
@@ -0,0 +1,53 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <title>s6-portable-utils: the s6-nice program</title>
+ <meta name="Description" content="s6-portable-utils: the s6-nice program" />
+ <meta name="Keywords" content="s6-portable-utils command s6-nice nice" />
+ <!-- <link rel="stylesheet" type="text/css" href="http://skarnet.org/default.css" /> -->
+ </head>
+<body>
+
+<p>
+<a href="index.html">s6-portable-utils</a><br />
+<a href="http://skarnet.org/software/">Software</a><br />
+<a href="http://skarnet.org/">www.skarnet.org</a>
+</p>
+
+<h1> The <tt>s6-nice</tt> program </h1>
+
+<p>
+ s6-nice executes into a program with an altered nice value.
+</p>
+
+<h2> Interface </h2>
+
+<pre>
+ s6-nice [ -I | -i ] [ -n <em>value</em> ] [ <em>prog...</em> ]
+</pre>
+
+<p>
+ s6-nice acts as the generic
+<a href="http://pubs.opengroup.org/onlinepubs/9699919799/utilities/nice.html">nice</a> utility.
+</p>
+
+<h2> Extra options </h2>
+
+<ul>
+ <li> <tt>-I</tt>&nbsp;: loose. If the nice value cannot be set to <em>value</em>,
+print a warning message and exec into <em>prog...</em> anyway. This is the default. </li>
+ <li> <tt>-i</tt>&nbsp;: strict. If the nice value cannot be set to <em>value</em>,
+exit 111 with an error message.
+</ul>
+
+<h2> Posixness </h2>
+
+<p>
+ s6-nice <strong>is</strong> suitable as a Single Unix
+<a href="http://pubs.opengroup.org/onlinepubs/9699919799/utilities/nice.html">nice</a>
+program.
+</p>
+
+</body>
+</html>
diff --git a/doc/s6-nuke.html b/doc/s6-nuke.html
new file mode 100644
index 0000000..3db674c
--- /dev/null
+++ b/doc/s6-nuke.html
@@ -0,0 +1,56 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <title>s6-portable-utils: the s6-nuke program</title>
+ <meta name="Description" content="s6-portable-utils: the s6-nuke program" />
+ <meta name="Keywords" content="s6-portable-utils command s6-nuke signal kill" />
+ <!-- <link rel="stylesheet" type="text/css" href="http://skarnet.org/default.css" /> -->
+ </head>
+<body>
+
+<p>
+<a href="index.html">s6-portable-utils</a><br />
+<a href="http://skarnet.org/software/">Software</a><br />
+<a href="http://skarnet.org/">skarnet.org</a>
+</p>
+
+<h1> The <tt>s6-nuke</tt> program </h1>
+
+<p>
+ s6-nuke sends signals to every process it is allowed to send.
+</p>
+
+<h2> Interface </h2>
+
+<pre>
+ s6-nuke [ -h | -t | -k ]
+</pre>
+
+<ul>
+ <li> Depending on the options it is given, s6-nuke sends signals to
+all processes; depending on s6-nuke's rights, not all processes may
+receive them. </li>
+ <li> s6-nuke protects itself against the signals it sends (which
+doesn't do much good against SIGKILL). If it survives the blast,
+it exits 0. </li>
+</ul>
+
+<h2> Options </h2>
+
+<ul>
+ <li> <tt>-h</tt>&nbsp;: send a SIGHUP </li>
+ <li> <tt>-t</tt>&nbsp;: send a SIGTERM then a SIGCONT </li>
+ <li> <tt>-k</tt>&nbsp;: send a SIGKILL </li>
+</ul>
+
+<h2> Usage notes </h2>
+
+<p>
+ s6-nuke can be used during the shutdown procedure of a system, which is
+described
+<a href="http://skarnet.org/software/s6/s6-svscan-1.html#stage3">here</a>.
+</p>
+
+</body>
+</html>
diff --git a/doc/s6-pause.html b/doc/s6-pause.html
new file mode 100644
index 0000000..edb129f
--- /dev/null
+++ b/doc/s6-pause.html
@@ -0,0 +1,39 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <title>s6-portable-utils: the s6-pause program</title>
+ <meta name="Description" content="s6-portable-utils: the s6-pause program" />
+ <meta name="Keywords" content="s6-portable-utils command s6-pause pause" />
+ <!-- <link rel="stylesheet" type="text/css" href="http://skarnet.org/default.css" /> -->
+ </head>
+<body>
+
+<p>
+<a href="index.html">s6-portable-utils</a><br />
+<a href="http://skarnet.org/software/">Software</a><br />
+<a href="http://skarnet.org/">skarnet.org</a>
+</p>
+
+<h1> The <tt>s6-pause</tt> program </h1>
+
+<p>
+ s6-pause blocks until it is killed.
+</p>
+
+<h2> Interface </h2>
+
+<pre>
+ s6-pause
+</pre>
+
+<h2> Usage notes </h2>
+
+<p>
+ s6-pause is one of the smallest possible long-lived programs. It can be
+used to emulate a running service with the least possible resource
+consumption.
+</p>
+
+</body>
+</html>
diff --git a/doc/s6-printenv.html b/doc/s6-printenv.html
new file mode 100644
index 0000000..96216ab
--- /dev/null
+++ b/doc/s6-printenv.html
@@ -0,0 +1,46 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <title>s6-portable-utils: the s6-printenv program</title>
+ <meta name="Description" content="s6-portable-utils: the s6-printenv program" />
+ <meta name="Keywords" content="s6-portable-utils command s6-printenv environment variables" />
+ <!-- <link rel="stylesheet" type="text/css" href="http://skarnet.org/default.css" /> -->
+ </head>
+<body>
+
+<p>
+<a href="index.html">s6-portable-utils</a><br />
+<a href="http://skarnet.org/software/">Software</a><br />
+<a href="http://skarnet.org/">skarnet.org</a>
+</p>
+
+<h1> The <tt>s6-printenv</tt> program </h1>
+
+<p>
+ s6-printenv prints its environment variables.
+</p>
+
+<h2> Interface </h2>
+
+<pre>
+ s6-printenv [ -n ] [ -0 | -d <em>delim</em> ]
+</pre>
+
+<p>
+ s6-printenv prints its environment on stdout, like
+<a href="s6-env.html">s6-env</a>.
+</p>
+
+<h2> Options </h2>
+
+<ul>
+ <li> <tt>-0</tt>&nbsp;: separate file names with a null character
+instead of a newline. </li>
+ <li> <tt>-d</tt>&nbsp;<em>delim</em>&nbsp;: separate file names with the
+first character of <em>delim</em> instead of a newline </li>
+ <li> <tt>-n</tt>&nbsp;: omit the last delimiter character </li>
+</ul>
+
+</body>
+</html>
diff --git a/doc/s6-quote-filter.html b/doc/s6-quote-filter.html
new file mode 100644
index 0000000..867acbe
--- /dev/null
+++ b/doc/s6-quote-filter.html
@@ -0,0 +1,56 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <title>s6-portable-utils: the s6-quote-filter program</title>
+ <meta name="Description" content="s6-portable-utils: the s6-quote-filter program" />
+ <meta name="Keywords" content="s6-portable-utils command s6-quote-filter quote" />
+ <!-- <link rel="stylesheet" type="text/css" href="http://skarnet.org/default.css" /> -->
+ </head>
+<body>
+
+<p>
+<a href="index.html">s6-portable-utils</a><br />
+<a href="http://skarnet.org/software/">Software</a><br />
+<a href="http://skarnet.org/">skarnet.org</a>
+</p>
+
+<h1> The <tt>s6-quote-filter</tt> program </h1>
+
+<p>
+ s6-quote-filter acts as a filter, quoting lines it reads on stdin
+and writing the quoted lines to stdout.
+</p>
+
+<h2> Interface </h2>
+
+<pre>
+ s6-quote-filter [ -u ] [ -d <em>delim</em> ]
+</pre>
+
+<ul>
+ <li> s6-quote reads lines on stdin; it quotes every line, putting it inside double quotes
+and escaping all dubious characters </li>
+ <li> It writes the quoted strings to stdout </li>
+ <li> It exits 0 on EOF </li>
+</ul>
+
+<h2> Options </h2>
+
+<ul>
+ <li> <tt>-u</tt>&nbsp;: do not put read lines inside double quotes, only escape
+characters if needed </li>
+ <li> <tt>-d</tt>&nbsp;<em>delim</em>&nbsp;: use the first character of <em>delim</em>
+as a quote character, instead of double quotes </li>
+</ul>
+
+<h2> Notes </h2>
+
+<ul>
+ <li> Quoted strings are guaranteed to be pure printable ASCII, without control characters. </li>
+ <li> Quoted strings can be unquoted via the <a href="s6-unquote.html">s6-unquote</a> or
+<a href="s6-unquote-filter.html">s6-unquote-filter</a> programs. </li>
+</ul>
+
+</body>
+</html>
diff --git a/doc/s6-quote.html b/doc/s6-quote.html
new file mode 100644
index 0000000..a24069f
--- /dev/null
+++ b/doc/s6-quote.html
@@ -0,0 +1,57 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <title>s6-portable-utils: the s6-quote program</title>
+ <meta name="Description" content="s6-portable-utils: the s6-quote program" />
+ <meta name="Keywords" content="s6-portable-utils command s6-quote quote" />
+ <!-- <link rel="stylesheet" type="text/css" href="http://skarnet.org/default.css" /> -->
+ </head>
+<body>
+
+<p>
+<a href="index.html">s6-portable-utils</a><br />
+<a href="http://skarnet.org/software/">Software</a><br />
+<a href="http://skarnet.org/">skarnet.org</a>
+</p>
+
+<h1> The <tt>s6-quote</tt> program </h1>
+
+<p>
+ s6-quote quotes a string and writes it to stdout.
+</p>
+
+<h2> Interface </h2>
+
+<pre>
+ s6-quote [ -n ] [ -u ] [ -d <em>delim</em> ] <em>string</em>
+</pre>
+
+<ul>
+ <li> s6-quote quotes <em>string</em>, putting it inside double quotes
+and escaping all dubious characters </li>
+ <li> It writes the quoted string to stdout and exits 0 </li>
+</ul>
+
+<h2> Options </h2>
+
+<ul>
+ <li> <tt>-n</tt>&nbsp;: do not print a trailing newline </li>
+ <li> <tt>-u</tt>&nbsp;: do not put <em>string</em> inside double quotes, only escape
+characters if needed </li>
+ <li> <tt>-d</tt>&nbsp;<em>delim</em>&nbsp;: use the first character of <em>delim</em>
+as a quote character, instead of double quotes </li>
+</ul>
+
+<h2> Notes </h2>
+
+<ul>
+ <li> Quoted strings are guaranteed to be pure printable ASCII, without control characters. </li>
+ <li> Quoted strings can be unquoted via the <a href="s6-unquote.html">s6-unquote</a> or
+<a href="s6-unquote-filter.html">s6-unquote-filter</a> programs. </li>
+ <li> Quoted strings are suitable for interpretation by
+<a href="http://skarnet.org/software/execline/execlineb.html">execlineb</a>. </li>
+</ul>
+
+</body>
+</html>
diff --git a/doc/s6-rename.html b/doc/s6-rename.html
new file mode 100644
index 0000000..1691328
--- /dev/null
+++ b/doc/s6-rename.html
@@ -0,0 +1,35 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <title>s6-portable-utils: the s6-rename program</title>
+ <meta name="Description" content="s6-portable-utils: the s6-rename program" />
+ <meta name="Keywords" content="s6-portable-utils command s6-rename rename atomic" />
+ <!-- <link rel="stylesheet" type="text/css" href="http://skarnet.org/default.css" /> -->
+ </head>
+<body>
+
+<p>
+<a href="index.html">s6-portable-utils</a><br />
+<a href="http://skarnet.org/software/">Software</a><br />
+<a href="http://skarnet.org/">skarnet.org</a>
+</p>
+
+<h1> The <tt>s6-rename</tt> program </h1>
+
+<p>
+ s6-rename atomically renames a file.
+</p>
+
+<h2> Interface </h2>
+
+<pre>
+ s6-rename <em>old</em> <em>new</em>
+</pre>
+
+<p>
+ s6-rename atomically renames <em>old</em> to <em>new</em>.
+</p>
+
+</body>
+</html>
diff --git a/doc/s6-rmrf.html b/doc/s6-rmrf.html
new file mode 100644
index 0000000..ccbded4
--- /dev/null
+++ b/doc/s6-rmrf.html
@@ -0,0 +1,35 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <title>s6-portable-utils: the s6-rmrf program</title>
+ <meta name="Description" content="s6-portable-utils: the s6-rmrf program" />
+ <meta name="Keywords" content="s6-portable-utils command s6-rmrf rm remove delete" />
+ <!-- <link rel="stylesheet" type="text/css" href="http://skarnet.org/default.css" /> -->
+ </head>
+<body>
+
+<p>
+<a href="index.html">s6-portable-utils</a><br />
+<a href="http://skarnet.org/software/">Software</a><br />
+<a href="http://skarnet.org/">skarnet.org</a>
+</p>
+
+<h1> The <tt>s6-rmrf</tt> program </h1>
+
+<p>
+ s6-rmrf removes a file or directory tree entirely.
+</p>
+
+<h2> Interface </h2>
+
+<pre>
+ s6-rmrf <em>subtree</em>
+</pre>
+
+<p>
+ s6-rmrf removes the <em>subtree</em> file hierarchy.
+</p>
+
+</body>
+</html>
diff --git a/doc/s6-sleep.html b/doc/s6-sleep.html
new file mode 100644
index 0000000..68137d3
--- /dev/null
+++ b/doc/s6-sleep.html
@@ -0,0 +1,51 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <title>s6-portable-utils: the s6-sleep program</title>
+ <meta name="Description" content="s6-portable-utils: the s6-sleep program" />
+ <meta name="Keywords" content="s6-portable-utils command s6-sleep sleep" />
+ <!-- <link rel="stylesheet" type="text/css" href="http://skarnet.org/default.css" /> -->
+ </head>
+<body>
+
+<p>
+<a href="index.html">s6-portable-utils</a><br />
+<a href="http://skarnet.org/software/">Software</a><br />
+<a href="http://skarnet.org/">skarnet.org</a>
+</p>
+
+<h1> The <tt>s6-sleep</tt> program </h1>
+
+<p>
+ s6-sleep sleeps for a given time.
+</p>
+
+<h2> Interface </h2>
+
+<pre>
+ s6-sleep [ -m ] <em>time</em>
+</pre>
+
+<p>
+ s6-sleep acts as the generic
+<a href="http://pubs.opengroup.org/onlinepubs/9699919799/utilities/sleep.html">sleep</a> utility.
+It ignores non-lethal signals.
+</p>
+
+<h2> Extra options </h2>
+
+<ul>
+ <li> <tt>-m</tt>&nbsp;: Interpret <em>time</em> as milliseconds instead of seconds. </li>
+</ul>
+
+<h2> Posixness </h2>
+
+<p>
+ s6-sleep <strong>is</strong> suitable as a Single Unix
+<a href="http://pubs.opengroup.org/onlinepubs/9699919799/utilities/sleep.html">sleep</a>
+program.
+</p>
+
+</body>
+</html>
diff --git a/doc/s6-sort.html b/doc/s6-sort.html
new file mode 100644
index 0000000..5e2d468
--- /dev/null
+++ b/doc/s6-sort.html
@@ -0,0 +1,59 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <title>s6-portable-utils: the s6-sort program</title>
+ <meta name="Description" content="s6-portable-utils: the s6-sort program" />
+ <meta name="Keywords" content="s6-portable-utils command s6-sort sort" />
+ <!-- <link rel="stylesheet" type="text/css" href="http://skarnet.org/default.css" /> -->
+ </head>
+<body>
+
+<p>
+<a href="index.html">s6-portable-utils</a><br />
+<a href="http://skarnet.org/software/">Software</a><br />
+<a href="http://skarnet.org/">skarnet.org</a>
+</p>
+
+<h1> The <tt>s6-sort</tt> program </h1>
+
+<p>
+ s6-sort sorts its input.
+</p>
+
+<h2> Interface </h2>
+
+<pre>
+ s6-sort [ -b ] [ -c ] [ -f ] [ -r ] [ -u ] [ -0 ]
+</pre>
+
+<ul>
+ <li> s6-sort reads its stdin until EOF </li>
+ <li> It sorts all the lines it read alphanumerically </li>
+ <li> It prints the sorted lines to stdout and exits 0 </li>
+</ul>
+
+<h2> Options </h2>
+
+<ul>
+ <li> <tt>-b</tt>&nbsp;: ignore leading spaces and tabs at the beginning of each
+line when sorting </li>
+ <li> <tt>-c</tt>&nbsp;: suppresses normal output, just returns 0 if the output
+would have been the same as the input and 1 otherwise </li>
+ <li> <tt>-f</tt>&nbsp;: ignore case when sorting </li>
+ <li> <tt>-r</tt>&nbsp;: reverse sort </li>
+ <li> <tt>-u</tt>&nbsp;: suppresses duplicate lines </li>
+ <li> <tt>-0</tt>&nbsp;: input and output lines are separated by null characters
+instead of newlines </li>
+</ul>
+
+<h2> Posixness </h2>
+
+<p>
+ s6-sort <strong>is not</strong> suitable as a Single Unix
+<a href="http://pubs.opengroup.org/onlinepubs/9699919799/utilities/sort.html">sort</a>
+program.
+</p>
+
+</body>
+</html>
diff --git a/doc/s6-sync.html b/doc/s6-sync.html
new file mode 100644
index 0000000..daf88f3
--- /dev/null
+++ b/doc/s6-sync.html
@@ -0,0 +1,32 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <title>s6-portable-utils: the s6-sync program</title>
+ <meta name="Description" content="s6-portable-utils: the s6-sync program" />
+ <meta name="Keywords" content="s6-portable-utils command s6-sync sync filesystem" />
+ <!-- <link rel="stylesheet" type="text/css" href="http://skarnet.org/default.css" /> -->
+ </head>
+<body>
+
+<p>
+<a href="index.html">s6-portable-utils</a><br />
+<a href="http://skarnet.org/software/">Software</a><br />
+<a href="http://skarnet.org/">skarnet.org</a>
+</p>
+
+<h1> The <tt>s6-sync</tt> program </h1>
+
+<p>
+ s6-sync flushes all the dirty system buffers, and blocks until they're
+clean.
+</p>
+
+<h2> Interface </h2>
+
+<pre>
+ s6-sync
+</pre>
+
+</body>
+</html>
diff --git a/doc/s6-tail.html b/doc/s6-tail.html
new file mode 100644
index 0000000..abf2b76
--- /dev/null
+++ b/doc/s6-tail.html
@@ -0,0 +1,46 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <title>s6-portable-utils: the s6-tail program</title>
+ <meta name="Description" content="s6-portable-utils: the s6-tail program" />
+ <meta name="Keywords" content="s6-portable-utils command s6-tail tail" />
+ <!-- <link rel="stylesheet" type="text/css" href="http://skarnet.org/default.css" /> -->
+ </head>
+<body>
+
+<p>
+<a href="index.html">s6-portable-utils</a><br />
+<a href="http://skarnet.org/software/">Software</a><br />
+<a href="http://skarnet.org/">skarnet.org</a>
+</p>
+
+<h1> The <tt>s6-tail</tt> program </h1>
+
+<p>
+ s6-tail prints a file or its stdin after a certain number of bytes or lines.
+</p>
+
+<h2> Interface </h2>
+
+<pre>
+ s6-tail [ -n <em>lines</em> | -c <em>chars</em> ] [ <em>file</em> ]
+</pre>
+
+<p>
+ s6-tail acts as the generic
+<a href="http://pubs.opengroup.org/onlinepubs/9699919799/utilities/tail.html">tail</a> utility,
+except that the <strong>-f</strong> option is not supported.
+</p>
+
+<h2> Posixness </h2>
+
+<p>
+ s6-tail <strong>is not</strong> suitable as a Single Unix
+<a href="http://pubs.opengroup.org/onlinepubs/9699919799/utilities/tail.html">tail</a>
+program; however, if you are never using the <tt>-f</tt> functionality, s6-tail
+scrupulously follows the rest of the specification.
+</p>
+
+</body>
+</html>
diff --git a/doc/s6-test.html b/doc/s6-test.html
new file mode 100644
index 0000000..22b6fbd
--- /dev/null
+++ b/doc/s6-test.html
@@ -0,0 +1,53 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <title>s6-portable-utils: the s6-test program</title>
+ <meta name="Description" content="s6-portable-utils: the s6-test program" />
+ <meta name="Keywords" content="s6-portable-utils command s6-test test" />
+ <!-- <link rel="stylesheet" type="text/css" href="http://skarnet.org/default.css" /> -->
+ </head>
+<body>
+
+<p>
+<a href="index.html">s6-portable-utils</a><br />
+<a href="http://skarnet.org/software/">Software</a><br />
+<a href="http://skarnet.org/">skarnet.org</a>
+</p>
+
+<h1> The <tt>s6-test</tt> program </h1>
+
+<p>
+ s6-test evaluates an expression and indicates the result via its
+exit status.
+</p>
+
+<h2> Interface </h2>
+
+<pre>
+ s6-test <em>expression...</em>
+</pre>
+
+<p>
+ s6-test acts as the generic
+<a href="http://pubs.opengroup.org/onlinepubs/9699919799/utilities/test.html">test</a> utility,
+but it diverges from the specification on one point: if an argument starts with a backslash,
+this backslash is ignored (and the argument cannot be an operation). This is a simple
+disambiguation technique that has unfortunately not been chosen by the standard.
+</p>
+
+<p>
+ s6-test accepts an arbitrary number of arguments.
+</p>
+
+<h2> Posixness </h2>
+
+<p>
+ s6-test <strong>is not</strong> suitable as a Single Unix
+<a href="http://pubs.opengroup.org/onlinepubs/9699919799/utilities/test.html">test</a>
+program; however, if your arguments never start with a backslash, it exhibits the
+exact same behaviour.
+</p>
+
+</body>
+</html>
diff --git a/doc/s6-touch.html b/doc/s6-touch.html
new file mode 100644
index 0000000..ccc40ca
--- /dev/null
+++ b/doc/s6-touch.html
@@ -0,0 +1,45 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <title>s6-portable-utils: the s6-touch program</title>
+ <meta name="Description" content="s6-portable-utils: the s6-touch program" />
+ <meta name="Keywords" content="s6-portable-utils command s6-touch touch" />
+ <!-- <link rel="stylesheet" type="text/css" href="http://skarnet.org/default.css" /> -->
+ </head>
+<body>
+
+<p>
+<a href="index.html">s6-portable-utils</a><br />
+<a href="http://skarnet.org/software/">Software</a><br />
+<a href="http://skarnet.org/">skarnet.org</a>
+</p>
+
+<h1> The <tt>s6-touch</tt> program </h1>
+
+<p>
+ s6-touch changes the modification and access times of a file, creating it if it does
+not exist.
+</p>
+
+<h2> Interface </h2>
+
+<pre>
+ s6-touch <em>file...</em>
+</pre>
+
+<p>
+ s6-touch touches every <em>file</em> in the list by opening them for appending
+then closing them.
+</p>
+
+<h2> Posixness </h2>
+
+<p>
+ s6-touch <strong>is not</strong> suitable as a Single Unix
+<a href="http://pubs.opengroup.org/onlinepubs/9699919799/utilities/touch.html">touch</a>
+program.
+</p>
+
+</body>
+</html>
diff --git a/doc/s6-true.html b/doc/s6-true.html
new file mode 100644
index 0000000..60ec1c7
--- /dev/null
+++ b/doc/s6-true.html
@@ -0,0 +1,39 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <title>s6-portable-utils: the s6-true program</title>
+ <meta name="Description" content="s6-portable-utils: the s6-true program" />
+ <meta name="Keywords" content="s6-portable-utils command s6-true" />
+ <!-- <link rel="stylesheet" type="text/css" href="http://skarnet.org/default.css" /> -->
+ </head>
+<body>
+
+<p>
+<a href="index.html">s6-portable-utils</a><br />
+<a href="http://skarnet.org/software/">Software</a><br />
+<a href="http://skarnet.org/">skarnet.org</a>
+</p>
+
+<h1> The <tt>s6-true</tt> program </h1>
+
+<p>
+ s6-true returns 0.
+</p>
+
+<h2> Interface </h2>
+
+<pre>
+ s6-true
+</pre>
+
+<h2> Posixness </h2>
+
+<p>
+ s6-true <strong>is</strong> suitable as a Single Unix
+<a href="http://pubs.opengroup.org/onlinepubs/9699919799/utilities/false.html">true</a>
+program.
+</p>
+
+</body>
+</html>
diff --git a/doc/s6-uniquename.html b/doc/s6-uniquename.html
new file mode 100644
index 0000000..7315d9b
--- /dev/null
+++ b/doc/s6-uniquename.html
@@ -0,0 +1,45 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <title>s6-portable-utils: the s6-uniquename program</title>
+ <meta name="Description" content="s6-portable-utils: the s6-uniquename program" />
+ <meta name="Keywords" content="s6-portable-utils command s6-uniquename uniquename random" />
+ <!-- <link rel="stylesheet" type="text/css" href="http://skarnet.org/default.css" /> -->
+ </head>
+<body>
+
+<p>
+<a href="index.html">s6-portable-utils</a><br />
+<a href="http://skarnet.org/software/">Software</a><br />
+<a href="http://skarnet.org/">skarnet.org</a>
+</p>
+
+<h1> The <tt>s6-uniquename</tt> program </h1>
+
+<p>
+ s6-uniquename creates a guaranteed unique file name and prints it to stdout.
+</p>
+
+<h2> Interface </h2>
+
+<pre>
+ s6-uniquename [ -n <em>randomlen</em> ] <em>prefix</em>
+</pre>
+
+<ul>
+ <li> s6-uniquename creates a unique filename starting with <em>prefix</em>
+involving a TAI64N timestamp, the machine's FQDN and the process' PID. </li>
+ <li> It prints it to stdout and exits 0. </li>
+</ul>
+
+<h2> Options </h2>
+
+<ul>
+ <li> <tt>-n</tt>&nbsp;<em>randomlen</em>&nbsp;: for added security, also
+add a random readable string of <em>randomlen</em> characters to the
+created pathname. </li>
+</ul>
+
+</body>
+</html>
diff --git a/doc/s6-unquote-filter.html b/doc/s6-unquote-filter.html
new file mode 100644
index 0000000..7262722
--- /dev/null
+++ b/doc/s6-unquote-filter.html
@@ -0,0 +1,69 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <title>s6-portable-utils: the s6-unquote-filter program</title>
+ <meta name="Description" content="s6-portable-utils: the s6-unquote-filter program" />
+ <meta name="Keywords" content="s6-portable-utils command s6-unquote-filter unquote filter" />
+ <!-- <link rel="stylesheet" type="text/css" href="http://skarnet.org/default.css" /> -->
+ </head>
+<body>
+
+<p>
+<a href="index.html">s6-portable-utils</a><br />
+<a href="http://skarnet.org/software/">Software</a><br />
+<a href="http://skarnet.org/">skarnet.org</a>
+</p>
+
+<h1> The <tt>s6-unquote-filter</tt> program </h1>
+
+<p>
+ s6-unquote acts as a filter, reading quoted strings on stdin,
+unquoting them and writing the results to stdout.
+</p>
+
+<h2> Interface </h2>
+
+<pre>
+ s6-unquote-filter [ -q | -Q | -v | -w ] [ -d <em>delim</em> ]
+</pre>
+
+<ul>
+ <li> s6-unquote-filter reads lines on stdin. It exits 0 on EOF. </li>
+ <li> It expects read lines to follow the
+syntax of <a href="s6-quote.html">s6-quote</a>'s output strings </li>
+ <li> Depending on the strictness options, it prints various warning
+or error messages to stderr if it cannot properly unquote lines. In
+the very strict mode, it exits 100 on the first unquoting error. </li>
+ <li> If it is successful at unquoting, it prints the resulting
+lines to stdout. </li>
+</ul>
+
+<h2> Options </h2>
+
+<ul>
+ <li> <tt>-d</tt>&nbsp;<em>delim</em>&nbsp;: a list of characters that
+will be considered as delimitors (to start and end the quoted string).
+By default, only the double quote is such a character. If <em>delim</em>
+is the empty string, s6-unquote-filter interprets <em>string</em> as
+non-delimited, only escaped (i.e. for instance the result of some
+<tt>s6-quote-filter -u</tt> operation). </li>
+ <li> <tt>-q</tt>&nbsp;: loose/quiet mode. s6-unquote-filter will
+silently accommodate errors. </li>
+ <li> <tt>-Q</tt>&nbsp;: normal mode. This is the default. s6-unquote-filter
+will warn on errors. </li>
+ <li> <tt>-v</tt>&nbsp;: strict/verbose mode. s6-unquote-filter will
+warn loudly on errors, with many details. </li>
+ <li> <tt>-w</tt>&nbsp;: very strict mode. s6-unquote-filter will complain
+and die on the first unquoting error it encounters. </li>
+</ul>
+
+<h2> Notes </h2>
+
+<ul>
+ <li> Quoted strings can be produced via the <a href="s6-quote.html">s6-quote</a> or
+<a href="s6-quote-filter.html">s6-quote-filter</a> programs. </li>
+</ul>
+
+</body>
+</html>
diff --git a/doc/s6-unquote.html b/doc/s6-unquote.html
new file mode 100644
index 0000000..546082e
--- /dev/null
+++ b/doc/s6-unquote.html
@@ -0,0 +1,58 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <title>s6-portable-utils: the s6-unquote program</title>
+ <meta name="Description" content="s6-portable-utils: the s6-unquote program" />
+ <meta name="Keywords" content="s6-portable-utils command s6-unquote quote" />
+ <!-- <link rel="stylesheet" type="text/css" href="http://skarnet.org/default.css" /> -->
+ </head>
+<body>
+
+<p>
+<a href="index.html">s6-portable-utils</a><br />
+<a href="http://skarnet.org/software/">Software</a><br />
+<a href="http://skarnet.org/">skarnet.org</a>
+</p>
+
+<h1> The <tt>s6-unquote</tt> program </h1>
+
+<p>
+ s6-unquote unquotes a quoted string and writes it to stdout.
+</p>
+
+<h2> Interface </h2>
+
+<pre>
+ s6-unquote [ -n ] [ -d <em>delim</em> ] <em>string</em>
+</pre>
+
+<ul>
+ <li> s6-unquote unquotes <em>string</em>, which must follow the
+syntax of <a href="s6-quote.html">s6-quote</a>'s output strings </li>
+ <li> It prints various warning or error messages to stderr if it
+cannot unquote <em>string</em> properly </li>
+ <li> If successful, it prints the result to stdout and exits 0 </li>
+</ul>
+
+<h2> Options </h2>
+
+<ul>
+ <li> <tt>-n</tt>&nbsp;: do not print a trailing newline. </li>
+ <li> <tt>-d</tt>&nbsp;<em>delim</em>&nbsp;: a list of characters that
+will be considered as delimitors (to start and end the quoted string).
+By default, only the double quote is such a character. If <em>delim</em>
+is the empty string, s6-unquote interprets <em>string</em> as
+non-delimited, only escaped (i.e. the result of some
+<tt>s6-quote -u</tt> operation). </li>
+</ul>
+
+<h2> Notes </h2>
+
+<ul>
+ <li> Quoted strings can be produced via the <a href="s6-quote.html">s6-quote</a> or
+<a href="s6-quote-filter.html">s6-quote-filter</a> programs. </li>
+</ul>
+
+</body>
+</html>
diff --git a/doc/s6-update-symlinks.html b/doc/s6-update-symlinks.html
new file mode 100644
index 0000000..96cc15b
--- /dev/null
+++ b/doc/s6-update-symlinks.html
@@ -0,0 +1,83 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <title>s6-portable-utils: the s6-update-symlinks program</title>
+ <meta name="Description" content="s6-portable-utils: the s6-update-symlinks program" />
+ <meta name="Keywords" content="s6-portable-utils command s6-update-symlinks update-symlinks symlinks" />
+ <!-- <link rel="stylesheet" type="text/css" href="http://skarnet.org/default.css" /> -->
+ </head>
+<body>
+
+<p>
+<a href="index.html">s6</a><br />
+<a href="http://skarnet.org/software/">Software</a><br />
+<a href="http://skarnet.org/">skarnet.org</a>
+</p>
+
+<h1> The <tt>s6-update-symlinks</tt> program </h1>
+
+<p>
+ <tt>s6-update-symlinks</tt> links the content of several similar directory trees
+under a single tree. Its main use is to replace search paths like $PATH
+or $MANPATH, by creating a unique access tree based on the source trees.
+Name conflicts are solved by giving precedence to the last named directory.
+Subdirectories are created exactly as needed ; what can be shared is
+shared.
+</p>
+
+<p>
+<tt>s6-update-symlinks</tt> is useful when one wants to combine
+a logical package system, like Dan Bernstein's
+<a href="http://cr.yp.to/slashpackage.html"><tt>/package</tt></a> and
+<a href="http://cr.yp.to/slashcommand.html"><tt>/command</tt></a>, with
+physical filesystem constraints, like <tt>/</tt>, <tt>/usr</tt> and
+<tt>/usr/local</tt> on separate filesystems.
+</p>
+
+<h2> Interface </h2>
+
+<pre>
+ s6-update-symlinks <em>d</em> <em>src1</em> <em>src2</em> ...
+</pre>
+
+<ul>
+ <li> <em>d</em> is the destination directory. It will be created if it doesn't
+exist. </li>
+ <li> <em>src1</em>, <em>src2</em>, ... are the directory containing the files
+to be linked.</li>
+ <li> <em>d</em> and <em>srcn</em> <strong>must</strong> be
+<strong>absolute</strong> paths, else s6-update-symlinks refuses to run. Using
+relative paths doesn't make sense here, anyway. </li>
+ <li> If <em>src2</em> is empty, then <em>d</em> becomes a link to <em>src1</em>. </li>
+ <li> If <em>src1</em> is empty or entirely overridden by <em>src2</em>, then
+<em>d</em> becomes a link to <em>src2</em>.</li>
+ <li> If <em>src1/file</em> exists but not <em>src2/file</em>, then <em>d</em>
+becomes a real directory and <em>d/file</em> a link to <em>src1/file</em>.
+Then if <em>src2/file2</em> exists, <em>d/file2</em> links to it. </li>
+ <li> And so on with other <em>src</em> directories, and subdirs. </li>
+ <li> If <tt>s6-update-symlinks</tt> manages to performs all the requested
+tasks, it exits 0. If it encounters a hard error, it exits 111. If it is
+unable to resolve a conflict between given sources, it exits 100. </li>
+</ul>
+
+<h2> Examples </h2>
+
+<ul>
+ <li>
+<tt>s6-update-symlinks /command /bin /sbin /usr/bin /usr/sbin /usr/local/bin /usr/local/sbin</tt>
+<br> makes all files under <tt>/bin</tt>, ..., <tt>/usr/local/sbin</tt>
+available under <tt>/command</tt>. The programs linked are the same as the ones
+that would be accessed with PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin".
+ </li>
+ <li>
+<tt>s6-update-symlinks /package /initrd/package /slash/package /usr/package /usr/local/package</tt>
+<br /> builds a <tt>/package</tt> hierarchy with what it finds in the listed
+directories. This allows oddities like, for instance, having the daemontools
+sources in <tt>/usr/package/admin/daemontools/src</tt>, and the daemontools
+binaries in <tt>/initrd/package/admin/daemontools/bin</tt>, but accessing
+both through <tt>/package/admin/daemontools/</tt>. </li>
+</ul>
+
+</body>
+</html>
diff --git a/doc/upgrade.html b/doc/upgrade.html
new file mode 100644
index 0000000..978f397
--- /dev/null
+++ b/doc/upgrade.html
@@ -0,0 +1,32 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <title>s6-portable-utils: how to upgrade</title>
+ <meta name="Description" content="s6-portable-utils: how to upgrade" />
+ <meta name="Keywords" content="s6-portable-utils installation upgrade" />
+ <!-- <link rel="stylesheet" type="text/css" href="http://skarnet.org/default.css" /> -->
+ </head>
+<body>
+
+<p>
+<a href="index.html">s6-portable-utils</a><br />
+<a href="http://skarnet.org/software/">Software</a><br />
+<a href="http://skarnet.org/">skarnet.org</a>
+</p>
+
+<h1> How to upgrade s6-portable-utils </h1>
+
+<h2> to 2.0.0.0 </h2>
+
+<ul>
+ <li> The build system has completely changed. It is now a standard
+<tt>./configure &amp;&amp; make &amp;&amp; sudo make install</tt>
+build system. See the enclosed INSTALL file for details. </li>
+ <li> slashpackage is not activated by default. </li>
+ <li> shared libraries are not used by default. </li>
+ <li> skalibs dependency bumped to 2.0.0.0 </li>
+</ul>
+
+</body>
+</html>