source: trunk/source/doc/src/01-install.xml @ 8567

Last change on this file since 8567 was 8567, checked in by rme, 14 years ago

Break up monolithic openmcl-documentation.xml file into chapters. Add file
top.xml, which includes all the chapters via xi:xinclude.

File size: 26.8 KB
1<?xml version="1.0" encoding="utf-8"?>
2<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
5 <chapter><title>Obtaining, Installing, and Running OpenMCL</title>
7  <sect1><title>Releases and System Requirements</title>
9   <para>There are three active versions of OpenMCL.  Version 1.0 was
10   a stable release (released in late 2005); it is no longer under
11   active development.  Version 1.1 has been under active development
12   since shortly after 1.0 was released; it's been distributed as a
13   series of development "snapshots" and CVS updates.  1.1 snapshots
14   have introduced support for x86-64 platforms, internal use of
15   Unicode, and many other features, but have presented something of a
16   moving target.  Version 1.2 (being released in early 2008) is
17   intended to both a more stable and predictable release schedule and
18   to make it a bit easier for users who wish to track the "bleeding
19   edge" of development to do so.</para>
21      <para>Version 1.0 is available for three platform configurations:</para>
22      <itemizedlist>
23        <listitem>
24          <para>Linux on PowerPC (32-bit implementation)</para>
25        </listitem>
26        <listitem>
27          <para>Mac OS X on PowerPC (32-bit implementation)</para>
28        </listitem>
29        <listitem>
30          <para>Mac OS X on PowerPC (64-bit implementation)</para>
31        </listitem>
32      </itemizedlist>
34      <para>Versions 1.1 and 1.2 are available for five platform
35      configurations:</para>
36      <itemizedlist>
37        <listitem>
38          <para>Linux on PowerPC (32-bit and 64-bit implementations)</para>
39        </listitem>
40        <listitem>
41          <para>>Mac OS X on PowerPC (32-bit and 64-bit implementations)</para>
42        </listitem>
43        <listitem>
44          <para>Linux on X86-64 (64-bit implementation)</para>
45        </listitem>
46        <listitem>
47          <para>Mac OS X on X86-64 (64-bit implementation)</para>
48        </listitem>
49        <listitem><para>FreeBSD on X86-64 (64-bit implementation)</para></listitem>
50      </itemizedlist>
52      <para>A 64-bit version of OpenMCL requires a 64-bit processor
53      (obviously) running a 64-bit OS variant.</para>
55      <para>There are ongoing efforts to port OpenMCL to the Windows
56      operating system and 32-bit x86 processors.</para>
59      <para>Additional platform-specific information is given in the
60      following subsections.</para>
62      <sect2><title>LinuxPPC</title> 
64        <para>OpenMCL versions 1.0 and later run under relatively
65        recent versions of LinuxPPC. All versions of OpenMCL require
66        version 2.2.13 (or later) of the Linux kernel and version
67        2.1.3 (or later) of the GNU C library (glibc) at a bare
68        minimum.</para>
69      </sect2>
71      <sect2><title>LinuxX8664</title> 
73        <para>Version 1.1 and later of OpenMCL runs on relatively
74        recent Linux distributions for the x86-64 architecture.  It
75        requires a Linux with Thread Local Storage support in the
76        toolchain and standard libraries, and the New Posix Thread
77        Library (NPTL).  Fortunately, these features seem to be
78        present in all current Linux distributions for x86-64, though
79        there may be some problems with early Linux distributions for
80        x86-64.  (Some GCC versions older than 4.0 on Linux have been
81        known to have problems compiling some of the C code in the
82        kernel, some very old Linux distributions don't follow the
83        current ABI standards wrt segment register usage, some early
84        Linux kernels for x86-64 had problems mapping large regions of
85        the address space ... it's difficult to enumerate exactly what
86        versions of what Linux distributions have what problems.  A
87        rule of thumb is that - since much of the development of
88        OpenMCL for x86-64 took place in that time frame - Linux
89        distributions released earlier than early 2006 may have
90        problems running OpenMCL.) </para>
91      </sect2>
93      <sect2><title>FreeBSD-amd64</title>
94        <para>Versions 1.1 and later of OpenMCL runs on FreeBSD on
95        x86-64 (FreeBSD releases generally call the platform "and64")
96        OpenMCL should run under FreeBSD 6.0 or later; as of this
97        writing, FreeBSD 7.0 is about to be released and it may be
98        necessary for FreeBSD 7 users to install the "compat6x"
99        package in order to use a version of OpenMCL built on FreeBSD
100        6.x under FreeBSD 7.  .</para>
101      </sect2>
103      <sect2><title>DarwinPPC-MacOS-X</title>
105        <para> OpenMCL 1.0 runs on MacOS X versions 10.2, 10.3 and
106        10.4 on the PowerPC.</para>
108        <para>Current development on version 1.1 and later takes place
109        under OS X versions 10.4 and 10.5 and requires at least
110        version 10.3.9</para>
112        <para>The 64-bit DarwinPPC version of OpenMCL requires
113        functionality introduced in OSX 10.4 (namely, the ability to
114        run 64-bit binaries).  It also, obviously, requires a G5
115        processor.</para>
117        <para>OpenMCL hasn't been tested under Darwin proper, but
118        OpenMCL doesn't intentionally use any MacOS X features beyond
119        the Darwin subset and therefore it seems likely that OpenMCL
120        would run on PPC Darwin versions that correspond to recent OSX
121        versions.</para>
122      </sect2>
124      <sect2><title>Darwinx8664-MacOS-X</title>
125        <para>Versions 1.1 and later of OpenMCL runs on 64-bit
126        DarwinX86 (MacOS on Intel).</para>
128        <para>OpenMCL Darwinx8664/MacOS X requires a 64-bit processor.
129        All Macintoshes currently sold by Apple (as of early 2008) and
130        all Macintoshes introduced by Apple since August 2006 have
131        such processors.  However, the original MacBooks, MacBook Pros
132        and Intel iMacs (models introduced in early 2006) used 32-bit
133        Core Duo processors, and so OpenMCL will not (yet) run on
134        them.</para>
136      </sect2>
137    </sect1>
139    <sect1><title>Installation</title>
140      <para>Installing OpenMCL consists of</para>
141      <orderedlist> 
142        <listitem>
143          <para>Downloading an appropriate distribution of OpenMCL;</para>
144        </listitem>
145        <listitem>
146          <para>If necessary, extracting the archive somewhere on your
147          computer;</para>
148        </listitem>
149        <listitem>
150          <para>Configuring a shell script so OpenMCL can locate
151          necessary library files and other auxilliary files.</para>
152        </listitem>
153      </orderedlist>
155      <sect2><title>Downloading and untarring OpenMCL binary source
156      releases</title> <para> OpenMCL releases and snapshots are
157      distributed as tarballs (compressed tar archives).</para>
159      <para>Tarballs of version 1.0 for supported platforms are
160      available from the download page of the OpenMCL website.</para>
162      <para>Tarballs of the latest development snapshots of version
163      1.1, along with release notes, are available from the testing
164      directory on</para>
165      <para>Both the release and snapshot archives contain a directory
166      named <literal>ccl</literal>, which in turn contains a number of
167      files and subdirectories.  The <literal>ccl</literal> directory
168      can reside anywhere in the filesystem, assuming appropriate
169      permissions. If you wanted the <literal>ccl</literal> directory
170      to reside in <literal>``~/openmcl/ccl''</literal> and the
171      directory <literal>``~/openmcl/''</literal> already existed, you
172      could do anything equivalent to:</para>
173      <programlisting>
174shell&gt; cd ~/openmcl
175shell&gt; tar xvzf <emphasis>path-to-downloaded-openmcl-archive.tar.gz</emphasis>
176      </programlisting>
177      <para><emphasis>Important Note for Macintosh Users:</emphasis>
178      Double-clicking the archive in the Finder may work, but it also
179      may have unintended side-effects.  In some versions of the Mac
180      OS double-clicking an archive will invoke Stuffit, which may try
181      to replace linefeeds with carriage returns as it extracts
182      files. Also, tar can be used to merge the archive contents into
183      an existing <literal>ccl</literal> directory, whereas
184      double-clicking in the Finder will create a new directory named
185      <literal>ccl 2</literal> (or <literal>ccl 3</literal>, or...)
186      Bottom line is that you're better off using tar from the
187      shell.</para>
189      <para>Once the <literal>ccl</literal> directory is installed,
190      it's necessary to install and configure a shell script
191      distributed with OpenMCL before using it.</para>
192      </sect2>
194      <sect2><title>The-openmcl-Shell-Script"</title>
195      <para>OpenMCL needs to be able to find the
196      <literal>ccl</literal> directory in order to support features
197      such as <literal>require</literal> and
198      <literal>provide</literal>, access to foreign interface
199      information (see ) and the lisp build process (see
200      ). Specifically, it needs to set up logical pathname
201      translations for the <literal>"ccl:"</literal> logical host.  If
202      this logical host isn't defined (or isn't defined correctly),
203      some things might work, some things might not... and it'll
204      generally be hard to invoke and use OpenMCL productively.</para>
206        <para>OpenMCL uses the value of the environment variable
207        <literal>CCL_DEFAULT_DIRECTORY</literal> to determine the
208        filesystem location of the <literal>ccl</literal> directory;
209        the openmcl shell script is intended to provide a way to
210        invoke OpenMCL with that environment variable set
211        correctly.</para>
212        <para>There are two versions of the shell script:
213        <literal>"ccl/scripts/openmcl"</literal> is used to invoke
214        32-bit implementations of OpenMCL and
215        <literal>"ccl/scripts/openmcl64"</literal> is used to invoke
216        64-bit implementations.</para>
217        <para>To use the script:</para>
218        <orderedlist>
219          <listitem>
220            <para>Edit the definition of
221            <literal>CCL_DEFAULT_DIRECTORY</literal> near the
222            beginning of theshell script so that it refers to your ccl
223            directory.  Alternately,set
224            <literal>CCL_DEFAULT_DIRECTORY</literal> in your .cshrc,
225            .tcshrc, .bashrc,.bash_profile, .MacOSX/environment.plist,
226            or wherever you usually set environment variables.  If
227            there is an existing definition of thevariable, the
228            openmcl script will not override it.The shell script sets
229            a local variable (<literal>OPENMCL_KERNEL</literal>) to
230            the standard name of the OpenMCL kernel approprate for the
231            platform (asdetermined by 'uname -s'.) You might prefer to
232            set this variable manually in the shell script</para>
233          </listitem>
235          <listitem>
236            <para>Ensure that the shell script is executable, for
237            example:<literal>$ chmod +x
238            ~/openmcl/ccl/scripts/openmcl64</literal>This command
239            grants execute permission to the named script. If you
240            areusing a 32-bit platform, substitute "openmcl" in place
241            of "openmcl64".
242            <warning>
243              <para>The above command won't work if you are not the
244              owner of the installed copy of OpenMCL. In that case,
245              you can use the "sudo" command like this:</para>
246              <para><literal>$ sudo chmod +x
247              ~/openmcl/ccl/scripts/openmcl64</literal></para>
248              <para>Give your password when prompted.</para>
249              <para>If the "sudo" command doesn't work, then you are
250              not an administrator on the system you're using, and you
251              don't have the appropriate "sudo" permissions. In that
252              case you'll need to get help from the system's
253              administrator.</para>
254            </warning></para>
255          </listitem>
256          <listitem>
257            <para>Install the shell script somewhere on your shell's
258            search path</para>
259          </listitem>
260        </orderedlist>
262        <para>Once this is done, it should be possible to invoke
263        OpenMCL by typing <literal>openmcl</literal> at a shell
264        prompt:</para>
265        <programlisting>
266&gt; openmcl [args ...]
267Welcome to OpenMCL Version whatever (DarwinPPC32)!
270        <para>The openmcl shell script will pass all of its arguments
271        to the OpenMCL kernel.  See <xref linkend="Invocation"/> for
272        more information about "args".  When invoked this way, the
273        lisp should be able to initialize the
274        <literal>"ccl:"</literal> logical host so that its
275        translations refer to the <literal>"ccl"</literal>
276        directory. To test this, you can call
277        <literal>probe-file</literal> in OpenMCL's read-eval-print
278        loop:</para>
279        <programlisting>
280? (probe-file "ccl:level-1;level-1.lisp")  ;will return the physical pathname of the file
283      </sect2>
284      <sect2 id="Invocation">
285        <title>Invocation</title>
286        <para>Assuming that the shell script is properly installed, it can be used to invoke OpenMCL from a shell prompt:
287        <programlisting>
288shell&gt;<replaceable>ccl</replaceable> <emphasis>args</emphasis>
289        </programlisting>
290        <literal>ccl</literal> will run a 32-bit session;
291        <literal>ccl64</literal> will run a 64-bit session.
292        </para>
293      </sect2>
294      <sect2 id="Personal-Customization-with-the-Init-File">
295        <title>Personal Customization with the Init File</title>
296        <para>By default OpenMCL will try to load the file
297        <literal>"home:openmcl-init.lisp"</literal> or the compiled
299        <literal>"home:openmcl-init.fasl"</literal> upon starting
300        up. It does this by executing <literal>(load
301        "home:openmcl-init")</literal>.  If it is unable to load the
302        file (for example because it does not exist) no action is
303        taken; an error is not signalled.</para>
304        <para>The <literal>"home:"</literal> prefix to the filename is
305        a Common Lisp logical host, which OpenMCL initializes to refer
306        to your home directory, so this looks for either of the files
307        <literal>~/openmcl-init.lisp</literal> or
308        <literal>~/openmcl-init.fasl</literal>.</para>
309        <para>Since the init file is loaded the same way as normal
310        Lisp code is, you can put anything you want in it.  For
311        example, you can change the working directory, and load
312        packages which you use frequently.</para>
313        <para>To suppress the loading of this init-file, invoke OpenMCL with the
314<literal>--no-init</literal> option.</para>
315      </sect2>
317      <sect2 id="Some--hopefully--useful-options">
318        <title>Some (hopefully) useful options</title>
319        <para> The exact set of command-line arguments accepted by
320        OpenMCL may vary slightly from release to release;
321        <literal>openmcl --help</literal> will provide a definitive
322        (if somewhat terse) summary of the options accepted by the
323        current implementation and then exit. Some of those options
324        are described below.</para>
325        <itemizedlist>
326          <listitem>
327            <para>-S (or --stack-size). Specify the size of the initial process
328            stack.</para>
329          </listitem>
331          <listitem>
332            <para>-b (or --batch). Execute in &#34;batch mode&#34;. End-of-file
333            from *STANDARD-INPUT* will cause OpenMCL to exit, as will attempts to
334            enter a break loop.</para>
335          </listitem>
337          <listitem>
338            <para>-n (or --no-init). If this option is given, the init file
339            is not loaded.  This is useful if OpenMCL is being invoked by a
340            shell script which should not be affected by whatever
341            customizations a user might have in place.
342            </para>
343          </listitem>
345          <listitem>
346            <para>-e &#60;form&#62; (or --eval &#60;form&#62;). An expression is
347            read (via READ-FROM-STRING from the string &#60;form&#62; and
348            evaluated. If &#60;form&#62; contains shell metacharacters, it may be
349            necessary to escape or quote them to prevent the shell from
350            interpreting them.</para>
351          </listitem>
353          <listitem>
354            <para>-l &#62;path&#62; (or --load &#60;path&#62;). Executes (load
355            &#34;&#60;path&#62;&#34;).</para>
356          </listitem>
357        </itemizedlist>
359        <para>The <literal>--load</literal> and
360        <literal>--eval</literal> options can each be provided
361        multiple times.  They're executed in the order specified on
362        the command line, after the init file (if there is one) is
363        loaded and before the toplevel read-eval-print loop is
364        entered.</para>
365      </sect2>
366    </sect1>
368    <sect1 id="Using-OpenMCL-with-GNU-Emacs-and-SLIME">
369      <title>Using OpenMCL with GNU Emacs and SLIME</title>
370      <para>A very common way to use OpenMCL is to run it within the
371      GNU Emacs editor, using a Lisp interface called SLIME ("Superior
372      Lisp Interaction Mode for Emacs"). SLIME is an Emacs package
373      designed to provide good support within Emacs for any of several
374      Common Lisp implementations; one of the supported
375      implementations is OpenMCL. This page describes how you can
376      download SLIME and set it up to work with your OpenMCL
377      installation.</para>
378      <para>Why use SLIME? With SLIME, you can do the following things from within
379an Emacs editing session:</para>
380      <itemizedlist>
381        <listitem><para>run and control Lisp</para></listitem>
382        <listitem><para>evaluate, compile, and load files or expressions</para></listitem>
383        <listitem><para>macroexpand expressions</para></listitem>
384        <listitem><para>fetch documentation and source code for Lisp symbols</para></listitem>
385        <listitem><para>autocomplete symbols and package names</para></listitem>
386        <listitem><para>cross-reference function calls</para></listitem>
387        <listitem><para>examine stack traces and debug errors</para></listitem>
389      </itemizedlist>
390      <para>There is an excellent SLIME tutorial video available at  For
392complete information about SLIME, see the
393SLIME home page.</para>
395      <sect2 id="Assumptions-and-Requirements">
396        <title>Assumptions and Requirements</title>
397        <para>In order to simplify these instructions, we'll make
398        several assumptions about your system. Specifically, we
399        assume:</para>
400        <itemizedlist>
401          <listitem>
402            <para>You have a working installation of GNU Emacs. If you
403            don't have a working copy of GNU Emacs, see the web page on
404            obtaining Emacs.  If you prefer to use XEmacs instead of
405            GNU Emacs,these instructions should still work; SLIME
406            supports XEmacs Version21. Mac OS X includes an Emacs
407            installation.  If you want to look into different versions,
408            you can check out theEmacsWiki, whichmaintains a
409            page,EmacsForMacOS,that provides much more information
410            about using Emacs on the Mac.
411            <warning>
412              <para>A popular version of Emacs among Mac users is
413              Aquamacs. This application is a version of GNU Emacs
414              with a number of customizations meant to make it behave
415              more like a standard Maciontosh application, with
416              windows, a menubar, etc.  Aquamacs includes SLIME; if
417              you like Aquamacs then you can use SLIME right away,
418              without getting and installing it separately. You just
419              need to tell SLIME where to find your installation of
420              OpenMCL. (See FIXTHIS.)</para>
421            </warning>
422          </para>
423          </listitem>
424          <listitem>
425            <para>You have a working copy of OpenMCL, installed in
426            <literal>"~/openmcl/ccl"</literal>If you prefer to install
427            OpenMCL in some directory other
428            than<literal>"~/openmcl/ccl"</literal> then these
429            instructions still work, but you must remember to use your
430            path to your ccl directory instead of theone that we give
431            here.</para>
432          </listitem>
433          <listitem>
434            <para>You install emacs add-ons in the folder
435            <literal>"~/emacs/site/"</literal>If this directory
436            doesn't exist on your system, you can just create it.If
437            you prefer to install Emacs add-ons in some place other
438            than<literal>"~/emacs/site/"</literal> then you must
439            remember to use your path toEmacs add-ons in place of
440            ours.</para>
441          </listitem>
443        </itemizedlist>
444      </sect2>
446      <sect2 id="Getting_Slime"><title>Getting SLIME</title>       
448        <para>You can get SLIME from the SLIME Home Page. Stable
449        releases and CVS snapshots are available as archive files, or
450        you can follow the instructions on the SLIME Home Page to
451        check out the latest version from their CVS repository.</para>
453        <para>It's worth noting that stable SLIME releases happen very
454        seldom, but the SLIME developers often make changes and
455        improvements that are available through CVS updates. If you
456        asked the SLIM developers, they would most likely recommend
457        that you get SLIME from their CVS repository and update it
458        frequently.</para>
460        <para>Whether you get it from CVS, or download and unpack one
461        of the available archives, you should end up with a folder
462        named "slime" that contains the SLIME distribution.</para>
463      </sect2>
465      <sect2><title>Installing SLIME</title> 
467        <para>Once you have the "slime" folder described in the
468        previous section,installation is a simple matter of copying
469        the folder to the proper place. You can drag it into the
470        "~/emacs/site/" folder, or you can use a terminal command to
471        copy it there. For example, assuming your working directory
472        contains the unpacked "slime" folder:</para> <para><literal>$
473        cp -R slime ~/emacs/site/</literal></para> <para>That's all it
474        takes.</para>
476      </sect2>
478      <sect2 id="Telling-Emacs-About-SLIME">
479        <title>Telling Emacs About SLIME</title>
480        <para> Once SLIME and OpenMCL are installed, you just need to
481        add a line to your "~/.emacs" file that tells SLIME where to
482        find the script that runs OpenMCL:</para>
483        <para><literal>(setq inferior-lisp-program "~/openmcl/ccl/scripts/openmcl64")</literal></para>
484        <para>or</para>
485        <para><literal>(setq inferior-lisp-program "~/openmcl/ccl/scripts/openmcl")</literal></para>
486        <warning>
487          <para>Aquamacs users should add this line to the file "~/Library/Preferences/Aquamacs Emacs/Preferences.el".</para>
488        </warning>
489      </sect2>
491      <sect2 id="Running-OpenMCL-with-SLIME">
492        <title>Running OpenMCL with SLIME</title>
493        <para>Once the preparations in the previous section are
494        complete, exit Emacs and restart it, to ensure that it reads
495        the changes you made in your ".emacs" file (alternatively, you
496        could tell Emacs to reload the ".emacs" file). If all went
497        well, you should now be ready to run OpenMCL using
498        SLIME.</para>
499        <para>To run OpenMCL, execute the command "M-x slime". SLIME
500        should start an OpenMCL session in a new buffer.  (If you are
501        unfamiliar with the Emacs notation "M-x command", see the GNU
502        Emacs FAQ; specifically, take a look at questions 1, 2, and
503        128.)</para>
504      </sect2>
506      <sect2 id="What-if-a-New-Version-of-OpenMCL-Breaks-SLIME-">
507        <title>What if a New Version of OpenMCL Breaks SLIME?</title>
508        <para>Sometimes you'll get a new version of OpenMCL, set up
509        Emacs to use it with SLIME, and SLIME will fail. Most likely
510        what has happened is that the new version of OpenMCL has a
511        change in the output files produced by the compiler (OpenMCL
512        developers will say "the fasl version has changed." fasl
513        stands for "fast load" aka compiled files). This
514        problem is easy to fix: just delete the existing SLIME fasl
515        files. The next time you launch Emacs and start SLIME, it will
516        automatically recompile the Lisp files, and that should fix
517        the problem.</para>
518        <para>SLIME's load process stores its fasl files in a hidden
519        folder inside your home folder. The path is</para>
520        <para><literal>~/.slime/fasl</literal></para>
521        <para>You can use a shell command to remove the fasl files, or
522        remove them using your system's file browser.</para>
523        <screen><emphasis role="bold">Note for Macintosh Users:</emphasis> 
524        The leading "." character in the ".slime" folder's name
525        prevents the Finder from showing this folder to you. If you
526        use the "Go To Folder" menu item in the Finder's "Go" menu,
527        you can type in "~/.slime" and the Finder will show it to
528        you. You can then drag the "fasl" folder to the trash.
529        </screen>
530      </sect2>
532      <sect2 id="Known-Bugs">
533        <title>Known Bugs</title>
534        <para>SLIME has not been updated to account for recent changes
535        made in OpenMCL to support x86-64 processors. You may run into
536        bugs running on those platforms.</para>
537        <para>The SLIME backtrace sometimes shows incorrect information.</para>
538        <para><literal>return-from-frame</literal> and
539        <literal>apply-in-frame</literal> do not work reliably.  (If
540        they work at all, it's pure luck.)</para>
541        <para>Some versions of Emacs on the Macintosh may have trouble
542        finding the shell script that runs OpenMCL unless you specify
543        a full path to it. See the above section "Telling Emacs About
544        SLIME" to learn how to specify the path to the shell
545        script.</para>
546        <para>For more help with OpenMCL on Mac OS X, consult the
547        OpenMCL mailing lists.</para>
548      </sect2>
549    </sect1>
551    <sect1 id="Example-Programs">
552      <title>Example Programs</title>
553      <para>Beginning with release 0.9, a number (ok, a
554      <emphasis>small</emphasis> number, at least initially) of
555      example programs are distributed in the "ccl:examples;"
556      directory of the source distribution. See the
557      README-OPENMCL-EXAMPLES text file in that directory for
558      information about prerequisites and usage.</para>
559      <para>Some of the example programs are derived from C examples
560      in textbooks, etc.; in those cases, the original author and work
561      are cited in the source code.</para>
562      <para>It may be a stretch to imply that the examples have a
563      great deal of value as "intellectual property", but I might as
564      well say this: Unless the original author or contributor claims
565      other rights, you're free to incorporate any of this example
566      code or derivative thereof in any of you're own works without
567      restriction. In doing so, you agree that the code was provided
568      "as is", and that no other party is legally or otherwise
569      responsible for any consequences of your decision to use
570      it.</para>
571      <para>If you've developed OpenMCL examples that you'd like to
572      see added to the distribution, please send mail to let me
573      know. Any such contributions would be welcome and appreciated
574      (as would bug fixes and improvements to the existing
575      examples.)</para>
576    </sect1>
577  </chapter>
Note: See TracBrowser for help on using the repository browser.