diff --git a/man/man1/intro.html b/man/man1/intro.html
new file mode 100644
index 0000000..fc628e5
--- /dev/null
+++ b/man/man1/intro.html
@@ -0,0 +1,221 @@
+<head>
+<title>intro(1) - Plan 9 from User Space</title>
+<meta content="text/html; charset=utf-8" http-equiv=Content-Type>
+</head>
+<body bgcolor=#ffffff>
+<table border=0 cellpadding=0 cellspacing=0 width=100%>
+<tr height=10><td>
+<tr><td width=20><td>
+<tr><td width=20><td><b>INTRO(1)</b><td align=right><b>INTRO(1)</b>
+<tr><td width=20><td colspan=2>
+    <br>
+<p><font size=+1><b>NAME     </b></font><br>
+
+<table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td>
+
+    intro &ndash; introduction to Plan 9 from User Space<br>
+    
+</table>
+<p><font size=+1><b>DESCRIPTION     </b></font><br>
+
+<table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td>
+
+    Plan 9 is a distributed computing environment built at Bell Labs
+    starting in the late 1980s. The system can be obtained from Bell
+    Labs at <tt><font size=+1>http://plan9.bell&#8722;labs.com/plan9</font></tt> and runs on PCs and a
+    variety of other platforms. Plan 9 became a convenient platform
+    for experimenting with new ideas,
+    applications, and services. 
+    <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
+    
+    Plan 9 from User Space provides many of the ideas, applications,
+    and services from Plan 9 on Unix-like systems. It runs on FreeBSD
+    (x86), Linux (x86 and PowerPC), Mac OS X (PowerPC), OpenBSD (x86),
+    and SunOS (Sparc).<br>
+    <p><font size=+1><b>Commands     </b></font><br>
+    Plan 9 from User Space expects its own directory tree, conventionally
+    <tt><font size=+1>/usr/local/plan9</font></tt>. When programs need to access files in the tree,
+    they expect the <tt><font size=+1>$PLAN9</font></tt> environment variable to contain the name
+    of the root of the tree. See <a href="../man1/install.html"><i>install</i>(1)</a> for details about installation.
+    
+    <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
+    
+    Many of the familiar Unix commands, for example <a href="../man1/cat.html"><i>cat</i>(1)</a>, <a href="../man1/ls.html"><i>ls</i>(1)</a>,
+    and <a href="../man1/wc.html"><i>wc</i>(1)</a>, are present, but in their Plan 9 forms: <i>cat</i> takes no
+    arguments, <i>ls</i> does not columnate its output when printing to a
+    terminal, and <i>wc</i> counts UTF characters. In some cases, the differences
+    are quite noticeable: <a href="../man1/grep.html"><i>grep</i>(1)</a> and <a href="../man1/sed.html"><i>sed</i>(1)</a> expect Plan 9
+    regular expressions (see <a href="../man7/regexp.html"><i>regexp</i>(7)</a>), which are closest to what
+    Unix calls extended regular expressions. Because of these differences,
+    it is not recommended to put <tt><font size=+1>$PLAN9/bin</font></tt> before the usual system
+    <tt><font size=+1>bin</font></tt> directories in your search path. Instead, put it at the end
+    of your path and use the <a href="../man1/9.html"><i>9</i>(1)</a> script when you want to
+    invoke the Plan 9 version of a traditional Unix command. 
+    <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
+    
+    Occasionally the Plan 9 programs have been changed to adapt to
+    Unix. <a href="../man1/Mk.html"><i>Mk</i>(1)</a> now allows mkfiles to choose their own shell, and
+    <a href="../man1/rc.html"><i>rc</i>(1)</a> has a <i>ulimit</i> builtin and manages <tt><font size=+1>$PATH</font></tt>. 
+    <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
+    
+    Many of the graphical programs from Plan 9 are present, including
+    <a href="../man1/sam.html"><i>sam</i>(1)</a> and <a href="../man1/acme.html"><i>acme</i>(1)</a>. An X11 window manager <a href="../man1/rio.html"><i>rio</i>(1)</a> mimics Plan 9&#8217;s
+    window system, with command windows implemented by the external
+    program <a href="../man1/9term.html"><i>9term</i>(1)</a>. Following the style of X Windows, these programs
+    run in new windows rather than the one in
+    which they are invoked. They all take a <tt><font size=+1>&#8722;W</font></tt> option to specify the
+    size and placement of the new window. The argument is one of <i>width</i><tt><font size=+1>x</font></tt><i>height</i>,
+    <i>width</i><tt><font size=+1>x</font></tt><i>height</i><tt><font size=+1>@</font></tt><i>xmin</i><tt><font size=+1>,</font></tt><i>xmax</i>, or <i>xmin</i><tt><font size=+1>,</font></tt><i>ymin</i><tt><font size=+1>,</font></tt><i>xmax</i><tt><font size=+1>,</font></tt><i>ymax</i>. 
+    <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
+    
+    The <a href="../man4/plumber.html"><i>plumber</i>(4)</a> helps to connect the various Plan 9 programs together,
+    and fittings like <a href="../man1/web.html"><i>web</i>(1)</a> connect it to external programs such
+    as web browsers; one can click on a URL in <i>acme</i> and see the page
+    load in <i>Firefox</i>.<br>
+    <p><font size=+1><b>User-level file servers   </b></font><br>
+    In Plan 9, user-level file servers present file trees via the
+    Plan 9 file protocol, 9P. Processes can mount arbitrary file servers
+    and customize their own name spaces. These facilities are used
+    to connect programs. Clients interact with file servers by reading
+    and writing files. 
+    <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
+    
+    This cannot be done directly on Unix. Instead the servers listen
+    for 9P connections on Unix domain sockets; clients connect to
+    these sockets and speak 9P directly using the <a href="../man3/9pclient.html"><i>9pclient</i>(3)</a> library.
+    <a href="../man4/Intro.html"><i>Intro</i>(4)</a> tells more of the story. The effect is not as clean as
+    on Plan 9, but it gets the job done and still provides a uniform
+    and
+    easy-to-understand mechanism. The <a href="../man1/9p.html"><i>9p</i>(1)</a> client can be used in
+    shell scripts or by hand to carry out simple interactions with
+    servers.<br>
+    <p><font size=+1><b>External databases    </b></font><br>
+    Some programs rely on large databases that would be cumbersome
+    to include in every release. Scripts are provided that download
+    these databases separately. These databases can be downloaded
+    separately. See <tt><font size=+1>$PLAN9/dict/README</font></tt> and <tt><font size=+1>$PLAN9/sky/README</font></tt>.<br>
+    <p><font size=+1><b>Programming     </b></font><br>
+    The shell scripts <i>9c</i> and <i>9l</i> (see <a href="../man1/9c.html"><i>9c</i>(1)</a>) provide a simple interface
+    to the underlying system compiler and linker, similar to the <i>2c</i>
+    and <i>2l</i> families on Plan 9. <i>9c</i> compiles source files, and <i>9l</i> links
+    object files into executables. When using Plan 9 libraries, <i>9l</i>
+    infers the correct set of libraries from the object files, so
+    that no <tt><font size=+1>&#8722;l
+    </font></tt>options are needed. 
+    <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
+    
+    The only way to write multithreaded programs is to use the <a href="../man3/thread.html"><i>thread</i>(3)</a>
+    library. <a href="../man3/Rfork.html"><i>Rfork</i>(3)</a> exists but is not as capable as on Plan 9. There
+    are many unfortunate by necessary preprocessor diversions to make
+    Plan 9 and Unix libraries coexist. See <a href="../man3/intro.html"><i>intro</i>(3)</a> for details. 
+    <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
+    
+    The debuggers <a href="../man1/acid.html"><i>acid</i>(1)</a> and <a href="../man1/db.html"><i>db</i>(1)</a> and the debugging library <a href="../man3/mach.html"><i>mach</i>(3)</a>
+    are works in progress. They are platform-independent, so that
+    x86 Linux core dumps can be inspected on PowerPC Mac OS X machines,
+    but they are also fairly incomplete. The x86 target is the most
+    mature; initial PowerPC support exists; and other
+    targets are unimplemented. The debuggers can only inspect, not
+    manipulate, target processes. Support for operating system threads
+    and for 64-bit architectures needs to be rethought. On x86 Linux
+    systems, <i>acid</i> and <i>db</i> can be relied upon to produce reasonable
+    stack traces (often in cases when GNU <i>gdb</i> cannot) and
+    dump data structures, but that it is the extent to which they
+    have been developed and exercised.<br>
+    <p><font size=+1><b>Porting programs    </b></font><br>
+    The vast majority of the familiar Plan 9 programs have been ported,
+    including the Unicode-aware <a href="../man1/troff.html"><i>troff</i>(1)</a>. 
+    <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
+    
+    Of the more recent additions to Plan 9, the <a href="../man1/secstore.html"><i>secstore</i>(1)</a> client
+    has been ported, though <i>secstored</i> has not. <a href="../man1/Vac.html"><i>Vac</i>(1)</a> has been ported,
+    though <i>vacfs</i> has not. <i>Factotum</i> and <i>venti</i> are in progress. 
+    <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
+    
+    A backup system providing a dump file system built atop Venti
+    is also in progress.<br>
+    <p><font size=+1><b>Porting to new systems  </b></font><br>
+    Porting the tree to new operating systems or architectures should
+    be straightforward, as system-specific code has been kept to a
+    minimum. The largest pieces of system-specific code are <tt><font size=+1>&lt;u.h&gt;</font></tt>, which
+    must include the right system files and set up the right integer
+    type definitions, and <i>libthread</i>, which must implement
+    spin locks, operating system thread creation, and context switching
+    routines. Portable implementations of these using <tt><font size=+1>&lt;pthread.h&gt;</font></tt> and
+    <tt><font size=+1>&lt;ucontext.h&gt;</font></tt> already exist. If your system supports them, you may
+    not need to write any system specific code at all. 
+    <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
+    
+    There are other smaller system dependencies, such as the terminal
+    handling code in <a href="../man1/9term.html"><i>9term</i>(1)</a> and the implementation of <a href="../man3/getcallerpc.html"><i>getcallerpc</i>(3)</a>,
+    but these are usually simple and are not on the critical path
+    for getting the system up and running.<br>
+    
+</table>
+<p><font size=+1><b>SEE ALSO    </b></font><br>
+
+<table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td>
+
+    The rest of this manual describes Plan 9 from User Space. Many
+    of the man pages have been brought from Plan 9, but they have
+    been updated, and others have been written from scratch. 
+    <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
+    
+    The manual pages are in a Unix style tree, with names like <tt><font size=+1>$PLAN9/man/man1/cat.1</font></tt>
+    instead of Plan 9&#8217;s simpler <tt><font size=+1>$PLAN9/man/1/cat</font></tt>, so that the Unix
+    <a href="../man1/man.html"><i>man</i>(1)</a> utility can handle it. Some systems, for example Debian
+    Linux, deduce the man page locations from the search path, so
+    that adding <tt><font size=+1>$PLAN9/bin</font></tt> to
+    your path is sufficient to cause <tt><font size=+1>$PLAN9/man</font></tt> to be consulted for
+    manual pages using the system <i>man</i>. On other systems, or to look
+    at manual pages with the same name as a system page, invoke the
+    Plan 9 <i>man</i> directly, as in <tt><font size=+1>9 man cat</font></tt>. 
+    <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
+    
+    The manual sections follow the Unix numbering conventions, not
+    the Plan 9 ones. 
+    <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
+    
+    <a href="../man1">Section (1)</a> describes general publicly accessible commands. 
+    <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
+    
+    <a href="../man3">Section (3)</a> describes C library functions. 
+    <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
+    
+    <a href="../man4">Section (4)</a> describes user-level file servers. 
+    <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
+    
+    <a href="../man7">Section (7)</a> describes file formats and protocols. (On Unix, section
+    (5) is technically for file formats but seems now to be used for
+    describing specific files.) 
+    <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
+    
+    <a href="../man9">Section (9p)</a> describes the Plan 9 file protocol 9P.<br>
+    
+</table>
+<p><font size=+1><b>DIAGNOSTICS     </b></font><br>
+
+<table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td>
+
+    In Plan 9, a program&#8217;s exit status is an arbitrary text string,
+    while on Unix it is an integer. Section (1) of this manual describes
+    commands as though they exit with string statuses. In fact, exiting
+    with an empty status corresponds to exiting with status 0, and
+    exiting with any non-empty string corresponds to exiting with
+    status 1. See <a href="../man3/exits.html"><i>exits</i>(3)</a>.<br>
+    
+</table>
+
+<td width=20>
+<tr height=20><td>
+</table>
+<!-- TRAILER -->
+<table border=0 cellpadding=0 cellspacing=0 width=100%>
+<tr height=15><td width=10><td><td width=10>
+<tr><td><td>
+<center>
+<a href="../../"><img src="../../dist/spaceglenda100.png" alt="Space Glenda" border=1></a>
+</center>
+</table>
+<!-- TRAILER -->
+</body></html>
