summaryrefslogtreecommitdiff
path: root/web/funnelAC/userman
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /web/funnelAC/userman
Initial commit
Diffstat (limited to 'web/funnelAC/userman')
-rw-r--r--web/funnelAC/userman/u_ch0.tex197
-rw-r--r--web/funnelAC/userman/u_ch1.tex1800
-rw-r--r--web/funnelAC/userman/u_ch2.tex1586
-rw-r--r--web/funnelAC/userman/u_ch3.tex2986
-rw-r--r--web/funnelAC/userman/u_ch4.tex468
-rw-r--r--web/funnelAC/userman/u_ch5.tex387
-rw-r--r--web/funnelAC/userman/u_cha.tex228
-rw-r--r--web/funnelAC/userman/u_manual.aux202
-rw-r--r--web/funnelAC/userman/u_manual.dvibin0 -> 442412 bytes
-rw-r--r--web/funnelAC/userman/u_manual.idx1020
-rw-r--r--web/funnelAC/userman/u_manual.log188
-rw-r--r--web/funnelAC/userman/u_manual.ps9876
-rw-r--r--web/funnelAC/userman/u_manual.sin1020
-rw-r--r--web/funnelAC/userman/u_manual.tex290
-rw-r--r--web/funnelAC/userman/u_manual.toc166
15 files changed, 20414 insertions, 0 deletions
diff --git a/web/funnelAC/userman/u_ch0.tex b/web/funnelAC/userman/u_ch0.tex
new file mode 100644
index 0000000000..ff8b3cca58
--- /dev/null
+++ b/web/funnelAC/userman/u_ch0.tex
@@ -0,0 +1,197 @@
+%==============================================================================%
+% Start of Ch0.tex %
+%==============================================================================%
+%
+% Copyright
+% ---------
+% Copyright (C) 1992 Ross N. Williams.
+% This file contains a chapter of the FunnelWeb User's Manual.
+% See the main TeX file for this manual for further information.
+%
+%==============================================================================%
+
+\vbox{\relax}
+\vfill
+
+\hrule
+
+\medskip
+
+Copyright \copyright{} 1992 Ross~N.~Williams.
+\xn{Ross}{Williams}\xx{copyright}{notice}
+
+Permission is granted to make and distribute verbatim copies of this manual
+provided that the copyright notice and this permission notice are preserved
+on all copies.\note{This paragraph was copied from the GNU Emacs manual to
+avoid my having to get a legal opinion on something I could cook up.}
+
+\medskip
+
+\hrule
+
+\newpage
+
+%==============================================================================
+
+\tableofcontents
+
+\newpage
+
+%==============================================================================
+
+%I am not using LaTeX's figures and tables numbering so these are commented out.
+%\pseudochapter{List of Figures}
+%\pseudochapter{List of Tables}
+
+%==============================================================================
+
+% No forward.
+%\pseudochapter{Foreword}
+%\x{foreword}
+
+%==============================================================================
+
+\pseudochapter{Preface}
+\x{preface}
+
+When, in 1986, I first read Donald Knuth's\xn{Donald}{Knuth}
+technical report on Web\paper{Knuth83},\x{Web} and
+tried Web out, I was simultaneously excited by Knuth's idea of literate
+programming, and disappointed by his implementation of it. I was excited
+because I could sense the potential for
+the literate style to transform the state of mind of the programmer, but was
+disappointed by Web's rigidity
+and lack of practicality, which seemed to betray this potential.
+The Web I used was Pascal-specific, \TeX{}-specific, and applied too
+many constraints to the programming process.
+In particular, it insisted on taking control of the
+program text, mangling the code in the Pascal output files,
+and imposing its own rather rigid ideas about indenting in the \TeX{} output.
+All this, combined with the complexity of the tool, led me
+to come to perceive Web as problem rather than solution.
+
+Despite all this, I was well and truly hooked on the idea of literate
+programming. The inevitable result was that I designed and implemented
+my own version of Web --- FunnelWeb!
+
+FunnelWeb is not the most sophisticated literate programming tool available,
+but it is an extremely \i{practical} tool, striving for simplicity
+and portability in all areas. Not only is FunnelWeb language-independent,
+and to some extent typesetter independent, but its implementation also
+stresses portability, being written in~C, and currently operating on four
+major platforms (Sun, Vax, PC, Mac). FunnelWeb allows the
+programmer total control over the output file, making it suitable
+for use with all sorts of format-sensitive languages. It also allows
+control over its own source code, which has been released under a
+GNU license.\xx{GNU}{license}
+FunnelWeb is quite solid, having to pass
+a regression testing suite of over 200 tests
+before being released. Finally, FunnelWeb is well documented by this manual
+which provides a tutorial, advanced hints, and a language definition.
+
+I would like to dedicate FunnelWeb and this manual to Donald Knuth
+and his literate programming tool Web.
+Although this manual is somewhat critical of some aspects of
+Web, this criticism is really a product of differing design goals.
+Knuth designed a paradigm (literate programming) and a tool
+(Web) aimed at the highest pitch of program presentation and typesetting.
+FunnelWeb aims lower, relaxing constraints, and making compromises
+in order to achieve simplicity, flexibility, and portability.
+The result is a practical tool which I hope will attract more people to
+the literate style.
+
+\bigskip
+
+\leftline{\b{Ross~N.~Williams}}
+\leftline{\b{Adelaide, Australia}}
+\leftline{\b{May~1992}}
+
+%==============================================================================
+
+\pseudochapter{Acknowledgements}
+\x{acknowledgements}
+
+Many thanks to \b{David Hulse}\xn{David}{Hulse}
+(\p{dave@cs.adelaide.edu.au}) for
+translating the original version of FunnelWeb
+(FunnelWeb~V1) from Ada\x{Ada} into~C
+and getting it to work on Unix and a PC.
+The C code written by David (FunnelWeb~V2) formed
+the basis of FunnelWeb~V3, but was
+entirely rewritten during the intensive refinement and feature-injection
+period leading up to this release (FunnelWeb~V3 is about three times
+the size of FunnelWeb~V2).
+Nevertheless, without this important first translation step,
+I would probably not have found the motivation to develop FunnelWeb to its
+present state.
+
+Thanks go to \b{Simon Hackett}\xn{Simon}{Hackett}
+(\p{simon@internode.com.au}) of Internode Systems
+Pty Ltd for the use of his Sun, Mac, and PC, for assistance in porting
+FunnelWeb to the Sun and PC, and for helpful discussions.
+
+Thanks go to \b{Jeremy Begg}\xn{Jeremy}{Begg}
+(\p{jeremy@vsm.com.au}) of VSM Software Services
+for the use of his VAX, and for assistance with the VMS-specific code.
+
+Thanks to \b{Barry Dwyer}\xn{Barry}{Dwyer} (\p{dwyer@cs.adelaide.edu.au})
+and \b{Roger Brissenden}\xn{Roger}{Brissenden} (\p{rjb@koala.harvard.edu})
+for trying out FunnelWeb Version~1 in 1987 and providing valuable feedback.
+
+Thanks to Donald Knuth\xn{Donald}{Knuth}
+for establishing the idea of literate programming in the first place.
+
+\bigskip
+
+\leftline{\b{Ross~N.~Williams}}
+\leftline{\b{Adelaide, Australia}}
+\leftline{\b{May~1992}}
+
+%==============================================================================
+
+\pseudochapter{Presentation Notes}
+\x{presentation notes}
+
+\thing{References:} All references are set in bold and are
+cited in square brackets in the form
+\b{[}$<$\i{firstauthor}$><$\i{year}$>$\b{]}.
+All references cited in the text appear in the reference list and the index.
+
+\thing{Special terms:} New or important terminology has been set in bold
+face and appears in the index. A glossary appears as an appendix.
+
+\thing{Typesetting:} This\x{typesetting}
+document was prepared by the author using Andrew
+Trevorrow's\xn{Andrew}{Trevorrow} (\p{akt150@cscgpo.anu.edu.au})\checked{}
+implementation (OzTeX\x{OzTeX}) of the
+\TeX{}/\LaTeX{}\paper{Knuth84}\paper{Lamport86}\x{TeX}\x{LaTeX}
+typesetting system running on a Macintosh-SE.\x{Macintosh}
+
+\thing{Graphics:} All diagrams have been constructed out of text using
+the \LaTeX{} \p{verbatim} environment so as to allow this document to
+be disseminated electronically and printed using \LaTeX{} without access
+to the author's drawing tools.
+
+%%%%Put this paragraph back again if I insert any \fix footnotes again.
+%\thing{Correction footnotes:} Footnotes\x{footnotes}
+%commencing with dots ($\bullet$) are
+%notes to remind the author about something in the document that must be
+%attended to.\fix{This is an example of such a footnote.} These footnotes
+%will be attended to and eliminated in later versions.
+
+\thing{Known typesetting problems:} While every attempt has been made
+to give a good presentation within the
+time available, some shortcuts have had to be taken. In particular, the author
+has
+been unable to work out how to get \LaTeX{} to suppress blank pages at the
+start of chapters.
+
+%==============================================================================
+
+% No abstract.
+%\pseudochapter{Abstract}
+%\x{abstract}
+
+%==============================================================================%
+% End of Ch0.tex %
+%==============================================================================%
diff --git a/web/funnelAC/userman/u_ch1.tex b/web/funnelAC/userman/u_ch1.tex
new file mode 100644
index 0000000000..947fd2326b
--- /dev/null
+++ b/web/funnelAC/userman/u_ch1.tex
@@ -0,0 +1,1800 @@
+%==============================================================================%
+% Start of Ch1.tex %
+%==============================================================================%
+%
+% Copyright
+% ---------
+% Copyright (C) 1992 Ross N. Williams.
+% This file contains a chapter of the FunnelWeb User's Manual.
+% See the main TeX file for this manual for further information.
+%
+%==============================================================================%
+
+\chapter{A Tutorial Introduction}
+\label{chapintroduction}
+\x{tutorial}
+
+\section{What is Literate Programming?}
+\x{literate programming}
+
+A traditional computer program consists of a text file containing program
+code. Scattered in amongst the program code are comments which describe the
+various parts of the code.
+
+In \newterm{literate programming} the emphasis is reversed. Instead of
+writing code containing documentation, the literate programmer writes
+documentation containing code. No longer does the English commentary
+injected into a program have to be hidden in
+comment delimiters at the top of the
+file, or under procedure headings, or at the end of lines.
+Instead, it is wrenched into the daylight and made the main focus.
+The \dq{program} then becomes primarily a document directed at humans,
+with the code being herded between \dq{code delimiters} from where it
+can be extracted and shuffled out sideways to the language system
+by literate programming tools.
+
+The effect of this simple shift of emphasis can be so
+profound as to change one's whole approach to programming. Under the
+literate programming paradigm, the central activity of programming becomes
+that of conveying meaning to other intelligent beings rather than merely
+convincing the computer to behave in a particular way. It is the difference
+between performing and exposing a magic trick.\x{magic trick}
+
+In order to program in a literate style, particular tools are
+required.\xx{tools}{literate programming}
+The traditional approach (used in the FunnelWeb system) is to have
+some sort of text-file-in/text-file-out utility that reads a
+literate program (containing a program commentary peppered with scraps
+of program text) and writes out a file containing all the program code and
+a file containing typesetter commands representing the entire input document,
+documentation, code, and all (\figarchitecture{}).
+
+\begin{figure}[htbp]
+\begin{verbatim}
+
+ +-----------------------------------------+
+ | File containing the program description |
+ | peppered with scraps of program code. |
+ | This is what the programmer works on. |
+ | (e.g. sloth.web) |
+ +-----------------------------------------+
+ |
+ v
+ o---------------------------o
+ | Literate Programming Tool |
+ o---------------------------o
+ |
+ +-------------------+-------------------+
+ | |
+ v v
+ +------------------+ +----------------------------------+
+ | Traditional | | Documentation file suitable for |
+ | Computer Program | | input into a typesetting program |
+ | (e.g. sloth.c) | | (e.g. sloth.tex) |
+ +------------------+ +----------------------------------+
+
+\end{verbatim}
+\mylabel{\figarchitecture{}: Traditional architecture of literate programming tools.}{%
+%
+Literate programming tools could be organized in a number of ways. However,
+to fit in with current file and command line based environments, most tools
+conform to the traditional architecture shown here in which the user feeds
+in a file containing a literate program, and the literate programming
+utility generates program files and a documentation file.
+%
+}
+\end{figure}
+
+Given the coming age of hypertext\x{hypertext} systems,
+this is probably not the best approach.
+However, it does mesh beautifully with current text
+files and command line interfaces, the expectation of linear presentations in
+the documents we read, and the particular requirements of current programming
+languages and typesetting systems. It is certainly not a bad approach.
+
+With this structure in place, the literate programming system can provide
+far more than just a reversal of the priority of comments and code.
+In its full blown form, a good literate programming facility can provide
+total support for the essential thrust of literate programming, which is that
+computer programs should be written more for the human reader
+than for the compiler. In particular, a literate programming system can
+provide:\xs{literate programming}{facilities}
+
+\narrowthing{Re-ordering of code:}{Programming languages often force the
+programmer to give the various parts of a computer program in a particular
+order.\xx{program}{ordering}
+For example, the Pascal\x{Pascal} programming language\paper{BSI82}
+imposes the ordering:
+constants, types, variables, procedures, code. Pascal also requires that
+procedures appear in an order consistent with the partial ordering
+imposed by the static call graph (but forward
+declarations allow this to be bypassed). In contrast, the literate style
+requires that the programmer be free to present the computer program in
+any order whatsoever. The facility to do this is implemented in literate
+programming tools by providing text \i{macros} that can be defined
+and used in any order.}
+
+\narrowthing{Typeset code and documentation:}{Traditionally program
+listings are
+dull affairs consisting of pages of fan-form paper imprinted with meandering
+coastlines of structured text in a boring font. In contrast, literate
+programming systems are capable of producing documentation that is
+superior in two ways. First, because most of the documentation text is
+fed straight to the typesetter, the programmer can make use of all the
+power of the underlying typesetter, resulting in documentation that has the
+same presentation as an ordinary typeset document. Second, because the
+literate programming utility sees all the code, it can use its knowledge
+of the programming language and the features of the typesetting language
+to typeset the program code as if it were appearing in a
+technical journal. It is the difference
+between:}
+
+\begin{verbatim}
+ while sloth<walrus loop
+ sloth:=sloth+1;
+ end loop
+\end{verbatim}
+
+\narrowtext{and}
+
+\begin{verse}
+\b{while} \i{sloth}$<$\i{walrus} \b{loop}\\
+\qquad\qquad \i{sloth}$\leftarrow$\i{sloth}$+1$;\\
+\b{end} \b{loop}
+\end{verse}
+
+\narrowtext{Unfortunately, while FunnelWeb provides full typesetting
+of the
+documentation, it typesets all of its code in the style of the first of these
+two examples. To typeset in the style of the second requires knowledge of
+the programming language, and the current version of FunnelWeb is
+programming language independent. At a later stage, it is possible that
+FunnelWeb will be modified to read in a file containing information
+about the target programming language to be used to assist in
+typesetting the code properly.}
+
+\narrowthing{Cross referencing:}{Because\x{cross referencing}
+the literate tool sees all the
+code and documentation, it is able to generate extensive cross referencing
+information in the typeset documentation. This makes the printed program
+document more easy to navigate and partially compensates for the lack of
+an automatic searching facility when reading printed documentation.}
+
+In the end, the details don't matter. The most significant
+benefit that literate programming offers
+is \i{its capacity to transform the state of mind of the
+programmer}.\xs{literate programming}{most significant benefit}
+It is now legend that the act of explaining something can transform
+one's understanding of it. This is one of the justifications behind the
+powerful combination of research and teaching in
+universities\paper{Rosovsky90}.\x{universities}
+Similarly, by constantly explaining the unfolding program code in English to an
+imaginary reader, the programmer transforms his perception of the code,
+laying it open, prone, to the critical eye.\xx{explaining}{code}
+
+The result of this exposure is a higher quality of programming.
+When exposed to the harsh light of the literate eye,
+bugs crawl out, special cases vanish, and sloppy code evaporates.
+As a rule literate programs
+take longer to write than ordinary programs, but the total
+development time\xx{development}{time}
+is the same or less because the time taken to write and
+document the program carefully is compensated for by a reduced debugging
+and maintenance time.
+Thus literate programming does not merely assist in the preparation of
+documentation, but also makes significant contributes to the process of
+programming itself. In practice this has turned out to be a contribution
+far more important than the mere capacity to produce typeset documentation.
+
+For more information on literate programming, the reader is directed
+to Knuth's early founding work \paper{Knuth83} and \paper{Knuth84}.
+For more recent information refer to \paper{Smith91},
+which provides a comprehensive bibliography up to 1990.
+
+\section{What is FunnelWeb?}
+\xx{FunnelWeb}{overview}
+
+FunnelWeb is a particular literate programming system that is implemented
+by a single C program. FunnelWeb takes as input a single \p{.fw}
+\newterm{input file}
+and writes one or more \newterm{product files}
+and a \newterm{documentation file} (\figfunarch{}).
+
+\begin{figure}[htbp]
+\begin{verbatim}
+ +-----------+
+ | sloth.fw |
+ +-----------+
+ |
+ v
+ o-------------------o
+ | FUNNELWEB Program |
+ o-------------------o
+ |
+ +-------------------+----------------+
+ | |
+ v v
+ +-----------------------------+ +--------------------------------+
+ | Product File (e.g. sloth.c) | | Documentation File (sloth.tex) |
+ +-----------------------------+ +--------------------------------+
+\end{verbatim}
+\mylabel{\figfunarch{}: Architecture of FunnelWeb.}{%
+%
+FunnelWeb follows the traditional architecture of literate programming
+tools.
+%
+}
+\end{figure}
+
+In literate programming systems, it is usual to refer to the product
+file as a \dq{program file}. However, as FunnelWeb is a general tool that
+can be used to prepare all sorts of text files that are not computer programs,
+the more generic term \dq{product file} was chosen. Product files should
+be carefully distinguished from the term \newterm{output files} which refers
+to all of the output files produced by FunnelWeb.
+
+FunnelWeb is distinguished by the following characteristics:
+
+\narrowthing{Simplicity:}{A\x{simplicity}
+governing design goal of FunnelWeb is to provide
+a \i{simple} tool that could be easily learnt and completely mastered.
+This manual is thick because it is comprehensive and lingers on the
+ways in which FunnelWeb can be used. The tool itself is quite simple.}
+
+\narrowthing{Reliability:}{Another\x{reliability}
+design goal is to provide a tool that will
+protect the user as much as possible from silly errors. Macro preprocessors
+are notorious for causing obscure errors. Every attempt has been made in
+FunnelWeb to keep the syntax robust.
+For example, in FunnelWeb the syntax of
+macro calls has been purposely designed to be highly visible so that the
+reader is always aware when the macro facility is being invoked.}
+
+\narrowthing{Language and Typesetter Independence:}{Unlike
+Knuth's original\xx{language}{independence}\xx{typesetter}{independence}
+Web system which was specific to the Pascal programming language\paper{BSI82}
+and the \TeX{} typesetting language\paper{Knuth84}, FunnelWeb strives to
+be language and typesetter independent. The current version of FunnelWeb
+is completely language independent, but is still somewhat dependent on the
+\TeX{}\x{TeX} typesetter language.}
+
+\narrowthing{Portability:}{FunnelWeb\x{portability} has been written in
+the~C programming language with great emphasis on portability.
+FunnelWeb currently runs on the Sun, VAX, IBM PC, and Mac.}
+
+\narrowthing{Controllable:}{FunnelWeb\x{controllability}
+is an extremely controllable tool.
+To protect users' investment in source files constructed in the FunnelWeb
+macro language, the C source code to FunnelWeb has been released under GNU
+license.\xx{GNU}{license}
+This means that it will always be available to everyone. Furthermore,
+license has been granted for the FunnelWeb User's Manual and FunnelWeb
+Hacker's Manual to be copied freely so long as they are not modified. All
+this means that FunnelWeb is not going to disappear suddenly.}
+
+\narrowthing{A Production Tool:}{Above\x{production tool}
+all, FunnelWeb has been designed to be
+a production tool and every effort has been made to ensure that it will
+operate effectively in a professional environment. FunnelWeb is \dq{open}
+and portable. There is a comprehensive user manual. Its error messages
+are comprehensive. It is fast. Finally, it has been designed with the
+experience of three years of using FunnelWeb~V1.}
+
+For more information on the history and design of FunnelWeb, see
+the \i{FunnelWeb Hacker's Manual}.
+
+\section{The Name FunnelWeb}
+\xx{FunnelWeb}{name}
+
+The name \dq{FunnelWeb} was chosen because it contains the name \dq{WEB},
+which is the name of Knuth's system. It was also chosen because it
+has a distinctly Australian flavour.
+
+Funnel-web spiders\xx{Funnel-web}{spider}
+are found in Northern and Eastern Australia. They are
+about three to four centimetres long and are very poisonous. The
+Sydney\x{Sydney}
+Funnel-web spider (\i{Atrax robustus}\x{Atrax robustus}),
+common in Sydney,
+has caused the most trouble and has been responsible for several deaths.
+Funnel-web spiders love to crawl into temporarily discarded shoes where they
+later react in a hostile manner to an unsuspecting foot. They are known
+to hang on once they sink their fangs in. Funnel-web spiders derive
+their name from the shape of their webs which are horizontally-aligned
+narrowing tubes, open at one end\paper{ANZE}.
+
+The Funnel-web spider, like the tiger snake\xx{tiger}{snake}
+and the white pointer shark,\xx{white pointer}{shark}
+is secretly regarded by Australians as a kind of national
+treasure.\xn{Edna}{Everage}\xn{Barry}{Humphries}
+
+\begin{verse}
+\b{F} is for Funnel-web\\
+Our furry-legged foe.\\
+He sleeps in your slipper\\
+And breakfasts on toe.\\
+--- One verse from \i{A Megastar's Mantras: Things that Mean a Lot to Me},\\
+\qquad{} by Dame Edna Everage\paper{Humphries91}.\\
+\end{verse}
+
+\section{A FunnelWeb Tutorial}
+\x{tutorial}\xx{tutorial}{introduction}
+
+The remainder of this chapter consists of an introductory tutorial on
+FunnelWeb. Ideally you should have a working version of FunnelWeb in front
+of you when reading this chapter so that you can try out the examples
+yourself. There is no need to try all the examples so long as you
+type in enough to feel comfortable with what you are reading. There
+is no harm in reading this chapter offline too, so long as you get to the
+computer within a couple of days to reinforce what you have read.
+
+For best effect, you should create a new, temporary, empty directory in
+which to experiment with FunnelWeb. That way, it will be more obvious
+when FunnelWeb creates an output file. You can either type in the
+examples in this chapter directly, or copy and paste them from the \LaTeX{}
+source file for this chapter or the FunnelWeb
+test suite. The source file for this chapter should be available
+in a file such as \p{/fwdir/userman/ch1.tex}. The test suite should be
+available in a directory such as \p{/fwdir/tests/}. The
+test files called \p{ex01.fw} through \p{ex16.fw} contain the examples in this
+chapter. The test files called \p{hi01.fw} through \p{hi10.fw} contain the
+examples in the next chapter.
+
+If you do not yet have an installed copy of FunnelWeb, refer to
+Chapter~\ref{chapinstall} for full details on how to obtain and install
+a copy of FunnelWeb. If you are not sure if you have an installed copy,
+try invoking FunnelWeb by giving the command \dqp{fw}. If this yields an error
+such as \dq{command not found} then you do not have a properly
+installed version of FunnelWeb.
+
+\section{A Hello World Document}
+\x{hello world document}
+
+Just as one starts the process of learning a new programming language with a
+\dq{Hello World} program, when learning FunnelWeb, you can start with a
+\dq{Hello World} document! And here it is! Edit a text file
+called \p{hello.fw} and put the following text in it. (Note: The second
+character is the letter \dq{Oh}, not the digit \dq{Zero}).
+
+\begin{verbatim}
+@O@<hello.txt@>@{Hello World@+@}
+\end{verbatim}
+
+To \dq{run} this \dq{program}, invoke FunnelWeb using the \dqp{fw}
+command as follows.\x{invoking FunnelWeb}
+
+\begin{verbatim}
+fw hello
+\end{verbatim}
+
+\i{If this command doesn't work, then chances are that
+FunnelWeb has not been installed on your machine. Refer to
+Chapter~\ref{chapinstall} for full details on how to obtain and install
+a copy of FunnelWeb.}
+
+There should be no errors. If there are, have a look
+at the listing file \p{hello.lis}, which should contain an explanation of the
+error, and compare the area in the file where the error occurred with the
+text above. If there are no errors, you will find that the following
+two files have been created.
+
+\begin{verbatim}
+hello.lis - The LISTING file.
+hello.txt - The PRODUCT file.
+\end{verbatim}
+
+Take a look at \p{hello.txt}. It should contain a single line with the
+text \p{Hello World}. Let's take another look at the input file.
+
+\begin{verbatim}
+@O@<hello.txt@>@{Hello World@+@}
+\end{verbatim}
+
+The whole structure of the input file is controlled by \dqp{@},
+called the \newterm{special character}, which
+introduces \newterm{special sequence}s. A scanner's-eye view of the command
+line looks like this:
+
+\begin{verbatim}
+@O @< "hello.txt" @> @{ "Hello World" @+ @}
+\end{verbatim}
+
+The \p{@} character controls everything. In this file we have six different
+special sequences that together
+form a single macro definition. The \p{@<}\x{@<} and \p{@>}\x{@>}
+delimit the name of
+the macro. The \p{@O}\x{@O} signals the start of the macro
+definition and indicates that the macro is to be connected to a product
+file with the same name as the macro (This is is why we got a product file when
+we ran FunnelWeb). The \p{@\{} and \p{@\}}\x{@braces}
+delimit the body of the macro.
+Finally, the \p{@+}\x{@+} instructs that an end of line sequence should be
+inserted at that point in the product file.
+
+If you think this syntax looks messy, then you're right.
+It \i{is}
+messy. FunnelWeb \i{could} have employed a \dq{simpler} notation
+in which more of the \p{@} sequences were eliminated. For example:
+
+
+\begin{verbatim}
+Warning: This example is NOT legal FunnelWeb.
+
+#hello.txt{Hello World+}
+\end{verbatim}
+
+However, if such a syntax were used, the user (you!) would have to remember
+that \p{\#} starts a new macro. You would also have to remember that
+the characters \p{\}} and \p{+} cannot be used in a macro body without a fuss.
+And so on. FunnelWeb is messier, but provides one simple
+rule:\xx{simple}{rule} \i{Nothing special happens
+unless the special character \p{@} appears.}
+
+This means that in FunnelWeb, you can look at large blocks of text in the
+confidence that (unlike for the C
+pre-processor\xx{C}{preprocessor}) there are no macro calls
+hidden in there. If there were, there would be an \p{@}
+character!\footnote{The only
+exception to this rule occurs where the user has explicitly changed the
+special character using the \p{@=}\x{@=} special sequence.}
+
+Let's take another look at the hello world program.
+
+\begin{verbatim}
+@O@<hello.txt@>@{Hello World@+@}
+\end{verbatim}
+
+In its current form, it consists of a single macro definition. This definition,
+while completely valid on its own, only represents half the power of
+FunnelWeb. In fact you could say that it is a \dq{Hello
+Northern Hemisphere Program}.\x{Hello Northern Hemisphere Program}
+To turn it into a proper FunnelWeb \dq{Hello
+World} program, we need to add some documentation!
+
+A FunnelWeb input file consists of a sequence of macro definitions surrounded
+by a sea of documentation which is just ordinary text. Modify your hello
+world document so that it looks like this:
+
+\begin{verbatim}
+This hello world document was created by -insert your name here-.
+
+@O@<hello.txt@>@{Hello World@+@}
+
+It writes out a file called hello.txt containing the string ``Hello World''.
+\end{verbatim}
+
+Now run it through FunnelWeb, but this time, add a \p{+t} to the command line.
+
+\begin{verbatim}
+fw hello +t
+\end{verbatim}
+
+If all goes well, you should find that you now have
+
+\begin{verbatim}
+hello.lis - A LISTING file.
+hello.tex - A DOCUMENTATION file (in TeX format).
+hello.txt - A PRODUCT file.
+\end{verbatim}
+
+Take a look at \p{hello.txt}. You will find that it is identical to the
+\p{hello.txt} of the previous run. Only macro
+definitions affect the product files that FunnelWeb produces (as a result
+of \p{@O} macro definitions). The surrounding documentation has \i{no}
+effect. In contrast, the new file, \p{hello.tex} (have a look at it now)
+which was created as
+a result of your adding the \p{+t} option contains a fairly full
+representation of the input file. Whereas \p{hello.txt} is the
+\i{product file} of FunnelWeb, \p{hello.tex} is the \i{documentation file}.
+Try typesetting the documentation file now using
+the \TeX{} typesetting program. Then print it.
+The following commands are an example of the
+sort of commands you will have to give to do this.
+
+\begin{verbatim}
+tex hello ! Typeset the documentation.
+lpr -Pcslw -d hello.dvi ! Print the typeset documentation.
+\end{verbatim}
+
+The result should be a single page containing the two lines of documentation
+along with a typeset representation of the macro.
+At this point, you have exercised the two main aspects of
+FunnelWeb.\xx{FunnelWeb}{two main aspects}
+Starting
+with an input file containing macros (or in this case macro) and documentation,
+you have successfully generated a product file based on the macros, and
+a documentation file, based on the entire document. Congratulations!
+
+The remainder of this tutorial is divided into two parts, which focus on
+FunnelWeb's macro facilities and its typesetting facilities. By tradition,
+the generation of program files from a literate text is called
+\newterm{Tangling}, and the generation of typeset documentation is
+called \newterm{Weaving}.\footnote{In FunnelWeb, these two functions
+are aspects of a single computer program. However, in Knuth's WEB\x{WEB}
+system,
+the two functions are embodied in two separate computer programs called
+Tangle and Weave, presumably because, as everyone knows, \dq{it takes
+two to Tangle}.}
+
+\section{Macro Facilities}
+\xx{tutorial}{macro facilities}
+
+The hello world program of the previous section exercised both the macro
+expansion (product-file) aspect of FunnelWeb, and the typesetting
+(documentation file) aspect
+of FunnelWeb. This section contains an exposition of the macro facilities,
+and totally ignores the documentation side. This is partly to increase the
+focus of the tutorial, and partly because documentation is usually bulky and
+would take too long for the reader to type in to make the tutorial effective.
+
+\subsection{Simple Macros}
+\xx{tutorial}{simple macros}\xx{tutorial}{macros simple}
+
+The original \dq{Hello World} program consisted of a single macro definition.
+
+\begin{verbatim}
+@O@<hello.txt@>@{Hello World@+@}
+\end{verbatim}
+
+In fact, this is a rather exceptional macro, as it causes its expansion to
+be written to a
+product file. The \p{@O}\x{@O} (for \b{O}utput) signals this.
+In FunnelWeb, most macros are
+defined using \p{@\$}.\x{@dollar}
+This results in a macro that does not generate a product
+file, but which can be called in other macros (including \p{@O} macros).
+Let us expand the hello world program to include some other macros.
+
+\begin{verbatim}
+@O@<hello.txt@>@{@<Greetings@>@+@}
+
+@$@<H@>==@{Hello@}
+@$@<W@>==@{World@}
+
+@$@<Greetings@>==@{@<H@> @<W@>@}
+\end{verbatim}
+
+Type in the file and run it through FunnelWeb using the command:
+
+\begin{verbatim}
+fw hello
+\end{verbatim}
+
+The product file (result.out) should look like this:
+
+\begin{verbatim}
+Hello World
+\end{verbatim}
+
+This short program illustrates some of the features of ordinary macros in
+FunnelWeb. Consider the \p{@O} macro. Instead of containing
+straight text (\dq{Hello World}), it now contains the macro call
+\p{@<Greetings@>}. A FunnelWeb macro can be called from within the body of
+another macro just by giving the macro
+name delimited in \p{@<} and \p{@>}.
+
+At the bottom of the file is the
+definition of the \p{@<Greetings@>}
+macro. The definition is similar to the definition of \p{hello.txt} except
+that it starts with \p{@\$} to indicate that no product file
+is desired from this macro (directly). It also employs the optional
+\p{==} syntax which has no semantic impact, but
+can be used to make definitions clearer.
+The body of the \p{@<Greetings@>} macro consists of
+calls to the \p{H} and \p{W} macros which are defined immediately above.
+
+Note that the macros are not constrained to be
+defined in any particular order. One of the main
+features of literate programming tools is that
+they allow the different parts of the text document being developed (usually
+a computer program) to be layed out in any
+order.\xx{order}{program}\xx{program}{layout} So long as there is a
+definition somewhere in the input file for every macro call, FunnelWeb
+will sort it all out.
+
+In fact, FunnelWeb's macro facility is very simple.\xx{macro}{bindings}
+Unlike many macro preprocessors which allow macros to define other macros,
+FunnelWeb completely
+finishes parsing and analysing the macros in the input file before it
+starts expanding them into product files. Other preprocessors allow
+macros to
+be redefined like variables (as in, say, \TeX{}\x{TeX}) taking on
+many different values as the macro pre-processor travels through the input
+file. In contrast,
+FunnelWeb has no concept of \dq{different times} and
+treats the input as one huge static orderless, timeless,
+collection of definitions.
+In FunnelWeb, there is only ever one time, and so there can only ever be
+one value/definition for each macro.
+
+
+\subsection{Number of Times Called}
+\x{number of times called}\xx{calls}{number}\xx{invocation}{number}
+
+So far we have seen only tiny, degenerate input files. The next example
+moves up to the level of \dq{trivial}, but starts to convey the flavour of
+the way FunnelWeb can be used in practice. Normally, there would be
+documentation text appearing between the macros, but this has been omitted
+so as to keep the focus on the macros themselves. Although the next
+example is
+much longer than the previous example, the only new construct is \p{@-}
+which can appear only at the end of a line,
+and suppresses it,\xx{EOL}{suppression}
+preventing it from appearing in the text. The \p{@-}\x{@-} construct allows
+the text of a macro to be aligned at the left margin, rather than
+having the first line hanging at the end of the
+\p{@\{}. FunnelWeb could have been set up so that this end of
+line marker was suppressed. However, it would have been a special case that
+would have broken the very memorable rule \dq{the text of a macro is the
+text appearing between the \p{@\{} and \p{@\}}}.
+
+Type the following text into the file \p{hello.fw}
+and run it through FunnelWeb. The file contains some intentional errors so
+be sure to type it in exactly and worry only if FunnelWeb \i{doesn't}
+generate some errors.
+
+\begin{verbatim}
+@O@<hello.c@>==@{@-
+@<Include Files@>
+@<Include Files@>
+@<Main Program@>
+@}
+
+@$@<Main Program@>==@{@-
+main()
+{
+ doit();
+}
+@}
+
+@$@<Subroutine@>==@{@-
+void doit()
+{
+ int i;
+ for (i=0;i<10;i++)
+ {
+ @<Print@>
+ @<Print@>
+ }
+}@}
+
+@$@<Print@>==@{@-
+printf("Hello World!");
+printf("\n");@}
+
+@$@<Scan@>==@{scanf@}
+
+@$@<Include Files@>==@{@-
+#include <stdio.h>
+#include <stdlib.h>@}
+\end{verbatim}
+
+What happened? Well, if you haven't typed the file in properly, you may
+get some miscellaneous syntax errors. Fix these before continuing.
+If the file has been correctly typed, you should be faced with some error
+messages to do with the number of times some of the macros are called.
+
+By default, FunnelWeb insists that each macro defined is invoked
+exactly once. However, the file above defines macros that are used
+more than once and a macro that is not used at all. Let us examine the
+errors.
+
+First, we see that FunnelWeb has alerted us to the fact that
+the \p{Include Files} macro has been called twice. Once alerted to this,
+a quick look at the program convinces us that calling the macro twice is
+a mistake, and that one of the calls should be eliminated.
+
+Second, we note that FunnelWeb has alerted us to the fact that the
+\p{@<subroutine@>}
+macro is never called. Again, a quick look at the program tells us that this
+is a mistake (and a very common one in the use of FunnelWeb), and that
+a call to the \p{@<subroutine@>} macro should be inserted just above
+the call to the \p{@<Main Program@>} macro
+in the definition of \p{@<hello.c@>}.
+
+These two cases demonstrate why these checks have been placed in
+FunnelWeb. It is nearly always acceptable for a macro to be called once.
+However, if a macro is not called at all, or called more than once,
+this is often a sign
+that the user has made a mistake.
+
+These checks have a dark side too. In addition to the
+errors mentioned above, FunnelWeb has generated two similar
+errors that do not help us.
+
+First, we are alerted to the fact that the
+\p{@<print@>} macro has been called twice. Clearly, in this case, this is not
+a problem, and so here FunnelWeb's fussiness is a nuisance.
+
+Second, we are alerted to the fact that the \p{@<scan@>} macro has never
+been called. Like the \p{@<print@>} macro,
+this macro was defined as a notational
+convenience, and clearly it does not matter here if it is not used. Again,
+FunnelWeb is being a nuisance.
+
+The four cases above demonstrate the light and dark side of
+FunnelWeb's insistence that each macro be called exactly once. To resolve
+the conflict without reducing the strength of the checking, FunnelWeb
+provides two special sequences \p{@Z} (for \b{Z}ero) and \p{@M} (for \b{M}any)
+that can be attached to macro definitions. Presence of the
+\p{@Z}\xx{@Z}{tutorial}
+tag allows the designated macro to be called zero times.
+Presence of the
+\p{@M}\xx{@M}{tutorial}
+tag allows the designated macro to be called more than once.
+A single macro may carry both tags.
+It is always true that all macros are allowed to be called exactly once.
+
+Here is the revised program with the errors fixed,
+by eliminating or adding macro calls, or by adding tags.
+Try processing the file now. There should be no errors.
+
+\begin{verbatim}
+@O@<hello.c@>==@{@-
+@<Include Files@>
+@<Function@>
+@<Main Program@>
+@}
+
+@$@<Main Program@>==@{@-
+main()
+{
+ doit();
+}
+@}
+
+@$@<Function@>==@{@-
+void doit()
+{
+ int i;
+ for (i=0;i<10;i++)
+ {
+ @<Print@>
+ @<Print@>
+ }
+}@}
+
+@$@<Print@>@M==@{@-
+printf("Hello World!");
+printf("\n");@}
+
+@$@<Scan@>@Z==@{scanf@}
+
+@$@<Include Files@>==@{@-
+#include <stdio.h>
+#include <stdlib.h>@}
+\end{verbatim}
+
+\subsection{Indentation}
+\xx{indentation}{macro calls}
+
+The body of the \p{print} macro of the previous example
+contains two lines of text.
+A literal substitution of this macro's body in its context would result in:
+
+\begin{verbatim}
+ {
+ printf("Hello World!");
+printf("\n");
+ printf("Hello World!");
+printf("\n");
+ }
+\end{verbatim}
+
+But instead, it comes out as (have a look at this part of \p{hello.c} now):
+
+\begin{verbatim}
+ {
+ printf("Hello World!");
+ printf("\n");
+ printf("Hello World!");
+ printf("\n");
+ }
+\end{verbatim}
+
+The explanation is that FunnelWeb indents each line of multiline macros
+by the level of indentation at the point of call.
+This means that, as in the case above, program texts, which are usually
+highly indented, come out looking \dq{right}.
+
+In other circumstances, where the model of the text is one dimensional,
+FunnelWeb's indentation could become an impediment or even a danger.
+In these cases, it
+can be switched off by including the FunnelWeb \newterm{pragma} line
+
+\begin{verbatim}
+@p indentation = none
+\end{verbatim}
+
+anywhere in the input file.
+
+One of the design goals of FunnelWeb is to allow the user total control over
+the product files. This contrasts with the approach of Knuth's WEB\x{WEB}
+system
+\paper{Knuth83} (upon which FunnelWeb is based), which mangles the input
+text at the Pascal\x{Pascal} program syntax level, truncating identifiers,
+converting
+the text to upper case, and paragraphing text. Here is an example of part of
+a Pascal program produced by WEB\xx{output}{WEB}
+(from page~14 of \paper{Knuth83}):
+
+\begin{verbatim}
+IF R=0 THEN XREF[P]:=XREFPTR ELSE XMEM[R].XLINKFIELD:=XREFPTR;END;{:51}
+{58:}FUNCTION IDLOOKUP(T:EIGHTBITS):NAMEPOINTER;LABEL 31;
+VAR I:0..LONGBUFSIZE;H:0..HASHSIZE;K:0..MAXBYTES;W:0..1;
+L:0..LONGBUFSIZE;P:NAMEPOINTER;BEGIN L:=IDLOC-IDFIRST;{59:}
+H:=BUFFER[IDFIRST];I=IDFIRST+1;
+WHILE I<IDLOC DO BEGIN H:=(H+H+BUFFER[I])MOD HASHSIZE;I=I+1;END{:59};
+\end{verbatim}\checked{I can't believe I actually typed this mess in.}
+
+Knuth's theory is that the program generated by a literate programming
+system should be
+treated as object code and hence should look like object code
+too.\x{object code} While this
+may be an admirable approach in the long run, the present programming
+environment is one of faulty compilers and buggy tools.
+The FunnelWeb view is that, in this environment,
+the programmer needs all the help he can get
+and that therefore he should be allowed total control over
+the product file. Another reason for FunnelWeb's providing total
+control over the product file, is that FunnelWeb is intended to be
+target language independent, and so even if Knuth's view were adopted, it
+would not be clear what a legitimate transformation of the text could be.
+
+\subsection{Additive Macros}
+\xx{additive}{macros}
+
+Sometimes it is convenient to build up the definition of a macro in
+stages throughout the input file. In FunnelWeb, this can be done using
+an \newterm{additive macro}.
+An additive macro is identical to an ordinary macro except
+that\xx{tutorial}{==}\xx{tutorial}{+=}
+
+\begin{enumerate}
+\item It has \p{+=} instead of \p{==}.
+\item It can be defined in one or more parts throughout the input file.
+The definition of the macro is the concatenation of all the parts in the
+order in which they appear.
+\end{enumerate}
+
+The following example shows how additive macros
+can be used to scatter and regroup information, in this
+case assisting in the lucid construction of a
+data abstraction\xx{data}{abstraction} in a language (Pascal\x{Pascal})
+that does not support them explicitly.
+
+\begin{verbatim}
+@!******************************
+
+@O@<prog.pas@>==@{@-
+program adt(input,output);
+@<Types@>
+@<Variables@>
+@<Procedures@>
+begin startproc; end.
+@}
+
+@!******************************
+
+@$@<Types@>+=@{@-
+type buffer_type =
+ record
+ length : integer;
+ buf : array[1..100] of char;
+ end;
+@}
+
+@$@<Variables@>+=@{@-
+bigbuf : buffer_type;
+@}
+
+@$@<Procedures@>+=@{@-
+procedure buf_init (var b : buffer_type ) {Body of buf_init}
+procedure buf_add (var b : buffer_type; ch : char) {Body of buf_add}
+procedure buf_get (var b : buffer_type; var ch : char) {Body of buf_get}
+@}
+
+@!******************************
+
+@$@<Types@>+=@{@-
+type complex_type = record r,i : real; end;
+@}
+
+@$@<Procedures@>+=@{@-
+procedure cm_set (var c: complex_type; a,b: real) {Body of cm_set}
+procedure cm_add (a,b: complex_type; var c: complex_type) {Body of cm_add}
+{Other procedures and functions}
+@}
+
+@!******************************
+
+{...more pieces of program...}
+
+@!******************************
+\end{verbatim}
+
+It is important to remember that the definition of each macro does not change
+throughout the input file. FunnelWeb parses the entire input file and
+assembles all the macro definitions before it even starts to expand macros.
+As a result, each additive macro can only have one definition, and that
+definition is the concatenation of all its parts.
+
+The example above shows how additive macros can be used to rearrange the
+presentation of a computer program in the order in which the user wishes
+to discuss it rather than the order in which the compiler requires that it
+be consumed. It is easy, however, to abuse the feature of additive macros.
+In many cases, the same effect can be obtained more clearly by replacing
+each part of an additive macro in-situ using uniquely named non-additive
+macros, and then collect them together as a group at the point where the
+additive macro is called. Doing this is more work, and is more error
+prone, but can result in a clearer exposition.
+The following program illustrates this alternative approach.
+
+\begin{verbatim}
+@!******************************
+
+@O@<prog.pas@>==@{@-
+program adt(input,output);
+@<Types@>
+@<Variables@>
+@<Procedures@>
+begin startproc; end.
+@}
+
+@$@<Types@>==@{@-
+@<Buffer type@>
+@<Complex type@>
+@}
+
+@$@<Variables@>==@{@-
+@<Buffer variable@>
+@}
+
+@$@<Procedures@>==@{@-
+@<Buffer procedures@>
+@<Complex procedures@>
+@}
+
+@!******************************
+
+@$@<Buffer type@>==@{@-
+type buffer_type = record
+ length : integer;
+ buf : array[1..100] of char;
+ end;
+@}
+
+@$@<Buffer variable@>==@{@-
+bigbuf : buffer_type;
+@}
+
+@$@<Buffer procedures@>==@{@-
+procedure buf_init(var b : buffer_type) {Body of buf_init}
+procedure buf_add(var b : buffer_type; ch : char) {Body of buf_add}
+procedure buf_get(var b : buffer_type; var ch : char) {Body of buf_get}
+@}
+
+@!******************************
+
+@$@<Complex type@>==@{@-
+type complex_type = record r,i : real; end;
+@}
+
+@$@<Complex procedures@>+=@{@-
+procedure cm_set(var c: complex_type; a,b : real) {Body of cm_set}
+procedure cm_add(a,b : complex_type; var c: complex_type) {Body of cm_add}
+{Other procedures and functions}
+@}
+
+@!******************************
+
+{...more pieces of program...}
+
+@!******************************
+\end{verbatim}
+
+One of advantages of FunnelWeb (and literate programming in general) is that
+(as shown above) it allows the user to lay out the program in whatever order is
+desired\xx{program}{layout}
+with near total independence from the ordering requirements of the
+target programming language.
+
+Additive macros are allowed to be tagged with \p{@Z} and \p{@M} just as other
+macros can, but the tags must appear only on the first definition of the
+macro. Additive macros cannot be connected directly to product files.
+
+\subsection{Parameterized Macros}
+\xx{parameterized}{macros}
+
+No self-respecting macro preprocessor would be complete without some form
+of macro parameterization, and FunnelWeb is no exception. FunnelWeb allows
+each macro to have from zero to nine formal parameters\xx{formal}{parameters}
+named \p{@1}\x{@1...}, \p{@2},
+\p{@3}, \p{@4}, \p{@5}, \p{@6}, \p{@7}, \p{@8}, and \p{@9}.
+
+To define a macro with one or more parameters, insert a formal parameter
+list\xx{formal}{parameters}
+just after the macro name in the macro definition. Because macro
+parameters have fixed names (\p{@1}$\ldots$\p{@9}), there is no need to
+specify the names of formal parameters in the formal parameter list.
+All that need be conveyed is how many parameters the macro has.
+Here is an example of the definition of a macro having three parameters:
+
+\begin{verbatim}
+@$@<While loop@>@(@3@)@M==@{@-
+@1
+while (@2)
+ {
+ @3
+ }
+@}
+\end{verbatim}
+
+To call a parameterized macro, an actual
+parameter\xx{actual}{parameters} list must be supplied
+that contains exactly the same number of actual parameters as there are
+formal parameters in the definition of the macro being called. An actual
+parameter list is delimited by \p{@(}\x{@(}
+and \p{@)},\x{@)} and parameters are
+\i{separated} by \dqp{@,}.\x{@,} The actual parameters themselves are general
+FunnelWeb expressions (see Chapter~\ref{chapdefinition}
+for the exact syntax) and can
+be inserted into the list directly or can be delimited by \p{@"}\x{@"} so as to
+allow some white space to assist in formatting the actual parameters.
+Here are some examples of calls of the \p{While loop} macro defined above.
+
+\begin{verbatim}
+@! First form of actual parameters without whitespace and double quotes.
+@<While loop@>@(x=1;@,x<=10@,printf("X=%u\n",x);@)
+
+@! Second form of actual parameters. The double quotes allow non-active
+@! whitespace that helps to lay out the actual parameters neatly.
+@! This call is functionally identical to the one above.
+@<While loop@>@(
+ @"x:=1;@" @,
+ @"x<=10@" @,
+ @"printf("X=%u\n",x);@" @)
+
+@! The two forms can be mixed in a single call.
+@<While loop@>@(x=1;@,x<=10@,
+ @"printf("X=%u\n",x);@" @)
+\end{verbatim}
+
+A few rules about parameterized macros are worth mentioning.
+Macros that do not have any parameters must have no formal or
+actual parameter lists.\xs{parameter list}{absent}
+Additive macros can have parameters, but the formal parameter list
+must appear in the first definition part only.
+
+Here is another example of the use of parameterized macros. This time,
+parameters and macro calls are used in a FunnelWeb input file
+that constructs an $O(n)$ representation
+of a song\x{song}\x{twelve bugs of christmas} whose full size is
+$O(n^2)$ in the number $n$ of unique
+lines.\x{rec.humor.funny}\xn{Pat}{Scannel}
+
+\begin{verbatim}
+
+@O@<Twelve_bugs.txt@>==@{@-
+The Twelve Bugs of Christmas
+----------------------------
+@<Verse@>@(@"first@" @,@<1@>@)
+@<Verse@>@(@"second@" @,@<2@>@)
+@<Verse@>@(@"third@" @,@<3@>@)
+@<Verse@>@(@"fourth@" @,@<4@>@)
+@<Verse@>@(@"fifth@" @,@<5@>@)
+@<Verse@>@(@"sixth@" @,@<6@>@)
+@<Verse@>@(@"seventh@" @,@<7@>@)
+@<Verse@>@(@"eighth@" @,@<8@>@)
+@<Verse@>@(@"ninth@" @,@<9@>@)
+@<Verse@>@(@"tenth@" @,@<A@>@)
+@<Verse@>@(@"eleventh@" @,@<B@>@)
+@<Verse@>@(@"twelfth@" @,@<C@>@)
+
+This song appeared in the internet newsgroup rec.humor.funny on 24-Dec-1991.
+It was contributed by Pat Scannell (scannell@@darkstar.ma30.bull.com).
+@}
+
+@$@<Verse@>@(@2@)@M==@{@-
+For the @1 bug of Christmas, my manager said to me
+ @2
+@}
+
+@$@<1@>@M==@{See if they can do it again.@}
+@$@<2@>@M==@{Ask them how they did it and@+@<1@>@}
+@$@<3@>@M==@{Try to reproduce it@+@<2@>@}
+@$@<4@>@M==@{Run with the debugger@+@<3@>@}
+@$@<5@>@M==@{Ask for a dump@+@<4@>@}
+@$@<6@>@M==@{Reinstall the software@+@<5@>@}
+@$@<7@>@M==@{Say they need an upgrade@+@<6@>@}
+@$@<8@>@M==@{Find a way around it@+@<7@>@}
+@$@<9@>@M==@{Blame it on the hardware@+@<8@>@}
+@$@<A@>@M==@{Change the documentation@+@<9@>@}
+@$@<B@>@M==@{Say it's not supported@+@<A@>@}
+@$@<C@>@M==@{Tell them it's a feature@+@<B@>@}
+\end{verbatim}
+
+\subsection{Macro Expansion}
+\xx{macro}{expansion}
+
+One of the strengths of FunnelWeb is that, when writing product files, it
+does not attempt to evaluate any text expression (\eg{}text block, parameter,
+macro call) in memory\xx{memory}{use of}
+and then write the result out. Instead, it always
+writes out what it is expanding dynamically and directly. This means that
+the user need not fear defining macros that expand to huge amounts of text
+and then calling those macros in other macros, or passing those huge macros
+as parameters to other macros. In all cases, FunnelWeb expands directly to
+the product file, and there can be no danger in running out of memory during
+expansion (except for running out of stack space and other
+marginally used resources in pathological cases).
+
+The only thing to remember in this regard is that FunnelWeb always stores
+the entire \i{input} file and all included files, in their entirety in
+memory, for the duration of the run.
+
+Here is an example, that illustrates how robust FunnelWeb is:
+
+\begin{verbatim}
+@! FunnelWeb copes well with the following macro definitions.
+@! (Providing that it has a little over ten megabytes of memory).
+
+@O@<woppa.txt@>==@{@<Quote@>@(@<Humungeous@>@)@+@}
+
+@$@<Quote@>@(@1@)==@{"@1"@}
+
+@$@<Humungeous@>==@{@-
+...Ten Megabytes of Text...
+@}
+\end{verbatim}
+
+\subsection{Include Files}
+\xx{include}{files}
+
+FunnelWeb provides a nested include file facility that can be used for a
+number of purposes. When FunnelWeb runs into a single line containing the
+special sequence \p{@i}\x{@i} followed by a blank, followed by a file name,
+it reads in the designated
+file and replaces the line containing the command (including the end of
+line marker at the end of the line) with the entire contents
+of the designated file. For example, if there was a file called
+\p{camera.txt} containing the two lines:\xx{poem}{camera}\xx{animal}{poem}
+
+\begin{verbatim}
+'Cos I shoot with a camera instead of a gun.
+The animals flock to be petted and fed,
+\end{verbatim}
+
+and another file called \p{poem.fw}
+containing the following four lines\x{shooting}
+
+\begin{verbatim}
+I like to go shooting, it's a whole lot of fun,
+@i camera.txt
+Cos they know my camera isn't loaded with lead.
+- RNW, 04-Jan-1991.
+\end{verbatim}
+
+Then, if FunnelWeb were to process \p{poem.fw}, the result would be
+as if FunnelWeb had read in:
+
+\begin{verbatim}
+I like to go shooting, it's a whole lot of fun,
+'Cos I shoot with a camera instead of a gun.
+The animals flock to be petted and fed,
+'Cos they know my camera isn't loaded with lead.
+- RNW, 04-Jan-1991.
+\end{verbatim}
+
+FunnelWeb expands include files before it starts scanning and parsing the
+included text. The result is that include files can contain anything that
+can be found in a FunnelWeb file. The following example illustrates
+the level at which the include mechanism operates. If \p{main.fw} contains
+
+\begin{verbatim}
+@O@<output.dat@>==@{@-
+@i inc.fw
+This is the text of the sloth macro.
+@}
+\end{verbatim}
+
+and inc.fw contains
+
+\begin{verbatim}
+@<Sloth@>
+@}
+
+@$@<Sloth@>==@{@-
+\end{verbatim}
+
+Then if FunnelWeb were applied to \p{main.fw}, it would see:
+
+\begin{verbatim}
+@O@<output.dat@>==@{@-
+@<Sloth@>
+@}
+
+@$@<Sloth@>==@{@-
+This is the text of the sloth macro.
+@}
+\end{verbatim}
+
+which it would process in the normal manner. The only special
+sequence processing that takes place at a level lower
+than include files is the processing of the \p{<special>=<newspecial>}
+sequence which changes the special character.\xx{special character}{changing}
+
+A few other facts about include files are worth mentioning here. Include
+files inherit the directory specification supplied using the \p{+I} command
+line option. The special character is saved at the start of each include
+file and restored to its previous value at the end of each include file.
+Include files can be nested up to ten levels.
+Recursive included files\xx{include files}{recursive}
+will always cause an infinite recursion as there
+is no bottoming out mechanism available.
+Include files
+must contain an integer number of lines (\ie{}the last line must be
+terminated with an end of line marker). Once FunnelWeb has seen
+\dqp{@i\ } at the start of a line, it will grab the rest of the
+line raw and treat it as a file name. There is no place on the
+line for things like FunnelWeb comments (see later) or extraneous text.
+
+Include files can be used for many purposes, but are particularly useful for
+hauling in macro libraries.\xx{macro}{libraries}
+
+\section{Typesetting Facilities}
+\xx{tutorial}{typesetting}
+
+The first half of this tutorial focuses solely on the macro facilities
+of FunnelWeb (which it more or less covers completely). As a result,
+the example documents you have seen so far have been gross
+distortions of \dq{normal} FunnelWeb documents which often contain as much
+documentation as
+code.\x{documentation vs code}\x{code vs documentation}\footnote{As
+an example, the author used
+FunnelWeb to develop a largish computer program and found that on average
+his style of using FunnelWeb resulted in about 30\% documentation and
+70\% macros (code) (measured by numbers of lines).}
+While there are applications where FunnelWeb can be used solely
+as a macro preprocessor, most applications will use its
+typesetting facilities as well.
+
+This section restores the balance in this tutorial
+by presenting FunnelWeb's typesetting facilities.
+
+\subsection{Overview}
+\xx{overview}{typesetting}
+
+The macro definitions discussed in the macro tutorial completely define
+the contents of the product files that FunnelWeb will generate. These macro
+definitions can be arranged in any order and nothing external to them
+can affect the contents of the product files. The macros
+can be thought of as a group of self-contained islands.
+
+Although FunnelWeb will can process the macros all on their own,
+the full power of FunnelWeb
+is realized only when the macros are surrounded by a sea of documentation.
+This sea can take two forms: directives and free text.
+Some of the directives control things such as the maximum input line
+length. However, most of them are typesetting directives that affect
+the printed documentation.
+Thus a FunnelWeb document can be viewed as a sequence
+of \newterm{macro definitions},
+\newterm{directives}, and \newterm{free text}.
+
+Unlike the product files which consist of unscrambled macro calls,
+the documentation file is more or less a
+direct representation of the input file. Each part of the input file
+appears in the documentation file in the order in which it appears in the
+input file. However, each different kind of part is
+typeset\footnote{Here the term \dq{typeset} is used loosely to refer to
+FunnelWeb's generation of typesetter commands for each construct in the
+input file. Strictly, the term should be used only to describe the actions
+of a typesetter program (\eg{}\TeX{}).} in a different
+manner. Macros are typeset in a particular style, with the macro body
+appearing in \p{tt font} (see some FunnelWeb printed documentation for
+an example). Typesetter directives have specific defined
+effects (more later).
+Free text is typeset exactly as it is, except that each block of text
+between blank lines is filled and justified as a paragraph.
+
+The following example demonstrates how all this works. Type in the following
+as \p{example.fw} and run it through FunnelWeb with the
+command \dqp{fw~example~+t}. The \dqp{+t} instructs FunnelWeb to generate
+a documentation file called \p{example.tex}.
+Run the file through \TeX{} and print it.
+Examine the files \p{example.out} and \p{example.tex}.
+
+\begin{verbatim}
+You are reading some free text before the macro. Free text can consist
+of any text (not containing the FunnelWeb special character) including
+typesetter commands
+such as $, %, #, and \TeX{} which
+will be typeset to appear exactly as they do in the input file!
+Look out! Here comes a macro!
+
+@O@<example.out@>==@{@-
+This text is part of
+a macro definition.
+@}
+
+This is free text following the macro. This sentence contains
+two @{inline@} typesetter @/directives@/.
+Now here is a non-inline typesetting directive.
+
+@t new_page
+
+This sentence will appear on the next page.
+\end{verbatim}
+
+At the top of the \p{example.tex} documentation file will be a set of \TeX{}
+macro definitions. The \TeX{} code corresponding to the input above
+appears at the end of the file. It should look something like this.
+
+\begin{verbatim}
+You are reading some free text before the macro. Free text can consist
+of any text (not containing the FunnelWeb special character) including
+typesetter commands
+such as \$, \%, \#, and $\backslash$TeX$\{$$\}$ which
+will be typeset to appear exactly as they do in the input file!
+Look out! Here comes a macro!
+
+\fwbeginmacro
+\fwfilename{example.out}{1}\fwequals \fwodef \fwbtx[This text is part of
+a macro definition.
+]fwetx=%
+\fwcdef
+\fwbeginmacronotes
+\fwisafile{This macro is attached to an output file.}
+\fwendmacronotes
+\fwendmacro
+
+This is free text following the macro. This sentence contains
+two \fwlit{inline} typesetter \fwemp{directives}.
+Now here is a non-inline typesetting directive.
+
+\fwnewpage
+
+This sentence will appear on the next page.
+\end{verbatim}
+
+The following points explain the \p{example.tex} file.
+
+\narrowthing{You don't have to know TeX:}{If you don't know
+\TeX{}, don't pay too much
+attention to this section. You don't need to know \TeX{} to use FunnelWeb.}
+
+\narrowthing{In order:}{FunnelWeb has merely transformed the
+input. It hasn't rearranged it.}
+
+\narrowthing{Free text:}{Most of the free text has been simply copied over.
+The \TeX{} typesetter justifies and fills all paragraphs fed to it by
+default, so most of the text has just been copied verbatim.}
+
+\narrowthing{TeX codes:}{The characters and sequences which
+\TeX{} treats as special have been neutralized in the documentation
+file. For example, \dqp{\$} has become \dqp{\bs\$}. By
+default, FunnelWeb allows the user to write any text as free text and not
+have to worry about accidentally invoking typesetter features.}
+
+\narrowthing{fw sequences:}{The \p{fw} sequences (\eg{}\p{\bs{}fwbeginmacro})
+invoke \TeX{} macros defined
+earlier in the documentation file (and not shown here).}
+
+\narrowthing{The macro:}{The macro is typeset using a set of predefined
+\TeX{} macros. See the printed documentation to see what this looks like
+on paper.}
+
+\narrowthing{Typesetter directives:}{Unlike the \TeX{}
+command sequences (which
+were neutralized), the FunnelWeb typesetter directives turn into \TeX{} macro
+calls. For example, \dqp{@\{inline@\}} became \dqp{\bs{}fwlit\{inline\}}.}
+
+In summary, FunnelWeb produces typeset documentation that transforms,
+but does not reorder, the input file. Macros are typeset in a specific
+style. FunnelWeb typesetter directives have particular well-defined effects.
+Free text is filled and justified, but will otherwise appear in the
+printed documentation exactly as it appears in the input file.
+
+\subsection{Typesetter Independence}
+\xx{typesetter}{independence}
+
+Although the current version of FunnelWeb can only generate documentation
+files in \TeX{} form,
+it encourages typesetter independence
+by neutralizing all \TeX{} control sequences before writing them out. The
+result is that you don't have worry about upsetting or depending on \TeX{}
+by accidentally including some special character or sequence. By default your
+input file is \newterm{typesetter independent}.
+
+This scheme differs from other literate programming tools, including
+all earlier versions of FunnelWeb, which copy their free text directly
+to the documentation file, the justification being that the programmer
+can use the full power of the typesetter language to describe the program.
+The disadvantages of doing this are first that the
+programmer is required to know the typesetting language and second that
+the input file becomes typesetter dependent. FunnelWeb avoids these problems
+by knobbling the free text be default.
+
+However, FunnelWeb does provide a trapdoor for those who want their
+free text to be fed directly to \TeX{}. To open the trapdoor,
+simply include the following pragma somewhere in your input file.
+
+\begin{verbatim}
+@p typesetter = tex
+\end{verbatim}
+
+See Section~\ref{typesetterpragma} for more information.
+
+FunnelWeb leaves the degree to which
+the user wishes to bind a particular document to a particular typesetter
+up to the user. In some cases, the extra typesetting power may compensate
+for the lack of portability. However, as a rule, it is best to
+avoid typesetter-specific commands, so as to allow your input files to
+be formatted at a later date for different typesetters.
+FunnelWeb includes a number of its own typesetter commands so as to
+support typesetter-independent input files.
+The following sections describe some of these commands. In particular,
+the next section describes the most powerful FunnelWeb typesetting directives
+which allow the user to structure the document hierarchically.
+
+\subsection{Hierarchical Structure}
+\xx{hierarchical}{structure}
+
+The tree structure is one of the most effective structuring tools that
+exists, deriving its power from the principal of divide and conquor.
+So effective is it that the internal organization of
+most technical books are tree
+structures which are concisely summarized in the table of contents.
+In contrast, computer programs
+are usually presented as flat sequences of text to be consumed by an
+anonymous compiler.
+
+In order to bring program documentation up to the structural
+sophistication commonplace in technical books, FunnelWeb provides five levels
+of section headings\xx{section}{headings}
+implemented by the five special sequences \p{@A},\x{@A...} \p{@B},
+\p{@C}, \p{@D}, and \p{@E}. These must always appear at the start of a line.
+\p{@A} is the highest level section
+(\eg{}like \LaTeX{}'s \p{\bs{}chapter}) and \p{@E} is the lowest level
+section (\eg{}like \LaTeX{}'s \p{\bs{}subsubsubsection}).
+Section headings can appear anywhere in
+the free text of a FunnelWeb input file (\ie{}anywhere except inside a
+macro definition).
+
+Each section heading\xx{name}{section} in a FunnelWeb document
+has an associated name.
+The name of a section can be provided explicitly by supplying it
+delimited by \p{@<} and \p{@>} immediately after the section sequence
+(\eg{}\p{@A}), or implicitly by not providing an explicit name, in which
+case the section takes the name of the first macro defined between the
+section header in question and the following section header. An error is
+generated if a section has not been given an explicit name and does not
+contain any macro definitions. Here are some example headings:
+
+\begin{verbatim}
+@A@<Feed the Penguins and Save the World@>
+@B@<Feed the Penguins@>
+@C@<Feed the little penguins@>
+@C@<Feed the big penguins@>
+@B@<Save the World@>
+@C@<Save Europe@>
+@C@<Save Africa@>
+
+@C This heading hasn't been given an explicit name, but will inherit the
+name \p{Save the rest of the world} from the macro definition below.
+
+@$@<Save the rest of the world@>@Z==@{...@}
+\end{verbatim}
+
+The feature of having unnamed sections inherit the name of the first
+macro defined within their scope is present because a common style of
+writing in FunnelWeb is to have one section per macro definition. Because,
+under this style,
+each section describes a single macro, it usually turns out that the
+macro name makes a good name for the section too. The inheritance mechanism
+prevents duplication of the name.\xx{section name}{inheritance}
+
+Apart from the requirement that each section have an explicit or implicit
+name and that its special sequence appear at the start of a line, the only
+other restriction on section headings is that a section heading at level
+$n$ cannot appear immediately after a section heading at level $n-1$ or less.
+In other words, the hierarchy cannot be broken. For
+example, an \p{@C} cannot appear after an \p{@A} heading unless there
+is an intervening \p{@B} heading.
+
+\begin{verbatim}
+@A@<The Top Heading@>
+@C@<Level C here is not allowed after an A and will cause an error@>
+\end{verbatim}
+
+This rule extends to the start of the
+file; if there are any headings at all, the first one must be an \p{@A}
+heading. The following file, while short, is in error.
+
+\begin{verbatim}
+This FunnelWeb input file is in error because its first section heading
+is at level C rather than level A.
+@C@<2@>
+\end{verbatim}
+
+\subsection{Understanding the Printed Documentation}
+
+Type in the following file, and use FunnelWeb and \TeX{} to generate the
+corresponding printed
+documentation.\xx{programmer's}{cheer}\xx{hacker's}{cheer}
+\xx{hacker's}{dictionary}
+
+\begin{verbatim}
+@A@<Table of Contents@>
+
+@t table_of_contents
+
+@A@<Macros for Moral Support@>
+
+The following macro contain comments that provide moral support in the
+output code.
+
+@$@<Programmer's Cheer@>@M==@{
+-- Shift to the left!
+-- Shift to the right!
+-- Pop up, push down!
+-- Byte! Byte! Byte!
+-- (From "The New Hacker's Dictionary").
+@}
+
+The next macro is similar but is distributed throughout the program.
+@$@<Hacker's Cheer@>+=@{@+-- Pointer to the left@+@}
+
+@A@<An Extremely Imperative Stack Abstraction@>
+
+@B@<Define the Stack@>
+@$@<Hacker's Cheer@>+=@{-- Pointer to the right@+@}
+@$@<Stack Type@>@Z==@{type stack = record ... end;@}
+
+@B@<Push the Stack@>
+@$@<Hacker's Cheer@>+=@{-- Hack that code@+@}
+@$@<Push Procedure@>@Z==@{@-
+procedure push(var b:stack; v:value); @<Programmer's Cheer@> {...}@}
+
+@B@<Pop the Stack@>
+@$@<Hacker's Cheer@>+=@{-- Tight! Tight! Tight!@+@}
+@$@<Pop Procedure@>@Z==@{@-
+procedure pop(var b:stack); @<Programmer's Cheer@> {...}@}
+
+@B@<Rough the Stack Up a Bit@>
+@$@<Hacker's Cheer@>+=@{-- (RNW, 04-Jan-1991).@+@}
+@$@<Rough Procedure@>@Z==@{@-
+procedure rough(var b:stack); @<Hacker's Cheer@> {...}@}
+
+@O@<dummy.txt@>==@{dummy@+@}
+\end{verbatim}
+
+An examination of the printed documentation reveals a lot about how
+FunnelWeb's presentation works.
+
+First, notice how the \p{@t} typesetter directive
+at the top of the file has caused a table of contents to appear.
+This is one of FunnelWeb's typesetting features and is discussed in a later
+section. The table of contents shows that the sections have been
+numbered hierarchically.
+
+Now take a look at the typeset macro definitions. Most important are the
+numbers in square brackets that follow each macro name. As well as
+numbering the headings \i{hierarchically}, FunnelWeb \i{independently}
+numbers
+the macro definitions \i{sequentially}. The first macro definition
+(for \dq{Programmer's Cheer}) is numbered 1.
+The second (for \dq{Hacker's Cheer}) is numbered 2 and so on.
+Note that it is not macros that are numbered, but macro definitions.
+The distinction is necessary because some macros (such as the
+\dq{Hacker's Cheer} macro) are additive.
+It is important to
+realize that there is no relationship between the numbers of the headings
+and the numbers of the macro definitions.
+
+Now take a look at the notes beneath the body of each macro definition.
+All macro definitions are followed by a note indicating the definitions in
+which the macro is called. Additive macros have an additional list, listing
+the definitions in which they are defined.
+
+Finally, take a look at the macro \i{call} of \dq{Programmer's Cheer}
+in section~3.2 of the printed documentation.
+Macro calls are set in slanted roman (so that they can
+be distinguished from the \p{tt font} code) and are followed by
+the number of the defining macro definition. In this case, the macro
+was defined in definition~1. Further down, the call to
+the \dq{Hacker's Cheer} macro
+indicates that the macro was defined in definition~2. In fact the macro is
+additive and definition~2 is just the first of many definitions. To list
+all definitions in a call to an additive macro would be unnecessarily messy.
+
+\subsection{Literals and Emphasis}
+\x{literal construct}\x{emphasis construct}
+
+When writing about program code, it is often desirable to be able to indicate
+that a particular word or phrase be typeset in the same manner as the code
+being discussed. For example, one might talk about the variable \p{topval}
+or the procedure \p{stack\_pop} and wish for them to be typeset
+as they are in this sentence. This, of course,
+is simple to do using \TeX{} macros, but use of the
+(more general) FunnelWeb typesetting directives to do the same work has the
+added benefit of keeping the document portable to other typesetters.
+
+FunnelWeb provides two in-text type modification constructs: \p{@\{...@\}}
+and \p{@/...@/}\x{@slash}\x{@braces}
+where $\ldots$ is raw text. The \p{@\{...@\}}
+construct sets the enclosed
+text in the same manner as the text of macro definitions is set. The
+\p{@/...@/} construct emphasises its enclosed text in some
+typesetter-dependent fashion. Typically the emphasised text is set in
+italics.
+
+Here is an example of how these constructs might be used:
+
+\begin{verbatim}
+The following procedure @{put_sloth@} writes the @{sloth@} variable to
+the output file. Note: @/The output file must be opened for writing
+at this point or the program will crash!@/
+\end{verbatim}
+
+\subsection{Adding a Header Page}
+\x{header page}
+
+FunnelWeb provides a few typesetter-independent typesetting constructs
+which are specifically designed for the construction of header pages.
+These constructs are usually best placed at the top
+of your input file, but can be placed anywhere the document if desired to
+create header pages right through. The two main restrictions on these
+constructs is that the \p{@t} must start at the start of a line (which
+cannot contain comments), and that the constructs cannot appear inside
+a macro definition. Here is what the top of an input file might look like:
+
+\begin{verbatim}
+@t vskip 40 mm
+@t title titlefont centre "Hairy Wombat"
+@t title titlefont centre "Simulation"
+@t vskip 10 mm
+@t title smalltitlefont centre "A Program in Six Parts"
+@t title smalltitlefont centre "Simulating the Life of Some Hairy Wombats"
+@t vskip 20 mm
+@t title normalfont left "By Zqitzypbuswapzra Ypongtatoslrtzz"
+@t new_page
+@t table_of_contents
+@t new_page
+\end{verbatim}
+
+The \p{@t} at the start of each line indicates that each entire line is
+a typesetter directive.
+The \p{vskip}\xx{vskip}{directive}
+directive instructs FunnelWeb to skip some vertical space
+(measured in millimetres). The \p{title} directive\xx{title}{directive}
+instructs FunnelWeb to
+position a string of text on a single line of its own. Options are
+provided for font and alignment. The first word after \p{title} is the font
+which can be one of (in decreasing order of size) \p{titlefont},
+\p{smalltitlefont}, and \p{normalfont}. The second word after \p{title} is
+the desired alignment of the text. The options here are \p{left}, \p{right},
+and \p{centre}. The \p{new\_page}
+directive\xx{newpage}{directive}
+instructs FunnelWeb to skip to a new page. Finally, the
+\p{table\_of\_contents} directive\xx{table of contents}{directive}
+instructs FunnelWeb to insert a table of
+contents at that point in the text.
+
+\subsection{Comments}
+\x{comments}
+
+A FunnelWeb comment commences with the \p{@!}\x{@!} sequence and continues up to,
+but not including, the end of line marker at the end of the line that the
+comment sequence is on. Comments can be placed on any line except
+\p{@i} include, \p{@p} pragma, and \p{@t} typesetter directive lines.
+
+The text following the FunnelWeb comment sequence \p{@!} will not appear
+in the product files or the documentation file. It is
+only for the eyes of those who bother to look at the original \p{.fw}
+input file. Typically FunnelWeb comments are used to describe the way in
+which particular FunnelWeb constructs are being used. Example:
+
+\begin{verbatim}
+@! This macro is really revolting. Please forgive me. I had to do it!
+@$@<Revolt Me@>==@{@-
+@#X@(@#Y@(@#Z@,@"@#Z@"@)=6@,Teapot@,@"@#Q@(45@)@"@,Tiger@)@}
+\end{verbatim}
+
+\section{A Complete Example}
+\xx{complete}{example}\xx{FunnelWeb}{Example}
+
+To finish off the chapter, a complete example of a FunnelWeb input file
+is presented. Although unrealistically short, it gives a better
+idea of what a typical FunnelWeb \p{.fw} file looks like.
+
+\begin{verbatim}
+@!---------------------------------------!
+@! Start of FunnelWeb Example .fw File !
+@!---------------------------------------!
+
+@t vskip 40 mm
+@t title titlefont centre "Powers:"
+@t title titlefont centre "An Example of"
+@t title titlefont centre "A Short"
+@t title titlefont centre "FunnelWeb .fw File"
+@t vskip 10 mm
+@t title smalltitlefont centre "by Ross Williams"
+@t title smalltitlefont centre "26 January 1992"
+@t vskip 20 mm
+@t table_of_contents
+
+@A@<FunnelWeb Example Program@>
+
+This program writes out each of the first @{p@} powers of the first @{n@}
+integers. These constant parameters are located here so that they are easy to
+change.
+
+@$@<Constants@>==@{@-
+n : constant natural := 10; -- How many numbers? (Ans: [1,n]).
+p : constant natural := 5; -- How many powers? (Ans: [1,p]).@}
+
+@B Here is the outline of the program. This FunnelWeb file generates a single
+Ada output file called @{Power.ada@}. The main program consists of a loop that
+iterates once for each number to be written out.
+
+@O@<Power.ada@>==@{@-
+@<Pull in packages@>
+
+procedure example is
+ @<Constants@>
+begin -- example
+ for i in 1..n loop
+ @<Write out the first p powers of i on a single line@>
+ end loop;
+end example;
+@}
+
+@B In this section, we pull in the packages that this program needs to run. In
+fact, all we need is the IO package so that we can write out the results. To use
+the IO package, we first of all need to haul it in (@{with text_io@}) and then
+we need to make all its identifiers visible at the top level (@{use text_io@}).
+
+@$@<Pull in packages@>==@{with text_io; use text_io;@}
+
+@B Here is the bit that writes out the first @{p@} powers of @{i@}. The power
+values are calculated incrementally in @{ip@} to avoid the use of the
+exponentiation operator.
+
+@$@<Write out the first p powers of i on a single line@>==@{@-
+declare
+ ip : natural := 1;
+begin
+ for power in 1..p loop
+ ip:=ip*i;
+ put(natural'image(ip) & " ");
+ end loop;
+ new_line;
+end;@}
+
+@!---------------------------------------!
+@! End of FunnelWeb Example .fw File !
+@!---------------------------------------!
+\end{verbatim}
+
+\section{Summary}
+
+This chapter has provided an introduction to FunnelWeb and a tutorial
+that covers most of its features. FunnelWeb's functionality can be split into
+two parts: a macro preprocessor, and support for typesetting.
+The reader should be aware that
+the examples in this chapter, constructed as they were to demonstrate
+particular features of FunnelWeb, do not present a realistic picture
+of the best use of the tool. Only the final example of this chapter
+comes close.
+The reader should study this last example carefully
+and then write some real
+programs using FunnelWeb before proceeding to Chapter~\ref{chapadvanced}
+which provides more advanced information. At this stage it does not
+particularly matter exactly how you use Funnelweb, as everyone develops
+their own style anyway. The important thing is to try it.
+
+%==============================================================================%
+% End of Ch1.tex %
+%==============================================================================%
diff --git a/web/funnelAC/userman/u_ch2.tex b/web/funnelAC/userman/u_ch2.tex
new file mode 100644
index 0000000000..f1abe0773b
--- /dev/null
+++ b/web/funnelAC/userman/u_ch2.tex
@@ -0,0 +1,1586 @@
+%==============================================================================%
+% Start of Ch2.tex %
+%==============================================================================%
+%
+% Copyright
+% ---------
+% Copyright (C) 1992 Ross N. Williams.
+% This file contains a chapter of the FunnelWeb User's Manual.
+% See the main TeX file for this manual for further information.
+%
+%==============================================================================%
+
+\chapter{FunnelWeb Hints}
+\label{chapadvanced}\xx{FunnelWeb}{hints}
+
+Whereas Chapter~\ref{chapintroduction} provides an introduction to
+FunnelWeb and Chapter~\ref{chapdefinition} a definition, \i{this} chapter
+contains hints about how
+FunnelWeb can be used. This chapter probably should not be read until
+the reader has already commenced using FunnelWeb, or at the very least,
+tried out some of the examples in Chapter~\ref{chapintroduction}.
+Those who find themselves using FunnelWeb frequently
+should read this chapter at some stage
+so as to ensure that they are getting the most out of it.
+
+Most of the examples in this chapter have been
+placed in the FunnelWeb regression test suite which should be
+available in a directory called \p{/fwdir/tests/}.
+The files to examine are \p{hi01.fw} through \p{hi10.fw}.
+
+\section{Macro Names}
+\xx{macro}{names}\xx{macro}{identifiers}
+
+When using FunnelWeb, the choice of macro names can be as
+important to the readability of a program as the choice of program
+identifiers,
+and it is important that the user know the range of options available.
+
+\narrowthing{Names are case sensitive and exact matching:}{Macro names are case
+sensitive and are matched exactly. The strings used as a macro name
+at the point of definition and call must be
+\i{identical} for the connection to be made.}
+
+\narrowthing{Names can contain any printable character:}{FunnelWeb is less
+restrictive about its macro names than most programming languages are
+about their identifiers. A FunnelWeb macro name can contain any
+sequence of printable characters, including blanks and punctuation. Names
+can start and end with any character. Names cannot cross line boundaries. The
+following are all legal macro names:}
+
+\begin{verbatim}
+ @<This macro expands to some really bad code@>
+ @<@>
+ @<453 #$ %&# --===~~1">>>@>
+ @<<@>
+ @<<>@>
+ @<a b c d e f g@>
+ @< ! @>
+ @<?? ...@>
+ @<"Who's been hacking MY program" said Father Bear.@>
+ @<Update the maximum and return for more data@>
+\end{verbatim}
+
+\narrowthing{Names must be no more than a maximum limit in length:}{Names
+can be
+no longer than a predefined maximum length. Currently this length cannot
+be modified.}
+
+Typically, macro names will consist of a short English phrase or sentence
+that describes the contents of the macro.
+
+\section{Quick Names}
+\xx{quick}{names}
+
+Sometimes a particular macro must be used extremely often. When this happens
+it is desirable to make the macro's name as short as possible.
+The shortest ordinary FunnelWeb macro name is the empty name\xx{empty}{name}
+\dqp{@<@>}, which is four characters long. Single-character names are
+five characters long.
+
+To cater for the cases where really short names are needed, FunnelWeb provides
+a \newterm{quick name} syntax that allows one-character macro names to be
+specified in two less characters. Quick names take the form of the special
+character, followed by a hash (\p{\#}) followed by a single character.
+Examples:
+
+\begin{verbatim}
+@#A @#| @#& @#m
+\end{verbatim}
+
+This form of macro name has the same syntactic functionality as an ordinary
+name and can be substituted wherever an ordinary name can be. In fact
+quick names live in the same namespace as ordinary macro names. For example
+the quickname \p{@\#A} is the \i{same name} (refers to the same macro)
+as the ordinary name \p{@<A@>}.
+
+Because quick names look syntactically \dq{open} (\ie{}they do not have
+a closing\p{@>} as ordinary names do), it is best to avoid them except
+where a macro must be called very often.
+
+\section{FunnelWeb the Martinet}
+\xx{FunnelWeb}{rules}\xx{FunnelWeb}{martinet}
+
+There are many ways in which a macro preprocessor can cause unexpected
+difficulties. FunnelWeb seeks to avoid many of these problems by performing
+a number of checks. This section describes some of the checks that
+FunnelWeb performs.
+
+\narrowthing{Trailing blanks in the input file:}{Trailing
+blanks\xx{trailing}{blanks} are usually
+not dangerous, but
+FunnelWeb disallows them anyway. All trailing blanks in the
+\i{input} (\p{.fw} file) are flagged as errors by FunnelWeb.
+FunnelWeb does not flag trailing blanks in any of its output files.}
+
+\narrowthing{Input line length:}{FunnelWeb has a maximum input line
+length.\xx{input line}{length}
+If FunnelWeb reads an input line longer than this length, it flags the
+line with an error message. The maximum length can be changed using a
+pragma (see Chapter~\ref{chapdefinition}).}
+
+\narrowthing{Product file line length:}{FunnelWeb
+watches the length of output lines\xx{output line}{length}
+and all output lines longer than the limit are flagged with error
+messages.
+The maximum length can be changed using a
+pragma (see Chapter~\ref{chapdefinition}).
+That FunnelWeb polices output lines is very important. Some programs
+can behave very strangely if they get an input line that is too long
+(\eg{}Fortran compilers\xx{Fortran}{compilers}
+can simply ignore text past a certain column!)
+and once FunnelWeb starts expanding macros using indentation, it is sometimes
+not obvious how wide the product file will be.}
+
+\narrowthing{Control characters:}{The presence of control
+characters\xx{control}{characters} in a text file
+can result in some confusing behaviour downstream when the file is
+presented to various programs. Unfortunately, some text
+editors\xx{text}{editors} allow
+control characters to be inserted into the text rather too easily, and it is
+all too easy to be tripped up. FunnelWeb prevents these problems by flagging
+with diagnostics all non-end-of-line control characters detected
+in the input (\p{.fw}) file (even TABs\x{tabs}).
+The result is that the user is
+guaranteed that product files generated from FunnelWeb contain no
+unintentional control characters. This said, FunnelWeb does allow the
+insertion of control characters in the output file by explicitly
+specifying
+them in the text using a \p{@\circumflex{}} control sequence.}
+
+\narrowthing{Number of invocations:}{FunnelWeb
+checks the number of times that\xx{invocations}{number}
+each macro is called and issues an error if the total is not one. The
+\p{@Z} (for zero) and \p{@M} (for many) macro attributes can be used
+to bypass these checks.}
+
+\narrowthing{Recursion:}{Because\xx{recursion}{macro}
+FunnelWeb does not provide any conditional
+constructs, all recursively defined macros must, by
+definition, expand infinitely,\footnote{A special case exists where
+there is recursion but no content. In this case, the expansion is finite
+(the empty string) even though the operation of expanding is infinite.
+FunnelWeb does not treat this case specially.} and are therefore
+unacceptable. FunnelWeb performs \i{static} checks to detect recursion,
+detecting it before macro expansion commences. The user need not fear that
+FunnelWeb will lock up or spew forth
+if a recursive macro is accidentally specified.}
+
+\section{Fiddling With End of Lines}
+\xx{EOL}{fiddling with}\xx{end-of-line}{fiddling with}\x{spacing}
+
+One of the fiddly aspects of programming with FunnelWeb is coping with end of
+lines. If you want your product file to be well indented without
+multiple blank lines or code run-ons, you have to spend a little time working
+out how the end of line markers get moved around.
+
+The rule to remember is that,
+disregarding the effects of special sequences
+within a macro body, \i{the body of a macro consists of exactly the text
+between the opening \p{@\{} and the closing \p{@\}}}. This text includes end of
+line markers.
+
+If for example you call a macro in a sequence of code$\ldots$
+
+\begin{verbatim}
+while the_walrus_is_sleepy do
+ begin
+ writeln('zzzzzzz');
+ @<Wake up the walrus@>
+ writeln('Umpharumpha...');
+ end;
+\end{verbatim}
+
+where \p{<wake up the walrus>} is defined as follows
+
+\begin{verbatim}
+@$@<Wake up the walrus@>==@{
+wake_up_the_walrus(the_walrus);
+@}
+\end{verbatim}
+
+then when \p{<Wake up the walrus>} is expanded you will get
+
+\begin{verbatim}
+while the_walrus_is_sleepy do
+ begin
+ writeln("zzzzzzz");
+
+ wake_up_the_walrus(the_walrus);
+
+ writeln("Umpharumpha...");
+ end;
+\end{verbatim}
+
+The blank lines were introduced by the end on line markers included in the
+definition of \p{<Wake up the walrus>}. A good solution to this problem is to
+suppress the end of line markers by defining the macro as follows
+
+\begin{verbatim}
+@$@<Wake up the walrus@>==@{@-
+wake_up_the_walrus(the_walrus);@}
+\end{verbatim}
+
+This is the usual form of macro definitions in FunnelWeb files.
+
+In additive macros, this format does not
+work properly because the end of line that is suppressed by the trailing \p{@\}}
+does not get replaced by the end of line at the end of the macro invocation. For
+example the definition
+
+\begin{verbatim}
+@$@<Wake up the walrus@>+=@{@-
+wake_up_the_walrus_once(the_walrus);@}
+\end{verbatim}
+
+later followed by
+
+\begin{verbatim}
+@$@<Wake up the walrus@>+=@{@-
+wake_up_the_walrus_again(the_walrus);@}
+\end{verbatim}
+
+is equivalent to the single definition
+
+\begin{verbatim}
+@$@<Wake up the walrus@>==@{@-
+wake_up_the_walrus_once(the_walrus);wake_up_the_walrus_again(the_walrus);@}
+\end{verbatim}
+
+Putting the trailing \p{@\}} on a new line at the end of the macro (except for
+the last definition part) solves the problem.
+
+\begin{verbatim}
+@$@<Wake up the walrus@>+=@{@-
+wake_up_the_walrus_once(the_walrus);
+@}
+\end{verbatim}
+
+later followed by
+
+\begin{verbatim}
+@$@<Wake up the walrus@>+=@{@-
+wake_up_the_walrus_again(the_walrus);@}
+\end{verbatim}
+
+is equivalent to the single definition
+
+\begin{verbatim}
+@$@<Wake up the walrus@>==@{@-
+wake_up_the_walrus_once(the_walrus);
+wake_up_the_walrus_again(the_walrus);@}
+\end{verbatim}
+
+Managing end of line markers is tricky,
+but once you establish a convention for coping
+with them, the problem disappears into the background.
+
+\section{Fudging Conditionals}
+\xx{fudging}{conditionals}
+
+As a macro preprocessor, the facility that FunnelWeb most obviously lacks
+is a conditional facility (such as C's \p{\#ifdef}). It might, therefore,
+come as a surprise to know that the first version of FunnelWeb
+actually had a built in conditional facility. The facility allowed
+the programmer to specify a construct that would select from one of a number
+of macro expressions depending on the value of a controlling macro expression.
+
+In three years the construct was never used.
+
+The reason was that conditional constructs could be fudged nearly
+as easily as they could be used. Because of this, the inbuilt conditional
+feature was removed in the current version of FunnelWeb. Not only did this
+simplify the program, but is also allowed recursive macros to be detected
+through static analysis rather than during macro expansion.
+
+There are two basic ways to fudge a conditional. First, the comment
+facility of the target programming language may be employed. For example,
+in Ada,\x{Ada}
+comments commence with \dqp{--} and terminate at the end of the line.
+Using this fact, it is easy to construct macros that can be called at the
+start of each target line and which turn on and off the lines so
+marked by defining the macro to be the empty string (ON) or the comment
+symbol (\p{--}) (OFF). For example:
+
+\begin{verbatim}
+@A@<Debug Macro@>
+
+The following macro determines whether debug code will be included in the
+program. All lines of debug code commence with a call to this macro and so
+we can turn all that code on or off here by defining this macro to be either
+empty or the single-line comment symbol (\p{--}). Note the use of a
+quick macro name.
+
+@$@#D@M==@{@} @! Turns the debug code ON.
+@! Use this definition to turn the debug code OFF: @$@#D==@{--@}
+
+... then later in the file...
+
+@$@<Sloth incrementing loop@>==@{@-
+while sloth<walrus loop
+ @#D assert(sloth<walrus,"AWK! sloth>=walrus!!!!!!!");
+ @#D assert(timer<timermax,"AWK! timer>=timermax!!!");
+ inc(sloth);
+end loop@}
+\end{verbatim}
+
+The other way to fudge a conditional is to define a macro with a
+single parameter. A call to the macro is then wrapped around all the
+conditional code in the program. The macro can then be defined to
+present or ignore the code of its argument. For example:
+
+\begin{verbatim}
+@A@<Debug Macro@>
+
+The following macro determines whether debug code will be included in the
+program. All debug code is wrapped by a call to this macro and so
+we can turn all the debug code on or off here by defining this macro to be
+either empty or its parameter.
+
+@$@#D@(@1@)@M==@{@1@} @! Turns the debug code ON.
+@! Use this definition to turn the debug code OFF: @$@#D@(@1@)==@{@}
+
+... then later in the file...
+
+@$@<Sloth incrementing loop@>==@{@-
+while sloth<walrus loop
+ @#D@(assert(sloth<walrus,"AWK! sloth>=walrus!!!!!!!");
+ assert(timer<timermax,"AWK! timer>=timermax!!!");@)
+ inc(sloth);
+end loop@}
+\end{verbatim}
+
+In languages that allow multi-line comments (\eg{}C with \p{/*} and \p{*/}),
+comments can be used to eliminate the conditioned code rather than
+absence. For example:
+
+\begin{verbatim}
+@$@#D@(@1@)@M==@{/* @1 */@} @! Comments out the debug code
+\end{verbatim}
+
+(Note: If this example were ever actually used,
+the programmer would have to be careful not to place comments in
+the argument code. Nested comments in~C are non-portable.)
+
+The parameterized macro idea can be generalized to support the choice of
+more than one mutually exclusive alternative. For example:
+
+\begin{verbatim}
+@A This module contains non-portable code that must execute on Hewlett
+Packard, Sun, and DEC workstations. The following FunnelWeb macro is
+defined to choose between these three. The first parameter is the HP code,
+the second is the Sun code, and the third is the DEC code. Whichever
+parameter constitutes the body of this macro determines which
+machine the code is being targeted\note{Dictionary says only one t
+in targeted.} for.
+
+@$@<Machine specific code@>@(@3@)@M==@{@1@} @! Configure for HP.
+
+...then later in the file...
+
+@<Machine specific code@>@(
+@"get_command_line(comline)@" @, @! HP.
+@"scan_command_line(128,comline);@" @, @! Sun.
+@"dcl_get_command_line(comline,256);@" @) @! DEC.
+\end{verbatim}
+
+Of course, this could also be performed using three separate macros. The
+main advantage of using a single macro is that the mutual exclusivity is
+enforced. Also, because FunnelWeb ensures that the number of formal and
+actual parameters are the same, this method lessens the chance that a
+machine will be forgotten in some places.
+
+
+\section{Changing the Strength of Headings}
+\xx{headings}{strength}\xx{typesetting}{strength}%
+\xx{section}{strength}\xx{font}{size}
+
+FunnelWeb provides five heading levels:
+\p{@A}, \p{@B}, \p{@C}, \p{@D}, and \p{@E} to which it binds five different
+typographical strengths. These bindings are static; a level
+\p{@A} heading will always be typeset in a particular font size regardless
+of the size of the document. The font
+sizes have been preset to be \dq{reasonable} for a range of document sizes,
+but may be inappropriate for very small or large documents.
+
+FunnelWeb does not currently provide an \dq{official}
+way (\eg{}a pragma) to change the typesetting
+strength of headings. This feature might be added in later versions.
+Meanwhile, a hack is available that will do the job, providing that you
+do not mind the hack being \TeX{}-specific and probably FunnelWeb-version
+specific.
+
+Inside the set of \TeX{} macro definitions
+that FunnelWeb writes at the top of every documentation
+file are five \dq{library}
+definitions \p{fwliba}$\ldots$\p{fwlibe} which
+provide five different typesetting strengths for headings. Near the
+end of the set of definitions, FunnelWeb binds these macros to five
+other macros \p{fwseca}$\ldots$\p{fwsece} which are invoked directly in the
+generated \TeX{} code to typeset the headings.
+
+\begin{verbatim}
+\def\fwseca#1#2{\fwliba{#1}{#2}}
+\def\fwsecb#1#2{\fwlibb{#1}{#2}}
+\def\fwsecc#1#2{\fwlibc{#1}{#2}}
+\def\fwsecd#1#2{\fwlibd{#1}{#2}}
+\def\fwsece#1#2{\fwlibe{#1}{#2}}
+\end{verbatim}
+
+This means that the typesetting strength of the headings in a FunnelWeb
+document can be changed by redefining these macros at the top of a FunnelWeb
+document. For example:
+
+\begin{verbatim}
+@p typesetter = tex
+\def\fwseca#1#2{\fwlibc{#1}{#2}}
+\end{verbatim}
+
+would set \p{@A} headings at the same strength as the default strength of
+\p{@C} headings. The \p{typesetter} directive is necessary to ensure that the
+\TeX{} control sequences get through to the documentation file unfiltered.
+
+The following will tone down all headings by two levels (with the
+\p{@D} and \p{@E} levels being allocated the default \p{@E} typesetting
+strength because there is nothing weaker).
+
+\begin{verbatim}
+@p typesetter = tex
+\def\fwseca#1#2{\fwlibc{#1}{#2}}
+\def\fwsecb#1#2{\fwlibd{#1}{#2}}
+\def\fwsecc#1#2{\fwlibe{#1}{#2}}
+\def\fwsecd#1#2{\fwlibe{#1}{#2}}
+\def\fwsece#1#2{\fwlibe{#1}{#2}}
+\end{verbatim}
+
+These definitions affect only the headings that follow them, and so they
+should be placed at the top of the FunnelWeb input file.
+
+\section{Efficiency Notes}
+\xx{FunnelWeb}{efficiency}\xx{efficiency}{notes}
+
+The following notes are worth keeping in mind when using FunnelWeb.
+
+\narrowthing{Memory:}{When\x{memory}\xx{input}{files}
+FunnelWeb processes an input file, it reads
+the entire input file, and all the included files into memory.\footnote{If a
+file is included $n$ times, FunnelWeb keeps $n$ copies in memory.} This
+organization does not pose a constraint on machines with large memories,
+but could
+present a problem on the smaller machines such as the PC.}
+
+\narrowthing{Speed:}{FunnelWeb\x{speed} is not a slow program. However, it is
+not particularly fast either. If the speed at which FunnelWeb runs is
+important to you, then the thing to keep in mind is that FunnelWeb has been
+optimized to deal efficiently with large slabs of text. FunnelWeb treats
+input files as a sequence of text slabs and special sequences (\eg{}\p{@+})
+and whenever it hits a special sequence, it has to stop and think.
+Thus, while a ten megabyte text slab would be manipulated as a single token,
+in a few milliseconds, a similar ten megabyte chunk filled with special
+sequences would take a lot longer.
+If FunnelWeb is running slowly, look to see if the input contains
+a high density of special sequences. This can sometimes happen if FunnelWeb
+is being used as a backend macro processor and its input is being
+generated automatically by some other program.}
+
+\narrowthing{Macro expansion:}{When\xx{macro}{expansion}
+tangling (expanding macros), FunnelWeb never
+expands a macro expression into memory; it always writes it to the
+product file
+as it goes. This is a powerful fact, because it means that you can
+write macros containing an unlimited amount of text, and pass such macros
+as parameters to other macros without becoming concerned about overflowing
+some kind of buffer memory. In short, FunnelWeb does not impose any
+limits on the size of macro bodies or their expansions.}
+
+\section{Interactive Mode}
+\x{interactive mode}\x{keyboard mode}
+
+As well as having a command line interface with lots of options, FunnelWeb
+also provides a command language and a mode (\dq{interactive mode})
+in which commands in the language can be typed interactively. The
+FunnelWeb command interpreter was created primarily
+to support regression testing,\xx{regression}{testing}
+but can also be useful to FunnelWeb users.
+
+FunnelWeb's command interpreter\xx{command}{interpreter}
+reads one command per line and can read
+a stream of commands either from a text file, or from the console. The
+interpreter can understand over twenty commands. See
+Chapter~\ref{chapdefinition} for a full list. However, most of them
+were designed to support regression testing and will not be of use to the
+casual user.
+
+The commands that are of greatest use to the casual user
+are:\xx{useful}{commands}
+
+\begin{verbatim}
+ ! - Comment. Ignores the whole line.
+ EXECUTE fn - Execute the specified file.
+ FW options - Invoke FunnelWeb-proper once.
+ SET options - Sets options.
+ SHOW - Displays currently active options.
+ TRACE ON - Turns command tracing ON.
+ QUIT - Quits FunnelWeb.
+\end{verbatim}
+
+To distinguish here between invocations of the FunnelWeb program
+and FunnelWeb runs inside the shell, we call the latter \newterm{FunnelWeb
+proper}. The \dqp{FW} command invokes FunnelWeb proper with the specified
+options which take the same syntax as they do on the command line. The only
+restriction is that none of the action options can be turned on except
+\dqp{+F} which must be turned on.
+
+The \dqp{SET} command\xx{set}{command}
+has the same syntax as the \dqp{FW} command except that it
+does not allow \i{any} action options to be
+specified. It's sole effect is to set default option values for the
+rest of the run.
+
+The \dqp{SHOW}\xx{show}{command}
+command displays the current default options.
+
+By default, FunnelWeb does not echo the commands that it processes in a
+script. The \dqp{TRACE ON}\xx{trace on}{command}
+command turns on such tracing.
+
+These commands can be combined to streamline the use of FunnelWeb.
+For example, you might wish to create a script called \p{typeset.fws}
+to process a whole group of files.
+
+\begin{verbatim}
+trace on
+!This script typesets the whole program.
+! Set no listing file, no product files, but specify a documentation file
+! and specify the directory into which it should be placed.
+set -L -O +T/usr/ross/typeset/
+fw prog1
+fw prog2
+fw prog3
+fw prog4
+\end{verbatim}
+
+There are a few ways in which this script can be run. The simplest is
+simply to specify it in the \dqp{+X} option of a FunnelWeb invocation.
+FunnelWeb shellscripts default to \dqp{<current\_directory>} and \dqp{.fws}.
+
+\begin{verbatim}
+fw +xtypeset
+\end{verbatim}
+
+The second alternative is to enter interactive mode.
+
+\begin{verbatim}
+fw +k
+\end{verbatim}
+
+From there, you can execute the script using:
+
+\begin{verbatim}
+execute typeset
+\end{verbatim}
+
+Interactive mode could be very useful to those with multiple-window
+workstations.\x{workstations}
+The user could create a window containing an interactive
+session of FunnelWeb, and then switch between windows, editing, and executing
+FunnelWeb proper and other programs.
+
+If you find yourself using the command interpreter a lot, be sure to
+read about the other commands that are available in
+Chapter~\ref{chapdefinition}.
+
+\section{Setting Up Default Options}
+\xx{options}{setting defaults}\xx{default}{options}
+
+If you do not like FunnelWeb's default settings for its command line
+options, there are a number of ways in which you can change them.
+
+\narrowthing{Define an \dq{alias}:}{Use your operating system
+\dqp{alias}\x{alias}
+facility to create an alias for FunnelWeb containing the desired options.
+FunnelWeb processes options from left to right, so you can override
+these defaults later if you wish.}
+
+\narrowthing{Create a script called \dqp{fwinit.fws}:}{When FunnelWeb
+starts up, it executes a script called \dqp{fwinit.fws}\x{fwinit.fws}
+if\xx{startup}{script}\xx{initialization}{script} such a
+script exists in the current directory. You can use this fact to set options
+before the run of FunnelWeb proper by creating such a script and placing
+a single \dqp{set} command in it containing the desired options. The main
+trouble with this approach is that the options in the \p{set} command will
+be processed \i{after} the command line options, which means that you won't
+be able to override them on the command line.}
+
+For example, you might be involved more with presenting programs than with
+running them, and want FunnelWeb to generate a documentation
+file by default, but not to produce
+listing or product files by default. In Unix you could do this with:
+
+\begin{verbatim}
+alias fw fw -L -O +T
+\end{verbatim}
+
+\section{FunnelWeb and Make}
+\x{make utility}\xx{file}{dependencies}
+
+The Unix \p{Make} program allows a set of dependencies between a set of
+files to be described, and then uses these dependencies to control the way in
+which the files are created and updated. Typically,
+\p{Make} is used to control the process of transforming a collection of
+source code files to one or more executable files.
+As the use of FunnelWeb implies an extra stage to this process, it is
+natural to include the transformation of \p{.fw} files to source code
+files as part of the \p{Make} process. This is easy to do, but the user
+should be aware of one aspect of FunnelWeb which can cause problems.
+
+It is often useful, when using FunnelWeb, to create a FunnelWeb \p{.fw}
+file that generates more than one product file.
+That is, a single \p{.fw} file may have many macro definitions connected
+to product files so that when the FunnelWeb \p{.fw} file is processed by
+FunnelWeb, several files are created. For example, this facility has been
+used to great effect to place the description of an Ada\x{Ada} package's
+package specification file and package body file in the same FunnelWeb
+\p{.fw} file.
+
+The use of multiple product files, however, provokes a problem
+with dependencies. Suppose for example that a FunnelWeb \p{prog.fw}
+produces two product files \p{proc.spec} (a package specification)
+and \p{prog.body} (a package body). If the package is accessed in the way
+that packages normally are, it will be quite common for the programmer
+to want to modify the package body without modifying the program specification.
+So the programmer will edit the \p{prog.fw} file to change the package
+body. The result of running this through FunnelWeb will be the desired
+new package body file. However, FunnelWeb will also produce a new package
+specification product file \i{even though it may be identical to the
+previous version!} The result is that the newly created (with a recent
+file date) specification package file could provoke a huge remake of much
+of the program in which it resides.
+
+To solve the problem, FunnelWeb includes a command line option
+(\p{D} for Delete),\xx{D}{option}\xx{delete}{output files}
+which when turned on (using \dqp{+D}) causes
+FunnelWeb to suppress\xx{suppression}{file}
+product and documentation files that are identical
+to the previously existing versions of the same files. For example,
+if, during a FunnelWeb run, a macro was connected to a product file called
+\p{x.dat}, and the macro expanded to \i{exactly} the same text as is
+contained in \p{x.dat} then FunnelWeb would simply \i{never write the product
+file}, the file \p{x.dat} would be untouched and, as a result, no further
+\p{Make} propagations would take place.
+
+FunnelWeb implements this feature by writing each product file to
+a temporary file with a temporary file name. It then compares the temporary
+file with the target file. If the two are identical, it deletes the
+temporary file. If the two are different it deletes the target file and
+renames the temporary file to the target file.
+
+Use of the \p{D} facility means that the programmer need not be punished
+(by extra \p{Make} propagations) for describing more than one product file
+in the same FunnelWeb file.
+
+
+\section{The Dangers of FunnelWeb}
+\xx{FunnelWeb}{dangers}\xx{FunnelWeb}{pitfalls}
+
+Like many tools that are general and flexible, FunnelWeb can be used in a
+variety of ways, both good and bad. One of the original appeals of the
+literate approach to programming for Knuth,\xn{Donald}{Knuth}
+the inventor of literate
+programming,\xx{literate}{programming}
+was that it allows the programmer to describe the target
+program bottom up, top down, size to side, or chaotically if desired.
+The flexibility that this style of programming leaves much
+room for bad documentation as well as good documentation. Years of
+experience with FunnelWeb has revealed the following stylistic pitfalls
+which the experienced FunnelWeb user should take care to
+avoid.\footnote{The fact that these faults are listed here does not mean
+that the author has eliminated them in his own work. Rather,
+it is mainly the author's own mistakes that have resulted in this list
+being compiled. The author immediately
+confesses to several of the faults listed here, most notably that of
+Pavlov documentation.}
+
+\narrowthing{Spaghetti organization:}{By\xx{spaghetti}{organization}
+far the worst problem that arises
+in connection with the literate style occurs where the programmer has
+used the literate tool to completely scramble the program so that the
+program is described and layed out in an unordered, undisciplined
+\dq{stream of consciousness}.\x{stream of consciousness}
+In such cases the programmer may be using
+the literate style as a crutch to avoid having to
+think about structuring the presentation.}
+
+\narrowthing{Boring organization:}{At\xx{boring}{organization}
+the other extreme, a program may be
+organized in such a strict way that it is essentially laid out in the
+order most \dq{desired} by the target programming language. For example,
+each macro might contain a single procedure, with all the macros being
+called by a macro connected to a file at the top. In many cases a boring
+structure may be entirely appropriate, but the programmer should be warned
+that it is easy to slip into such a normative style, largely forgetting the
+descriptive structural power that FunnelWeb provides.}
+
+\narrowthing{Poor random access:}{Using\xx{random}{access}
+FunnelWeb, it is quite possible to write
+programs like novels\x{novels}
+--- to be read from cover to cover. Sometimes the
+story is very exciting, with data structures making dashing triumphs and
+optimized code bringing the story to a satisfying conclusion. These programs
+can be works of art.
+Unfortunately, without careful construction,
+such \dq{novel-programs} can become very hard to access randomly by (say)
+a maintenance programmer\xx{maintenance}{programmer}
+who wishes only to dive in and fix a specific
+problem. If the entire program is scrambled for sequential exposition, it
+can be hard to find the parts relating to a single function.
+Somehow a balance must be struck in the document between the
+needs of the sequential and of the random-access reader.
+This balance will depend on the intended use of the program.}
+
+\narrowthing{Too-interdependent documentation:}{Sometimes,
+when\xx{documentation}{interdependent} editing a
+program written using FunnelWeb, one knows how to modify the program,
+but one is unsure of how to update the surrounding documentation!
+The documentation may be woven into such a network of facts that it seems that
+changing a small piece of code could invalidate many
+pieces of documentation scattered throughout the document. The documentation
+becomes a big tar pit in which movement is impossible.
+For example,
+if you have talked about a particular data structure invariant throughout
+a document, changing that invariant in
+a small way could mean having to update all the documentation without
+touching much
+code. In such cases, the documentation is too interdependent. This could be
+symptomatic of an excessibly interconnected program, or of an
+excessively verbose or redundant documenting style. In any case, a balance
+must be struck between the conversational style that encourages redundancy
+(by mentioning things many times) and the normalized database approach where
+each fact is given at only one point, and the reader is left to figure
+out the implications throughout the document.}
+
+\narrowthing{Pavlov documentation:}{By\xx{pavlov}{documentation}
+placing so much emphasis on the documentation,
+FunnelWeb naturally provides slots where documentation \dq{should} go. For
+example, a FunnelWeb user may feel that there may be a rather unpleasant
+gap between a \p{@C} marker and the following macro. In many cases \i{no}
+commentary is needed and the zone is better left blank rather than being
+filled with the kind of uninformative waffle one often finds filling the slots
+of structured documentation written according to a military standards
+(\eg{}MIL-STD-2167A).\x{MIL-STD-2167A}\x{2167A}\footnote{Note:
+This is not a criticism of 2167A,
+only of the way it is sometimes used.} The lesson is to add documentation
+only when it adds something. The lesson in Strunk and White\paper{Strunk79}
+(p.~23)
+holds for
+program documentation as it does for other writing: \dq{Vigorous writing is
+concise. A sentence should contain no unnecessary words, a paragraph no
+unnecessary sentences, for the same reason that a drawing should have
+no unnecessary lines and a machine no unnecessary parts. This
+requires not that the writer make all his sentences short, or that he avoid
+all detail and treat his subjects only in outline, but that every word
+tell.}.\checked{}}
+
+\narrowthing{Duplicate documentation:}{Where\xx{duplicate}{documentation}
+the programmer is generating
+product files that must exist on their own within the entire programming
+environment (\eg{}the case of a programmer in a team who is using FunnelWeb
+for his own benefit but must generate (say) commented Ada\x{Ada}
+specification
+package files) there is a tendency for the comments in the
+target code to duplicate the commentary in the FunnelWeb text. This may or
+may not be a problem, depending on the exact situation. However, if this is
+happening, it is certainly worth the programmer spending some time deciding
+if one or other of the FunnelWeb or inline-comment documentation should be
+discarded.
+In many cases, a mixture can be used, with the FunnelWeb documentation
+referring the reader to the inline comments where they are present.
+For example:}
+
+\begin{verbatim}
+@A Here is the header comment for the list package specification.
+The reader should read these comments carefully as they define a list.
+There is no need to duplicate the comments in this text.
+
+@$@<Specification package header comments@>==@{@-
+-- LIST PACKAGE
+-- ============
+-- * A LIST consists of zero or more ITEMS.
+-- * The items are numbered 1 to N where N is the number of items in the list.
+-- * If the list is non-empty, item 1 is called the HEAD of the list.
+-- * If the list is non-empty, item N is called the TAIL of the list.
+-- ...
+@}
+\end{verbatim}
+
+\narrowthing{Overdocumenting:}{Another\xx{over}{documentation}
+evil that can arise when using FunnelWeb is
+to over-document the target program. In some of Knuth's earlier (\eg{}1984)
+examples of literate programming, each variable is given its own description
+and each piece of code has a detailed explanation. This level of analysis,
+while justified for tricky tracts of code, is probably not warranted
+for most of the code that constitutes most programs. Such over-commenting
+can even have the detrimental affect of obscuring the code, making it hard
+to understand because it is so scattered (see \dq{spaghetti organization}
+earlier). It is up to the user to decide when a stretch of just a few lines of
+code should be pulled to bits and analysed and when it is clearer to leave it
+alone.}
+
+\narrowtext{In the case where there
+are a few rather tricky lines of code, a detailed
+explanation may be appropriate. The following example
+contains a solution to a problem outlined in section 16.3 of
+the book \dq{The Science of Programming} by David Gries\paper{Gries81}.}
+
+\begin{verbatim}
+@C@<Calculation of the longest plateau in array b@>
+
+This section contains a solution to a problem outlined in section 16.3 of
+the book @/The Science of Programming@/ by David Gries[Gries81].
+
+@D Given a sorted array @{b[1..N]@} of integers, we wish to determine the
+@/length@/ of the longest run of identically valued elements in the array.
+This problem is defined by the following precondition and postcondition.
+
+@$@<Precondition@>==@{/* Pre: sorted(b). */@}
+@$@<Postcondition@>==@{@-
+/* Post: sorted(b) and p is the length of the longest run in b[1..N]. */@}
+
+@D We approach a solution to the problem by deciding to try the approach of
+scanning through the array one element at a time maintaining a useful
+invariant through each iteration. A loop variable
+array index @{i@} is created for this purpose. The bound function is
+@{N-i@}. Here is the invariant.
+
+@$@<Invariant@>==@{@-
+/* Invariant: sorted(b) and 1<=i<=N and */
+/* p is len of longest run in b[1..i]. */@}
+
+@D Establishing the invariant above in the initial, degenerate case is easy.
+
+@$@<Establish the plateau loop invariant initially@>==@{i=1; p=1;@}
+
+@D At this stage, we have the following loop structure. Note that when both
+the invariant and @{i != N@} are true, the postcondition holds and the loop
+can terminate.
+
+@$@<Set p to the length of the longest plateau in sorted array b[1..N]@>==@{@-
+@<Precondition@>
+@<Establish the plateau loop invariant initially@>
+while (i != N)
+ {
+ @<Invariant@>
+ @<Loop body@>
+ }
+@<Postcondition@>
+@}
+
+@D Now there remains only the loop body whose sole task is to increase @{i@}
+(and so decrease the value of the bound function) while maintaining the
+invariant. If @{p@} is the length of the longest run
+seen so far (i.e. in b[1..i]), then, because the array is sorted,
+the extension of our array range to
+@{b[1..i+1]@} can only result in an increase in @{p@} if the new element
+terminates a run of length @{p+1@}. The increase can be at most 1. Because
+the array is sorted, we need
+only compare the endpoints of this possible run to see if it exists. This
+is performed as shown below.
+
+@$@<Loop body@>==@{i++; if (b[i] != b[i-p]) p++;@}
+\end{verbatim}
+
+\narrowtext{Where the code is more obvious,
+it is often better to let the code speak for itself.}
+
+\begin{verbatim}
+@C The following function compares two C~strings and returns TRUE iff they
+are identical.
+
+@$@<Function comp@>==@{@-
+bool comp(p,q)
+char *p,*q;
+{
+ while (TRUE)
+ {
+ if (*p != *q ) return FALSE;
+ if (*p == '\0') return TRUE;
+ p++; q++;
+ }
+}
+@}
+\end{verbatim}
+
+\section{Wholistic Debugging}
+\xx{wholistic}{debugging}
+
+Surprising though it may be, FunnelWeb has a key role to play in the
+\i{debugging} of programs. Long experience in programming has led me to the
+concept of \newterm{wholistic debugging}. When most programmers detect a
+bug, their first reaction seems to be to jump into the debugger\x{debugger}
+where they
+often spend many hours stepping through endless stretches of code and
+generally wasting a lot of time.
+
+In contrast, my first reaction when I detect a bug is to realize that
+\i{the code must not be in good enough shape if such a bug can arise.}
+The presence of the bug is taken as symptomatic of the lack of general
+health of the code. If that bug occurred, why not another?
+In response to this realization, my reaction is not to enter the debugger,
+but rather to return to the original code and tend it like a
+garden,\xx{code}{gardening}
+adding more comments, reworking the grotty bits, adding assertions,
+and looking for faults. In many cases, the search for faults does not
+even centre on the specific bug that arose, but does tend to focus on
+the area of code where the bug is likely to be.
+
+The result is often that the original bug is located more quickly than it
+would have been had the debugger been involved. But even if it isn't, there
+are other benefits. A programmer who enters the debugger may
+stay there for hours and still not find the bug. The result is
+frustration and no positive gain at all. In contrast, by tending to the
+code, the programmer is making forward progress at all times (the code
+is constantly improving) even if the bug is not immediately found.
+At the end of ten hours, the programmer can at least feel that the code
+is \dq{ten hours better}, whereas the debugger freak will likely feel
+defeated.
+All this makes code tending better psychologically as well as a more
+efficient approach to debugging.
+
+I call this technique wholistic debugging, for it is like the
+difference between conventional and wholistic medicine.\xx{wholistic}{medicine}
+Go to a
+conventional doctor with a headache and he might send off for head X-rays,
+perform allergy tests and perform many other
+debugging activities. Go to a wholistic doctor with the same problem and
+he might look to see if you are fit, assess your mental health, and ask you
+if your marriage is working. Both approaches are appropriate at different
+times. In programming, the wholistic approach is not used enough.
+
+\section{Examples of FunnelWeb Applications}
+\xx{FunnelWeb}{example applications}\xx{FunnelWeb}{applications}
+
+Despite (or perhaps because of) its flexibility and simplicity,
+FunnelWeb can be applied to quite a number of different
+text processing and documenting problems. This section describes some of
+the more interesting real problems that FunnelWeb has solved.
+
+\subsection{Analyzing the Monster Postscript Header File}
+\xx{monster file}{postscript}
+
+During my Ph.D. candidature, I determined at one point that it would be
+very desirable to automatically insert diagrams from the \i{MacDraw}\x{MacDraw}
+program on my Macintosh into
+\TeX{}\x{TeX}
+\p{insert}ions in my thesis.\xx{PhD}{thesis} This would allow diagrams to float
+around with the text and be printed automatically rather than having to be
+printed separately and stuck in with real glue. On the face of it, the
+problem seemed inherently solvable as the Macintosh\x{Macintosh}
+could generate PostScript\x{PostScript}
+for each diagram and this PostScript could presumably be inserted into the
+PostScript generated using \TeX{}.
+
+The only trouble was that the Macintosh PostScript code for the diagrams
+relied on an Apple PostScript header file.\xx{postscript}{header file}
+This meant that the header file
+had to be included at the start of the \TeX{} PostScript if the inserted
+PostScript for the diagrams was to work.
+Unfortunately, merely including the header file at the top didn't work, and
+it turned out that a rather detailed analysis of some parts of the Apple
+header file was required in order to perform the necessary surgery on the
+header file to make it work. This analysis was severely aggravated by the
+fact that the PostScript header file was virtually unreadable. Basically
+it was about 50K of interwoven
+definitions, that looked as if it had been run through a word processor.
+There was no way that the code could be understood clearly without some
+kind of reformatting. Two other aspects of the problem further complicated
+the analysis:
+
+\begin{itemize}
+
+\item The definitions of interest (\ie{}the ones causing the problems)
+were scattered throughout the file.
+
+\item Many definitions could not be moved. For one or more reasons
+(\eg{}to keep a definition within the activation of a particular
+dictionary \p{begin} and \p{end}) it would have been unwise to move the
+definitions of interest to the same point in the file.
+
+\end{itemize}
+
+In fact the file was so messy and complicated that, as a rule, it had to
+be handled with kid gloves. It would have been unwise to re-arrange
+the definitions or to insert comments.
+
+To my surprise, FunnelWeb provided an unexpected solution to
+the problem. First I replaced all occurrences of the \p{@} in the
+header file with \p{@@}. Second, I placed the entire header file
+in a FunnelWeb macro definition connected to a product file. I then
+processed the file and checked to make sure that the product file
+was identical to the original file.
+By doing all this I had placed the
+header file under FunnelWeb control. I then left the
+macro definition largely untouched, but replaced the PostScript
+definitions of
+interest with FunnelWeb macro calls, moving the actual PostScript
+definitions into FunnelWeb macro definitions at the end of the FunnelWeb
+file.
+
+\begin{verbatim}
+@O@<LaserHeader.ps@>==@{@-
+Unreadable Postscript code
+@<Print routine@>
+Unreadable Postscript code
+@<Zap routine@>
+Unreadable Postscript code
+@}
+
+@A This routine looks as if it does this, but really is does that,
+blah, blah blah.
+
+@$@<Print routine@>==@{@-
+/print { push pop pop push turn around and jump up and down and print it} def
+@}
+
+@A This routine zaps the...
+
+@$@<Zap routine@>==@{@-
+/zap { push pop pop push turn around and jump up and down and print it} def
+@}
+\end{verbatim}
+
+Use of FunnelWeb meant that I was able to pluck out the definitions of interest
+(a very small part of the whole file) and collect them as a group at the end
+of the file where they could be studied.
+Because each definition was safely contained in a macro, it was possible to
+write a detailed commentary of each routine without fear of affecting the
+final PostScript code in any way at all. Once this analysis was completed,
+it was possible to perform surgery on the offending PostScript definitions
+in an extremely controlled way. In particular, the FunnelWeb input file
+served as a repository for all the different versions of particular routines
+that were tried in order to get the definitions to work. A new (\b{Z}ero)
+macro was created for each version of each definition, and a commentary of how
+it performed added above it.
+
+This case demonstrates that
+FunnelWeb is an extremely powerful tool for dissecting and
+documenting cryptic text files.\xx{cryptic}{text files}
+Through the use of macros, particular
+parts of the file can be isolated and discussed without affecting the
+final product file in any way. In the example above, only a small part of the
+file was analysed, the rest being left as a blob, but in the general case,
+a cryptic text file could be inserted into FunnelWeb and then incrementally
+dissected (and possibly modified) until the result is a fully documented
+literate program. That this can be done without affecting the actual
+product file demonstrates the high degree of descriptive control that
+FunnelWeb provides.
+
+\subsection{Making Ada ADTs more A}
+\x{Ada}\x{abstract data type}\x{ADT}
+
+Like many modern programming languages, Ada provides mechanisms for hiding
+information and structure. In particular, Ada provides a \newterm{package}
+facility that allows the programmer to declare objects in a
+package definition and define them in a corresponding package body.
+This works well
+for functions and procedures. However, in the case of types, implementation
+issues (in particular, the need to know the size of exported types) have
+led the designers of Ada to force the placement of
+private type definitions in the definition package rather than the
+implementation package. This means that some implementation details
+are present in the package definition for all to see. While not actually
+dangerous (the user of the package cannot make use of the information
+without recourse to \dq{Chapter~13} of the Ada Language Reference
+Manual\paper{DOD83}), this aspect of Ada is certainly unpleasant.
+
+During the development of some Ada programs, FunnelWeb was used to solve
+this problem. Instead of creating a separate file for the package
+specification and package body, a single FunnelWeb file was created containing
+two sections, one for the each package part. The \dq{private} part of the
+package specification was then moved (using a FunnelWeb macro definition)
+to the section describing the package body. Readers who wished only to read
+the package specification could read only the first part, which contained
+a fully documented description not containing the private definition.
+
+\subsection{Multiple Language Systems}
+\xx{multiple}{languages}
+
+With the prevalence of open systems\x{open systems}
+and multi-vendor computing, it is
+often necessary to construct systems consisting of programs written in
+a number of different programming languages for a number of different
+systems. For example, a particular functionality might be implemented by a
+shellscript
+(invoked by the user) that calls a C~program that makes a network connection
+to a Pascal program that queries a database. Quite often all these programs
+must conspire closely to execute their function. In the normal case, they
+must be written separately. FunnelWeb allows them to be written as a
+whole.
+
+By creating a single FunnelWeb file that creates many product files in
+different languages, the programmer can describe the interaction between
+the different programs in any manner desired. Furthermore, because
+the different product files are all created in the same \dq{text space}
+(\ie{}in a single FunnelWeb file), it is easy for them to share information.
+
+For example, in one real application FunnelWeb was used to create a
+system for printing files\xx{printing}{system}
+on a laser printer\xx{laser}{printer}
+connected to a remote Vax
+Unix machine from a local Vax VMS
+machine. The system consisted of two files: a VMS DCL command procedure
+to run on the local node, and a Unix shellscript to run on the remote
+node. The user, by giving the print command, invoked the local VMS
+command procedure, which in turn fired up the remote Unix shellscript. The
+two scripts then cooperated to transfer the files to be printed and print
+them.
+
+In addition to its usual documentation powers, FunnelWeb assisted in the
+creation of this system in two special ways. First, it allowed pieces of
+code from the two different command procedures to be partially interwoven in a
+description of their interaction. This is just not possible with comments.
+Second, it facilitated the use of shared information. For example, under
+some conditions, each file to be printed would be renamed and copied to the
+remote system using a particular constant filename (\eg{}\dqp{printfile.tmp}).
+FunnelWeb allowed this constant filename to be included in a single macro
+definition which was invoked in the definition of each of the scripts. This
+ensured that the two scripts used the same name.
+
+\begin{verbatim}
+@A The following macro contains the temporary file name used to allow the
+two shellscripts to transfer each file to be printed.
+
+@$@<printfile@>@M==@{printme.txt@}
+
+@A Here are the scripts for the local VMS node and the remote UNIX node.
+
+@O@<vmscommandprocedure.com@>==@{@-
+DCL commands
+copy @<printfile@> unixnode::
+DCL commands
+@}
+
+@O@<unixshellscript@>==@{@-
+unix commands
+print @<printfile@>
+unix commands
+@}
+\end{verbatim}
+
+In the case of the printing system, the entire system was described and
+defined in a single FunnelWeb \p{.fw} file. In larger systems containing
+many FunnelWeb \p{.fw} files for many different modules in many different
+languages, the same trick can be pulled by placing FunnelWeb macro
+definitions for shared values into FunnelWeb include files. For example,
+a suite of implementations of network nodes, with each implementation being
+in a different programming language for a different target machine, could
+all share a table of configuration constants defined in macros in a
+FunnelWeb include file.
+
+In summary, FunnelWeb's macro and include file mechanisms provide
+a simple way for programs written in different languages to share
+information. This reduces redundancy between the systems and hence the
+chance of inconsistencies arising.\x{sharing information}
+
+\subsection{The Case of the Small Function}
+\xx{small}{functions}
+
+Often, when programming, there is a need for a
+code abstraction\xx{code}{abstraction} facility
+that operates at the text level. If the statement \dqp{a:=3;} occurs often,
+it may be best simply to repeat it verbatim. If a sequence of one hundred
+statements is repeated often, it is normal to remove the code to a function
+and replace the occurrences by a function call.
+However, in between these two extremes are cases where a particular sequence
+of code is long enough and appears often enough to be troublesome, but which
+is bound so messily to its environment as to make a function call
+cumbersome.
+
+For example, the following line of statements (referring to five variables
+declared \i{local} to a function) might appear ten times in
+a function:
+
+\begin{verbatim}
+a=b*3.14159; c=d % 256; e=e+1;
+\end{verbatim}
+
+Now the \dq{normal} rule of programming says that these statements should be
+placed in a procedure (also called a \dq{function} in the C programming language
+used in this example),
+but here five local variables are used. Use of a procedure
+(function) would result in a procedure definition looking something like:
+
+\begin{verbatim}
+void frobit(a,b,c,d,e)
+float *a,b;
+int *c,d;
+unsigned *e;
+{*a=b << 8; *c=d % 256; *e=*e+1;}
+\end{verbatim}
+
+and a procedure call something like
+
+\begin{verbatim}
+frobit(&a,b,&c,d,&e);
+\end{verbatim}
+
+This might be workable in a language that allowed formal parameters to be
+specified to be bound only to particular variables. Similarly, it might
+be possible to avoid the parameter list in languages that support
+local procedures that can access non-local variables (such as
+Pascal\x{Pascal}).
+However, in our example here, in the C programming language, these options
+are not available, and so we must either create a function with five
+parameters,
+or use the C macro preprocessor\xx{preprocessor}{C}
+(the best solution). FunnelWeb provides the
+same macro facility for languages that do not have a built-in
+preprocessor.
+
+In particularly speed-stressed applications, the programmer may be
+reluctant to remove code to a procedure because of the procedure-call
+overhead.\xx{procedure call}{overhead}
+FunnelWeb macros can help there too.
+
+In summary, there sometimes arises in programming situations where the
+cost of defining a procedure is higher than the benefits it will bestow.
+Common reasons for this are the run-time procedure overhead and
+the messy binding problems\xx{binding}{problems}
+caused by removing target code from its target context. FunnelWeb
+can help in these situations by allowing the programmer to define a text
+macro. This avoids all the problems and provides an additional incentive
+for the programmer to describe the piece of code so isolated.
+
+\subsection{When Comments are Bad}
+\xx{comments}{abuse}\xx{eliminating}{comments}
+
+In the \dq{good old days}\x{good old days}
+of small machine memories and interpreted BASIC,\x{BASIC}
+programmers would eliminate the \dqp{REM} statements\xx{REM}{statement}
+(comments) from their
+BASIC programs so as to save space and increase execution speed. Whilst
+this was obviously an appalling programming practice, the small memories
+and slow microprocessors often made this tempting, if not necessary.
+
+Thankfully, times have changed since then,
+and most code is now compiled
+rather than interpreted. However, from time to time one still runs into
+an environment or situation, or special-purpose language, where comments
+are either unavailable (no comment feature) or undesirable. Here
+FunnelWeb can be used to fully document the code without resulting in any
+comments in the final code at all. For example:\xx{header}{files}
+
+\begin{itemize}
+
+\item Comments in frequently used \p{.h} header files in C
+programs\xx{C}{header} can
+have a significant impact on compilation speed. Often such header files
+are fairly cryptic and really ought to be well commented, but their authors
+are reluctant to.
+
+\item Comments are undesirable in PostScript\x{postscript}
+header files that must be
+transferred repeatedly along communications channels (\eg{}the Apple
+Macintosh LaserWriter header file).
+
+\item Interpreted programs in embedded systems.
+
+\item Hand written machine code in hex dump form could be commented.
+
+\item A programmer may wish to annotate a text data file containing lists
+of numbers that is to be fed into a statistical program that does not
+provide any comment facility for its input file.
+
+\end{itemize}
+
+In all these situations, FunnelWeb allows full integrated documentation
+without any impact on the final code.
+
+\subsection{Documents That Share Text}
+\xx{sharing}{text}
+
+FunnelWeb is very useful when preparing multiple documents that must
+share large slabs of identical text that are being constantly modified.
+
+For example someone preparing two slightly different user manuals for two
+slightly different audiences might want the manuals to share
+large slabs of text, while still allowing differences between them.
+The following example shows how this can be done. The code is cluttered,
+but this clutter would not be a problem if the lumps of text were moderately
+large.
+
+\begin{verbatim}
+@O@<manual1.txt@>==@{@<M1@>@+@}
+@O@<manual2.txt@>==@{@<M2@>@+@}
+
+@$@<M1@>+=@{@<T1@>@}
+@$@<M2@>+=@{@<T1@>@}
+@$@<T1@>@M==@{First lump of text shared by both documents.@+@}
+
+@$@<M1@>+=@{Text for first document@+@}
+@$@<M2@>+=@{Text for second document@+@}
+
+@$@<M1@>+=@{@<T2@>@}
+@$@<M2@>+=@{@<T2@>@}
+@$@<T2@>@M==@{Second lump of text shared by both documents.@+@}
+\end{verbatim}
+
+An alternative approach, which might work better in situations where there
+are many small differences between the two documents rather than a few large
+ones, is to define a macro with two arguments, one for each product
+file document.
+Write the document from top to bottom, but place all stretches that
+differ between the two documents in a macro call.\xx{annual}{report}
+
+\begin{verbatim}
+@! Set the definition of @#D to
+@! @1 to create the shareholders report.
+@! @2 to create the customers report.
+@$@#D@(@2@)@M==@{@1@}
+
+@O@<report.txt@>==@{@-
+1992 ANNUAL REPORT TO @#D@(Shareholders@,Customers@)
+======================@#D@(============@,=========@)
+This has been a very good year for The Very Big Corporation of America.
+With your help, we have been able to successfully
+@#D@(@"screw the customers for every cent they have@"@,
+ @"knock the shareholders into submission to bring you lower prices@"@).
+With gross earnings approaching six trillion dollars, we have been able to
+@#D@(@"increase dividends@"@,
+ @"lower prices@"@).
+We expect to have an even better year next year.
+@}
+\end{verbatim}
+
+One application where text sharing can be particularly useful is in the
+preparation of computer documentation\xx{examples}{documentation}
+containing examples. For example,
+a book describing a new programming language might be full of examples
+of small programs written in the language which the user might want to try
+without having to type them all in. The \dq{default} approach of keeping
+a copy of the examples in the text of the book and another copy in
+separate files is cumbersome and error prone, because both files have to
+be updated whenever an example is changed. A more sophisticated approach is
+to store each example in a separate file, and then use the \dq{include file}
+facility of the word processor to include each example in the text.
+This is a better solution, but suffers from a few drawbacks. First, when
+editing the book in a word processor, the
+examples in the book will not be directly accessible or visible. To see an
+example, the writer would have to open the file containing the example in
+a separate window. This could become tedious if the text contained many
+examples, as many texts do. Furthermore, there is a risk that some example
+files will be included in the wrong place. Second, because the book is
+dependent on the included files, the book will end up consisting of a
+directory of a hundred or more files instead of just a few.
+
+An alternative solution is to construct a single FunnelWeb \p{.fw}
+file that, when processed, produces both the book file and the example files.
+This solution assumes that the book consists of a text file containing
+commands for a typesetter such as \TeX{}.
+
+\begin{verbatim}
+@O@<Book.tex@>==@{@#B@}
+
+@$@#B+=@{@-
+The first step to learning the object oriented AdaCgol++ language is to examine
+a hello world program.
+
+\start{verbatim}
+@<Ex1@>
+\finish{verbatim}
+@}
+
+@$@<Ex1@>==@{read iopack@+Enter !World~! !Hello~! ex pr flu X[1]@}
+@O@<Ex1.c@>==@{@<Ex1@>@}
+
+@$@#B+=@{@-
+To understand the program, think of the execution state as a plate of cheese...
+@}
+\end{verbatim}
+
+Most of the file will consist of part definitions of the additive
+macro \p{@\#B}. The definition is \dq{broken} to allow a macro definition,
+wherever an example appears.
+
+The example above is a little messy because FunnelWeb does not allow
+macros connected to product files to be called, and it does not have
+text expressions that write to an product file as well as evaluating to text.
+Nevertheless, it presents a fairly clean solution to the problem of keeping
+the example programs in a computing text up to date.
+
+\subsection{Generics}
+\xx{generics}{fudging}
+
+It is well known that generics in programming languages are closely aligned
+with textual substitution. In fact, a good way to understand the generic
+facility of a new programming language is to ask oneself the question
+\dq{In what way does this generic facility differ from simple text
+substitution?} The differences, if any, typically have to do with
+the difference in scoping between textual and intelligent substitution
+and whether the generic code is shared or copied by the implementation.
+In most cases the differences are quite minor.
+
+Because generic facilities are so closely aligned with text substitution,
+it is possible to use FunnelWeb's parameterized macros to provide generics
+in programming languages that do not support generics. Simply write a
+FunnelWeb macro whose parameters are the parameters of the generic and
+whose body is the generic object.
+
+The following FunnelWeb file gives an example of a fully worked Vax
+Pascal\x{Pascal}
+generic set package implemented using FunnelWeb parameterized macros.
+The package was written by Barry Dwyer\xn{Barry}{Dwyer}
+of the Computer Science Department
+of the University of Adelaide\xx{University}{Adelaide}
+in 1987 and was emailed to me on
+11~November 1987. The generic package provides a set
+abstraction\xx{set}{abstraction} implemented
+using linked lists. Note the clever use of the instantiation parameters in
+type, function, and procedure names.
+
+\begin{verbatim}
+@$@<Generic Set Module@>@(@2@)==@{@-
+@! @1 is the base type, @2 is the set type.
+[inherit ('@1'), environment ('@2')]
+
+module @2;
+
+type @2 = ^@2Record;
+ @2Record = record
+ Member: @1;
+ Next: @2;
+ end;
+
+procedure Null@2 (var Result: @2);
+begin new (Result);
+Result^.Member := (- MaxInt)::@1;
+Result^.Next := nil end;
+
+function IsNull@2 (S: @2): boolean;
+begin IsNull@2 := S^.Member::integer = - MaxInt end;
+
+procedure ForEach@1 (S: @2; procedure DoIt (i: @1));
+var ThisS, NextS: @2;
+begin ThisS := S;
+while ThisS^.Member::integer <> - MaxInt do
+ begin NextS := ThisS^.Next;
+ DoIt (ThisS^.Member);
+ ThisS := NextS end;
+end;
+
+function First@1 (S: @2): @1;
+begin First@1 := S^.Member end;
+
+function Is@1InSet (i: @1; S: @2): boolean;
+ procedure TestEquals (j: @1);
+ begin if Equal@1 (i, j) then Is@1InSet := true; end;
+begin Is@1InSet := false; ForEach@1 (S, TestEquals); end;
+
+function Includes@2 (S1, S2: @2): boolean;
+var Result: boolean;
+ procedure TestIfInS1 (i: @1);
+ begin if Result then if not Is@1InSet (i, S1) then Result := false; end;
+begin Result := true;
+ForEach@1 (S2, TestIfInS1);
+Includes@2 := Result end;
+
+function Disjoint@2s (S1, S2: @2): boolean;
+var Result: boolean;
+ procedure TestIfInS1 (i: @1);
+ begin if Result then if Is@1InSet (i, S1) then Result := false; end;
+begin Result := true;
+ForEach@1 (S2, TestIfInS1);
+Disjoint@2s := Result end;
+
+function Equal@2 (S1, S2: @2): boolean;
+begin
+Equal@2 := Includes@2 (S1, S2) and Includes@2 (S2, S1);
+end;
+
+procedure Insert@1 (i: @1; var S: @2);
+var This, Pred, Succ: @2;
+begin
+if not Is@1InSet (i, S) then
+ begin
+ Pred := nil; Succ := S;
+ while Succ^.Member::integer > i::integer do begin
+ Pred := Succ; Succ := Succ^.Next end;
+ if Succ^.Member::integer < i::integer then begin
+ new (This); This^.Next := Succ; This^.Member := i;
+ if Pred <> nil then Pred^.Next := This else S := This;
+ end;
+ end;
+end;
+
+procedure Insert@1s (S1: @2; var S2: @2);
+var This, Pred, Succ: @2;
+ procedure Add@1 (i: @1);
+ begin Insert@1 (i, S2) end;
+begin
+ForEach@1 (S1, Add@1);
+end;
+
+procedure Remove@1 (i: @1; var S: @2);
+var Pred, This: @2;
+begin
+Pred := nil; This := S;
+while not Equal@1 (This^.Member, i) do begin
+ Pred := This; This := This^.Next end;
+if Pred <> nil then Pred^.Next := This^.Next else S := This^.Next;
+Dispose (This);
+end;
+
+procedure Dispose@2 (var S: @2);
+var Old: @2;
+begin
+while S <> nil do begin Old := S; S := S^.Next; Dispose (Old) end;
+end;
+
+end.
+@}
+
+@O@<NaryTreeSet.pas@>==@{@-
+ @<Generic Set Module@>@(@"NaryTree@"@,@"NaryTreeSet@"@)@}
+@O@<NaryTreeSetSet.pas@>==@{@-
+ @<Generic Set Module@>@(@"NaryTreeSet@"@,@"NaryTreeSetSet@"@)@}
+\end{verbatim}
+
+A great advantage of the approach reflected in the above example is that
+it allows the programmer to construct a generic object in a language that
+does not supply generics, \i{with complete typesafety.}\xx{typesafe}{generics}
+This contrasts to the
+approach that might be used in a language such as C where the programmer
+might choose to construct a \dq{generic} package by parameterizing a
+package with pointers to \p{void}. The resulting package is
+powerful but extremely untypesafe. Such a generic list package is used in the
+code of FunnelWeb itself and caused no end of problems, as the compiler had
+no way of telling if pointers to the correctly typed object were being
+handed to the correct list-object/function combination.
+
+The major disadvantage of the text generic approach is that it causes the
+code of the generic object to be duplicated once for each instantiation.
+Depending on the number and size of the instantiations, this may or may not
+be acceptable.
+
+Where the duplication of code is unacceptable, a hybrid approach may be
+taken. As in the C~example, the programmer could write
+a single generic package
+using pointers to \p{void} or some other untypesafe mechanism.
+Then the programmer
+creates a FunnelWeb generic package whose functions do nothing
+more than call the functions of the untypesafe package, and whose types do
+nothing more than contain the types of the untypesafe package. This solution
+involves the use of untypesafe programming, but this is a one-off
+and if done carefully and correctly, the result can be
+a typesafe generic package involving minimal code duplication.
+
+\section{Summary}
+
+This chapter has described some of the finer aspects of the use of FunnelWeb.
+Throughout, the power and danger of FunnelWeb as a general text-rearranging
+preprocessor has been emphasised. FunnelWeb can be used both to make programs
+more readable or more obscure. It is up to the programmer to ensure that
+FunnelWeb is used properly.
+
+%==============================================================================%
+% End of Ch2.tex %
+%==============================================================================%
diff --git a/web/funnelAC/userman/u_ch3.tex b/web/funnelAC/userman/u_ch3.tex
new file mode 100644
index 0000000000..7669732fc8
--- /dev/null
+++ b/web/funnelAC/userman/u_ch3.tex
@@ -0,0 +1,2986 @@
+%==============================================================================%
+% Start of Ch3.tex %
+%==============================================================================%
+%
+% Copyright
+% ---------
+% Copyright (C) 1992 Ross N. Williams.
+% This file contains a chapter of the FunnelWeb User's Manual.
+% See the main TeX file for this manual for further information.
+%
+%==============================================================================%
+
+\chapter{FunnelWeb Definition}
+\label{chapdefinition}\xx{FunnelWeb}{definition}
+
+\section{Introduction}
+
+This purpose of this chapter is to provide a complete and consistent
+definition of the FunnelWeb input language and the behaviour of the
+FunnelWeb program. Usually, a chapter such as this is called a
+\dq{reference manual}, but this chapter is intended to go further
+by actually defining the language and program. This chapter takes
+precedence over all other chapters and all implementations of FunnelWeb.
+If an implementation contradicts this chapter, then the implementation
+is wrong.
+
+This is the chapter that you should turn if you find yourself asking a
+specific question about a specific aspect of FunnelWeb. In many
+cases it will be convenient to access this chapter through the index.
+
+\section{Notation}
+\x{notation}
+
+A particular variant of EBNF\xx{EBNF}{syntax}
+(Extended Bachus Naur Form) will be used to
+describe the FunnelWeb syntax. In this variant, literal strings are
+delimited by double quotes (\eg{}\p{"string"}), optional constructs by
+square brackets (\eg{}\p{[optional]}), and constructs repeated zero or
+more times by braces (\eg{}\p{\{zeroormore\}}). Constructs to be repeated
+a fixed number of times are enclosed in braces followed by a decimal
+number indicating the number of times to be repeated
+(\eg{}\p{\{sixtimes\}6}). Constructs to be
+repeated one or more times are
+enclosed in braces and followed by a \p{+} (\eg{}\p{\{oneormore\}+}).
+The traditional BNF \dqp{::=}
+is replaced by the visually simpler \dqp{=}. The traditional BNF angle
+brackets are abandoned.
+
+Although FunnelWeb allows the special character to be changed using the
+construct \dq{$<$special$>$=}, use of \dq{$<$special$>$} to refer to
+FunnelWeb's special character is cumbersome and abstract. To simplify
+the presentation, the default special character \dqp{@} is used throughout
+this chapter to represent the special character.
+
+\section{Terminology}
+\x{terminology}
+
+A specific terminology has arisen for dealing with FunnelWeb. Some
+particularly useful examples are:
+
+\narrowthing{Journal file:}{An output file containing
+a copy of the output sent to
+the user's console during an invocation of FunnelWeb. In other systems,
+this file is sometimes called a \dq{log file}.}
+
+\narrowthing{Product file:}{An output file, generated by the Tangle
+component of
+FunnelWeb, that contains the expansion of the macros in the input
+file.\footnote{Other names considered for this were:
+generated file, expanded file, result file, program file, and tangle file.}}
+
+A complete list of all the special FunnelWeb terminology appears in the
+glossary. Be sure to refer to it if any of the terms used are unclear.
+
+\section{An Architectural Overview}
+\xx{semantic}{architecture}\xx{FunnelWeb}{overview}
+
+An understanding of the internals of FunnelWeb assists with understanding
+its operation (\figphases{}).\xx{execution}{phases}
+
+During a single run, FunnelWeb reads and
+processes a single input file called the \newterm{input file} or
+the \newterm{FunnelWeb file}. The file is processed by passing it through
+a series of stages called \newterm{phases}. The result is that some
+\newterm{output files} are generated.
+A \newterm{journal file} is generated containing a copy of the messages that
+appear on the console during the FunnelWeb run. A \newterm{listing file}
+is created containing a summary of the run, including any error messages.
+A \newterm{documentation} file is generated containing typesetter commands
+that when fed into a typesetter program will result in
+printed documentation. Finally, one or more \newterm{product files}
+are generated containing the result of unscrambling the macro definitions
+of the input file.
+
+These files need not all be generated on any particular FunnelWeb run.
+Whether each output file appears is controlled by command line options.
+
+\begin{figure}[htbp]
+\begin{verbatim}
+
+ .fw Input File (FunnelWeb file)
+ V
+ +---------+ \
+ | Scanner | |
+ +---------+ |
+ V |
+ +--------+ |
+ | Parser | |
+ +--------+ |
+ V |
+ +----------+ >-------+------------+
+ | Analyser | | | |
+ +----------+ | | |
+ V | | |
+ +-----------+------------+ | V V
+ V V | | |
+ +--------+ +-------+ | | |
+ | Tangle | | Weave | | | |
+ +--------+ +-------+ / | |
+ | | | |
+ V V V V
+ Product Files Documentation File Listing File Journal File
+
+\end{verbatim}
+\mylabel{\figphases{}: FunnelWeb's processing phases.}{%
+%
+FunnelWeb processes each input file in a sequence of phases.
+If an error occurs during a phase, no subsequent phases are executed.
+%
+}
+\end{figure}
+
+The phases are briefly described below.
+
+\narrowthing{The Scanner}{reads\x{scanner} the input file, expands
+and reads in include files,
+scans the input stream, processes pragmas and typesetter directives,
+and parses all the
+FunnelWeb special sequences. The result is a list of tokens that
+is handed to the parser.}
+
+\narrowthing{The Parser}{reads\x{parser}
+the scanner's token list and parses it, constructing a
+document list\xx{document}{list} and a macro
+table.\xx{macro}{table} which are passed to later phases.}
+
+\narrowthing{The Analyser}{examines\x{analyser}
+the macro table generated by the parser
+and performs a number of checks of the macro structures
+that the parser could not make on its single pass.
+For example, the
+analyser detects and flags unused macros and recursive macros. The
+analyser forms the final stage of FunnelWeb's front-end processing.}
+
+\narrowthing{Tangle}{expands certain macros in the macro table
+to generate\x{tangle} one or more product files.}
+
+\narrowthing{Weave}{uses the document list to generate\x{weave}
+a documentation file.}
+
+A single run through these phases constitutes a single invocation of
+\newterm{FunnelWeb proper}. Most invocations of the
+\newterm{FunnelWeb program}
+will consist only of a single execution of FunnelWeb proper. However,
+FunnelWeb also provides a command shell that provides many useful commands,
+including a command to invoke FunnelWeb proper. Discussion of the command
+shell is deferred until Section~\ref{commandshell}.
+
+\section{Diagnostics}
+\label{diagnostics}\x{diagnostics}
+
+During execution, FunnelWeb proceeds cautiously with each of its phases,
+only proceeding with the next phase if the previous phase has been
+successful. This means that, when debugging
+a FunnelWeb file, you may find that the number of errors \i{increases}
+after you fix some of them, as you will be exposing yourself to the
+next FunnelWeb phase.
+
+FunnelWeb employs five levels of diagnostics\xx{diagnostics}{levels of}
+at different levels of
+severity.\x{severity}
+Severity is defined in terms of the level of activity at which the
+diagnostic causes FunnelWeb to abort.
+
+\narrowthing{Warning:}{A warning\xx{warning}{severity}
+does not cause FunnelWeb to terminate or
+curtail its operation in any way, but serves merely to warn the user of
+particular conditions that might be symptomatic of deeper problems.}
+
+\narrowthing{Error:}{An\xx{error}{severity} error causes
+FunnelWeb to terminate processing of the
+current input file at the end of the current phase. For example, if an
+error occurs during scanning, FunnelWeb will continue scanning (and possibly
+generate further scanning diagnostics), but will not invoke the parser.}
+
+\narrowthing{Severe Error:}{A\xx{severe}{severity} severe error
+(or \dq{severe} for short) is the same
+as an error except that FunnelWeb terminates the current phase immediately.}
+
+\narrowthing{Fatal Error:}{A\xx{fatal}{severity} fatal error
+causes FunnelWeb not only to terminate
+the current phase and run immediately, but also to terminate total
+FunnelWeb processing immediately. A severe error will not cause a
+FunnelWeb script to terminate, but a fatal error will. A fatal error
+causes FunnelWeb to return control to the operating system.}
+
+\narrowthing{Assertion Error:}{An\xx{assertion}{severity}
+assertion error occurs if FunnelWeb detects
+an internal inconsistency, in which case FunnelWeb terminates immediately
+and ungracefully. Such
+an error can occur only if there are bugs in FunnelWeb. With luck, such
+errors will be extremely rare.}
+
+FunnelWeb indicates the level of severity of each diagnostic that it issues
+by starting each diagnostic either with the full name of the severity level
+or with just the first letter of the severity level followed by a colon.
+
+FunnelWeb conveys the presence or absence of diagnostics at the operating
+system level by returning \p{EXIT\_SUCCESS}\xx{return}{status}
+status if no
+diagnostics occurred during the run and \p{EXIT\_FAILURE} status
+if one or more
+diagnostics (including warnings)
+occurred during the run.\footnote{From
+the symbols of the ANSI standard C library \p{stdlib.h}.
+See \paper{Kernighan88}, p.252.}
+
+
+\section{Typesetter Independence}
+\xx{typesetter}{independence}
+
+One of the design goals of FunnelWeb was to provide a \i{target-language}
+independent literate programming system. This goal has been achieved
+simply by treating the text written to the product file
+as homogeneous and typesetting
+it in \p{tt font}. A secondary goal was to provide
+a \i{typesetter} independent literate programming
+system. By this is meant that it be possible to create FunnelWeb input files
+that do not contain typesetter-specific commands.
+To a lesser extent this goal has also been achieved.
+
+The difficulty with providing typesetter-independent typesetting is that
+each desired typesetting feature must be recreated in a
+typesetter-independent FunnelWeb typesetting construct that FunnelWeb can
+translate into whatever typesetting language is being targeted by Weave.
+Taken to the extreme, this would result in FunnelWeb providing the full
+syntactic and semantic power of \TeX{}, but with a more generic,
+FunnelWeb-specific syntax. This was unfeasible in the time available, and
+undesirable as well.
+
+The compromise struck in the FunnelWeb design is to provide a set of
+primitive typesetter-independent typesetting features that are implemented
+by FunnelWeb. These are the \newterm{typesetter directives}.
+If the user is prepared to restrict to these directives,
+then the user's
+FunnelWeb document will be both target-language and typesetter independent.
+However, if the user wishes to use the more sophisticated features of the
+target typesetting system, the user can specify the typesetter
+in a \dqp{typesetter} pragma and then place typesetter commands
+in the free text
+of the FunnelWeb document where they will be passed verbatim to the
+documentation file. The choice of the trade-off between typesetter
+independence and typesetting power is left to the user.
+
+This said, experience with FunnelWeb V1 over a three year period,
+indicates that the typesetting facilities provided by FunnelWeb are
+sufficient for most documentation.
+
+\section{Command Line Interface}
+\xx{command line}{interface}
+
+\subsection{Invoking FunnelWeb}
+\xx{FunnelWeb}{invoking}\xx{FunnelWeb}{running}
+
+When a user invokes FunnelWeb at the operating system command level, the
+user must provide a command line instructing FunnelWeb what to do. Typically
+an operating system command line consists of a \i{verb} indicating that a
+particular program should be run, followed by a list of options. For example:
+
+\begin{verbatim}
+$ rename file1 file2
+\end{verbatim}
+
+In this case, the verb is \p{rename} and the command line options are
+\p{file1 file2}. The entire command line begins with the \p{\$} and ends with
+the \p{2}.
+
+Operating systems differ greatly in the depth with which
+they process their command\xx{command line}{processing}
+lines, ranging from systems that simply pass the entire command line string
+to the invoked program (\eg{}MSDOS) through to systems that perform complete
+command line parsing (\eg{}VMS). Syntax conventions vary considerably.
+
+So as to achieve maximum portability and consistency of invocation across
+different platforms, FunnelWeb reads its command line as a raw string and
+performs all its own parsing.\xx{command line}{parsing}
+This is portable because, at the very least, all
+operating systems allow invoked programs access to the raw command line.
+
+The command verb used to invoke FunnelWeb should be
+\dqp{fw}.\xx{fw}{command verb}
+
+\begin{verbatim}
+FunnelWeb_verb = "fw"
+\end{verbatim}
+
+If this verb is not available, some alternatives are
+\dqp{funweb}, \dqp{fun}, and \dqp{funnelweb}.
+The verbs \p{web} or \p{fweb} should be avoided
+as they are the names of other literate programming systems.
+
+\subsection{Command Line Arguments}
+\xx{command line}{argument}\xx{syntax}{command line}
+
+Following the verb is the body of the command line which
+FunnelWeb parses into
+zero or more \newterm{arguments} separated by runs
+of one or more blanks.
+
+\begin{verbatim}
+FunnelWeb_command_line = FunnelWeb_verb {{" "}+ argument}
+\end{verbatim}
+
+Because some operating systems convert
+their command line to upper case before handing it to the invoked program,
+FunnelWeb has been constructed so as to be \i{insensitive} to the case
+of its command line arguments.\xx{case}{dependence} However, when
+dealing internally with arguments, FunnelWeb \i{preserves} the case of
+its command line arguments so that it will be able to operate with
+operating systems (such as Unix\x{Unix})
+whose file names are case dependent.
+
+A valid FunnelWeb argument consists of a
+\newterm{sign}, an identifying \newterm{letter}, and an
+optional
+\newterm{string} with no spaces separating
+them.\xx{command line options}{syntax}\xx{options}{syntax}
+
+\begin{verbatim}
+argument = sign id_letter [non_blank_string]
+sign = "+" | "-" | "="
+id_letter = "B" | "C" | "D" | "F" | "H" |"I" | "J" | "K" |
+ "L" | "O" | "Q" | "S" | "T" | "W" | "X"
+\end{verbatim}
+
+In addition there is a special form of argument that does not begin with
+a sign.
+
+\begin{verbatim}
+argument = non_blank_string_not_beginning_with_+_=_or_-
+\end{verbatim}
+
+This form is exactly equivalent to the same string with \dqp{+F}
+prepended to it.
+
+The semantic effect of these arguments is
+defined in terms of \newterm{options} which are the
+internal parameters of FunnelWeb
+and which correspond closely with the set of legal command line arguments.
+FunnelWeb has a predefined set of options each identified
+by an identifying letter having two attributes: a \i{string}, and a
+\i{boolean}. The boolean determines whether an option is turned
+\i{on} or \i{off}. The string contains additional information
+depending on the option.
+
+When FunnelWeb starts up, its options have predefined default values.
+FunnelWeb then parses its command line sequentially from
+left to right
+executing the effect of each argument on the argument's corresponding
+option. The sign and the
+string components of the argument are processed \i{independently}.
+A sign of \p{+} turns the option on. A sign of \p{-} turns the option off.
+A sign of \p{=} leaves the option's boolean attribute unchanged. The argument
+string replaces the string of the corresponding
+option, unless the argument string is empty, in which case the
+option string is not changed.
+
+Because FunnelWeb processes its command line arguments from left to right,
+a later argument can cancel the effect of an earlier one.
+For example \p{fw +t -t} will result in the \p{t} option
+ending up \i{off}. This allows users to set up their own default arguments
+by defining a symbol in their operating system's command language. For
+example, a Unix user who wants FunnelWeb to delete all identical output
+files and create a documentation file on each run
+with a default \p{.typ} extension could simply place the following definition
+in their \dqp{.login} file.
+
+\begin{verbatim}
+alias fw fw +d +t.typ
+\end{verbatim}
+
+These default options can then later be easily overridden on the command line.
+
+\subsection{Options}
+\label{commandlineoptions}\x{options}\xx{list}{options}
+
+FunnelWeb's options are internal parameters which can be modified by
+corresponding arguments on FunnelWeb's command line. A description of each
+argument and option follows.
+
+\narrowthing{B1$\ldots$B6: Tracedumps:}{These\xx{B}{option}
+six\xx{tracedump}{options}\xx{dump}{option} options have been provided to
+assist in the debugging and testing
+of FunnelWeb. They determine which of six possible trace dumps are
+to be written to the listing file. Only the boolean attributes
+of these options are ever used. The six dumps are identified by the
+digits \p{1..6} as
+follows:\xx{dump}{mapped file}
+\xx{dump}{global line list}\xx{dump}{token list}
+\xx{dump}{macro table}\xx{dump}{document list}\xx{dump}{times}}
+
+\begin{enumerate}
+\item Dump a hexdump of each mapped input and include file.
+\item Dump the global line list created by the scanner.
+\item Dump the token list created by the scanner.
+\item Dump the macro table created by the parser.
+\item Dump the document list created by the parser.
+\item Dump a table summarizing CPU and real time usage.
+\end{enumerate}
+
+\narrowtext{Because these options are so closely related, a hack has been
+pulled to enable them to all to be controlled by the \p{B} argument.
+The
+string argument to the \p{B} argument determines which of the six options
+are to be affected by the sign. Examples: \p{+B134} turns on options \p{B1},
+\p{B3}, and \p{B4}. \p{-B1} turns off option \p{B1}.
+\p{Default:~-B123456}.}
+
+\narrowthing{B7: Determinism:}{If the \p{B7} option is turned on,
+FunnelWeb suppresses the output of anything
+non-deterministic,\x{non-determinism}
+or machine dependent. This assists in regression testing.
+Only the boolean attribute is used in this option.
+This option is controlled by the \p{B7} argument which falls under the
+same argument syntax as the other \p{B} options. Examples: \p{+B7}, \p{-B7}.
+\p{Default:~-B7}.}
+
+\narrowthing{C: Listing File Context:}{The\xx{C}{option}
+\p{C}\xx{listing file}{context}
+option is always turned on and
+cannot be turned off. Its only attribute is a number which determines the
+number of lines of context that the lister will place around lines flagged
+with diagnostics in the listing file (if a listing file is written).
+A value of 100 indicates infinite context\xx{infinite}{context}
+which means that the entire
+listing file will be written out if a single diagnostic occurs.
+The value of this number can be specified by specifying it as a string of
+decimal digits to the \p{+C} argument. Examples: \p{+C100}, \p{+C10}.
+\p{Default:~+C2}.}
+
+\narrowthing{D: Delete Identical Output Files:}{Only the boolean
+attribute of this option is used.\xx{D}{option}\xx{delete output}{option}
+When turned on, the option causes the suppression (deletion)
+of product files and documentation files
+(but not listing or journal files) that
+are identical to the currently existing files of the same name. For example,
+if FunnelWeb is instructed to generate \p{stack.h} as an product file, and
+the text to be written to \p{stack.h} is identical to the currently existing
+\p{stack.h}, then FunnelWeb will simply not write any product file, leaving the
+currently existing \p{stack.h} as it is (and in particular leaving the
+file's date attribute the same).
+This prevents unnecessary \p{make} propagations. For example, in a C program,
+if \p{stack.fw} is a
+FunnelWeb input file that generates \p{stack.h} and \p{stack.c},
+a modification to \p{stack.fw} that affects \p{stack.c} but does not
+affect \p{stack.h} will not provoke the recompilation of modules
+that \p{\#include stack.h}, so long as the intervening FunnelWeb run has
+\p{+D} set. Examples: \p{-D}, \p{+D}. \p{Default:~-D}.}
+
+\narrowthing{F: FunnelWeb Input File:}{If\xx{F}{option}
+this option is turned on, FunnelWeb\xx{input file}{option}
+processes the input file whose name is specified by the option string.
+Examples: \p{+Fsloth.fw}, \p{+Fwalrus}, \p{-F}.
+\p{Default:~-F}.}
+
+\narrowthing{H: Display Help Message:}{If\xx{H}{option}
+this option\xx{help}{option} is turned on, FunnelWeb
+displays the message specified by the argument string.
+Each message has a name. The main help message is called \dqp{menu}
+and contains a list of the other help messages. Examples: \p{+Hregistration},
+\p{+Hoptions}. \p{Default:~-Hmenu}.}
+
+\narrowthing{I: Include default file specification:}{This\xx{I}{option}
+option\xx{include file}{option}\xx{include}{file} is always turned
+on and cannot be turned off. Its string attribute is used as the default file
+specification for include files. Usually this option is used to specify
+a directory from which include files should be obtained.
+Examples: \p{=I/usr/dave/includes/}. \p{Default:~+I}.}
+
+\narrowthing{J: Journal File:}{If\xx{J}{option} this option is turned on,
+FunnelWeb generates a\xx{journal file}{option}\xx{journal}{file}
+journal file. A journal file contains a log of
+all the console input and output to FunnelWeb during a single invocation of
+the FunnelWeb program (Note: The \p{Q} option does not affect this.).
+The journal file is particularly useful for examining what happened during
+a FunnelWeb shell run. The string attribute is the name of the journal
+file. Examples: \p{+Jjournfile}, \p{-J}. \p{Default:~-J}.}
+
+\narrowthing{K: Keyboard:}{If\xx{K}{option}
+this option\xx{keyboard}{option}\xx{interactive}{option}
+is turned on, FunnelWeb enters an
+interactive mode in which the user can enter FunnelWeb shell commands
+interactively. The string attribute is unused.
+Examples: \p{+K}, \p{-K}. \p{Default:~-K}.}
+
+\narrowthing{L: Listing File:}{If\xx{L}{option}
+this option is turned on, FunnelWeb
+generates a\xx{listing file}{option}\xx{listing}{file}
+listing file containing a summary of a run on FunnelWeb proper.
+The string argument is the name of the listing file to be created.
+Examples: \p{+L}, \p{-L}, \p{+Llisting.lis}.
+\p{Default:~-L}.}
+
+\narrowthing{O: Product Files:}{If this option is turned on,
+FunnelWeb generates a product file for each macro in the input file
+that is bound to an output file. The string attribute contributes to the
+name of the product files. This option is controlled
+by the \p{O} argument
+because product files used to be called \dq{\b{O}utput files}).
+Examples: \p{-O}, \p{+O/usr/dave/product/}. \p{Default:~+O}.}
+
+\narrowthing{Q: Quiet:}{If\xx{Q}{option} this option is turned on,
+FunnelWeb suppresses all\xx{quiet}{option}\xx{suppress}{console output}
+output to the screen (standard output) unless one or more errors occur,
+in which case a single line summarizing the errors is sent to standard
+output at the end of the run. If this option is turned off, FunnelWeb
+writes to the console in its normal garrulous way. The string
+attribute is unused in this option. Examples: \p{-Q}, \p{+Q}. \p{Default:~-Q}.}
+
+\narrowthing{S: Screen:}{If\xx{S}{option} this option is turned on,
+FunnelWeb writes all\xx{screen}{option}
+diagnostics to the screen (standard output)
+as well as to the listing file.
+By default, they are sent only to the listing file.
+This option has a single numerical attribute
+that can be specified as a decimal string in the string component of the
+\p{S} argument. The number is the number of lines of context that should
+surround each diagnostic sent to the screen.\x{context}
+Examples: \p{-S}, \p{+S6}, \p{+S0}. \p{Default:~-S}.}
+
+\narrowthing{T: Documentation file:}{If\xx{T}{option} this
+option\footnote{This option is controlled by the \p{T} command line
+argument because documentation files used to be called typesetter files.} is
+turned on, FunnelWeb\xx{typeset}{option}\xx{typeset}{file}
+generates a documentation file in \TeX{} format.
+The string argument contributes to the
+name of the documentation file to be created.
+By default this option is turned off, as experience has
+shown that most FunnelWeb runs are made during program development;
+documentation runs occur far more rarely. Examples: \p{-T},
+\p{+Tsloth.tex}. \p{Default:~-T}.}
+
+\narrowthing{W: Width of Product Files:}{If\xx{W}{option}
+this option\xx{width}{option}\xx{product file}{width}
+is turned on, a limit is
+placed on the length of lines in product files generated during the
+run. Lines that breach the limit are flagged with error messages.
+This option has a single numerical attribute
+that can be specified as a decimal string in the string component of the
+\p{W} argument. The number is the specified maximum width.
+This option is one of two limits that are placed on the width of
+product files. The other limit is an attribute of the input file that
+defaults to 80 characters,
+but can be raised or lowered using an output line length
+pragma. The width that is enforced is the lower of this value and the
+value of the \p{W} option (if turned on).
+Examples: \p{-W}, \p{+W100}. \p{Default:~-W80}.}
+
+\narrowthing{X: Execute:}{If\xx{X}{option}
+this option\xx{execute script}{option}
+is turned on, FunnelWeb executes the FunnelWeb shell
+script file specified by the string attribute.
+Examples: \p{+Xmaster}, \p{-X}.
+\p{Default:~-X}.}
+
+\section{File Name Inheritance}
+\xx{filename}{inheritance}
+
+During a single run of FunnelWeb, FunnelWeb can produce many different
+output files. As it would be very tedious to have to specify the name
+of each of these files explicitly each time FunnelWeb is run, FunnelWeb
+provides a system of defaults that allows the user to specify the minimum
+required to successfully complete the run. To do this FunnelWeb allows
+file specifications to inherit fields from one another.
+
+FunnelWeb structures filenames into three fields\xx{filename}{fields}
+which are inherited
+independently. The fields are: \newterm{directory}, \newterm{name},
+and \newterm{extension}.
+On systems having other fields (\eg{}\i{network node}, \i{device name}),
+the extra fields are considered to be part of the directory field.
+Version numbers are
+ignored. A field can inherit a value if its current value is
+the empty string.
+
+The following table gives the full inheritance scheme used in FunnelWeb.
+
+\begin{center}
+\begin{tabular}{|l|l|l|l|l|l|l|} \hline
+Script & Input & Include & Journal & List & Document & Product \\ \hline
+ & & \p{@i} & & & & \p{@o} \\
+\p{+x} & \p{+f} & \p{+i} & \p{+j} & \p{+l} & \p{+t} & \p{+o} \\
+\dqp{.fws} & \dqp{.fw} & \dqp{.fwi} & \dqp{.jrn} & \dqp{.lis} & \dqp{.tex} & \\
+ & & \p{+f} & \p{+f} & \p{+f} & \p{+f} & \\
+DefDir & Defdir & Defdir & Defdir & Defdir & Defdir & Defdir \\ \hline
+\end{tabular}
+\end{center}
+
+The table is arranged with items of highest priority at the top.
+The \dqp{+<letter>} cells refer to the file
+specification supplied in the given command line argument.
+\dqp{+F} is the name of the input file.
+\dq{Defdir} refers to the default directory
+specification provided by the operating system. Empty cells
+do not contribute.
+
+The following example shows how the table is used.
+Suppose that the user invoked FunnelWeb as
+follows:\xx{filename inheritance}{example}
+
+\begin{verbatim}
+fw /usr/ross/work/sloth.fw +twalrus
+\end{verbatim}
+
+To work out what the documentation file should be called, FunnelWeb starts
+with the empty string and then works down the Document column of the table.
+The top entry is empty
+so we ignore it and proceed to the second entry which consists of \dqp{+T}.
+The user specified the string \dqp{walrus} as the value of this option, and
+as our current (empty)
+string does not have a name field, we insert the string
+\dqp{walrus} into the name field, resulting in the string \dqp{walrus}.
+Moving down to the next row, we encounter the constant string \dqp{.tex}.
+This string consists of an empty directory and name field, but a \dqp{.tex}
+file extension. As our current string \dqp{walrus}, does not already
+have a file extension (\ie{}the file extension field of our current string
+is empty), we add in \dqp{.tex},
+resulting in the string \dqp{walrus.tex}. Next we encounter the \dqp{+F} field
+which is the input filename \dqp{/usr/ross/work/sloth.fw} consisting of
+a directory field \dqp{/usr/ross/work/}, a name field \dqp{sloth}, and a
+file extension field \dqp{.fw}. Our \dqp{walrus.tex} string already has
+name and file extension fields, but its directory field is empty, and
+so we add in the directory field from the input file specification,
+resulting in the string \dqp{/usr/ross/work/walrus.tex}. Finally, we hit
+the default directory specification, which is (say)
+\dqp{/usr/ross/play/}. However, as the directory field of our walrus
+string is already full, it has no effect.
+
+In general, there is no need to remember the exact details of FunnelWeb's
+filename inheritance. The important thing is to know that it exists, and to
+use it.
+
+\section{FunnelWeb Startup}
+\xx{FunnelWeb}{startup}\xx{FunnelWeb}{initialization}
+
+FunnelWeb's command line options can be divided into two groups.
+\newterm{Action options} instruct FunnelWeb to performs some sort of
+independent action such as processing a file. \newterm{Ordinary options}
+merely modify the way in which FunnelWeb executes the actions.
+
+The four action options are: \p{+F}, \p{+K}, \p{+X}, and \p{+H}. For
+FunnelWeb to be successfully invoked, at least one action option must be
+specified. If zero action options are specified, FunnelWeb terminates
+with failure status.
+If more than one action option is specified, FunnelWeb performs
+the specified actions in a predefined order.
+
+Assuming that the user has specified at least one action, the order in which
+actions are executed is as follows:\xx{action execution}{order}
+
+\narrowthing{Initialization script:}{FunnelWeb\xx{initialization}{script}
+starts by
+looking in the current
+directory for a file called \dqp{fwinit.fws}.\x{fwinit.fws}
+If it doesn't find one, it
+doesn't raise any error. If it does find one, it executes it as a FunnelWeb
+shellscript. Initialization scripts are useful for setting up FunnelWeb
+options (\eg{}using the \dqp{set}
+command without having to type them each time).}
+
+\narrowthing{Execute argument script:}{If a shellscript has been specified
+using the \dqp{+X} option, FunnelWeb executes it.}
+
+\narrowthing{Process input file:}{If the user has specified an input file
+using the \dqp{+F} option, then this is processed next (by FunnelWeb proper).}
+
+\narrowthing{Display help message:}{If the user requested,
+using the \dqp{+H} option, that a help message be displayed,
+the message is displayed at this time.}
+
+\narrowthing{Interactive mode:}{If the user specified the
+\dqp{+K} option, FunnelWeb enters interactive (keyboard) mode.}
+
+FunnelWeb processes these actions in the above order regardless of the
+order in which they appear on the command line.
+
+It may be hard to see how some of these actions might be combined.
+Nevertheless, FunnelWeb allows this. For example, a user might wish
+to process a batch of files as specified in a script (\dqp{+Xscript.fws}),
+be reminded of the interactive commands available (\dqp{+Hcommand}), and
+then enter interactive mode so as to be able to
+reprocess files for which FunnelWeb
+reported errors (after correcting the errors in a different
+workstation window).
+
+
+\section{Scanner}
+\x{scanner}
+
+The scanner reads in the input file and produces a list of tokens
+which it hands onto the parser. In addition, some input constructs may cause
+the scanner to modify some of FunnelWeb's options.
+
+\subsection{Basic Input File Processing}
+
+In order to read in an input file or include file, the scanner calls a
+submodule called the \newterm{mapper}
+that reads a file in and creates a contiguous copy of
+it in memory. The scanner then performs three checks on the file, the first
+(file termination) of
+which is performed before scanning commences, and the other two of which take
+place during scanning before each line is scanned.
+
+\narrowthing{File Termination:}{The\xx{file}{termination}
+first check the scanner makes\xx{line}{termination}
+is whether
+the file is terminated properly. A file is considered to be properly
+terminated if it either contains no lines, or if the last line in the file
+is terminated by an end-of-line marker. If the scanner detects that an
+input file is not properly terminated, it adds an end-of-line marker
+itself (to the copy in memory only).}
+
+\narrowthing{Unprintable Characters:}{The second check the
+scanner makes is for\xx{unprintable}{characters}
+unprintable characters (ASCII 0--31 and 127--255
+(except for EOL(10))) which it flags
+as errors and replaces by question marks.}
+
+\narrowthing{Line Lengths:}{The third check
+the scanner makes is input line length.\xx{line}{length}
+When FunnelWeb starts up, a default maximum
+input line length of 80 is set. This can be changed dynamically during scanning
+using a \p{@p maximum\_input\_line\_length} pragma.
+If the number of characters on a line (not including the end of line marker)
+exceeds this limit, FunnelWeb generates an error.\checked{}}
+
+\subsection{Special Sequences}
+\xx{special}{sequences}
+
+The scanner scans the input file from top to bottom, left to right, treating
+the input as ordinary text (to be handed directly to the parser as a text
+token) unless it encounters the \newterm{special character}\footnote{This sort
+of character is often referred to as the \dq{escape character} or the
+\dq{control character} in other
+systems. However, as there is great potential to confuse these names
+with the \dq{escape} character (ASCII 27) and ASCII \dq{control} characters,
+the term \dq{special} has been chosen instead. This results in the terms
+\i{special character} and \i{special sequence}.} which introduces
+a \newterm{special sequence}. Thus, the
+scanner partitions the input file into ordinary text and special sequences.
+
+\begin{verbatim}
+input_file = {ordinary_text | special_sequence}
+\end{verbatim}
+
+Upon startup, the special character\xx{default}{special character}
+is \p{@}, but it can
+be changed using the $<$special$>$\p{=}$<$new\_special$>$ special sequence.
+Rather than using $<$special$>$ whenever the special character appears,
+this document uses the default special character \dqp{@} to represent the
+current special character.
+More importantly, FunnelWeb's
+error messages all use the default special character in their error messages
+even if the special character has been changed.
+
+An occurrence of the special character in the input file introduces a
+special sequence. The kind of special sequence is determined by the
+character following the special character. Only printable characters can
+follow the special character.
+
+The following list gives all the possible characters that can follow the
+special character, and the legality of each sequence.
+The first column gives the ASCII number of each ASCII character. The second
+column gives the special sequence for that character. The next column contains
+one of three characters: \dqp{-} means that the sequence is illegal. \dqp{S}
+indicates that the sequence is a \newterm{simple sequence} (with no attributes
+or side effects) that appears exactly as shown and is
+converted directly into a token and fed to the parser. Finally, \dqp{C}
+indicates that the special sequence is complex, possibly having a following
+syntax or producing funny side effects.
+
+\begin{verbatim}
+ASC SEQ COMMENT
+-----------------
+000 \
+016 | Unprintable characters and hence illegal specials.
+031 /
+032 @ - Illegal (space).
+033 @! C Comment.
+034 @" S Parameter delimeter.
+035 @# C Short name sequence.
+036 @$ S Start of macro definition.
+037 @% - Illegal.
+038 @& - Illegal.
+039 @' - Illegal.
+040 @( S Open parameter list.
+041 @) S Close parameter list.
+042 @* - Illegal.
+043 @+ C Insert newline.
+044 @, S Parameter separator.
+045 @- C Suppress end of line marker.
+046 @. - Illegal.
+047 @/ S Open or close emphasised text.
+048 @0 - Illegal.
+049 @1 S Formal parameter 1.
+050 @2 S Formal parameter 2.
+051 @3 S Formal parameter 3.
+052 @4 S Formal parameter 4.
+053 @5 S Formal parameter 5.
+054 @6 S Formal parameter 6.
+055 @7 S Formal parameter 7.
+056 @8 S Formal parameter 8.
+057 @9 S Formal parameter 9.
+058 @: - Illegal.
+059 @; - Illegal.
+060 @< S Open macro name.
+061 @= C Set special character.
+062 @> S Close macro name.
+063 @? - Illegal. Reserved for future use.
+064 @@ C Insert special character into text.
+065 @A S New section (level 1).
+066 @B S New section (level 2).
+067 @C S New section (level 3).
+068 @D S New section (level 4).
+069 @E S New section (level 5).
+070 @F - Illegal.
+071 @G - Illegal.
+072 @H - Illegal.
+073 @I C Include file.
+074 @J - Illegal.
+075 @K - Illegal.
+076 @L - Illegal.
+077 @M S Tag macro as being allowed to be called many times.
+078 @N - Illegal.
+079 @O S New macro attached to product file. Has to be at start of line.
+080 @P C Pragma.
+081 @Q - Illegal.
+082 @R - Illegal.
+083 @S - Illegal.
+084 @T C Typesetter directive.
+085 @U - Illegal.
+086 @V - Illegal.
+087 @W - Illegal.
+088 @X - Illegal.
+089 @Y - Illegal.
+090 @Z S Tags macro as being allowed to be called zero times.
+091 @[ - Illegal. Reserved for future use.
+092 @\ - Illegal.
+093 @] - Illegal. Reserved for future use.
+094 @^ C Insert control character into text
+095 @_ - Illegal.
+096 @` - Illegal.
+097 @a \
+109 @m | Identical to @A..@Z.
+122 @z /
+123 @{ S Open macro body/Open literal directive.
+124 @| - Illegal.
+125 @} S Close macro body/Close literal directive.
+126 @~ - Illegal.
+127 to 255 are not standard printable ASCII characters and are illegal.
+\end{verbatim}
+
+The most important thing to remember about the scanner is that \i{nothing
+happens unless the special character is seen.} There are no funny sequences
+that will cause strange things to happen. The best way to view a FunnelWeb
+document at the scanner level is as a body of text punctuated by special
+sequences that serve to structure the text at a higher level.
+
+The remaining description of the scanner consists of a detailed description
+of the effect of each complex special sequence.
+
+\subsection{Setting the Special Character}
+\xx{setting}{special character}
+
+The special character can be set using the sequence
+$<$special$>$\p{=}$<$newspecialchar$>$. For example, \p{@=\#} would change the
+special character to a hash (\p{\#}) character. The special character may
+be set to any printable ASCII character except the blank character
+(\ie{}any character in the ASCII range $[33,126]$). In normal use, it
+should not be necessary to change the special character of FunnelWeb, and it
+is probably best to avoid changing the special character so as not to
+confuse FunnelWeb readers conditioned to the \p{@} character.
+However, the feature is very useful where the text being prepared contains
+many \p{@} characters (\eg{}a list of internet electronic mail addresses).
+
+\subsection{Inserting the Special Character into the Text}
+\xx{special character}{inserting into text}
+
+The special sequence $<$special$>$\p{@} inserts the special character
+into the text as if it were not special at all. The \p{@} of this
+sequence has nothing to do with the current special character. If the
+current special character is \p{P} then the sequence \p{P@} will insert
+a \p{P} into the text. Example: \p{@@\#@=\#@\#@\#=@@@} translates
+to \p{@\#@\#@}.
+
+\subsection{Inserting Arbitrary Characters into the Text}
+\xx{arbitrary characters}{inserting into text}
+\xx{control characters}{inserting into text}\x{@circumflex}
+
+While FunnelWeb does not tolerate unprintable characters in the input file
+(except for the end of line character),
+it does allow the user to specify that unprintable characters appear in the
+product file. The \p{@\circumflex{}} sequence inserts a single character
+of the user's choosing into the text.
+The character can be specified by giving its
+ASCII number in one of four bases:
+binary, octal, decimal, and hexadecimal. Here is the syntax:
+
+\begin{verbatim}
+control_sequence = "@^" char_spec
+char_spec = binary | octal | decimal | hexadecimal
+binary = ("b" | "B") "(" {binary_digit}8 ")"
+octal = ("o" | "O" | "q" | "Q") "(" {octal_digit}3 ")"
+decimal = ("d" | "D") "(" {decimal_digit}3 ")"
+hexadecimal = ("h" | "H" | "x" | "X") "(" {hex_digit}2 ")"
+binary_digit = "0" | "1"
+octal_digit = binary_digit | "2" | "3" | "4" | "5" | "6" | "7"
+decimal_digit = octal_digit | "8" | "9"
+hex_digit = decimal_digit | "A" | "B" | "C" | "D" | "E" | "F"
+ | "a" | "b" | "c" | "d" | "e" | "f"
+\end{verbatim}
+
+Example:
+
+\begin{verbatim}
+@! Unix Make requires that productions commence with tab characters.
+@^D(009)prog.o <- prog.c
+\end{verbatim}
+
+Note that the decimal \dqp{9} is expressed with leading zeros
+as \dqp{009}. FunnelWeb requires
+a fixed number of digits for each base. Eight digits for base two, three
+digits for base ten, three digits for base eight and two digits for base
+sixteen.
+
+FunnelWeb treats the character resulting from a
+\p{@\circumflex{}} sequence as ordinary text in every sense.
+If your input file contains many instances of a particular control
+character,
+you can package it up in a macro like any other text. In particular,
+quick names can be used to great effect:
+
+\begin{verbatim}
+@! Unix "Make" requires that productions commence with tab characters.
+@! So we define a macro with a quick name as a tab character.
+$@#T@{@^D(009)@}
+@! And use it in our productions.
+@#Tprog.o <- prog.c
+@#Ta.out <- prog.o
+\end{verbatim}
+
+Warning: If you insert a Unix\x{Unix newline}
+newline character (decimal 10) into the text,
+FunnelWeb will treat this as an end of line sequence regardless of what
+the character sequence for end of line is on the machine upon which it is
+running. Unix EOL is FunnelWeb's internal representation for end of line.
+Thus, in the current version of FunnelWeb, inserting character 10 into the
+text is impossible unless this also happens to be
+the character used by the operating system to mark the end of line.
+
+\subsection{Comments}
+\xx{comments}{FunnelWeb}
+
+When FunnelWeb encounters the \p{@!}\x{@!}
+sequence during its left-to-right scan
+of the line, it throws away the rest of the line (including the EOL)
+without analysing it further.
+Comments can appear in any line except \dqp{@i},
+\dqp{@t}, and \dqp{@p} lines.
+
+FunnelWeb comments can be used to insert
+comments into your input file that will
+neither appear in the product files nor in the documentation file,
+but will be
+solely for the benefit of those reading and editing the input
+file directly. Example:
+
+\begin{verbatim}
+@! I have used a quick macro for this definition as it will be used often.
+@$@#C@{--@}
+\end{verbatim}
+
+Because comments are defined to include the end-of-line marker,
+care must be taken when they are being added or removed within the text
+of macro bodies. For example
+the text fragment
+
+\begin{verbatim}
+for (i=0;i<MAXVAL;i++) @! Print out a[0..MAXVAL-1].
+ printf("%u\n",a[i]);
+\end{verbatim}
+
+will expand to
+
+\begin{verbatim}
+for (i=0;i<MAXVAL;i++) printf("%u\n",a[i]);
+\end{verbatim}
+
+This problem really has no solution; if FunnelWeb comments were defined to
+omit the end of line marker, the expanded text would contain trailing blanks!
+As it is, FunnelWeb comments are designed to support single line comments
+which can be inserted and removed as a line without causing trouble.
+For example:
+
+\begin{verbatim}
+@! Print out a[0..MAXVAL-1].
+for (i=0;i<MAXVAL;i++)
+ printf("%u\n",a[i]);
+\end{verbatim}
+
+If you want a comment construct that does not enclose the end of line
+marker, combine the insert end of line construct \p{@+} with the comment
+construct \p{@!} as in
+
+\begin{verbatim}
+for (i=0;i<MAXVAL;i++) @+@! Print out a[0..MAXVAL-1].
+ printf("%u\n",a[i]);
+\end{verbatim}
+
+FunnelWeb comments should really only be used to comment the FunnelWeb
+constructs being used in the input file. Comments on the target code are
+best placed in comments in the target language or in the documenting text
+surrounding the macro definitions. In the example above, a C
+comment would have been more appropriate.
+
+\subsection{Quick Names}
+\xx{quick}{names}
+
+FunnelWeb provides a \newterm{quick name} syntax as an alternative,
+for macros whose name consists of a single character, to the
+angle bracket syntax usually used (\eg{}\p{@<Sloth@>}).
+A quick name sequence consists of \p{@\#}$x$\x{@hash}
+where $x$, the name of the macro,
+can be any printable character except space.
+
+\begin{verbatim}
+quick_name = "@#" non_space_printable
+\end{verbatim}
+
+The result is identical to the
+equivalent ordinary name syntax, but is
+shorter. For example, \p{@\#X} is equivalent to \p{@<X@>}.
+This shorter way of writing one-character macro names is more convenient where
+a macro must be used very often. For example, the macro calls in the
+following fragment of an Ada program are a little clumsy.
+
+\begin{verbatim}
+@! Define @<D@> as "" to turn on debug code and "--" to turn it off.
+@$@<D@>@{--@}
+@<D@>assert(b>3);
+@<D@>if x>7 then write("error") end if
+\end{verbatim}
+
+The calls can be shortened using the alternative syntax.
+
+\begin{verbatim}
+@! Define @#| as "" to turn on debug code and "--" to turn it off.
+@$@#|@{--@}
+@#|assert(b>3);
+@#|if x>7 then write("error") end if
+\end{verbatim}
+
+\subsection{Inserting End of Line Markers}
+\xx{EOL markers}{inserting}
+
+An end of line marker/character can be inserted into the text
+using the \p{@+}\x{@+} sequence. This is
+exactly equivalent to a real end of line in the text at the point where
+it occurs.
+While this feature may sound rather useless,
+it is very useful for laying out the input file. For
+example, the following input data for a database program
+
+\begin{verbatim}
+Animal = Kangaroo
+Size = Medium
+Speed = Fast
+
+Animal = Sloth
+Size = Medium
+Speed = Slow
+
+Animal = Walrus
+Size = Big
+Speed = Medium
+\end{verbatim}
+
+can be converted into
+
+\begin{verbatim}
+Animal = Kangaroo @+Size = Medium @+Speed = Fast @+
+Animal = Sloth @+Size = Medium @+Speed = Slow @+
+Animal = Walrus @+Size = Big @+Speed = Medium @+
+\end{verbatim}
+
+which is easier to read, and more easily allows comparisons between
+records.
+
+\subsection{Suppressing End of Line Markers}
+\xx{EOL markers}{suppressing}
+
+End of line markers can be suppressed by the \p{@-}\x{@-}
+sequence.
+A single occurrence of a \p{@-} sequence serves to suppress only the end of line
+marker following it and must appear \i{exactly} before the end of line marker to
+be suppressed. No trailing spaces, \p{@!} comments, or any other characters
+are permitted between a \p{@-} sequence and the end of line that it is
+supposed to suppress. The \p{@-} sequence is useful for constructing
+long output lines without them having to appear in the input.
+It can also be used in the same way as the \p{@+}
+was used in the previous section to assist in exposing the structure of output
+text without affecting the output text itself. Finally, it is invaluable for
+suppressing the EOL after the opening macro text \p{@\{} construct.
+For example:
+
+\begin{verbatim}
+@$@<Walrus@>@{@-
+I am the walrus!@}
+\end{verbatim}
+
+is equivalent to
+
+\begin{verbatim}
+@$@<Walrus@>@{I am the walrus!@}
+\end{verbatim}
+
+The comment construct (\p{@!}) can also be used to suppress end of lines.
+However, the \p{@-} construct should be preferred for this purpose as it
+makes explicit the programmer's intent to suppress the end of line.
+
+\subsection{Include Files}
+\xx{include}{files}
+
+FunnelWeb provides an include file facility with a maximum depth of 10.
+When FunnelWeb sees a line of the form \p{@i <filename>},\x{@i}
+it replaces the entire line (including the EOL) with the
+contents of the specified include file. FunnelWeb's include file
+facility is intended to operate at the line level. If the last line of the
+include file is not terminated by an EOL, FunnelWeb issues a warning
+and interts one (in the copy in memory).
+
+The
+\p{@i} construct is illegal if it appears anywhere except
+at the start of a line.
+The construct must be followed by a single blank. The file
+name is defined to be everything
+between the blank and the end of the line (no
+comments (\p{@!}) please!). Example: If the input file is
+
+\begin{verbatim}
+"Uh Oh, It's the Fuzz. We're busted!" said Baby Bear.
+@i mr_plod.txt
+"Quick! Flush the stash down the dunny and let's split." said Father Bear.
+\end{verbatim}
+
+and there is a file called \p{mr\_plod.txt} containing
+
+\begin{verbatim}
+"'Ello, 'Ello, 'Ello! What's all this 'ere then?" Mr Plod exclaimed.
+\end{verbatim}
+
+then the scanner translates the input file into
+
+\begin{verbatim}
+"Uh Oh, It's the Fuzz. We're busted!" said Baby Bear.
+"'Ello, 'Ello, 'Ello! What's all this 'ere then?" Mr Plod exclaimed.
+"Quick! Flush the stash down the dunny and let's split." said Father Bear.
+\end{verbatim}
+
+As a point of terminology, FunnelWeb calls the original input file the
+\newterm{input file} and calls include files and their included files
+\newterm{include files}.
+
+The include file construct operates at a very low level. An include
+line can appear anywhere in the input file regardless of the context
+of the surrounding lines.
+
+FunnelWeb sets the special character to the default (\p{@}) at the
+start of each include file and restores it to its previous value at the end
+of the include file. This allows macro libraries to be constructed and
+included that are independent of the prevailing special character
+at the point of inclusion.
+The same goes for the input line length limit
+which is reset to the default
+value at the start of each include file and
+restored to its previous value afterwards.
+
+\subsection{Pragmas}
+\x{pragmas}\xx{pragmas}{visible}\xx{pragmas}{invisible}
+
+Most tools have to support some essential, but rather inelegant features.
+In FunnelWeb these messy bits have all been stuffed into the
+scanner's \newterm{pragma} (for \i{pragma}tic) construct.
+
+A pragma consists of a single line of input (including the EOL)
+commencing with \p{@p}. This
+must be followed by a single space, and then the pragma verb.
+This must
+be followed by a sequence of zero or more arguments separated by one or
+more spaces. Four pragmas are available
+
+\begin{verbatim}
+pragma = pragma_ident | pragma_mill | pragma_moll | pragma_typesetter
+\end{verbatim}
+The following syntax definitions assist in defining the pragmas.
+
+\begin{verbatim}
+s = {" "}+
+ps = ("@p" | "@P") " "
+number = { decimal_digit }+
+numorinf = number | "infinity"
+\end{verbatim}
+
+The arguments to pragmas are case-sensitive and must be specified in
+lower case.
+
+Pragmas are processed and consumed entirely by the scanner. The parser
+never sees them and so they can play
+no part in the parser level syntax. As a result, pragma lines
+can appear anywhere in the entire input file regardless of the surrounding
+context (\eg{}even in the middle of a macro definition).
+The sole effect of a pragma is to modify some internal parameter of
+FunnelWeb.
+
+The following sections describe the four FunnelWeb pragmas.
+
+\subsubsection{Indentation}
+\label{indentationpragma}\xx{indentation}{macro expansion}
+
+When FunnelWeb expands a macro, it can do so in two ways. First it can treat
+the text it is processing as a one-dimensional stream of text, and merely
+insert the body of the macro in place of the macro call. Second, it can
+treat the text of the macro as a two dimensional object and
+indent each line of the macro body by the amount that the macro
+call itself was indented. Consider the following macros.
+
+\begin{verbatim}
+@$@<Loop Structure@>@{@-
+i=1;
+while (i<=N)
+ @<Loop body@>
+endwhile
+@}
+
+@$@<Loop body@>@{@-
+a[i]:=0;
+i:=i+1;@}
+\end{verbatim}
+
+Under the regime of \newterm{no indentation}\xx{indentation}{none}
+the loop structure
+macro expands to:
+
+\begin{verbatim}
+i=1;
+while (i<=N)
+ a[i]:=0;
+i:=i+1;
+endwhile
+\end{verbatim}
+
+Under the regime of \newterm{blank indentation}\xx{indentation}{blank}
+the loop structure macro expands to:
+
+\begin{verbatim}
+i=1;
+while (i<=N)
+ a[i]:=0;
+ i:=i+1;
+endwhile
+\end{verbatim}
+
+The \p{indentation} pragma determines which of these two regimes will be used
+to expand the macros when constructing the product files. The syntax of the
+pragma is:
+
+\begin{verbatim}
+pragma_ident = ps "indentation" s "=" s ("blank" | "none")
+\end{verbatim}
+
+Its two forms look like this:
+
+\begin{verbatim}
+@p indentation = blank
+@p indentation = none
+\end{verbatim}
+
+In the current version of FunnelWeb, the indentation regime is an attribute
+that is attached to an entire run of Tangle; it is not possible to bind it
+to particular product files or to particular macros. As a result, it doesn't
+matter where indentation pragmas occur in the input file or how many
+there are so long as they are all the same. By default FunnelWeb uses
+blank indentation.
+
+\subsubsection{Maximum Input Line Length}
+\label{millpragma}\xx{input}{line length}\xx{maximum}{input line length}
+
+FunnelWeb generates an error for each input line
+that exceeds a certain maximum number of characters. At the start of the
+processing of each input
+file and each include file, this maximum is set to a default value of 80.
+However,
+the maximum can be changed using a maximum input line length
+pragma.\xx{pragma}{input line length}
+
+\begin{verbatim}
+pragma_mill = ps "maximum_input_line_length" s "=" s numorinf
+\end{verbatim}
+
+The maximum input line length can be varied
+\i{dynamically} throughout the input file. Each maximum input line length
+pragma's scope covers the line following the pragma through to and including
+the next maximum input line length pragma, but not covering any intervening
+include files. At the start of an include file, FunnelWeb resets
+the maximum input line length to the default value. It restores it to
+its previous value at the end of the include file.
+
+This pragma is useful for detecting text that has strayed off the
+right side of the screen when editing. If you use FunnelWeb, and set the
+maximum input line length to be the width of your editing window, you will
+never be caught by, for example, off-screen opening comment symbols.
+You can also be sure that your source text can be printed raw, if necessary,
+without lines wrapping around.
+
+\subsubsection{Maximum Output File Line Length}
+\label{mollpragma}%
+\xx{maximum}{product file line length}%
+\xx{pragma}{maximum product file line length}%
+\xx{maximum}{output file line length}%
+\xx{pragma}{maximum output file line length}
+
+As well as keeping an eye on input line lengths, FunnelWeb also keeps an
+eye on the line lengths of product files and flags all lines longer
+than a certain limit with error messages.
+Unlike the
+maximum input line length, which can vary dynamically throughout the input
+file, the maximum product file line length remains fixed throughout the
+generation
+of all the product files. The maximum product file
+line length pragma allows this
+value to be set. If there is more than one such pragma in an input file, the
+pragmas must all specify the same value.
+
+\begin{verbatim}
+pragma_moll = ps "maximum_output_line_length" s "=" s numorinf
+\end{verbatim}
+
+The default value is 80 characters.
+
+This pragma is only one of two constraints on the length of the lines of the
+product files. The \p{+W} command line option also contributes.
+The actual value that FunnelWeb uses is the minimum of the limits
+specified in the command line and pragmas.
+
+FunnelWeb does not monitor the length of the lines of its other output files
+(journal file, listing file, documentation file).
+
+\subsubsection{Typesetter}
+\xx{typesetter}{pragma}\xx{typesetter}{independence}
+
+The \p{typesetter} pragma allows the user to specify whether the input
+file is supposed to be typesetter-independent, or whether it contains
+commands in a particular typesetter language. The pragma has the
+following syntax.
+
+\begin{verbatim}
+pragma_typesetter = ps "typesetter" s "=" s ("none" | "tex")
+\end{verbatim}
+
+The two forms of the pragma look like this.
+
+\begin{verbatim}
+@ typesetter = none
+@ typesetter = tex
+\end{verbatim}
+
+A source file can contain more than one typesetter pragma, but they must
+all specify the same value. The default is \p{none}.
+The typesetter setting affects two things:
+
+\narrowthing{Handling of free text:}{If the typesetter is not \p{none},
+Weave writes the free text \i{directly}
+to the documentation file without changing it whatsoever. This means that
+if (say) \p{\char`\\ centerline} appears in the input file, it will copied
+directly to the documentation file. If the typesetter is \p{none}, Weave
+intercepts any characters or sequences that might have a special
+meaning to the target typesetter and replaces them
+with typesetter commands to typeset the sequences so that they will appear
+as they do in the input. For example, if the typesetter is \p{none} and
+the target typesetter is \TeX{}, then if
+\p{\$} (the \TeX{} \dq{mathematics mode} character)
+appears in the input file, it will be
+be written to the documentation file as \p{\char`\\ \$}.}
+
+\narrowthing{Restrictions on the target typesetter:}{At a later date,
+different weave modules might be incorporated into FunnelWeb to cater
+for a variety
+of different typesetters. If this happens, it will be important to ensure
+that typesetter-specific source files
+(\ie{}\p{typesetter} $\ne$ \p{none}) are not processed with different
+target typesetters. For example, a user might innocently attempt to generate
+a \p{troff} documentation file from a
+FunnelWeb source file containing a \p{typesetter = tex} (and by
+implication \TeX{} control sequences). The pragma could also be useful
+for catching typesetter clashes in source and include files. The setting
+\p{none} is special because it is guaranteed to work with any
+future target typesetter.}
+
+The aim of all this is
+to ensure that any typesetter dependency is correctly proclaimed.
+Because \p{none} is the default typesetter,
+a user who creates a source file without a \p{typesetter = x} pragma
+will soon find that the control sequences they are inserting into
+the source document are appearing verbatim in the printed documentation!
+In order to activate these sequences, they will be forced to add a
+\p{typesetter} pragma, thus making the dependency explicit.
+
+It may seem strange to place the \p{typesetter} setting facility within
+a pragma (\p{@p}) when there is a separate typesetting construct (\p{@t}).
+This has been done to sustain the rule of thumb that says that
+pragmas do not participate in the parser-level syntax, but typesetter
+directives do.
+
+\subsection{Freestanding Typesetter Directives}
+\xx{typesetter}{directives}
+
+FunnelWeb provides two kinds of typesetter directive to assist the user
+to produce documentation. These are \newterm{inline} and
+\newterm{freestanding}. Unlike pragmas,
+each of these categories of directive participates in the parser-level
+syntax and can appear only in certain contexts (see the parser section).
+Inline directives are
+designed to be used within paragraphs to alter the look of the enclosed
+text. Freestanding typesetter directives are designed to
+appear on lines of their own and have a bigger typographical impact.
+
+The syntax of freestanding typesetter directives is almost identical to that
+of pragmas. All the same syntax rules apply (except that the actual
+keywords are different).
+The following subsections describe the four typesetter directives
+available.
+
+\begin{verbatim}
+ftd = ftd_newpage | ftd_toc | ftd_vskip | ftd_title
+ts = "@t "
+\end{verbatim}
+
+\subsubsection{New Page}
+\x{new page}\xx{pragma}{new page}
+
+The new page pragma is a typesetting pragma with the following syntax.
+
+\begin{verbatim}
+ftd_newpage = ts "new_page"
+\end{verbatim}
+
+It only form looks like this.
+
+\begin{verbatim}
+@t new_page
+\end{verbatim}
+
+Its sole effect is to cause a \dq{skip to a new page} command to be inserted
+into the documentation file.
+The new page command is such that if the typesetter is already at
+the top of a page, it will skip to the top of the next page.
+
+\subsubsection{Table of Contents}
+\xx{table of}{contents}\xx{pragma}{table of contents}
+
+The new page pragma is a typesetting pragma with the following syntax.
+
+\begin{verbatim}
+ftd_toc = ts "table_of_contents"
+\end{verbatim}
+
+It only form looks like this.
+
+\begin{verbatim}
+@t table_of_contents
+\end{verbatim}
+
+Its sole effect is to instruct Weave to insert a table of contents at
+this point in the printed documentation.
+This pragma does not skip to a top of a new page first.
+
+\subsubsection{Vertical Skip}
+\xx{vertical}{skip}\xx{pragma}{vskip}
+
+The vertical skip pragma is a typesetting pragma that
+instructs Weave to insert a specified amount of
+vertical space into the documentation. The pragma has the following syntax.
+
+\begin{verbatim}
+ftd_vskip = ts "vskip" s number s "mm"
+\end{verbatim}
+
+For example:
+
+\begin{verbatim}
+@t vskip 26 mm
+\end{verbatim}
+
+\subsubsection{Title}
+\x{title}\xx{pragma}{title}
+
+The title pragma is a typesetting pragma with the following syntax.
+
+\begin{verbatim}
+ftd_title = ts "title" s font s alignment text
+font = "normalfont" | "titlefont" | "smalltitlefont"
+alignment = "left" | "centre" | "right"
+text = """" {printable_char} """"
+\end{verbatim}
+
+It's effect is to instruct Weave to insert a single line
+into the printed documentation
+containing the specified text set in the specified font
+and aligned in the specified manner. The double quotes delimiting
+the text are for show only; if you want to put a double quote in the string,
+you don't need to double them.
+
+Here is an example of the pragma.
+
+\begin{verbatim}
+@t title smalltitlefont centre "How to Flip a Bit"
+\end{verbatim}
+
+\subsection{Scanner/Parser Interface}
+
+If the scanner terminates without any errors, control
+is passed to the parser. The parser parses the token list generated by
+the scanner. The token list consists of text scraps, freestanding
+typesetter directives,
+and special sequence tokens.
+
+The user should bear in mind that
+\i{the scanner finishes running before the
+parser starts running.} This means that the scanner cannot be influenced
+in any way by higher order structures such as the parser might parse.
+For example,
+it is impossible to write a FunnelWeb macro to include a file, or insert
+a \p{vskip} pragma into the input text.
+
+\section{Parser}
+\x{parser}
+
+By the time the parser starts, the scanner has completely terminated.
+At this point, it
+is not possible for any more files to be included, and special characters are
+no longer present to confuse things. All that remains is a list of
+\newterm{text tokens},
+\newterm{special tokens}, and \newterm{typesetter directive tokens}.
+Text tokens consist entirely of
+sequences of printable characters and end of line markers. Special tokens
+represent the special sequences that the scanner found in the input file.
+Typesetter directive tokens represent the freestanding typesetter directives
+that the scanner encountered.
+The parser consumes the token list and builds a macro table that is
+later used to generate product files. It also constructs
+a document list that is used to generate the documentation file.
+
+The syntax rules appearing in the following sections refer to the
+token list.
+
+\subsection{High Level Structure}
+\xx{syntax}{high level}
+
+At the highest level, the FunnelWeb parser parses the input file (token
+list) into a sequence of text scraps, macro definitions,
+and typesetter directives.
+
+\begin{verbatim}
+input_file = {text | macro | directive}
+\end{verbatim}
+
+All three of these kinds of components contribute to the documentation file,
+but only macro definitions
+contribute to the product files. If all the free text
+and directives were removed from a FunnelWeb input file, the
+product files would not be affected.
+
+\subsection{Free Text}
+\xx{free}{text}
+
+\newterm{Free text} is any text that is not part of a macro definition or a
+directive. A scrap of free text consists of a sequence of items drawn
+from the following list:
+non-special printable characters, insert-eol special
+sequences, insert special character special sequences, insert arbitrary
+character special sequence.
+
+\begin{verbatim}
+free_text = ordinary_text
+ordinary_text = {ordinary_char | eol | text_special}+
+text_special = "@+" | "@@" | "@^" char_spec
+ordinary_char = " ".."~"-special
+\end{verbatim}
+
+An example of some rather messy free text is as follows:
+
+\begin{verbatim}
+This@@ is a very@+ messy
+@^D(009)chunk of text indeed.
+But FunnelWeb still views it as
+a single chunk of text.
+\end{verbatim}
+
+FunnelWeb never sees two text chunks next to each other in the input;
+they are always merged into a single text token.
+
+The free text in an input file
+does not affect the product files. However, by default, it appears in the
+printed documentation exactly as it is given in the input file, except
+that it is filled and justified into paragraphs.
+
+Any printable character
+or particular sequence of characters
+may appear in the free text of a document. FunnelWeb ensures that they
+will appear exactly as given in the input file, even if they happen to be
+escape characters or commands in the target typesetter.
+However, FunnelWeb also provides a special mode that allows
+this censoring to be
+overridden. See Section~\label{typesetterpragma} for more information.
+
+\subsection{Typesetter Directives}
+\x{directives}
+
+FunnelWeb provides a variety of typesetter directives to assist the
+user to typeset the document in a typesetter-independent way. These are
+divided into \newterm{freestanding typesetter directives} (ftd) and
+\newterm{inline typesetter directives} (itd). The internal syntax of the
+freestanding typesetter directives has already been discussed
+in the scanner section. The following syntax rule defines
+the context in which these constructs can appear.
+
+\begin{verbatim}
+directive = ftd | itd
+itd = section | literal | emphasis
+\end{verbatim}
+
+The remainder of this section describes the inline typesetter directives.
+
+\subsubsection{Section}
+\xx{section}{constructs}
+
+The section directive
+provides a way for the user to structure the program and documentation into
+a hierarchical tree structure,\xx{tree}{structure}
+just as in most large documents.
+A section construct consists of a case-insensitive
+identifying letter, which determines the
+absolute level of the section in the document, and an optional section
+name, which has exactly the same syntax as a macro name.
+
+\begin{verbatim}
+section = "@" levelchar [name]
+levelchar = "A" | "B" | "C" | "D" | "E" |
+ "a" | "b" | "c" | "d" | "e"
+\end{verbatim}
+
+The section construct is not quite \dq{inline} as it must appear only
+at the start of a line. However, unlike the \dqp{@i}, \dqp{@p}, and
+\dqp{@t} constructs, it does not consume the remainder of the line
+(although it would be silly to place anything on the same line anyway).
+
+FunnelWeb provides five levels of sections, ranging from the highest level
+of \p{A} (like a \LaTeX{}\x{LaTeX}
+chapter) to the lowest level of \p{E} (like a \LaTeX{}
+subsubsubsection). FunnelWeb input files need not contain
+any sections at all, but if they do, the first section must be at level \p{A},
+and following sections must not skip hierarchical levels (\eg{}an \p{@D} cannot
+follow an \p{@C}). FunnelWeb generates an error if a level is skipped.
+
+All section \i{must} have names associated with them, but for convenience,
+the section name is optional if the section contains one or more
+macro definitions
+(\ie{}at least one macro definition appears between the section construct
+in question and the
+next section construct in the input file.). In this case, the section
+\i{inherits} the name of the first macro defined in the section. This
+feature streamlines the input file, avoiding duplicate name inconsistencies.
+
+Any sequence of printable characters can be used in the
+section name,\xx{section}{name}
+even the target typesetter's escape sequence (\eg{}in \TeX{},
+\dqp{\bs{}}).
+
+The following example demonstrates the section construct.
+
+\begin{verbatim}
+@A@<Life Simulation@>
+
+This is the main simulation module for planet earth, simulated down to the
+molecular level. This is a REALLY big program. I mean really big. I mean,
+if you thought the X-Windows source code was big, you're in for a shock...
+
+@B We start by looking at the code for six legged stick insects as they
+form a good example of a typical object-oriented animal implementation.
+
+@$@<Six Legged Stick Insects@>@{@-
+slsi.creep; slsi.crawl; slsi.creep;@}
+\end{verbatim}
+
+In the above example, the name for the level A section is provided
+explicitly, while the name for the level B section will be inherited from the
+macro name.
+
+\subsubsection{Literal Directive}
+\xx{literal}{directive}
+
+Experience has shown that one of the most common typesetting requirement
+is that of being able to typeset small program fragments
+in the middle of the documenting free text. Typically
+there is a frequent need to refer to program identifiers, and it
+assists the reader to have such identifiers typeset in the same manner
+as the program text in the macro definition.
+FunnelWeb~V1
+defined a \TeX{} macro for this (called \p{p}) that simply typeset its
+argument in \p{tt font}. This proved so
+useful, that the facility has been made typesetter-independent in
+FunnelWeb~V3.
+
+To specify that some text be typeset in \p{tt font},
+enclose the text in curly brace special sequences as follows.
+
+\begin{verbatim}
+literal = "@{" ordinary_text "@}"
+\end{verbatim}
+
+As in macro names, section names, and macro bodies, the text contained
+within the literal
+construct is protected by FunnelWeb from any non-literal interpretation by
+the typesetter and the user is
+free to enclose \i{any} text covered by the definition \p{ordinary\_text}.
+FunnelWeb guarantees that, no matter what the text is, it will
+be typeset in \p{tt font} exactly as it appears. However, the text will be
+filled and justified into a paragraph as usual.
+
+Here is an example of the use of the construct:
+
+\begin{verbatim}
+@C The @{WOMBAT@} (Waste Of Money, Brains, And Time) function
+calls the @{kangaroo@} input function which has been
+known to cause keybounce.
+This keybounce can be dampened using the @{wet_sloth@} subsystem.
+\end{verbatim}
+
+\subsubsection{Emphasis Directive}
+\xx{emphasis}{directive}
+
+The emphasis directive is very similar to the literal directive except that
+it causes its argument to be typeset in an emphasised manner
+(\eg{}italics). Like the literal directive,
+the emphasis directive protects its text argument.
+
+\begin{verbatim}
+emphasise = "@/" ordinary_text "@/"
+\end{verbatim}
+
+Example:
+
+\begin{verbatim}
+@C What you @/really@/ need, of course, is a @/great@/, @/big@/,
+network with packets just flying @/everywhere@/.
+This section implements an interface
+to such a @/humungeous@/ network.
+\end{verbatim}
+
+\subsection{Macros}
+\xx{macro}{definition}
+
+The third category of
+construct appearing at the highest syntactic level in a FunnelWeb
+input file is the macro definition.
+A macro definition binds a unique
+\newterm{macro name} to a \newterm{macro body} containing an
+\newterm{expression} consisting of text, calls to
+other macros, and formal parameters. The syntax for a macro definition is as
+follows:
+
+\begin{verbatim}
+macro = ("@O" | "@$") name [formal_parameter_list]
+ ["@Z"] ["@M"] ["==" | "+="] "@{" expression "@}"
+\end{verbatim}
+
+The complexity of the macro definition syntax is mostly to enable the user
+to attach various attributes to the macro.\xx{macro}{attributes}
+If the user chooses \p{@O},
+then the macro cannot be called, but is instead
+attached to a product file. If the user chooses \p{@\$}, then the macro is
+an ordinary macro definition that is not attached to a file.
+
+By default, a non-file macro must be invoked exactly once by one other
+macro. Macros that
+aren't are flagged with errors by the FunnelWeb analyser. However, if the
+user uses the \p{@Z}\x{@Z} sequence in the macro definition, the macro is then
+permitted to be invoked zero times, as well as once. Similarly, if the
+user uses the \p{@M}\x{@M}
+sequence in the macro definition, the macro is
+permitted to be called many times as well as once. If both \p{@Z} and
+\p{@M} are present then the macro is permitted to be invoked zero, one,
+or many times.
+
+The purpose of enforcing the default \dq{exactly one call} rule is to
+flag pieces of code that the user may have defined in a macro but not
+hooked into the rest of the program. Experience shows that this is a
+common error. Similarly, it can be dangerous to multiply invoke a
+macro intended to be invoked only once. For example, it may be dangerous
+to invoke a scrap of non-idempotent initialization code in two different
+parts of the main function of a program! However, FunnelWeb will not
+generate an error if a macro without \p{@M} is called by another
+macro that is called more than once.
+
+If the text string \p{==}\x{==} (or nothing) follows the macro name,
+the expression that follows
+is the entire text of the macro body. If the text string \p{+=}\x{+=}
+follows
+the macro name, then more than one such definition is allowed
+(but not required) in the document
+and the body of
+the macro consists of the concatenation of all such expressions in the order
+in which they occur in the input file. Such a macro is said to be
+additive and is
+\newterm{additively defined}. Thus a macro body can either be defined
+in one place using one definition (using \p{==}) or it can be \i{distributed}
+throughout the input file in a sequence of one or more macro definitions (using
+\p{+=}). If neither \p{==} and \p{+=} are present, FunnelWeb assumes a
+default of \p{==}.
+
+Macros attached to product files cannot be additively defined.
+Additively defined macros can have parameter lists and \p{@Z} and \p{@M}
+attributes, but these must be specified only in the first definition of the
+macro. However, \p{+=} must appear in each definition.
+
+\subsubsection{Names}
+\x{names}\xx{macro}{names}\xx{section}{names}
+
+Names are used to identify macros and sections.
+A name consists of a sequence of from zero to 80 printable characters,
+including the blank
+character. End of line characters are not permitted in names.
+Names are case sensitive; two different macros are permitted to have names
+that differ in case only. Like free text, names are typeset by FunnelWeb and
+are safe from misinterpretation by the target typesetter. For example, it
+is quite acceptable to use the macro name \p{@<\bs{}medskip@>}
+even if the target typesetter is \TeX{}.
+
+\begin{verbatim}
+name = "@<" name_text "@>"
+name_text = {ordinary_char | text_special}
+\end{verbatim}
+
+\subsubsection{Formal Parameter Lists}
+\xx{parameter lists}{formal}
+
+FunnelWeb allows macros to have up to nine macro parameters, named
+\p{@1},\x{@1...}
+\p{@2}, $\ldots$, \p{@9}. If a macro does not have a formal
+parameter list,
+it is defined to have no parameters, and an actual parameter list must not
+appear at the point of call. If a macro has a formal parameter list, it
+is defined to have one or more parameters, and a corresponding actual
+parameter must be supplied for each formal parameter, at the point of call.
+
+Because FunnelWeb parameters have predictable names, the only information
+that a formal parameter list need convey is \i{how many} parameters a macro
+has. For this reason a formal parameter list takes the form of the highest
+numbered formal parameter desired, enclosed in parentheses sequences.
+
+\begin{verbatim}
+formal_parameter_list = "@(" formal_parameter "@)".
+formal_parameter = "@1" | "@2" | "@3" | "@4" | "@5" |
+ "@6" | "@7" | "@8" | "@9"
+\end{verbatim}
+
+\subsection{Expressions}
+\xx{macro}{expressions}
+
+Expressions are FunnelWeb's most powerful form of expressing a text
+string.
+Macro bodies are defined as expressions. Actual parameters consist of
+expressions.
+
+An expression consists of a sequence of zero or more expression elements.
+An expression element can be ordinary text, a macro call, or a formal
+parameter of the macro \i{definition} in which the formal parameter occurs.
+
+\begin{verbatim}
+expression = {ordinary_text | macro_call | formal_parameter}
+\end{verbatim}
+
+\subsection{Macro Calls}
+\xx{macro}{calls}
+
+A macro call consists of a name optionally followed by an actual parameter
+list. The
+number of parameters in the actual parameter list must be the same as
+the number of formal parameters specified in the definition of the
+macro. If the macro has no formal parameter list, its call must have no
+actual parameter list.
+
+\begin{verbatim}
+macro_call = name [actual_parameter_list]
+actual_parameter_list = "@(" actpar { "@," actpar } "@)"
+actpar = expression |
+ ( whitespace "@""" expression "@""" whitespace )
+whitespace = {" " | eol}
+\end{verbatim}
+
+FunnelWeb allows parameters to be passed directly, or delimited by
+special double
+quotes.\xx{macro parameter}{delimiting}
+Each form is useful under different circumstances. Direct specification
+is useful where the parameters are short and can be all placed on one line.
+Double quoted parameters allow whitespace on either side
+(that is not considered part of the parameter) and are useful for laying out
+rather messy parameters. Here are examples of the two forms.
+
+\begin{verbatim}
+@<Generic Loop@>@(
+ @"x:=1;@" @,
+ @"x<=10;@" @,
+ @"print "x=%u, x^2=%u",x,x*x;
+ x:=x+1;@+@"
+@)
+
+@<Colours@>@(red@,green@,blue@,yellow@)
+\end{verbatim}
+
+As shown, the two forms may be mixed within the same parameter list.
+
+Experience has shown that the vast majority of macros have no parameters.
+
+\subsection{Formal Parameters}
+\xx{formal}{parameters}
+
+Formal parameters can appear in the expressions forming macro bodies
+in accordance with the syntax rules defined above. A formal parameter
+expands to the text of the expansion of its corresponding
+actual parameter. There is nothing preventing a formal
+parameter being provided as part of an expression that forms an actual
+parameter.
+In that happens, the formal parameter is bound to the actual parameter of the
+calling macro, not the called macro.
+After the following definitions,
+
+\begin{verbatim}
+@$@<One@>@(@1@)=@{A walrus in @1 is a walrus in vain.@}
+@$@<Two@>@(@1@)=@{@<One@>@(S@1n@)@}
+\end{verbatim}
+
+the call
+
+\begin{verbatim}
+@<Two@>@(pai@)
+\end{verbatim}
+
+will result in the expansion
+
+\begin{verbatim}
+A walrus in Spain is a walrus in vain.
+\end{verbatim}
+
+\subsection{Macros are Static}
+\xx{macro}{definition}\xx{macro}{expansion}\xx{macros}{static}
+
+In FunnelWeb, the actions of \i{macro definition} and \i{macro
+expansion} occur during two separate phases (parser and tangle)
+and cannot be interleaved. As a result, the FunnelWeb macro facility is
+completely static.
+It is not possible for one macro to
+define another while the first macro is being
+expanded; each must be defined statically. It is not possible to define a
+macro to even assist in the definition of other macros. Because the scanner,
+parser, analyser, and tangler phases are all invoked sequentially, there is
+no room for feedback of definitions between different levels (\eg{}the user
+cannot define a macro for the \p{vskip} pragma).
+
+This lack of power is fully intentional. By totally excluding the more
+incomprehensible ways in which a general purpose macro preprocessor can be
+used, FunnelWeb provides definite guarantees to the reader of its input files:
+
+\begin{itemize}
+\item FunnelWeb guarantees that a piece of text does not contain a macro call
+unless it contains the special character followed by \p{$<$} or \p{\#}.
+\item FunnelWeb allows calls to be made to macros that are defined later
+in the input file.
+\end{itemize}
+
+\section{Analyser}
+\x{analyser}\xx{checks}{macro}
+
+The effect of the parser is to construct a macro table containing a
+representation of all the macros defined within the document, and a document
+list which contains a complete representation of the entire document.
+If there are no error diagnostics (or worse) at the end of the parser
+run, FunnelWeb invokes the analyser which tests for the following conditions
+and flags them with errors if they arise.
+
+\begin{itemize}
+\item No macros defined in the input file.
+\item No macros connected to output files.
+\item Call of an undefined macro.
+\item Call having the wrong number of parameters.
+\item Call of a macro that is connected to an output file.
+\item No calls made to a macro without the \p{@Z} option.
+\item More than one call made to a macro without the \p{@M} option.
+\item Directly or indirectly recursively defined macros.
+\item Unnamed sections that contain no macro definitions.
+\end{itemize}
+
+FunnelWeb performs a static analysis\xx{static}{analysis} to detect
+recursion.\xx{macro}{recursion}
+Unfortunately, the recursion detection algorithm
+flags all macros that have an infinite expansion
+rather than just all macros
+with a recursive definition. If A calls B, and B calls
+C, and C calls B, then FunnelWeb will flag A as well
+as B and C. It is hoped that this problem will be fixed in a later version.
+
+Because FunnelWeb does not provide any kind of conditional feature, the
+prevention of recursion does not represent a curtailment of expressive power.
+
+Macros may be invoked recursively, but may not be recursive. Thus:
+
+\begin{verbatim}
+@<Sloth@>@(@<Sloth@>@(Walrus@)@) @! LEGAL recursive invocation.
+
+@$@<Teapot@>==@{@<Teapot@>@} @! ILLEGAL recursive definition.
+\end{verbatim}
+
+\section{Tangle}
+\x{tangle}
+
+If the scanner, parser, and analyser have successfully (\ie{}with no
+errors, severe errors, or fatal errors) completed, and the Tangle option
+(\p{+O}) is turned on (it is by default), then the Tangle component of
+FunnelWeb is invoked to generate the product files specified in the \p{@O}
+macros of the input file.
+
+The operation of Tangle is very simple. Each \p{@O} macro is expanded and
+written to a file of the same name. As there are a finite number of macros,
+and the analyser guarantees that the
+macro structure is non-recursive, Tangle is guaranteed to terminate.
+
+Three remaining points are worth discussing.
+
+\begin{enumerate}
+
+\item Tangle expands macros using blank indentation unless the
+user has specified otherwise in an indentation pragma in the
+input file (see Section~\ref{indentationpragma}).
+
+\item Tangle keeps track of the
+length of the lines that it is writing
+and issues an error if any line of any product file that it generates is
+longer than the maximum. The maximum is the minimum of a value defaulted
+or specified in the input file (Section~\ref{mollpragma}),
+and the value (if any) provided by the
+\p{+w} command line argument (Section~\ref{commandlineoptions}).
+
+\item It is worth the user obtaining
+some understanding of the resources
+that FunnelWeb requires to perform its task.
+
+\end{enumerate}
+
+When FunnelWeb's scanner
+executes, it reads each file into memory where it is kept for the duration
+of the run. Thus, there must be room in memory for the entire
+input file, including all include files. While this approach may seem
+expensive in memory, it is almost necessary in order to support
+forward references. To merely scan the input file, recording the macro
+names, but leaving the text on disk, would require many random
+access disk seeks.
+
+In contrast, FunnelWeb never builds an internal representation
+of the product file.
+Instead, each piece of output is written immediately to the
+product file. This means that as long as the input file fits in memory,
+the product file can be arbitrarily large. It also means that users need
+not fear to define or call macros that they know will expand to megabytes
+of text. Nor need they fear placing a call to such a macro as part of
+an actual parameter. FunnelWeb does not ever expand actual parameters
+internally. In fact, it does not expand them until it hits the corresponding
+formal parameter during its expansion of the called macro. At that point, it
+looks up the \i{expression} (not the expansion of the expression) for the
+corresponding actual parameter, and starts expanding it.
+
+\section{Weave}
+\x{weave}\x{typesetting}
+
+If the scanner, parser, and analyser have successfully (\ie{}with no
+errors, severe errors, or fatal errors) completed, and the Weave option
+(\p{+T}) is turned on (it is \i{off} by default), then the Weave component of
+FunnelWeb is invoked to generate a text file in the format of a particular
+typesetter. The result, when fed through the particular typesetter and printed,
+is a fully typeset representation of the entire input file complete with
+cross referencing information.
+
+\subsection{Target Typesetter}
+\xx{target}{typesetter}
+
+Currently, FunnelWeb produces documentation files
+in the format of only one typesetter ---
+\TeX{}. However, the Weave package of FunnelWeb is fairly small, and it
+is hoped that it can be rewritten so as to provide
+a collection of typesetter modules from which
+the user will be able to choose using a command line argument.
+
+\subsection{Cross Reference Numbering}
+\xx{cross}{referencing}\xx{cross reference}{numbering}
+\xx{section}{numbering}
+
+When FunnelWeb produces its typeset documentation, it \i{numbers} each
+section and each macro definition and cross references the macro definitions.
+The exact scheme used has been carefully thought out. However, as it can
+be a little confusing to the beginner, it is explained here in full.
+
+The most important thing is that there is \i{no relation} between the
+macro numbering and the section numbering. In Knuth's Web there are only
+section numbers. In FunnelWeb, the numbering of sections and macros
+is separated.
+
+In FunnelWeb, \i{sections} are numbered
+hierarchically in ascending order. For example, the second level-C section
+of the third level-B section of the first level-A section is
+numbered \dq{1.3.2}. In contrast, \i{macro definitions} are numbered
+sequentially in ascending order. For example, the first macro definition is
+number 1, the second is number 2, and so on. Note that it is \i{macro
+definitions} that are numbered, not \i{macros}. This distinction is necessary
+because additive macros (\ie{}the ones with \p{+=})
+can be defined by a collection
+of partial definitions scattered throughout the input file. A single additive
+macro may be defined in definitions 5, 67, 128, and 153.
+
+\section{FunnelWeb Shell}
+\label{commandshell}%
+\xx{FunnelWeb}{command shell}\xx{commands}{FunnelWeb}\xx{FunnelWeb}{shell}
+
+\subsection{Introduction}
+
+One of the goals of FunnelWeb is
+that it must be extremely portable. Huge efforts, desperate actions,
+and great sacrifices were made in the name of portability.
+For example, FunnelWeb is written in~C.
+
+An equally important goal was that of correctness and reliability. To this
+end, it was determined that a large automated suite of test programs be
+prepared to assist in regression testing. Preparing the test suite was
+tedious, but achievable. Automating it portably was more difficult.
+
+The difficulty faced was that if FunnelWeb was implemented in the form of
+a utility that could be
+invoked from the operating system command language, the only way to set up
+regression testing was in the command language of the operating system
+of the target machine (shellscripts for UNIX, DCL for VMS, batch files
+for MSDOS, and \i{nothing} on the Macintosh). The huge variation in these
+command languages led to the conclusion that either the automation of
+regression testing would have to be rewritten on each target machine, or
+a small command language would have to be created within FunnelWeb. In the
+end, the twin goals of portability and regression testing were considered so
+important that a small command
+shell was constructed inside FunnelWeb. This is called the
+\newterm{FunnelWeb command shell}, or just \dq{the shell} for short.
+
+By default, when FunnelWeb is invoked, it does not enter its shell. If
+just given the name of an input file, it will simple process the input file
+in the normal manner and then terminate. To instruct FunnelWeb to
+invoke its shell, the \p{+K} or \p{+X} command line option must be specified
+when FunnelWeb is invoked from the operating system. It is also
+invoked upon startup if the file \p{fwinit.fws} exists.
+
+Most FunnelWeb users will never need to use the shell and need not even
+know about it. There are four main uses of the shell:\xx{uses}{shell}
+
+\begin{enumerate}
+
+\item As a tool to support automated regression testing.
+
+\item As a development tool on machines that do not have a built in shell
+(\eg{}the Macintosh). The shell can be used to process whole groups of
+files automatically.
+
+\item As a convenience. A user working on a multi-tasking, multi-window
+workstation\x{workstation}
+may wish to keep an interactive session of FunnelWeb going in
+one window rather than having to run up the utility each time it is required.
+
+\item As a convenient
+vehicle for enclosing utilities. The FunnelWeb shell contains
+useful general purpose commands such as the
+differences command \p{diff}.
+
+\end{enumerate}
+
+\subsection{Return Statuses}
+\xx{errors}{shell}\xx{status}{success}%
+\xx{status}{warning}\xx{status}{error}\xx{status}{severe}\xx{status}{fatal}%
+\xx{status}{assertion}
+
+The hierarchy of diagnostics described in Section~\ref{diagnostics}
+is also used in the
+shell commands. Each shell command returns a status which can affect
+further processing.
+
+\narrowthing{Success}{status is the normal command return status.}
+
+\narrowthing{Warning}{status is returned if some minor problem
+arose with the execution of the command.}
+
+\narrowthing{Error}{status is returned if a significant problem
+arises during the execution of the command.
+However, unlike a severe error,
+it does \i{not} cause termination of the enclosing shellscript.}
+
+\narrowthing{Severe error}{status is returned if a problem arises
+during the execution of the command that prevents the command from
+delivering on its \dq{promise}. A severe error causes FunnelWeb
+to abort the script (and any stacked scripts) to the interactive level.
+(However, the \p{tolerate} command allows this to be temporarily
+overridden).}
+
+\narrowthing{Fatal error}{status is returned if a problem arises
+that is so serious that execution of FunnelWeb cannot continue.
+A fatal error causes FunnelWeb to abort to the operating system level.}
+
+\narrowthing{Assertion error}{status is never returned. If an assertion
+error occurs, FunnelWeb bombs out ungracefully to the operating system.
+Assertion errors should never happen. If they do, then there is a bug
+in FunnelWeb.}
+
+To be precise, the status returned by each command
+is a vector of numbers being the number of each of the different kinds of
+diagnostic generated by the command. Usually only one kind
+of diagnostic is generated. However, the \p{fw} command and a few of the other
+commands can generate more than one kind of diagnostic.
+These status vectors are summed internally where they may later be accessed
+using the \p{status} command. However, the current diagnostic state
+evaporates as soon as the next command is encountered.
+
+\subsection{Command Line Length}
+\xx{command}{length}
+
+The maximum length of a shell command line is guaranteed to be
+at least 300 characters.
+
+\subsection{String Substitution}
+\label{stringsubstitution}\xx{string}{substitution}
+
+Most command shells provide some form of string substitution so
+as to provide some degree of parameterization.
+The FunnelWeb shell provides 36 different string variables named
+\p{\$0..\$9} and \p{\$A..\$Z} (case insensitive).
+Each variable can hold a string containing
+any sequence of printable characters and can be as long as a command line.
+
+The \p{define} command\xx{define}{command}
+allows the user to assign a value to these variables.
+The \p{define} command takes two arguments. The first is the digit or letter
+of the
+variable to be defined. The second is a double quote delimited string being the
+string value to be assigned to the variable. If you want to include a
+double quote character within the string, you don't need to double it.
+
+Examples:
+
+\begin{verbatim}
+define 3 "/root/usr/usrs/users/users5/thisuser/workdir/fwdir/testdir"
+define M "/user/local/rubbish/bin/fw"
+define Q "You don't need to double" double quotes"
+\end{verbatim}
+
+Only the identifying character of the variable being assigned
+is used in the definition. This syntax is a simple way of preventing
+the variable from being substituted before it has a chance to be
+defined!
+
+The following points clean up the remaining semantic details:
+
+\begin{itemize}
+
+\item There is only one set of variables and they are global to all
+shellscripts. There are \i{no local variables}.
+
+\item When a shellscript is invoked using the \p{execute} command, the
+substitution variables \p{0} through \p{9} are affected. See
+Section~\ref{executecommand} for more details.
+
+\item If you want to include a dollar sign character in a command
+use \dqp{\$\$}.
+
+\item FunnelWeb also defines \dqp{\$/} which translates to the character
+that separates directory and file name fields in file names on the host
+machine. For example: Sun=\dqp{/}, Vax=\dqp{]}, Mac=\dqp{:},
+PC=\dqp{\bs{}}.
+
+\item Substitution is not performed recursively.
+
+\end{itemize}
+
+\subsection{How a Command Line is Processed}
+\xx{command line}{processing}
+
+When FunnelWeb reads in a command line (from the console or a script file),
+it processes it in the following sequence:
+
+\begin{enumerate}
+
+\item The command line is checked for non-printable characters. If there
+are any, they are flagged with a severe error.
+
+\item All dollar string substitution variables in the command line are
+replaced by their corresponding string.
+The command line is processed from left to right. Substitutions are
+performed non recursively.
+
+\item At this point, if the line is empty, or consists entirely of
+blanks, it is ignored and the interpreter moves to the next line.
+
+\item A severe error is generated if the line at this stage begins with
+a blank.
+
+\item If the first character of the line is \dqp{!}, the line is a
+comment line and is ignored.
+
+\item The run of non-blanks commencing at the start of the line is
+compared case-insensitively to each of the legal command verbs. If the
+command is illegal, a severe error is generated, otherwise the command
+is processed.
+
+\end{enumerate}
+
+\subsection{Options}
+\xx{command}{options}\xx{default}{options}
+
+The FunnelWeb shell maintains three sets of command line options.
+
+\begin{enumerate}
+
+\item The set of options resulting from applying the operating system
+level command line
+arguments to the default option settings.
+
+\item A set of shell options that prevail during the shell invocation.
+
+\item The set of option values active during a particular invocation
+of FunnelWeb proper.
+
+\end{enumerate}
+
+When FunnelWeb is invoked from the operating system with just \p{+F},
+only the first of these three sets comes into existence. If the user
+invokes the FunnelWeb shell, the shell options come into existence and are
+initialized with the value of the first set. These shell options are
+used as the default for all subsequent \p{fw} commands. However,
+they can be altered using the script command \p{set}. If a
+\p{fw} command executed in a shell contains additional command line options,
+these override the shell options for that run, but do not change the
+shell options. An example follows:
+
+\begin{verbatim}
+$ fw +k +t ! Original invocation of FunnelWeb from OS.
+ ! Shell options are now default with "+t".
+FunnelWeb>fw sloth ! Equivalent to fw sloth +t.
+FunnelWeb>set -l ! Change the l shell option.
+FunnelWeb>fw sloth +q ! Equivalent to fw sloth +t -l +q.
+FunnelWeb>fw sloth ! Equivalent to fw sloth +t -l.
+\end{verbatim}
+
+The existence of the shell option set means that the user can set up
+a set of defaults to be applied to all \p{fw} commands issued within
+the shell.
+
+\subsection{Shell Commands}
+\xx{shell commands}{list}\xx{commands}{shell}
+
+This section describes each of the FunnelWeb shell commands. The syntax
+is:
+
+\begin{verbatim}
+shell_command = absent | codify | compare | define | diff | diffsummary |
+ diffzero | eneo | execute | exists | fixeols | help |
+ here | quit | set | show | skipto | status |
+ tolerate | trace | write | writeu
+s = {" "}+
+\end{verbatim}
+
+As a rule, FunnelWeb shell commands return severe status if their
+arguments are syntactically incorrect or if they are
+unable to successfully operate on argument files.
+
+\subsubsection{Absent}
+\xx{command}{absent}
+
+The \p{absent} command performs no action except to return a status. If the
+file specified in its argument doesn't exist
+it returns success status, otherwise it returns severe status.
+
+\begin{verbatim}
+Syntax : absent = "absent" s filename
+Example: absent result.out
+\end{verbatim}
+
+This command is useful in regression testing
+for making sure that
+FunnelWeb \i{hasn't} produced a particular output file.
+
+\subsubsection{Codify}
+\xx{command}{codify}
+
+The \p{codify} command takes two arguments: an input file and an output file.
+It reads each line of the input file and writes a corresponding line to the
+output file. The corresponding line consists of a C macro call containing
+a string containing the input line. The command converts all backslashes in
+input lines to double backslashes so as to avoid unwanted interpretations by
+the C compiler. It also converts double quotes in the line to backslashed
+double quotes.
+
+\begin{verbatim}
+Syntax : codify = "codify" s filename s filename
+Example: codify header.tex header.c
+\end{verbatim}
+
+The following example demonstrates the transformation.
+
+\begin{verbatim}
+Input Line: \def\par{\leavevmode\endgraf}% A "jolly good hack".
+Output Line: WX("\\def\\par{\\leavevmode\\endgraf}% A \"jolly good hack\".");
+\end{verbatim}
+
+The \p{codify} command was introduced to assist in the
+development of FunnelWeb.
+It is used to convert longish text files
+into C code to write them out. The C code is then included within
+the FunnelWeb C program. For example,
+the set of \TeX{} definitions that appears at the top of every
+documentation file was \p{codif}ied and inserted into the
+FunnelWeb code so that FunnelWeb would not have to look for a file containing
+the definitions at run time.
+
+\subsubsection{Compare}
+\xx{command}{compare}
+
+The \p{compare} command takes two filename arguments and performs a binary
+comparison of the two files. If the files are identical, success status
+is returned. If they are different, severe status is returned. No information
+about the manner in which the files differ is conveyed.
+
+\begin{verbatim}
+Syntax : compare = "compare" s filename s filename
+Example: compare result.txt answer.txt
+\end{verbatim}
+
+The \p{compare} command was created as the main checking mechanism for
+regression testing. However, its binary output was soon found to be
+unworkable and the more sophisticated \p{diff} command was added so
+that the actual differences between the files could be examined.
+
+\subsubsection{Define}
+\xx{command}{define}\xx{string}{substitution}
+
+The \p{define} command
+assigns a value to a shell string substitution variable.
+The \p{define} command takes two arguments. The first is the digit or letter
+of the
+variable to be defined. The second is a double quote delimited string being the
+string value to be assigned to the variable. If you want to include a
+double quote character within the string, you don't need to double it.
+
+\begin{verbatim}
+Syntax : define = "define" s letter s """" text """"
+Examples: define 3 "/usr/usrs/thisuser/workdir/fwdir/testdir"
+ define M "/user/local/rubbish/bin/fw"
+ define Q "You don't need to double" double quotes"
+\end{verbatim}
+
+The command interpreter expands the command line before it executes the
+\p{define} command. This means that you can define string substitution
+variables in terms of each other with static binding.
+
+The \p{define} command was introduced to allow the parameterization
+of the directories involved in regression testing.
+
+See Section~\ref{stringsubstitution} for more details.
+
+\subsubsection{Diff}
+\xx{command}{diff}\xx{file}{differences}
+
+The \p{diff} command reads in two text files and \i{appends} a report to a log
+file containing a list of the differences between the two input
+files. If the log file does not already exist, an empty one is created first.
+
+\begin{verbatim}
+Syntax : diff = "diff" s filename s filename s filename s ["ABORT"]
+Examples: diff result.tex answer.tex diff.log
+ diff $Otest23.out $Atest23.out $Ldiff.log ABORT
+\end{verbatim}
+
+The \p{diff} command performs a full line-based differences operation.
+It will identify different sections in a file, even if they are of differing
+length.
+
+The implementation of the \p{diff} command is quite complicated. To be
+sure that it is at least getting its same/different proclamation right,
+the \p{diff} command performs a binary comparison as an extra check.
+
+The following points describe the rules for determining the result status.
+
+\begin{enumerate}
+
+\item \p{diff} aborts with a
+severe error if the log file cannot be opened or
+created for appending.
+
+\item An ordinary error is generated if either or both of the input files
+cannot be opened.
+
+\item If, at the end of the run, the two input files have not
+been proven to be identical, and the \p{ABORT} keyword is present, \p{diff}
+returns severe status.
+
+\item \p{diff} returns success status if none of the above conditions
+(or similar conditions) occur, even if the two files are different.
+
+\end{enumerate}
+
+The \p{diff} command \i{appends} its differences report rather than
+merely writing it. This allows a regression test script to perform
+a series of regression tests and produce a report for the user.
+
+The \p{diff} command was added to the shell after it had become apparent
+that the simpler \p{compare} command was not yielding enough information.
+Whereas early on, regression testing was treated
+mainly as a tool to ensure that FunnelWeb was being ported to other machines
+correctly, it began to place an increasing role during development in
+identifying the effects of changes made to the code. The \p{diff} command
+supports this application of regression testing by pinpointing the
+differences between nearly-identical text files.
+
+\subsubsection{Diffsummary}
+\xx{command}{diffsummary}
+
+The \p{diffsummary} command writes a short report to the
+console giving the number of
+difference operations that have taken place and how many of the pairs
+of files compared were identical. Counting starts at the most recent
+execution of a \p{diffzero} command, or if there has been none, when
+FunnelWeb started up.
+
+\begin{verbatim}
+Syntax : diffsummary = "diffsummary"
+Examples: diffsummary
+\end{verbatim}
+
+The \p{diffsummary} command was added so as to allow regression testing
+scripts to display a summary of the results of the test. If the summary
+indicates that no pair of files differed, then there is no need to look
+in the \p{diff} log file.
+
+\subsubsection{Diffzero}
+\xx{command}{diffzero}
+
+The \p{diffzero} command zeros the different summary counters used by the
+\p{diff} and \p{diffsummary} commands.
+
+\begin{verbatim}
+Syntax : diffzero = "diffzero"
+Examples: diffzero
+\end{verbatim}
+
+The \p{diffzero} command was added so as to allow regression testing
+shellscripts to zero their differences counters at the start of a run.
+This allows testers to invoke the same regression testing script
+twice in one interactive session without receiving an inflated
+differences summary.
+
+\subsubsection{Eneo}
+\xx{command}{eneo}
+
+The \p{eneo} command takes one filename argument. If the file does
+not exist, no action is taken. If the file does exist, it is deleted.
+In both cases success status is returned. However, if the file exists
+and cannot be deleted, \p{eneo} returns severe status.
+
+\begin{verbatim}
+Syntax : eneo = "eneo" s filename
+Examples: eneo result.out
+\end{verbatim}
+
+The \p{eneo} command was added so as to allow regression testing scripts
+to ensure that existing output files were not present before proceeding
+with a test run. If FunnelWeb were to fail to generate an output file, it
+would be
+extremely undesirable for the old version to be used.
+
+ENEO stands for \b{E}stablish the \b{N}on \b{E}xistence \b{O}f.
+Most operating systems provide a command to delete files. Typically
+these commands are verbs such as \dq{delete}, \dq{remove}, and \dq{kill}.
+As a consequence, the designers of delete commands usually
+consider the command to have failed if it fails to find the file to be
+deleted. However, in my experience, the most common use
+for the delete command
+is to \i{establish the non-existence of} one or more files. Typically, a
+script is starting up and needs to clear the air before getting started.
+If the files are there, they should be deleted; if they are not, then that's
+OK too.\footnote{As far as I know, the \p{eneo} command is original.}
+
+\subsubsection{Execute}
+\label{executecommand}\xx{command}{execute}
+
+The \p{execute} command causes a specified text file to be
+executed as a FunnelWeb shellscript. The first argument is the
+name of the script file.
+The remaining arguments are assigned to the substitution
+variables \p{\$1}, \p{\$2}, $\ldots$, \p{\$9}.
+Substitution variables in the range
+\p{\$1} to \p{\$9} that do not correspond to an argument are set to
+the empty string \p{""}. \p{\$0} is set to the empty string regardless.
+The execute command can be used recursively, allowing shell scripts to
+invoke each other. A file extension default of \dqp{.fws}
+(FunnelWeb Script) applies to script files.
+
+\begin{verbatim}
+Syntax : execute = "execute" s filename {argument_string}
+Examples: execute megatest.fws /usr/users/ross/fwtest !
+ execute sloth
+\end{verbatim}
+
+The first example above will result in the following substitution variable
+assignments.
+
+\begin{verbatim}
+$0 = ""
+$1 = "/usr/users/ross/fwtest"
+$2 = "!"
+$3 = ""
+...
+$9 = ""
+\end{verbatim}
+
+It should be stressed that there are no local variables in the FunnelWeb
+command language; the variables above are globally modified.
+
+The \p{execute} command was added to allow the creation of sub-scripts
+to test FunnelWeb in particular ways.
+
+\subsubsection{Exists}
+\xx{command}{exists}
+
+The \p{exists} command performs no action except to return a status. If the
+file specified in its argument exists
+it returns success status, otherwise it returns severe status.
+
+\begin{verbatim}
+Syntax : exists = "exists" s filename
+Example: exists test6.fw
+\end{verbatim}
+
+This command is useful in regression testing
+for ensuring that
+FunnelWeb has produced a particular output file.
+
+\subsubsection{Fixeols}
+\xx{command}{fixeols}
+
+The \p{fixeols} command takes two filename arguments: an input file and
+an output file. It reads in the input file and writes it to the output file
+changing all the end of line control character
+sequences to the local format. It can also take one filename argument, in
+which case it replaces the target file with its transformation.
+
+\begin{verbatim}
+Syntax : fixeols = "fixeols" s filename [s filename]
+Examples: fixeols imported.hak result.kln
+ fixeols sloth.dat
+\end{verbatim}
+
+The \p{fixeols} command works by parsing the input file into alternating
+runs of
+printable characters (ASCII 20 to ASCII 126) and runs of non-printable
+characters (all the others).
+It then\xx{non-printable}{characters}
+parses each run of non-printable characters from left to right into
+subruns of non-printables not containing the same character twice.
+It then replaces each subrun with a native EOL.\footnote{Note: A native
+EOL can be inserted into a text file in a portable manner
+simply by writing \dqp{\bs{}n} to the text output stream.}
+For example,
+if a native EOL is \p{X}, and \p{ABCD} are non-printable characters, and
+the file to be converted is
+
+\begin{verbatim}
+thisABisABCDanABABexampleABCCCof the conversion.
+\end{verbatim}
+
+then \p{fixeols} would produce
+
+\begin{verbatim}
+thisXisXanXXexampleXXXof the conversion.
+\end{verbatim}
+
+The \p{fixeols} command was devised to solve the problem created sometimes
+when text files are moved from one machine to another
+(\eg{}with the kermit program)
+using a binary transfer mode rather than a text transfer mode.
+If such a transfer is made, and the text file line termination conventions
+differ on the two machines, one can wind up with a set of
+text files with improperly terminated lines. This can cause problems
+on a number of fronts, but in particular affects regression testing
+which relies heavily on exact comparisons between files. The \p{fixeols}
+command provides a solution to this problem by providing a portable way
+to \dq{purify} text files whose end of lines have become incorrect.
+The regression testing scripts all apply \p{fixeols} to their input and
+output files before each test.
+
+\subsubsection{Fw}
+\xx{command}{fw}
+
+The \p{fw} command allows FunnelWeb proper to be invoked from a shell
+script. The syntax is almost identical to the syntax with which FunnelWeb is
+invoked from the operating system.
+
+\begin{verbatim}
+Syntax : fw = "fw" s ordinary_funnelweb_command_line
+Examples: fw sloth +t +d
+ fw -l walrus
+\end{verbatim}
+
+Some important points about this \p{fw} command are:
+
+\begin{itemize}
+\item Options are inherited from the default shell options.
+\item The \p{F} (input file option) must be turned on.
+\item The \p{K}, \p{H}, and \p{X} options must be turned off.
+\item The \p{J} option must be turned off.
+\item The options specified in a \p{fw} command do not affect the default
+shell options.
+\item This command performs no action in the VAX VMS version of FunnelWeb.
+\end{itemize}
+
+\subsubsection{Help}
+\xx{command}{help}
+
+The \p{help} command provides online help from within the FunnelWeb shell.
+It provides access to all of the same messages that the \p{+H} command
+line option does.
+
+\begin{verbatim}
+Syntax : help = "help" [s help_message_name]
+Examples: help
+ help commands
+\end{verbatim}
+
+If no message name is given, the default message is displayed. It contains
+a list of the other help messages and their names. The actual messages
+themselves are not listed here.
+
+\subsubsection{Here}
+\xx{command}{here}
+
+The \p{here} command acts as a target for the \p{skipto} command. When
+the shell interpreter encounters a \p{skipto} command, it ignores all
+the following commands until it encounters a \p{here} command.
+
+\begin{verbatim}
+Syntax : here = "here"
+Example: here
+\end{verbatim}
+
+The \p{skipto}/\p{here} mechanism was created to allow groups of
+regression tests to be skipped during debugging without having to comment
+them out. For more information, see Section~\ref{skiptocommand}.
+
+\subsubsection{Quit}
+\xx{command}{quit}
+
+The \p{quit} command terminates FunnelWeb immediately and returns
+control to the operating system. This applies regardless of the depth
+of the script being executed.
+
+\begin{verbatim}
+Syntax : quit = "quit"
+Example: quit
+\end{verbatim}
+
+\subsubsection{Set}
+\xx{command}{set}
+
+The \p{set} command modifies the default shell options.
+For example, \p{set +t} sets the \p{+t} option for all subsequent
+FunnelWeb runs within the shell until another set command
+sets \p{-t}.
+
+\begin{verbatim}
+Syntax : set = "set" s ordinary_funnelweb_command_line
+Examples: set sloth +t +d
+ set -lwalrus
+\end{verbatim}
+
+The restrictions on the \p{set} command are identical to those on the
+\p{fw} command except that, in addition,
+the \p{+F} option cannot be turned on in the \p{set} command.
+
+The set command is useful for setting option defaults before a long run
+of regression tests. It could also be useful to set default options in
+a FunnelWeb shell kept by a user in a workstation window.
+
+\subsubsection{Show}
+\xx{command}{show}
+
+The \p{show} command displays the current default shell options.
+These options are the options that subsequent \p{fw} commands will
+inherit.
+
+\begin{verbatim}
+Syntax : show = "show"
+Example: show
+\end{verbatim}
+
+\subsubsection{Skipto}
+\label{skiptocommand}\xx{command}{skipto}
+
+The \p{skipto} command causes the shell to ignore all subsequent commands
+until a \p{here} command is encountered.
+
+\begin{verbatim}
+Syntax : skipto = "skipto"
+Examples: skipto
+\end{verbatim}
+
+The \p{skipto}/\p{here} mechanism was created to allow groups of
+regression tests to be skipped during debugging without having to comment
+them out. It is like a cut price \p{goto}.
+For example, supposing that there were eight tests and that
+you had debugged the first five. You might want to skip the first five
+tests so that you can concentrate on the next three. The following
+code shows how this can be done.
+
+\begin{verbatim}
+skipto
+execute test infile1
+execute test infile2
+execute test infile3
+execute test infile4
+execute test infile5
+here
+execute test infile6
+execute test infile7
+execute test infile8
+\end{verbatim}
+
+It should be stressed that FunnelWeb performs full command line processing
+including the dollar substitutions before testing the line to see if
+it is \p{here}. This can lead to non-obvious problems. For example.
+
+\begin{verbatim}
+skipto
+! Test the Parser
+! ---------------
+define X "execute parsertest.fws"
+$X infile1
+$X infile2
+$X infile3
+$X infile4
+$X infile5
+here
+\end{verbatim}
+
+The above looks correct, but, because the \p{define} command isn't executed
+(and \p{\$X} is not defined) the subsequent \p{\$X} lines result in a
+leading blanks error. The problem can be corrected by defining \p{\$X}
+before the \p{skipto} command.
+
+\subsubsection{Status}
+\xx{command}{status}
+
+The \p{status} command takes two forms. In its first form in which
+no arguments are given, it writes out the number of warnings, errors
+and severe errors that 1) were generated by the previous command
+and 2) have been generated during the entire shell invocation.
+In its second form it takes from one to three arguments each of which
+specifies a diagnostic severity and a number. The \p{status} command
+compares each of these numbers with the number of that diagnostic
+generated by the previous command and generates a severe error if
+they differ.
+
+\begin{verbatim}
+Syntax : status = "status" {s ("w"|"e"|"s") num}0..3
+Examples: status
+ status w1 e5 s1
+ status w4
+ status s1 e2
+\end{verbatim}
+
+The \p{status} command was introduced to test the status results of
+commands during their debugging. It is also useful for checking to see that
+the right number of diagnostics have been generated at particular points
+in test scripts.
+
+\subsubsection{Tolerate}
+\xx{command}{tolerate}
+
+The \p{tolerate} command instructs the shell not to abort processing
+of the script if the next command generates one or more warnings, errors,
+or severe errors. For the purposes of this command, a blank line counts
+as a command, so be sure to place the \p{tolerate} command immediately
+above the command about which you wish to be tolerant.
+
+\begin{verbatim}
+Syntax : tolerate = "tolerate"
+Example: tolerate
+\end{verbatim}
+
+The tolerate command was introduced to allow FunnelWeb (\ie{}the
+\p{fw} command) to be tested
+in a script under conditions which would normally cause it to abort the
+script.
+
+\subsubsection{Trace}
+\xx{command}{trace}
+
+The \p{trace} command turns on or off command tracing during script
+execution. By default, tracing is turned off.
+
+\begin{verbatim}
+Syntax : trace = "trace" [s ("on" | "off")]
+Examples: trace on
+ trace off
+\end{verbatim}
+
+The \p{trace} command was introduced to assist in the debugging of
+regression test scripts.
+
+\subsubsection{Write}
+\xx{command}{write}
+
+The \p{write} command accepts a double-quoted argument and writes it followed
+by an EOL to the console (standard output).
+There is no need to double any double quotes
+occurring within the string.
+
+\begin{verbatim}
+Syntax : write = "write" s string
+Examples: write "Now about to start the next test."
+ write "You don't need to " double enclosed double quotes."
+\end{verbatim}
+
+The \p{write} command was added so as to allow regression testing scripts
+to inform the user of their progress.
+
+\subsubsection{Writeu}
+\xx{command}{writeu}
+
+The \p{writeu} command is identical to the \p{write} command except that it
+underlines the text on an additional following output line.
+
+\begin{verbatim}
+Syntax : writeu = "writeu" s string
+Examples: writeu "Test 6"
+\end{verbatim}
+
+\section{Concluding Remarks}
+
+This chapter defines the semantics of the FunnelWeb program. As stated
+at the start of this chapter, this document takes precedence over the
+FunnelWeb program. While the
+definition of FunnelWeb in this chapter is reasonably solid, it is far
+from watertight, and it is hoped that it can be tightened further in
+future versions. All constructive criticism will be gratefully received
+by the author Ross Williams (\p{ross@spam.adelaide.edu.au}).
+
+%==============================================================================%
+% End of Ch3.tex %
+%==============================================================================%
diff --git a/web/funnelAC/userman/u_ch4.tex b/web/funnelAC/userman/u_ch4.tex
new file mode 100644
index 0000000000..82a9be4010
--- /dev/null
+++ b/web/funnelAC/userman/u_ch4.tex
@@ -0,0 +1,468 @@
+%==============================================================================%
+% Start of Ch4.tex %
+%==============================================================================%
+%
+% Copyright
+% ---------
+% Copyright (C) 1992 Ross N. Williams.
+% This file contains a chapter of the FunnelWeb User's Manual.
+% See the main TeX file for this manual for further information.
+%
+%==============================================================================%
+
+\chapter{FunnelWeb Installation}
+\label{chapinstall}\xx{FunnelWeb}{installation}
+
+This chapter describes how to obtain, compile, and install FunnelWeb.
+You will need:
+
+\begin{itemize}
+
+\item FTP access to the internet \i{or} a FunnelWeb distribution kit on disk.
+
+\item A Sun, VMS VAX, Macintosh, or PC \i{or} lots of extra time to port
+FunnelWeb to a new platform.
+
+\item About four megabytes of free disk space. You might be able to
+install it with less, but four megabytes is safe. The distribution kit itself
+is about two and a half megabytes.
+If you are short on space, you can throw away everything after installation
+except the binary executable which will consume about half a megabyte.
+
+\item A C compiler.
+
+\item An acquaintance with the C programming language and the ability to
+compile and link C programs on your machine.
+
+\item Elementary systems programming knowledege for your machine.
+
+\item About an hour.
+
+\end{itemize}
+
+You will \i{not} need any sort of system privileges to install FunnelWeb,
+unless you want the FunnelWeb command \p{fw} to be automatically available
+to everyone on your machine as well as yourself.
+
+\section{Obtaining a Copy of FunnelWeb}
+\xx{FunnelWeb}{obtaining}\xx{ftp}{anonymous}
+
+The simplest way to obtain a copy of FunnelWeb is by anonymous FTP from:
+
+\begin{verbatim}
+ Machine : sirius.itd.adelaide.edu.au [IP=129.127.40.3].
+ Directory : ~pub/funnelweb/ (or a directory of similar name).
+\end{verbatim}
+
+It is not clear at the time of writing whether FunnelWeb will be presented
+as a \dqp{.tar} file, or as a directory tree,
+or both. Just sniff around and use
+your common sense. Two points deserve attention however:
+
+\begin{enumerate}
+
+\item Be sure to use the \i{text} transfer mode whenever you transfer
+raw FunnelWeb files. However, you should use \i{binary} mode for TAR files
+and other conglomerate representations.
+
+\item If you have to transfer the files individually,
+don't lump all the FunnelWeb files into a single directory. Refer to
+the sections that follow for information on the directory tree you should
+create to receive the FunnelWeb files.
+
+\end{enumerate}
+
+If anonymous FTP is not available to you, contact the author
+for up-to-date information on other channels of distribution.
+
+\begin{verbatim}
+ Name: Dr Ross N. Williams
+ Email: ross@spam.adelaide.edu.au
+ Snail: 16 Lerwick Avenue, Hazelwood Park 5066, Australia.
+\end{verbatim}
+
+\section{Establishing The Directory Tree}
+\xx{directory}{tree}
+
+At this stage,
+we will assume that you have somehow obtained a set of files that
+are supposed to be FunnelWeb, and that they are sitting on a disk
+on the machine on which you wish to compile and install
+FunnelWeb.
+
+The first thing you have to do is to make sure that
+the FunnelWeb directory tree has been correctly unpacked. The directory
+tree should look like this.
+
+\begin{verbatim}
+ fwdir - Root FunnelWeb directory.
+ admin - Administrative files.
+ answers - Answers to test suite.
+ hackman - FunnelWeb Hacker's Manual.
+ results - For test results.
+ scripts - Test scripts.
+ sources - Source code.
+ tests - Test suite.
+ userman - FunnelWeb User's Manual.
+\end{verbatim}
+
+The following sections describe the contents of each directory in
+alphabetical order. Check the
+contents to make sure that you have everything. Do not become fussed if
+your configuration is not quite as specified as
+it is very easy for
+installation guides such as this one to go out
+of date as minor last minute changes and updates
+are made to the distribution kit. Check the source from which you obtained
+the kit, and if it is different too, proceed.
+
+\subsection{Admin Directory}
+\xx{admin}{directory}
+
+The \p{admin} directory contains administrative files to do with licensing
+and such. It is also a catch-all directory for files that don't belong
+anywhere else. At the time of writing, it is not clear
+exactly what will be in the \p{admin} directory. Why not take a look?
+
+\subsection{Answers Directory}
+\xx{answers}{directory}
+
+The \p{answers} directory contains the
+\dq{correct answers}\xx{correct}{answers}
+to all the regression testing input files. The regression test scripts
+compare these files to the files generated in the \p{results} directory.
+
+\begin{verbatim}
+an01.lis ... an04.lis
+ex01.lis ... ex16.lis
+ex01.out ... ex10.out
+ex11.tex ... ex16.tex
+generate.lis
+hi01.lis ... hi10.lis
+hi01.out ... hi05.out
+hi06a.out
+hi06b.out
+hi07a.out
+hi07b.out
+hi08.out ... hi10.out
+pr01.lis ... pr10.lis
+sc01.lis ... sc29.lis
+tg01.lis ... tg09.lis
+tg01.out ... tg09.out
+wv01.lis ... wv06.lis
+wv01.tex ... wv06.tex
+\end{verbatim}
+
+\subsection{Hackman Directory}
+\xx{hackman}{directory}
+
+The \p{hackman} directory contains the \p{.tex} files that make up the
+\i{FunnelWeb Hacker's Manual}.
+
+\begin{verbatim}
+h_ch0.tex - Preface, etc.
+h_ch1.tex - Design.
+h_ch2.tex - Implementation.
+h_ch3.tex - Modification.
+h_ch4.tex - Future.
+h_cha.tex - Appendices.
+h_manual.tex - Main TeX file.
+\end{verbatim}
+
+See the comment at the top of \p{h\_manual.tex} file for
+instructions on how to typeset and print the \i{FunnelWeb Hacker's Manual}.
+
+There is no need to read or print the \i{FunnelWeb Hacker's Manual} unless you
+intend to modify FunnelWeb.
+
+\subsection{Results Directory}
+\xx{results}{directory}
+
+The \p{results} directory exists as a target directory for
+the output files generated by FunnelWeb during regression testing.
+This directory is distributed empty and
+should be empty at the start of regression testing.
+However, it is permissible for the \p{results} directory to
+contain files generated
+during a previous test run, as the regression testing scripts
+delete specific unwanted files before each test anyway.
+
+\subsection{Scripts Directory}
+\xx{scripts}{directory}
+
+The \p{scripts} directory stores the FunnelWeb command shell scripts that
+are used to perform regression testing.\xx{regression}{testing}
+
+\begin{verbatim}
+master.fws - The master test script. This is the one you run.
+test_gen.fws - Script to generate certain tricky input files.
+test_l.fws - Test FunnelWeb with +L.
+test_ld.fws - Test FunnelWeb with +L +B...
+test_lo.fws - Test FunnelWeb with +L +O.
+test_lo2.fws - Test FunnelWeb with +L +O (two output files).
+test_lot.fws - Test FunnelWeb with +L +O +T.
+test_lt.fws - Test FunnelWeb with +L +T.
+\end{verbatim}
+
+\subsection{Sources Directory}
+\xx{sources}{directory}
+
+The \p{sources} directory contains \i{all} of the C source files
+required to build a FunnelWeb binary executable. In the following list,
+files given without an extension represent both \p{.c} and \p{.h} files.
+
+\begin{verbatim}
+analyse - The analyser.
+as - Assertions.
+clock - A clock abstraction.
+command - The shell command interpreter.
+data - Shared data structures and global variables.
+dump - Functions to dump internal data structures.
+environ.h - Lightweight machine-dependent, program-independent header.
+help - Module to write out help messages.
+help_gnu - Function to write out the GNU license.
+help_gnu.txt - The GNU license in text form.
+help_gnu.ctx - The GNU license in C code form.
+list - A list abstraction.
+lister - Module to manage the listing file.
+machin - Module to hold machine-dependent, program-dependent stuff.
+main.c - The main() program.
+mapper - Module to read files into memory.
+memory - Memory management.
+misc - Miscellaneous functions.
+option - Command line option processing.
+parser - The parser.
+scanner - The scanner.
+section - A section number abstraction.
+style.h - A machine-independent, program-independent header file.
+table - A table abstraction.
+tangle - The tangler.
+texhead - Module to write out TeX header in documentation files.
+texhead.ctx - The TeX header in C code form.
+texhead.tex - The TeX header in TeX form.
+weave - The weaver.
+writfile - Output abstraction.
+\end{verbatim}
+
+The \dqp{.txt}, and \dqp{.tex} files do not participate in the compilation,
+but are considered part of the source code as they
+were used to generate the \dqp{.ctx} files. The \dqp{.ctx} files
+are included by \p{.c} files of the same name. They do not need to be
+compiled themselves.
+
+\subsection{Tests Directory}
+\xx{tests}{directory}
+
+The \p{tests} directory stores all the input files of the
+regression test suite. These come in two kinds: FunnelWeb input
+files with extensions of \dqp{.fw}, and FunnelWeb include files with
+extensions of \dqp{.fwi}.
+
+\begin{verbatim}
+FunnelWeb Input Files:
+ an01.fw ... an04.fw - Analyser tests.
+ ex01.fw ... ex16.fw - Examples from the tutorial in user manual.
+ generate.fw - Generates a few other tricky input files.
+ hi01.fw ... hi10.fw - Examples from the hints chapter in user manual.
+ pr01.fw ... pr10.fw - Parser tests.
+ sc01_note.fw - A note explaining absence of sc01.fw
+ sc02.fw ... sc29.fw - Scanner tests.
+ tg01.fw ... tg09.fw - Tangler tests.
+ wv01.fw ... wv06.fw - Weaver tests.
+
+FunnelWeb Include Files:
+ ex09a.fwi
+ sc13a.fwi ... sc13f.fwi
+ sc15a.fwi
+ tg08a.fwi
+\end{verbatim}
+
+\subsection{Userman Directory}
+\xx{userman}{directory}
+
+The \p{userman} directory contains the \p{.tex} files that make up the
+\i{FunnelWeb User's Manual}.
+
+\begin{verbatim}
+u_ch0.tex - Preface, etc.
+u_ch1.tex - Tutorial.
+u_ch2.tex - Hints.
+u_ch3.tex - Definition.
+u_ch4.tex - Installation.
+u_ch5.tex - Administration.
+u_cha.tex - Appendices.
+u_manual.tex - Main TeX file.
+\end{verbatim}
+
+See the comment at the top of \p{u\_manual.tex} file for
+instructions on how to typeset and print the \i{FunnelWeb User's Manual}.
+
+\section{Compiling FunnelWeb}
+\xx{compiling}{FunnelWeb}
+
+The FunnelWeb source code is entirely contained within the \p{sources}
+directory. However, some simple
+script files and makefiles can be found in the \p{admin} directory.
+
+FunnelWeb contains some machine-dependent components, so before compiling
+FunnelWeb, you need to specify your machine in the source file \p{environ.h}.
+To do this,
+edit the \p{environ.h} file and set exactly one of the machine name
+\p{\#define}s to \p{1}. For example, on the Sun you should set:
+
+\begin{verbatim}
+#define MAC 0
+#define SUN 1
+#define VMS 0
+#define PC 0
+\end{verbatim}
+
+There should be little difficulty compiling FunnelWeb for any of these
+platforms.
+If the machine on which you are compiling FunnelWeb is not one of the ones
+listed in the \p{environ.h} file, then choose the closest one you can.
+Try the \p{SUN} if you are running a non-Sun Unix.
+If you run into serious difficulties, you will have to
+customize \p{machin.h} and \p{machin.c} for your machine.
+See the comments in these files
+for instructions on how to do this.
+
+Once you have specified a target machine, compile FunnelWeb by pointing
+your C compiler at all the
+\dqp{.c} files in the \p{sources} directory.
+The \dqp{.txt}, and \dqp{.tex} files do not participate in the compilation,
+but appear in the \p{sources} directory because they
+were used to generate the \dqp{.ctx} files. The \dqp{.ctx} files
+are included by \p{.c} files of the same name and do not need to be
+compiled separately.
+Link the results.
+
+The result of all this should be a binary executable called
+\p{fw}, or \p{fw.exe},
+or \p{fw.xxx} where \p{.xxx} is whatever file extension is
+appropriate on the target machine. Clean up the
+\p{sources} directory by deleting all the listing and object files.
+
+\section{Testing FunnelWeb}
+\label{testingfunnelweb}\xx{testing}{FunnelWeb}
+
+Once you have obtained a binary executable, you should test FunnelWeb
+before making it available to users. To do this:
+
+\begin{enumerate}
+
+\item Set the default directory to be the \p{scripts} directory.
+
+\item Copy the FunnelWeb executable into the scripts directory (or
+be able to invoke it from the scripts directory).
+
+\item Edit the script \p{master.fws}. Locate the section called
+\dq{Define Symbol For the Root Test Directory} and define the \p{R}
+symbol to point to the FunnelWeb root directory \p{fwdir}. The examples
+in the comments in the script should make it clear what is required.
+
+\item Invoke FunnelWeb to execute the master test script
+with the command line \p{fw +xmaster}
+
+\end{enumerate}
+
+The \p{master.fws} script should run for a few minutes. If all goes
+well, you will find a differences report on your screen reporting
+zero differences. If this happens, then FunnelWeb has been
+fully tested and is ready to be made available to users. You should
+delete all the files in the \p{results} directory and proceed to the next
+section on installing FunnelWeb for users.
+
+If there were
+one or more differences, you can either give up and contact the author,
+or attempt to fix the code yourself. If you decide to fix the code
+yourself, start
+with the differences log file and follow your nose. Good luck!
+
+\section{Installing FunnelWeb}
+\xx{installing}{FunnelWeb}
+
+At this stage you should have a \p{fwdir} directory tree somewhere in your
+file system. Its contents should be almost identical to the directory
+contents specified earlier in this chapter except there should now be
+an additional binary executable file sitting in the \p{scripts}
+directory.
+
+To make FunnelWeb available to users, you should:
+
+\begin{enumerate}
+
+\item Make the entire directory tree readable to all users.
+
+\item Move the binary executable from the scripts directory to the
+\p{admin} directory \i{or} copy it to somewhere convenient such as
+a \p{/bin} directory.
+
+\item Set up a symbol, path, or command of some kind by the name of \p{fw}
+that \dq{points} to the binary executable. If possible, set this up so
+that the \p{fw} symbol is available to all users. Alternatively,
+you can inform interested users of how they can add a command to their
+\p{login} command file to make the command available to them.
+
+\end{enumerate}
+
+If you are short of disk space or have a system that is stressed in some other
+way, it may be of assistance to you to know that
+FunnelWeb has been constructed so that its
+binary executable\xx{FunnelWeb}{executable} is
+\i{totally self contained}. The binary executable does not rely on any
+other files to operate. Nor does it care about its position in the file system.
+In fact, all that is really required to use FunnelWeb is the binary
+executable and the \i{FunnelWeb User's Manual}. Thus, if you are short
+of disk space, you can move the binary executable to your \dqp{/bin}
+directory and delete the entire FunnelWeb tree. However, making the
+tree available to users is encouraged because:
+
+\begin{itemize}
+
+\item It allows users to copy the tree and install it on another machine
+without bothering you.
+
+\item It allows users access to the \TeX{} code for the \i{FunnelWeb
+User's Manual} and the \i{FunnelWeb Hacker's Manual}.
+
+\item It allows users access to the regression test suite. This may not
+seem important, but it could be very convenient for the user as the
+\p{ex*} and \p{hi*} files of the regression test suite contain most
+of the examples from the \i{FunnelWeb User's Manual}. By making them available
+you will save users the trouble of typing them in.
+
+\end{itemize}
+
+Finally, you should fill in and send off a FunnelWeb registration form.
+This allows me to get a handle on the size and needs of the user base, and you
+to be kept informed of new FunnelWeb releases (optional).
+See Section~\ref{registration} for more information.
+
+\section{Printing Manuals}
+\xx{printing}{manuals}
+
+FunnelWeb comes with two manuals, a \i{FunnelWeb User's Manual} and a
+\i{FunnelWeb Hacker's Manual}. Instructions for how to
+typeset and print these manuals appear at the top of
+the main \TeX{} files for these manuals
+\p{u\_manual.tex} and \p{h\_manual.tex}.
+
+There is no need to print the \i{FunnelWeb Hacker's Manual} unless you
+intend to modify FunnelWeb. However, you should make a few copies of the
+\i{FunnelWeb User's Manual} available for users, or at least
+let them know where the \TeX{} source for the \i{FunnelWeb User's Manual}
+is kept so that they can typeset and print it themselves.
+
+\section{Installation Problems?}
+\xx{problems}{installation}
+
+If you run into any problems installing FunnelWeb, please write a short
+report describing the problem and mail it to the author Ross Williams
+(\p{ross@spam.adelaide.edu.au}). I may not be able to help you with it
+immediately, but I certainly want to know that a problem exists so that
+it can be corrected in future releases of FunnelWeb.
+
+%==============================================================================%
+% End of Ch4.tex %
+%==============================================================================%
diff --git a/web/funnelAC/userman/u_ch5.tex b/web/funnelAC/userman/u_ch5.tex
new file mode 100644
index 0000000000..ab676074f8
--- /dev/null
+++ b/web/funnelAC/userman/u_ch5.tex
@@ -0,0 +1,387 @@
+%==============================================================================%
+% Start of Ch5.tex %
+%==============================================================================%
+%
+% Copyright
+% ---------
+% Copyright (C) 1992 Ross N. Williams.
+% This file contains a chapter of the FunnelWeb User's Manual.
+% See the main TeX file for this manual for further information.
+%
+%==============================================================================%
+
+\chapter{FunnelWeb Administration}
+\label{chapadministration}\xx{FunnelWeb}{administration}
+
+\section{Introduction}
+
+Whether a computer program is useful depends not just on the functionality
+provided by the program, but also on the totality of the culture
+and services surrounding it such as license costs, the
+quality of
+documentation, presence of a standard and so on.
+This chapter addresses these issues from a user perspective.
+
+\section{The User's Commitment To FunnelWeb}
+\xx{commitment}{FunnelWeb}
+
+One of the problems that might prevent potential users from using FunnelWeb
+is the level of commitment that it requires. As soon as the user starts
+creating FunnelWeb \p{.fw} files, the user becomes dependent on the
+FunnelWeb program, as the files so created will become unmanageable if
+the FunnelWeb program were to become unavailable for some reason.
+There are a number of ways in which computer programs can become unavailable,
+including operating system upgrades, copyright problems, inability to
+fix bugs, or just the inability of the program to be ported to a new target
+platform.
+
+The fact
+is that FunnelWeb defines an input language and that currently there is
+only one implementation of the language. Users will only write programs
+using that language if they feel comfortable about the availability of its
+implementation.
+
+I have been critically
+aware of these issues throughout the development of FunnelWeb and have
+taken every possible step to make FunnelWeb a solid base onto which to
+build programs. The following points describe the actions I have taken.
+
+\narrowthing{GNU license:}{FunnelWeb's C source code
+has been released under GNU General Public
+License Version 2. This means that the source code to FunnelWeb will always
+be available to anyone who wants it. The FunnelWeb program can never be
+taken away from you.}
+
+\narrowthing{Portability:}{FunnelWeb has been designed and written to be
+extremely portable. First, all FunnelWeb really does is read and write
+text files. This makes it easy to make portable. Second,
+FunnelWeb is written in the C programming language\paper{ANSI}
+with portability as
+a major design goal. Third, FunnelWeb has already been ported to four
+popular platforms: SunOS, VAX VMS, PC, and Macintosh and it should not prove
+hard to move it to others. Fourth, FunnelWeb comes with a huge automated
+regression test suite. This makes it easy to pinpoint problems when it
+is moved to a new platform. Portability is important because, even if \i{you}
+are not using FunnelWeb on some funny platform, you may want to send
+a computer program written using FunnelWeb to someone who does.}
+
+\narrowthing{Quality:}{The FunnelWeb source code is high quality code.
+Although it has not been formally developed under any particular coding
+standard, it is well designed and documented. Design decisions have
+not been taken lightly.}
+
+\narrowthing{Documentation:}{FunnelWeb is well documented by this manual
+and by the \i{FunnelWeb Hacker's Manual}. This is important because it
+means that if you want to send someone a program written using FunnelWeb,
+you can simply point them to this manual rather than having to explain
+it all yourself. It is also comforting for managers who are controlling
+source code to know that the format in which the source code is written
+is well-documented.}
+
+\narrowthing{Standardization:}{Users who create source files using FunnelWeb
+are not only committing to the FunnelWeb program; they are also investing
+in the FunnelWeb language. If FunnelWeb's language changes radically for
+some reason, then this investment by users will be undermined. To protect
+this investment, I intend to maintain an \dq{official} version of FunnelWeb
+whose language will not change radically, at least not
+in a non backward compatible manner.}
+
+It is my hope that the combination of these factors will alleviate any
+fears that users may have about committing their source files
+to FunnelWeb.
+
+\section{Documentation}
+\xx{FunnelWeb}{documentation}
+
+The following FunnelWeb documentation is available:
+
+\begin{verbatim}
+ "FunnelWeb User's Manual": Tutorial, Hints, Reference Manual.
+ "FunnelWeb Hacker's Manual": Notes on Design and Implementation.
+\end{verbatim}
+
+Everyone involved with FunnelWeb should read the \i{FunnelWeb User's Manual}.
+It contains everything you need to know about how to use FunnelWeb. In fact,
+you are reading it now!
+
+The \i{FunnelWeb Hacker's Manual}
+is for those who want to install, modify, fix,
+fiddle with, and generally hack the FunnelWeb C source code.
+
+Both of these manuals are shipped with the FunnelWeb distribution
+kit, and should be available on your machine in the form of LaTeX text
+files. If you cannot find them, you can obtain them from the
+FunnelWeb FTP archive (see Section~\ref{ftparchive}).
+
+\section{Registration}
+\label{registration}\xx{FunnelWeb}{registration}
+
+If you install or use FunnelWeb, please register by filling in and
+returning the registration form in \figregform{}.
+Feel free to expand the form if there is not enough room.
+
+
+\begin{figure}[htbp]
+\begin{verbatim}
+ +----------------------FunnelWeb Registration Form----------------------+
+ | 1. Date: |
+ | |
+ | 2. Title and name: |
+ | |
+ | 3. Internet email address: |
+ | |
+ | 4. Snail mail address: |
+ | |
+ | 5. Work phone number (country,area,number): |
+ | |
+ | 6. Which category of FunnelWeb user best describes you? |
+ | Latent - Installed FunnelWeb, but don't intend to use it. |
+ | Beginner - Haven't used FunnelWeb much yet; have an open mind. |
+ | Casual - Use FunnelWeb occasionally. |
+ | Convert - Use FunnelWeb to do most programming. |
+ | Fanatic - FunnelWeb has become a way of life. |
+ | |
+ | 7. What changes or new features would you like to see in FunnelWeb? |
+ | |
+ | |
+ | |
+ | |
+ | |
+ | |
+ | 8. Do you want to be kept informed of new FunnelWeb developments? |
+ | |
+ +-----------------------------------------------------------------------+
+\end{verbatim}
+\mylabel{\figregform{}: The FunnelWeb registration form.}{%
+%
+To register as a FunnelWeb user, please fill in this form and email it to
+\p{ross@spam.adelaide.edu.au}, or snail mail it to
+Ross Williams, 16 Lerwick Avenue, Hazelwood Park 5066, Australia.
+You may wish to make a contribution when you register.
+See Section~\ref{support} for more information.
+%
+}
+\end{figure}
+
+Email the form to \p{ross@spam.adelaide.edu.au}, or snail mail it to
+Ross Williams, 16 Lerwick Avenue, Hazelwood Park 5066, Australia.
+You may wish to make a contribution when you register.
+See Section~\ref{support} for more information.
+
+\section{Support}
+\xx{FunnelWeb}{support}\label{support}
+
+FunnelWeb is released \dq{as is} under a GNU license, and
+no formal support is available.
+You have the right to make changes to FunnelWeb
+and to use the modified versions created by random programmers.
+However, this is discouraged (see Section~\ref{modification}).
+
+In fact the support that is most needed is your financial
+support for the
+FunnelWeb developers! It has taken \i{months} of full-time \i{unpaid}
+work to bring FunnelWeb to you in its current form.
+I don't want to inconvenience users who install
+FunnelWeb, play with it, and then hardly ever use it.
+If you are in this category,
+please register, but don't bother contributing. However, if you find that
+FunnelWeb has become a useful programming tool, a
+contribution of some positive multiple of US\$50 would be appreciated.
+
+To make a contribution, send payment with a completed registration form
+(see Section~\ref{registration}) to:
+
+\begin{verbatim}
+ Renaissance Software Pty Ltd
+ Email: ross@spam.adelaide.edu.au
+ Snail: 16 Lerwick Avenue, Hazelwood Park 5066, Australia.
+\end{verbatim}
+
+Payment can be by personal or bank cheque to any bank in the world or by
+Visa or Mastercard. Please give the card name, number, expiry date, and
+the amount to be paid in US dollars. All contributions will be appreciated
+and will encourage further FunnelWeb development. However, no undertaking
+is made whatsoever about how the money will be used.
+
+\section{Copyright}
+\xx{copyright}{FunnelWeb}\xx{FunnelWeb}{license}\xx{GNU}{license}%
+\label{copyright}
+
+The FunnelWeb program is Copyright $\copyright$ 1992 Ross Williams.
+
+However, FunnelWeb has been released by the author and copyright owner Ross
+Williams (\p{ross@spam.adelaide.edu.au}) under Version 2 of the GNU General
+Public
+License published by the Free Software Foundation. Here are some ways
+that you can obtain a copy of this license.
+
+\begin{itemize}
+
+\item The license appears as an appendix in the \i{FunnelWeb Hacker's
+Manual}.
+
+\item If you have a working version of FunnelWeb, invoke it with
+\p{fw +hlicense +jlicense.txt}.
+
+\item Look in the \p{help} module of the FunnelWeb source code.
+
+\item FTP the license from \p{prep.ai.mit.edu} in \p{/pub/gnu/COPYING-2}.
+
+\item Write to the Free Software
+Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+\end{itemize}
+
+The license allows you to
+redistribute FunnelWeb and/or modify it under certain conditions.
+The license does not cover the \i{FunnelWeb User's Manual} and
+\i{FunnelWeb Hacker's Manual} which are distributed under a simpler
+license that prohibits changes.
+
+Note: FunnelWeb is distributed WITHOUT ANY WARRANTY; without even the
+implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+\section{Nowarranty}
+\x{warranty}
+
+Users of FunnelWeb should be aware that FunnelWeb comes with no
+warranty. Here is an extract from the GNU General Public License Version 2,
+under which
+FunnelWeb is distributed. For more information see Section~\ref{copyright}.
+
+\begin{verbatim}
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+ FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+ OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+ PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+ OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+ TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+ PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+ REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+ WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+ REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+ INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+ OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+ TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+ YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+ PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGES.
+\end{verbatim}
+
+\section{Distribution}
+\xx{FunnelWeb}{Distribution}
+
+Users of FunnelWeb should be aware that they can distribute the program
+freely.
+The following is an extract from the GNU General Public License Version 2,
+under which FunnelWeb is distributed.
+
+\begin{verbatim}
+ 1. You may copy and distribute verbatim copies of the Program's
+ source code as you receive it, in any medium, provided that you
+ conspicuously and appropriately publish on each copy an appropriate
+ copyright notice and disclaimer of warranty; keep intact all the
+ notices that refer to this License and to the absence of any warranty;
+ and give any other recipients of the Program a copy of this License
+ along with the Program.
+
+ You may charge a fee for the physical act of transferring a copy, and
+ you may at your option offer warranty protection in exchange for a fee.
+\end{verbatim}
+
+The license also allows you other freedoms.
+For more information see Section~\ref{copyright}.
+
+\section{Modification}
+\label{modification}
+
+FunnelWeb is distributed under a GNU license, and you are free to modify the
+source code and distribute modified copies (see Section~\ref{copyright}).
+However, there are good reasons why you should avoid doing this.
+
+\begin{enumerate}
+
+\item If you distribute modified versions of FunnelWeb, you run the risk of
+creating a version that will diverge from the \dq{official} version of
+FunnelWeb that I intend to maintain.
+
+\item If you release a version of FunnelWeb with a changed input language,
+users of your modified version will create source files that will no
+longer work on other versions of FunnelWeb. The result would be chaos.
+
+\end{enumerate}
+
+For these reasons I request that you do not distribute modified versions of
+FunnelWeb, particularly versions with a modified language. However, if you must
+distribute a version with a modified language, \i{please change its name}
+(\ie{}from \dq{FunnelWeb} to something else). Please also allocate a new
+file extension
+to replace \dqp{.fw} as the extension for source files written in the modified
+language.
+
+For more information, refer to the \i{FunnelWeb Hacker's Manual}.
+
+\section{Versions}
+\xx{FunnelWeb}{versions}
+
+FunnelWeb was created in 1986 and was used extensively by Ross Williams
+(\p{ross@spam.adelaide.edu.au}) for three years. However,
+Version~1.0 was written
+in Ada and was not very portable (it was fairly VAX/VMS specific).
+David Hulse
+(\p{dave@cs.adelaide.edu.au}) took the first step towards a
+release by translating
+the Ada code into C. Ross Williams then extensively reworked the C code, making
+it robust and portable, adding new features, and polishing it to its
+current form.
+
+\begin{verbatim}
+ Vers Lang Created Released Author Copyright Licensing
+ ---- ---- ------- -------- -------------- ------------- ---------
+ V1.0 Ada 1986 Never Ross Williams Ross Williams
+ V2.0 C 1989 Never David Hulse Public domain No restriction.
+ V3.0 C 1992 May-1992 Ross Williams Ross Williams GNU release.
+\end{verbatim}
+
+This manual was released for:
+
+\begin{verbatim}
+ * FunnelWeb V3.0.
+ * User's Manual V1.0.
+ * Hacker's Manual V1.0.
+ * TeX Definitions V1.0.
+\end{verbatim}
+
+\section{FTP Archive and Author}
+\label{ftparchive}%
+\xx{author}{contacting}\xx{ftp}{archive}\xx{FunnelWeb}{archive}
+
+The FunnelWeb FTP archive is:
+
+\begin{verbatim}
+ Machine : sirius.itd.adelaide.edu.au [IP=129.127.40.3].
+ Directory : ~pub/funnelweb/ (or a directory of similar name).
+\end{verbatim}
+
+The author of FunnelWeb and this manual is:
+
+\begin{verbatim}
+ Name: Dr Ross N. Williams
+ Email: ross@spam.adelaide.edu.au
+ Snail: 16 Lerwick Avenue, Hazelwood Park 5066, Australia.
+\end{verbatim}
+
+I intend to maintain an \dq{official} version of FunnelWeb which I will
+release under GNU license from time to time. I am happy to receive
+constructive criticism
+about FunnelWeb and its documentation.
+
+I will always be happy to receive mail about FunnelWeb, but cannot
+guarantee that I will be able to reply to it immediately.
+
+%==============================================================================%
+% End of Ch5.tex %
+%==============================================================================%
diff --git a/web/funnelAC/userman/u_cha.tex b/web/funnelAC/userman/u_cha.tex
new file mode 100644
index 0000000000..f1ddd2b776
--- /dev/null
+++ b/web/funnelAC/userman/u_cha.tex
@@ -0,0 +1,228 @@
+%==============================================================================%
+% Start of Cha.tex %
+%==============================================================================%
+%
+% Copyright
+% ---------
+% Copyright (C) 1992 Ross N. Williams.
+% This file contains a chapter of the FunnelWeb User's Manual.
+% See the main TeX file for this manual for further information.
+%
+%==============================================================================%
+
+\appendix
+
+%==============================================================================
+
+\chapter{Glossary}
+\x{glossary}
+
+\gloss{Analyser} A component of the FunnelWeb program
+that checks the macro table created by the parser for errors.
+For example, the analyser checks to see if any macro without a \p{@Z} has
+not been called.
+
+\gloss{Argument} A string delimited by blanks appearing on the FunnelWeb
+command line. Arguments are used to control options.
+
+\gloss{Directive} A FunnelWeb special sequence or
+cooperating group of special sequences that do not form part of
+a macro definition. A directive can take the form of a pragma.
+
+\gloss{Documentation} Descriptive text.
+
+\gloss{Documentation file} An output file, produced by the Weave
+component of FunnelWeb, that
+contains typesetter commands. When fed into the appropriate typesetter
+program, the result is a typeset image of the input file.
+
+\gloss{Free text} The text in an input file that remains
+if one were to remove macro definitions and directives.
+
+\gloss{FunnelWeb} This word has a number of different meanings all
+pertaining to the FunnelWeb system of programming. 1) The
+entire system of programming as in \dq{Maybe FunnelWeb can help.}
+2) The computer program that implements the
+system as in \dq{Run it through FunnelWeb and see what comes out.}
+3) The language implemented by the FunnelWeb program as in \dq{I wrote the
+program in FunnelWeb.} or \dq{I wrote the program in Ada using FunnelWeb.}.
+
+\gloss{FunnelWeb file} A file whose contents are written in the FunnelWeb
+language.
+
+\gloss{FunnelWeb language} The language in which FunnelWeb input files are
+written.
+
+\gloss{FunnelWeb proper} Usually, when FunnelWeb is invoked, it processes
+a single input file and then terminates. However, it also has a command
+language mode in which it is possible to invoke \dq{FunnelWeb} many times.
+This leads to confusion between \dq{FunnelWeb} the outer program and
+\dq{FunnelWeb} the inner program. To avoid this confusion, the inner
+FunnelWeb is sometimes referred to as \dq{FunnelWeb proper}.
+
+\gloss{FW} An abbreviation for \dq{FunnelWeb} that is
+used wherever appropriate.
+
+\gloss{Include file} A file read in by FunnelWeb as the result of an
+include pragma (\p{@i filename}).
+
+\gloss{Input file} Any file read in by FunnelWeb. The phrase
+\dq{the input file} refers to the root input file
+(specified using the \p{+F} option).
+
+\gloss{Journal file} An output file containing a copy of the output sent to
+the user's console during an invocation of FunnelWeb. In other systems,
+this file is sometimes called a \dq{log file}.
+
+\gloss{Listing file} An output file summarizing the result of processing
+an input file.
+
+\gloss{Macro} A binding of a name to a string.
+
+\gloss{Macro definition} A construct appearing in a FunnelWeb file that
+binds a name to a text string.
+A FunnelWeb file consists of a series of macro definitions surrounded by
+documentary text.
+
+\gloss{Mapper} A component of the FunnelWeb program
+that reads in the input file and creates a copy of it in memory.
+
+\gloss{Option} An parameter internal to the FunnelWeb program which can be
+controlled by command line arguments or pragmas.
+
+\gloss{Output file} Any file written by FunnelWeb. This includes
+listing, journal, product, and documentation files. (Warning: During most
+of FunnelWeb's development the term \dq{output file} was also used to
+refer to what are now called \dq{product files}. This turned out to be
+extremely confusing and so the term \dq{product file} was invented to
+distinguish the generic from the specific.
+However, as this was a late modification,
+you may find some occurrences of the old
+use of \dq{output file}.).
+
+\gloss{Parser} A component of the FunnelWeb program
+that processes the token list generated by the scanner and produces a
+macro table and a document list. The parser mainly
+analyses the input file at the syntactic level, but also does some lightweight
+semantic checking too.
+
+\gloss{Pragma} Single-line directives that appears in
+FunnelWeb files. Pragmas control everything from maximum input line length
+to typesetter dependence. A pragma line starts with \dqp{@p}.
+
+\gloss{Printed documentation} Sheets of paper
+resulting from actually typesetting and printing a documentation file.
+
+\gloss{Product file} An output file, generated by the Tangle component of
+FunnelWeb, that contains the expansion of the macros in the input
+file. Note: Other names considered for this were:
+generated file, expanded file, result file, program file, and tangle file.
+
+\gloss{Scanner} A component of the FunnelWeb program
+that scans a copy of the input file in memory and generates a line list
+and a token list to be fed to the parser. The scanner processes the input
+at the lexical level.
+
+\gloss{Script} A file containing FunnelWeb shell commands.
+
+\gloss{Shell} A command language interpreter built into the FunnelWeb
+program. The interpreter allows the user to invoke FunnelWeb proper
+many times during a single invocation of the FunnelWeb program.
+
+\gloss{Special character} A distinguished character
+in a FunnelWeb input file that introduces a special sequence.
+By default the special
+character is \dqp{@}. However, it can be changed using the \dqp{@=} special
+sequence.
+
+\gloss{Special sequence} A special sequence is a construct introduced by the
+special character. Special sequences are used to define a structure in a
+FunnelWeb input file that exists at a higher level to the surrounding text.
+A FunnelWeb input file may be considered to be a sequence of text and
+special sequences.
+
+\gloss{Tangle} This is the name for the component of FunnelWeb that
+generates one or more product files containing the expansion of macros
+in the input file.
+
+\gloss{Typesetting directive} A FunnelWeb directive whose
+sole effect is to modify the way in which the input file is represented
+in the documentation file.
+
+\gloss{Weave} This is the name for the component of FunnelWeb that
+generates a documentation file containing typesetting commands representing
+the input file.
+
+%==============================================================================
+
+\chapter{References}
+\x{references}
+
+\paper{ANSI} Australian Standard AS~3955-1991, \dq{Programming Languages --- C},
+(ISBN: 0-7262-6970-0), 12~July~1991. Identical to:
+International Standard ISO/IEC 9899:
+1990 Programming Languages --- C.\checked{}
+
+\paper{ANZE} \dq{Australia, New Zealand Encyclopedia},
+Entry: \dq{Funnel-web spiders}, Vol~7, pp.~564--565, Bay Books,
+Sydney, (ISBN: 85835--127--7), 1975.\checked{}
+
+
+\paper{BSI82} British Standards Institute, \dq{Specification for
+Computer Programming Language Pascal}, Publication BS6192:1982,
+British Standards Institute, P.O. Box 372, Milton Keynes, MK146LO,
+1982.\checked{}
+
+\paper{Gries81} Gries~D., \dq{The Science of Programming},
+Springer-Verlag, (ISBN: 0-387-90641-X), 1981.
+
+\paper{Humphries91} Humphries~B, \dq{Neglected Poems and Other Creatures},
+Angus and Robertson, Sydney, (ISBN: 0-207-17212-9), 1991.\checked{}
+
+\paper{Kernighan88} Kernighan~B.W., Ritchie~D.M., \dq{The~C Programming
+Language}, (second edition,\dq{ANSI~C}), Prentice Hall,
+(ISBN: 0-13-110362-8), 1988.\checked{}
+
+\paper{Knuth83} Knuth~D.E., \dq{The WEB System of Structured
+Documentation}, (Web User Manual, Version~2.5, November, 1983),
+Stanford University, 1983.
+
+\paper{Knuth84} Knuth~D.E., \dq{The \TeX{}book}, Addison-Wesley,
+(ISBN: 0-201-13448-9), 1984.
+
+\paper{Knuth84} Knuth~D.E., \dq{Literate Programming}, \i{The Computer
+Journal}, Vol.~27, No.~2, pp.~97-111, 1984.\checked{Reference copied from
+SIGPLAN 26(1) p.16} Note: The author of this manual has not yet obtained
+this paper.
+
+\paper{Lamport86} Lamport~L., \dq{\LaTeX{}: A Document Preparation System},
+Addison-Wesley, (ISBN: 0-201-15790-X),
+1986.\checked{}
+
+\paper{Rosovsky90} Rosovsky~H., \dq{The University: An Owner's Manual},
+W.W.Norton \& Company, Inc., (ISBN: 0-393-02782-1), 1990.\checked{}
+
+\paper{Smith91} Smith~L.M.C., \dq{An Annotated Bibliography
+of Literate Programming}, ACM SIGPLAN Notices, Vol.~26, No.~1,
+January 1991.\checked{}
+
+\paper{Strunk79} Strunk~W., White~E.B., \dq{The Elements of
+Style}, Third Edition, MacMillan Publishing Company, New York,
+(ISBN: 0-02-418200-1),
+1979.\checked{}
+
+\paper{USDOD83} \dq{The Programming Language Ada Reference Manual},
+American National Standards Institute Inc,
+ANSI/MIL-STD-1815A-1983, 1983.\checked{}
+
+%==============================================================================
+
+\addcontentsline{toc}{chapter}{Index}
+\def\indexentry#1#2{\item #1~#2}
+\begin{theindex}
+\input u_manual.sin
+\end{theindex}
+
+%==============================================================================%
+% End of Cha.tex %
+%==============================================================================%
diff --git a/web/funnelAC/userman/u_manual.aux b/web/funnelAC/userman/u_manual.aux
new file mode 100644
index 0000000000..ca824ce14d
--- /dev/null
+++ b/web/funnelAC/userman/u_manual.aux
@@ -0,0 +1,202 @@
+\relax
+\@writefile{toc}{\string\contentsline\space {chapter}{Preface}{9}}
+\@writefile{toc}{\string\contentsline\space {chapter}{Acknowledgements}{11}}
+\@writefile{toc}{\string\contentsline\space {chapter}{Presentation Notes}{13}}
+\@writefile{toc}{\string\contentsline\space {chapter}{\string\numberline\space {1}A Tutorial Introduction}{15}}
+\@writefile{lof}{\string\addvspace\space {10\p@ }}
+\@writefile{lot}{\string\addvspace\space {10\p@ }}
+\newlabel{chapintroduction}{{1}{15}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {1.1}What is Literate Programming?}{15}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {1.2}What is FunnelWeb?}{18}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {1.3}The Name FunnelWeb}{19}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {1.4}A FunnelWeb Tutorial}{19}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {1.5}A Hello World Document}{20}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {1.6}Macro Facilities}{22}}
+\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {1.6.1}Simple Macros}{22}}
+\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {1.6.2}Number of Times Called}{23}}
+\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {1.6.3}Indentation}{25}}
+\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {1.6.4}Additive Macros}{26}}
+\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {1.6.5}Parameterized Macros}{28}}
+\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {1.6.6}Macro Expansion}{30}}
+\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {1.6.7}Include Files}{30}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {1.7}Typesetting Facilities}{32}}
+\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {1.7.1}Overview}{32}}
+\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {1.7.2}Typesetter Independence}{34}}
+\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {1.7.3}Hierarchical Structure}{34}}
+\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {1.7.4}Understanding the Printed Documentation}{35}}
+\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {1.7.5}Literals and Emphasis}{37}}
+\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {1.7.6}Adding a Header Page}{37}}
+\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {1.7.7}Comments}{37}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {1.8}A Complete Example}{38}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {1.9}Summary}{39}}
+\@writefile{toc}{\string\contentsline\space {chapter}{\string\numberline\space {2}FunnelWeb Hints}{41}}
+\@writefile{lof}{\string\addvspace\space {10\p@ }}
+\@writefile{lot}{\string\addvspace\space {10\p@ }}
+\newlabel{chapadvanced}{{2}{41}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {2.1}Macro Names}{41}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {2.2}Quick Names}{42}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {2.3}FunnelWeb the Martinet}{42}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {2.4}Fiddling With End of Lines}{43}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {2.5}Fudging Conditionals}{44}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {2.6}Changing the Strength of Headings}{46}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {2.7}Efficiency Notes}{47}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {2.8}Interactive Mode}{47}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {2.9}Setting Up Default Options}{49}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {2.10}FunnelWeb and Make}{49}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {2.11}The Dangers of FunnelWeb}{50}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {2.12}Wholistic Debugging}{53}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {2.13}Examples of FunnelWeb Applications}{53}}
+\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {2.13.1}Analyzing the Monster Postscript Header File}{54}}
+\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {2.13.2}Making Ada ADTs more A}{55}}
+\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {2.13.3}Multiple Language Systems}{55}}
+\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {2.13.4}The Case of the Small Function}{56}}
+\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {2.13.5}When Comments are Bad}{57}}
+\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {2.13.6}Documents That Share Text}{58}}
+\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {2.13.7}Generics}{59}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {2.14}Summary}{62}}
+\@writefile{toc}{\string\contentsline\space {chapter}{\string\numberline\space {3}FunnelWeb Definition}{63}}
+\@writefile{lof}{\string\addvspace\space {10\p@ }}
+\@writefile{lot}{\string\addvspace\space {10\p@ }}
+\newlabel{chapdefinition}{{3}{63}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {3.1}Introduction}{63}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {3.2}Notation}{63}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {3.3}Terminology}{63}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {3.4}An Architectural Overview}{64}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {3.5}Diagnostics}{65}}
+\newlabel{diagnostics}{{3.5}{65}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {3.6}Typesetter Independence}{65}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {3.7}Command Line Interface}{66}}
+\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {3.7.1}Invoking FunnelWeb}{66}}
+\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {3.7.2}Command Line Arguments}{67}}
+\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {3.7.3}Options}{68}}
+\newlabel{commandlineoptions}{{3.7.3}{68}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {3.8}File Name Inheritance}{70}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {3.9}FunnelWeb Startup}{70}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {3.10}Scanner}{71}}
+\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {3.10.1}Basic Input File Processing}{71}}
+\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {3.10.2}Special Sequences}{72}}
+\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {3.10.3}Setting the Special Character}{74}}
+\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {3.10.4}Inserting the Special Character into the Text}{74}}
+\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {3.10.5}Inserting Arbitrary Characters into the Text}{74}}
+\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {3.10.6}Comments}{75}}
+\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {3.10.7}Quick Names}{76}}
+\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {3.10.8}Inserting End of Line Markers}{76}}
+\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {3.10.9}Suppressing End of Line Markers}{77}}
+\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {3.10.10}Include Files}{77}}
+\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {3.10.11}Pragmas}{78}}
+\@writefile{toc}{\string\contentsline\space {subsubsection}{\string\numberline\space {3.10.11.1}Indentation}{78}}
+\newlabel{indentationpragma}{{3.10.11.1}{78}}
+\@writefile{toc}{\string\contentsline\space {subsubsection}{\string\numberline\space {3.10.11.2}Maximum Input Line Length}{79}}
+\newlabel{millpragma}{{3.10.11.2}{79}}
+\@writefile{toc}{\string\contentsline\space {subsubsection}{\string\numberline\space {3.10.11.3}Maximum Output File Line Length}{79}}
+\newlabel{mollpragma}{{3.10.11.3}{79}}
+\@writefile{toc}{\string\contentsline\space {subsubsection}{\string\numberline\space {3.10.11.4}Typesetter}{80}}
+\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {3.10.12}Freestanding Typesetter Directives}{81}}
+\@writefile{toc}{\string\contentsline\space {subsubsection}{\string\numberline\space {3.10.12.1}New Page}{81}}
+\@writefile{toc}{\string\contentsline\space {subsubsection}{\string\numberline\space {3.10.12.2}Table of Contents}{81}}
+\@writefile{toc}{\string\contentsline\space {subsubsection}{\string\numberline\space {3.10.12.3}Vertical Skip}{81}}
+\@writefile{toc}{\string\contentsline\space {subsubsection}{\string\numberline\space {3.10.12.4}Title}{82}}
+\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {3.10.13}Scanner/Parser Interface}{82}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {3.11}Parser}{82}}
+\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {3.11.1}High Level Structure}{82}}
+\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {3.11.2}Free Text}{83}}
+\newlabel{typesetterpragma}{{3.11.2}{83}}
+\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {3.11.3}Typesetter Directives}{83}}
+\@writefile{toc}{\string\contentsline\space {subsubsection}{\string\numberline\space {3.11.3.1}Section}{83}}
+\@writefile{toc}{\string\contentsline\space {subsubsection}{\string\numberline\space {3.11.3.2}Literal Directive}{84}}
+\@writefile{toc}{\string\contentsline\space {subsubsection}{\string\numberline\space {3.11.3.3}Emphasis Directive}{85}}
+\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {3.11.4}Macros}{85}}
+\@writefile{toc}{\string\contentsline\space {subsubsection}{\string\numberline\space {3.11.4.1}Names}{86}}
+\@writefile{toc}{\string\contentsline\space {subsubsection}{\string\numberline\space {3.11.4.2}Formal Parameter Lists}{86}}
+\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {3.11.5}Expressions}{86}}
+\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {3.11.6}Macro Calls}{86}}
+\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {3.11.7}Formal Parameters}{87}}
+\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {3.11.8}Macros are Static}{87}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {3.12}Analyser}{88}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {3.13}Tangle}{88}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {3.14}Weave}{89}}
+\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {3.14.1}Target Typesetter}{89}}
+\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {3.14.2}Cross Reference Numbering}{89}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {3.15}FunnelWeb Shell}{90}}
+\newlabel{commandshell}{{3.15}{90}}
+\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {3.15.1}Introduction}{90}}
+\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {3.15.2}Return Statuses}{90}}
+\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {3.15.3}Command Line Length}{91}}
+\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {3.15.4}String Substitution}{91}}
+\newlabel{stringsubstitution}{{3.15.4}{91}}
+\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {3.15.5}How a Command Line is Processed}{92}}
+\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {3.15.6}Options}{92}}
+\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {3.15.7}Shell Commands}{93}}
+\@writefile{toc}{\string\contentsline\space {subsubsection}{\string\numberline\space {3.15.7.1}Absent}{93}}
+\@writefile{toc}{\string\contentsline\space {subsubsection}{\string\numberline\space {3.15.7.2}Codify}{93}}
+\@writefile{toc}{\string\contentsline\space {subsubsection}{\string\numberline\space {3.15.7.3}Compare}{93}}
+\@writefile{toc}{\string\contentsline\space {subsubsection}{\string\numberline\space {3.15.7.4}Define}{94}}
+\@writefile{toc}{\string\contentsline\space {subsubsection}{\string\numberline\space {3.15.7.5}Diff}{94}}
+\@writefile{toc}{\string\contentsline\space {subsubsection}{\string\numberline\space {3.15.7.6}Diffsummary}{95}}
+\@writefile{toc}{\string\contentsline\space {subsubsection}{\string\numberline\space {3.15.7.7}Diffzero}{95}}
+\@writefile{toc}{\string\contentsline\space {subsubsection}{\string\numberline\space {3.15.7.8}Eneo}{95}}
+\@writefile{toc}{\string\contentsline\space {subsubsection}{\string\numberline\space {3.15.7.9}Execute}{96}}
+\newlabel{executecommand}{{3.15.7.9}{96}}
+\@writefile{toc}{\string\contentsline\space {subsubsection}{\string\numberline\space {3.15.7.10}Exists}{96}}
+\@writefile{toc}{\string\contentsline\space {subsubsection}{\string\numberline\space {3.15.7.11}Fixeols}{96}}
+\@writefile{toc}{\string\contentsline\space {subsubsection}{\string\numberline\space {3.15.7.12}Fw}{97}}
+\@writefile{toc}{\string\contentsline\space {subsubsection}{\string\numberline\space {3.15.7.13}Help}{97}}
+\@writefile{toc}{\string\contentsline\space {subsubsection}{\string\numberline\space {3.15.7.14}Here}{98}}
+\@writefile{toc}{\string\contentsline\space {subsubsection}{\string\numberline\space {3.15.7.15}Quit}{98}}
+\@writefile{toc}{\string\contentsline\space {subsubsection}{\string\numberline\space {3.15.7.16}Set}{98}}
+\@writefile{toc}{\string\contentsline\space {subsubsection}{\string\numberline\space {3.15.7.17}Show}{98}}
+\@writefile{toc}{\string\contentsline\space {subsubsection}{\string\numberline\space {3.15.7.18}Skipto}{98}}
+\newlabel{skiptocommand}{{3.15.7.18}{98}}
+\@writefile{toc}{\string\contentsline\space {subsubsection}{\string\numberline\space {3.15.7.19}Status}{99}}
+\@writefile{toc}{\string\contentsline\space {subsubsection}{\string\numberline\space {3.15.7.20}Tolerate}{100}}
+\@writefile{toc}{\string\contentsline\space {subsubsection}{\string\numberline\space {3.15.7.21}Trace}{100}}
+\@writefile{toc}{\string\contentsline\space {subsubsection}{\string\numberline\space {3.15.7.22}Write}{100}}
+\@writefile{toc}{\string\contentsline\space {subsubsection}{\string\numberline\space {3.15.7.23}Writeu}{100}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {3.16}Concluding Remarks}{100}}
+\@writefile{toc}{\string\contentsline\space {chapter}{\string\numberline\space {4}FunnelWeb Installation}{101}}
+\@writefile{lof}{\string\addvspace\space {10\p@ }}
+\@writefile{lot}{\string\addvspace\space {10\p@ }}
+\newlabel{chapinstall}{{4}{101}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {4.1}Obtaining a Copy of FunnelWeb}{101}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {4.2}Establishing The Directory Tree}{102}}
+\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {4.2.1}Admin Directory}{102}}
+\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {4.2.2}Answers Directory}{102}}
+\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {4.2.3}Hackman Directory}{103}}
+\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {4.2.4}Results Directory}{103}}
+\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {4.2.5}Scripts Directory}{103}}
+\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {4.2.6}Sources Directory}{103}}
+\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {4.2.7}Tests Directory}{104}}
+\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {4.2.8}Userman Directory}{105}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {4.3}Compiling FunnelWeb}{105}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {4.4}Testing FunnelWeb}{105}}
+\newlabel{testingfunnelweb}{{4.4}{105}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {4.5}Installing FunnelWeb}{106}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {4.6}Printing Manuals}{107}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {4.7}Installation Problems?}{107}}
+\@writefile{toc}{\string\contentsline\space {chapter}{\string\numberline\space {5}FunnelWeb Administration}{109}}
+\@writefile{lof}{\string\addvspace\space {10\p@ }}
+\@writefile{lot}{\string\addvspace\space {10\p@ }}
+\newlabel{chapadministration}{{5}{109}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {5.1}Introduction}{109}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {5.2}The User's Commitment To FunnelWeb}{109}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {5.3}Documentation}{110}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {5.4}Registration}{110}}
+\newlabel{registration}{{5.4}{110}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {5.5}Support}{110}}
+\newlabel{support}{{5.5}{110}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {5.6}Copyright}{112}}
+\newlabel{copyright}{{5.6}{112}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {5.7}Nowarranty}{112}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {5.8}Distribution}{113}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {5.9}Modification}{113}}
+\newlabel{modification}{{5.9}{113}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {5.10}Versions}{114}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {5.11}FTP Archive and Author}{114}}
+\newlabel{ftparchive}{{5.11}{114}}
+\@writefile{toc}{\string\contentsline\space {chapter}{\string\numberline\space {A}Glossary}{115}}
+\@writefile{lof}{\string\addvspace\space {10\p@ }}
+\@writefile{lot}{\string\addvspace\space {10\p@ }}
+\@writefile{toc}{\string\contentsline\space {chapter}{\string\numberline\space {B}References}{117}}
+\@writefile{lof}{\string\addvspace\space {10\p@ }}
+\@writefile{lot}{\string\addvspace\space {10\p@ }}
+\@writefile{toc}{\string\contentsline\space {chapter}{Index}{117}}
diff --git a/web/funnelAC/userman/u_manual.dvi b/web/funnelAC/userman/u_manual.dvi
new file mode 100644
index 0000000000..36d149f69b
--- /dev/null
+++ b/web/funnelAC/userman/u_manual.dvi
Binary files differ
diff --git a/web/funnelAC/userman/u_manual.idx b/web/funnelAC/userman/u_manual.idx
new file mode 100644
index 0000000000..5935623e5c
--- /dev/null
+++ b/web/funnelAC/userman/u_manual.idx
@@ -0,0 +1,1020 @@
+\indexentry{Ross Williams}{1}
+\indexentry{Williams Ross}{1}
+\indexentry{copyright notice}{1}
+\indexentry{notice copyright}{1}
+\indexentry{preface}{9}
+\indexentry{Donald Knuth}{9}
+\indexentry{Knuth Donald}{9}
+\indexentry{Knuth83}{9}
+\indexentry{Web}{9}
+\indexentry{GNU license}{9}
+\indexentry{license GNU}{9}
+\indexentry{acknowledgements}{11}
+\indexentry{David Hulse}{11}
+\indexentry{Hulse David}{11}
+\indexentry{Ada}{11}
+\indexentry{Simon Hackett}{11}
+\indexentry{Hackett Simon}{11}
+\indexentry{Jeremy Begg}{11}
+\indexentry{Begg Jeremy}{11}
+\indexentry{Barry Dwyer}{11}
+\indexentry{Dwyer Barry}{11}
+\indexentry{Roger Brissenden}{11}
+\indexentry{Brissenden Roger}{11}
+\indexentry{Donald Knuth}{11}
+\indexentry{Knuth Donald}{11}
+\indexentry{presentation notes}{13}
+\indexentry{typesetting}{13}
+\indexentry{Andrew Trevorrow}{13}
+\indexentry{Trevorrow Andrew}{13}
+\indexentry{OzTeX}{13}
+\indexentry{Knuth84}{13}
+\indexentry{Lamport86}{13}
+\indexentry{TeX}{13}
+\indexentry{LaTeX}{13}
+\indexentry{Macintosh}{13}
+\indexentry{tutorial}{15}
+\indexentry{literate programming}{15}
+\indexentry{literate programming}{15}
+\indexentry{magic trick}{15}
+\indexentry{tools literate programming}{15}
+\indexentry{literate programming tools}{15}
+\indexentry{hypertext}{15}
+\indexentry{literate programming, facilities}{15}
+\indexentry{program ordering}{15}
+\indexentry{ordering program}{15}
+\indexentry{Pascal}{15}
+\indexentry{BSI82}{15}
+\indexentry{cross referencing}{17}
+\indexentry{literate programming, most significant benefit}{17}
+\indexentry{Rosovsky90}{17}
+\indexentry{universities}{17}
+\indexentry{explaining code}{17}
+\indexentry{code explaining}{17}
+\indexentry{development time}{17}
+\indexentry{time development}{17}
+\indexentry{Knuth83}{17}
+\indexentry{Knuth84}{17}
+\indexentry{Smith91}{17}
+\indexentry{FunnelWeb overview}{18}
+\indexentry{overview FunnelWeb}{18}
+\indexentry{input file}{18}
+\indexentry{product files}{18}
+\indexentry{documentation file}{18}
+\indexentry{output files}{18}
+\indexentry{simplicity}{18}
+\indexentry{reliability}{18}
+\indexentry{language independence}{18}
+\indexentry{independence language}{18}
+\indexentry{typesetter independence}{18}
+\indexentry{independence typesetter}{18}
+\indexentry{BSI82}{18}
+\indexentry{Knuth84}{18}
+\indexentry{TeX}{18}
+\indexentry{portability}{18}
+\indexentry{controllability}{18}
+\indexentry{GNU license}{18}
+\indexentry{license GNU}{18}
+\indexentry{production tool}{19}
+\indexentry{FunnelWeb name}{19}
+\indexentry{name FunnelWeb}{19}
+\indexentry{Funnel-web spider}{19}
+\indexentry{spider Funnel-web}{19}
+\indexentry{Sydney}{19}
+\indexentry{Atrax robustus}{19}
+\indexentry{ANZE}{19}
+\indexentry{tiger snake}{19}
+\indexentry{snake tiger}{19}
+\indexentry{white pointer shark}{19}
+\indexentry{shark white pointer}{19}
+\indexentry{Edna Everage}{19}
+\indexentry{Everage Edna}{19}
+\indexentry{Barry Humphries}{19}
+\indexentry{Humphries Barry}{19}
+\indexentry{Humphries91}{19}
+\indexentry{tutorial}{19}
+\indexentry{tutorial introduction}{19}
+\indexentry{introduction tutorial}{19}
+\indexentry{hello world document}{20}
+\indexentry{invoking FunnelWeb}{20}
+\indexentry{special character}{20}
+\indexentry{special sequence}{20}
+\indexentry{@<}{20}
+\indexentry{@>}{20}
+\indexentry{@O}{20}
+\indexentry{@braces}{20}
+\indexentry{@+}{20}
+\indexentry{simple rule}{20}
+\indexentry{rule simple}{20}
+\indexentry{C preprocessor}{20}
+\indexentry{preprocessor C}{20}
+\indexentry{@=}{20}
+\indexentry{Hello Northern Hemisphere Program}{21}
+\indexentry{FunnelWeb two main aspects}{21}
+\indexentry{two main aspects FunnelWeb}{21}
+\indexentry{Tangling}{21}
+\indexentry{Weaving}{21}
+\indexentry{WEB}{21}
+\indexentry{tutorial macro facilities}{22}
+\indexentry{macro facilities tutorial}{22}
+\indexentry{tutorial simple macros}{22}
+\indexentry{simple macros tutorial}{22}
+\indexentry{tutorial macros simple}{22}
+\indexentry{macros simple tutorial}{22}
+\indexentry{@O}{22}
+\indexentry{@dollar}{22}
+\indexentry{order program}{22}
+\indexentry{program order}{22}
+\indexentry{program layout}{22}
+\indexentry{layout program}{22}
+\indexentry{macro bindings}{22}
+\indexentry{bindings macro}{22}
+\indexentry{TeX}{22}
+\indexentry{number of times called}{23}
+\indexentry{calls number}{23}
+\indexentry{number calls}{23}
+\indexentry{invocation number}{23}
+\indexentry{number invocation}{23}
+\indexentry{EOL suppression}{23}
+\indexentry{suppression EOL}{23}
+\indexentry{@-}{23}
+\indexentry{@Z tutorial}{24}
+\indexentry{tutorial @Z}{24}
+\indexentry{@M tutorial}{24}
+\indexentry{tutorial @M}{24}
+\indexentry{indentation macro calls}{25}
+\indexentry{macro calls indentation}{25}
+\indexentry{pragma}{25}
+\indexentry{WEB}{25}
+\indexentry{Knuth83}{25}
+\indexentry{Pascal}{25}
+\indexentry{output WEB}{25}
+\indexentry{WEB output}{25}
+\indexentry{Knuth83}{25}
+\indexentry{object code}{26}
+\indexentry{additive macros}{26}
+\indexentry{macros additive}{26}
+\indexentry{additive macro}{26}
+\indexentry{tutorial ==}{26}
+\indexentry{== tutorial}{26}
+\indexentry{tutorial +=}{26}
+\indexentry{+= tutorial}{26}
+\indexentry{data abstraction}{26}
+\indexentry{abstraction data}{26}
+\indexentry{Pascal}{26}
+\indexentry{program layout}{28}
+\indexentry{layout program}{28}
+\indexentry{parameterized macros}{28}
+\indexentry{macros parameterized}{28}
+\indexentry{formal parameters}{28}
+\indexentry{parameters formal}{28}
+\indexentry{@1...}{28}
+\indexentry{formal parameters}{28}
+\indexentry{parameters formal}{28}
+\indexentry{actual parameters}{29}
+\indexentry{parameters actual}{29}
+\indexentry{@(}{29}
+\indexentry{@)}{29}
+\indexentry{@,}{29}
+\indexentry{@"}{29}
+\indexentry{parameter list, absent}{29}
+\indexentry{song}{29}
+\indexentry{twelve bugs of christmas}{29}
+\indexentry{rec.humor.funny}{29}
+\indexentry{Pat Scannel}{29}
+\indexentry{Scannel Pat}{29}
+\indexentry{macro expansion}{30}
+\indexentry{expansion macro}{30}
+\indexentry{memory use of}{30}
+\indexentry{use of memory}{30}
+\indexentry{include files}{30}
+\indexentry{files include}{30}
+\indexentry{@i}{30}
+\indexentry{poem camera}{30}
+\indexentry{camera poem}{30}
+\indexentry{animal poem}{30}
+\indexentry{poem animal}{30}
+\indexentry{shooting}{31}
+\indexentry{special character changing}{31}
+\indexentry{changing special character}{31}
+\indexentry{include files recursive}{31}
+\indexentry{recursive include files}{31}
+\indexentry{macro libraries}{31}
+\indexentry{libraries macro}{31}
+\indexentry{tutorial typesetting}{32}
+\indexentry{typesetting tutorial}{32}
+\indexentry{documentation vs code}{32}
+\indexentry{code vs documentation}{32}
+\indexentry{overview typesetting}{32}
+\indexentry{typesetting overview}{32}
+\indexentry{macro definitions}{32}
+\indexentry{directives}{32}
+\indexentry{free text}{32}
+\indexentry{typesetter independence}{34}
+\indexentry{independence typesetter}{34}
+\indexentry{typesetter independent}{34}
+\indexentry{hierarchical structure}{34}
+\indexentry{structure hierarchical}{34}
+\indexentry{section headings}{34}
+\indexentry{headings section}{34}
+\indexentry{@A...}{34}
+\indexentry{name section}{34}
+\indexentry{section name}{34}
+\indexentry{section name inheritance}{35}
+\indexentry{inheritance section name}{35}
+\indexentry{programmer's cheer}{35}
+\indexentry{cheer programmer's}{35}
+\indexentry{hacker's cheer}{35}
+\indexentry{cheer hacker's}{35}
+\indexentry{hacker's dictionary}{35}
+\indexentry{dictionary hacker's}{35}
+\indexentry{literal construct}{37}
+\indexentry{emphasis construct}{37}
+\indexentry{@slash}{37}
+\indexentry{@braces}{37}
+\indexentry{header page}{37}
+\indexentry{vskip directive}{37}
+\indexentry{directive vskip}{37}
+\indexentry{title directive}{37}
+\indexentry{directive title}{37}
+\indexentry{newpage directive}{37}
+\indexentry{directive newpage}{37}
+\indexentry{table of contents directive}{37}
+\indexentry{directive table of contents}{37}
+\indexentry{comments}{37}
+\indexentry{@!}{37}
+\indexentry{complete example}{38}
+\indexentry{example complete}{38}
+\indexentry{FunnelWeb Example}{38}
+\indexentry{Example FunnelWeb}{38}
+\indexentry{FunnelWeb hints}{41}
+\indexentry{hints FunnelWeb}{41}
+\indexentry{macro names}{41}
+\indexentry{names macro}{41}
+\indexentry{macro identifiers}{41}
+\indexentry{identifiers macro}{41}
+\indexentry{quick names}{42}
+\indexentry{names quick}{42}
+\indexentry{empty name}{42}
+\indexentry{name empty}{42}
+\indexentry{quick name}{42}
+\indexentry{FunnelWeb rules}{42}
+\indexentry{rules FunnelWeb}{42}
+\indexentry{FunnelWeb martinet}{42}
+\indexentry{martinet FunnelWeb}{42}
+\indexentry{trailing blanks}{42}
+\indexentry{blanks trailing}{42}
+\indexentry{input line length}{42}
+\indexentry{length input line}{42}
+\indexentry{output line length}{42}
+\indexentry{length output line}{42}
+\indexentry{Fortran compilers}{42}
+\indexentry{compilers Fortran}{42}
+\indexentry{control characters}{42}
+\indexentry{characters control}{42}
+\indexentry{text editors}{42}
+\indexentry{editors text}{42}
+\indexentry{tabs}{42}
+\indexentry{invocations number}{42}
+\indexentry{number invocations}{42}
+\indexentry{recursion macro}{43}
+\indexentry{macro recursion}{43}
+\indexentry{EOL fiddling with}{43}
+\indexentry{fiddling with EOL}{43}
+\indexentry{end-of-line fiddling with}{43}
+\indexentry{fiddling with end-of-line}{43}
+\indexentry{spacing}{43}
+\indexentry{fudging conditionals}{44}
+\indexentry{conditionals fudging}{44}
+\indexentry{Ada}{44}
+\indexentry{headings strength}{46}
+\indexentry{strength headings}{46}
+\indexentry{typesetting strength}{46}
+\indexentry{strength typesetting}{46}
+\indexentry{section strength}{46}
+\indexentry{strength section}{46}
+\indexentry{font size}{46}
+\indexentry{size font}{46}
+\indexentry{FunnelWeb efficiency}{47}
+\indexentry{efficiency FunnelWeb}{47}
+\indexentry{efficiency notes}{47}
+\indexentry{notes efficiency}{47}
+\indexentry{memory}{47}
+\indexentry{input files}{47}
+\indexentry{files input}{47}
+\indexentry{speed}{47}
+\indexentry{macro expansion}{47}
+\indexentry{expansion macro}{47}
+\indexentry{interactive mode}{47}
+\indexentry{keyboard mode}{47}
+\indexentry{regression testing}{47}
+\indexentry{testing regression}{47}
+\indexentry{command interpreter}{47}
+\indexentry{interpreter command}{47}
+\indexentry{useful commands}{47}
+\indexentry{commands useful}{47}
+\indexentry{FunnelWeb proper}{48}
+\indexentry{set command}{48}
+\indexentry{command set}{48}
+\indexentry{show command}{48}
+\indexentry{command show}{48}
+\indexentry{trace on command}{48}
+\indexentry{command trace on}{48}
+\indexentry{workstations}{48}
+\indexentry{options setting defaults}{49}
+\indexentry{setting defaults options}{49}
+\indexentry{default options}{49}
+\indexentry{options default}{49}
+\indexentry{alias}{49}
+\indexentry{fwinit.fws}{49}
+\indexentry{startup script}{49}
+\indexentry{script startup}{49}
+\indexentry{initialization script}{49}
+\indexentry{script initialization}{49}
+\indexentry{make utility}{49}
+\indexentry{file dependencies}{49}
+\indexentry{dependencies file}{49}
+\indexentry{Ada}{49}
+\indexentry{D option}{49}
+\indexentry{option D}{49}
+\indexentry{delete output files}{49}
+\indexentry{output files delete}{49}
+\indexentry{suppression file}{49}
+\indexentry{file suppression}{49}
+\indexentry{FunnelWeb dangers}{50}
+\indexentry{dangers FunnelWeb}{50}
+\indexentry{FunnelWeb pitfalls}{50}
+\indexentry{pitfalls FunnelWeb}{50}
+\indexentry{Donald Knuth}{50}
+\indexentry{Knuth Donald}{50}
+\indexentry{literate programming}{50}
+\indexentry{programming literate}{50}
+\indexentry{spaghetti organization}{50}
+\indexentry{organization spaghetti}{50}
+\indexentry{stream of consciousness}{50}
+\indexentry{boring organization}{50}
+\indexentry{organization boring}{50}
+\indexentry{random access}{50}
+\indexentry{access random}{50}
+\indexentry{novels}{50}
+\indexentry{maintenance programmer}{50}
+\indexentry{programmer maintenance}{50}
+\indexentry{documentation interdependent}{50}
+\indexentry{interdependent documentation}{50}
+\indexentry{pavlov documentation}{51}
+\indexentry{documentation pavlov}{51}
+\indexentry{MIL-STD-2167A}{51}
+\indexentry{2167A}{51}
+\indexentry{Strunk79}{51}
+\indexentry{duplicate documentation}{51}
+\indexentry{documentation duplicate}{51}
+\indexentry{Ada}{51}
+\indexentry{over documentation}{51}
+\indexentry{documentation over}{51}
+\indexentry{Gries81}{51}
+\indexentry{wholistic debugging}{53}
+\indexentry{debugging wholistic}{53}
+\indexentry{wholistic debugging}{53}
+\indexentry{debugger}{53}
+\indexentry{code gardening}{53}
+\indexentry{gardening code}{53}
+\indexentry{wholistic medicine}{53}
+\indexentry{medicine wholistic}{53}
+\indexentry{FunnelWeb example applications}{53}
+\indexentry{example applications FunnelWeb}{53}
+\indexentry{FunnelWeb applications}{53}
+\indexentry{applications FunnelWeb}{53}
+\indexentry{monster file postscript}{54}
+\indexentry{postscript monster file}{54}
+\indexentry{MacDraw}{54}
+\indexentry{TeX}{54}
+\indexentry{PhD thesis}{54}
+\indexentry{thesis PhD}{54}
+\indexentry{Macintosh}{54}
+\indexentry{PostScript}{54}
+\indexentry{postscript header file}{54}
+\indexentry{header file postscript}{54}
+\indexentry{cryptic text files}{55}
+\indexentry{text files cryptic}{55}
+\indexentry{Ada}{55}
+\indexentry{abstract data type}{55}
+\indexentry{ADT}{55}
+\indexentry{package}{55}
+\indexentry{DOD83}{55}
+\indexentry{multiple languages}{55}
+\indexentry{languages multiple}{55}
+\indexentry{open systems}{55}
+\indexentry{printing system}{55}
+\indexentry{system printing}{55}
+\indexentry{laser printer}{55}
+\indexentry{printer laser}{55}
+\indexentry{sharing information}{56}
+\indexentry{small functions}{56}
+\indexentry{functions small}{56}
+\indexentry{code abstraction}{56}
+\indexentry{abstraction code}{56}
+\indexentry{Pascal}{57}
+\indexentry{preprocessor C}{57}
+\indexentry{C preprocessor}{57}
+\indexentry{procedure call overhead}{57}
+\indexentry{overhead procedure call}{57}
+\indexentry{binding problems}{57}
+\indexentry{problems binding}{57}
+\indexentry{comments abuse}{57}
+\indexentry{abuse comments}{57}
+\indexentry{eliminating comments}{57}
+\indexentry{comments eliminating}{57}
+\indexentry{good old days}{57}
+\indexentry{BASIC}{57}
+\indexentry{REM statement}{57}
+\indexentry{statement REM}{57}
+\indexentry{header files}{57}
+\indexentry{files header}{57}
+\indexentry{C header}{57}
+\indexentry{header C}{57}
+\indexentry{postscript}{57}
+\indexentry{sharing text}{58}
+\indexentry{text sharing}{58}
+\indexentry{annual report}{58}
+\indexentry{report annual}{58}
+\indexentry{examples documentation}{58}
+\indexentry{documentation examples}{58}
+\indexentry{generics fudging}{59}
+\indexentry{fudging generics}{59}
+\indexentry{Pascal}{59}
+\indexentry{Barry Dwyer}{59}
+\indexentry{Dwyer Barry}{59}
+\indexentry{University Adelaide}{59}
+\indexentry{Adelaide University}{59}
+\indexentry{set abstraction}{59}
+\indexentry{abstraction set}{59}
+\indexentry{typesafe generics}{61}
+\indexentry{generics typesafe}{61}
+\indexentry{FunnelWeb definition}{63}
+\indexentry{definition FunnelWeb}{63}
+\indexentry{notation}{63}
+\indexentry{EBNF syntax}{63}
+\indexentry{syntax EBNF}{63}
+\indexentry{terminology}{63}
+\indexentry{semantic architecture}{64}
+\indexentry{architecture semantic}{64}
+\indexentry{FunnelWeb overview}{64}
+\indexentry{overview FunnelWeb}{64}
+\indexentry{execution phases}{64}
+\indexentry{phases execution}{64}
+\indexentry{input file}{64}
+\indexentry{FunnelWeb file}{64}
+\indexentry{phases}{64}
+\indexentry{output files}{64}
+\indexentry{journal file}{64}
+\indexentry{listing file}{64}
+\indexentry{documentation}{64}
+\indexentry{product files}{64}
+\indexentry{scanner}{64}
+\indexentry{parser}{64}
+\indexentry{document list}{64}
+\indexentry{list document}{64}
+\indexentry{macro table}{64}
+\indexentry{table macro}{64}
+\indexentry{analyser}{65}
+\indexentry{tangle}{65}
+\indexentry{weave}{65}
+\indexentry{FunnelWeb proper}{65}
+\indexentry{FunnelWeb program}{65}
+\indexentry{diagnostics}{65}
+\indexentry{diagnostics levels of}{65}
+\indexentry{levels of diagnostics}{65}
+\indexentry{severity}{65}
+\indexentry{warning severity}{65}
+\indexentry{severity warning}{65}
+\indexentry{error severity}{65}
+\indexentry{severity error}{65}
+\indexentry{severe severity}{65}
+\indexentry{severity severe}{65}
+\indexentry{fatal severity}{65}
+\indexentry{severity fatal}{65}
+\indexentry{assertion severity}{65}
+\indexentry{severity assertion}{65}
+\indexentry{return status}{65}
+\indexentry{status return}{65}
+\indexentry{typesetter independence}{65}
+\indexentry{independence typesetter}{65}
+\indexentry{Kernighan88}{65}
+\indexentry{typesetter directives}{66}
+\indexentry{command line interface}{66}
+\indexentry{interface command line}{66}
+\indexentry{FunnelWeb invoking}{66}
+\indexentry{invoking FunnelWeb}{66}
+\indexentry{FunnelWeb running}{66}
+\indexentry{running FunnelWeb}{66}
+\indexentry{command line processing}{66}
+\indexentry{processing command line}{66}
+\indexentry{command line parsing}{66}
+\indexentry{parsing command line}{66}
+\indexentry{fw command verb}{66}
+\indexentry{command verb fw}{66}
+\indexentry{command line argument}{67}
+\indexentry{argument command line}{67}
+\indexentry{syntax command line}{67}
+\indexentry{command line syntax}{67}
+\indexentry{arguments}{67}
+\indexentry{case dependence}{67}
+\indexentry{dependence case}{67}
+\indexentry{Unix}{67}
+\indexentry{sign}{67}
+\indexentry{letter}{67}
+\indexentry{string}{67}
+\indexentry{command line options syntax}{67}
+\indexentry{syntax command line options}{67}
+\indexentry{options syntax}{67}
+\indexentry{syntax options}{67}
+\indexentry{options}{67}
+\indexentry{options}{68}
+\indexentry{list options}{68}
+\indexentry{options list}{68}
+\indexentry{B option}{68}
+\indexentry{option B}{68}
+\indexentry{tracedump options}{68}
+\indexentry{options tracedump}{68}
+\indexentry{dump option}{68}
+\indexentry{option dump}{68}
+\indexentry{dump mapped file}{68}
+\indexentry{mapped file dump}{68}
+\indexentry{dump global line list}{68}
+\indexentry{global line list dump}{68}
+\indexentry{dump token list}{68}
+\indexentry{token list dump}{68}
+\indexentry{dump macro table}{68}
+\indexentry{macro table dump}{68}
+\indexentry{dump document list}{68}
+\indexentry{document list dump}{68}
+\indexentry{dump times}{68}
+\indexentry{times dump}{68}
+\indexentry{non-determinism}{68}
+\indexentry{C option}{68}
+\indexentry{option C}{68}
+\indexentry{listing file context}{68}
+\indexentry{context listing file}{68}
+\indexentry{infinite context}{68}
+\indexentry{context infinite}{68}
+\indexentry{D option}{68}
+\indexentry{option D}{68}
+\indexentry{delete output option}{68}
+\indexentry{option delete output}{68}
+\indexentry{F option}{68}
+\indexentry{option F}{68}
+\indexentry{input file option}{68}
+\indexentry{option input file}{68}
+\indexentry{H option}{68}
+\indexentry{option H}{68}
+\indexentry{help option}{68}
+\indexentry{option help}{68}
+\indexentry{I option}{69}
+\indexentry{option I}{69}
+\indexentry{include file option}{69}
+\indexentry{option include file}{69}
+\indexentry{include file}{69}
+\indexentry{file include}{69}
+\indexentry{J option}{69}
+\indexentry{option J}{69}
+\indexentry{journal file option}{69}
+\indexentry{option journal file}{69}
+\indexentry{journal file}{69}
+\indexentry{file journal}{69}
+\indexentry{K option}{69}
+\indexentry{option K}{69}
+\indexentry{keyboard option}{69}
+\indexentry{option keyboard}{69}
+\indexentry{interactive option}{69}
+\indexentry{option interactive}{69}
+\indexentry{L option}{69}
+\indexentry{option L}{69}
+\indexentry{listing file option}{69}
+\indexentry{option listing file}{69}
+\indexentry{listing file}{69}
+\indexentry{file listing}{69}
+\indexentry{Q option}{69}
+\indexentry{option Q}{69}
+\indexentry{quiet option}{69}
+\indexentry{option quiet}{69}
+\indexentry{suppress console output}{69}
+\indexentry{console output suppress}{69}
+\indexentry{S option}{69}
+\indexentry{option S}{69}
+\indexentry{screen option}{69}
+\indexentry{option screen}{69}
+\indexentry{context}{69}
+\indexentry{T option}{69}
+\indexentry{option T}{69}
+\indexentry{typeset option}{69}
+\indexentry{option typeset}{69}
+\indexentry{typeset file}{69}
+\indexentry{file typeset}{69}
+\indexentry{W option}{69}
+\indexentry{option W}{69}
+\indexentry{width option}{69}
+\indexentry{option width}{69}
+\indexentry{product file width}{69}
+\indexentry{width product file}{69}
+\indexentry{X option}{69}
+\indexentry{option X}{69}
+\indexentry{execute script option}{69}
+\indexentry{option execute script}{69}
+\indexentry{filename inheritance}{70}
+\indexentry{inheritance filename}{70}
+\indexentry{filename fields}{70}
+\indexentry{fields filename}{70}
+\indexentry{directory}{70}
+\indexentry{name}{70}
+\indexentry{extension}{70}
+\indexentry{filename inheritance example}{70}
+\indexentry{example filename inheritance}{70}
+\indexentry{FunnelWeb startup}{70}
+\indexentry{startup FunnelWeb}{70}
+\indexentry{FunnelWeb initialization}{70}
+\indexentry{initialization FunnelWeb}{70}
+\indexentry{Action options}{70}
+\indexentry{Ordinary options}{70}
+\indexentry{action execution order}{71}
+\indexentry{order action execution}{71}
+\indexentry{initialization script}{71}
+\indexentry{script initialization}{71}
+\indexentry{fwinit.fws}{71}
+\indexentry{scanner}{71}
+\indexentry{mapper}{71}
+\indexentry{file termination}{71}
+\indexentry{termination file}{71}
+\indexentry{line termination}{71}
+\indexentry{termination line}{71}
+\indexentry{unprintable characters}{71}
+\indexentry{characters unprintable}{71}
+\indexentry{line length}{71}
+\indexentry{length line}{71}
+\indexentry{special sequences}{72}
+\indexentry{sequences special}{72}
+\indexentry{special character}{72}
+\indexentry{special sequence}{72}
+\indexentry{default special character}{72}
+\indexentry{special character default}{72}
+\indexentry{simple sequence}{72}
+\indexentry{setting special character}{74}
+\indexentry{special character setting}{74}
+\indexentry{special character inserting into text}{74}
+\indexentry{inserting into text special character}{74}
+\indexentry{arbitrary characters inserting into text}{74}
+\indexentry{inserting into text arbitrary characters}{74}
+\indexentry{control characters inserting into text}{74}
+\indexentry{inserting into text control characters}{74}
+\indexentry{@circumflex}{74}
+\indexentry{Unix newline}{75}
+\indexentry{comments FunnelWeb}{75}
+\indexentry{FunnelWeb comments}{75}
+\indexentry{@!}{75}
+\indexentry{quick names}{76}
+\indexentry{names quick}{76}
+\indexentry{quick name}{76}
+\indexentry{@hash}{76}
+\indexentry{EOL markers inserting}{76}
+\indexentry{inserting EOL markers}{76}
+\indexentry{@+}{76}
+\indexentry{EOL markers suppressing}{77}
+\indexentry{suppressing EOL markers}{77}
+\indexentry{@-}{77}
+\indexentry{include files}{77}
+\indexentry{files include}{77}
+\indexentry{@i}{77}
+\indexentry{input file}{77}
+\indexentry{include files}{77}
+\indexentry{pragmas}{78}
+\indexentry{pragmas visible}{78}
+\indexentry{visible pragmas}{78}
+\indexentry{pragmas invisible}{78}
+\indexentry{invisible pragmas}{78}
+\indexentry{pragma}{78}
+\indexentry{indentation macro expansion}{78}
+\indexentry{macro expansion indentation}{78}
+\indexentry{no indentation}{78}
+\indexentry{indentation none}{78}
+\indexentry{none indentation}{78}
+\indexentry{blank indentation}{78}
+\indexentry{indentation blank}{78}
+\indexentry{blank indentation}{78}
+\indexentry{input line length}{79}
+\indexentry{line length input}{79}
+\indexentry{maximum input line length}{79}
+\indexentry{input line length maximum}{79}
+\indexentry{pragma input line length}{79}
+\indexentry{input line length pragma}{79}
+\indexentry{maximum product file line length}{79}
+\indexentry{product file line length maximum}{79}
+\indexentry{pragma maximum product file line length}{79}
+\indexentry{maximum product file line length pragma}{79}
+\indexentry{maximum output file line length}{79}
+\indexentry{output file line length maximum}{79}
+\indexentry{pragma maximum output file line length}{79}
+\indexentry{maximum output file line length pragma}{79}
+\indexentry{typesetter pragma}{80}
+\indexentry{pragma typesetter}{80}
+\indexentry{typesetter independence}{80}
+\indexentry{independence typesetter}{80}
+\indexentry{typesetter directives}{81}
+\indexentry{directives typesetter}{81}
+\indexentry{inline}{81}
+\indexentry{freestanding}{81}
+\indexentry{new page}{81}
+\indexentry{pragma new page}{81}
+\indexentry{new page pragma}{81}
+\indexentry{table of contents}{81}
+\indexentry{contents table of}{81}
+\indexentry{pragma table of contents}{81}
+\indexentry{table of contents pragma}{81}
+\indexentry{vertical skip}{81}
+\indexentry{skip vertical}{81}
+\indexentry{pragma vskip}{81}
+\indexentry{vskip pragma}{81}
+\indexentry{title}{82}
+\indexentry{pragma title}{82}
+\indexentry{title pragma}{82}
+\indexentry{parser}{82}
+\indexentry{text tokens}{82}
+\indexentry{special tokens}{82}
+\indexentry{typesetter directive tokens}{82}
+\indexentry{syntax high level}{82}
+\indexentry{high level syntax}{82}
+\indexentry{free text}{83}
+\indexentry{text free}{83}
+\indexentry{Free text}{83}
+\indexentry{directives}{83}
+\indexentry{freestanding typesetter directives}{83}
+\indexentry{inline typesetter directives}{83}
+\indexentry{section constructs}{83}
+\indexentry{constructs section}{83}
+\indexentry{tree structure}{83}
+\indexentry{structure tree}{83}
+\indexentry{LaTeX}{84}
+\indexentry{section name}{84}
+\indexentry{name section}{84}
+\indexentry{literal directive}{84}
+\indexentry{directive literal}{84}
+\indexentry{emphasis directive}{85}
+\indexentry{directive emphasis}{85}
+\indexentry{macro definition}{85}
+\indexentry{definition macro}{85}
+\indexentry{macro name}{85}
+\indexentry{macro body}{85}
+\indexentry{expression}{85}
+\indexentry{macro attributes}{85}
+\indexentry{attributes macro}{85}
+\indexentry{@Z}{85}
+\indexentry{@M}{85}
+\indexentry{==}{85}
+\indexentry{+=}{85}
+\indexentry{additively defined}{85}
+\indexentry{names}{86}
+\indexentry{macro names}{86}
+\indexentry{names macro}{86}
+\indexentry{section names}{86}
+\indexentry{names section}{86}
+\indexentry{parameter lists formal}{86}
+\indexentry{formal parameter lists}{86}
+\indexentry{@1...}{86}
+\indexentry{macro expressions}{86}
+\indexentry{expressions macro}{86}
+\indexentry{macro calls}{86}
+\indexentry{calls macro}{86}
+\indexentry{macro parameter delimiting}{87}
+\indexentry{delimiting macro parameter}{87}
+\indexentry{formal parameters}{87}
+\indexentry{parameters formal}{87}
+\indexentry{macro definition}{87}
+\indexentry{definition macro}{87}
+\indexentry{macro expansion}{87}
+\indexentry{expansion macro}{87}
+\indexentry{macros static}{87}
+\indexentry{static macros}{87}
+\indexentry{analyser}{88}
+\indexentry{checks macro}{88}
+\indexentry{macro checks}{88}
+\indexentry{static analysis}{88}
+\indexentry{analysis static}{88}
+\indexentry{macro recursion}{88}
+\indexentry{recursion macro}{88}
+\indexentry{tangle}{88}
+\indexentry{weave}{89}
+\indexentry{typesetting}{89}
+\indexentry{target typesetter}{89}
+\indexentry{typesetter target}{89}
+\indexentry{cross referencing}{89}
+\indexentry{referencing cross}{89}
+\indexentry{cross reference numbering}{89}
+\indexentry{numbering cross reference}{89}
+\indexentry{section numbering}{89}
+\indexentry{numbering section}{89}
+\indexentry{FunnelWeb command shell}{90}
+\indexentry{command shell FunnelWeb}{90}
+\indexentry{commands FunnelWeb}{90}
+\indexentry{FunnelWeb commands}{90}
+\indexentry{FunnelWeb shell}{90}
+\indexentry{shell FunnelWeb}{90}
+\indexentry{FunnelWeb command shell}{90}
+\indexentry{uses shell}{90}
+\indexentry{shell uses}{90}
+\indexentry{workstation}{90}
+\indexentry{errors shell}{90}
+\indexentry{shell errors}{90}
+\indexentry{status success}{90}
+\indexentry{success status}{90}
+\indexentry{status warning}{90}
+\indexentry{warning status}{90}
+\indexentry{status error}{90}
+\indexentry{error status}{90}
+\indexentry{status severe}{90}
+\indexentry{severe status}{90}
+\indexentry{status fatal}{90}
+\indexentry{fatal status}{90}
+\indexentry{status assertion}{90}
+\indexentry{assertion status}{90}
+\indexentry{command length}{91}
+\indexentry{length command}{91}
+\indexentry{string substitution}{91}
+\indexentry{substitution string}{91}
+\indexentry{define command}{91}
+\indexentry{command define}{91}
+\indexentry{command line processing}{92}
+\indexentry{processing command line}{92}
+\indexentry{command options}{92}
+\indexentry{options command}{92}
+\indexentry{default options}{92}
+\indexentry{options default}{92}
+\indexentry{shell commands list}{93}
+\indexentry{list shell commands}{93}
+\indexentry{commands shell}{93}
+\indexentry{shell commands}{93}
+\indexentry{command absent}{93}
+\indexentry{absent command}{93}
+\indexentry{command codify}{93}
+\indexentry{codify command}{93}
+\indexentry{command compare}{93}
+\indexentry{compare command}{93}
+\indexentry{command define}{94}
+\indexentry{define command}{94}
+\indexentry{string substitution}{94}
+\indexentry{substitution string}{94}
+\indexentry{command diff}{94}
+\indexentry{diff command}{94}
+\indexentry{file differences}{94}
+\indexentry{differences file}{94}
+\indexentry{command diffsummary}{95}
+\indexentry{diffsummary command}{95}
+\indexentry{command diffzero}{95}
+\indexentry{diffzero command}{95}
+\indexentry{command eneo}{95}
+\indexentry{eneo command}{95}
+\indexentry{command execute}{96}
+\indexentry{execute command}{96}
+\indexentry{command exists}{96}
+\indexentry{exists command}{96}
+\indexentry{command fixeols}{96}
+\indexentry{fixeols command}{96}
+\indexentry{non-printable characters}{96}
+\indexentry{characters non-printable}{96}
+\indexentry{command fw}{97}
+\indexentry{fw command}{97}
+\indexentry{command help}{97}
+\indexentry{help command}{97}
+\indexentry{command here}{98}
+\indexentry{here command}{98}
+\indexentry{command quit}{98}
+\indexentry{quit command}{98}
+\indexentry{command set}{98}
+\indexentry{set command}{98}
+\indexentry{command show}{98}
+\indexentry{show command}{98}
+\indexentry{command skipto}{98}
+\indexentry{skipto command}{98}
+\indexentry{command status}{99}
+\indexentry{status command}{99}
+\indexentry{command tolerate}{100}
+\indexentry{tolerate command}{100}
+\indexentry{command trace}{100}
+\indexentry{trace command}{100}
+\indexentry{command write}{100}
+\indexentry{write command}{100}
+\indexentry{command writeu}{100}
+\indexentry{writeu command}{100}
+\indexentry{FunnelWeb installation}{101}
+\indexentry{installation FunnelWeb}{101}
+\indexentry{FunnelWeb obtaining}{101}
+\indexentry{obtaining FunnelWeb}{101}
+\indexentry{ftp anonymous}{101}
+\indexentry{anonymous ftp}{101}
+\indexentry{directory tree}{102}
+\indexentry{tree directory}{102}
+\indexentry{admin directory}{102}
+\indexentry{directory admin}{102}
+\indexentry{answers directory}{102}
+\indexentry{directory answers}{102}
+\indexentry{correct answers}{102}
+\indexentry{answers correct}{102}
+\indexentry{hackman directory}{103}
+\indexentry{directory hackman}{103}
+\indexentry{results directory}{103}
+\indexentry{directory results}{103}
+\indexentry{scripts directory}{103}
+\indexentry{directory scripts}{103}
+\indexentry{regression testing}{103}
+\indexentry{testing regression}{103}
+\indexentry{sources directory}{103}
+\indexentry{directory sources}{103}
+\indexentry{tests directory}{104}
+\indexentry{directory tests}{104}
+\indexentry{userman directory}{105}
+\indexentry{directory userman}{105}
+\indexentry{compiling FunnelWeb}{105}
+\indexentry{FunnelWeb compiling}{105}
+\indexentry{testing FunnelWeb}{105}
+\indexentry{FunnelWeb testing}{105}
+\indexentry{installing FunnelWeb}{106}
+\indexentry{FunnelWeb installing}{106}
+\indexentry{FunnelWeb executable}{106}
+\indexentry{executable FunnelWeb}{106}
+\indexentry{printing manuals}{107}
+\indexentry{manuals printing}{107}
+\indexentry{problems installation}{107}
+\indexentry{installation problems}{107}
+\indexentry{FunnelWeb administration}{109}
+\indexentry{administration FunnelWeb}{109}
+\indexentry{commitment FunnelWeb}{109}
+\indexentry{FunnelWeb commitment}{109}
+\indexentry{ANSI}{109}
+\indexentry{FunnelWeb documentation}{110}
+\indexentry{documentation FunnelWeb}{110}
+\indexentry{FunnelWeb registration}{110}
+\indexentry{registration FunnelWeb}{110}
+\indexentry{FunnelWeb support}{110}
+\indexentry{support FunnelWeb}{110}
+\indexentry{copyright FunnelWeb}{112}
+\indexentry{FunnelWeb copyright}{112}
+\indexentry{FunnelWeb license}{112}
+\indexentry{license FunnelWeb}{112}
+\indexentry{GNU license}{112}
+\indexentry{license GNU}{112}
+\indexentry{warranty}{112}
+\indexentry{FunnelWeb Distribution}{113}
+\indexentry{Distribution FunnelWeb}{113}
+\indexentry{FunnelWeb versions}{114}
+\indexentry{versions FunnelWeb}{114}
+\indexentry{author contacting}{114}
+\indexentry{contacting author}{114}
+\indexentry{ftp archive}{114}
+\indexentry{archive ftp}{114}
+\indexentry{FunnelWeb archive}{114}
+\indexentry{archive FunnelWeb}{114}
+\indexentry{glossary}{115}
+\indexentry{Analyser}{115}
+\indexentry{Argument}{115}
+\indexentry{Directive}{115}
+\indexentry{Documentation}{115}
+\indexentry{Documentation file}{115}
+\indexentry{Free text}{115}
+\indexentry{FunnelWeb}{115}
+\indexentry{FunnelWeb file}{115}
+\indexentry{FunnelWeb language}{115}
+\indexentry{FunnelWeb proper}{115}
+\indexentry{FW}{115}
+\indexentry{Include file}{115}
+\indexentry{Input file}{115}
+\indexentry{Journal file}{115}
+\indexentry{Listing file}{115}
+\indexentry{Macro}{115}
+\indexentry{Macro definition}{116}
+\indexentry{Mapper}{116}
+\indexentry{Option}{116}
+\indexentry{Output file}{116}
+\indexentry{Parser}{116}
+\indexentry{Pragma}{116}
+\indexentry{Printed documentation}{116}
+\indexentry{Product file}{116}
+\indexentry{Scanner}{116}
+\indexentry{Script}{116}
+\indexentry{Shell}{116}
+\indexentry{Special character}{116}
+\indexentry{Special sequence}{116}
+\indexentry{Tangle}{116}
+\indexentry{Typesetting directive}{116}
+\indexentry{Weave}{116}
+\indexentry{references}{117}
+\indexentry{ANSI}{117}
+\indexentry{ANZE}{117}
+\indexentry{BSI82}{117}
+\indexentry{Gries81}{117}
+\indexentry{Humphries91}{117}
+\indexentry{Kernighan88}{117}
+\indexentry{Knuth83}{117}
+\indexentry{Knuth84}{117}
+\indexentry{Knuth84}{117}
+\indexentry{Lamport86}{117}
+\indexentry{Rosovsky90}{117}
+\indexentry{Smith91}{117}
+\indexentry{Strunk79}{117}
+\indexentry{USDOD83}{117}
diff --git a/web/funnelAC/userman/u_manual.log b/web/funnelAC/userman/u_manual.log
new file mode 100644
index 0000000000..309de749d7
--- /dev/null
+++ b/web/funnelAC/userman/u_manual.log
@@ -0,0 +1,188 @@
+This is emTeX (tex386), Version 3.1415 [3c-beta9] (preloaded format=lplain 93.12.31) 15 APR 1994 15:04
+**&lplain u_manual
+(u_manual.tex
+LaTeX Version 2.09 <25 March 1992>
+(d:/emtex/texinput/book.sty
+Standard Document Style `book' <14 Jan 92>.
+(d:/emtex/texinput/bk10.sty)
+\descriptionmargin=\dimen99
+\c@part=\count79
+\c@chapter=\count80
+\c@section=\count81
+\c@subsection=\count82
+\c@subsubsection=\count83
+\c@paragraph=\count84
+\c@subparagraph=\count85
+\c@figure=\count86
+\c@table=\count87
+) (d:/emtex/texinput/titlepag.sty
+Document Style Option `titlepage' -- Released 16 June 1991.
+)
+\@indexfile=\write3
+
+Writing index file u_manual.idx
+(u_manual.aux) [0
+
+
+]
+(u_ch0.tex [1] [2
+
+] (u_manual.toc [3] [4] [5] [6])
+\tf@toc=\write4
+ [7] [8
+
+] [9] [10
+
+]
+Underfull \hbox (badness 10000) in paragraph at lines 137--140
+[]\tenrm Thanks to \tenbf Barry Dwyer[][] \tenrm (\tentt dwyer@cs.adelaide.edu.
+au\tenrm ) and \tenbf Roger Bris-senden[][]
+
+\hbox(7.5+2.5)x426.79134, glue set 5.25278
+.\hbox(0.0+0.0)x0.0
+.\tenrm T
+.\tenrm h
+.\tenrm a
+.\tenrm n
+.etc.
+
+[11] [12
+
+]
+Underfull \hbox (badness 5652) in paragraph at lines 163--169
+[]\tenbf Typesetting: \tenrm This[] doc-u-ment was pre-pared by the au-thor us-
+ing An-drew Trevor-
+
+\hbox(6.94444+1.94444)x426.79134, glue set 3.83969
+.\hbox(0.0+0.0)x0.0
+.\tenbf T
+.\kern-0.31944
+.\tenbf y
+.\tenbf p
+.etc.
+
+
+Underfull \hbox (badness 1117) in paragraph at lines 163--169
+\tenrm row's[][] (\tentt akt150@cscgpo.anu.edu.au\tenrm ) im-ple-men-ta-tion (O
+z-TeX[]) of the T[]X/L[]T[]X\tenbf [Knuth84][]
+
+\hbox(7.5+3.01385)x426.79134, glue set 2.23746
+.\tenrm r
+.\tenrm o
+.\kern-0.27779
+.\tenrm w
+.\tenrm '
+.etc.
+
+) (u_ch1.tex [13] [14
+
+]
+Chapter 1.
+[15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [28] [29]
+[30] [31] [32] [33] [34] [35]
+Underfull \vbox (badness 4108) has occurred while \output is active
+\vbox(682.86613+0.0)x426.79134, glue set 3.45125
+.\glue(\topskip) 3.05556
+.\hbox(6.94444+0.8333)x426.79134, glue set 416.29143fil
+..\hbox(0.0+0.0)x0.0
+..\tentt @
+..\tentt }
+..\hbox(0.0+0.0)x0.0
+..\penalty 10000
+..etc.
+.\penalty 0
+.\glue(\baselineskip) 11.1667
+.\hbox(0.0+0.0)x0.0
+.etc.
+
+ [36]
+[37] [38]) (u_ch2.tex [39] [40
+
+]
+Chapter 2.
+[41] [42] [43] [44] [45] [46] [47] [48] [49] [50] [51] [52] [53] [54] [55]
+[56] [57] [58] [59]
+Underfull \vbox (badness 10000) has occurred while \output is active
+\vbox(682.86613+0.0)x426.79134
+.\glue(\topskip) 3.88889
+.\hbox(6.11111+2.22223)x426.79134, glue set 201.0433fil
+..\hbox(0.0+0.0)x0.0
+..\tentt @
+..\tentt !
+..\penalty 10000
+..\glue 5.24995
+..etc.
+.\penalty 0
+.\glue(\parskip) 0.0
+.\glue(\baselineskip) 2.83333
+.etc.
+
+ [60]
+[61]) (u_ch3.tex [62]
+Chapter 3.
+[63
+
+] [64] [65] [66] [67] [68] [69] [70] [71] [72] [73] [74] [75] [76] [77]
+[78] [79] [80] [81] [82] [83] [84] [85] [86] [87] [88] [89] [90] [91] [92]
+[93] [94] [95] [96] [97] [98] [99]) (u_ch4.tex [100]
+Chapter 4.
+[101
+
+] [102] [103] [104] [105] [106]) (u_ch5.tex [107] [108
+
+]
+Chapter 5.
+[109]
+Underfull \hbox (badness 10000) in paragraph at lines 163--163
+[] []\egtrm To reg-is-ter as a
+
+\hbox(5.46666+1.55556)x376.79134, glue set 71.60066
+.\hbox(0.0+0.0)x15.00002
+.\glue -15.00002
+.\hbox(0.0+0.0)x15.00002
+..\glue 15.00002
+..\glue -20.0
+..\glue -5.0
+..\hbox(0.0+0.0)x20.0, glue set 20.0fil
+...\glue 0.0 plus 1.0fil
+..\glue 5.0
+.\penalty 0
+.\egtrm T
+.etc.
+
+[110] [111] [112]
+Underfull \hbox (badness 10000) in paragraph at lines 330--340
+\tenrm FunnelWeb was
+
+\hbox(6.94444+0.0)x426.79134, glue set 215.12605
+.\tenrm F
+.\kern-0.83334
+.\tenrm u
+.\tenrm n
+.\tenrm n
+.etc.
+
+[113]) (u_cha.tex [114]
+Appendix A.
+[115
+
+] [116]
+Appendix B.
+[117
+
+] (u_manual.sin [118
+
+] [119] [120] [121] [122] [123] [124] [125] [126])
+[127
+
+]) (u_manual.aux) )
+Here is how much of TeX's memory you used:
+ 253 strings out of 56972
+ 2338 string characters out of 225268
+ 43716 words of memory out of 262143
+ 2191 multiletter control sequences out of 10000
+ 20390 words of font info for 77 fonts, out of 81920 for 254
+ 14 hyphenation exceptions out of 607
+ 16i,8n,15p,187b,243s stack positions out of 300i,100n,60p,5000b,1000s
+
+Output written on u_manual.dvi (128 pages, 442412 bytes).
diff --git a/web/funnelAC/userman/u_manual.ps b/web/funnelAC/userman/u_manual.ps
new file mode 100644
index 0000000000..e8b54fd616
--- /dev/null
+++ b/web/funnelAC/userman/u_manual.ps
@@ -0,0 +1,9876 @@
+%!PS-Adobe-2.0
+%%Creator: dvips 5.493 Copyright 1986, 1992 Radical Eye Software
+%%Title: u_manual.dvi
+%%CreationDate: Sat Feb 6 19:08:15 1993
+%%Pages: 128
+%%PageOrder: Ascend
+%%BoundingBox: 0 0 612 792
+%%EndComments
+%DVIPSCommandLine: dvips u_manual
+%DVIPSSource: TeX output 1993.02.06:1904
+%%BeginProcSet: tex.pro
+%!
+/TeXDict 250 dict def TeXDict begin /N{def}def /B{bind def}N /S{exch}N /X{S N}
+B /TR{translate}N /isls false N /vsize 11 72 mul N /@rigin{isls{[0 -1 1 0 0 0]
+concat}if 72 Resolution div 72 VResolution div neg scale isls{Resolution hsize
+-72 div mul 0 TR}if Resolution VResolution vsize -72 div 1 add mul TR matrix
+currentmatrix dup dup 4 get round 4 exch put dup dup 5 get round 5 exch put
+setmatrix}N /@landscape{/isls true N}B /@manualfeed{statusdict /manualfeed
+true put}B /@copies{/#copies X}B /FMat[1 0 0 -1 0 0]N /FBB[0 0 0 0]N /nn 0 N
+/IE 0 N /ctr 0 N /df-tail{/nn 8 dict N nn begin /FontType 3 N /FontMatrix
+fntrx N /FontBBox FBB N string /base X array /BitMaps X /BuildChar{
+CharBuilder}N /Encoding IE N end dup{/foo setfont}2 array copy cvx N load 0 nn
+put /ctr 0 N[}B /df{/sf 1 N /fntrx FMat N df-tail}B /dfs{div /sf X /fntrx[sf 0
+0 sf neg 0 0]N df-tail}B /E{pop nn dup definefont setfont}B /ch-width{ch-data
+dup length 5 sub get}B /ch-height{ch-data dup length 4 sub get}B /ch-xoff{128
+ch-data dup length 3 sub get sub}B /ch-yoff{ch-data dup length 2 sub get 127
+sub}B /ch-dx{ch-data dup length 1 sub get}B /ch-image{ch-data dup type
+/stringtype ne{ctr get /ctr ctr 1 add N}if}B /id 0 N /rw 0 N /rc 0 N /gp 0 N
+/cp 0 N /G 0 N /sf 0 N /CharBuilder{save 3 1 roll S dup /base get 2 index get
+S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx 0 ch-xoff ch-yoff ch-height
+sub ch-xoff ch-width add ch-yoff setcachedevice ch-width ch-height true[1 0 0
+-1 -.1 ch-xoff sub ch-yoff .1 add]{ch-image}imagemask restore}B /D{/cc X dup
+type /stringtype ne{]}if nn /base get cc ctr put nn /BitMaps get S ctr S sf 1
+ne{dup dup length 1 sub dup 2 index S get sf div put}if put /ctr ctr 1 add N}
+B /I{cc 1 add D}B /bop{userdict /bop-hook known{bop-hook}if /SI save N @rigin
+0 0 moveto /V matrix currentmatrix dup 1 get dup mul exch 0 get dup mul add
+.99 lt{/FV}{/RV}ifelse load def pop pop}N /eop{SI restore showpage userdict
+/eop-hook known{eop-hook}if}N /@start{userdict /start-hook known{start-hook}
+if pop /VResolution X /Resolution X 1000 div /DVImag X /IE 256 array N 0 1 255
+{IE S 1 string dup 0 3 index put cvn put}for 65781.76 div /vsize X 65781.76
+div /hsize X}N /p{show}N /RMat[1 0 0 -1 0 0]N /BDot 260 string N /rulex 0 N
+/ruley 0 N /v{/ruley X /rulex X V}B /V{}B /RV statusdict begin /product where{
+pop product dup length 7 ge{0 7 getinterval dup(Display)eq exch 0 4
+getinterval(NeXT)eq or}{pop false}ifelse}{false}ifelse end{{gsave TR -.1 -.1
+TR 1 1 scale rulex ruley false RMat{BDot}imagemask grestore}}{{gsave TR -.1
+-.1 TR rulex ruley scale 1 1 false RMat{BDot}imagemask grestore}}ifelse B /FV{
+gsave transform round exch round exch itransform moveto rulex 0 rlineto 0
+ruley neg rlineto rulex neg 0 rlineto fill grestore}B /a{moveto}B /delta 0 N
+/tail{dup /delta X 0 rmoveto}B /M{S p delta add tail}B /b{S p tail}B /c{-4 M}
+B /d{-3 M}B /e{-2 M}B /f{-1 M}B /g{0 M}B /h{1 M}B /i{2 M}B /j{3 M}B /k{4 M}B
+/w{0 rmoveto}B /l{p -4 w}B /m{p -3 w}B /n{p -2 w}B /o{p -1 w}B /q{p 1 w}B /r{
+p 2 w}B /s{p 3 w}B /t{p 4 w}B /x{0 S rmoveto}B /y{3 2 roll p a}B /bos{/SS save
+N}B /eos{SS restore}B end
+%%EndProcSet
+TeXDict begin 40258437 52099154 1000 300 300
+(/users/onl2/coates/startup/tmp/funnelweb/userman/u_manual.dvi)
+@start /Fa 13 118 df<072008E018E0306030C060C060C060C0C180C188C1884388659038E0
+0D0E7C8D12>97 D<03C00C6018E030E030006000600060004000C0004020604021801E000B0E7C
+8D10>99 D<07001880304060404080FF00C000C000C0008000C040C08043003C000A0E7B8D10>
+101 D<1F0006000600060006000C000C000C000C0019C01A601C201830306030603060306060C0
+60C461846188C098C0E00E177D9612>104 D<030706000000000000384C4C4C8C181818303262
+62243808177D960B>I<3E0C0C0C0C181818183030303060606060C0D0D0D0D06007177C9609>
+108 D<387044984708460C8C180C180C180C18183018311861186230263038100E7D8D14>110
+D<1C702288230C230C460C060C060C060C0C180C180C100C301A601B8018001800300030003000
+FC000E147E8D12>112 D<072008A018E0306030C060C060C060C0C180C180C180438067003B00
+030003000600060006003F800B147C8D10>I<38F04518463846308C000C000C000C0018001800
+18001800300030000D0E7D8D0F>I<07800C4018E018E038001E001F8007C000C060C0E0C0C180
+C3003E000B0E7D8D0F>I<030003000600060006000600FF800C000C000C001800180018001800
+300031003100310032001C0009147D930C>I<1C0826184618461886300C300C300C3018601862
+1862186208E407380F0E7D8D13>I E /Fb 11 115 df<07E01FF03838701C701C781C7E1C7FB8
+3FF01FF00FF83BFC70FEE03EE01EE00EE00EF00C78183FF00FE00F157E9414>56
+D<FFF83FE0FFF83FE00F800E000F801C000F8030000F8060000F81C0000F8380000F8700000F8F
+00000F9F00000FBF80000FE7C0000FC7C0000F83E0000F81F0000F81F8000F80F8000F807C000F
+803E000F803F00FFF8FFE0FFF8FFE01B177E9620>75 D<FEFEFEE0E0E0E0E0E0E0E0E0E0E0E0E0
+E0E0E0E0E0E0E0E0E0E0E0E0E0E0FEFEFE07217D980B>91 D<FEFEFE0E0E0E0E0E0E0E0E0E0E0E
+0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0EFEFEFE072180980B>93 D<0FE0003838003C1C003C1E00
+181E00001E0000FE000F9E003C1E00781E00F01E00F01E00F01E00786FC01F87C0120F7F8E14>
+97 D<07F01C18380C78067007F007F007FFFFF000F0007000780038031E0603FC100F7F8E13>
+101 D<0FCF001873803033807038007038007038007038003030001860002FC000200000300000
+3FF8003FFE003FFF00700780E00380E00380E00380700700380E000FF80011167F8E14>103
+D<FC0000FC00003C00003C00003C00003C00003C00003C00003C7C003D8E003E0F003E0F003C0F
+003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F00FF3FC0FF3FC012177E9617>I<38
+7C7C7C3800000000FCFC3C3C3C3C3C3C3C3C3C3C3CFFFF08187F970B>I<FC7C00FD8E003E0F00
+3E0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F00FF3FC0FF3FC0120F7E
+8E17>110 D<F8E0F9383A783A783C303C003C003C003C003C003C003C003C00FF80FF800D0F7E
+8E11>114 D E /Fc 1 111 df<383C0044C6004702004602008E06000C06000C06000C0C00180C
+00180C40181840181880300880300F00120E7F8D15>110 D E /Fd 57 123
+df<387CFEFEFE7C3807077C8610>46 D<0000180000380000380000700000700000E00000E000
+00E00001C00001C0000380000380000380000700000700000700000E00000E00001C00001C0000
+1C0000380000380000700000700000700000E00000E00001C00001C00001C00003800003800007
+00000700000700000E00000E00000E00001C00001C0000380000380000380000700000700000E0
+0000E00000C0000015317DA41C>I<00FE0007FFC00F83E01F01F03E00F83E00F87C007C7C007C
+7C007CFC007CFC007EFC007EFC007EFC007EFC007EFC007EFC007EFC007EFC007EFC007EFC007E
+FC007EFC007E7C007C7C007C7C007C3E00F83E00F81F01F00F83E007FFC000FE0017207E9F1C>
+I<00180000780001F800FFF800FFF80001F80001F80001F80001F80001F80001F80001F80001F8
+0001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F8
+0001F80001F80001F80001F8007FFFE07FFFE013207C9F1C>I<03FC000FFF003C1FC07007E07C
+07F0FE03F0FE03F8FE03F8FE01F87C01F83803F80003F80003F00003F00007E00007C0000F8000
+1F00003E0000380000700000E01801C0180380180700180E00380FFFF01FFFF03FFFF07FFFF0FF
+FFF0FFFFF015207D9F1C>I<00FE0007FFC00F07E01E03F03F03F03F81F83F81F83F81F81F03F8
+1F03F00003F00003E00007C0001F8001FE0001FF000007C00001F00001F80000FC0000FC3C00FE
+7E00FEFF00FEFF00FEFF00FEFF00FC7E01FC7801F81E07F00FFFC001FE0017207E9F1C>I<0000
+E00001E00003E00003E00007E0000FE0001FE0001FE00037E00077E000E7E001C7E00187E00307
+E00707E00E07E00C07E01807E03807E07007E0E007E0FFFFFEFFFFFE0007E00007E00007E00007
+E00007E00007E00007E000FFFE00FFFE17207E9F1C>I<1000201E01E01FFFC01FFF801FFF001F
+FE001FF8001BC00018000018000018000018000019FC001FFF001E0FC01807E01803E00003F000
+03F00003F80003F83803F87C03F8FE03F8FE03F8FC03F0FC03F07007E03007C01C1F800FFF0003
+F80015207D9F1C>I<001F8000FFE003F07007C0F00F01F81F01F83E01F83E01F87E00F07C0000
+7C0000FC0800FC7FC0FCFFE0FD80F0FF00F8FE007CFE007CFC007EFC007EFC007EFC007E7C007E
+7C007E7C007E3C007C3E007C1E00F80F00F00783E003FFC000FF0017207E9F1C>I<6000007800
+007FFFFE7FFFFE7FFFFC7FFFF87FFFF87FFFF0E00060E000C0C00180C00300C00300000600000C
+00001C0000180000380000780000780000F00000F00000F00001F00001F00001F00003F00003F0
+0003F00003F00003F00003F00003F00001E00017227DA11C>I<00FE0003FFC00703E00E00F01C
+00F01C00783C00783E00783F00783F80783FE0F01FF9E01FFFC00FFF8007FFC003FFE007FFF01E
+7FF83C1FFC7807FC7801FEF000FEF0003EF0001EF0001EF0001CF8001C7800383C00381F01F00F
+FFC001FF0017207E9F1C>I<01FE0007FF800F83E01E01F03E00F07C00F87C0078FC007CFC007C
+FC007CFC007EFC007EFC007EFC007E7C00FE7C00FE3E01FE1E037E0FFE7E07FC7E00207E00007C
+00007C1E007C3F00F83F00F83F00F03F01E01E03C01C0F800FFE0003F80017207E9F1C>I<0000
+70000000007000000000F800000000F800000000F800000001FC00000001FC00000003FE000000
+03FE00000003FE00000006FF000000067F0000000E7F8000000C3F8000000C3F800000183FC000
+00181FC00000381FE00000300FE00000300FE00000600FF000006007F00000E007F80000FFFFF8
+0000FFFFF800018001FC00018001FC00038001FE00030000FE00030000FE000600007F00060000
+7F00FFE00FFFF8FFE00FFFF825227EA12A>65 D<FFFFFF8000FFFFFFE00007F001F80007F000FC
+0007F0007E0007F0007E0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F000
+7E0007F000FE0007F000FC0007F003F80007FFFFF00007FFFFF00007F001FC0007F0007E0007F0
+003F0007F0003F8007F0001F8007F0001FC007F0001FC007F0001FC007F0001FC007F0001FC007
+F0001FC007F0003F8007F0003F8007F0007F0007F001FE00FFFFFFF800FFFFFFC00022227EA128
+>I<0003FE0080001FFF818000FF01E38001F8003F8003E0001F8007C0000F800F800007801F80
+0007803F000003803F000003807F000001807E000001807E00000180FE00000000FE00000000FE
+00000000FE00000000FE00000000FE00000000FE00000000FE000000007E000000007E00000180
+7F000001803F000001803F000003801F800003000F8000030007C000060003F0000C0001F80038
+0000FF00F000001FFFC0000003FE000021227DA128>I<FFFFFF8000FFFFFFF00007F003FC0007
+F0007E0007F0003F0007F0001F8007F0000FC007F00007E007F00007E007F00007F007F00003F0
+07F00003F007F00003F007F00003F807F00003F807F00003F807F00003F807F00003F807F00003
+F807F00003F807F00003F807F00003F807F00003F007F00003F007F00003F007F00007E007F000
+07E007F0000FC007F0001F8007F0003F0007F0007E0007F003FC00FFFFFFF000FFFFFF80002522
+7EA12B>I<FFFFFFFCFFFFFFFC07F000FC07F0003C07F0001C07F0000C07F0000E07F0000E07F0
+000607F0180607F0180607F0180607F0180007F0380007F0780007FFF80007FFF80007F0780007
+F0380007F0180007F0180007F0180307F0180307F0000307F0000607F0000607F0000607F0000E
+07F0000E07F0001E07F0003E07F001FCFFFFFFFCFFFFFFFC20227EA125>I<FFFFFFF8FFFFFFF8
+07F001F807F0007807F0003807F0001807F0001C07F0001C07F0000C07F0000C07F0180C07F018
+0C07F0180007F0180007F0380007F0780007FFF80007FFF80007F0780007F0380007F0180007F0
+180007F0180007F0180007F0000007F0000007F0000007F0000007F0000007F0000007F0000007
+F00000FFFFE000FFFFE0001E227EA123>I<0003FE0040001FFFC0C0007F00F1C001F8003FC003
+F0000FC007C00007C00FC00003C01F800003C03F000001C03F000001C07F000000C07E000000C0
+7E000000C0FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE000000
+00FE000FFFFC7E000FFFFC7F00001FC07F00001FC03F00001FC03F00001FC01F80001FC00FC000
+1FC007E0001FC003F0001FC001FC003FC0007F80E7C0001FFFC3C00003FF00C026227DA12C>I<
+FFFF83FFFEFFFF83FFFE07F0001FC007F0001FC007F0001FC007F0001FC007F0001FC007F0001F
+C007F0001FC007F0001FC007F0001FC007F0001FC007F0001FC007F0001FC007F0001FC007FFFF
+FFC007FFFFFFC007F0001FC007F0001FC007F0001FC007F0001FC007F0001FC007F0001FC007F0
+001FC007F0001FC007F0001FC007F0001FC007F0001FC007F0001FC007F0001FC007F0001FC007
+F0001FC0FFFF83FFFEFFFF83FFFE27227EA12C>I<FFFFE0FFFFE003F80003F80003F80003F800
+03F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F800
+03F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F800
+FFFFE0FFFFE013227FA115>I<FFFFE000FFFFE00007F0000007F0000007F0000007F0000007F0
+000007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F0000007
+F0000007F0000007F0000007F0000007F0000007F0001807F0001807F0001807F0001807F00038
+07F0003807F0007007F0007007F000F007F001F007F007F0FFFFFFF0FFFFFFF01D227EA122>76
+D<FFF000000FFFFFF800001FFF07F800001FE006FC000037E006FC000037E006FC000037E0067E
+000067E0067E000067E0063F0000C7E0063F0000C7E0061F800187E0061F800187E0060FC00307
+E0060FC00307E0060FC00307E00607E00607E00607E00607E00603F00C07E00603F00C07E00601
+F81807E00601F81807E00601F81807E00600FC3007E00600FC3007E006007E6007E006007E6007
+E006003FC007E006003FC007E006001F8007E006001F8007E006001F8007E006000F0007E0FFF0
+0F00FFFFFFF00600FFFF30227EA135>I<FFF8001FFEFFFC001FFE07FC0000C007FE0000C006FF
+0000C0067F8000C0063FC000C0061FE000C0060FE000C0060FF000C00607F800C00603FC00C006
+01FE00C00600FE00C00600FF00C006007F80C006003FC0C006001FE0C006000FF0C0060007F0C0
+060007F8C0060003FCC0060001FEC0060000FFC00600007FC00600007FC00600003FC00600001F
+C00600000FC006000007C006000003C006000003C0FFF00001C0FFF00000C027227EA12C>I<00
+07FC0000003FFF800000FC07E00003F001F80007E000FC000FC0007E001F80003F001F80003F00
+3F00001F803F00001F807F00001FC07E00000FC07E00000FC0FE00000FE0FE00000FE0FE00000F
+E0FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE07E00000FC07F0000
+1FC07F00001FC03F00001F803F80003F801F80003F000FC0007E0007E000FC0003F001F80000FC
+07E000003FFF80000007FC000023227DA12A>I<FFFFFF00FFFFFFE007F007F007F001FC07F000
+FC07F0007E07F0007E07F0007F07F0007F07F0007F07F0007F07F0007F07F0007E07F0007E07F0
+00FC07F001FC07F007F007FFFFE007FFFF0007F0000007F0000007F0000007F0000007F0000007
+F0000007F0000007F0000007F0000007F0000007F0000007F0000007F00000FFFF8000FFFF8000
+20227EA126>I<0007FC0000003FFF800000FC07E00003F001F80007E000FC000FC0007E001F80
+003F001F80003F003F00001F803F00001F807F00001FC07E00000FC07E00000FC0FE00000FE0FE
+00000FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE0
+7E00000FC07F00001FC07F00001FC03F00001F803F81F03F801F83F83F000FC70C7E0007E606FC
+0003F607F80000FF07E000003FFF80000007FF80200000038020000003C020000003E0E0000003
+FFE0000001FFC0000001FFC0000000FFC0000000FF800000007F000000001E00232C7DA12A>I<
+FFFFFE0000FFFFFFC00007F007F00007F001F80007F000FC0007F0007E0007F0007F0007F0007F
+0007F0007F0007F0007F0007F0007F0007F0007F0007F0007E0007F000FC0007F001F80007F007
+F00007FFFFC00007FFFF800007F00FE00007F007F00007F003F80007F001FC0007F001FC0007F0
+01FC0007F001FC0007F001FC0007F001FC0007F001FC0007F001FC0007F001FC0607F000FE0607
+F000FF0CFFFF803FF8FFFF800FF027227EA12A>I<01FC0407FF8C1F03FC3C007C7C003C78001C
+78001CF8000CF8000CFC000CFC0000FF0000FFE0007FFF007FFFC03FFFF01FFFF80FFFFC03FFFE
+003FFE0003FF00007F00003F00003FC0001FC0001FC0001FE0001EE0001EF0003CFC003CFF00F8
+C7FFE080FF8018227DA11F>I<7FFFFFFF807FFFFFFF807E03F80F807803F807807003F8038060
+03F80180E003F801C0E003F801C0C003F800C0C003F800C0C003F800C0C003F800C00003F80000
+0003F800000003F800000003F800000003F800000003F800000003F800000003F800000003F800
+000003F800000003F800000003F800000003F800000003F800000003F800000003F800000003F8
+00000003F800000003F800000003F8000003FFFFF80003FFFFF80022227EA127>I<FFFF803FFC
+FFFF803FFC07F000018007F000018007F000018007F000018007F000018007F000018007F00001
+8007F000018007F000018007F000018007F000018007F000018007F000018007F000018007F000
+018007F000018007F000018007F000018007F000018007F000018007F000018007F000018007F0
+00018007F000018003F000030003F800030001F800060000FC000E00007E001C00003F80F80000
+0FFFE0000001FF000026227EA12B>I<FFFF0FFFF01FFEFFFF0FFFF01FFE0FF000FF0000E007F0
+007F0000C007F0007F0000C003F8007F80018003F8003F80018003FC003F80038001FC003FC003
+0001FC003FC0030000FE007FE0060000FE006FE0060000FF006FE00600007F00C7F00C00007F00
+C7F00C00007F80C7F81C00003F8183F81800003F8183F81800001FC383FC3000001FC301FC3000
+001FE301FC3000000FE600FE6000000FE600FE6000000FF600FFE0000007FC007FC0000007FC00
+7FC0000003FC007F80000003F8003F80000003F8003F80000001F0001F00000001F0001F000000
+00F0001E00000000E0000E00000000E0000E000037227FA13A>87 D<07FC001FFF803F07C03F03
+E03F01E03F01F01E01F00001F00001F0003FF003FDF01FC1F03F01F07E01F0FC01F0FC01F0FC01
+F0FC01F07E02F07E0CF81FF87F07E03F18167E951B>97 D<FF000000FF0000001F0000001F0000
+001F0000001F0000001F0000001F0000001F0000001F0000001F0000001F0000001F0000001F0F
+E0001F3FF8001FF07C001F801E001F001F001F000F801F000F801F000FC01F000FC01F000FC01F
+000FC01F000FC01F000FC01F000FC01F000FC01F000F801F001F801F801F001FC03E001EE07C00
+1C3FF800180FC0001A237EA21F>I<00FF8007FFE00F83F01F03F03E03F07E03F07C01E07C0000
+FC0000FC0000FC0000FC0000FC0000FC00007C00007E00007E00003E00301F00600FC0E007FF80
+00FE0014167E9519>I<0001FE000001FE0000003E0000003E0000003E0000003E0000003E0000
+003E0000003E0000003E0000003E0000003E0000003E0001FC3E0007FFBE000F81FE001F007E00
+3E003E007E003E007C003E00FC003E00FC003E00FC003E00FC003E00FC003E00FC003E00FC003E
+00FC003E007C003E007C003E003E007E001E00FE000F83BE0007FF3FC001FC3FC01A237EA21F>
+I<00FE0007FF800F87C01E01E03E01F07C00F07C00F8FC00F8FC00F8FFFFF8FFFFF8FC0000FC00
+00FC00007C00007C00007E00003E00181F00300FC07003FFC000FF0015167E951A>I<003F8000
+FFC001E3E003C7E007C7E00F87E00F83C00F80000F80000F80000F80000F80000F8000FFFC00FF
+FC000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F
+80000F80000F80000F80000F80000F80007FF8007FF80013237FA211>I<03FC1E0FFF7F1F0F8F
+3E07CF3C03C07C03E07C03E07C03E07C03E07C03E03C03C03E07C01F0F801FFF0013FC00300000
+3000003800003FFF801FFFF00FFFF81FFFFC3800FC70003EF0001EF0001EF0001EF0001E78003C
+7C007C3F01F80FFFE001FF0018217E951C>I<FF000000FF0000001F0000001F0000001F000000
+1F0000001F0000001F0000001F0000001F0000001F0000001F0000001F0000001F07E0001F1FF8
+001F307C001F403C001F803E001F803E001F003E001F003E001F003E001F003E001F003E001F00
+3E001F003E001F003E001F003E001F003E001F003E001F003E001F003E001F003E00FFE1FFC0FF
+E1FFC01A237EA21F>I<1C003E007F007F007F003E001C000000000000000000000000000000FF
+00FF001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F00
+FFE0FFE00B247EA310>I<FF000000FF0000001F0000001F0000001F0000001F0000001F000000
+1F0000001F0000001F0000001F0000001F0000001F0000001F00FF801F00FF801F0038001F0060
+001F01C0001F0380001F0700001F0E00001F1C00001F7E00001FFF00001FCF00001F0F80001F07
+C0001F03E0001F01E0001F01F0001F00F8001F007C001F003C00FFE0FFC0FFE0FFC01A237EA21E
+>107 D<FF00FF001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F
+001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F00FFE0FFE00B237EA2
+10>I<FF07F007F000FF1FFC1FFC001F303E303E001F403E403E001F801F801F001F801F801F00
+1F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F
+001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F00
+1F001F001F00FFE0FFE0FFE0FFE0FFE0FFE02B167E9530>I<FF07E000FF1FF8001F307C001F40
+3C001F803E001F803E001F003E001F003E001F003E001F003E001F003E001F003E001F003E001F
+003E001F003E001F003E001F003E001F003E001F003E001F003E00FFE1FFC0FFE1FFC01A167E95
+1F>I<00FE0007FFC00F83E01E00F03E00F87C007C7C007C7C007CFC007EFC007EFC007EFC007E
+FC007EFC007EFC007E7C007C7C007C3E00F81F01F00F83E007FFC000FE0017167E951C>I<FF0F
+E000FF3FF8001FF07C001F803E001F001F001F001F801F001F801F000FC01F000FC01F000FC01F
+000FC01F000FC01F000FC01F000FC01F000FC01F001F801F001F801F803F001FC03E001FE0FC00
+1F3FF8001F0FC0001F0000001F0000001F0000001F0000001F0000001F0000001F0000001F0000
+00FFE00000FFE000001A207E951F>I<00FE030007FF87000FC1C7001F006F003F003F007E003F
+007E001F007C001F00FC001F00FC001F00FC001F00FC001F00FC001F00FC001F00FC001F007E00
+1F007E001F003E003F001F007F000FC1DF0007FF9F0001FC1F0000001F0000001F0000001F0000
+001F0000001F0000001F0000001F0000001F000000FFE00000FFE01B207E951E>I<FE1F00FE3F
+C01E67E01EC7E01E87E01E87E01F83C01F00001F00001F00001F00001F00001F00001F00001F00
+001F00001F00001F00001F00001F0000FFF000FFF00013167E9517>I<0FF3003FFF00781F0060
+0700E00300E00300F00300FC00007FE0007FF8003FFE000FFF0001FF00000F80C00780C00380E0
+0380E00380F00700FC0E00EFFC00C7F00011167E9516>I<018000018000018000018000038000
+0380000780000780000F80003F8000FFFF00FFFF000F80000F80000F80000F80000F80000F8000
+0F80000F80000F80000F80000F80000F81800F81800F81800F81800F81800F830007C30003FE00
+00F80011207F9F16>I<FF01FE00FF01FE001F003E001F003E001F003E001F003E001F003E001F
+003E001F003E001F003E001F003E001F003E001F003E001F003E001F003E001F003E001F003E00
+1F007E001F00FE000F81BE0007FF3FC001FC3FC01A167E951F>I<FFE01FE0FFE01FE00F800600
+0F8006000FC00E0007C00C0007E01C0003E0180003E0180001F0300001F0300000F8600000F860
+00007CC000007CC000007FC000003F8000003F8000001F0000001F0000000E0000000E00001B16
+7F951E>I<FFE7FF07F8FFE7FF07F81F007800C00F807801800F807C01800F807C018007C07E03
+0007C0DE030007E0DE070003E0DF060003E18F060001F18F0C0001F38F8C0001FB079C0000FB07
+D80000FE03D800007E03F000007E03F000007C01F000003C01E000003800E000001800C0002516
+7F9528>I<FFE07FC0FFE07FC00F801C0007C0380003E0700003F0600001F8C00000F98000007F
+8000003F0000001F0000001F8000003FC0000037C0000063E00000C1F00001C0F8000380FC0007
+007E000E003E00FF80FFE0FF80FFE01B167F951E>I<FFE01FE0FFE01FE00F8006000F8006000F
+C00E0007C00C0007E01C0003E0180003E0180001F0300001F0300000F8600000F86000007CC000
+007CC000007FC000003F8000003F8000001F0000001F0000000E0000000E0000000C0000000C00
+000018000078180000FC380000FC300000FC60000069C000007F8000001F0000001B207F951E>
+I<7FFFF07FFFF07C03E07007C0600FC0E01F80C01F00C03E00C07E0000FC0000F80001F00003F0
+3007E03007C0300F80701F80703F00603E00E07C03E0FFFFE0FFFFE014167E9519>I
+E /Fe 20 118 df<60F0F0600404798312>46 D<FFFEFFFE7FFE0000000000007FFEFFFEFFFE0F
+097F8E12>61 D<03E007F01E18381C30FC71FE739EE30EE70EE70EE70EE70EE30C739C71F830F0
+38001E0E07FE03F80F147F9312>64 D<7FFEFFFEE38EE38EE38E03800380038003800380038003
+800380038003800380038003801FF01FF00F147F9312>84 D<C000E000E0007000700038003800
+1C001C001C000E000E00070007000380038001C001C001C000E000E0007000700038003800180D
+1A7E9612>92 D<3F807FC070E0207000700FF03FF07870E070E070E07070F03FFE1F3E0F0E7E8D
+12>97 D<F800F80038003800380038003BE03FF03C38381C380C380E380E380E380E380C381C3C
+383FF01BC00F147F9312>I<00F800F8003800380038003807B81FF8387870386038E038E038E0
+38E0386038707838781FFE0FBE0F147F9312>100 D<07801FE0387070706038E038FFF8FFF8E0
+006000703838381FF007C00D0E7E8D12>I<F800F800380038003800380039E03FF03E383C3838
+383838383838383838383838383838FE3EFE3E0F147F9312>104 D<06000F000F000600000000
+000000FF00FF000700070007000700070007000700070007000700FFF0FFF00C157D9412>I<FF
+00FF000700070007000700070007000700070007000700070007000700070007000700FFF8FFF8
+0D147E9312>108 D<F71C00FFBE0079E70079E70071C70071C70071C70071C70071C70071C700
+71C70071C700F9E780F8E380110E808D12>I<F9E0FFF03E383C38383838383838383838383838
+38383838FE3EFE3E0F0E7F8D12>I<0F803FE038E07070E038E038E038E038E038F078707038E0
+3FE00F800D0E7E8D12>I<FBE0FFF03C38381C380C380E380E380E380E380C381C3C383FF03BC0
+38003800380038003800FE00FE000F157F8D12>I<FCF8FDFC1F1C1E081E001C001C001C001C00
+1C001C001C00FFC0FFC00E0E7E8D12>114 D<1FF03FF06070C070E0007F003FE00FF000786018
+E018F030FFE0DFC00D0E7E8D12>I<06000E000E000E007FF8FFF80E000E000E000E000E000E00
+0E000E380E380E3807F003C00D127F9112>I<F8F8F8F838383838383838383838383838383838
+383838781FFE0FBE0F0E7F8D12>I E /Ff 6 55 df<0C003C00CC000C000C000C000C000C000C
+000C000C000C000C000C000C00FF8009107E8F0F>49 D<1F00618040C08060C0600060006000C0
+0180030006000C00102020207FC0FFC00B107F8F0F>I<1F00218060C060C000C0008001800F00
+008000400060C060C060804060801F000B107F8F0F>I<0300030007000F000B00130033002300
+4300C300FFE003000300030003001FE00B107F8F0F>I<20803F002C002000200020002F003080
+2040006000600060C06080C061801F000B107F8F0F>I<0780184030C060C06000C000CF00F080
+E040C060C060C060406060C030801F000B107F8F0F>I E /Fg 6 55 df<0C001C00EC000C000C
+000C000C000C000C000C000C000C000C000C000C000C000C000C00FFC00A137D9211>49
+D<1F0060C06060F070F030603000700070006000C001C00180020004000810101020207FE0FFE0
+0C137E9211>I<0FC030707038703870380038003000E00FC0007000380018001C601CF01CF018
+E03860701FC00E137F9211>I<006000E000E00160026006600C600860106020606060C060FFFC
+0060006000600060006003FC0E137F9211>I<60607FC07F8044004000400040004F0070C040E0
+006000700070E070E070E06040E021C01F000C137E9211>I<07C00C201070207060006000C000
+CF00D0C0E060C020C030C030C03040306020206010C00F000C137E9211>I
+E /Fh 60 123 df<00FC000782000E07001C07001C02001C00001C00001C00001C0000FFFF001C
+07001C07001C07001C07001C07001C07001C07001C07001C07001C07001C07001C0700FF1FE013
+17809614>12 D<60C0F1E0F1E070E01020102020402040408040800B0A7F9612>34
+D<1C00183200186180706161E0E09E60E080C0E08180E08180E08300E08300610600610C00320C
+001C18380030640030C20060C200C1C100C1C10181C10181C10301C10601C10600C20C00C21800
+64080038181B7E981D>37 D<60F0F070101020204040040A7D960A>39 D<0102040C1818303070
+606060E0E0E0E0E0E0E0E0E0E060606070303018180C04020108227D980E>I<8040203018180C
+0C0E060606070707070707070707070606060E0C0C18183020408008227E980E>I<60F0F07010
+1020204040040A7D830A>44 D<60F0F06004047D830A>46 D<07C018303018701C600C600CE00E
+E00EE00EE00EE00EE00EE00EE00EE00E600C600C701C30181C7007C00F157F9412>48
+D<03000700FF000700070007000700070007000700070007000700070007000700070007000700
+07007FF00C157E9412>I<0F8030E040708030C038E0384038003800700070006000C001800300
+06000C08080810183FF07FF0FFF00D157E9412>I<0FE030306018701C701C001C001800380060
+07E000300018000C000E000EE00EE00EC00C401830300FE00F157F9412>I<20303FE03FC02400
+20002000200020002F8030E020700030003800384038E038E0388030406020C01F000D157E9412
+>53 D<01F00608080C181C301C70006000E000E3E0EC30F018F00CE00EE00EE00E600E600E300C
+3018183007C00F157F9412>I<40007FFE7FFC7FF8C00880108020004000800080010001000300
+0200060006000E000E000E000E000E0004000F167E9512>I<60F0F06000000000000060F0F060
+040E7D8D0A>58 D<001000003800003800003800005C00005C00005C00008E00008E00008E0001
+070001070003078002038002038007FFC00401C00401C00800E00800E01800E03800F0FE03FE17
+177F961A>65 D<FFFE001C03801C00E01C00601C00701C00701C00701C00701C00E01C01C01FFF
+801FFFC01C00E01C00701C00301C00381C00381C00381C00381C00701C00E01C01C0FFFF001517
+7F9619>I<00FC100383300E00B01C0070380030300030700010600010E00010E00000E00000E0
+0000E00000E00000E000106000107000103000203800201C00400E008003830000FC0014177E96
+19>I<FFFFE01C00E01C00601C00201C00101C00101C00101C04001C04001C04001C0C001FFC00
+1C0C001C04001C04081C04081C00081C00181C00101C00101C00301C00F0FFFFF015177F9618>
+69 D<FFFFE01C00E01C00601C00201C00101C00101C00101C04001C04001C04001C0C001FFC00
+1C0C001C04001C04001C04001C00001C00001C00001C00001C00001C0000FFC00014177F9617>
+I<FF83FE1C00701C00701C00701C00701C00701C00701C00701C00701C00701C00701FFFF01C00
+701C00701C00701C00701C00701C00701C00701C00701C00701C0070FF83FE17177F961A>72
+D<FFE00E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E00
+0E000E000E00FFE00B177F960D>I<FF80FE1C00781C00601C00401C00801C01001C06001C0800
+1C10001C38001C78001C9C001D0E001E0E001C07001C03801C01C01C01C01C00E01C00701C0078
+1C007CFF80FF18177F961B>75 D<FFC0001C00001C00001C00001C00001C00001C00001C00001C
+00001C00001C00001C00001C00001C00001C00201C00201C00201C00601C00601C00401C00C01C
+03C0FFFFC013177F9616>I<FC00FE1E00381F001017001013801011C01011C01010E010107010
+103810103810101C10100E10100F101007101003901001D01001D01000F0100070100030380030
+FE001017177F961A>78 D<00FC000303000E01C01C00E0380070300030700038600018E0001CE0
+001CE0001CE0001CE0001CE0001CE0001C7000387000383000303800701C00E00E01C003030000
+FC0016177E961B>I<FFFE001C03801C00C01C00601C00701C00701C00701C00701C00601C00C0
+1C03801FFE001C00001C00001C00001C00001C00001C00001C00001C00001C00001C0000FF8000
+14177F9618>I<FFFC001C03801C00C01C00E01C00701C00701C00701C00701C00E01C00C01C03
+801FFE001C07801C01C01C00E01C00E01C00E01C00E01C00E01C00E11C00E11C0072FF803C1817
+7F961A>82 D<0FC4302C601C400CC004C004C004E00070007F003FE00FF801FC001C000E000680
+0680068006C004E008D81087E00F177E9614>I<7FFFF860381840380840380880380480380480
+380400380000380000380000380000380000380000380000380000380000380000380000380000
+380000380000380007FFC016177F9619>I<FF07FC3F803C01E00E001C00E004001C00E004001C
+017004000E017008000E017008000E023808000702381000070238100007041C100003841C2000
+03841C200003880E200001C80E400001C80E400001D80F400000F007800000F007800000F00780
+0000600300000060030000006003000021177F9624>87 D<FF83FC1F01E00E0080070080078100
+03820001C20001E40000E800007800007800003800007C00005E00008E00018700010780020380
+0601C00401E00C00E01C00F0FF03FE17177F961A>I<FFC03F801E001C000F0008000700100007
+8030000380200001C0400001E0400000E0800000F1800000710000003A0000003E0000001C0000
+001C0000001C0000001C0000001C0000001C0000001C0000001C0000001C000000FF8000191780
+961A>I<204020404080408081008100E1C0F1E0F1E060C00B0A7B9612>92
+D<1FC0386038301038003803F81E3830387038E039E039E07970FF1F1E100E7F8D12>97
+D<FC00001C00001C00001C00001C00001C00001C00001C00001C00001CF8001F06001C03001C03
+801C01801C01C01C01C01C01C01C01C01C01801C03801C03001B0E0010F8001217809614>I<07
+F01838303870106000E000E000E000E000600070083008183007C00D0E7F8D10>I<007E00000E
+00000E00000E00000E00000E00000E00000E00000E0007CE001C3E00300E00700E00600E00E00E
+00E00E00E00E00E00E00600E00700E00301E00182E0007CFC012177F9614>I<0FC01860303070
+38E018FFF8E000E000E000600070083010183007C00D0E7F8D10>I<03E006700E701C201C001C
+001C001C001C00FF801C001C001C001C001C001C001C001C001C001C001C001C00FF800C178096
+0B>I<0F9E18E33060707070707070306018C02F80200060003FE03FF83FFC600EC006C006C006
+600C38380FE010157F8D12>I<FC00001C00001C00001C00001C00001C00001C00001C00001C00
+001C7C001D8E001E07001C07001C07001C07001C07001C07001C07001C07001C07001C07001C07
+00FF9FE01317809614>I<183C3C1800000000007C1C1C1C1C1C1C1C1C1C1C1C1CFF081780960A>
+I<FC00001C00001C00001C00001C00001C00001C00001C00001C00001C3F801C1C001C18001C20
+001C40001CC0001FE0001CF0001C70001C78001C3C001C1E001C1E00FF3FC01217809613>107
+D<FC001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C00
+1C001C001C00FF80091780960A>I<FC7C1F001D8E63801E0781C01C0701C01C0701C01C0701C0
+1C0701C01C0701C01C0701C01C0701C01C0701C01C0701C01C0701C0FF9FE7F81D0E808D1E>I<
+FC7C001D8E001E07001C07001C07001C07001C07001C07001C07001C07001C07001C07001C0700
+FF9FE0130E808D14>I<07C018303018600C600CE00EE00EE00EE00EE00E701C3018183007C00F
+0E7F8D12>I<FCF8001F0E001C03001C03801C01801C01C01C01C01C01C01C01C01C01801C0380
+1C07001F0E001CF8001C00001C00001C00001C00001C0000FF80001214808D14>I<07C2001C26
+00381E00700E00600E00E00E00E00E00E00E00E00E00600E00700E00301E001C2E0007CE00000E
+00000E00000E00000E00000E00007FC012147F8D13>I<FCF01D381E381C101C001C001C001C00
+1C001C001C001C001C00FF800D0E808D0E>I<1F4060C0C040C040E000FF007F801FC001E08060
+8060C060E0C09F000B0E7F8D0E>I<080008000800180018003800FF8038003800380038003800
+3800380038403840384038401C800F000A147F930E>I<FC3F001C07001C07001C07001C07001C
+07001C07001C07001C07001C07001C07001C0F000E170003E7E0130E808D14>I<FE1F3C0E3C0C
+1C081C080E100E100720072003C003C003C001800180100E7F8D13>I<FCFE7C3838383838101C
+3C201C3C201C4C200E4E400E4E400E8640078780078780070380030300030300160E7F8D19>I<
+FE3F3C181C100E20074007C0038001C002E004F008701838383CFC7F100E7F8D13>I<FE1F3C0E
+3C0C1C081C080E100E100720072003C003C003C00180018001000100E200E200A400780010147F
+8D13>I<FFF0C0E080E081C08380878007000E001E081C08381870107030FFF00D0E7F8D10>I
+E /Fi 57 122 df<0001FF0000001FFFC000007F80F00000FC00F80001F801F80003F803FC0007
+F003FC0007F003FC0007F003FC0007F001F80007F000F00007F000000007F000000007F0000000
+07F0000000FFFFFFFC00FFFFFFFC00FFFFFFFC0007F001FC0007F001FC0007F001FC0007F001FC
+0007F001FC0007F001FC0007F001FC0007F001FC0007F001FC0007F001FC0007F001FC0007F001
+FC0007F001FC0007F001FC0007F001FC0007F001FC0007F001FC0007F001FC0007F001FC0007F0
+01FC0007F001FC007FFF1FFFC07FFF1FFFC07FFF1FFFC0222A7FA926>12
+D<0001FF803FE000001FFFE3FFF800007F80FFF01E0000FE007F801F0001F800FF003F0003F801
+FF007F8007F001FE007F8007F001FE007F8007F001FE007F8007F000FE003F0007F000FE001E00
+07F000FE00000007F000FE00000007F000FE00000007F000FE000000FFFFFFFFFFFF80FFFFFFFF
+FFFF80FFFFFFFFFFFF8007F000FE003F8007F000FE003F8007F000FE003F8007F000FE003F8007
+F000FE003F8007F000FE003F8007F000FE003F8007F000FE003F8007F000FE003F8007F000FE00
+3F8007F000FE003F8007F000FE003F8007F000FE003F8007F000FE003F8007F000FE003F8007F0
+00FE003F8007F000FE003F8007F000FE003F8007F000FE003F8007F000FE003F8007F000FE003F
+807FFF0FFFE3FFF87FFF0FFFE3FFF87FFF0FFFE3FFF8352A7FA939>14 D<1C007F007F00FF80FF
+C0FFC07FC07FC01CC000C000C00180018001800300030006000C001800300020000A157BA913>
+39 D<1C003E007F00FF80FF80FF807F003E001C0009097B8813>46 D<003F800001FFF00007E0
+FC000FC07E001F803F001F803F003F001F803F001F807F001FC07F001FC07F001FC07F001FC0FF
+001FE0FF001FE0FF001FE0FF001FE0FF001FE0FF001FE0FF001FE0FF001FE0FF001FE0FF001FE0
+FF001FE0FF001FE0FF001FE0FF001FE0FF001FE07F001FC07F001FC07F001FC07F001FC03F001F
+803F001F801F803F001F803F000FC07E0007E0FC0001FFF000003F80001B277DA622>48
+D<000E00001E00007E0007FE00FFFE00FFFE00F8FE0000FE0000FE0000FE0000FE0000FE0000FE
+0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE
+0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE007FFFFE7FFFFE7FFF
+FE17277BA622>I<00FF800003FFF0000FFFFC001F03FE003800FF007C007F80FE003FC0FF003F
+C0FF003FE0FF001FE0FF001FE07E001FE03C003FE000003FE000003FC000003FC000007F800000
+7F000000FE000000FC000001F8000003F0000003E00000078000000F0000001E0000003C00E000
+7000E000E000E001C001C0038001C0070001C00FFFFFC01FFFFFC03FFFFFC07FFFFFC0FFFFFF80
+FFFFFF80FFFFFF801B277DA622>I<007F800003FFF00007FFFC000F81FE001F00FF003F80FF00
+3F807F803F807F803F807F801F807F800F007F800000FF000000FF000000FE000001FC000001F8
+000007F00000FFC00000FFF0000001FC0000007E0000007F0000007F8000003FC000003FC00000
+3FE000003FE03C003FE07E003FE0FF003FE0FF003FE0FF003FC0FF007FC07E007F807C007F003F
+01FE001FFFFC0007FFF00000FF80001B277DA622>I<00000E0000001E0000003E0000007E0000
+00FE000000FE000001FE000003FE0000077E00000E7E00000E7E00001C7E0000387E0000707E00
+00E07E0000E07E0001C07E0003807E0007007E000E007E000E007E001C007E0038007E0070007E
+00E0007E00FFFFFFF8FFFFFFF8FFFFFFF80000FE000000FE000000FE000000FE000000FE000000
+FE000000FE000000FE00007FFFF8007FFFF8007FFFF81D277EA622>I<0C0003000F803F000FFF
+FE000FFFFC000FFFF8000FFFF0000FFFE0000FFFC0000FFE00000E0000000E0000000E0000000E
+0000000E0000000E0000000E7FC0000FFFF8000F80FC000E003E000C003F0000001F8000001FC0
+00001FC000001FE000001FE018001FE07C001FE0FE001FE0FE001FE0FE001FE0FE001FC0FC001F
+C078003F8078003F803C007F001F01FE000FFFF80003FFF00000FF80001B277DA622>I<0007F0
+00003FFC0000FFFE0001FC0F0003F01F8007E03F800FC03F801FC03F801F803F803F801F003F80
+00007F0000007F0000007F000000FF000000FF0FC000FF3FF800FF707C00FFC03E00FFC03F00FF
+801F80FF801FC0FF001FC0FF001FE0FF001FE0FF001FE07F001FE07F001FE07F001FE07F001FE0
+3F001FE03F001FC01F801FC01F803F800FC03F0007E07E0003FFFC0000FFF000003FC0001B277D
+A622>I<380000003E0000003FFFFFF03FFFFFF03FFFFFF07FFFFFE07FFFFFC07FFFFF807FFFFF
+0070000E0070000E0070001C00E0003800E0007000E000E0000000E0000001C000000380000007
+800000078000000F0000000F0000001F0000001F0000003F0000003E0000003E0000007E000000
+7E0000007E0000007E000000FE000000FE000000FE000000FE000000FE000000FE000000FE0000
+00FE0000007C0000003800001C297CA822>I<003FC00001FFF00003FFFC0007C07E000F003F00
+1E001F001E000F803E000F803E000F803F000F803F000F803FC00F003FF01F001FFC1E001FFE3C
+000FFFF80007FFE00003FFF80001FFFC0001FFFE0007FFFF000F0FFF801E03FFC03C01FFC07C00
+7FE078001FE0F80007E0F80007E0F80003E0F80003E0F80003E0F80003C07C0003C07C0007803F
+000F001FC03E000FFFFC0003FFF800007FC0001B277DA622>I<007F800001FFF00007FFF8000F
+E0FC001F807E003F803F007F003F007F001F80FF001F80FF001FC0FF001FC0FF001FC0FF001FE0
+FF001FE0FF001FE0FF001FE07F001FE07F003FE03F003FE01F807FE00F807FE007C1DFE003FF9F
+E0007E1FE000001FE000001FC000001FC000001FC000003F801F003F803F803F003F803F003F80
+7E003F807C001F01F8001E03F0000FFFE00007FF800001FE00001B277DA622>I<01FF000FFFE0
+1E03F03801F87801FCFC01FEFE01FEFE01FEFE01FE7C01FE3801FC0003F80007F00007C0000F80
+001F00001E00003C00003800003800007800007000007000007000007000007000007000000000
+00000000000000000000000000000000700000F80001FC0003FE0003FE0003FE0001FC0000F800
+007000172A7CA920>63 D<000003800000000007C00000000007C0000000000FE0000000000FE0
+000000000FE0000000001FF0000000001FF0000000003FF8000000003FF8000000003FF8000000
+0073FC0000000073FC00000000F3FE00000000E1FE00000000E1FE00000001C0FF00000001C0FF
+00000003C0FF80000003807F80000007807FC0000007003FC0000007003FC000000E003FE00000
+0E001FE000001E001FF000001C000FF000001FFFFFF000003FFFFFF800003FFFFFF80000780007
+FC0000700003FC0000700003FC0000E00001FE0000E00001FE0001E00001FF0001C00000FF0001
+C00000FF00FFFE001FFFFEFFFE001FFFFEFFFE001FFFFE2F297EA834>65
+D<00003FF001800003FFFE0380000FFFFF8780003FF007DF8000FF8001FF8001FE00007F8003FC
+00003F8007F000001F800FF000000F801FE0000007801FE0000007803FC0000007803FC0000003
+807FC0000003807F80000003807F8000000000FF8000000000FF8000000000FF8000000000FF80
+00000000FF8000000000FF8000000000FF8000000000FF8000000000FF80000000007F80000000
+007F80000000007FC0000003803FC0000003803FC0000003801FE0000003801FE0000007000FF0
+0000070007F000000E0003FC00001E0001FE00003C0000FF8000F800003FF007E000000FFFFFC0
+000003FFFF000000003FF8000029297CA832>67 D<FFFFFFF80000FFFFFFFF8000FFFFFFFFE000
+03FC001FF80003FC0007FC0003FC0001FE0003FC0000FF0003FC00007F8003FC00003FC003FC00
+001FC003FC00001FE003FC00001FE003FC00000FF003FC00000FF003FC00000FF003FC00000FF0
+03FC00000FF803FC00000FF803FC00000FF803FC00000FF803FC00000FF803FC00000FF803FC00
+000FF803FC00000FF803FC00000FF803FC00000FF803FC00000FF003FC00000FF003FC00000FF0
+03FC00001FE003FC00001FE003FC00001FC003FC00003FC003FC00007F8003FC00007F0003FC00
+01FE0003FC0003FC0003FC001FF800FFFFFFFFE000FFFFFFFF8000FFFFFFFC00002D297DA835>
+I<FFFFFFFFE0FFFFFFFFE0FFFFFFFFE003FC001FE003FC0007F003FC0001F003FC0001F003FC00
+00F003FC00007003FC00007003FC00007003FC01C07803FC01C03803FC01C03803FC01C03803FC
+03C00003FC03C00003FC0FC00003FFFFC00003FFFFC00003FFFFC00003FC0FC00003FC03C00003
+FC03C00003FC01C00E03FC01C00E03FC01C00E03FC01C01C03FC00001C03FC00001C03FC00001C
+03FC00003C03FC00003803FC00007803FC0000F803FC0001F803FC0003F803FC001FF8FFFFFFFF
+F0FFFFFFFFF0FFFFFFFFF027297DA82D>I<FFFFFFFFC0FFFFFFFFC0FFFFFFFFC003FC003FC003
+FC000FE003FC0003E003FC0001E003FC0001E003FC0000E003FC0000E003FC0000E003FC0000F0
+03FC03807003FC03807003FC03807003FC03800003FC07800003FC07800003FC1F800003FFFF80
+0003FFFF800003FFFF800003FC1F800003FC07800003FC07800003FC03800003FC03800003FC03
+800003FC03800003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC
+00000003FC00000003FC000000FFFFFC0000FFFFFC0000FFFFFC000024297DA82B>I<FFFFF01F
+FFFEFFFFF01FFFFEFFFFF01FFFFE03FC00007F8003FC00007F8003FC00007F8003FC00007F8003
+FC00007F8003FC00007F8003FC00007F8003FC00007F8003FC00007F8003FC00007F8003FC0000
+7F8003FC00007F8003FC00007F8003FC00007F8003FC00007F8003FFFFFFFF8003FFFFFFFF8003
+FFFFFFFF8003FC00007F8003FC00007F8003FC00007F8003FC00007F8003FC00007F8003FC0000
+7F8003FC00007F8003FC00007F8003FC00007F8003FC00007F8003FC00007F8003FC00007F8003
+FC00007F8003FC00007F8003FC00007F8003FC00007F8003FC00007F80FFFFF01FFFFEFFFFF01F
+FFFEFFFFF01FFFFE2F297DA836>72 D<FFFFFCFFFFFCFFFFFC01FE0001FE0001FE0001FE0001FE
+0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE
+0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE
+0001FE0001FE0001FE0001FE00FFFFFCFFFFFCFFFFFC16297EA81A>I<FFFFFC0000FFFFFC0000
+FFFFFC000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC0000
+0003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00
+000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC0001C003FC
+0001C003FC0001C003FC0001C003FC0003C003FC00038003FC00038003FC00078003FC00078003
+FC000F8003FC000F8003FC001F8003FC007F8003FC01FF00FFFFFFFF00FFFFFFFF00FFFFFFFF00
+22297DA829>76 D<FFFE0000001FFFC0FFFE0000001FFFC0FFFF0000003FFFC003FF0000003FF0
+0003FF0000003FF00003BF80000077F00003BF80000077F000039FC00000E7F000039FC00000E7
+F000038FE00001C7F000038FE00001C7F0000387F0000387F0000387F0000387F0000387F00003
+87F0000383F8000707F0000383F8000707F0000381FC000E07F0000381FC000E07F0000380FE00
+1C07F0000380FE001C07F0000380FF003807F00003807F003807F00003807F003807F00003803F
+807007F00003803F807007F00003801FC0E007F00003801FC0E007F00003800FE1C007F0000380
+0FE1C007F00003800FE1C007F000038007F38007F000038007F38007F000038003FF0007F00003
+8003FF0007F000038001FE0007F000038001FE0007F000038000FC0007F000038000FC0007F000
+FFFE00FC01FFFFC0FFFE007801FFFFC0FFFE007801FFFFC03A297DA841>I<FFFC0000FFFEFFFE
+0000FFFEFFFF0000FFFE03FF8000038003FF8000038003BFC0000380039FE0000380039FF00003
+80038FF80003800387F80003800383FC0003800381FE0003800381FF0003800380FF8003800380
+7FC0038003803FC0038003801FE0038003800FF0038003800FF80380038007FC0380038003FC03
+80038001FE0380038000FF0380038000FF83800380007FC3800380003FE3800380001FE3800380
+000FF38003800007FB8003800007FF8003800003FF8003800001FF8003800000FF80038000007F
+80038000007F80038000003F80038000001F80038000000F80FFFE00000780FFFE00000380FFFE
+000003802F297DA836>I<0000FFE000000007FFFC0000003FC07F8000007F001FC00001FC0007
+F00003F80003F80007F00001FC000FF00001FE001FE00000FF001FE00000FF003FC000007F803F
+C000007F807FC000007FC07F8000003FC07F8000003FC07F8000003FC0FF8000003FE0FF800000
+3FE0FF8000003FE0FF8000003FE0FF8000003FE0FF8000003FE0FF8000003FE0FF8000003FE0FF
+8000003FE0FF8000003FE07F8000003FC07FC000007FC07FC000007FC03FC000007F803FC00000
+7F801FE00000FF001FE00000FF000FF00001FE0007F00001FC0003F80003F80001FC0007F00000
+FF001FE000003FC07F8000000FFFFE00000000FFE000002B297CA834>I<FFFFFFF800FFFFFFFF
+00FFFFFFFFC003FC003FE003FC000FF003FC0007F803FC0007FC03FC0003FC03FC0003FE03FC00
+03FE03FC0003FE03FC0003FE03FC0003FE03FC0003FE03FC0003FE03FC0003FC03FC0007FC03FC
+0007F803FC000FF003FC003FE003FFFFFF8003FFFFFE0003FC00000003FC00000003FC00000003
+FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC000000
+03FC00000003FC00000003FC00000003FC00000003FC000000FFFFF00000FFFFF00000FFFFF000
+0027297DA82F>I<0000FFE000000007FFFC0000003FC07F8000007F001FC00001FC0007F00003
+F80003F80007F00001FC000FF00001FE001FE00000FF001FE00000FF003FC000007F803FC00000
+7F807FC000007FC07FC000007FC07F8000003FC07F8000003FC0FF8000003FE0FF8000003FE0FF
+8000003FE0FF8000003FE0FF8000003FE0FF8000003FE0FF8000003FE0FF8000003FE0FF800000
+3FE0FF8000003FE07F8000003FC07F8000003FC07FC000007FC03FC000007F803FC000007F801F
+E00000FF001FE01F00FF000FF03F81FE0007F060C1FC0003F8C063F80001FCC077F00000FFC07F
+E000003FE07F8000000FFFFE00000000FFFE00600000003E00600000003F00600000001F81E000
+00001FFFE00000001FFFC00000000FFFC00000000FFFC000000007FF8000000007FF8000000003
+FF0000000001FE000000000078002B357CA834>I<FFFFFFE00000FFFFFFFE0000FFFFFFFF8000
+03FC007FE00003FC000FF00003FC0007F80003FC0007FC0003FC0003FC0003FC0003FE0003FC00
+03FE0003FC0003FE0003FC0003FE0003FC0003FE0003FC0003FE0003FC0003FC0003FC0007F800
+03FC0007F80003FC001FE00003FC007FC00003FFFFFE000003FFFFF0000003FC00FC000003FC00
+7F000003FC003F800003FC003F800003FC001FC00003FC001FE00003FC001FE00003FC001FE000
+03FC001FE00003FC001FE00003FC001FF00003FC001FF00003FC001FF00003FC001FF00703FC00
+1FF80703FC000FF80703FC0007F80EFFFFF003FE1CFFFFF001FFF8FFFFF0003FF030297DA834>
+I<007F806003FFF0E007FFF9E00F807FE01F001FE03E0007E07C0003E07C0001E0FC0001E0FC00
+01E0FC0000E0FE0000E0FE0000E0FF000000FFC000007FFE00007FFFE0003FFFFC001FFFFE000F
+FFFF8007FFFFC003FFFFE000FFFFE00007FFF000007FF000000FF8000007F8000003F8600001F8
+E00001F8E00001F8E00001F8F00001F0F00001F0F80003F0FC0003E0FF0007C0FFE01F80F3FFFF
+00E0FFFE00C01FF0001D297CA826>I<7FFFFFFFFFC07FFFFFFFFFC07FFFFFFFFFC07F803FC03F
+C07E003FC007C078003FC003C078003FC003C070003FC001C0F0003FC001E0F0003FC001E0E000
+3FC000E0E0003FC000E0E0003FC000E0E0003FC000E0E0003FC000E000003FC0000000003FC000
+0000003FC0000000003FC0000000003FC0000000003FC0000000003FC0000000003FC000000000
+3FC0000000003FC0000000003FC0000000003FC0000000003FC0000000003FC0000000003FC000
+0000003FC0000000003FC0000000003FC0000000003FC0000000003FC0000000003FC000000000
+3FC00000007FFFFFE000007FFFFFE000007FFFFFE0002B287EA730>I<FFFFF001FFFCFFFFF001
+FFFCFFFFF001FFFC03FC0000070003FC0000070003FC0000070003FC0000070003FC0000070003
+FC0000070003FC0000070003FC0000070003FC0000070003FC0000070003FC0000070003FC0000
+070003FC0000070003FC0000070003FC0000070003FC0000070003FC0000070003FC0000070003
+FC0000070003FC0000070003FC0000070003FC0000070003FC0000070003FC0000070003FC0000
+070003FC0000070003FC0000070003FC0000070001FC00000E0001FE00000E0000FE00001C0000
+7E00001C00007F00003800003FC000F000000FF007E0000007FFFFC0000001FFFF000000001FF8
+00002E297DA835>I<FFFFF0003FFF80FFFFF0003FFF80FFFFF0003FFF8003FE000001E00001FE
+000001C00001FF000003C00000FF000003800000FF0000038000007F8000070000007F80000700
+00007FC0000F0000003FC0000E0000003FE0001E0000001FE0001C0000001FF0001C0000000FF0
+00380000000FF0003800000007F8007000000007F8007000000007FC00F000000003FC00E00000
+0003FE01E000000001FE01C000000001FF01C000000000FF038000000000FF038000000000FF87
+80000000007F8700000000007FCF00000000003FCE00000000003FFE00000000001FFC00000000
+001FFC00000000000FF800000000000FF800000000000FF8000000000007F0000000000007F000
+0000000003E0000000000003E0000000000001C000000031297FA834>I<FFFFE07FFFF007FFF0
+FFFFE07FFFF007FFF0FFFFE07FFFF007FFF003FC0001FE00001C0003FC0001FE00001C0001FE00
+01FF0000380001FE0000FF0000380001FF0000FF0000780000FF0000FF8000700000FF0000FF80
+00700000FF8000FF8000F000007F8001FFC000E000007F8001FFC000E000003FC003FFE001C000
+003FC0039FE001C000003FE0039FE003C000001FE0070FF0038000001FE0070FF0038000001FF0
+0F0FF0078000000FF00E07F8070000000FF00E07F80700000007F81E07FC0E00000007F81C03FC
+0E00000007FC1C03FC1E00000003FC3801FE1C00000003FC3801FE1C00000001FE7801FF380000
+0001FE7000FF3800000001FE7000FF3800000000FFF000FFF000000000FFE0007FF000000000FF
+E0007FF0000000007FC0003FE0000000007FC0003FE0000000003FC0003FC0000000003F80001F
+C0000000003F80001FC0000000001F80001F80000000001F00000F80000000001F00000F800000
+00000E00000700000044297FA847>I<01FF800007FFF0000F81F8001FC07E001FC07E001FC03F
+000F803F8007003F8000003F8000003F8000003F80000FFF8000FFFF8007FC3F800FE03F803F80
+3F803F003F807F003F80FE003F80FE003F80FE003F80FE003F807E007F807F00DF803F839FFC0F
+FF0FFC01FC03FC1E1B7E9A21>97 D<FFE0000000FFE0000000FFE00000000FE00000000FE00000
+000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE000
+00000FE00000000FE00000000FE1FE00000FE7FF80000FFE07E0000FF801F0000FF000F8000FE0
+00FC000FE000FE000FE0007F000FE0007F000FE0007F000FE0007F800FE0007F800FE0007F800F
+E0007F800FE0007F800FE0007F800FE0007F800FE0007F000FE0007F000FE0007F000FE000FE00
+0FE000FC000FF001F8000FF803F0000F9E07E0000F07FF80000E01FC0000212A7EA926>I<001F
+F80000FFFE0003F01F0007E03F800FC03F801F803F803F801F007F800E007F0000007F000000FF
+000000FF000000FF000000FF000000FF000000FF000000FF0000007F0000007F0000007F800000
+3F8001C01F8001C00FC0038007E0070003F01E0000FFFC00001FE0001A1B7E9A1F>I<00003FF8
+0000003FF80000003FF800000003F800000003F800000003F800000003F800000003F800000003
+F800000003F800000003F800000003F800000003F800000003F800000003F800001FE3F80000FF
+FBF80003F03FF80007E00FF8000FC007F8001F8003F8003F8003F8007F0003F8007F0003F8007F
+0003F800FF0003F800FF0003F800FF0003F800FF0003F800FF0003F800FF0003F800FF0003F800
+7F0003F8007F0003F8007F0003F8003F8003F8001F8003F8000F8007F80007C00FF80003F03BFF
+8000FFF3FF80003FC3FF80212A7EA926>I<003FE00001FFF80003F07E0007C01F000F801F801F
+800F803F800FC07F000FC07F0007C07F0007E0FF0007E0FF0007E0FFFFFFE0FFFFFFE0FF000000
+FF000000FF0000007F0000007F0000007F0000003F8000E01F8000E00FC001C007E0038003F81F
+0000FFFE00001FF0001B1B7E9A20>I<0007F0003FFC00FE3E01F87F03F87F03F07F07F07F07F0
+3E07F00007F00007F00007F00007F00007F00007F000FFFFC0FFFFC0FFFFC007F00007F00007F0
+0007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F0
+0007F00007F00007F00007F00007F0007FFF807FFF807FFF80182A7EA915>I<00FF81F003FFE7
+F80FC1FE7C1F80FC7C1F007C383F007E107F007F007F007F007F007F007F007F007F007F007F00
+7F003F007E001F007C001F80FC000FC1F8001FFFE00018FF800038000000380000003C0000003E
+0000003FFFF8001FFFFF001FFFFF800FFFFFC007FFFFE01FFFFFF03E0007F07C0001F8F80000F8
+F80000F8F80000F8F80000F87C0001F03C0001E01F0007C00FC01F8003FFFE00007FF0001E287E
+9A22>I<FFE0000000FFE0000000FFE00000000FE00000000FE00000000FE00000000FE0000000
+0FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000
+000FE07F00000FE1FFC0000FE787E0000FEE03F0000FF803F0000FF803F8000FF003F8000FF003
+F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE0
+03F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000F
+E003F800FFFE3FFF80FFFE3FFF80FFFE3FFF80212A7DA926>I<07000F801FC03FE03FE03FE01F
+C00F8007000000000000000000000000000000FFE0FFE0FFE00FE00FE00FE00FE00FE00FE00FE0
+0FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE0FFFEFFFEFFFE0F2B7DAA14
+>I<FFE00000FFE00000FFE000000FE000000FE000000FE000000FE000000FE000000FE000000F
+E000000FE000000FE000000FE000000FE000000FE000000FE01FFC0FE01FFC0FE01FFC0FE00780
+0FE00F000FE01E000FE03C000FE078000FE0E0000FE3C0000FE7C0000FEFE0000FFFE0000FFFF0
+000FF3F8000FE3F8000FC1FC000FC0FE000FC07F000FC07F000FC03F800FC01FC00FC00FC00FC0
+0FE0FFFC3FFEFFFC3FFEFFFC3FFE1F2A7EA924>107 D<FFE0FFE0FFE00FE00FE00FE00FE00FE0
+0FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00F
+E00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE0FFFEFFFEFFFE0F2A7DA914>I<FFC07F
+800FF000FFC1FFE03FFC00FFC383F0707E000FC603F8C07F000FCC01F9803F000FD801FF003F80
+0FF001FE003F800FF001FE003F800FE001FC003F800FE001FC003F800FE001FC003F800FE001FC
+003F800FE001FC003F800FE001FC003F800FE001FC003F800FE001FC003F800FE001FC003F800F
+E001FC003F800FE001FC003F800FE001FC003F800FE001FC003F800FE001FC003F800FE001FC00
+3F800FE001FC003F80FFFE1FFFC3FFF8FFFE1FFFC3FFF8FFFE1FFFC3FFF8351B7D9A3A>I<FFC0
+7F0000FFC1FFC000FFC787E0000FCE03F0000FD803F0000FD803F8000FF003F8000FF003F8000F
+E003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F800
+0FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8
+00FFFE3FFF80FFFE3FFF80FFFE3FFF80211B7D9A26>I<003FE00001FFFC0003F07E000FC01F80
+1F800FC03F800FE03F0007E07F0007F07F0007F07F0007F0FF0007F8FF0007F8FF0007F8FF0007
+F8FF0007F8FF0007F8FF0007F8FF0007F87F0007F07F0007F03F800FE03F800FE01F800FC00FC0
+1F8007F07F0001FFFC00003FE0001D1B7E9A22>I<FFE1FE0000FFE7FF8000FFFE07E0000FF803
+F0000FF001F8000FE000FC000FE000FE000FE000FF000FE0007F000FE0007F000FE0007F800FE0
+007F800FE0007F800FE0007F800FE0007F800FE0007F800FE0007F800FE0007F000FE000FF000F
+E000FF000FE000FE000FE001FC000FF001F8000FF803F0000FFE0FE0000FE7FF80000FE1FC0000
+0FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000
+000FE0000000FFFE000000FFFE000000FFFE00000021277E9A26>I<FFC1F0FFC7FCFFCE3E0FD8
+7F0FD87F0FF07F0FF03E0FF01C0FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0
+000FE0000FE0000FE0000FE0000FE0000FE0000FE000FFFF00FFFF00FFFF00181B7E9A1C>114
+D<03FE300FFFF01E03F03800F0700070F00070F00070F80070FC0000FFE0007FFE007FFF803FFF
+E01FFFF007FFF800FFF80003FC0000FC60007CE0003CF0003CF00038F80038FC0070FF01E0F7FF
+C0C1FF00161B7E9A1B>I<00700000700000700000700000F00000F00000F00001F00003F00003
+F00007F0001FFFF0FFFFF0FFFFF007F00007F00007F00007F00007F00007F00007F00007F00007
+F00007F00007F00007F00007F00007F03807F03807F03807F03807F03807F03803F03803F87001
+F86000FFC0001F8015267FA51B>I<FFE03FF800FFE03FF800FFE03FF8000FE003F8000FE003F8
+000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003
+F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE0
+03F8000FE007F80007E007F80007E00FF80003F03BFF8001FFF3FF80003FC3FF80211B7D9A26>
+I<FFFE03FF80FFFE03FF80FFFE03FF8007F000700007F000700007F800F00003F800E00003FC01
+E00001FC01C00001FC01C00000FE03800000FE038000007F070000007F070000007F8F0000003F
+8E0000003FDE0000001FDC0000001FDC0000000FF80000000FF80000000FF800000007F0000000
+07F000000003E000000003E000000001C00000211B7F9A24>I<FFFE7FFC0FFEFFFE7FFC0FFEFF
+FE7FFC0FFE0FE007E000E007F003F001C007F003F001C007F807F803C003F807F8038003F807F8
+038001FC0EFC070001FC0EFC070001FE1EFC0F0000FE1C7E0E0000FE1C7E0E0000FF383F1E0000
+7F383F1C00007F783F3C00003FF01FB800003FF01FB800003FF01FF800001FE00FF000001FE00F
+F000000FC007E000000FC007E000000FC007E00000078003C00000078003C0002F1B7F9A32>I<
+FFFC0FFF00FFFC0FFF00FFFC0FFF0007F003C00003F807800001FC07800000FE0F000000FF1E00
+00007F3C0000003FF80000001FF00000000FF00000000FF000000007F000000007F80000000FFC
+0000001FFE0000001EFE0000003C7F000000783F800000F01FC00001E01FE00001C00FE00003C0
+07F000FFF01FFF80FFF01FFF80FFF01FFF80211B7F9A24>I<FFFE03FF80FFFE03FF80FFFE03FF
+8007F000700007F000700007F800F00003F800E00003FC01E00001FC01C00001FC01C00000FE03
+800000FE038000007F070000007F070000007F8F0000003F8E0000003FDE0000001FDC0000001F
+DC0000000FF80000000FF80000000FF800000007F000000007F000000003E000000003E0000000
+01C000000001C000000003800000000380000038078000007C07000000FE0F000000FE0E000000
+FE1E000000FE3C0000007C780000003FE00000000FC000000021277F9A24>I
+E /Fj 18 121 df<00001E000000003E00000000FE00000003FE0000003FFE0000FFFFFE0000FF
+FFFE0000FFFFFE0000FFCFFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000
+000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE00
+00000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE
+0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000F
+FE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE000000
+0FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE00007FFFFFFFC0
+7FFFFFFFC07FFFFFFFC07FFFFFFFC0223879B731>49 D<0007FE0000007FFFE00001FFFFF80003
+FFFFFE0007F01FFF000F8007FF801F0001FFC03E0000FFE07F8000FFF07FC0007FF0FFE0007FF8
+FFF0003FF8FFF0003FFCFFF0003FFCFFF0003FFCFFF0003FFC7FE0003FFC3FC0003FFC1F80003F
+FC0000003FFC0000003FF80000007FF80000007FF00000007FF0000000FFE0000000FFC0000001
+FF80000001FF00000003FE00000007FC00000007F80000000FF00000001FC00000003F80000000
+7F00000000FC00000001F800000001F0003C0003E0003C0007C0003C000F000078001E00007800
+3C00007800780000F800F00000F801FFFFFFF803FFFFFFF007FFFFFFF00FFFFFFFF01FFFFFFFF0
+3FFFFFFFF07FFFFFFFF0FFFFFFFFF0FFFFFFFFE0FFFFFFFFE0FFFFFFFFE026387BB731>I<0003
+FF8000001FFFF000007FFFFE0000FE03FF0001F000FF8003C000FFC00780007FE00FF0007FF00F
+F8007FF01FFC007FF81FFE007FF81FFE007FF81FFE007FF81FFE007FF81FFE007FF80FFC007FF0
+07F8007FF003F0007FF0000000FFE0000000FFC0000001FF80000001FF00000003FE00000007FC
+0000001FF000000FFFC000000FFF8000000FFFF800000003FE00000000FF800000007FE0000000
+3FF00000003FF80000003FFC0000001FFC0000001FFE0000001FFE0200001FFF1FC0001FFF3FE0
+001FFF7FF0001FFF7FF0001FFFFFF8001FFFFFF8001FFFFFF8001FFEFFF8001FFEFFF0001FFE7F
+F0003FFC7FE0003FFC3FC0003FF81F80007FF01FE000FFE007FC03FFC003FFFFFF0001FFFFFE00
+003FFFF0000007FF800028397CB731>I<00000007C0000000000FC0000000000FC0000000001F
+C0000000003FC0000000007FC000000000FFC000000000FFC000000001FFC000000003FFC00000
+0007FFC00000000FFFC00000000FFFC00000001EFFC00000003CFFC00000007CFFC0000000F8FF
+C0000000F0FFC0000001E0FFC0000003C0FFC0000007C0FFC000000F80FFC000000F00FFC00000
+1E00FFC000003C00FFC000007C00FFC00000F800FFC00000F000FFC00001E000FFC00003C000FF
+C00007C000FFC0000F8000FFC0000F0000FFC0001E0000FFC0003C0000FFC0007C0000FFC000F8
+0000FFC000FFFFFFFFFFC0FFFFFFFFFFC0FFFFFFFFFFC0FFFFFFFFFFC0000001FFC000000001FF
+C000000001FFC000000001FFC000000001FFC000000001FFC000000001FFC000000001FFC00000
+0001FFC000000001FFC0000007FFFFFFC00007FFFFFFC00007FFFFFFC00007FFFFFFC02A377DB6
+31>I<04000000C00F800007C00FF8007FC00FFFFFFF800FFFFFFF000FFFFFFE000FFFFFFC000F
+FFFFF8000FFFFFF0000FFFFFE0000FFFFF80000FFFFE00000FFFF800000F800000000F80000000
+0F800000000F800000000F800000000F800000000F800000000F800000000F81FF00000F8FFFE0
+000FBFFFF8000FFE03FE000FF000FF000FC000FF800F80007FC00F00007FE00700007FF0000000
+3FF00000003FF80000003FF80000003FF80000003FFC0000003FFC0600003FFC1F80003FFC3FC0
+003FFC7FE0003FFCFFE0003FFCFFF0003FFCFFF0003FFCFFF0003FF8FFE0003FF8FFE0003FF87F
+C0007FF07F00007FF03C00007FE03E0000FFC01F0000FF800FC003FF0007F00FFE0003FFFFFC00
+01FFFFF000007FFFC000000FFC000026397BB731>I<00000001F80000000000000001F8000000
+0000000003FC0000000000000003FC0000000000000007FE0000000000000007FE000000000000
+0007FE000000000000000FFF000000000000000FFF000000000000001FFF800000000000001FFF
+800000000000001FFF800000000000003FFFC00000000000003FFFC00000000000007FFFE00000
+000000007DFFE00000000000007DFFE0000000000000FDFFF0000000000000F8FFF00000000000
+01F8FFF8000000000001F07FF8000000000001F07FF8000000000003F07FFC000000000003E03F
+FC000000000007E03FFE000000000007C01FFE00000000000FC01FFF00000000000F801FFF0000
+0000000F800FFF00000000001F800FFF80000000001F0007FF80000000003F0007FFC000000000
+3E0003FFC0000000003E0003FFC0000000007E0003FFE0000000007C0001FFE000000000FC0001
+FFF000000000F80000FFF000000000F80000FFF000000001FFFFFFFFF800000001FFFFFFFFF800
+000003FFFFFFFFFC00000003FFFFFFFFFC00000003E000003FFC00000007E000003FFE00000007
+C000001FFE0000000FC000001FFF0000000F8000000FFF0000001F8000000FFF8000001F000000
+0FFF8000001F00000007FF8000003F00000007FFC000003E00000003FFC000007E00000003FFE0
+0000FF00000001FFE000FFFFFC0001FFFFFFF0FFFFFC0001FFFFFFF0FFFFFC0001FFFFFFF0FFFF
+FC0001FFFFFFF0443B7DBA4B>65 D<FFFFFFFFFFC00000FFFFFFFFFFFC0000FFFFFFFFFFFF0000
+FFFFFFFFFFFFC000007FF00001FFF000007FF000007FF800007FF000003FFC00007FF000001FFE
+00007FF000001FFE00007FF000000FFF00007FF000000FFF00007FF0000007FF80007FF0000007
+FF80007FF0000007FF80007FF0000007FF80007FF0000007FF80007FF0000007FF80007FF00000
+07FF80007FF0000007FF00007FF000000FFF00007FF000000FFF00007FF000001FFE00007FF000
+001FFC00007FF000003FF800007FF000007FF000007FF00001FFE000007FF0000FFF8000007FFF
+FFFFFE0000007FFFFFFFFE0000007FFFFFFFFFC000007FF000007FF000007FF000001FFC00007F
+F000000FFE00007FF0000007FF00007FF0000007FF80007FF0000003FFC0007FF0000003FFC000
+7FF0000001FFE0007FF0000001FFE0007FF0000001FFF0007FF0000001FFF0007FF0000001FFF0
+007FF0000001FFF0007FF0000001FFF0007FF0000001FFF0007FF0000001FFF0007FF0000001FF
+F0007FF0000001FFE0007FF0000003FFE0007FF0000003FFC0007FF0000007FFC0007FF000000F
+FF80007FF000001FFF00007FF000003FFE00007FF00001FFFC00FFFFFFFFFFFFF800FFFFFFFFFF
+FFE000FFFFFFFFFFFF8000FFFFFFFFFFF800003C3B7CBA46>I<0000001FFF000030000001FFFF
+E000F000000FFFFFFC01F000007FFFFFFE03F00001FFFE007F87F00003FFE0000FCFF0000FFF00
+0003FFF0001FFC000001FFF0003FF80000007FF0007FF00000003FF000FFC00000003FF001FFC0
+0000001FF003FF800000000FF007FF000000000FF00FFF0000000007F00FFE0000000007F01FFE
+0000000003F01FFE0000000003F03FFC0000000003F03FFC0000000001F03FFC0000000001F07F
+FC0000000001F07FF80000000001F07FF80000000000007FF8000000000000FFF8000000000000
+FFF8000000000000FFF8000000000000FFF8000000000000FFF8000000000000FFF80000000000
+00FFF8000000000000FFF8000000000000FFF8000000000000FFF8000000000000FFF800000000
+00007FF80000000000007FF80000000000007FF80000000000007FFC0000000000F03FFC000000
+0000F03FFC0000000000F03FFC0000000000F01FFE0000000000F01FFE0000000001E00FFE0000
+000001E00FFF0000000001E007FF0000000003C003FF8000000003C001FFC0000000078000FFE0
+0000000F00007FF00000001F00003FF80000003E00001FFC0000007C00000FFF000001F8000003
+FFE00007F0000001FFFE003FC00000007FFFFFFF000000000FFFFFFC0000000001FFFFF0000000
+00001FFF0000003C3D7BBB47>I<001FFF00000001FFFFF0000003FFFFFC000007F007FE00000F
+F801FF00001FFC00FF80001FFC007FC0001FFC007FE0001FFC003FE0000FF8003FF0000FF8003F
+F00007F0003FF00001C0003FF0000000003FF0000000003FF0000000003FF0000000FFFFF00000
+0FFFFFF000007FF83FF00001FF803FF00007FE003FF0000FF8003FF0001FF0003FF0003FE0003F
+F0007FE0003FF0007FE0003FF000FFC0003FF000FFC0003FF000FFC0003FF000FFC0003FF000FF
+C0007FF0007FE0007FF0007FE000DFF0003FF0039FF8001FFC0F0FFFF007FFFE0FFFF001FFFC07
+FFF0003FE000FFF02C267DA530>97 D<000000003FC00000003FFFC00000003FFFC00000003FFF
+C00000003FFFC000000001FFC000000000FFC000000000FFC000000000FFC000000000FFC00000
+0000FFC000000000FFC000000000FFC000000000FFC000000000FFC000000000FFC000000000FF
+C000000000FFC000000000FFC000000000FFC000000000FFC000000000FFC00000FFC0FFC0000F
+FFF8FFC0003FFFFEFFC000FFE03FFFC001FF000FFFC003FE0003FFC007FC0001FFC00FF80000FF
+C01FF00000FFC01FF00000FFC03FF00000FFC03FE00000FFC07FE00000FFC07FE00000FFC07FE0
+0000FFC0FFE00000FFC0FFE00000FFC0FFE00000FFC0FFE00000FFC0FFE00000FFC0FFE00000FF
+C0FFE00000FFC0FFE00000FFC0FFE00000FFC07FE00000FFC07FE00000FFC07FE00000FFC03FF0
+0000FFC03FF00000FFC01FF00000FFC00FF80001FFC007F80003FFC003FC0007FFC001FE000FFF
+E000FFC07EFFFF003FFFFCFFFF000FFFF0FFFF0001FF80FFFF303C7DBB37>100
+D<0001FFC000000FFFF800003FFFFE0000FF80FF0001FE003F8007FC001FC00FF8000FE00FF800
+0FF01FF00007F03FF00007F83FF00007F87FE00007F87FE00003FC7FE00003FC7FE00003FCFFE0
+0003FCFFFFFFFFFCFFFFFFFFFCFFFFFFFFFCFFE0000000FFE0000000FFE0000000FFE00000007F
+E00000007FE00000007FE00000003FE00000003FF000003C1FF000003C1FF000003C0FF8000078
+07FC0000F803FE0001F001FF0007E000FFC03FC0003FFFFF000007FFFC000000FFE00026267DA5
+2D>I<00FF00000000FFFF00000000FFFF00000000FFFF00000000FFFF0000000007FF00000000
+03FF0000000003FF0000000003FF0000000003FF0000000003FF0000000003FF0000000003FF00
+00000003FF0000000003FF0000000003FF0000000003FF0000000003FF0000000003FF00000000
+03FF0000000003FF0000000003FF0000000003FF007FC00003FF01FFF80003FF07FFFC0003FF0F
+03FE0003FF1C01FF0003FF3001FF8003FF6000FF8003FFE000FFC003FFC000FFC003FF8000FFC0
+03FF8000FFC003FF8000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF00
+00FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC0
+03FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF00
+00FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC0FFFFFC3FFFFFFFFFFC3FFFFF
+FFFFFC3FFFFFFFFFFC3FFFFF303C7CBB37>104 D<01F00007FC000FFE000FFE001FFF001FFF00
+1FFF001FFF001FFF000FFE000FFE0007FC0001F000000000000000000000000000000000000000
+00000000000000000000000000FF00FFFF00FFFF00FFFF00FFFF0007FF0003FF0003FF0003FF00
+03FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF00
+03FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF00FFFFF8
+FFFFF8FFFFF8FFFFF8153D7DBC1B>I<00FE007FC000FFFE01FFF800FFFE07FFFC00FFFE0F03FE
+00FFFE1C01FF0007FE3001FF8003FE6000FF8003FEE000FFC003FEC000FFC003FF8000FFC003FF
+8000FFC003FF8000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FF
+C003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF
+0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FF
+C003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC0FFFFFC3FFFFFFFFFFC3FFFFFFFFF
+FC3FFFFFFFFFFC3FFFFF30267CA537>110 D<00FF01FF8000FFFF0FFFF000FFFF3FFFFC00FFFF
+FE03FF00FFFFF000FF8003FFC0007FC003FF80003FE003FF00003FF003FF00001FF803FF00001F
+FC03FF00000FFC03FF00000FFE03FF00000FFE03FF000007FE03FF000007FF03FF000007FF03FF
+000007FF03FF000007FF03FF000007FF03FF000007FF03FF000007FF03FF000007FF03FF000007
+FF03FF000007FE03FF000007FE03FF00000FFE03FF00000FFC03FF00000FFC03FF00001FF803FF
+00001FF803FF00003FF003FF80003FE003FFC0007FC003FFF001FF8003FFFC07FF0003FF3FFFFC
+0003FF0FFFF00003FF01FF000003FF0000000003FF0000000003FF0000000003FF0000000003FF
+0000000003FF0000000003FF0000000003FF0000000003FF0000000003FF0000000003FF000000
+0003FF0000000003FF00000000FFFFFC000000FFFFFC000000FFFFFC000000FFFFFC0000003037
+7DA537>112 D<00FE03F000FFFE0FFE00FFFE1FFF00FFFE3C3F80FFFE707FC007FE60FFE003FE
+E0FFE003FEC0FFE003FFC0FFE003FF807FC003FF807FC003FF803F8003FF800E0003FF00000003
+FF00000003FF00000003FF00000003FF00000003FF00000003FF00000003FF00000003FF000000
+03FF00000003FF00000003FF00000003FF00000003FF00000003FF00000003FF00000003FF0000
+0003FF00000003FF00000003FF00000003FF000000FFFFFE0000FFFFFE0000FFFFFE0000FFFFFE
+000023267DA529>114 D<0007800000078000000780000007800000078000000F8000000F8000
+000F8000000F8000001F8000001F8000003F8000003F8000007F800000FF800001FF800007FF80
+001FFFFFF0FFFFFFF0FFFFFFF0FFFFFFF001FF800001FF800001FF800001FF800001FF800001FF
+800001FF800001FF800001FF800001FF800001FF800001FF800001FF800001FF800001FF800001
+FF800001FF800001FF800001FF800001FF803C01FF803C01FF803C01FF803C01FF803C01FF803C
+01FF803C01FF803C00FF807800FFC078007FC070003FE0E0001FFFC00007FF800001FF001E377E
+B626>116 D<FFFFF007FFFCFFFFF007FFFCFFFFF007FFFCFFFFF007FFFC01FF8000FC0000FFC0
+00F80000FFE001F000007FF003E000003FF007C000001FF80FC000000FFC1F8000000FFE1F0000
+0007FF3E00000003FFFC00000001FFF800000000FFF0000000007FE0000000007FF0000000003F
+F8000000001FF8000000001FFC000000003FFE000000007FFF00000000FBFF80000001F9FF8000
+0003F0FFC0000003E07FE0000007C07FF000000F803FF800001F001FFC00003E000FFC00007C00
+07FE0000FC0003FF0001FC0003FF80FFFF801FFFFEFFFF801FFFFEFFFF801FFFFEFFFF801FFFFE
+2F267EA534>120 D E /Fk 1 98 df<00200000700000700000700000B80000B80000B800011C
+00011C00011C00020E00020E0004070004070007FF000803800803800803801801C03803C0FE0F
+F815157F9419>97 D E /Fl 94 127 df<60F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0600000000060
+F0F0600419779816>33 D<E038F078F078F078F078F078F078F078E038E03860300D0B7C9816>
+I<0387000387000387000387000387000387007FFFC0FFFFE0FFFFE0070E00070E00070E000E1C
+000E1C000E1C000E1C00FFFFE0FFFFE07FFFC01C38001C38001C38001C38001C38001C38001319
+7F9816>I<00C00001C00001C00001C00007F0001FFC003FFE007DCF0071C780E1C380E1C780E1
+C780F1C30079C0003FC0001FF00007FC0001FE0001CF0001C70061C380F1C380F1C380E1C38071
+C70079DF003FFE001FF80007E00001C00001C00000C00011207E9C16>I<3801807C03807C0380
+EE0700EE0700EE0E00EE0E00EE0E00EE1C007C1C007C380038380000700000700000700000E000
+00E00001C00001C00001C0000380000383800707C00707C00E0EE00E0EE00E0EE01C0EE01C0EE0
+3807C03807C018038013207F9C16>I<03800007E0000FE0001E70001C70001C70001C70001C77
+E01CE7E01DE7E00FC7000F8E000F0E001E0E003F1C007F1C00739C00E3F800E1F800E0F1C0E0F1
+C071F9C07FFFC03F9F801E070013197F9816>I<30787C3C1C1C1C1C3878F0E040060D789816>I<
+00E001E0038007000E001C001C0038003800700070007000E000E000E000E000E000E000E000E0
+00E000700070007000380038001C001C000E000700038001E000E00B217A9C16>I<C000E00070
+0038001C000E000E000700070003800380038001C001C001C001C001C001C001C001C001C00380
+03800380070007000E000E001C0038007000E000C0000A217B9C16>I<01C00001C00001C00001
+C00071C700F9CF807FFF001FFC0007F00007F0001FFC007FFF00F9CF8071C70001C00001C00001
+C00001C00011127E9516>I<01C00001C00001C00001C00001C00001C00001C00001C000FFFF80
+FFFF80FFFF8001C00001C00001C00001C00001C00001C00001C00001C00011137E9516>I<387C
+7E7E3E0E1E1C78F060070B798416>I<FFFF80FFFF80FFFF8011037E8D16>I<70F8F8F870050578
+8416>I<000180000380000380000700000700000E00000E00001C00001C000038000038000070
+0000700000E00000E00001C00001C0000380000380000700000700000E00000E00001C00001C00
+00380000380000700000700000E00000E00000C0000011207E9C16>I<03E0000FF8001FFC001E
+3C00380E00780F00700700700700E00380E00380E00380E00380E00380E00380E00380E00380F0
+0780700700700700780F003C1E001E3C001FFC000FF80003E00011197E9816>I<018003800380
+07800F807F80FF807380038003800380038003800380038003800380038003800380038003807F
+F87FFC7FF80E197C9816>I<07E0001FF8003FFC00783E00E00700F00780F00380600380000380
+000380000700000700000E00001C0000380000700000E00001C0000380000F00001E0380380380
+7FFF80FFFF807FFF8011197E9816>I<07E0001FF8003FFC00781E007807003007000007000007
+00000E00003E0007FC0007F00007FC00001E00000700000300000380000380600380F00380E007
+00781E003FFC001FF80007E00011197E9816>I<007C0000FC0000DC0001DC00039C00039C0007
+1C000F1C000E1C001E1C003C1C00381C00781C00F01C00FFFFE0FFFFE0FFFFE0001C00001C0000
+1C00001C00001C0001FFC001FFC001FFC013197F9816>I<3FFE003FFE003FFE00380000380000
+3800003800003800003800003800003BF0003FFC003FFE003C0F00300700000380000380600380
+F00380F00380E00700781E003FFC001FF80007E00011197E9816>I<00F80003FC0007FE000F07
+001C0F00380F00780600700000700000E3F800EFFC00FFFE00F80F00F00700F00380E00380E003
+807003807003807007803807003C1E001FFC000FF80003E00011197E9816>I<E00000FFFF80FF
+FF80FFFF80E00F00E01E00001C0000380000780000700000E00000E00001C00001C00001C00003
+8000038000038000038000070000070000070000070000070000070000070000111A7E9916>I<
+07F0001FFC003FFE007C1F00F00780E00380E00380E003807007007C1F001FFC0007F0001FFC00
+3C1E00700700F00780E00380E00380E00380F007807007007C1F003FFE001FFC0007F00011197E
+9816>I<03E0000FF8001FFC003C1E00700E00700700E00700E00780E00380E00380E007807007
+80780F803FFF801FFB800FE380000700000700300700780E00781C007078003FF0001FE0000F80
+0011197E9816>I<70F8F8F870000000000000000070F8F8F8700512789116>I<387C7C7C380000
+00000000000038787C7C3C1C1C3870E0400618799116>I<000180000780001F80003E0000F800
+01F00007C0000F80003E0000FC0000F00000FC00003E00000F800007C00001F00000F800003E00
+001F8000078000018011157E9616>I<7FFF00FFFF80FFFF800000000000000000000000000000
+00FFFF80FFFF807FFF00110B7E9116>I<C00000F00000FC00003E00000F800007C00001F00000
+F800003E00001F80000780001F80003E0000F80001F00007C0000F80003E0000FC0000F00000C0
+000011157E9616>I<0FE03FF87FFCF01EF00EF00E601E003C007800F001C00380038003800380
+03800300000000000000000003000780078003000F197D9816>I<00F80003FC0007FE000F0700
+1C3F80387F8078FF8071C3C071C3C0E381C0E381C0E381C0E381C0E381C0E381C0E381C071C380
+71C38078FF00387E001C3C000F03C007FFC003FF0000FC0012197E9816>I<00E00001F00001F0
+0001B00001B00003B80003B80003B800031800071C00071C00071C00071C00071C000E0E000E0E
+000FFE000FFE001FFF001C07001C07001C07007F1FC0FF1FE07F1FC013197F9816>I<7FF800FF
+FE007FFF001C0F001C07801C03801C03801C03801C07801C07001FFF001FFE001FFE001C1F001C
+03801C03C01C01C01C01C01C01C01C01C01C03C01C07807FFF80FFFF007FFC0012197F9816>I<
+01F18007FB800FFF801F0F803C0780380380700380700380F00000E00000E00000E00000E00000
+E00000E00000E00000F000007003807003803803803C07001F0F000FFE0007FC0001F00011197E
+9816>I<7FF800FFFE007FFF001C0F001C07801C03C01C01C01C01C01C01E01C00E01C00E01C00
+E01C00E01C00E01C00E01C00E01C00E01C01C01C01C01C03C01C07801C0F807FFF00FFFE007FF8
+001319809816>I<7FFFC0FFFFC07FFFC01C01C01C01C01C01C01C01C01C00001C00001C1C001C
+1C001FFC001FFC001FFC001C1C001C1C001C00001C00E01C00E01C00E01C00E01C00E07FFFE0FF
+FFE07FFFE013197F9816>I<FFFFE0FFFFE0FFFFE01C00E01C00E01C00E01C00E01C00001C0000
+1C1C001C1C001FFC001FFC001FFC001C1C001C1C001C00001C00001C00001C00001C00001C0000
+FF8000FFC000FF800013197F9816>I<03E30007FF000FFF001E1F003C0F003807007007007007
+00F00000E00000E00000E00000E00000E03F80E07FC0E03F80F00700700700700700380F003C0F
+001E1F000FFF0007F70003E70012197E9816>I<7F1FC0FFBFE07F1FC01C07001C07001C07001C
+07001C07001C07001C07001FFF001FFF001FFF001C07001C07001C07001C07001C07001C07001C
+07001C07001C07007F1FC0FFBFE07F1FC013197F9816>I<FFFEFFFEFFFE038003800380038003
+8003800380038003800380038003800380038003800380038003800380FFFEFFFEFFFE0F197D98
+16>I<07FE07FF07FE003800380038003800380038003800380038003800380038003800380038
+00386038F038F0707FF07FE01F8010197D9816>I<7F0FE0FF8FF07F0FE01C07801C0F001C0E00
+1C1C001C3C001C78001CF0001CE0001DF0001FF0001FF8001F38001E1C001C1C001C0E001C0E00
+1C07001C07001C03807F07E0FF8FF07F07E01419809816>I<FFC000FFC000FFC0001C00001C00
+001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00
+401C00E01C00E01C00E01C00E0FFFFE0FFFFE0FFFFE013197F9816>I<FC07E0FE0FE0FE0FE03A
+0B803B1B803B1B803B1B803B1B803B1B803BBB8039B38039B38039B38039B38039F38038E38038
+E380380380380380380380380380380380FE0FE0FE0FE0FE0FE013197F9816>I<7E1FC0FF3FE0
+7F1FC01D07001D87001D87001D87001DC7001DC7001CC7001CC7001CE7001CE7001CE7001C6700
+1C67001C77001C77001C37001C37001C37001C17007F1F00FF9F007F0F0013197F9816>I<1FFC
+003FFE007FFF00780F00F00780E00380E00380E00380E00380E00380E00380E00380E00380E003
+80E00380E00380E00380E00380E00380F00780F00780780F007FFF003FFE001FFC0011197E9816
+>I<7FF800FFFE007FFF001C0F801C03801C03C01C01C01C01C01C01C01C03C01C03801C0F801F
+FF001FFE001FF8001C00001C00001C00001C00001C00001C00001C00007F0000FF80007F000012
+197F9816>I<1FFC003FFE007FFF00780F00F00780E00380E00380E00380E00380E00380E00380
+E00380E00380E00380E00380E00380E00380E00380E0E380E1E380F0F780787F007FFF003FFE00
+1FFC00001C00001E00000E00000F00000700000700111F7E9816>I<7FE000FFF8007FFC001C1E
+001C0F001C07001C07001C07001C07001C0F001C1E001FFC001FF8001FFC001C1C001C0E001C0E
+001C0E001C0E001C0E201C0E701C0E707F07E0FF87E07F03C014197F9816>I<07E3001FFF003F
+FF00781F00F00700E00700E00700E00000F000007800003F80001FF00007FC0000FE00000F0000
+0700000380000380600380E00380E00700F80F00FFFE00FFFC00C7F00011197E9816>I<7FFFE0
+FFFFE0FFFFE0E0E0E0E0E0E0E0E0E0E0E0E000E00000E00000E00000E00000E00000E00000E000
+00E00000E00000E00000E00000E00000E00000E00000E00007FC000FFE0007FC0013197F9816>
+I<7F07F0FF8FF87F07F01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01
+C01C01C01C01C01C01C01C01C01C01C01C01C00E03800E038007070007FF0003FE0000F8001519
+809816>I<FE0FE0FF1FE0FE0FE03803801C07001C07001C07001C07000E0E000E0E000E0E000E
+0E00060C00071C00071C00071C00071C0003180003B80003B80003B80001B00001F00001F00000
+E00013197F9816>I<FC07E0FE0FE0FC07E07001C07001C07001C0300180380380380380380380
+38E38039F38039F38039B38019B30019B30019B30019B30019B30019B3001913001B1B000F1E00
+0F1E000E0E0013197F9816>I<7F1F807F3F807F1F800E1E000E1C00073C0007380003B80003F0
+0001F00001E00000E00001E00001F00003F00003B80007B800071C00071C000E0E000E0E001C07
+007F1FC0FF1FE07F1FC013197F9816>I<FE0FE0FF1FE0FE0FE01C07001C07000E0E000E0E0007
+1C00071C00071C0003B80003B80001F00001F00000E00000E00000E00000E00000E00000E00000
+E00000E00003F80007FC0003F80013197F9816>I<7FFF80FFFF80FFFF80E00700E00F00E01E00
+E01C00003C0000780000700000F00001E00001C00003C0000780000700000F00001E03801C0380
+3C0380780380700380FFFF80FFFF80FFFF8011197E9816>I<FFF0FFF0FFF0E000E000E000E000
+E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E0
+00E000E000FFF0FFF0FFF00C20789C16>I<C00000E00000E00000700000700000380000380000
+1C00001C00000E00000E000007000007000003800003800001C00001C00000E00000E000007000
+007000003800003800001C00001C00000E00000E0000070000070000038000038000018011207E
+9C16>I<FFF0FFF0FFF00070007000700070007000700070007000700070007000700070007000
+7000700070007000700070007000700070007000700070FFF0FFF0FFF00C207F9C16>I<03000F
+803FE0FDF8F07840100D067C9816>I<FFFF80FFFF80FFFF8011037E7E16>I<081C3C7870E0E0E0
+E0F0F87830060D789B16>I<1FE0003FF0007FF800783C00300E00000E00000E0003FE001FFE00
+3E0E00700E00E00E00E00E00E00E00783E007FFFE03FE7E00F83E013127E9116>I<7E0000FE00
+007E00000E00000E00000E00000E00000E3E000EFF000FFF800F83C00F00E00E00E00E00700E00
+700E00700E00700E00700E00700E00E00F01E00F83C00FFF800EFF00063C001419809816>I<03
+F80FFC1FFE3C1E780C7000E000E000E000E000E000F000700778073E0E1FFC0FF803F010127D91
+16>I<003F00007F00003F0000070000070000070000070003C7000FF7001FFF003C1F00780F00
+700700E00700E00700E00700E00700E00700E00700700F00700F003C1F001FFFE00FE7F007C7E0
+14197F9816>I<03E00FF81FFC3C1E780E7007E007FFFFFFFFFFFFE000E000700778073C0F1FFE
+0FFC03F010127D9116>I<001F00007F8000FF8001E78001C30001C00001C0007FFF00FFFF00FF
+FF0001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C0003F
+FE007FFF003FFE0011197F9816>I<03E3C007F7E00FFFE01C1CC0380E00380E00380E00380E00
+380E001C1C000FF8001FF0001BE0003800001800001FFC001FFF003FFF807803C0E000E0E000E0
+E000E0E000E07001C07C07C03FFF800FFE0003F800131C7F9116>I<7E0000FE00007E00000E00
+000E00000E00000E00000E3C000EFE000FFF000F87800F03800E03800E03800E03800E03800E03
+800E03800E03800E03800E03800E03807FC7F0FFE7F87FC7F01519809816>I<018003C003C001
+8000000000000000007FC07FC07FC001C001C001C001C001C001C001C001C001C001C001C001C0
+7FFFFFFF7FFF101A7D9916>I<003000780078003000000000000000001FF81FF81FF800380038
+003800380038003800380038003800380038003800380038003800380038003800386070F0F0FF
+E07FC03F800D237E9916>I<7E0000FE00007E00000E00000E00000E00000E00000E7FE00E7FE0
+0E7FE00E0F000E1E000E3C000E78000EF0000FF0000FF8000FBC000F1E000E0E000E07000E0780
+7F87F0FFCFF07F87F01419809816>I<FFC000FFC000FFC00001C00001C00001C00001C00001C0
+0001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C0
+0001C000FFFF80FFFF80FFFF8011197E9816>I<F9C380FFEFC0FFFFE03C78E03C78E03870E038
+70E03870E03870E03870E03870E03870E03870E03870E03870E0FE7CF8FE7CF8FE3C7815128091
+16>I<7E3C00FEFE007FFF000F87800F03800E03800E03800E03800E03800E03800E03800E0380
+0E03800E03800E03807FC7F0FFE7F87FC7F01512809116>I<03E0000FF8001FFC003C1E00780F
+00700700E00380E00380E00380E00380E00380F00780700700780F003C1E001FFC000FF80003E0
+0011127E9116>I<7E3E00FEFF007FFF800F83C00F00E00E00E00E00700E00700E00700E00700E
+00700E00700E00E00F01E00F83C00FFF800EFF000E3C000E00000E00000E00000E00000E00000E
+00007FC000FFE0007FC000141B809116>I<07C7000FE7001FF7003C1F00700F00700F00E00700
+E00700E00700E00700E00700E00700700F00700F003C3F003FF7001FE70007C700000700000700
+000700000700000700000700003FE0007FF0003FE0141B7E9116>I<FF0FC0FF3FE0FF7FE007F0
+4007C000078000078000070000070000070000070000070000070000070000070000FFFC00FFFC
+00FFFC0013127F9116>I<0FEC3FFC7FFCF03CE01CE01C70007F801FF007F8003C600EE00EF00E
+F81EFFFCFFF8C7E00F127D9116>I<0300000700000700000700000700007FFF00FFFF00FFFF00
+07000007000007000007000007000007000007000007010007038007038007038007870003FE00
+01FC0000F80011177F9616>I<7E1F80FE3F807E1F800E03800E03800E03800E03800E03800E03
+800E03800E03800E03800E03800E03800E0F800FFFF007FBF803E3F01512809116>I<7F1FC0FF
+1FE07F1FC01C07001E0F000E0E000E0E000E0E00071C00071C00071C00071C0003B80003B80003
+B80001F00001F00000E00013127F9116>I<FF1FE0FFBFE0FF1FE0380380380380380380380380
+38E38019F30019F30019B3001DB7001DB7001DB7001DB7000F1E000F1E000F1E0013127F9116>
+I<7F1FC07F3FC07F1FC00F1C00073C0003B80003F00001F00000E00001E00001F00003B800073C
+00071C000E0E007F1FC0FF3FE07F1FC013127F9116>I<7F1FC0FF9FE07F1FC01C07000E07000E
+0E000E0E00070E00071C00071C00039C00039C0003980001B80001B80000F00000F00000F00000
+E00000E00000E00001C00079C0007BC0007F80003F00003C0000131B7F9116>I<3FFFC07FFFC0
+7FFFC0700780700F00701E00003C0000780001F00003E0000780000F00001E01C03C01C07801C0
+FFFFC0FFFFC0FFFFC012127F9116>I<001F80007F8000FF8001E00001C00001C00001C00001C0
+0001C00001C00001C00001C00001C00003C0007F8000FF0000FF00007F800003C00001C00001C0
+0001C00001C00001C00001C00001C00001C00001C00001E00000FF80007F80001F8011207E9C16
+>I<E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E00320779C16>
+I<7C0000FF0000FF800003C00001C00001C00001C00001C00001C00001C00001C00001C00001C0
+0001E00000FF00007F80007F8000FF0001E00001C00001C00001C00001C00001C00001C00001C0
+0001C00001C00003C000FF8000FF00007C000011207E9C16>I<1C303F78FFF8F7E061C00D057C
+9816>I E /Fm 47 122 df<0001FC3C00060E67000C0EC7001C0DC6001C01C0003801C0003803
+800038038000380380003803800070038007FFFFF800700700007007000070070000E0070000E0
+0E0000E00E0000E00E0000E00E0001C00E0001C01C0001C01C0001C01C0001C01C0003801C0003
+803800038038000380380003003800070030000700700006006000C6606000E470C000C8618000
+703E00002025819C19>11 D<0001FC000703000C03001C07001C03001800003800003800003800
+00380000700007FFFC00701C00701C00701C00E03800E03800E03800E03800E07001C07001C070
+01C07001C0E201C0E201C0E20380E4038064038038038000030000070000060000C60000E40000
+CC00007000001825819C17>I<00C001E001E001E001C003C003C0038003800380030007000700
+06000600060004000C000C00080008000000000000000000000030007800F00060000B1E7C9D0D
+>33 D<183C3C3C0404080810204080060C779C0D>39 D<183878380808101020404080050C7D83
+0D>44 D<FFC0FFC0FFC00A037D890F>I<3078F06005047C830D>I<0001800001C0000380000380
+000380000300000700000700000600000E00000C00001C00001800001800003000003000006000
+00400000C600018E00010E00020E00061C000C1C00181C003F1C0040F800803F00003800003800
+00700000700000700000700000E00000600012247E9B15>52 D<060F0F06000000000000000000
+003078F06008127C910D>58 D<0000180000001800000038000000380000007800000078000000
+B8000001B800000138000002380000023C0000041C0000041C0000081C0000181C0000101C0000
+201C0000201C00007FFC0000401C0000801C0001801C0001001C0002001C0002001C0004000E00
+0C000E001C001E00FF00FFC01A1D7E9C1F>65 D<0003F020001E0C60003002E000E003C001C001
+C0038001C0070000C00E0000801E0000801C0000803C0000803C00000078000000780000007800
+0000F0000000F0000000F0000000F0000000F0000400F0000400F0000400F00008007000080070
+00100038002000180040000C0180000706000001F800001B1E7A9C1E>67
+D<01FFFE00003C0780003801C0003801C0003800E0003800E0007000F000700070007000700070
+00F000E000F000E000F000E000F000E000F001C001E001C001E001C001E001C001C0038003C003
+800380038007800380070007000E0007001C0007003800070070000E01C000FFFF00001C1C7D9B
+1F>I<01FFFFC0003C01C0003800C0003800800038008000380080007000800070008000702080
+0070200000E0400000E0400000E0C00000FFC00001C0800001C0800001C0800001C08000038100
+00038000000380000003800000070000000700000007000000070000000F000000FFF000001A1C
+7D9B1B>70 D<01FFCFFE003C01E0003801C0003801C0003801C0003801C0007003800070038000
+7003800070038000E0070000E0070000E0070000FFFF0001C00E0001C00E0001C00E0001C00E00
+03801C0003801C0003801C0003801C00070038000700380007003800070038000F007800FFE7FF
+001F1C7D9B1F>72 D<01FFC0003C00003800003800003800003800007000007000007000007000
+00E00000E00000E00000E00001C00001C00001C00001C000038000038000038000038000070000
+0700000700000700000F0000FFE000121C7E9B10>I<007FF00007800007000007000007000007
+00000E00000E00000E00000E00001C00001C00001C00001C000038000038000038000038000070
+0000700000700000700060E000E0E000C0C00081C0008380004700003C0000141D7B9B16>I<01
+FFE0003C0000380000380000380000380000700000700000700000700000E00000E00000E00000
+E00001C00001C00001C00001C0000380080380080380080380100700100700300700600700E00E
+03C0FFFFC0151C7D9B1A>76 D<01FE0007F8003E000780002E000F00002E001700002E00170000
+2E002700004E002E00004E004E00004E004E00004E008E00008E011C00008E011C00008E021C00
+008E021C0001070438000107043800010708380001071038000207107000020720700002072070
+000207407000040740E000040780E000040700E0000C0700E0001C0601E000FF861FFC00251C7D
+9B25>I<01FC03FE001C0070003C0060002E0040002E0040002E00400047008000470080004700
+80004380800083810000838100008181000081C1000101C2000101C2000100E2000100E2000200
+E4000200740002007400020074000400380004003800040038000C0018001C001000FF8010001F
+1C7D9B1F>I<01FFF800003C0E0000380700003803800038038000380380007007800070078000
+70078000700F0000E00E0000E01C0000E0700000FFC00001C0C00001C0600001C0700001C07000
+038070000380700003807000038070000700F0000700F0400700F0400700F0800F007880FFE079
+0000001E001A1D7D9B1E>82 D<1FFFFFC01C0701C0300E00C0200E0080600E0080400E0080401C
+0080801C0080801C0080001C000000380000003800000038000000380000007000000070000000
+7000000070000000E0000000E0000000E0000000E0000001C0000001C0000001C0000001C00000
+03C000007FFE00001A1C799B1E>84 D<7FF0FF800F001C000E0018000E0010000E0010000E0010
+001C0020001C0020001C0020001C00200038004000380040003800400038004000700080007000
+80007000800070008000E0010000E0010000E0010000E0020000E0020000E0040000E004000060
+08000030300000104000000F800000191D779B1F>I<FF83FF0FF03C007001C038007001803800
+F001003800F0020038017002003801700400380270040038027008001C047008001C047010001C
+087010001C087020001C107020001C107040001C207040001C207080001C407180001C40710000
+1C807200001D807200001D007400001E007400001E007800001C007800001C0070000018007000
+0018006000001000600000241D779B29>87 D<03CC063C0C3C181C3838303870387038E070E070
+E070E070E0E2C0E2C0E261E462643C380F127B9115>97 D<3F00070007000E000E000E000E001C
+001C001C001C0039C03E60383038307038703870387038E070E070E070E060E0E0C0C0C1C06180
+63003C000D1D7B9C13>I<01F007080C08181C3838300070007000E000E000E000E000E000E008
+E010602030C01F000E127B9113>I<001F80000380000380000700000700000700000700000E00
+000E00000E00000E0003DC00063C000C3C00181C00383800303800703800703800E07000E07000
+E07000E07000E0E200C0E200C0E20061E4006264003C3800111D7B9C15>I<01E007100C101808
+3810701070607F80E000E000E000E000E000E0086010602030C01F000D127B9113>I<0003C000
+0670000C70001C60001C00001C0000380000380000380000380000380003FF8000700000700000
+700000700000700000E00000E00000E00000E00000E00001C00001C00001C00001C00001C00003
+8000038000038000030000030000070000C60000E60000CC00007800001425819C0D>I<00F301
+8F030F06070E0E0C0E1C0E1C0E381C381C381C381C383830383038187818F00F700070007000E0
+00E0C0C0E1C0C3007E00101A7D9113>I<0FC00001C00001C00003800003800003800003800007
+00000700000700000700000E78000E8C000F0E000E0E001C0E001C0E001C0E001C0E00381C0038
+1C00381C00383800703880703880707080707100E03200601C00111D7D9C15>I<018003800100
+00000000000000000000000000001C002600470047008E008E000E001C001C001C003800380071
+0071007100720072003C00091C7C9B0D>I<0FC00001C00001C000038000038000038000038000
+0700000700000700000700000E0F000E11000E23800E43801C83001C80001D00001E00003F8000
+39C00038E00038E00070E20070E20070E20070E400E06400603800111D7D9C13>107
+D<1F800380038007000700070007000E000E000E000E001C001C001C001C003800380038003800
+7000700070007000E400E400E400E40068003800091D7C9C0B>I<3C1E0780266318C04683A0E0
+4703C0E08E0380E08E0380E00E0380E00E0380E01C0701C01C0701C01C0701C01C070380380E03
+88380E0388380E0708380E0710701C0320300C01C01D127C9122>I<3C3C002646004687004707
+008E07008E07000E07000E07001C0E001C0E001C0E001C1C00381C40381C403838403838807019
+00300E0012127C9117>I<01E007180C0C180C380C300E700E700EE01CE01CE01CE018E038E030
+E06060C031801E000F127B9115>I<07870004D98008E0C008E0C011C0E011C0E001C0E001C0E0
+0381C00381C00381C00381800703800703000707000706000E8C000E70000E00000E00001C0000
+1C00001C00001C00003C0000FF8000131A7F9115>I<03C4062C0C3C181C3838303870387038E0
+70E070E070E070E0E0C0E0C0E061E063C03DC001C001C0038003800380038007803FF00E1A7B91
+13>I<3C3C26C2468747078E068E000E000E001C001C001C001C00380038003800380070003000
+10127C9112>I<01F006080C080C1C18181C001F001FC00FF007F0007800386030E030C0308060
+60C01F000E127D9111>I<00C001C001C001C00380038003800380FFE00700070007000E000E00
+0E000E001C001C001C001C00384038403840388019000E000B1A7D990E>I<1E03002707004707
+00470700870E00870E000E0E000E0E001C1C001C1C001C1C001C1C003838803838801838801839
+001C5900078E0011127C9116>I<1E06270E470E4706870287020E020E021C041C041C041C0818
+083808181018200C4007800F127C9113>I<1E01832703874703874703838707018707010E0701
+0E07011C0E021C0E021C0E021C0E04180C04181C04181C081C1C100C263007C3C018127C911C>
+I<070E0019910010E38020E38041C30041C00001C00001C0000380000380000380000380000702
+00670200E70400CB04008B080070F00011127D9113>I<1E03270747074707870E870E0E0E0E0E
+1C1C1C1C1C1C1C1C38383838183818381C7007F00070007000E0E0C0E1C0818047003C00101A7C
+9114>I E /Fn 7 121 df<60F0F06004047C830C>58 D<60F0F0701010101020204080040C7C83
+0C>I<0000038000000F0000003C000000F0000003C000000F0000003C000000F0000003C00000
+0F0000003C000000F0000000F00000003C0000000F00000003C0000000F00000003C0000000F00
+000003C0000000F00000003C0000000F000000038019187D9520>I<E0000000780000001E0000
+000780000001E0000000780000001E0000000780000001E0000000780000001E00000007800000
+078000001E00000078000001E00000078000001E00000078000001E00000078000001E00000078
+000000E000000019187D9520>62 D<0003F800000E0E000038038000E001C001C001C0038000E0
+070000E00F0000F01E0000F01C0000F03C0000F03C0000F0780000F0780000F0780000F0F00001
+E0F00001E0F00001E0F00003C0F00003C0F0000780F0000780F0000F0070000E0070001C003800
+38003C0070001C01C0000707800001FC00001C1E7E9C20>79 D<381F004E61804681C04701C08F
+01C08E01C00E01C00E01C01C03801C03801C03801C0700380710380710380E10380E2070064030
+038014127E9119>110 D<07878008C84010F0C020F1E020E3C040E18000E00000E00001C00001
+C00001C00001C000638080F38080F38100E5810084C60078780013127E9118>120
+D E /Fo 73 123 df<003FE3F801F03F1C03C03E3E07C07C3E0F807C3E0F807C1C0F807C000F80
+7C000F807C000F807C000F807C00FFFFFFC0FFFFFFC00F807C000F807C000F807C000F807C000F
+807C000F807C000F807C000F807C000F807C000F807C000F807C000F807C000F807C000F807C00
+7FE1FFC07FE1FFC01F1D809C1C>11 D<003FC00001F0300003C0380007C07C000F807C000F807C
+000F8038000F8000000F8000000F8000000F800000FFFFFC00FFFFFC000F807C000F807C000F80
+7C000F807C000F807C000F807C000F807C000F807C000F807C000F807C000F807C000F807C000F
+807C000F807C007FE1FF807FE1FF80191D809C1B>I<781E00FC3F00FC3F00FE3F80FE3F807A1E
+80020080020080040100040100080200080200300C00401000110E7E9C19>34
+D<78FCFCFEFE7A0202040408083040070E7D9C0D>39 D<78FCFCFEFE7A0202040408083040070E
+7D850D>44 D<FFE0FFE0FFE0FFE00B047F8A10>I<78FCFCFCFC7806067D850D>I<03F8000F1E00
+1C07003C07803803807803C07803C07803C0F803E0F803E0F803E0F803E0F803E0F803E0F803E0
+F803E0F803E0F803E0F803E0F803E07803C07803C03803803C07801C07000F1E0003F800131B7E
+9A18>48 D<00600001E0000FE000FFE000F3E00003E00003E00003E00003E00003E00003E00003
+E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003
+E0007FFF807FFF80111B7D9A18>I<07F8001FFE00383F80780FC0FC07C0FC07E0FC03E0FC03E0
+7803E00007E00007C00007C0000F80001F00001E0000380000700000E000018060030060060060
+0800E01FFFC03FFFC07FFFC0FFFFC0FFFFC0131B7E9A18>I<03F8001FFE003C1F003C0F807C07
+C07E07C07C07C03807C0000F80000F80001E00003C0003F800001E00000F800007C00007C00007
+E03007E07807E0FC07E0FC07E0FC07C0780F80781F001FFE0007F800131B7E9A18>I<00018000
+0380000780000F80001F80003F80006F8000CF80008F80018F80030F80060F800C0F80180F8030
+0F80600F80C00F80FFFFF8FFFFF8000F80000F80000F80000F80000F80000F8001FFF801FFF815
+1B7F9A18>I<1801801FFF001FFE001FFC001FF8001FC00018000018000018000018000019F800
+1E0E00180F801007800007C00007E00007E00007E07807E0F807E0F807E0F807C0F007C0600F80
+381F001FFE0007F000131B7E9A18>I<007E0003FF000781800F03C01E07C03C07C03C03807800
+00780000F80000F8F800FB0E00FA0780FC0380FC03C0F803E0F803E0F803E0F803E07803E07803
+E07803C03C03C03C07801E0F0007FE0003F800131B7E9A18>I<6000007FFFE07FFFE07FFFC07F
+FF807FFF80E00300C00600C00C00C0180000300000300000600000E00000E00001E00001C00003
+C00003C00003C00003C00007C00007C00007C00007C00007C00007C000038000131C7D9B18>I<
+03F8000FFE001E0F803807803803C07803C07803C07E03C07F83807FC7003FFE001FFC000FFE00
+07FF801DFF80387FC0781FE0F007E0F003E0F001E0F001E0F001E07801C07803803E07801FFE00
+03F800131B7E9A18>I<03F8000FFE001E0F003C07807807807803C0F803C0F803C0F803E0F803
+E0F803E0F803E07807E03807E03C0BE00E1BE003E3E00003E00003C00003C03807C07C07807C07
+00780F00383C001FF8000FE000131B7E9A18>I<78FCFCFCFC7800000000000078FCFCFCFC7806
+127D910D>I<00038000000380000007C0000007C0000007C000000FE000000FE000001FF00000
+1BF000001BF0000031F8000031F8000061FC000060FC0000E0FE0000C07E0000C07E0001803F00
+01FFFF0003FFFF8003001F8003001F8006000FC006000FC00E000FE00C0007E0FFC07FFEFFC07F
+FE1F1C7E9B24>65 D<FFFFF800FFFFFF000FC01F800FC00FC00FC007C00FC007E00FC007E00FC0
+07E00FC007E00FC007E00FC007C00FC00F800FC03F000FFFFE000FC00F800FC007C00FC007E00F
+C003E00FC003F00FC003F00FC003F00FC003F00FC003F00FC007E00FC007E00FC01FC0FFFFFF00
+FFFFFC001C1C7E9B22>I<001FE02000FFF8E003F80FE007C003E00F8001E01F0000E03E0000E0
+3E0000607E0000607C000060FC000000FC000000FC000000FC000000FC000000FC000000FC0000
+00FC0000007C0000607E0000603E0000603E0000C01F0000C00F80018007C0030003F80E0000FF
+FC00001FE0001B1C7D9B22>I<FFFFF800FFFFFF000FC01FC00FC007E00FC001F00FC001F80FC0
+00F80FC000FC0FC0007C0FC0007C0FC0007E0FC0007E0FC0007E0FC0007E0FC0007E0FC0007E0F
+C0007E0FC0007E0FC0007C0FC0007C0FC0007C0FC000F80FC000F80FC001F00FC007E00FC01FC0
+FFFFFF00FFFFF8001F1C7E9B25>I<FFFFFF00FFFFFF000FC01F000FC007000FC003000FC00380
+0FC003800FC181800FC181800FC181800FC180000FC380000FFF80000FFF80000FC380000FC180
+000FC180000FC180600FC180600FC000E00FC000C00FC000C00FC001C00FC001C00FC003C00FC0
+0F80FFFFFF80FFFFFF801B1C7E9B1F>I<FFFFFF00FFFFFF000FC01F000FC007000FC003000FC0
+03800FC003800FC001800FC181800FC181800FC180000FC180000FC380000FFF80000FFF80000F
+C380000FC180000FC180000FC180000FC180000FC000000FC000000FC000000FC000000FC00000
+0FC00000FFFF0000FFFF0000191C7E9B1E>I<000FF008007FFE3801FC07F807E001F80F800078
+1F0000783F0000383E0000387E0000187C000018FC000000FC000000FC000000FC000000FC0000
+00FC000000FC007FFFFC007FFF7C0001F87E0001F83E0001F83F0001F81F0001F80F8001F807E0
+01F801FC07F8007FFE78000FF818201C7D9B26>I<FFFC3FFFFFFC3FFF0FC003F00FC003F00FC0
+03F00FC003F00FC003F00FC003F00FC003F00FC003F00FC003F00FC003F00FFFFFF00FFFFFF00F
+C003F00FC003F00FC003F00FC003F00FC003F00FC003F00FC003F00FC003F00FC003F00FC003F0
+0FC003F00FC003F0FFFC3FFFFFFC3FFF201C7E9B25>I<FFFFFFFF07E007E007E007E007E007E0
+07E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007E0FFFFFF
+FF101C7F9B12>I<07FFF007FFF0001F80001F80001F80001F80001F80001F80001F80001F8000
+1F80001F80001F80001F80001F80001F80001F80001F80001F80001F80301F80781F80FC1F80FC
+1F80FC1F00783E00387C000FF000141C7F9B19>I<FFFC07FFFFFC07FF0FC000E00FC001C00FC0
+03800FC006000FC00C000FC038000FC070000FC0E0000FC1C0000FC3C0000FC7E0000FCFE0000F
+FBF0000FF3F8000FE1F8000FC0FC000FC0FE000FC07E000FC03F000FC01F800FC01FC00FC00FC0
+0FC007E00FC007F0FFFC3FFFFFFC3FFF201C7E9B25>I<FFFF00FFFF000FC0000FC0000FC0000F
+C0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0030F
+C0030FC0030FC0070FC0070FC0060FC00E0FC01E0FC07EFFFFFEFFFFFE181C7E9B1D>I<FFC000
+03FFFFE00007FF0FE00007F00DF0000DF00DF0000DF00DF0000DF00CF80019F00CF80019F00C7C
+0031F00C7C0031F00C3E0061F00C3E0061F00C1F00C1F00C1F00C1F00C1F00C1F00C0F8181F00C
+0F8181F00C07C301F00C07C301F00C03E601F00C03E601F00C01FC01F00C01FC01F00C01FC01F0
+0C00F801F00C00F801F0FFC0701FFFFFC0701FFF281C7E9B2D>I<FFE003FFFFE003FF0FF00030
+0FF800300DFC00300CFE00300C7E00300C3F00300C1F80300C1FC0300C0FE0300C07F0300C03F0
+300C01F8300C01FC300C00FE300C007F300C003F300C001FB00C001FF00C000FF00C0007F00C00
+03F00C0001F00C0000F00C0000F0FFC00070FFC00030201C7E9B25>I<003FE00001F07C0003C0
+1E000F800F801F0007C01E0003C03E0003E07E0003F07C0001F07C0001F0FC0001F8FC0001F8FC
+0001F8FC0001F8FC0001F8FC0001F8FC0001F8FC0001F87C0001F07E0003F07E0003F03E0003E0
+3F0007E01F0007C00F800F8003C01E0001F07C00003FE0001D1C7D9B24>I<FFFFF800FFFFFE00
+0FC03F800FC00F800FC007C00FC007E00FC007E00FC007E00FC007E00FC007E00FC007C00FC007
+C00FC00F800FC03F000FFFFC000FC000000FC000000FC000000FC000000FC000000FC000000FC0
+00000FC000000FC000000FC000000FC00000FFFC0000FFFC00001B1C7E9B21>I<003FE00001F0
+7C0003C01E000F800F801F0007C01F0007C03E0003E07E0003F07C0001F07C0001F0FC0001F8FC
+0001F8FC0001F8FC0001F8FC0001F8FC0001F8FC0001F8FC0001F87C0001F07C0001F07E0003F0
+3E0003E03E0703E01F08C7C00F906F8003D07E0001F87C00003FF8080000380800003C1800003F
+F800001FF800001FF000000FF0000007E0000003C01D247D9B24>I<FFFFF00000FFFFFE00000F
+C03F00000FC00F80000FC007C0000FC007E0000FC007E0000FC007E0000FC007E0000FC007E000
+0FC007C0000FC00F80000FC03E00000FFFF000000FC07C00000FC03E00000FC03F00000FC01F80
+000FC01F80000FC01F80000FC01F80000FC01F80000FC01F80000FC01F81800FC01F81800FC00F
+C180FFFC07C300FFFC01FE00211C7E9B24>I<07F8201FFEE03C07E07801E07000E0F000E0F000
+60F00060F80000FE0000FFE0007FFE003FFF003FFF800FFFC007FFE0007FE00003F00001F00000
+F0C000F0C000F0C000E0E000E0F001C0FC03C0EFFF0083FC00141C7D9B1B>I<7FFFFFE07FFFFF
+E0781F81E0701F80E0601F8060E01F8070C01F8030C01F8030C01F8030C01F8030001F8000001F
+8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F800000
+1F8000001F8000001F8000001F8000001F800007FFFE0007FFFE001C1C7E9B21>I<FFFC03FFFF
+FC03FF0FC000300FC000300FC000300FC000300FC000300FC000300FC000300FC000300FC00030
+0FC000300FC000300FC000300FC000300FC000300FC000300FC000300FC000300FC000300FC000
+3007C0003007C0006003E000E001F001C000FC0780007FFE00000FF800201C7E9B25>I<FFFC01
+FF80FFFC01FF800FC000180007E000300007E000300007F000700003F000600003F800E00001F8
+00C00001FC00C00000FC01800000FC018000007E030000007E030000007F070000003F06000000
+3F8E0000001F8C0000001FCC0000000FD80000000FD800000007F000000007F000000007F00000
+0003E000000003E000000001C000000001C00000211C7F9B24>I<FFFC7FFE0FFCFFFC7FFE0FFC
+0FC007E000C00FC007F000C00FE003F001C007E003F0018007E007F8018003F007F8030003F007
+F8030003F80CFC070001F80CFC060001F81CFE060001FC187E0E0000FC187E0C0000FC387F0C00
+007E303F1800007E303F1800007F601FB800003F601FB000003FE01FF000003FC00FF000001FC0
+0FE000001FC00FE000000F8007C000000F8007C000000F0003C000000700038000000700038000
+2E1C7F9B31>I<7FFE1FFE007FFE1FFE0007F001800003F803800001FC07000000FC06000000FE
+0C0000007F1C0000003F380000003FB00000001FE00000000FE00000000FE000000007F0000000
+03F800000007F80000000FFC0000000CFE000000187E000000387F000000703F800000601F8000
+00C01FC00001C00FE000018007F000030007F000FFF03FFF80FFF03FFF80211C7F9B24>I<FFFC
+01FF80FFFC01FF800FE000380007F000300003F800700003F800600001FC00C00000FE01C00000
+FE018000007F030000003F870000003F860000001FCE0000000FFC0000000FF800000007F80000
+0003F000000003F000000003F000000003F000000003F000000003F000000003F000000003F000
+000003F000000003F00000003FFF0000003FFF0000211C7F9B24>I<7FFFFC7FFFFC7E01F87803
+F87003F0E007E0E007E0C00FC0C01FC0C01F80003F00007F00007E0000FC0000FC0001F80003F8
+0603F00607E0060FE0060FC00E1F800E1F801C3F001C7F003C7E00FCFFFFFCFFFFFC171C7D9B1D
+>I<FEFEFEE0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0
+E0FEFEFE07297C9E0D>I<040100180600200800200800401000401000802000802000BC2F00FE
+3F80FE3F807E1F807E1F803C0F00110E7B9C19>I<FEFEFE0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E
+0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0EFEFEFE07297F9E0D>I<0FF8001C1E003E0F80
+3E07803E07C01C07C00007C0007FC007E7C01F07C03C07C07C07C0F807C0F807C0F807C0780BC0
+3E13F80FE1F815127F9117>97 D<FF0000FF00001F00001F00001F00001F00001F00001F00001F
+00001F00001F00001F3F801FE1E01F80701F00781F003C1F003C1F003E1F003E1F003E1F003E1F
+003E1F003E1F003C1F003C1F00781F80701EC1E01C3F00171D7F9C1B>I<03FC000E0E001C1F00
+3C1F00781F00780E00F80000F80000F80000F80000F80000F800007800007801803C01801C0300
+0E0E0003F80011127E9115>I<000FF0000FF00001F00001F00001F00001F00001F00001F00001
+F00001F00001F001F9F00F07F01C03F03C01F07801F07801F0F801F0F801F0F801F0F801F0F801
+F0F801F07801F07801F03C01F01C03F00F0FFE03F9FE171D7E9C1B>I<01FC000F07001C03803C
+01C07801C07801E0F801E0F801E0FFFFE0F80000F80000F800007800007C00603C00601E00C00F
+038001FC0013127F9116>I<007F0001E38003C7C00787C00F87C00F83800F80000F80000F8000
+0F80000F8000FFF800FFF8000F80000F80000F80000F80000F80000F80000F80000F80000F8000
+0F80000F80000F80000F80000F80007FF8007FF800121D809C0F>I<03F8F00E0F381E0F381C07
+303C07803C07803C07803C07801C07001E0F000E0E001BF8001000001800001800001FFF001FFF
+C00FFFE01FFFF07801F8F00078F00078F000787000707800F01E03C007FF00151B7F9118>I<FF
+0000FF00001F00001F00001F00001F00001F00001F00001F00001F00001F00001F0FC01F31E01F
+40F01F80F81F80F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F
+00F8FFE7FFFFE7FF181D7F9C1B>I<1E003F003F003F003F001E00000000000000000000000000
+FF00FF001F001F001F001F001F001F001F001F001F001F001F001F001F001F00FFE0FFE00B1E7F
+9D0E>I<007800FC00FC00FC00FC007800000000000000000000000003FC03FC007C007C007C00
+7C007C007C007C007C007C007C007C007C007C007C007C007C007C007C707CF87CF878F8F070E0
+1F800E26839D0F>I<FF0000FF00001F00001F00001F00001F00001F00001F00001F00001F0000
+1F00001F0FF81F0FF81F03801F07001F0C001F18001F70001FF8001FFC001FBC001F3E001F1F00
+1F0F001F0F801F07C01F03E0FFC7FCFFC7FC161D7F9C19>I<FF00FF001F001F001F001F001F00
+1F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F
+00FFE0FFE00B1D7F9C0E>I<FF0FC07E00FF31E18F001F40F207801F80FC07C01F80FC07C01F00
+F807C01F00F807C01F00F807C01F00F807C01F00F807C01F00F807C01F00F807C01F00F807C01F
+00F807C01F00F807C01F00F807C0FFE7FF3FF8FFE7FF3FF825127F9128>I<FF0FC0FF31E01F40
+F01F80F81F80F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00
+F8FFE7FFFFE7FF18127F911B>I<01FC000F07801C01C03C01E07800F07800F0F800F8F800F8F8
+00F8F800F8F800F8F800F87800F07800F03C01E01E03C00F078001FC0015127F9118>I<FF3F80
+FFE1E01F80F01F00781F007C1F003C1F003E1F003E1F003E1F003E1F003E1F003E1F003C1F007C
+1F00781F80F01FC1E01F3F001F00001F00001F00001F00001F00001F0000FFE000FFE000171A7F
+911B>I<03F0600F0CE01E07E03C03E07C03E07803E0F803E0F803E0F803E0F803E0F803E0F803
+E07803E07C03E03C03E01C07E00E0FE003F3E00003E00003E00003E00003E00003E00003E0001F
+FC001FFC161A7E9119>I<FE3E00FE47001E8F801E8F801E8F801F07001F00001F00001F00001F
+00001F00001F00001F00001F00001F00001F0000FFF000FFF00011127F9114>I<1FD830786018
+E018E018F000FF807FE07FF01FF807FC007CC01CC01CE01CE018F830CFC00E127E9113>I<0300
+030003000300070007000F000F003FFCFFFC1F001F001F001F001F001F001F001F001F001F0C1F
+0C1F0C1F0C0F08079803F00E1A7F9913>I<FF07F8FF07F81F00F81F00F81F00F81F00F81F00F8
+1F00F81F00F81F00F81F00F81F00F81F00F81F00F81F01F80F01F80786FF01F8FF18127F911B>
+I<FFC1FCFFC1FC1F00601F80E00F80C00FC0C007C18007C18003E30003E30001F60001F60001FE
+0000FC0000FC0000780000780000300016127F9119>I<FF8FF8FEFF8FF8FE1F03E0301F03E030
+1F83E0700F83F0600F86F06007C6F0C007CEF8C007EC79C003EC7D8003F83D8001F83F0001F83F
+0001F01F0000F01E0000E00E0000E00E001F127F9122>I<FFC7FCFFC7FC1F81800F838007C700
+03EE0001FC0001F80000F800007C0000FE0001DF00039F00070F800607C00C03E0FF07FCFF07FC
+16127F9119>I<FFC1FCFFC1FC1F00601F80E00F80C00FC0C007C18007C18003E30003E30001F7
+0001F60000FE0000FC0000FC00007800007800003000003000007000706000F86000F8C000F980
+007300003E0000161A7F9119>I<3FFF803C1F00303F00303E00607C0060FC0060F80001F00003
+F00007E00007C1800F81801F81801F03803E03007E07007C0F00FFFF0011127F9115>I
+E /Fp 33 122 df<00000007FF800000000001FFFFF0000000000FFFFFFC000000003FFFFFFE00
+000000FFFC00FF00000001FFC0003F80000007FF00007FC000000FFE0001FFC000001FFC0001FF
+E000001FF80003FFE000003FF00003FFE000003FF00003FFE000007FE00003FFE000007FE00003
+FFE000007FE00003FFE000007FE00003FFE000007FE00001FFC000007FE00000FF8000007FE000
+003E0000007FE00000000000007FE00000000000007FE00000000000007FE00000000000007FE0
+0000000000007FE00000000000007FE0003FFFF000FFFFFFFFFFFFF000FFFFFFFFFFFFF000FFFF
+FFFFFFFFF000FFFFFFFFFFFFF000FFFFFFFFFFFFF000007FF00000FFF000007FF000007FF00000
+7FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF000
+007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF0
+00007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF000007F
+F000007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF00000
+7FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF000
+007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF0
+00007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF0003FFF
+FFE03FFFFFE03FFFFFE03FFFFFE03FFFFFE03FFFFFE03FFFFFE03FFFFFE03FFFFFE03FFFFFE03B
+487EC742>12 D<0000000003E000000000000000000007F000000000000000000007F000000000
+00000000000FF80000000000000000000FF80000000000000000000FF80000000000000000001F
+FC0000000000000000001FFC0000000000000000003FFE0000000000000000003FFE0000000000
+000000007FFF0000000000000000007FFF0000000000000000007FFF000000000000000000FFFF
+800000000000000000FFFF800000000000000001FFFFC00000000000000001FFFFC00000000000
+000001FFFFC00000000000000003FFFFE00000000000000003EFFFE00000000000000007EFFFF0
+0000000000000007CFFFF00000000000000007C7FFF0000000000000000FC7FFF8000000000000
+000F83FFF8000000000000001F83FFFC000000000000001F03FFFC000000000000001F01FFFC00
+0000000000003F01FFFE000000000000003E00FFFE000000000000007E00FFFF00000000000000
+7C007FFF00000000000000FC007FFF80000000000000F8007FFF80000000000000F8003FFF8000
+0000000001F8003FFFC0000000000001F0001FFFC0000000000003F0001FFFE0000000000003E0
+001FFFE0000000000003E0000FFFE0000000000007E0000FFFF0000000000007C00007FFF00000
+0000000FC00007FFF800000000000F800007FFF800000000000F800003FFF800000000001F8000
+03FFFC00000000001F000001FFFC00000000003FFFFFFFFFFE00000000003FFFFFFFFFFE000000
+00007FFFFFFFFFFF00000000007FFFFFFFFFFF00000000007FFFFFFFFFFF0000000000FC000000
+7FFF8000000000F80000003FFF8000000001F80000003FFFC000000001F00000003FFFC0000000
+01F00000001FFFC000000003F00000001FFFE000000003E00000000FFFE000000007E00000000F
+FFF000000007C00000000FFFF000000007C000000007FFF00000000FC000000007FFF80000000F
+8000000003FFF80000001F8000000003FFFC0000001F0000000003FFFC0000007FC000000001FF
+FC0000FFFFFFC00007FFFFFFFF80FFFFFFC00007FFFFFFFF80FFFFFFC00007FFFFFFFF80FFFFFF
+C00007FFFFFFFF80FFFFFFC00007FFFFFFFF8051487CC75A>65 D<000000003FFE00000E000000
+0FFFFFC0001E0000007FFFFFF8003E000003FFFFFFFE00FE00000FFFFFFFFF81FE00003FFFF800
+FFC3FE0000FFFF80000FF7FE0001FFFC000003FFFE0007FFF0000001FFFE000FFFC00000007FFE
+001FFF800000003FFE003FFF000000001FFE007FFE000000000FFE00FFFC0000000007FE01FFF8
+0000000007FE03FFF00000000003FE03FFF00000000001FE07FFE00000000001FE07FFE0000000
+0000FE0FFFC00000000000FE0FFFC000000000007E1FFFC000000000007E1FFF8000000000007E
+3FFF8000000000007E3FFF8000000000003E3FFF8000000000003E7FFF8000000000003E7FFF00
+00000000003E7FFF000000000000007FFF00000000000000FFFF00000000000000FFFF00000000
+000000FFFF00000000000000FFFF00000000000000FFFF00000000000000FFFF00000000000000
+FFFF00000000000000FFFF00000000000000FFFF00000000000000FFFF00000000000000FFFF00
+000000000000FFFF00000000000000FFFF000000000000007FFF000000000000007FFF00000000
+0000007FFF000000000000007FFF8000000000003E3FFF8000000000003E3FFF8000000000003E
+3FFF8000000000003E1FFF8000000000003E1FFFC000000000003E0FFFC000000000007C0FFFC0
+00000000007C07FFE000000000007C07FFE00000000000F803FFF00000000000F803FFF0000000
+0001F801FFF80000000001F000FFFC0000000003E0007FFE0000000007E0003FFF000000000FC0
+001FFF800000001F80000FFFC00000003F000007FFF0000000FE000001FFFC000001FC000000FF
+FF80000FF80000003FFFF8007FF00000000FFFFFFFFFC000000003FFFFFFFF00000000007FFFFF
+FC00000000000FFFFFE00000000000003FFE000000474979C756>67 D<FFFFFFFFFFFFC0000000
+FFFFFFFFFFFFFE000000FFFFFFFFFFFFFFC00000FFFFFFFFFFFFFFF00000FFFFFFFFFFFFFFFC00
+00001FFF800007FFFF0000001FFF8000007FFF8000001FFF8000000FFFE000001FFF80000007FF
+F000001FFF80000001FFF800001FFF80000000FFFC00001FFF800000007FFE00001FFF80000000
+3FFF00001FFF800000001FFF00001FFF800000000FFF80001FFF800000000FFFC0001FFF800000
+0007FFC0001FFF8000000007FFE0001FFF8000000003FFE0001FFF8000000003FFF0001FFF8000
+000003FFF0001FFF8000000003FFF8001FFF8000000001FFF8001FFF8000000001FFF8001FFF80
+00000001FFFC001FFF8000000001FFFC001FFF8000000001FFFC001FFF8000000001FFFC001FFF
+8000000001FFFC001FFF8000000001FFFE001FFF8000000000FFFE001FFF8000000000FFFE001F
+FF8000000000FFFE001FFF8000000000FFFE001FFF8000000000FFFE001FFF8000000000FFFE00
+1FFF8000000000FFFE001FFF8000000000FFFE001FFF8000000000FFFE001FFF8000000000FFFE
+001FFF8000000000FFFE001FFF8000000000FFFE001FFF8000000001FFFE001FFF8000000001FF
+FC001FFF8000000001FFFC001FFF8000000001FFFC001FFF8000000001FFFC001FFF8000000001
+FFF8001FFF8000000001FFF8001FFF8000000001FFF8001FFF8000000003FFF0001FFF80000000
+03FFF0001FFF8000000003FFF0001FFF8000000007FFE0001FFF8000000007FFE0001FFF800000
+000FFFC0001FFF800000000FFF80001FFF800000001FFF80001FFF800000003FFF00001FFF8000
+00003FFE00001FFF800000007FFC00001FFF80000001FFF800001FFF80000003FFF000001FFF80
+00000FFFE000001FFF8000007FFFC000001FFF800003FFFF0000FFFFFFFFFFFFFFFE0000FFFFFF
+FFFFFFFFF80000FFFFFFFFFFFFFFC00000FFFFFFFFFFFFFE000000FFFFFFFFFFFFC00000004F47
+7CC65B>I<FFFFFFFFFFFFFFFC00FFFFFFFFFFFFFFFC00FFFFFFFFFFFFFFFC00FFFFFFFFFFFFFF
+FC00FFFFFFFFFFFFFFFE00001FFFC00003FFFE00001FFFC000003FFE00001FFFC000000FFE0000
+1FFFC0000003FE00001FFFC0000001FE00001FFFC0000000FE00001FFFC0000000FE00001FFFC0
+0000007E00001FFFC00000007F00001FFFC00000003F00001FFFC00000003F00001FFFC0000000
+1F00001FFFC00000001F00001FFFC00000001F00001FFFC00000001F00001FFFC0007C001F0000
+1FFFC0007C000F80001FFFC0007C000F80001FFFC0007C000F80001FFFC0007C000F80001FFFC0
+007C000000001FFFC000FC000000001FFFC000FC000000001FFFC000FC000000001FFFC001FC00
+0000001FFFC003FC000000001FFFC01FFC000000001FFFFFFFFC000000001FFFFFFFFC00000000
+1FFFFFFFFC000000001FFFFFFFFC000000001FFFFFFFFC000000001FFFC01FFC000000001FFFC0
+03FC000000001FFFC001FC000000001FFFC000FC000000001FFFC000FC000000001FFFC000FC00
+0000001FFFC0007C000000001FFFC0007C000000001FFFC0007C000000001FFFC0007C00000000
+1FFFC0007C000000001FFFC0007C000000001FFFC00000000000001FFFC00000000000001FFFC0
+0000000000001FFFC00000000000001FFFC00000000000001FFFC00000000000001FFFC0000000
+0000001FFFC00000000000001FFFC00000000000001FFFC00000000000001FFFC0000000000000
+1FFFC00000000000001FFFC00000000000001FFFC00000000000001FFFC00000000000001FFFC0
+0000000000FFFFFFFFFF00000000FFFFFFFFFF00000000FFFFFFFFFF00000000FFFFFFFFFF0000
+0000FFFFFFFFFF0000000041467CC54B>70 D<000000003FFE00000E000000000FFFFFC0001E00
+0000007FFFFFF8003E00000003FFFFFFFE00FE0000000FFFFFFFFF81FE0000003FFFF800FFC3FE
+000000FFFF80000FF7FE000001FFFC000003FFFE000007FFF0000001FFFE00000FFFC00000007F
+FE00001FFF800000003FFE00003FFF000000001FFE00007FFE000000000FFE0000FFFC00000000
+07FE0001FFF80000000007FE0003FFF00000000003FE0003FFF00000000001FE0007FFE0000000
+0001FE0007FFE00000000000FE000FFFC00000000000FE000FFFC000000000007E001FFFC00000
+0000007E001FFF8000000000007E003FFF8000000000007E003FFF8000000000003E003FFF8000
+000000003E007FFF8000000000003E007FFF0000000000003E007FFF00000000000000007FFF00
+00000000000000FFFF0000000000000000FFFF0000000000000000FFFF0000000000000000FFFF
+0000000000000000FFFF0000000000000000FFFF0000000000000000FFFF0000000000000000FF
+FF0000000000000000FFFF0000000000000000FFFF0000000000000000FFFF0000000000000000
+FFFF0000000000000000FFFF0000007FFFFFFFFE7FFF0000007FFFFFFFFE7FFF0000007FFFFFFF
+FE7FFF8000007FFFFFFFFE7FFF8000007FFFFFFFFE3FFF8000000000FFFE003FFF8000000000FF
+FE003FFF8000000000FFFE001FFF8000000000FFFE001FFFC000000000FFFE000FFFC000000000
+FFFE000FFFC000000000FFFE0007FFE000000000FFFE0007FFE000000000FFFE0003FFF0000000
+00FFFE0003FFF800000000FFFE0001FFF800000000FFFE0000FFFC00000000FFFE00007FFE0000
+0000FFFE00003FFF00000000FFFE00001FFF80000000FFFE00000FFFE0000001FFFE000007FFF0
+000003FFFE000001FFFC000007FFFE000000FFFF80001FFFFE0000003FFFFC00FFC7FE0000000F
+FFFFFFFF83FE00000003FFFFFFFE00FE000000007FFFFFF8003E000000000FFFFFE0000E000000
+00003FFE000000004F4979C75D>I<FFFFFFFFF801FFFFFFFFF0FFFFFFFFF801FFFFFFFFF0FFFF
+FFFFF801FFFFFFFFF0FFFFFFFFF801FFFFFFFFF0FFFFFFFFF801FFFFFFFFF0001FFFC00000003F
+FF8000001FFFC00000003FFF8000001FFFC00000003FFF8000001FFFC00000003FFF8000001FFF
+C00000003FFF8000001FFFC00000003FFF8000001FFFC00000003FFF8000001FFFC00000003FFF
+8000001FFFC00000003FFF8000001FFFC00000003FFF8000001FFFC00000003FFF8000001FFFC0
+0000003FFF8000001FFFC00000003FFF8000001FFFC00000003FFF8000001FFFC00000003FFF80
+00001FFFC00000003FFF8000001FFFC00000003FFF8000001FFFC00000003FFF8000001FFFC000
+00003FFF8000001FFFC00000003FFF8000001FFFC00000003FFF8000001FFFC00000003FFF8000
+001FFFC00000003FFF8000001FFFC00000003FFF8000001FFFC00000003FFF8000001FFFC00000
+003FFF8000001FFFC00000003FFF8000001FFFFFFFFFFFFFFF8000001FFFFFFFFFFFFFFF800000
+1FFFFFFFFFFFFFFF8000001FFFFFFFFFFFFFFF8000001FFFFFFFFFFFFFFF8000001FFFC0000000
+3FFF8000001FFFC00000003FFF8000001FFFC00000003FFF8000001FFFC00000003FFF8000001F
+FFC00000003FFF8000001FFFC00000003FFF8000001FFFC00000003FFF8000001FFFC00000003F
+FF8000001FFFC00000003FFF8000001FFFC00000003FFF8000001FFFC00000003FFF8000001FFF
+C00000003FFF8000001FFFC00000003FFF8000001FFFC00000003FFF8000001FFFC00000003FFF
+8000001FFFC00000003FFF8000001FFFC00000003FFF8000001FFFC00000003FFF8000001FFFC0
+0000003FFF8000001FFFC00000003FFF8000001FFFC00000003FFF8000001FFFC00000003FFF80
+00001FFFC00000003FFF8000001FFFC00000003FFF8000001FFFC00000003FFF8000001FFFC000
+00003FFF8000001FFFC00000003FFF8000001FFFC00000003FFF8000001FFFC00000003FFF8000
+FFFFFFFFF801FFFFFFFFF0FFFFFFFFF801FFFFFFFFF0FFFFFFFFF801FFFFFFFFF0FFFFFFFFF801
+FFFFFFFFF0FFFFFFFFF801FFFFFFFFF054477CC65D>I<FFFFFFFFFEFFFFFFFFFEFFFFFFFFFEFF
+FFFFFFFEFFFFFFFFFE000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000
+000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE0
+00000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFF
+E000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000F
+FFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE00000
+0FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000
+000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE0
+00000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFF
+E000FFFFFFFFFEFFFFFFFFFEFFFFFFFFFEFFFFFFFFFEFFFFFFFFFE27477DC62D>I<FFFFFFC000
+0000FFFFFFF0FFFFFFE0000000FFFFFFF0FFFFFFF0000000FFFFFFF0FFFFFFF8000000FFFFFFF0
+FFFFFFFC000000FFFFFFF0001FFFFC000000007FE000001FFFFE000000001F8000001FFFFF0000
+00001F8000001FFFFF800000001F8000001FFFFFC00000001F8000001FBFFFE00000001F800000
+1F9FFFE00000001F8000001F9FFFF00000001F8000001F8FFFF80000001F8000001F87FFFC0000
+001F8000001F83FFFE0000001F8000001F81FFFF0000001F8000001F80FFFF0000001F8000001F
+80FFFF8000001F8000001F807FFFC000001F8000001F803FFFE000001F8000001F801FFFF00000
+1F8000001F800FFFF800001F8000001F8007FFF800001F8000001F8007FFFC00001F8000001F80
+03FFFE00001F8000001F8001FFFF00001F8000001F8000FFFF80001F8000001F80007FFFC0001F
+8000001F80003FFFC0001F8000001F80003FFFE0001F8000001F80001FFFF0001F8000001F8000
+0FFFF8001F8000001F800007FFFC001F8000001F800003FFFE001F8000001F800001FFFF001F80
+00001F800001FFFF001F8000001F800000FFFF801F8000001F8000007FFFC01F8000001F800000
+3FFFE01F8000001F8000001FFFF01F8000001F8000000FFFF81F8000001F8000000FFFF81F8000
+001F80000007FFFC1F8000001F80000003FFFE1F8000001F80000001FFFF1F8000001F80000000
+FFFF9F8000001F800000007FFFDF8000001F800000007FFFDF8000001F800000003FFFFF800000
+1F800000001FFFFF8000001F800000000FFFFF8000001F8000000007FFFF8000001F8000000003
+FFFF8000001F8000000003FFFF8000001F8000000001FFFF8000001F8000000000FFFF8000001F
+80000000007FFF8000001F80000000003FFF8000001F80000000001FFF8000001F80000000001F
+FF8000001F80000000000FFF8000001F800000000007FF8000001F800000000003FF8000001F80
+0000000001FF8000007FE00000000000FF8000FFFFFFF000000000FF8000FFFFFFF0000000007F
+8000FFFFFFF0000000003F8000FFFFFFF0000000001F8000FFFFFFF0000000000F000054477CC6
+5D>78 D<FFFFFFFFFFFF800000FFFFFFFFFFFFFC0000FFFFFFFFFFFFFF0000FFFFFFFFFFFFFFC0
+00FFFFFFFFFFFFFFF000001FFF80000FFFFC00001FFF800001FFFE00001FFF8000007FFF00001F
+FF8000003FFF80001FFF8000001FFFC0001FFF8000000FFFC0001FFF8000000FFFE0001FFF8000
+000FFFE0001FFF80000007FFF0001FFF80000007FFF0001FFF80000007FFF0001FFF80000007FF
+F8001FFF80000007FFF8001FFF80000007FFF8001FFF80000007FFF8001FFF80000007FFF8001F
+FF80000007FFF8001FFF80000007FFF8001FFF80000007FFF8001FFF80000007FFF0001FFF8000
+0007FFF0001FFF80000007FFF0001FFF8000000FFFE0001FFF8000000FFFE0001FFF8000000FFF
+C0001FFF8000001FFF80001FFF8000003FFF80001FFF8000007FFF00001FFF800001FFFE00001F
+FF80000FFFF800001FFFFFFFFFFFF000001FFFFFFFFFFFC000001FFFFFFFFFFE0000001FFFFFFF
+FFF00000001FFFC00000000000001FFFC00000000000001FFFC00000000000001FFFC000000000
+00001FFFC00000000000001FFFC00000000000001FFFC00000000000001FFFC00000000000001F
+FFC00000000000001FFFC00000000000001FFFC00000000000001FFFC00000000000001FFFC000
+00000000001FFFC00000000000001FFFC00000000000001FFFC00000000000001FFFC000000000
+00001FFFC00000000000001FFFC00000000000001FFFC00000000000001FFFC00000000000001F
+FFC00000000000001FFFC00000000000001FFFC00000000000001FFFC00000000000001FFFC000
+00000000001FFFC00000000000FFFFFFFFF800000000FFFFFFFFF800000000FFFFFFFFF8000000
+00FFFFFFFFF800000000FFFFFFFFF80000000045477CC651>80 D<FFFFFFFFFFFC0000000000FF
+FFFFFFFFFFF000000000FFFFFFFFFFFFFE00000000FFFFFFFFFFFFFF80000000FFFFFFFFFFFFFF
+E0000000001FFF80001FFFF8000000001FFF800001FFFC000000001FFF8000007FFF000000001F
+FF8000003FFF800000001FFF8000001FFF800000001FFF8000000FFFC00000001FFF8000000FFF
+E00000001FFF8000000FFFE00000001FFF80000007FFF00000001FFF80000007FFF00000001FFF
+80000007FFF80000001FFF80000007FFF80000001FFF80000007FFF80000001FFF80000007FFF8
+0000001FFF80000007FFF80000001FFF80000007FFF80000001FFF80000007FFF80000001FFF80
+000007FFF80000001FFF80000007FFF00000001FFF80000007FFF00000001FFF8000000FFFE000
+00001FFF8000000FFFE00000001FFF8000000FFFC00000001FFF8000001FFF800000001FFF8000
+003FFF000000001FFF800000FFFE000000001FFF800003FFF8000000001FFF80001FFFF0000000
+001FFFFFFFFFFFC0000000001FFFFFFFFFFE00000000001FFFFFFFFFF800000000001FFFFFFFFF
+FE00000000001FFF80007FFF80000000001FFF80001FFFC0000000001FFF800007FFE000000000
+1FFF800003FFF0000000001FFF800001FFF8000000001FFF800001FFFC000000001FFF800000FF
+FE000000001FFF800000FFFE000000001FFF8000007FFE000000001FFF8000007FFF000000001F
+FF8000007FFF000000001FFF8000007FFF000000001FFF8000007FFF000000001FFF8000007FFF
+000000001FFF8000007FFF000000001FFF8000007FFF000000001FFF8000007FFF800000001FFF
+8000007FFF800000001FFF8000007FFF800000001FFF8000007FFF800000001FFF8000007FFF80
+0000001FFF8000007FFF8000E0001FFF8000007FFF8001F0001FFF8000007FFFC001F0001FFF80
+00007FFFC001F0001FFF8000003FFFC001F0001FFF8000003FFFC003F0001FFF8000001FFFE003
+E0001FFF8000000FFFE007E0FFFFFFFFF00007FFF007C0FFFFFFFFF00003FFFC1F80FFFFFFFFF0
+0001FFFFFF00FFFFFFFFF000007FFFFE00FFFFFFFFF000001FFFFC000000000000000000FFF000
+54487CC659>82 D<3FFFFFFFFFFFFFFFFF003FFFFFFFFFFFFFFFFF003FFFFFFFFFFFFFFFFF003F
+FFFFFFFFFFFFFFFF003FFFFFFFFFFFFFFFFF003FFF0003FFF8003FFF007FF80003FFF80007FF80
+7FE00003FFF80001FF807FC00003FFF80000FF807F800003FFF800007F807F000003FFF800003F
+807F000003FFF800003F807E000003FFF800001F807E000003FFF800001F807E000003FFF80000
+0F807C000003FFF800000F807C000003FFF800000F807C000003FFF800000F807C000003FFF800
+000F80FC000003FFF800000FC0F8000003FFF8000007C0F8000003FFF8000007C0F8000003FFF8
+000007C0F8000003FFF8000007C0F8000003FFF8000007C000000003FFF80000000000000003FF
+F80000000000000003FFF80000000000000003FFF80000000000000003FFF80000000000000003
+FFF80000000000000003FFF80000000000000003FFF80000000000000003FFF800000000000000
+03FFF80000000000000003FFF80000000000000003FFF80000000000000003FFF8000000000000
+0003FFF80000000000000003FFF80000000000000003FFF80000000000000003FFF80000000000
+000003FFF80000000000000003FFF80000000000000003FFF80000000000000003FFF800000000
+00000003FFF80000000000000003FFF80000000000000003FFF80000000000000003FFF8000000
+0000000003FFF80000000000000003FFF80000000000000003FFF80000000000000003FFF80000
+000000000003FFF80000000000000003FFF80000000000000003FFF80000000000000003FFF800
+00000000000003FFF80000000000000003FFF80000000000000003FFF80000000000000003FFF8
+0000000000000003FFF80000000000000003FFF80000000000000003FFF8000000000003FFFFFF
+FFFFF800000003FFFFFFFFFFF800000003FFFFFFFFFFF800000003FFFFFFFFFFF800000003FFFF
+FFFFFFF800004A467CC553>84 D<FFFFFFFFC03FFFFFFFF0001FFFFFF0FFFFFFFFC03FFFFFFFF0
+001FFFFFF0FFFFFFFFC03FFFFFFFF0001FFFFFF0FFFFFFFFC03FFFFFFFF0001FFFFFF0FFFFFFFF
+C03FFFFFFFF0001FFFFFF0007FFF0000001FFFE00000000FF800007FFF0000000FFFE000000003
+E000007FFF8000000FFFE000000007E000003FFF8000000FFFF000000007C000003FFFC0000007
+FFF000000007C000003FFFC0000007FFF80000000FC000001FFFC0000003FFF80000000F800000
+1FFFE0000003FFF80000001F8000000FFFE0000003FFFC0000001F0000000FFFE0000001FFFC00
+00001F0000000FFFF0000001FFFE0000003F00000007FFF0000001FFFE0000003E00000007FFF8
+000001FFFE0000007E00000003FFF8000003FFFF0000007C00000003FFF8000003FFFF0000007C
+00000003FFFC000003FFFF000000FC00000001FFFC000007FFFF800000F800000001FFFE000007
+FFFF800000F800000001FFFE000007FFFFC00001F800000000FFFE00000F9FFFC00001F0000000
+00FFFF00000F9FFFC00003F0000000007FFF00001F9FFFE00003E0000000007FFF00001F0FFFE0
+0003E0000000007FFF80001F0FFFE00007E0000000003FFF80003F0FFFF00007C0000000003FFF
+C0003E07FFF00007C0000000001FFFC0007E07FFF8000F80000000001FFFC0007C03FFF8000F80
+000000001FFFE0007C03FFF8001F80000000000FFFE000FC03FFFC001F00000000000FFFE000F8
+01FFFC001F00000000000FFFF000F801FFFE003F000000000007FFF001F801FFFE003E00000000
+0007FFF801F000FFFE007E000000000003FFF803F000FFFF007C000000000003FFF803E0007FFF
+007C000000000003FFFC03E0007FFF00FC000000000001FFFC07E0007FFF80F8000000000001FF
+FE07C0003FFF80F8000000000001FFFE0FC0003FFFC1F8000000000000FFFE0F80001FFFC1F000
+0000000000FFFF0F80001FFFC3F00000000000007FFF1F80001FFFE3E00000000000007FFF1F00
+000FFFE3E00000000000007FFF9F00000FFFF7E00000000000003FFFBF00000FFFF7C000000000
+00003FFFFE000007FFFFC00000000000001FFFFE000007FFFF800000000000001FFFFC000003FF
+FF800000000000001FFFFC000003FFFF800000000000000FFFFC000003FFFF000000000000000F
+FFF8000001FFFF000000000000000FFFF8000001FFFF0000000000000007FFF0000000FFFE0000
+000000000007FFF0000000FFFE0000000000000003FFF0000000FFFC0000000000000003FFE000
+00007FFC0000000000000003FFE00000007FFC0000000000000001FFE00000007FF80000000000
+000001FFC00000003FF80000000000000001FFC00000003FF80000000000000000FF800000001F
+F00000000000000000FF800000001FF000000000000000007F800000001FE00000000000000000
+7F000000000FE000000000000000007F000000000FE000000000000000003E0000000007C00000
+000074487DC67B>87 D<0007FFFC000000007FFFFFC0000001FFFFFFF8000003FFFFFFFE000007
+FE001FFF000007FF0003FFC0000FFF8001FFE0000FFF8000FFF0000FFF80007FF0000FFF80007F
+F8000FFF80007FF80007FF00003FFC0007FF00003FFC0003FE00003FFC0000F800003FFC000000
+00003FFC00000000003FFC00000000003FFC00000000003FFC00000007FFFFFC000000FFFFFFFC
+000007FFFFFFFC00003FFFE03FFC0000FFFE003FFC0003FFF0003FFC0007FFC0003FFC000FFF00
+003FFC001FFE00003FFC003FFC00003FFC007FF800003FFC007FF800003FFC00FFF000003FFC00
+FFF000003FFC00FFF000003FFC00FFF000003FFC00FFF000003FFC00FFF000007FFC007FF80000
+FFFC007FF80001EFFC003FFC0003EFFC003FFF0007CFFF000FFFC03F8FFFF807FFFFFF07FFFC01
+FFFFFC03FFFC007FFFF001FFFC0003FF80007FF8362E7DAD3A>97 D<007FC00000000000FFFFC0
+0000000000FFFFC00000000000FFFFC00000000000FFFFC00000000000FFFFC0000000000003FF
+C0000000000001FFC0000000000001FFC0000000000001FFC0000000000001FFC0000000000001
+FFC0000000000001FFC0000000000001FFC0000000000001FFC0000000000001FFC00000000000
+01FFC0000000000001FFC0000000000001FFC0000000000001FFC0000000000001FFC000000000
+0001FFC0000000000001FFC0000000000001FFC0000000000001FFC0000000000001FFC0000000
+000001FFC00FFC00000001FFC07FFFC0000001FFC3FFFFF0000001FFCFFFFFFC000001FFDFF00F
+FF000001FFFF8003FF800001FFFE0001FFC00001FFF800007FE00001FFF000007FF00001FFE000
+003FF80001FFE000001FFC0001FFE000001FFC0001FFE000001FFE0001FFE000001FFE0001FFE0
+00000FFF0001FFE000000FFF0001FFE000000FFF0001FFE000000FFF0001FFE000000FFF8001FF
+E000000FFF8001FFE000000FFF8001FFE000000FFF8001FFE000000FFF8001FFE000000FFF8001
+FFE000000FFF8001FFE000000FFF8001FFE000000FFF8001FFE000000FFF8001FFE000000FFF00
+01FFE000000FFF0001FFE000000FFF0001FFE000001FFE0001FFE000001FFE0001FFE000001FFC
+0001FFE000001FFC0001FFE000003FF80001FFF000003FF80001FFF800007FF00001FFFC0000FF
+E00001FFFE0001FFC00001FFBF0007FF800001FF1FE01FFE000001FE0FFFFFFC000001FC03FFFF
+F0000001F800FFFF80000001F0001FF800000039487CC742>I<00001FFFC0000000FFFFF80000
+07FFFFFE00001FFFFFFF80007FFC00FFC000FFE001FFC001FFC003FFE003FF8003FFE007FF0003
+FFE00FFE0003FFE00FFE0003FFE01FFC0001FFC01FFC0001FFC03FFC0000FF803FFC00003E007F
+F8000000007FF8000000007FF800000000FFF800000000FFF800000000FFF800000000FFF80000
+0000FFF800000000FFF800000000FFF800000000FFF800000000FFF800000000FFF8000000007F
+F8000000007FF8000000007FFC000000003FFC000000003FFC000000001FFC000000F81FFE0000
+00F80FFE000000F80FFF000001F007FF800003F003FFC00007E001FFE0000FC000FFF0001F8000
+7FFE00FF00001FFFFFFE000007FFFFF8000000FFFFE00000001FFE00002D2E7CAD35>I<000000
+00007FC00000000000FFFFC00000000000FFFFC00000000000FFFFC00000000000FFFFC0000000
+0000FFFFC0000000000003FFC0000000000001FFC0000000000001FFC0000000000001FFC00000
+00000001FFC0000000000001FFC0000000000001FFC0000000000001FFC0000000000001FFC000
+0000000001FFC0000000000001FFC0000000000001FFC0000000000001FFC0000000000001FFC0
+000000000001FFC0000000000001FFC0000000000001FFC0000000000001FFC0000000000001FF
+C0000000000001FFC00000000FFC01FFC0000000FFFF81FFC0000007FFFFE1FFC000001FFFFFF9
+FFC000007FFC03FFFFC00000FFF0007FFFC00001FFC0001FFFC00003FF80000FFFC00007FF0000
+07FFC0000FFE000003FFC0000FFE000003FFC0001FFC000003FFC0001FFC000003FFC0003FFC00
+0003FFC0003FFC000003FFC0007FF8000003FFC0007FF8000003FFC0007FF8000003FFC000FFF8
+000003FFC000FFF8000003FFC000FFF8000003FFC000FFF8000003FFC000FFF8000003FFC000FF
+F8000003FFC000FFF8000003FFC000FFF8000003FFC000FFF8000003FFC000FFF8000003FFC000
+7FF8000003FFC0007FF8000003FFC0007FF8000003FFC0003FF8000003FFC0003FFC000003FFC0
+003FFC000003FFC0001FFC000003FFC0001FFC000003FFC0000FFE000007FFC00007FF00000FFF
+C00003FF00001FFFC00001FFC0003FFFC00000FFE000FFFFE000007FF807FBFFFF80001FFFFFF3
+FFFF800007FFFFC3FFFF800001FFFF03FFFF8000001FF803FFFF8039487CC742>I<00001FFE00
+000001FFFFE0000007FFFFF800001FFFFFFE00007FFC07FF0000FFE001FF8001FFC0007FC003FF
+80003FE007FF00003FF00FFE00001FF01FFE00000FF81FFC00000FF83FFC00000FFC3FFC000007
+FC7FFC000007FC7FF8000007FC7FF8000007FE7FF8000007FEFFF8000007FEFFF8000007FEFFFF
+FFFFFFFEFFFFFFFFFFFEFFFFFFFFFFFEFFFFFFFFFFFCFFF800000000FFF800000000FFF8000000
+00FFF8000000007FF8000000007FF8000000007FFC000000003FFC000000003FFC000000003FFC
+0000001C1FFE0000003E0FFE0000003E07FF0000007E07FF000000FC03FF800001F801FFC00003
+F0007FF0001FE0003FFE00FFC0001FFFFFFF800007FFFFFE000000FFFFF80000000FFF80002F2E
+7DAD36>I<000000FFC000000007FFF80000003FFFFC000000FFFFFF000001FFC1FF000007FF03
+FF80000FFC03FF80000FF807FFC0001FF807FFC0003FF007FFC0003FF007FFC0003FE003FF8000
+7FE003FF80007FE001FF00007FE000FE00007FE0003800007FE0000000007FE0000000007FE000
+0000007FE0000000007FE0000000007FE0000000007FE0000000007FE0000000007FE000000000
+7FE0000000FFFFFFFE0000FFFFFFFE0000FFFFFFFE0000FFFFFFFE0000FFFFFFFE0000007FF000
+0000007FF0000000007FF0000000007FF0000000007FF0000000007FF0000000007FF000000000
+7FF0000000007FF0000000007FF0000000007FF0000000007FF0000000007FF0000000007FF000
+0000007FF0000000007FF0000000007FF0000000007FF0000000007FF0000000007FF000000000
+7FF0000000007FF0000000007FF0000000007FF0000000007FF0000000007FF0000000007FF000
+0000007FF0000000007FF0000000007FF0000000007FF0000000007FF0000000007FF000000000
+7FF0000000007FF0000000007FF00000003FFFFFF800003FFFFFF800003FFFFFF800003FFFFFF8
+00003FFFFFF800002A487DC724>I<00000000001F8000007FF000FFE00007FFFF03FFF0001FFF
+FFC7FFF0007FFFFFFFC7F800FFE03FFE0FF801FF800FFC0FF803FF0007FE0FF807FE0003FF07F0
+07FE0003FF07F00FFC0001FF81C00FFC0001FF80000FFC0001FF80001FFC0001FFC0001FFC0001
+FFC0001FFC0001FFC0001FFC0001FFC0001FFC0001FFC0001FFC0001FFC0000FFC0001FF80000F
+FC0001FF80000FFC0001FF800007FE0003FF000007FE0003FF000003FF0007FE000001FF800FFC
+000000FFE03FF8000001FFFFFFF0000001DFFFFFC0000003C7FFFF00000003C07FF000000007C0
+000000000007C0000000000007C0000000000007C0000000000007E0000000000007F000000000
+0007F8000000000007FFFFFFF0000007FFFFFFFF000003FFFFFFFFE00003FFFFFFFFF80001FFFF
+FFFFFE0001FFFFFFFFFF0000FFFFFFFFFF80007FFFFFFFFF8003FFFFFFFFFFC00FFFFFFFFFFFC0
+1FF800001FFFE03FE0000001FFE07FC00000007FF07FC00000003FF0FF800000001FF0FF800000
+001FF0FF800000001FF0FF800000001FF0FF800000001FF07FC00000003FE07FC00000003FE03F
+E00000007FC03FF0000000FFC01FFC000003FF800FFF00000FFF0003FFF000FFFC0000FFFFFFFF
+F000003FFFFFFFC0000007FFFFFE000000003FFFC0000035447DAE3B>I<00FC0001FE0003FF00
+07FF800FFFC01FFFE01FFFE01FFFE01FFFE01FFFE01FFFE00FFFC007FF8003FF0001FE0000FC00
+000000000000000000000000000000000000000000000000000000000000000000007FC0FFFFC0
+FFFFC0FFFFC0FFFFC0FFFFC003FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC0
+01FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC0
+01FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC0
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF18497CC820>105 D<007FC000000000FFFFC000000000FF
+FFC000000000FFFFC000000000FFFFC000000000FFFFC00000000003FFC00000000001FFC00000
+000001FFC00000000001FFC00000000001FFC00000000001FFC00000000001FFC00000000001FF
+C00000000001FFC00000000001FFC00000000001FFC00000000001FFC00000000001FFC0000000
+0001FFC00000000001FFC00000000001FFC00000000001FFC00000000001FFC00000000001FFC0
+0000000001FFC00000000001FFC0007FFFF801FFC0007FFFF801FFC0007FFFF801FFC0007FFFF8
+01FFC0007FFFF801FFC0000FFE0001FFC00007F00001FFC0000FE00001FFC0003FC00001FFC000
+7F800001FFC000FE000001FFC001FC000001FFC007F8000001FFC00FF0000001FFC01FC0000001
+FFC03F80000001FFC0FF00000001FFC1FE00000001FFC3FF00000001FFCFFF80000001FFDFFFC0
+000001FFFFFFC0000001FFFFFFE0000001FFFFFFF0000001FFFCFFF8000001FFF87FFC000001FF
+E03FFC000001FFC01FFE000001FFC01FFF000001FFC00FFF800001FFC007FFC00001FFC003FFC0
+0001FFC001FFE00001FFC001FFF00001FFC000FFF80001FFC0007FFC0001FFC0003FFC0001FFC0
+001FFE0001FFC0000FFF0001FFC0000FFF8001FFC0000FFFC0FFFFFF807FFFFFFFFFFF807FFFFF
+FFFFFF807FFFFFFFFFFF807FFFFFFFFFFF807FFFFF38487CC73F>107 D<007FC000FFFFC000FF
+FFC000FFFFC000FFFFC000FFFFC00003FFC00001FFC00001FFC00001FFC00001FFC00001FFC000
+01FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC0
+0001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FF
+C00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001
+FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC000
+01FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC0
+0001FFC00001FFC00001FFC00001FFC00001FFC00001FFC000FFFFFF80FFFFFF80FFFFFF80FFFF
+FF80FFFFFF8019487CC720>I<007FC001FFC00000FFE00000FFFFC00FFFF80007FFFC0000FFFF
+C03FFFFE001FFFFF0000FFFFC0FFFFFF007FFFFF8000FFFFC1FC07FF80FE03FFC000FFFFC3E003
+FFC1F001FFE00003FFC7C001FFC3E000FFE00001FFCF0001FFE78000FFF00001FFDE0000FFEF00
+007FF00001FFDC0000FFEE00007FF00001FFFC0000FFFE00007FF80001FFF80000FFFC00007FF8
+0001FFF00000FFF800007FF80001FFF00000FFF800007FF80001FFF00000FFF800007FF80001FF
+E00000FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF000007FF80001FFE00000
+FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF000
+007FF80001FFE00000FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF000007FF8
+0001FFE00000FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF000007FF80001FF
+E00000FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF000007FF80001FFE00000
+FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF000
+007FF80001FFE00000FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF000007FF8
+0001FFE00000FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF000007FF800FFFF
+FFC07FFFFFE03FFFFFF0FFFFFFC07FFFFFE03FFFFFF0FFFFFFC07FFFFFE03FFFFFF0FFFFFFC07F
+FFFFE03FFFFFF0FFFFFFC07FFFFFE03FFFFFF05C2E7CAD63>I<007FC001FFC00000FFFFC00FFF
+F80000FFFFC03FFFFE0000FFFFC0FFFFFF0000FFFFC1FC07FF8000FFFFC3E003FFC00003FFC7C0
+01FFC00001FFCF0001FFE00001FFDE0000FFE00001FFDC0000FFE00001FFFC0000FFF00001FFF8
+0000FFF00001FFF00000FFF00001FFF00000FFF00001FFF00000FFF00001FFE00000FFF00001FF
+E00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001
+FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF000
+01FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF0
+0001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FF
+F00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000
+FFF000FFFFFFC07FFFFFE0FFFFFFC07FFFFFE0FFFFFFC07FFFFFE0FFFFFFC07FFFFFE0FFFFFFC0
+7FFFFFE03B2E7CAD42>I<00000FFF0000000000FFFFF000000007FFFFFE0000001FFFFFFF8000
+003FFC03FFC00000FFE0007FF00001FF80001FF80003FF00000FFC0007FE000007FE000FFE0000
+07FF000FFC000003FF001FFC000003FF803FFC000003FFC03FF8000001FFC03FF8000001FFC07F
+F8000001FFE07FF8000001FFE07FF8000001FFE0FFF8000001FFF0FFF8000001FFF0FFF8000001
+FFF0FFF8000001FFF0FFF8000001FFF0FFF8000001FFF0FFF8000001FFF0FFF8000001FFF0FFF8
+000001FFF0FFF8000001FFF07FF8000001FFE07FF8000001FFE07FF8000001FFE07FF8000001FF
+E03FFC000003FFC03FFC000003FFC01FFC000003FF801FFE000007FF800FFE000007FF0007FF00
+000FFE0003FF80001FFC0001FFC0003FF80000FFE0007FF000007FFC03FFE000001FFFFFFF8000
+0007FFFFFE00000000FFFFF0000000000FFF000000342E7DAD3B>I<00FF803F8000FFFF80FFF0
+00FFFF83FFFC00FFFF87FFFE00FFFF8FC3FF00FFFF8F07FF0003FF9E0FFF8001FFBC0FFF8001FF
+B80FFF8001FFF80FFF8001FFF00FFF8001FFF007FF0001FFF007FF0001FFE003FE0001FFE000F8
+0001FFE000000001FFE000000001FFC000000001FFC000000001FFC000000001FFC000000001FF
+C000000001FFC000000001FFC000000001FFC000000001FFC000000001FFC000000001FFC00000
+0001FFC000000001FFC000000001FFC000000001FFC000000001FFC000000001FFC000000001FF
+C000000001FFC000000001FFC000000001FFC000000001FFC000000001FFC000000001FFC00000
+00FFFFFFE00000FFFFFFE00000FFFFFFE00000FFFFFFE00000FFFFFFE00000292E7CAD31>114
+D<000FFF00E0007FFFF3E001FFFFFFE007FFFFFFE00FF800FFE01FC0001FE03F80000FE03F0000
+07E07F000003E07F000003E0FF000003E0FF000003E0FF800003E0FFC0000000FFF0000000FFFE
+000000FFFFF800007FFFFFC0007FFFFFF0003FFFFFFC001FFFFFFF000FFFFFFF8007FFFFFFC003
+FFFFFFE000FFFFFFF0003FFFFFF00003FFFFF800001FFFF8000000FFFC0000001FFC7800000FFC
+F8000007FCF8000003FCFC000003FCFC000003FCFE000003F8FE000003F8FF000003F8FF800007
+F0FFC0000FF0FFF0001FE0FFFC00FFC0FFFFFFFF80FC7FFFFE00F81FFFF800E003FF8000262E7C
+AD2F>I<0001F000000001F000000001F000000001F000000001F000000001F000000003F00000
+0003F000000003F000000007F000000007F000000007F00000000FF00000000FF00000001FF000
+00003FF00000003FF00000007FF0000001FFF0000003FFF000000FFFFFFFC0FFFFFFFFC0FFFFFF
+FFC0FFFFFFFFC0FFFFFFFFC000FFF0000000FFF0000000FFF0000000FFF0000000FFF0000000FF
+F0000000FFF0000000FFF0000000FFF0000000FFF0000000FFF0000000FFF0000000FFF0000000
+FFF0000000FFF0000000FFF0000000FFF0000000FFF0000000FFF0000000FFF0000000FFF00000
+00FFF0000000FFF0000000FFF001F000FFF001F000FFF001F000FFF001F000FFF001F000FFF001
+F000FFF001F000FFF001F000FFF001F0007FF001E0007FF803E0003FF803E0003FFC07C0001FFE
+0F80000FFFFF800007FFFE000001FFFC0000001FF00024427EC12E>I<007FE000003FF000FFFF
+E0007FFFF000FFFFE0007FFFF000FFFFE0007FFFF000FFFFE0007FFFF000FFFFE0007FFFF00003
+FFE00001FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF000
+01FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF0
+0001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FF
+F00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000
+FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE000
+00FFF00001FFE00000FFF00001FFE00000FFF00001FFE00001FFF00001FFE00001FFF00001FFE0
+0001FFF00001FFE00003FFF00000FFE00007FFF00000FFE0000F7FF000007FE0001F7FF000007F
+F0003E7FF800003FFC00FC7FFFE0001FFFFFF87FFFE00007FFFFE07FFFE00001FFFF807FFFE000
+003FFE007FFFE03B2E7CAD42>I<FFFFFF07FFFFE007FFFEFFFFFF07FFFFE007FFFEFFFFFF07FF
+FFE007FFFEFFFFFF07FFFFE007FFFEFFFFFF07FFFFE007FFFE03FFC0001FFC00003FC003FFE000
+0FFC00001F8001FFE0000FFC00001F0001FFE0000FFE00001F0001FFF00007FE00003F0000FFF0
+000FFF00003E0000FFF8000FFF00007E00007FF8000FFF00007C00007FF8001FFF80007C00003F
+FC001FFF8000F800003FFC003FFFC000F800003FFE003EFFC001F800001FFE003EFFC001F00000
+1FFE007EFFE003F000000FFF007C7FE003E000000FFF00FC7FF003E000000FFF80F83FF007E000
+0007FF80F83FF007C0000007FF81F83FF80FC0000003FFC1F01FF80F80000003FFC3F01FFC0F80
+000003FFE3E00FFC1F80000001FFE3E00FFC1F00000001FFE7E00FFE3F00000000FFF7C007FE3E
+00000000FFFFC007FF3E00000000FFFF8003FF7E000000007FFF8003FF7C000000007FFF8003FF
+FC000000003FFF0001FFF8000000003FFF0001FFF8000000003FFE0000FFF8000000001FFE0000
+FFF0000000001FFE0000FFF0000000000FFC00007FE0000000000FFC00007FE0000000000FF800
+003FE00000000007F800003FC00000000007F800003FC00000000003F000001F800000000001E0
+00000F0000004F2E7DAD56>119 D<7FFFFF801FFFFF007FFFFF801FFFFF007FFFFF801FFFFF00
+7FFFFF801FFFFF007FFFFF801FFFFF00007FF80001FF0000007FFC0001FC0000003FFE0003F800
+00001FFF0007F00000000FFF0007E000000007FF800FC000000003FFC01F8000000003FFE03F80
+00000001FFF07F0000000000FFF8FE00000000007FF9FC00000000003FFFF800000000003FFFF0
+00000000001FFFE000000000000FFFC0000000000007FFC0000000000003FFC0000000000001FF
+E0000000000001FFF0000000000001FFF8000000000003FFFC000000000003FFFE000000000007
+FFFE00000000000FEFFF00000000001FCFFF80000000003F87FFC0000000007F03FFE000000000
+FE01FFE000000001FC00FFF000000001F8007FF800000003F0007FFC00000007F0003FFE000000
+0FE0001FFF0000001FC0000FFF0000003F800007FF800000FF800007FFC000FFFFF8003FFFFFC0
+FFFFF8003FFFFFC0FFFFF8003FFFFFC0FFFFF8003FFFFFC0FFFFF8003FFFFFC03A2E7EAD3F>I<
+7FFFFFC000FFFF807FFFFFC000FFFF807FFFFFC000FFFF807FFFFFC000FFFF807FFFFFC000FFFF
+8000FFF000000FE00000FFF800000FC00000FFF800000FC000007FFC00000F8000007FFC00001F
+8000003FFC00001F0000003FFE00003F0000001FFE00003E0000001FFF00007E0000000FFF0000
+7C0000000FFF8000FC00000007FF8000F800000007FFC001F800000003FFC001F000000003FFE0
+03F000000003FFE003F000000001FFF003E000000001FFF007E000000000FFF007C000000000FF
+F80FC0000000007FF80F80000000007FFC1F80000000003FFC1F00000000003FFE3F0000000000
+1FFE3E00000000001FFF7E00000000000FFF7C00000000000FFFFC00000000000FFFFC00000000
+0007FFF8000000000007FFF8000000000003FFF0000000000003FFF0000000000001FFE0000000
+000001FFE0000000000000FFC0000000000000FFC00000000000007F800000000000007F800000
+000000003F000000000000003F000000000000003F000000000000003E000000000000007E0000
+00000000007C00000000000000FC000000001F8000F8000000003FC001F8000000007FE001F000
+000000FFF003F000000000FFF003E000000000FFF007E000000000FFF00FC000000000FFF01F80
+00000000FFF03F80000000007FE07F00000000007F43FE00000000003FFFF800000000001FFFF0
+000000000007FFC0000000000001FE00000000000039427EAD3F>I E /Fq
+7 104 df<FFFFFF80FFFFFF8019027D8A20>0 D<0003FE0000000FFF8000003C01E00000F00078
+0001C0001C00030000060006000003000C0000018018000000C018000000C03000000060300000
+0060600000003060000000306000000030C000000018C000000018C000000018C000000018C000
+000018C000000018C000000018C000000018C00000001860000000306000000030600000003030
+00000060300000006018000000C018000000C00C000001800600000300030000060001C0001C00
+00F0007800003C01E000000FFF80000003FE000025277E9D2A>13 D<03C00FF01FF83FFC7FFE7F
+FEFFFFFFFFFFFFFFFF7FFE7FFE3FFC1FF80FF003C010107E9115>15 D<02000000000400000000
+0400000000080000000010000000002000000000FFFFFFFFF0FFFFFFFFF0200000000010000000
+000800000000040000000004000000000200000000240E7D902A>32 D<0000600000600000C000
+00C0000180000180000180000300000300000600000600000C00000C0000180000180000180000
+300000300000600000600000C00000C0000180000180000300000300000300000600000600000C
+00000C0000180000180000300000300000300000600000600000C0000040000013287A9D00>54
+D<003C00E001C00180038003800380038003800380038003800380038003800380038003000700
+1C00F0001C00070003000380038003800380038003800380038003800380038003800380018001
+C000E0003C0E297D9E15>102 D<F0001C00070003000380038003800380038003800380038003
+800380038003800380018001C000E0003C00E001C0018003800380038003800380038003800380
+03800380038003800380030007001C00F0000E297D9E15>I E /Fr 91 125
+df<007E1F0001C1B1800303E3C00703C3C00E03C1800E01C0000E01C0000E01C0000E01C0000E
+01C0000E01C000FFFFFC000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C000
+0E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0007F87FC
+001A1D809C18>11 D<007E0001C1800301800703C00E03C00E01800E00000E00000E00000E0000
+0E0000FFFFC00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C0
+0E01C00E01C00E01C00E01C00E01C07F87F8151D809C17>I<007FC001C1C00303C00703C00E01
+C00E01C00E01C00E01C00E01C00E01C00E01C0FFFFC00E01C00E01C00E01C00E01C00E01C00E01
+C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C07FCFF8151D809C17
+>I<003F07E00001C09C18000380F018000701F03C000E01E03C000E00E018000E00E000000E00
+E000000E00E000000E00E000000E00E00000FFFFFFFC000E00E01C000E00E01C000E00E01C000E
+00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C00
+0E00E01C000E00E01C000E00E01C000E00E01C000E00E01C007FC7FCFF80211D809C23>I<003F
+07FC0001C0DC1C000381F03C000701F03C000E01E01C000E00E01C000E00E01C000E00E01C000E
+00E01C000E00E01C000E00E01C00FFFFFFFC000E00E01C000E00E01C000E00E01C000E00E01C00
+0E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C
+000E00E01C000E00E01C000E00E01C000E00E01C007FC7FCFF80211D809C23>I<60F0F0F0F0F0
+F0F060606060606060606060606060000000000060F0F060041E7C9D0C>33
+D<6060F0F0F8F86868080808080808101010102020404080800D0C7F9C15>I<0080008007E018
+98308460824081C087C08FC08FC086E080F0807E803FC01FF00FF803FC00BE008E00876087F083
+F083E0838082408240842088189007E00080008010217E9E15>36 D<00E0000001900000030800
+0003080000070800000708000007080000070800000710000007100000072000000740000003C0
+3FE003800F00038006000380040005C0040009C0080010E0100030E010006070200060702000E0
+384000E03C4000E01C8000E00F0020E0070020700780403009C0401830E18007C03E001B1F7E9D
+20>38 D<60F0F8680808081010204080050C7C9C0C>I<004000800100020006000C000C001800
+1800300030007000600060006000E000E000E000E000E000E000E000E000E000E000E000E00060
+0060006000700030003000180018000C000C00060002000100008000400A2A7D9E10>I<800040
+002000100018000C000C000600060003000300038001800180018001C001C001C001C001C001C0
+01C001C001C001C001C001C0018001800180038003000300060006000C000C0018001000200040
+0080000A2A7E9E10>I<0006000000060000000600000006000000060000000600000006000000
+0600000006000000060000000600000006000000060000FFFFFFE0FFFFFFE00006000000060000
+000600000006000000060000000600000006000000060000000600000006000000060000000600
+00000600001B1C7E9720>43 D<60F0F0701010101020204080040C7C830C>I<FFE0FFE00B0280
+890E>I<60F0F06004047C830C>I<00010003000600060006000C000C000C001800180018003000
+3000300060006000C000C000C0018001800180030003000300060006000C000C000C0018001800
+1800300030003000600060006000C000C00010297E9E15>I<03C00C301818300C300C700E6006
+6006E007E007E007E007E007E007E007E007E007E007E007E007E00760066006700E300C300C18
+180C3007E0101D7E9B15>I<030007003F00C70007000700070007000700070007000700070007
+000700070007000700070007000700070007000700070007000F80FFF80D1C7C9B15>I<07C018
+30201C400C400EF00FF80FF807F8077007000F000E000E001C001C00380070006000C001800300
+06010C01180110023FFE7FFEFFFE101C7E9B15>I<07E01830201C201C781E780E781E381E001C
+001C00180030006007E00030001C001C000E000F000F700FF80FF80FF80FF00E401C201C183007
+E0101D7E9B15>I<000C00000C00001C00003C00003C00005C0000DC00009C00011C00031C0002
+1C00041C000C1C00081C00101C00301C00201C00401C00C01C00FFFFC0001C00001C00001C0000
+1C00001C00001C00001C0001FFC0121C7F9B15>I<300C3FF83FF03FC020002000200020002000
+200023E024302818301C200E000E000F000F000F600FF00FF00FF00F800E401E401C2038187007
+C0101D7E9B15>I<00F0030C06040C0E181E301E300C700070006000E3E0E430E818F00CF00EE0
+06E007E007E007E007E007600760077006300E300C18180C3003E0101D7E9B15>I<4000007FFF
+807FFF007FFF0040020080040080040080080000100000100000200000600000400000C00000C0
+0001C0000180000180000380000380000380000380000780000780000780000780000780000780
+00030000111D7E9B15>I<03E00C301008200C20066006600660067006780C3E083FB01FE007F0
+07F818FC307E601E600FC007C003C003C003C00360026004300C1C1007E0101D7E9B15>I<03C0
+0C301818300C700C600EE006E006E007E007E007E007E0076007700F300F18170C2707C7000600
+06000E300C780C78187010203030C00F80101D7E9B15>I<60F0F0600000000000000000000060
+F0F06004127C910C>I<60F0F0600000000000000000000060F0F0701010101020204080041A7C
+910C>I<60F0F060000000000060606060606060606060606060F0F0F0F0F0F0F060041E7C940C>
+I<7FFFFFC0FFFFFFE0000000000000000000000000000000000000000000000000000000000000
+0000FFFFFFE07FFFFFC01B0C7E8F20>I<03000780078003000000000000000000000001000100
+0200020002000200060004000C00180038007000E000E01EE01EE01EE00E600430180FE00F1D7E
+9414>I<0FE03038401CE00EF00EF00EF00E000C001C0030006000C00080018001000100010001
+00010001000000000000000000000003000780078003000F1D7E9C14>I<003F800000C0600003
+001800040004000800020010000100201F00802070808040E0404040C0384041C0384081803820
+83803820838038208380382083803820838038208180382041C0382040C0384040E07840207098
+80201F0F00100000000800000004000000030001E000C01F80003FF0001B1D7E9C20>I<000600
+000006000000060000000F0000000F0000000F00000017800000178000001780000023C0000023
+C0000023C0000041E0000041E0000041E0000080F0000080F0000180F8000100780001FFF80003
+007C0002003C0002003C0006003E0004001E0004001E000C001F001E001F00FF80FFF01C1D7F9C
+1F>I<FFFFC00F00F00F00380F003C0F001C0F001E0F001E0F001E0F001E0F001C0F003C0F0078
+0F01F00FFFE00F00780F003C0F001E0F000E0F000F0F000F0F000F0F000F0F000F0F001E0F001E
+0F003C0F0078FFFFE0181C7E9B1D>I<001F808000E0618001801980070007800E0003801C0003
+801C00018038000180780000807800008070000080F0000000F0000000F0000000F0000000F000
+0000F0000000F0000000F0000000700000807800008078000080380000801C0001001C0001000E
+000200070004000180080000E03000001FC000191E7E9C1E>I<FFFFC0000F00F0000F003C000F
+000E000F0007000F0007000F0003800F0003C00F0001C00F0001C00F0001E00F0001E00F0001E0
+0F0001E00F0001E00F0001E00F0001E00F0001E00F0001C00F0001C00F0003C00F0003800F0007
+800F0007000F000E000F001C000F007000FFFFC0001B1C7E9B20>I<FFFFFC0F003C0F000C0F00
+040F00040F00060F00020F00020F02020F02000F02000F02000F06000FFE000F06000F02000F02
+000F02000F02010F00010F00020F00020F00020F00060F00060F000C0F003CFFFFFC181C7E9B1C
+>I<FFFFF80F00780F00180F00080F00080F000C0F00040F00040F02040F02000F02000F02000F
+06000FFE000F06000F02000F02000F02000F02000F00000F00000F00000F00000F00000F00000F
+00000F8000FFF800161C7E9B1B>I<001F808000E0618001801980070007800E0003801C000380
+1C00018038000180780000807800008070000080F0000000F0000000F0000000F0000000F00000
+00F0000000F000FFF0F0000F80700007807800078078000780380007801C0007801C0007800E00
+078007000B800180118000E06080001F80001C1E7E9C21>I<FFF3FFC00F003C000F003C000F00
+3C000F003C000F003C000F003C000F003C000F003C000F003C000F003C000F003C000F003C000F
+FFFC000F003C000F003C000F003C000F003C000F003C000F003C000F003C000F003C000F003C00
+0F003C000F003C000F003C000F003C00FFF3FFC01A1C7E9B1F>I<FFF00F000F000F000F000F00
+0F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F
+000F00FFF00C1C7F9B0F>I<1FFF00F80078007800780078007800780078007800780078007800
+7800780078007800780078007800787078F878F878F878F0F040E021C01F00101D7F9B15>I<FF
+F03FE00F000F000F000C000F0008000F0010000F0020000F0040000F0080000F0100000F020000
+0F0400000F0E00000F1F00000F2F00000F2780000F4780000F83C0000F01E0000F01E0000F00F0
+000F00F8000F0078000F003C000F003C000F001E000F001F000F001F80FFF07FF01C1C7E9B20>
+I<FFF8000F80000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00
+000F00000F00000F00000F00000F00000F00080F00080F00080F00180F00180F00100F00300F00
+700F01F0FFFFF0151C7E9B1A>I<FF8000FF800F8000F8000F8000F8000BC00178000BC0017800
+0BC001780009E002780009E002780008F004780008F004780008F0047800087808780008780878
+000878087800083C107800083C107800083C107800081E207800081E207800081E207800080F40
+7800080F40780008078078000807807800080780780008030078001C03007800FF8307FF80211C
+7E9B26>I<FF007FC00F800E000F8004000BC0040009E0040009E0040008F0040008F804000878
+0400083C0400083C0400081E0400080F0400080F0400080784000807C4000803C4000801E40008
+01E4000800F40008007C0008007C0008003C0008003C0008001C0008000C001C000C00FF800400
+1A1C7E9B1F>I<003F800000E0E0000380380007001C000E000E001C0007003C00078038000380
+780003C0780003C0700001C0F00001E0F00001E0F00001E0F00001E0F00001E0F00001E0F00001
+E0F00001E0700001C0780003C0780003C0380003803C0007801C0007000E000E0007001C000380
+380000E0E000003F80001B1E7E9C20>I<FFFF800F00E00F00780F003C0F001C0F001E0F001E0F
+001E0F001E0F001E0F001C0F003C0F00780F00E00FFF800F00000F00000F00000F00000F00000F
+00000F00000F00000F00000F00000F00000F0000FFF000171C7E9B1C>I<003F800000E0E00003
+80380007001C000E000E001C0007003C00078038000380780003C0780003C0700001C0F00001E0
+F00001E0F00001E0F00001E0F00001E0F00001E0F00001E0F00001E0700001C0780003C0780003
+C0380003803C0E07801C1107000E208E000720DC0003A0F80000F0E020003FE020000060200000
+7060000078E000003FC000003FC000001F8000000F001B257E9C20>I<FFFF00000F01E0000F00
+78000F003C000F001C000F001E000F001E000F001E000F001E000F001C000F003C000F0078000F
+01E0000FFF00000F03C0000F00E0000F00F0000F0078000F0078000F0078000F0078000F007800
+0F0078000F0078100F0078100F0038100F003C20FFF01C20000007C01C1D7E9B1F>I<07E0801C
+1980300580700380600180E00180E00080E00080E00080F00000F800007C00007FC0003FF8001F
+FE0007FF0000FF80000F800007C00003C00001C08001C08001C08001C0C00180C00180E00300D0
+0200CC0C0083F800121E7E9C17>I<7FFFFFC0700F01C0600F00C0400F0040400F0040C00F0020
+800F0020800F0020800F0020000F0000000F0000000F0000000F0000000F0000000F0000000F00
+00000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F
+0000001F800003FFFC001B1C7F9B1E>I<FFF07FC00F000E000F0004000F0004000F0004000F00
+04000F0004000F0004000F0004000F0004000F0004000F0004000F0004000F0004000F0004000F
+0004000F0004000F0004000F0004000F0004000F0004000F000400070008000780080003801000
+0180100000C020000070C000001F00001A1D7E9B1F>I<FFE00FF01F0003C00F0001800F000100
+0F800300078002000780020003C0040003C0040003C0040001E0080001E0080001F0080000F010
+0000F0100000F830000078200000782000003C4000003C4000003C4000001E8000001E8000001F
+8000000F0000000F00000006000000060000000600001C1D7F9B1F>I<FFE0FFE0FF1F001F003C
+1E001E00180F001F00100F001F00100F001F001007801F00200780278020078027802003C02780
+4003C043C04003C043C04003E043C04001E081E08001E081E08001E081E08000F100F10000F100
+F10000F100F100007900FA00007A007A00007A007A00003E007C00003C003C00003C003C00003C
+003C00001800180000180018000018001800281D7F9B2B>I<7FF0FFC00FC03E000780180003C0
+180003E0100001E0200001F0600000F0400000788000007D8000003D0000001E0000001F000000
+0F0000000F8000000F80000013C0000023E0000021E0000041F00000C0F8000080780001007C00
+03003C0002001E0006001F001F003F80FFC0FFF01C1C7F9B1F>I<FFF007FC0F8001E007800080
+07C0018003C0010003E0020001F0020000F0040000F8040000780800007C1800003C1000001E20
+00001F2000000F4000000FC0000007800000078000000780000007800000078000000780000007
+800000078000000780000007800000078000007FF8001E1C809B1F>I<7FFFF07C01F07001E060
+03C06003C0400780400F80400F00401E00001E00003C00007C0000780000F00000F00001E00003
+E00003C0100780100780100F00101F00301E00203C00203C00607800E0F803E0FFFFE0141C7E9B
+19>I<FEFEC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0
+C0C0C0FEFE07297C9E0C>I<08081010202040404040808080808080B0B0F8F8787830300D0C7A
+9C15>I<FEFE060606060606060606060606060606060606060606060606060606060606060606
+06060606FEFE0729809E0C>I<1FC000307000783800781C00301C00001C00001C0001FC000F1C
+00381C00701C00601C00E01C40E01C40E01C40603C40304E801F870012127E9115>97
+D<FC00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C7C001D86
+001E03001C01801C01C01C00C01C00E01C00E01C00E01C00E01C00E01C00E01C00C01C01C01C01
+801E030019060010F800131D7F9C17>I<07E00C301878307870306000E000E000E000E000E000
+E00060007004300418080C3007C00E127E9112>I<003F00000700000700000700000700000700
+00070000070000070000070000070003E7000C1700180F00300700700700600700E00700E00700
+E00700E00700E00700E00700600700700700300700180F000C370007C7E0131D7E9C17>I<03E0
+0C301818300C700E6006E006FFFEE000E000E000E00060007002300218040C1803E00F127F9112
+>I<00F8018C071E061E0E0C0E000E000E000E000E000E00FFE00E000E000E000E000E000E000E
+000E000E000E000E000E000E000E000E000E007FE00F1D809C0D>I<00038003C4C00C38C01C38
+80181800381C00381C00381C00381C001818001C38000C300013C0001000003000001800001FF8
+001FFF001FFF803003806001C0C000C0C000C0C000C06001803003001C0E0007F800121C7F9215
+>I<FC00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C7C001C
+87001D03001E03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C
+03801C03801C0380FF9FF0141D7F9C17>I<18003C003C00180000000000000000000000000000
+00FC001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C00FF80091D
+7F9C0C>I<00C001E001E000C000000000000000000000000000000FE000E000E000E000E000E0
+00E000E000E000E000E000E000E000E000E000E000E000E000E000E000E060E0F0C0F1C061803E
+000B25839C0D>I<FC00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C
+00001C3FC01C0F001C0C001C08001C10001C20001C40001CE0001DE0001E70001C78001C38001C
+3C001C1C001C0E001C0F001C0F80FF9FE0131D7F9C16>I<FC001C001C001C001C001C001C001C
+001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C00
+1C00FF80091D7F9C0C>I<FC7E07E0001C838838001D019018001E01E01C001C01C01C001C01C0
+1C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01
+C01C001C01C01C001C01C01C001C01C01C00FF8FF8FF8021127F9124>I<FC7C001C87001D0300
+1E03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C0380
+1C0380FF9FF014127F9117>I<03F0000E1C00180600300300700380600180E001C0E001C0E001
+C0E001C0E001C0E001C06001807003803003001806000E1C0003F00012127F9115>I<FC7C001D
+86001E03001C01801C01C01C00C01C00E01C00E01C00E01C00E01C00E01C00E01C01C01C01C01C
+01801E03001D06001CF8001C00001C00001C00001C00001C00001C00001C0000FF8000131A7F91
+17>I<03C1000C3300180B00300F00700700700700E00700E00700E00700E00700E00700E00700
+600700700700300F00180F000C370007C700000700000700000700000700000700000700000700
+003FE0131A7E9116>I<FCE01D301E781E781C301C001C001C001C001C001C001C001C001C001C
+001C001C00FFC00D127F9110>I<1F9030704030C010C010E010F8007F803FE00FF000F8803880
+18C018C018E010D0608FC00D127F9110>I<04000400040004000C000C001C003C00FFE01C001C
+001C001C001C001C001C001C001C001C101C101C101C101C100C100E2003C00C1A7F9910>I<FC
+1F801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C
+03801C07800C07800E1B8003E3F014127F9117>I<FF07E03C03801C01001C01000E02000E0200
+07040007040007040003880003880003D80001D00001D00000E00000E00000E00000400013127F
+9116>I<FF3FCFE03C0F03801C0701801C0701001C0B01000E0B82000E0B82000E1182000711C4
+000711C4000720C40003A0E80003A0E80003C0680001C0700001C0700001803000008020001B12
+7F911E>I<7F8FF00F03800F030007020003840001C80001D80000F00000700000780000F80000
+9C00010E00020E000607000403801E07C0FF0FF81512809116>I<FF07E03C03801C01001C0100
+0E02000E020007040007040007040003880003880003D80001D00001D00000E00000E00000E000
+004000004000008000008000F08000F10000F300006600003C0000131A7F9116>I<7FFC703860
+38407040F040E041C003C0038007000F040E041C043C0C380870087038FFF80E127F9112>I<FF
+FFF01401808B15>I<FFFFFFFFFF802901808B2A>I E /Fs 20 122 df<78FCFCFCFC7806067B85
+11>46 D<007F000001C1C0000780F0000F0078000E0038001C001C003C001E003C001E003C001E
+0078000F0078000F0078000F0078000F00F8000F80F8000F80F8000F80F8000F80F8000F80F800
+0F80F8000F80F8000F80F8000F80F8000F80F8000F80F8000F80F8000F80F8000F80F8000F8078
+000F0078000F0078000F0078000F003C001E003C001E003C001E001C001C000E0038000F007800
+0780F00001C1C000007F000019297EA71E>48 D<00100000700001F0000FF000FEF000F0F00000
+F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000
+F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000
+F00000F00000F00000F00000F00001F8007FFFE07FFFE013287BA71E>I<00FE0007FF800E07E0
+1803F02001F82000F840007C40007CF8007EFC007EFC003EFC003EFC003E78007E00007E00007C
+00007C0000F80000F80001F00001E00003C0000780000700000E00001C00003800007000006000
+00C0000180020300020600040C000418000410000C3FFFFC7FFFF8FFFFF8FFFFF817287DA71E>
+I<007F000003FFC0000701F0000C00F80010007C001C007C003E007E003E003E003E003E001E00
+3E000C007E0000007C0000007C00000078000000F0000000E0000001C0000007000000FF000000
+01E0000000F0000000780000003C0000003E0000001F0000001F0000001F8000001F8030001F80
+78001F80FC001F80FC001F80FC001F00F8001F0040003F0040003E0030007C001800F8000F01F0
+0003FFC000007F000019297EA71E>I<007F000001FFC00007C1E0000F0070001E0038001C003C
+003C001C0078001E0078001E00F8000F00F8000F00F8000F00F8000F00F8000F80F8000F80F800
+0F80F8000F8078000F8078001F803C001F803C001F801C002F800E004F800700CF8003810F8000
+7E0F8000000F0000000F0000000F0000001E0000001E0000001E0000003C001C003C003E007800
+3E0070003C00E0001801C0001C0780000FFE000003F8000019297EA71E>57
+D<FFFFFFFF00FFFFFFFF0007E0003F0003E000070003E000038003E000018003E000018003E000
+008003E000008003E000008003E000008003E000004003E002004003E002004003E002000003E0
+02000003E002000003E006000003E00E000003FFFE000003FFFE000003E00E000003E006000003
+E002000003E002000003E002000003E002000003E002000003E000000003E000000003E0000000
+03E000000003E000000003E000000003E000000003E000000003E000000003E000000007F00000
+00FFFFE00000FFFFE0000022297EA827>70 D<FFE0000003FFC0FFE0000003FFC007E0000003F8
+0002F0000005F00002F0000005F0000278000009F0000278000009F0000278000009F000023C00
+0011F000023C000011F000021E000021F000021E000021F000021E000021F000020F000041F000
+020F000041F0000207800081F0000207800081F0000207800081F0000203C00101F0000203C001
+01F0000203E00201F0000201E00201F0000201E00201F0000200F00401F0000200F00401F00002
+00F00401F0000200780801F0000200780801F00002003C1001F00002003C1001F00002003C1001
+F00002001E2001F00002001E2001F00002000F4001F00002000F4001F00002000F4001F0000200
+078001F0000700078001F0000F80030003F800FFF803007FFFC0FFF803007FFFC032297EA837>
+77 D<FFFF0003FFC0FFFF0003FFC007F000007E0003E00000380003E00000100001F000002000
+01F00000200001F00000200000F80000400000F80000400000FC0000C000007C00008000007C00
+008000003E00010000003E00010000003F00010000001F00020000001F00020000001F80060000
+000F80040000000F800400000007C00800000007C00800000007E00800000003E01000000003E0
+1000000001F02000000001F02000000001F02000000000F84000000000F84000000000FCC00000
+00007C80000000007C80000000003F00000000003F00000000003F00000000001E00000000001E
+00000000000C00000000000C00000000000C0000002A2A7FA82D>86 D<FFFE03FFF803FFC0FFFE
+03FFF803FFC00FE0003F80007E0007C0001F0000180003E0001F0000180003E0000F8000100003
+E0000F8000100001F0000F8000200001F0000FC000200001F0000FC000200000F8000FC0004000
+00F80013E000400000F80013E000400000FC0013E000C000007C0033F0008000007C0021F00080
+00007E0021F0008000003E0021F8010000003E0040F8010000003E0040F8010000001F0040F802
+0000001F00807C020000001F00807C020000000F80807C040000000F81003E040000000F81003E
+0400000007C1003E0800000007C2001F0800000007C2001F0800000003E2001F1000000003E400
+0F9000000003E4000F9000000001F4000FA000000001F80007E000000001F80007E000000000F8
+0007C000000000F00003C000000000F00003C00000000070000380000000006000018000000000
+60000180000000006000018000003A2A7FA83D>I<01FC00000E0780001001C0003C00E0003E00
+F0003E0078001C00780008007800000078000000780000007800007FF80003E078000F8078001F
+0078003E0078007C00780078007820F8007820F8007820F8007820F800F8207C00F8203C013C40
+1F063FC007F80F001B1A7E991E>97 D<07800000FF800000FF8000000F80000007800000078000
+000780000007800000078000000780000007800000078000000780000007800000078000000780
+00000783F000078C1C0007B0070007A0038007C003C0078001E0078001E0078000F0078000F007
+8000F8078000F8078000F8078000F8078000F8078000F8078000F8078000F0078000F0078001F0
+078001E0078001C007C003C00740078007200E0006181C000407E0001D2A7FA921>I<007E0003
+C3800700E00E00F01C00703C00783C003878003C78003CF8003CF8003CFFFFFCF80000F80000F8
+0000F80000F800007800007C00003C00043C00041E00080E001007002001C0C0007F00161A7E99
+1B>101 D<001F000070C000E1E001C3E003C3E00381C007808007800007800007800007800007
+8000078000078000078000078000FFFE00FFFE0007800007800007800007800007800007800007
+800007800007800007800007800007800007800007800007800007800007800007800007800007
+800007800007C000FFFE00FFFE00132A7FA912>I<0780FF80FF800F8007800780078007800780
+078007800780078007800780078007800780078007800780078007800780078007800780078007
+8007800780078007800780078007800780078007800780FFFCFFFC0E2A7FA911>108
+D<0783F800FF8C1C00FF900E000FA0070007A0078007C0078007C0078007800780078007800780
+078007800780078007800780078007800780078007800780078007800780078007800780078007
+80078007800780078007800780078007800780FFFCFFFCFFFCFFFC1E1A7F9921>110
+D<007F000001C1C000070070000E0038001C001C003C001E003C001E0078000F0078000F00F800
+0F80F8000F80F8000F80F8000F80F8000F80F8000F80F8000F80F8000F8078000F0078000F003C
+001E003C001E001E003C000E0038000700700001C1C000007F0000191A7E991E>I<0787C0FF98
+E0FF91F00FA1F007C1F007C0E007C0000780000780000780000780000780000780000780000780
+0007800007800007800007800007800007800007800007800007C000FFFE00FFFE00141A7F9917
+>114 D<07800780FF80FF80FF80FF800F800F8007800780078007800780078007800780078007
+800780078007800780078007800780078007800780078007800780078007800780078007800780
+07800780078007800F8007800F800380178001C027C000E047FC003F87FC1E1A7F9921>117
+D<FFF00FF8FFF00FF80F8003C0078003800780010003C0020003C0020003E0020001E0040001E0
+040000F0080000F0080000F818000078100000781000003C2000003C2000003E6000001E400000
+1E4000000F8000000F800000070000000700000007000000020000000200000004000000040000
+000400000008000070080000F8100000F8100000F8200000F0400000608000001F0000001D267F
+9920>121 D E /Ft 10 116 df<78FCFCFCFC7806067A8512>46 D<FFE00007FFC0FFF00007FF
+C003F000007C0002F80000380002FC00001000027C00001000023E00001000023E00001000021F
+00001000021F80001000020F800010000207C00010000207E00010000203E00010000203F00010
+000201F00010000200F80010000200FC00100002007C00100002007E00100002003E0010000200
+1F00100002001F80100002000F80100002000FC01000020007C01000020003E01000020003F010
+00020001F01000020000F81000020000F810000200007C10000200007E10000200003E10000200
+001F10000200001F10000200000F90000200000FD00002000007D00002000003F00002000003F0
+0002000001F00002000001F00002000000F0000200000070000700000070000F8000003000FFF8
+00003000FFF8000010002A317CB032>78 D<FFFFFF000000FFFFFFF0000007E001FC000003E000
+3E000003E0000F800003E00007C00003E00003E00003E00001E00003E00001F00003E00000F000
+03E00000F80003E00000F80003E00000F80003E00000F80003E00000F80003E00000F80003E000
+00F00003E00001F00003E00001E00003E00003C00003E00007800003E0000F000003E0003C0000
+03E001F0000003FFFF00000003E001F0000003E0007C000003E0001E000003E0000F800003E000
+07800003E00007C00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E000
+03E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E000
+03E00803E00003E00803E00001E00803E00001E00807F00000F010FFFF80007010FFFF80003860
+000000000F802D327CB031>82 D<FFFE003FFF8001FFC0FFFE003FFF8001FFC00FE00003F80000
+7E0007C00001F000003C0007C00001F00000180003E00000F80000100003E00000F80000100003
+E00000F80000100001F00000FC0000200001F00000FC0000200001F00000FC0000200000F80001
+3E0000400000F800013E0000400000F800013E0000400000FC00033F0000C000007C00021F0000
+8000007C00021F00008000007E00021F80008000003E00040F80010000003E00040F8001000000
+3E00040F80010000001F000807C0020000001F000807C0020000001F000807C0020000000F8010
+03E0040000000F801003E0040000000F801003E0040000000FC02001F00C00000007C02001F008
+00000007C02001F00800000007E02001F80800000003E04000F81000000003E04000F810000000
+03E04000F81000000001F080007C2000000001F080007C2000000001F080007C2000000000F900
+003E4000000000F900003E4000000000F900003E40000000007E00001F80000000007E00001F80
+000000007E00001F80000000007E00001F80000000003C00000F00000000003C00000F00000000
+003C00000F00000000001800000600000000001800000600000000001800000600000042327FB0
+44>87 D<00FE00000303C0000C00E00010007000100038003C003C003E001C003E001E003E001E
+0008001E0000001E0000001E0000001E00000FFE0000FC1E0003E01E000F801E001F001E003E00
+1E003C001E007C001E00F8001E04F8001E04F8001E04F8003E04F8003E0478003E047C005E043E
+008F080F0307F003FC03E01E1F7D9E21>97 D<0F001F801F801F801F800F000000000000000000
+00000000000000000000000000000780FF80FF800F800780078007800780078007800780078007
+800780078007800780078007800780078007800780078007800780078007800FC0FFF8FFF80D30
+7EAF12>105 D<0780FF80FF800F80078007800780078007800780078007800780078007800780
+078007800780078007800780078007800780078007800780078007800780078007800780078007
+80078007800780078007800780078007800780078007800FC0FFFCFFFC0E327EB112>108
+D<0780FE001FC000FF83078060F000FF8C03C18078000F9001E2003C0007A001E4003C0007A000
+F4001E0007C000F8001E0007C000F8001E00078000F0001E00078000F0001E00078000F0001E00
+078000F0001E00078000F0001E00078000F0001E00078000F0001E00078000F0001E00078000F0
+001E00078000F0001E00078000F0001E00078000F0001E00078000F0001E00078000F0001E0007
+8000F0001E00078000F0001E00078000F0001E00078000F0001E00078000F0001E00078000F000
+1E000FC001F8003F00FFFC1FFF83FFF0FFFC1FFF83FFF0341F7E9E38>I<001FC00000F0780001
+C01C00070007000F0007801E0003C01C0001C03C0001E03C0001E0780000F0780000F0780000F0
+F80000F8F80000F8F80000F8F80000F8F80000F8F80000F8F80000F8F80000F8780000F07C0001
+F03C0001E03C0001E01E0003C01E0003C00F00078007800F0001C01C0000F07800001FC0001D1F
+7E9E21>111 D<01FC100E03301800F0300070600030E00030E00010E00010E00010F00010F800
+007E00003FF0001FFF000FFFC003FFE0003FF00001F80000F880003C80003C80001CC0001CC000
+1CE0001CE00018F00038F00030CC0060C301C080FE00161F7E9E1A>115
+D E /Fu 13 118 df<1F003F807FC0FFC0FFE0FFE0FFF0FFF07FF03FB01F300030003000300030
+003000600060006000C000C000C0018001800300060006000C001800300020000C1F77C71D>39
+D<FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00007FF800001FFF00003FF0000001
+FF80001FF00000007F80001FF00000003F80001FF00000001F80001FF00000000F80001FF00000
+000780001FF00000000780001FF00000000380001FF000000003C0001FF000000003C0001FF000
+000001C0001FF000000001C0001FF000000001C0001FF000000001C0001FF000000001C0001FF0
+00000000E0001FF000000000E0001FF000000000E0001FF00001C000E0001FF00001C00000001F
+F00001C00000001FF00001C00000001FF00001C00000001FF00001C00000001FF00001C0000000
+1FF00003C00000001FF00003C00000001FF00007C00000001FF0000FC00000001FF0003FC00000
+001FFFFFFFC00000001FFFFFFFC00000001FFFFFFFC00000001FF0003FC00000001FF0000FC000
+00001FF00007C00000001FF00003C00000001FF00003C00000001FF00001C00000001FF00001C0
+0000001FF00001C00000001FF00001C00000001FF00001C00000001FF00001C00000001FF00001
+C00000001FF00000000000001FF00000000000001FF00000000000001FF00000000000001FF000
+00000000001FF00000000000001FF00000000000001FF00000000000001FF00000000000001FF0
+0000000000001FF00000000000001FF00000000000001FF00000000000001FF00000000000001F
+F00000000000001FF00000000000001FF00000000000003FF80000000000007FFE0000000000FF
+FFFFFF80000000FFFFFFFF80000000FFFFFFFF800000003B477DC643>70
+D<FFFFF800000000001FFFFFFFFFF800000000001FFFFFFFFFF800000000001FFFFF007FFC0000
+0000003FFE00003FFC00000000003FFC00001DFE000000000077F800001DFE000000000077F800
+001DFE000000000077F800001CFF0000000000E7F800001CFF0000000000E7F800001C7F800000
+0001C7F800001C7F8000000001C7F800001C7F8000000001C7F800001C3FC00000000387F80000
+1C3FC00000000387F800001C1FE00000000707F800001C1FE00000000707F800001C1FE0000000
+0707F800001C0FF00000000E07F800001C0FF00000000E07F800001C0FF00000000E07F800001C
+07F80000001C07F800001C07F80000001C07F800001C03FC0000003807F800001C03FC00000038
+07F800001C03FC0000003807F800001C01FE0000007007F800001C01FE0000007007F800001C00
+FF000000E007F800001C00FF000000E007F800001C00FF000000E007F800001C007F800001C007
+F800001C007F800001C007F800001C007F800001C007F800001C003FC000038007F800001C003F
+C000038007F800001C001FE000070007F800001C001FE000070007F800001C001FE000070007F8
+00001C000FF0000E0007F800001C000FF0000E0007F800001C0007F8001C0007F800001C0007F8
+001C0007F800001C0007F8001C0007F800001C0003FC00380007F800001C0003FC00380007F800
+001C0001FE00700007F800001C0001FE00700007F800001C0001FE00700007F800001C0000FF00
+E00007F800001C0000FF00E00007F800001C0000FF00E00007F800001C00007F81C00007F80000
+1C00007F81C00007F800001C00003FC3800007F800001C00003FC3800007F800001C00003FC380
+0007F800001C00001FE7000007F800001C00001FE7000007F800001C00000FFE000007F800001C
+00000FFE000007F800001C00000FFE000007F800001C000007FC000007F800001C000007FC0000
+07F800003E000007FC000007F800007F000003F8000007F80000FF800003F800000FFC0003FFE0
+0001F000001FFE00FFFFFF8001F0003FFFFFFFFFFFFF8001F0003FFFFFFFFFFFFF8000E0003FFF
+FFFF58477DC65F>77 D<FFFFFFFE0007FFFFFCFFFFFFFE0007FFFFFCFFFFFFFE0007FFFFFC007F
+FC0000001FFF00003FF800000007FC00001FF000000003F800001FF000000001F000001FF00000
+0000E000001FF000000000E000001FF000000000E000001FF000000000E000001FF000000000E0
+00001FF000000000E000001FF000000000E000001FF000000000E000001FF000000000E000001F
+F000000000E000001FF000000000E000001FF000000000E000001FF000000000E000001FF00000
+0000E000001FF000000000E000001FF000000000E000001FF000000000E000001FF000000000E0
+00001FF000000000E000001FF000000000E000001FF000000000E000001FF000000000E000001F
+F000000000E000001FF000000000E000001FF000000000E000001FF000000000E000001FF00000
+0000E000001FF000000000E000001FF000000000E000001FF000000000E000001FF000000000E0
+00001FF000000000E000001FF000000000E000001FF000000000E000001FF000000000E000001F
+F000000000E000001FF000000000E000001FF000000000E000001FF000000000E000001FF00000
+0000E000001FF000000000E000001FF000000000E000001FF000000000E000001FF000000000E0
+00001FF000000000E000000FF000000000C000000FF000000001C000000FF800000001C0000007
+F800000001C0000007F80000000380000007F80000000380000003FC0000000700000003FC0000
+000700000001FC0000000E00000000FE0000000E000000007F0000001C000000003F0000003800
+0000001F80000070000000000FC00000E00000000007F00003C00000000003FC000F8000000000
+00FF007F0000000000003FFFFC0000000000000FFFF000000000000001FF8000000046487DC64D
+>85 D<FFFFFFE003FFFFFF8001FFFFF8FFFFFFE003FFFFFF8001FFFFF8FFFFFFE003FFFFFF8001
+FFFFF803FFF800000FFFE000001FFF8000FFE0000003FF80000007FE00007FC0000001FF000000
+01FC00007FC0000001FF00000000F800007FC0000001FF80000000F000003FE0000000FF800000
+00E000003FE0000000FF80000000E000003FE0000000FF80000000E000001FF00000007FC00000
+01C000001FF00000007FC0000001C000001FF00000007FC0000001C000001FF8000000FFE00000
+03C000000FF8000000FFE00000038000000FF8000000FFE00000038000000FFC000001DFF00000
+0780000007FC000001DFF000000700000007FC000001DFF000000700000007FE0000038FF80000
+0F00000003FE0000038FF800000E00000003FE0000038FF800000E00000003FF0000078FFC0000
+1E00000001FF00000707FC00001C00000001FF00000707FC00001C00000001FF00000F07FE0000
+1C00000000FF80000E03FE00003800000000FF80000E03FE00003800000000FF80001E03FF0000
+38000000007FC0001C01FF000070000000007FC0001C01FF000070000000007FC0003C01FF8000
+70000000003FE0003800FF8000E0000000003FE0003800FF8000E0000000003FE0003800FF8000
+E0000000001FF00070007FC001C0000000001FF00070007FC001C0000000001FF00070007FC001
+C0000000001FF800E0003FE003C0000000000FF800E0003FE00380000000000FF800E0003FE003
+80000000000FFC01C0001FF007800000000007FC01C0001FF007000000000007FC01C0001FF007
+000000000007FE0380000FF80F000000000003FE0380000FF80E000000000003FE0380000FF80E
+000000000003FF0780000FFC1E000000000001FF07000007FC1C000000000001FF07000007FC1C
+000000000001FF0F000007FE1C000000000000FF8E000003FE38000000000000FF8E000003FE38
+000000000000FF9E000003FF380000000000007FDC000001FF700000000000007FDC000001FF70
+0000000000007FFC000001FFF00000000000003FF8000000FFE00000000000003FF8000000FFE0
+0000000000003FF8000000FFE00000000000001FF00000007FC00000000000001FF00000007FC0
+0000000000001FF00000007FC00000000000001FE00000003FC00000000000000FE00000003F80
+0000000000000FE00000003F800000000000000FC00000001F8000000000000007C00000001F00
+00000000000007C00000001F0000000000000007800000000F0000000000000003800000000E00
+00000065487EC66A>87 D<0003FE000000001FFFC00000007E03F0000000F000FC000001C0007E
+00000380003F000007C0001F800007F0001FC0000FF0000FC0000FF8000FE0000FF8000FE0000F
+F80007F00007F00007F00007F00007F00001C00007F00000000007F00000000007F00000000007
+F00000000007F000000001FFF00000007FFFF0000003FF87F000001FF007F000007F8007F00001
+FE0007F00003F80007F00007F00007F0000FE00007F0001FC00007F0003FC00007F0003F800007
+F0007F800007F01C7F800007F01CFF000007F01CFF000007F01CFF000007F01CFF00000FF01CFF
+00000FF01CFF00000FF01C7F80001BF01C7F800033F01C3FC00031F8381FC00061F8380FF001C0
+FC7003FC0780FFE000FFFE003FC0001FF8001F802E2F7CAD34>97 D<01FE0000000000FFFE0000
+000000FFFE0000000000FFFE000000000003FE000000000001FE000000000000FE000000000000
+FE000000000000FE000000000000FE000000000000FE000000000000FE000000000000FE000000
+000000FE000000000000FE000000000000FE000000000000FE000000000000FE000000000000FE
+000000000000FE000000000000FE000000000000FE000000000000FE000000000000FE00000000
+0000FE000000000000FE000000000000FE000000000000FE00FF00000000FE07FFF0000000FE1F
+01FC000000FE38003E000000FE70001F800000FEC0000FC00000FF800007E00000FF800003F000
+00FF000003F80000FE000001FC0000FE000001FC0000FE000000FE0000FE000000FE0000FE0000
+00FF0000FE000000FF0000FE0000007F8000FE0000007F8000FE0000007F8000FE0000007FC000
+FE0000007FC000FE0000007FC000FE0000007FC000FE0000007FC000FE0000007FC000FE000000
+7FC000FE0000007FC000FE0000007FC000FE0000007FC000FE0000007F8000FE0000007F8000FE
+000000FF8000FE000000FF0000FE000000FF0000FE000000FE0000FE000001FE0000FE000001FC
+0000FE000001F80000FF000003F00000FF800007F00000FD800007E00000F9C0000F800000F8E0
+003F000000F078007E000000F01E03F8000000E00FFFE00000000001FE00000032497DC739>I<
+00007F80000003FFF000000FC0FC00003F003F00007C001F8000F8000FC001F80007E003F00007
+E007E00003F00FE00003F80FE00003F81FC00001FC1FC00001FC3FC00001FC3FC00001FC7F8000
+01FE7F800000FE7F800000FEFF800000FEFF800000FEFFFFFFFFFEFFFFFFFFFEFF80000000FF80
+000000FF80000000FF80000000FF80000000FF800000007F800000007F800000007F800000007F
+C00000003FC00000003FC000000E1FC000000E1FE000000E0FE000001C07E000001C07F0000038
+03F000007001F800007000FC0000E0003E0003C0001F8007000007E03E000001FFF80000003FC0
+00272F7DAD2E>101 D<01FE00FFFE00FFFE00FFFE0003FE0001FE0000FE0000FE0000FE0000FE
+0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE
+0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE
+0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE
+0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE
+0000FE0000FE0000FE0000FE0000FE0000FE0003FF80FFFFFEFFFFFEFFFFFE17487DC71C>108
+D<01FC007F800000FFFC03FFF00000FFFC0781F80000FFFC0C007C000003FC18007E000001FC30
+003F000000FC60003F800000FCC0001F800000FD80001F800000FD80001FC00000FF00001FC000
+00FF00001FC00000FF00001FC00000FE00001FC00000FE00001FC00000FE00001FC00000FE0000
+1FC00000FE00001FC00000FE00001FC00000FE00001FC00000FE00001FC00000FE00001FC00000
+FE00001FC00000FE00001FC00000FE00001FC00000FE00001FC00000FE00001FC00000FE00001F
+C00000FE00001FC00000FE00001FC00000FE00001FC00000FE00001FC00000FE00001FC00000FE
+00001FC00000FE00001FC00000FE00001FC00000FE00001FC00000FE00001FC00000FE00001FC0
+0000FE00001FC00000FE00001FC00003FF80007FF000FFFFFE1FFFFFC0FFFFFE1FFFFFC0FFFFFE
+1FFFFFC0322D7CAC39>110 D<01FC01F800FFFC07FE00FFFC1E1F00FFFC383F8003FC607FC001
+FC607FC000FCC07FC000FCC07FC000FD803F8000FD801F0000FF000E0000FF00000000FF000000
+00FF00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE0000
+0000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00
+000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE
+00000000FE00000000FE00000000FE00000000FF00000003FF800000FFFFFF8000FFFFFF8000FF
+FFFF8000222D7DAC28>114 D<001FF8060000FFFF0E0003F0079E00078001FE000E00007E001C
+00003E003C00003E007800001E007800001E00F800001E00F800000E00F800000E00FC00000E00
+FC00000E00FE00000E00FF000000007FC00000007FF80000003FFFE000001FFFFE00000FFFFF80
+0007FFFFE00003FFFFF00000FFFFFC00001FFFFE000001FFFE0000000FFF00000001FF80000000
+7F806000001FC0E000001FC0E000000FC0F000000FC0F0000007C0F0000007C0F0000007C0F800
+0007C0F800000780FC00000780FC00000F00FE00000F00FF00001E00FF80003C00F9E0007800F0
+F803E000E03FFFC000C007FC0000222F7DAD29>I<01FE00003FC000FFFE001FFFC000FFFE001F
+FFC000FFFE001FFFC00003FE00007FC00001FE00003FC00000FE00001FC00000FE00001FC00000
+FE00001FC00000FE00001FC00000FE00001FC00000FE00001FC00000FE00001FC00000FE00001F
+C00000FE00001FC00000FE00001FC00000FE00001FC00000FE00001FC00000FE00001FC00000FE
+00001FC00000FE00001FC00000FE00001FC00000FE00001FC00000FE00001FC00000FE00001FC0
+0000FE00001FC00000FE00001FC00000FE00001FC00000FE00001FC00000FE00001FC00000FE00
+001FC00000FE00001FC00000FE00001FC00000FE00003FC00000FE00003FC00000FE00003FC000
+00FE00007FC000007E00007FC000007E00007FC000003F0000DFC000003F00019FE000001F0003
+1FF000000F80061FFFC00007F01C1FFFC00001FFF81FFFC000003FE01FE000322E7CAC39>117
+D E end
+%%EndProlog
+%%BeginSetup
+%%Feature: *Resolution 300dpi
+TeXDict begin
+
+%%EndSetup
+%%Page: 0 1
+0 0 bop 258 823 a Fu(F)-9 b(unnelW)g(eb)38 b(User's)c(Man)m(ual)603
+1151 y Ft(Ross)21 b(N.)g(Williams)519 1343 y Fs(V1.0)e(for)h(F)-5
+b(unnelW)g(eb)20 b(V3.0)725 1536 y(Ma)n(y)g(1992)p eop
+%%Page: 1 2
+1 1 bop 177 2597 1772 2 v 177 2675 a Fr(Cop)o(yrigh)o(t)384
+2674 y(c)372 2675 y Fq(\015)14 b Fr(1992)e(Ross)i(N.)g(William)o(s.)177
+2750 y(P)o(ermission)j(is)g(gran)o(ted)g(to)h(mak)o(e)d(and)j(distribute)g(v)
+o(erbatim)d(copies)j(of)f(this)h(man)o(ual)c(pro)o(vided)k(that)f(the)177
+2800 y(cop)o(yrigh)o(t)d(notice)g(and)g(this)g(p)q(ermission)e(notice)j(are)f
+(preserv)o(ed)i(on)e(all)e(copies.)p 177 2835 V 1053 2940 a(1)p
+eop
+%%Page: 2 3
+2 2 bop 1053 2940 a Fr(2)p eop
+%%Page: 3 4
+3 3 bop 177 401 a Fp(Con)m(ten)m(ts)177 687 y Fo(Preface)1592
+b(9)177 808 y(Ac)o(kno)o(wledgemen)o(ts)1324 b(11)177 928 y(Presen)o(tation)
+12 b(Notes)1323 b(13)177 1048 y(1)38 b(A)16 b(T)l(utorial)e(In)o(tro)q
+(duction)1159 b(15)239 1126 y Fr(1.1)42 b(What)13 b(is)h(Literate)h
+(Programmi)o(ng?)9 b Fn(:)20 b(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)
+f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61
+b Fr(15)239 1204 y(1.2)42 b(What)13 b(is)h(F)m(unnelW)m(eb?)19
+b Fn(:)i(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h
+(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61
+b Fr(18)239 1281 y(1.3)42 b(The)14 b(Name)f(F)m(unnelW)m(eb)26
+b Fn(:)20 b(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h
+(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61
+b Fr(19)239 1359 y(1.4)42 b(A)14 b(F)m(unnelW)m(eb)f(T)m(utorial)24
+b Fn(:)c(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f
+(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61
+b Fr(19)239 1437 y(1.5)42 b(A)14 b(Hello)f(W)m(orld)g(Do)q(cumen)o(t)34
+b Fn(:)21 b(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g
+(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61
+b Fr(20)239 1514 y(1.6)42 b(Macro)14 b(F)m(acilities)i Fn(:)k(:)g(:)g(:)h(:)f
+(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g
+(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61 b
+Fr(22)335 1592 y(1.6.1)46 b(Simple)12 b(Macros)35 b Fn(:)20
+b(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g
+(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61 b
+Fr(22)335 1670 y(1.6.2)46 b(Num)o(b)q(er)13 b(of)g(Times)g(Called)h
+Fn(:)20 b(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g
+(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61 b Fr(23)335 1747
+y(1.6.3)46 b(Inden)o(tation)26 b Fn(:)20 b(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)
+f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g
+(:)h(:)f(:)g(:)h(:)f(:)g(:)61 b Fr(25)335 1825 y(1.6.4)46 b(Additiv)o(e)13
+b(Macros)34 b Fn(:)20 b(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f
+(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61
+b Fr(26)335 1903 y(1.6.5)46 b(P)o(arameterized)14 b(Macros)26
+b Fn(:)20 b(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h
+(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61 b Fr(28)335
+1980 y(1.6.6)46 b(Macro)14 b(Expansion)i Fn(:)k(:)h(:)f(:)g(:)g(:)h(:)f(:)g
+(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h
+(:)f(:)g(:)h(:)f(:)g(:)61 b Fr(30)335 2058 y(1.6.7)46 b(Include)14
+b(Files)37 b Fn(:)21 b(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)
+h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g
+(:)61 b Fr(30)239 2136 y(1.7)42 b(T)o(yp)q(esetting)15 b(F)m(acilities)10
+b Fn(:)21 b(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g
+(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61
+b Fr(32)335 2213 y(1.7.1)46 b(Ov)o(erview)35 b Fn(:)20 b(:)g(:)h(:)f(:)g(:)h
+(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f
+(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61 b Fr(32)335
+2291 y(1.7.2)46 b(T)o(yp)q(esetter)16 b(Indep)q(endence)41
+b Fn(:)21 b(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g
+(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61 b Fr(34)335 2369
+y(1.7.3)46 b(Hierarc)o(hical)14 b(Structure)30 b Fn(:)20 b(:)g(:)h(:)f(:)g(:)
+h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f
+(:)g(:)h(:)f(:)g(:)61 b Fr(34)335 2446 y(1.7.4)46 b(Understanding)14
+b(the)h(Prin)o(ted)f(Do)q(cumen)o(tation)36 b Fn(:)21 b(:)f(:)g(:)g(:)h(:)f
+(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61 b Fr(35)335
+2524 y(1.7.5)46 b(Literals)14 b(and)f(Emphasis)24 b Fn(:)c(:)g(:)h(:)f(:)g(:)
+h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f
+(:)g(:)h(:)f(:)g(:)61 b Fr(37)335 2602 y(1.7.6)46 b(Adding)13
+b(a)h(Header)h(P)o(age)20 b Fn(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)
+g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61
+b Fr(37)335 2679 y(1.7.7)46 b(Commen)o(ts)9 b Fn(:)20 b(:)g(:)h(:)f(:)g(:)h
+(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f
+(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61 b Fr(37)239
+2757 y(1.8)42 b(A)14 b(Complete)f(Example)c Fn(:)21 b(:)f(:)g(:)h(:)f(:)g(:)g
+(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f
+(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61 b Fr(38)239 2835 y(1.9)42
+b(Summary)31 b Fn(:)20 b(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h
+(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g
+(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61 b Fr(39)1053 2940 y(3)p eop
+%%Page: 4 5
+4 4 bop 177 42 a Fo(2)38 b(F)l(unnelW)l(eb)14 b(Hin)o(ts)1296
+b(41)239 116 y Fr(2.1)42 b(Macro)14 b(Names)22 b Fn(:)f(:)f(:)g(:)g(:)h(:)f
+(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g
+(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61 b
+Fr(41)239 190 y(2.2)42 b(Quic)o(k)14 b(Names)30 b Fn(:)21 b(:)f(:)g(:)g(:)h
+(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g
+(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61
+b Fr(42)239 265 y(2.3)42 b(F)m(unnelW)m(eb)13 b(the)i(Martinet)i
+Fn(:)j(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)
+g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61
+b Fr(42)239 339 y(2.4)42 b(Fiddling)12 b(With)i(End)g(of)f(Lines)28
+b Fn(:)20 b(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g
+(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61 b
+Fr(43)239 413 y(2.5)42 b(F)m(udging)13 b(Conditionals)e Fn(:)21
+b(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g
+(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61
+b Fr(44)239 488 y(2.6)42 b(Changing)13 b(the)h(Strength)h(of)e(Headings)19
+b Fn(:)h(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f
+(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61 b Fr(46)239 562 y(2.7)42
+b(E\016ciency)14 b(Notes)h Fn(:)20 b(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h
+(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g
+(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61 b Fr(47)239 636 y(2.8)42
+b(In)o(teractiv)o(e)15 b(Mo)q(de)28 b Fn(:)20 b(:)g(:)h(:)f(:)g(:)h(:)f(:)g
+(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h
+(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61 b Fr(47)239 711 y(2.9)42
+b(Setting)14 b(Up)g(Default)f(Options)29 b Fn(:)20 b(:)g(:)g(:)h(:)f(:)g(:)h
+(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f
+(:)g(:)h(:)f(:)g(:)61 b Fr(49)239 785 y(2.10)21 b(F)m(unnelW)m(eb)13
+b(and)h(Mak)o(e)38 b Fn(:)20 b(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)
+g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f
+(:)g(:)61 b Fr(49)239 860 y(2.11)21 b(The)14 b(Dangers)g(of)g(F)m(unnelW)m
+(eb)33 b Fn(:)20 b(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)
+g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61
+b Fr(50)239 934 y(2.12)21 b(Wholistic)13 b(Debugging)21 b Fn(:)g(:)f(:)g(:)h
+(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f
+(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61 b Fr(53)239
+1008 y(2.13)21 b(Examples)13 b(of)g(F)m(unnelW)m(eb)g(Applications)e
+Fn(:)20 b(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g
+(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61 b Fr(53)335 1083 y(2.13.1)25
+b(Analyzing)13 b(the)h(Monster)h(P)o(ostscript)g(Header)g(File)e
+Fn(:)20 b(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61
+b Fr(54)335 1157 y(2.13.2)25 b(Making)13 b(Ada)g(ADTs)h(more)f(A)31
+b Fn(:)20 b(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h
+(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61 b Fr(55)335 1231
+y(2.13.3)25 b(Multiple)13 b(Language)g(Systems)26 b Fn(:)20
+b(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g
+(:)h(:)f(:)g(:)h(:)f(:)g(:)61 b Fr(55)335 1306 y(2.13.4)25
+b(The)14 b(Case)g(of)g(the)g(Small)e(F)m(unction)g Fn(:)21
+b(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f
+(:)g(:)h(:)f(:)g(:)61 b Fr(56)335 1380 y(2.13.5)25 b(When)14
+b(Commen)o(ts)d(are)k(Bad)24 b Fn(:)d(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h
+(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61
+b Fr(57)335 1455 y(2.13.6)25 b(Do)q(cumen)o(ts)13 b(That)h(Share)g(T)m(ext)41
+b Fn(:)20 b(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f
+(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61 b Fr(58)335 1529 y(2.13.7)25
+b(Generics)18 b Fn(:)i(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)
+f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g
+(:)h(:)f(:)g(:)61 b Fr(59)239 1603 y(2.14)21 b(Summary)31 b
+Fn(:)20 b(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f
+(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g
+(:)h(:)f(:)g(:)61 b Fr(62)177 1719 y Fo(3)38 b(F)l(unnelW)l(eb)14
+b(De\014niti)o(on)1201 b(63)239 1793 y Fr(3.1)42 b(In)o(tro)q(duction)13
+b Fn(:)20 b(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f
+(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g
+(:)h(:)f(:)g(:)61 b Fr(63)239 1868 y(3.2)42 b(Notation)14 b
+Fn(:)21 b(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h
+(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f
+(:)g(:)h(:)f(:)g(:)61 b Fr(63)239 1942 y(3.3)42 b(T)m(erminology)11
+b Fn(:)20 b(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f
+(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g
+(:)h(:)f(:)g(:)61 b Fr(63)239 2017 y(3.4)42 b(An)14 b(Arc)o(hitectural)h(Ov)o
+(erview)40 b Fn(:)20 b(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)
+f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61
+b Fr(64)239 2091 y(3.5)42 b(Diagnostics)32 b Fn(:)20 b(:)h(:)f(:)g(:)g(:)h(:)
+f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g
+(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61 b
+Fr(65)239 2165 y(3.6)42 b(T)o(yp)q(esetter)16 b(Indep)q(endence)45
+b Fn(:)21 b(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g
+(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61
+b Fr(65)239 2240 y(3.7)42 b(Command)11 b(Line)i(In)o(terface)j
+Fn(:)k(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)
+g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61
+b Fr(66)335 2314 y(3.7.1)46 b(In)o(v)o(oking)12 b(F)m(unnelW)m(eb)25
+b Fn(:)20 b(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g
+(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61 b
+Fr(66)335 2388 y(3.7.2)46 b(Comma)o(nd)11 b(Line)j(Argumen)o(ts)35
+b Fn(:)20 b(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h
+(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61 b Fr(67)335 2463
+y(3.7.3)46 b(Options)29 b Fn(:)20 b(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h
+(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g
+(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61 b Fr(68)239 2537 y(3.8)42
+b(File)13 b(Name)g(Inheritance)30 b Fn(:)20 b(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g
+(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h
+(:)f(:)g(:)h(:)f(:)g(:)61 b Fr(70)239 2612 y(3.9)42 b(F)m(unnelW)m(eb)13
+b(Startup)h Fn(:)20 b(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g
+(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f
+(:)g(:)61 b Fr(70)239 2686 y(3.10)21 b(Scanner)33 b Fn(:)21
+b(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g
+(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h
+(:)f(:)g(:)61 b Fr(71)335 2760 y(3.10.1)25 b(Basic)14 b(Input)g(File)g(Pro)q
+(cessing)30 b Fn(:)20 b(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h
+(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61 b Fr(71)335
+2835 y(3.10.2)25 b(Sp)q(ecial)14 b(Sequences)44 b Fn(:)21 b(:)f(:)g(:)g(:)h
+(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g
+(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61 b Fr(72)1053 2940 y(4)p eop
+%%Page: 5 6
+5 5 bop 335 42 a Fr(3.10.3)25 b(Setting)14 b(the)g(Sp)q(ecial)g(Character)24
+b Fn(:)c(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g
+(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61 b Fr(74)335 115 y(3.10.4)25
+b(Inserting)14 b(the)h(Sp)q(ecial)f(Character)g(in)o(to)g(the)g(T)m(ext)30
+b Fn(:)20 b(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61
+b Fr(74)335 189 y(3.10.5)25 b(Inserting)14 b(Arbitrary)g(Characters)i(in)o
+(to)d(the)h(T)m(ext)40 b Fn(:)20 b(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)
+f(:)g(:)h(:)f(:)g(:)61 b Fr(74)335 262 y(3.10.6)25 b(Commen)o(ts)9
+b Fn(:)20 b(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h
+(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g
+(:)61 b Fr(75)335 336 y(3.10.7)25 b(Quic)o(k)14 b(Names)26
+b Fn(:)21 b(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g
+(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61
+b Fr(76)335 409 y(3.10.8)25 b(Inserting)14 b(End)g(of)g(Line)g(Mark)o(ers)42
+b Fn(:)21 b(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g
+(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61 b Fr(76)335 483 y(3.10.9)25
+b(Suppressing)15 b(End)f(of)f(Line)h(Mark)o(ers)21 b Fn(:)f(:)g(:)g(:)h(:)f
+(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61
+b Fr(77)335 556 y(3.10.10)t(Include)14 b(Files)37 b Fn(:)21
+b(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g
+(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61
+b Fr(77)335 630 y(3.10.11)t(Pragmas)13 b Fn(:)20 b(:)g(:)g(:)h(:)f(:)g(:)h(:)
+f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g
+(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61 b Fr(78)468 703
+y(3.10.11.1)8 b(Inden)o(tation)18 b Fn(:)i(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)
+g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f
+(:)g(:)61 b Fr(78)468 777 y(3.10.11.2)8 b(Maxim)o(um)i(Input)k(Line)g(Length)
+19 b Fn(:)i(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g
+(:)h(:)f(:)g(:)61 b Fr(79)468 850 y(3.10.11.3)8 b(Maxim)o(um)i(Output)15
+b(File)e(Line)h(Length)33 b Fn(:)20 b(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h
+(:)f(:)g(:)h(:)f(:)g(:)61 b Fr(79)468 924 y(3.10.11.4)8 b(T)o(yp)q(esetter)35
+b Fn(:)20 b(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g
+(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61 b
+Fr(80)335 997 y(3.10.12)t(F)m(reestanding)14 b(T)o(yp)q(esetter)i(Directiv)o
+(es)23 b Fn(:)d(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g
+(:)h(:)f(:)g(:)h(:)f(:)g(:)61 b Fr(81)468 1071 y(3.10.12.1)8
+b(New)14 b(P)o(age)h Fn(:)21 b(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)
+f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)
+61 b Fr(81)468 1144 y(3.10.12.2)8 b(T)m(able)13 b(of)g(Con)o(ten)o(ts)35
+b Fn(:)20 b(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h
+(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61 b Fr(81)468 1218
+y(3.10.12.3)8 b(V)m(ertical)14 b(Skip)25 b Fn(:)20 b(:)g(:)h(:)f(:)g(:)h(:)f
+(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g
+(:)h(:)f(:)g(:)61 b Fr(81)468 1291 y(3.10.12.4)8 b(Title)i
+Fn(:)21 b(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h
+(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61
+b Fr(82)335 1365 y(3.10.13)t(Scanner/P)o(arser)16 b(In)o(terface)c
+Fn(:)20 b(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g
+(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61 b Fr(82)239 1438
+y(3.11)21 b(P)o(arser)29 b Fn(:)20 b(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g
+(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h
+(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61 b Fr(82)335
+1512 y(3.11.1)25 b(High)13 b(Lev)o(el)h(Structure)20 b Fn(:)g(:)g(:)g(:)h(:)f
+(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g
+(:)h(:)f(:)g(:)h(:)f(:)g(:)61 b Fr(82)335 1585 y(3.11.2)25
+b(F)m(ree)14 b(T)m(ext)31 b Fn(:)20 b(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f
+(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g
+(:)h(:)f(:)g(:)h(:)f(:)g(:)61 b Fr(83)335 1659 y(3.11.3)25
+b(T)o(yp)q(esetter)16 b(Directiv)o(es)42 b Fn(:)20 b(:)g(:)h(:)f(:)g(:)h(:)f
+(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g
+(:)h(:)f(:)g(:)61 b Fr(83)468 1732 y(3.11.3.1)29 b(Section)j
+Fn(:)20 b(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g
+(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61
+b Fr(83)468 1806 y(3.11.3.2)29 b(Literal)13 b(Directiv)o(e)27
+b Fn(:)21 b(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g
+(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61 b Fr(84)468 1879
+y(3.11.3.3)29 b(Emphasis)13 b(Directiv)o(e)38 b Fn(:)20 b(:)h(:)f(:)g(:)g(:)h
+(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g
+(:)61 b Fr(85)335 1953 y(3.11.4)25 b(Macros)42 b Fn(:)20 b(:)g(:)g(:)h(:)f(:)
+g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h
+(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61 b Fr(85)468
+2026 y(3.11.4.1)29 b(Names)41 b Fn(:)20 b(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f
+(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g
+(:)h(:)f(:)g(:)61 b Fr(86)468 2100 y(3.11.4.2)29 b(F)m(ormal)11
+b(P)o(arameter)j(Lists)24 b Fn(:)c(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)
+f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61 b Fr(86)335
+2173 y(3.11.5)25 b(Expressions)g Fn(:)20 b(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)
+f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g
+(:)h(:)f(:)g(:)h(:)f(:)g(:)61 b Fr(86)335 2247 y(3.11.6)25
+b(Macro)14 b(Calls)j Fn(:)j(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f
+(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g
+(:)h(:)f(:)g(:)61 b Fr(86)335 2320 y(3.11.7)25 b(F)m(ormal)11
+b(P)o(arameters)19 b Fn(:)i(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f
+(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61
+b Fr(87)335 2394 y(3.11.8)25 b(Macros)14 b(are)h(Static)e Fn(:)20
+b(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h
+(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61 b Fr(87)239
+2467 y(3.12)21 b(Analyser)16 b Fn(:)21 b(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g
+(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h
+(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61 b Fr(88)239
+2541 y(3.13)21 b(T)m(angle)g Fn(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g
+(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h
+(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61 b Fr(88)239
+2614 y(3.14)21 b(W)m(ea)o(v)o(e)26 b Fn(:)20 b(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)
+h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g
+(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61
+b Fr(89)335 2688 y(3.14.1)25 b(T)m(arget)13 b(T)o(yp)q(esetter)40
+b Fn(:)21 b(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g
+(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61
+b Fr(89)335 2761 y(3.14.2)25 b(Cross)14 b(Reference)i(Num)o(b)q(ering)22
+b Fn(:)e(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f
+(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61 b Fr(89)239 2835 y(3.15)21
+b(F)m(unnelW)m(eb)13 b(Shell)32 b Fn(:)20 b(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g
+(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f
+(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61 b Fr(90)1053 2940 y(5)p
+eop
+%%Page: 6 7
+6 6 bop 335 42 a Fr(3.15.1)25 b(In)o(tro)q(duction)41 b Fn(:)21
+b(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g
+(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61
+b Fr(90)335 116 y(3.15.2)25 b(Return)14 b(Statuses)43 b Fn(:)20
+b(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h
+(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61 b Fr(90)335
+190 y(3.15.3)25 b(Comma)o(nd)11 b(Line)j(Length)42 b Fn(:)20
+b(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f
+(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61 b Fr(91)335 265 y(3.15.4)25
+b(String)13 b(Substitution)k Fn(:)k(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g
+(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f
+(:)g(:)61 b Fr(91)335 339 y(3.15.5)25 b(Ho)o(w)13 b(a)h(Command)d(Line)i(is)h
+(Pro)q(cessed)j Fn(:)j(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)
+g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61 b Fr(92)335 413 y(3.15.6)25
+b(Options)k Fn(:)20 b(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f
+(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g
+(:)h(:)f(:)g(:)61 b Fr(92)335 488 y(3.15.7)25 b(Shell)13 b(Commands)26
+b Fn(:)20 b(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f
+(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61
+b Fr(93)468 562 y(3.15.7.1)29 b(Absen)o(t)37 b Fn(:)20 b(:)h(:)f(:)g(:)g(:)h
+(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g
+(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61 b Fr(93)468 636 y(3.15.7.2)29
+b(Co)q(dify)41 b Fn(:)20 b(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)
+f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)
+61 b Fr(93)468 711 y(3.15.7.3)29 b(Compare)h Fn(:)21 b(:)f(:)g(:)g(:)h(:)f(:)
+g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h
+(:)f(:)g(:)h(:)f(:)g(:)61 b Fr(93)468 785 y(3.15.7.4)29 b(De\014ne)17
+b Fn(:)j(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f
+(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61
+b Fr(94)468 860 y(3.15.7.5)29 b(Di\013)h Fn(:)21 b(:)f(:)g(:)h(:)f(:)g(:)g(:)
+h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g
+(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61 b Fr(94)468 934 y(3.15.7.6)29
+b(Di\013summary)22 b Fn(:)e(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h
+(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61
+b Fr(95)468 1008 y(3.15.7.7)29 b(Di\013zero)22 b Fn(:)e(:)h(:)f(:)g(:)g(:)h
+(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g
+(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61 b Fr(95)468 1083 y(3.15.7.8)29
+b(Eneo)41 b Fn(:)20 b(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f
+(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61
+b Fr(95)468 1157 y(3.15.7.9)29 b(Execute)20 b Fn(:)g(:)h(:)f(:)g(:)g(:)h(:)f
+(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g
+(:)h(:)f(:)g(:)h(:)f(:)g(:)61 b Fr(96)468 1231 y(3.15.7.10)8
+b(Exists)21 b Fn(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f
+(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61
+b Fr(96)468 1306 y(3.15.7.11)8 b(Fixeols)35 b Fn(:)20 b(:)h(:)f(:)g(:)g(:)h
+(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g
+(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61 b Fr(96)468 1380 y(3.15.7.12)8
+b(Fw)41 b Fn(:)21 b(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h
+(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g
+(:)61 b Fr(97)468 1455 y(3.15.7.13)8 b(Help)14 b Fn(:)21 b(:)f(:)g(:)h(:)f(:)
+g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h
+(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61 b Fr(97)468 1529
+y(3.15.7.14)8 b(Here)15 b Fn(:)21 b(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h
+(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f
+(:)g(:)h(:)f(:)g(:)61 b Fr(98)468 1603 y(3.15.7.15)8 b(Quit)15
+b Fn(:)21 b(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g
+(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61
+b Fr(98)468 1678 y(3.15.7.16)8 b(Set)41 b Fn(:)21 b(:)f(:)g(:)h(:)f(:)g(:)g
+(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f
+(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61 b Fr(98)468 1752 y(3.15.7.17)8
+b(Sho)o(w)35 b Fn(:)20 b(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h
+(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g
+(:)61 b Fr(98)468 1826 y(3.15.7.18)8 b(Skipto)14 b Fn(:)20
+b(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g
+(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61 b
+Fr(98)468 1901 y(3.15.7.19)8 b(Status)16 b Fn(:)k(:)g(:)h(:)f(:)g(:)g(:)h(:)f
+(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g
+(:)h(:)f(:)g(:)h(:)f(:)g(:)61 b Fr(99)468 1975 y(3.15.7.20)8
+b(T)m(olerate)14 b Fn(:)20 b(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h
+(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g
+(:)41 b Fr(100)468 2049 y(3.15.7.21)8 b(T)m(race)31 b Fn(:)20
+b(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g
+(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)41 b
+Fr(100)468 2124 y(3.15.7.22)8 b(W)m(rite)29 b Fn(:)20 b(:)g(:)h(:)f(:)g(:)g
+(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f
+(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)41 b Fr(100)468 2198 y(3.15.7.23)8
+b(W)m(riteu)38 b Fn(:)20 b(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)
+f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)
+41 b Fr(100)239 2273 y(3.16)21 b(Concluding)13 b(Remarks)22
+b Fn(:)f(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h
+(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)41
+b Fr(100)177 2388 y Fo(4)d(F)l(unnelW)l(eb)14 b(Installation)1146
+b(101)239 2463 y Fr(4.1)42 b(Obtaining)13 b(a)h(Cop)o(y)f(of)g(F)m(unnelW)m
+(eb)37 b Fn(:)21 b(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)
+f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)41 b Fr(101)239
+2537 y(4.2)h(Establishing)13 b(The)i(Directory)f(T)m(ree)41
+b Fn(:)21 b(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g
+(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)41 b Fr(102)335
+2612 y(4.2.1)46 b(Admin)12 b(Directory)25 b Fn(:)20 b(:)h(:)f(:)g(:)g(:)h(:)f
+(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g
+(:)h(:)f(:)g(:)h(:)f(:)g(:)41 b Fr(102)335 2686 y(4.2.2)46
+b(Answ)o(ers)15 b(Directory)30 b Fn(:)21 b(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)
+g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h
+(:)f(:)g(:)41 b Fr(102)335 2760 y(4.2.3)46 b(Hac)o(kman)12
+b(Directory)f Fn(:)21 b(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g
+(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)41
+b Fr(103)335 2835 y(4.2.4)46 b(Results)14 b(Directory)i Fn(:)k(:)h(:)f(:)g(:)
+g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f
+(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)41 b Fr(103)1053 2940 y(6)p
+eop
+%%Page: 7 8
+7 7 bop 335 42 a Fr(4.2.5)46 b(Scripts)14 b(Directory)24 b
+Fn(:)c(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)
+g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)41
+b Fr(103)335 116 y(4.2.6)46 b(Sources)15 b(Directory)d Fn(:)20
+b(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h
+(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)41 b Fr(103)335
+191 y(4.2.7)46 b(T)m(ests)14 b(Directory)23 b Fn(:)d(:)g(:)h(:)f(:)g(:)g(:)h
+(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g
+(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)41 b Fr(104)335 266 y(4.2.8)46
+b(Userman)13 b(Directory)20 b Fn(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g
+(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f
+(:)g(:)41 b Fr(105)239 340 y(4.3)h(Compiling)11 b(F)m(unnelW)m(eb)29
+b Fn(:)20 b(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h
+(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)41
+b Fr(105)239 415 y(4.4)h(T)m(esting)14 b(F)m(unnelW)m(eb)k
+Fn(:)i(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)
+h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)41
+b Fr(105)239 490 y(4.5)h(Installing)12 b(F)m(unnelW)m(eb)i
+Fn(:)21 b(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h
+(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)41
+b Fr(106)239 565 y(4.6)h(Prin)o(ting)13 b(Man)o(uals)21 b Fn(:)f(:)g(:)h(:)f
+(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g
+(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)41 b
+Fr(107)239 639 y(4.7)h(Installation)12 b(Problems?)24 b Fn(:)c(:)g(:)h(:)f(:)
+g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h
+(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)41 b Fr(107)177 756
+y Fo(5)d(F)l(unnelW)l(eb)14 b(Administr)o(ati)o(on)1066 b(109)239
+830 y Fr(5.1)42 b(In)o(tro)q(duction)13 b Fn(:)20 b(:)h(:)f(:)g(:)g(:)h(:)f
+(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g
+(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)41 b
+Fr(109)239 905 y(5.2)h(The)14 b(User's)h(Commitm)n(en)o(t)d(T)m(o)h(F)m
+(unnelW)m(eb)30 b Fn(:)20 b(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g
+(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)41 b Fr(109)239
+980 y(5.3)h(Do)q(cumen)o(tation)25 b Fn(:)20 b(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)
+g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h
+(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)41 b Fr(110)239 1054
+y(5.4)h(Registration)17 b Fn(:)j(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g
+(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f
+(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)41 b Fr(110)239 1129 y(5.5)h(Supp)q(ort)29
+b Fn(:)21 b(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g
+(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h
+(:)f(:)g(:)h(:)f(:)g(:)41 b Fr(110)239 1204 y(5.6)h(Cop)o(yrigh)o(t)26
+b Fn(:)20 b(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h
+(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f
+(:)g(:)h(:)f(:)g(:)41 b Fr(112)239 1279 y(5.7)h(No)o(w)o(arran)o(t)o(y)27
+b Fn(:)20 b(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f
+(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g
+(:)h(:)f(:)g(:)41 b Fr(112)239 1353 y(5.8)h(Distribution)18
+b Fn(:)i(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g
+(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h
+(:)f(:)g(:)41 b Fr(113)239 1428 y(5.9)h(Mo)q(di\014cation)11
+b Fn(:)20 b(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f
+(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g
+(:)h(:)f(:)g(:)41 b Fr(113)239 1503 y(5.10)21 b(V)m(ersions)k
+Fn(:)c(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)
+f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g
+(:)h(:)f(:)g(:)41 b Fr(114)239 1577 y(5.11)21 b(FTP)14 b(Arc)o(hiv)o(e)g(and)
+g(Author)36 b Fn(:)21 b(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g
+(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)41
+b Fr(114)177 1694 y Fo(A)26 b(Glossary)1456 b(115)177 1810
+y(B)28 b(References)1412 b(117)177 1926 y(Index)1581 b(117)1053
+2940 y Fr(7)p eop
+%%Page: 8 9
+8 8 bop 1053 2940 a Fr(8)p eop
+%%Page: 9 10
+9 9 bop 177 399 a Fp(Preface)177 639 y Fr(When,)17 b(in)f(1986,)g(I)g
+(\014rst)i(read)f(Donald)e(Kn)o(uth's)i(tec)o(hnical)g(rep)q(ort)h(on)e(W)m
+(eb)p Fo([Kn)o(uth83])p Fr(,)f(and)h(tried)h(W)m(eb)177 689
+y(out,)f(I)f(w)o(as)h(sim)o(ultaneously)d(excited)k(b)o(y)e(Kn)o(uth's)h
+(idea)f(of)g(literate)h(programming,)c(and)k(disapp)q(oin)o(ted)f(b)o(y)177
+739 y(his)f(implemen)o(tati)o(on)d(of)i(it.)18 b(I)13 b(w)o(as)h(excited)g(b)
+q(ecause)i(I)d(could)h(sense)h(the)f(p)q(oten)o(tial)g(for)f(the)h(literate)g
+(st)o(yle)g(to)177 789 y(transform)g(the)h(state)g(of)f(mind)f(of)h(the)h
+(programmer,)d(but)j(w)o(as)f(disapp)q(oin)o(ted)g(b)o(y)h(W)m(eb's)f
+(rigidit)o(y)f(and)h(lac)o(k)177 839 y(of)h(practicalit)o(y)m(,)f(whic)o(h)h
+(seemed)h(to)f(b)q(etra)o(y)g(this)h(p)q(oten)o(tial.)21 b(The)16
+b(W)m(eb)f(I)g(used)h(w)o(as)f(P)o(ascal-sp)q(eci\014c,)i(T)1881
+847 y(E)1904 839 y(X-)177 888 y(sp)q(eci\014c,)c(and)e(applied)f(to)q(o)h
+(man)o(y)e(constrain)o(ts)i(to)g(the)h(programmi)o(ng)c(pro)q(cess.)19
+b(In)11 b(particular,)g(it)g(insisted)g(on)177 938 y(taking)i(con)o(trol)g
+(of)g(the)h(program)e(text,)h(mangling)e(the)j(co)q(de)g(in)f(the)h(P)o
+(ascal)f(output)h(\014les,)f(and)h(imp)q(osing)d(its)177 988
+y(o)o(wn)i(rather)g(rigid)f(ideas)h(ab)q(out)g(inden)o(ting)f(in)g(the)i(T)
+1026 997 y(E)1049 988 y(X)f(output.)18 b(All)12 b(this,)g(com)o(bined)g(with)
+g(the)i(complexit)o(y)177 1038 y(of)f(the)i(to)q(ol,)e(led)h(me)e(to)i(come)f
+(to)h(p)q(erceiv)o(e)h(W)m(eb)f(as)g(problem)e(rather)j(than)f(solution.)177
+1112 y(Despite)h(all)f(this,)g(I)h(w)o(as)f(w)o(ell)g(and)g(truly)h(ho)q(ok)o
+(ed)f(on)h(the)g(idea)f(of)g(literate)h(programming)o(.)i(The)e(inevitable)
+177 1162 y(result)g(w)o(as)f(that)g(I)f(designed)i(and)f(implem)o(en)o(ted)e
+(m)o(y)g(o)o(wn)i(v)o(ersion)g(of)f(W)m(eb)h(|)f(F)m(unnelW)m(eb!)177
+1237 y(F)m(unnelW)m(eb)d(is)h(not)f(the)i(most)d(sophisticated)j(literate)e
+(programming)d(to)q(ol)j(a)o(v)n(ailable,)f(but)i(it)f(is)h(an)f(extremely)
+177 1287 y Fm(pr)n(actic)n(al)i Fr(to)q(ol,)g(striving)g(for)g(simplicit)o(y)
+f(and)h(p)q(ortabilit)o(y)g(in)g(all)f(areas.)18 b(Not)13 b(only)f(is)h(F)m
+(unnelW)m(eb)f(language-)177 1337 y(indep)q(enden)o(t,)23 b(and)d(to)g(some)f
+(exten)o(t)i(t)o(yp)q(esetter)i(indep)q(enden)o(t,)f(but)f(its)f(implemen)o
+(tatio)o(n)d(also)j(stresses)177 1386 y(p)q(ortabilit)o(y)m(,)14
+b(b)q(eing)h(written)h(in)f(C,)g(and)h(curren)o(tly)g(op)q(erating)g(on)f
+(four)g(ma)r(jor)f(platforms)g(\(Sun,)h(V)m(ax,)g(PC,)177 1436
+y(Mac\).)j(F)m(unnelW)m(eb)13 b(allo)o(ws)f(the)j(programmer)c(total)h(con)o
+(trol)i(o)o(v)o(er)f(the)h(output)g(\014le,)f(making)e(it)i(suitable)g(for)
+177 1486 y(use)18 b(with)e(all)g(sorts)h(of)f(format-sensitiv)o(e)g
+(languages.)26 b(It)17 b(also)f(allo)o(ws)f(con)o(trol)i(o)o(v)o(er)f(its)h
+(o)o(wn)f(source)i(co)q(de,)177 1536 y(whic)o(h)11 b(has)g(b)q(een)h
+(released)g(under)g(a)e(GNU)h(license.)18 b(F)m(unnelW)m(eb)10
+b(is)h(quite)g(solid,)f(ha)o(ving)g(to)h(pass)g(a)g(regression)177
+1586 y(testing)17 b(suite)h(of)e(o)o(v)o(er)h(200)f(tests)i(b)q(efore)f(b)q
+(eing)g(released.)28 b(Finally)m(,)15 b(F)m(unnelW)m(eb)h(is)h(w)o(ell)f(do)q
+(cumen)o(ted)h(b)o(y)177 1636 y(this)d(man)o(ual)e(whic)o(h)h(pro)o(vides)h
+(a)g(tutorial,)f(adv)n(anced)h(hin)o(ts,)f(and)h(a)f(language)g
+(de\014nition.)177 1710 y(I)e(w)o(ould)e(lik)o(e)h(to)g(dedicate)i(F)m
+(unnelW)m(eb)e(and)g(this)g(man)o(ual)e(to)j(Donald)e(Kn)o(uth)i(and)f(his)h
+(literate)f(programming)177 1760 y(to)q(ol)g(W)m(eb.)17 b(Although)10
+b(this)g(man)o(ual)f(is)h(somewhat)g(critical)g(of)g(some)g(asp)q(ects)i(of)e
+(W)m(eb,)h(this)f(criticism)g(is)g(really)177 1810 y(a)j(pro)q(duct)h(of)e
+(di\013ering)h(design)g(goals.)k(Kn)o(uth)d(designed)f(a)g(paradigm)e
+(\(literate)i(programming\))d(and)j(a)f(to)q(ol)177 1860 y(\(W)m(eb\))20
+b(aimed)f(at)h(the)h(highest)f(pitc)o(h)h(of)e(program)g(presen)o(tation)i
+(and)f(t)o(yp)q(esetting.)38 b(F)m(unnelW)m(eb)20 b(aims)177
+1910 y(lo)o(w)o(er,)13 b(relaxing)f(constrain)o(ts,)h(and)g(making)e
+(compromises)g(in)h(order)i(to)f(ac)o(hiev)o(e)g(simplicit)o(y)m(,)d
+(\015exibilit)o(y)m(,)h(and)177 1959 y(p)q(ortabilit)o(y)m(.)16
+b(The)c(result)g(is)f(a)g(practical)h(to)q(ol)f(whic)o(h)g(I)g(hop)q(e)h
+(will)e(attract)i(more)f(p)q(eople)h(to)f(the)h(literate)g(st)o(yle.)177
+2059 y Fo(Ross)j(N.)i(Williams)177 2109 y(Adelaide,)d(Australia)177
+2159 y(Ma)o(y)i(1992)1053 2940 y Fr(9)p eop
+%%Page: 10 11
+10 10 bop 1042 2940 a Fr(10)p eop
+%%Page: 11 12
+11 11 bop 177 399 a Fp(Ac)m(kno)m(wledgemen)m(ts)177 645 y
+Fr(Man)o(y)16 b(thanks)h(to)g Fo(Da)o(vid)h(Hulse)d Fr(\()p
+Fl(dave@cs.adelaide.e)o(du.au)o Fr(\))f(for)j(translating)f(the)h(original)e
+(v)o(ersion)177 695 y(of)g(F)m(unnelW)m(eb)g(\(F)m(unnelW)m(eb)h(V1\))f(from)
+f(Ada)i(in)o(to)f(C)g(and)h(getting)f(it)h(to)f(w)o(ork)g(on)h(Unix)f(and)h
+(a)f(PC.)g(The)177 744 y(C)i(co)q(de)h(written)f(b)o(y)g(Da)o(vid)e(\(F)m
+(unnelW)m(eb)i(V2\))f(formed)g(the)h(basis)g(of)g(F)m(unnelW)m(eb)f(V3,)h
+(but)g(w)o(as)g(en)o(tirely)177 794 y(rewritten)h(during)f(the)h(in)o(tensiv)
+o(e)f(re\014nemen)o(t)h(and)e(feature-injection)i(p)q(erio)q(d)f(leading)f
+(up)h(to)g(this)h(release)177 844 y(\(F)m(unnelW)m(eb)12 b(V3)g(is)f(ab)q
+(out)h(three)h(times)e(the)i(size)g(of)e(F)m(unnelW)m(eb)g(V2\).)18
+b(Nev)o(ertheless,)c(without)e(this)g(imp)q(or-)177 894 y(tan)o(t)h(\014rst)i
+(translation)d(step,)i(I)g(w)o(ould)e(probably)h(not)g(ha)o(v)o(e)g(found)g
+(the)h(motiv)n(ation)d(to)i(dev)o(elop)g(F)m(unnelW)m(eb)177
+944 y(to)h(its)g(presen)o(t)h(state.)177 1018 y(Thanks)f(go)e(to)h
+Fo(Simon)h(Hac)o(k)o(ett)e Fr(\()p Fl(simon@internode.com)o(.au)p
+Fr(\))e(of)j(In)o(terno)q(de)h(Systems)f(Pt)o(y)h(Ltd)f(for)g(the)177
+1068 y(use)18 b(of)e(his)h(Sun,)h(Mac,)g(and)e(PC,)h(for)g(assistance)h(in)f
+(p)q(orting)f(F)m(unnelW)m(eb)h(to)g(the)g(Sun)h(and)e(PC,)h(and)g(for)177
+1118 y(helpful)c(discussions.)177 1193 y(Thanks)j(go)g(to)f
+Fo(Jerem)o(y)i(Begg)f Fr(\()p Fl(jeremy@vsm.com.au)o Fr(\))d(of)j(VSM)g(Soft)
+o(w)o(are)f(Services)j(for)d(the)i(use)g(of)e(his)177 1243
+y(V)-5 b(AX,)14 b(and)g(for)g(assistance)h(with)e(the)i(VMS-sp)q(eci\014c)g
+(co)q(de.)177 1317 y(Thanks)50 b(to)h Fo(Barry)57 b(Dwy)o(er)50
+b Fr(\()p Fl(dwyer@cs.adelaid)o(e.edu)o(.au)p Fr(\))d(and)j
+Fo(Roger)57 b(Brissenden)177 1367 y Fr(\()p Fl(rjb@koala.harvard.e)o(du)p
+Fr(\))15 b(for)j(trying)g(out)g(F)m(unnelW)m(eb)g(V)m(ersion)g(1)g(in)g(1987)
+f(and)h(pro)o(viding)f(v)n(aluable)177 1417 y(feedbac)o(k.)177
+1492 y(Thanks)d(to)g(Donald)f(Kn)o(uth)h(for)f(establishing)h(the)g(idea)g
+(of)f(literate)h(programming)d(in)i(the)i(\014rst)f(place.)177
+1591 y Fo(Ross)h(N.)i(Williams)177 1641 y(Adelaide,)d(Australia)177
+1691 y(Ma)o(y)i(1992)1042 2940 y Fr(11)p eop
+%%Page: 12 13
+12 12 bop 1042 2940 a Fr(12)p eop
+%%Page: 13 14
+13 13 bop 177 399 a Fp(Presen)m(tation)42 b(Notes)177 639 y
+Fo(References:)e Fr(All)24 b(references)29 b(are)c(set)i(in)e(b)q(old)f(and)i
+(are)f(cited)h(in)f(square)h(brac)o(k)o(ets)h(in)e(the)h(form)177
+689 y Fo([)p Fn(<)p Fm(\014rstauthor)p Fn(><)p Fm(ye)n(ar)p
+Fn(>)p Fo(])p Fr(.)19 b(All)13 b(references)j(cited)e(in)f(the)g(text)h(app)q
+(ear)g(in)f(the)h(reference)h(list)e(and)g(the)h(index.)177
+764 y Fo(Sp)q(ecial)d(terms:)17 b Fr(New)12 b(or)f(imp)q(ortan)o(t)f
+(terminology)f(has)i(b)q(een)i(set)f(in)f(b)q(old)g(face)h(and)f(app)q(ears)h
+(in)f(the)h(index.)177 814 y(A)i(glossary)g(app)q(ears)g(as)g(an)g(app)q
+(endix.)177 888 y Fo(T)o(yp)q(esetting:)69 b Fr(This)41 b(do)q(cumen)o(t)f(w)
+o(as)g(prepared)i(b)o(y)e(the)h(author)f(using)h(Andrew)g(T)m(rev)o(or-)177
+938 y(ro)o(w's)29 b(\()p Fl(akt150@cscgpo.anu.e)o(du.au)o Fr(\))e(implemen)o
+(tatio)o(n)g(\(OzT)m(eX\))j(of)f(the)h(T)1558 947 y(E)1581
+938 y(X/L)1644 933 y Fk(a)1663 938 y Fr(T)1686 951 y(E)1709
+938 y(X)p Fo([Kn)o(uth84])177 988 y([Lamp)q(ort86])13 b Fr(t)o(yp)q(esetting)
+i(system)e(running)h(on)g(a)f(Macin)o(tosh-SE.)177 1063 y Fo(Graphics:)i
+Fr(All)c(diagrams)e(ha)o(v)o(e)i(b)q(een)i(constructed)g(out)e(of)g(text)h
+(using)f(the)h(L)1431 1058 y Fk(a)1450 1063 y Fr(T)1473 1075
+y(E)1496 1063 y(X)f Fl(verbatim)f Fr(en)o(vironmen)o(t)177
+1112 y(so)17 b(as)f(to)h(allo)o(w)e(this)h(do)q(cumen)o(t)g(to)h(b)q(e)g
+(disseminated)e(electronically)i(and)f(prin)o(ted)h(using)f(L)1695
+1107 y Fk(a)1714 1112 y Fr(T)1737 1125 y(E)1761 1112 y(X)g(without)177
+1162 y(access)g(to)e(the)g(author's)g(dra)o(wing)f(to)q(ols.)177
+1237 y Fo(Kno)o(wn)g(t)o(yp)q(esetting)d(problems:)k Fr(While)d(ev)o(ery)h
+(attempt)f(has)h(b)q(een)g(made)e(to)i(giv)o(e)f(a)g(go)q(o)q(d)g(presen)o
+(tation)177 1287 y(within)h(the)h(time)e(a)o(v)n(ailable,)f(some)i(shortcuts)
+i(ha)o(v)o(e)e(had)g(to)g(b)q(e)h(tak)o(en.)18 b(In)13 b(particular,)f(the)h
+(author)f(has)h(b)q(een)177 1337 y(unable)h(to)g(w)o(ork)f(out)h(ho)o(w)g(to)
+f(get)h(L)754 1332 y Fk(a)773 1337 y Fr(T)796 1349 y(E)820
+1337 y(X)g(to)g(suppress)h(blank)f(pages)g(at)f(the)i(start)f(of)g(c)o
+(hapters.)1042 2940 y(13)p eop
+%%Page: 14 15
+14 14 bop 1042 2940 a Fr(14)p eop
+%%Page: 15 16
+15 15 bop 177 378 a Fj(Chapter)34 b(1)177 610 y Fp(A)40 b(T)-10
+b(utorial)41 b(In)m(tro)s(duction)177 876 y Fi(1.1)70 b(What)23
+b(is)f(Literate)g(Programming?)177 992 y Fr(A)e(traditional)e(computer)h
+(program)f(consists)i(of)f(a)g(text)h(\014le)f(con)o(taining)g(program)f(co)q
+(de.)35 b(Scattered)21 b(in)177 1041 y(amongst)12 b(the)j(program)d(co)q(de)j
+(are)f(commen)o(ts)e(whic)o(h)i(describ)q(e)i(the)e(v)n(arious)f(parts)i(of)e
+(the)i(co)q(de.)177 1116 y(In)d Fo(literate)f(programming)e
+Fr(the)k(emphasis)e(is)h(rev)o(ersed.)20 b(Instead)13 b(of)e(writing)g(co)q
+(de)i(con)o(taining)e(do)q(cumen-)177 1166 y(tation,)g(the)i(literate)f
+(programmer)e(writes)i(do)q(cumen)o(tation)f(con)o(taining)g(co)q(de.)18
+b(No)11 b(longer)h(do)q(es)h(the)f(English)177 1216 y(commen)o(tary)d
+(injected)j(in)o(to)f(a)g(program)f(ha)o(v)o(e)h(to)g(b)q(e)h(hidden)f(in)g
+(commen)o(t)e(delimiters)h(at)i(the)f(top)h(of)e(the)i(\014le,)177
+1266 y(or)j(under)g(pro)q(cedure)h(headings,)e(or)h(at)f(the)h(end)g(of)f
+(lines.)19 b(Instead,)c(it)f(is)g(wrenc)o(hed)i(in)o(to)e(the)h(da)o(yligh)o
+(t)e(and)177 1315 y(made)j(the)h(main)e(fo)q(cus.)26 b(The)17
+b(\\program")e(then)i(b)q(ecomes)g(primarily)d(a)j(do)q(cumen)o(t)f(directed)
+i(at)f(h)o(umans,)177 1365 y(with)12 b(the)h(co)q(de)h(b)q(eing)e(herded)i(b)
+q(et)o(w)o(een)g(\\co)q(de)f(delimiters")e(from)g(where)i(it)f(can)h(b)q(e)g
+(extracted)h(and)e(sh)o(u\017ed)177 1415 y(out)i(sidew)o(a)o(ys)g(to)g(the)g
+(language)f(system)h(b)o(y)f(literate)i(programmi)o(ng)c(to)q(ols.)177
+1490 y(The)k(e\013ect)i(of)d(this)h(simple)e(shift)h(of)h(emphasis)e(can)i(b)
+q(e)h(so)f(profound)f(as)h(to)f(c)o(hange)h(one's)g(whole)g(approac)o(h)177
+1540 y(to)f(programming.)i(Under)f(the)g(literate)g(programming)c(paradigm,)g
+(the)k(cen)o(tral)g(activit)o(y)f(of)f(programming)177 1589
+y(b)q(ecomes)i(that)g(of)f(con)o(v)o(eying)g(meaning)f(to)i(other)g(in)o
+(telligen)o(t)f(b)q(eings)h(rather)g(than)g(merely)f(con)o(vincing)g(the)177
+1639 y(computer)i(to)g(b)q(eha)o(v)o(e)g(in)g(a)g(particular)g(w)o(a)o(y)m(.)
+23 b(It)16 b(is)g(the)h(di\013erence)h(b)q(et)o(w)o(een)f(p)q(erforming)e
+(and)h(exp)q(osing)g(a)177 1689 y(magic)c(tric)o(k.)177 1764
+y(In)18 b(order)g(to)g(program)e(in)i(a)f(literate)h(st)o(yle,)h(particular)e
+(to)q(ols)h(are)g(required.)30 b(The)19 b(traditional)d(approac)o(h)177
+1814 y(\(used)f(in)f(the)g(F)m(unnelW)m(eb)g(system\))g(is)g(to)f(ha)o(v)o(e)
+h(some)f(sort)i(of)e(text-\014le-in/text-\014le-out)h(utilit)o(y)f(that)h
+(reads)177 1863 y(a)20 b(literate)f(program)f(\(con)o(taining)h(a)h(program)e
+(commen)o(tary)f(p)q(epp)q(ered)22 b(with)d(scraps)i(of)e(program)f(text\))
+177 1913 y(and)e(writes)g(out)g(a)g(\014le)g(con)o(taining)e(all)h(the)h
+(program)f(co)q(de)h(and)g(a)f(\014le)h(con)o(taining)f(t)o(yp)q(esetter)j
+(commands)177 1963 y(represen)o(ting)e(the)e(en)o(tire)h(input)e(do)q(cumen)o
+(t,)g(do)q(cumen)o(tation,)g(co)q(de,)h(and)g(all)e(\()p Fo(Figure)i(1)p
+Fr(\).)177 2038 y(Giv)o(en)h(the)h(coming)e(age)h(of)g(h)o(yp)q(ertext)i
+(systems,)e(this)h(is)f(probably)g(not)h(the)g(b)q(est)g(approac)o(h.)23
+b(Ho)o(w)o(ev)o(er,)16 b(it)177 2087 y(do)q(es)c(mesh)f(b)q(eautifully)f
+(with)h(curren)o(t)i(text)f(\014les)g(and)f(command)e(line)i(in)o(terfaces,)h
+(the)g(exp)q(ectation)g(of)f(linear)177 2137 y(presen)o(tations)k(in)f(the)g
+(do)q(cumen)o(ts)g(w)o(e)g(read,)g(and)g(the)h(particular)e(requiremen)o(ts)i
+(of)e(curren)o(t)i(programming)177 2187 y(languages)f(and)f(t)o(yp)q
+(esetting)i(systems.)j(It)c(is)g(certainly)g(not)g(a)f(bad)h(approac)o(h.)177
+2262 y(With)i(this)h(structure)h(in)e(place,)h(the)g(literate)g(programming)c
+(system)j(can)h(pro)o(vide)f(far)g(more)g(than)g(just)h(a)177
+2312 y(rev)o(ersal)h(of)e(the)i(priorit)o(y)e(of)h(commen)o(ts)e(and)i(co)q
+(de.)28 b(In)17 b(its)g(full)e(blo)o(wn)i(form,)e(a)i(go)q(o)q(d)f(literate)i
+(program-)177 2361 y(ming)c(facilit)o(y)g(can)h(pro)o(vide)h(total)f(supp)q
+(ort)h(for)f(the)h(essen)o(tial)g(thrust)h(of)e(literate)h(programmi)o(ng,)c
+(whic)o(h)k(is)177 2411 y(that)f(computer)g(programs)f(should)h(b)q(e)h
+(written)g(more)e(for)h(the)h(h)o(uman)e(reader)i(than)f(for)g(the)h
+(compiler.)21 b(In)177 2461 y(particular,)13 b(a)h(literate)g(programming)c
+(system)k(can)g(pro)o(vide:)295 2536 y Fo(Re-ordering)f(of)j(co)q(de:)k
+Fr(Programmi)o(ng)11 b(languages)j(often)g(force)h(the)g(programmer)d(to)i
+(giv)o(e)295 2586 y(the)g(v)n(arious)e(parts)h(of)f(a)h(computer)f(program)f
+(in)h(a)h(particular)f(order.)19 b(F)m(or)12 b(example,)f(the)j(P)o(as-)295
+2635 y(cal)f(programming)d(language)p Fo([BSI82])i Fr(imp)q(oses)g(the)i
+(ordering:)j(constan)o(ts,)d(t)o(yp)q(es,)g(v)n(ariables,)295
+2685 y(pro)q(cedures,)i(co)q(de.)k(P)o(ascal)14 b(also)g(requires)h(that)g
+(pro)q(cedures)h(app)q(ear)f(in)f(an)g(order)h(consisten)o(t)295
+2735 y(with)g(the)g(partial)f(ordering)h(imp)q(osed)e(b)o(y)i(the)g(static)g
+(call)f(graph)h(\(but)g(forw)o(ard)g(declarations)295 2785
+y(allo)o(w)e(this)i(to)g(b)q(e)g(b)o(ypassed\).)21 b(In)15
+b(con)o(trast,)g(the)h(literate)f(st)o(yle)f(requires)i(that)f(the)g
+(program-)295 2835 y(mer)c(b)q(e)i(free)f(to)g(presen)o(t)h(the)f(computer)g
+(program)e(in)h(an)o(y)h(order)g(whatso)q(ev)o(er.)19 b(The)12
+b(facilit)o(y)e(to)1042 2940 y(15)p eop
+%%Page: 16 17
+16 16 bop 526 789 a Fl(+----------------)o(-----)o(----)o(-----)o(-----)o
+(-----)o(-+)526 838 y(|)21 b(File)g(containing)f(the)h(program)g(description)
+e(|)526 888 y(|)i(peppered)g(with)g(scraps)f(of)h(program)g(code.)64
+b(|)526 938 y(|)21 b(This)g(is)h(what)f(the)g(programmer)f(works)g(on.)65
+b(|)526 988 y(|)218 b(\(e.g.)20 b(sloth.web\))325 b(|)526 1038
+y(+----------------)o(-----)o(----)o(-----)o(-----)o(-----)o(-+)962
+1087 y(|)962 1137 y(v)657 1187 y(o---------------)o(----)o(-----)o(---o)657
+1237 y(|)21 b(Literate)f(Programming)g(Tool)h(|)657 1287 y(o---------------)o
+(----)o(-----)o(---o)962 1336 y(|)526 1386 y(+----------------)o(---+-)o
+(----)o(-----)o(-----)o(----+)526 1436 y(|)850 b(|)526 1486
+y(v)g(v)330 1536 y(+---------------)o(---+)236 b(+------------------)o(-----)
+o(-----)o(----)o(--+)330 1586 y(|)65 b(Traditional)85 b(|)239
+b(|)22 b(Documentation)d(file)i(suitable)f(for)43 b(|)330 1635
+y(|)21 b(Computer)f(Program)h(|)239 b(|)22 b(input)f(into)g(a)g(typesetting)f
+(program)g(|)330 1685 y(|)43 b(\(e.g.)21 b(sloth.c\))42 b(|)239
+b(|)174 b(\(e.g.)21 b(sloth.tex\))216 b(|)330 1735 y(+---------------)o(---+)
+236 b(+------------------)o(-----)o(-----)o(----)o(--+)343
+1876 y Fh(Literate)14 b(programming)e(to)q(ols)j(could)g(b)q(e)g(organized)e
+(in)j(a)g(n)o(um)o(b)q(er)e(of)h(w)o(a)o(ys.)28 b(Ho)o(w)o(ev)o(er,)17
+b(to)e(\014t)h(in)f(with)281 1926 y(curren)o(t)9 b(\014le)h(and)h(command)d
+(line)i(based)g(en)o(vironmen)n(ts,)e(most)i(to)q(ols)g(conform)f(to)h(the)h
+(traditional)d(arc)o(hitectur)o(e)281 1976 y(sho)o(wn)g(here)g(in)h(whic)o(h)
+g(the)f(user)g(feeds)g(in)h(a)f(\014le)h(con)o(taining)d(a)j(literate)e
+(program,)g(and)h(the)g(literate)f(programmin)o(g)281 2026
+y(utilit)o(y)j(generates)f(program)g(\014les)i(and)f(a)i(do)q(cumen)o(ta)o
+(tion)c(\014le.)465 2117 y Fo(Figure)15 b(1)p Fr(:)i(T)m(raditional)12
+b(arc)o(hitecture)k(of)d(literate)h(programming)c(to)q(ols.)1042
+2940 y(16)p eop
+%%Page: 17 18
+17 17 bop 295 42 a Fr(do)15 b(this)g(is)g(implemen)o(ted)e(in)i(literate)g
+(programming)d(to)q(ols)i(b)o(y)h(pro)o(viding)f(text)i Fm(macr)n(os)f
+Fr(that)295 91 y(can)f(b)q(e)h(de\014ned)g(and)f(used)g(in)g(an)o(y)f(order.)
+295 170 y Fo(T)o(yp)q(eset)h(co)q(de)g(and)g(do)q(cumen)o(tation)o(:)i
+Fr(T)m(raditionally)10 b(program)h(listings)h(are)h(dull)f(a\013airs)295
+220 y(consisting)i(of)g(pages)h(of)e(fan-form)f(pap)q(er)j(imprin)o(ted)d
+(with)i(meandering)f(coastlines)i(of)f(struc-)295 270 y(tured)k(text)f(in)g
+(a)f(b)q(oring)g(fon)o(t.)26 b(In)17 b(con)o(trast,)h(literate)f(programmi)o
+(ng)d(systems)j(are)g(capable)295 320 y(of)d(pro)q(ducing)g(do)q(cumen)o
+(tation)e(that)i(is)g(sup)q(erior)h(in)e(t)o(w)o(o)h(w)o(a)o(ys.)k(First,)13
+b(b)q(ecause)j(most)d(of)g(the)295 369 y(do)q(cumen)o(tation)i(text)h(is)g
+(fed)g(straigh)o(t)f(to)h(the)g(t)o(yp)q(esetter,)j(the)d(programmer)e(can)i
+(mak)o(e)e(use)295 419 y(of)k(all)f(the)i(p)q(o)o(w)o(er)f(of)g(the)g
+(underlying)g(t)o(yp)q(esetter,)j(resulting)e(in)e(do)q(cumen)o(tation)g
+(that)i(has)295 469 y(the)14 b(same)e(presen)o(tation)h(as)g(an)g(ordinary)f
+(t)o(yp)q(eset)i(do)q(cumen)o(t.)j(Second,)d(b)q(ecause)g(the)f(literate)295
+519 y(programming)f(utilit)o(y)j(sees)i(all)e(the)h(co)q(de,)h(it)f(can)g
+(use)g(its)g(kno)o(wledge)g(of)f(the)h(programming)295 569
+y(language)c(and)g(the)h(features)h(of)d(the)i(t)o(yp)q(esetting)h(language)d
+(to)i(t)o(yp)q(eset)h(the)f(program)d(co)q(de)k(as)295 618
+y(if)f(it)h(w)o(ere)h(app)q(earing)e(in)h(a)f(tec)o(hnical)h(journal.)k(It)c
+(is)f(the)i(di\013erence)h(b)q(et)o(w)o(een:)264 745 y Fl(while)21
+b(sloth<walrus)e(loop)330 795 y(sloth:=sloth+1;)264 845 y(end)j(loop)295
+971 y Fr(and)281 1098 y Fo(while)12 b Fm(sloth)p Fn(<)p Fm(walrus)h
+Fo(lo)q(op)447 1147 y Fm(sloth)p Fq( )p Fm(sloth)p Fr(+1;)281
+1197 y Fo(end)g(lo)q(op)295 1324 y Fr(Unfortunately)m(,)18
+b(while)g(F)m(unnelW)m(eb)f(pro)o(vides)h(full)f(t)o(yp)q(esetting)i(of)e
+(the)i(do)q(cumen)o(tation,)e(it)295 1374 y(t)o(yp)q(esets)j(all)d(of)h(its)g
+(co)q(de)h(in)e(the)i(st)o(yle)f(of)g(the)h(\014rst)f(of)g(these)h(t)o(w)o(o)
+f(examples.)30 b(T)m(o)17 b(t)o(yp)q(eset)295 1423 y(in)e(the)g(st)o(yle)g
+(of)f(the)h(second)h(requires)g(kno)o(wledge)e(of)h(the)g(programmi)o(ng)d
+(language,)i(and)g(the)295 1473 y(curren)o(t)f(v)o(ersion)d(of)h(F)m(unnelW)m
+(eb)f(is)g(programming)d(language)j(indep)q(enden)o(t.)19 b(A)o(t)10
+b(a)h(later)g(stage,)295 1523 y(it)h(is)g(p)q(ossible)h(that)f(F)m(unnelW)m
+(eb)g(will)f(b)q(e)i(mo)q(di\014ed)e(to)h(read)h(in)f(a)g(\014le)g(con)o
+(taining)g(information)295 1573 y(ab)q(out)j(the)g(target)h(programmi)o(ng)c
+(language)i(to)g(b)q(e)i(used)f(to)g(assist)g(in)g(t)o(yp)q(esetting)g(the)h
+(co)q(de)295 1623 y(prop)q(erly)m(.)295 1702 y Fo(Cross)h(referencing:)h
+Fr(Because)f(the)e(literate)h(to)q(ol)e(sees)i(all)e(the)i(co)q(de)g(and)e
+(do)q(cumen)o(tation,)295 1751 y(it)19 b(is)g(able)h(to)f(generate)h
+(extensiv)o(e)h(cross)f(referencing)h(information)c(in)i(the)h(t)o(yp)q(eset)
+g(do)q(cu-)295 1801 y(men)o(tation.)28 b(This)18 b(mak)o(es)e(the)j(prin)o
+(ted)f(program)e(do)q(cumen)o(t)h(more)g(easy)h(to)g(na)o(vigate)f(and)295
+1851 y(partially)g(comp)q(ensates)h(for)g(the)g(lac)o(k)g(of)f(an)h
+(automatic)e(searc)o(hing)i(facilit)o(y)e(when)j(reading)295
+1901 y(prin)o(ted)c(do)q(cumen)o(tation.)177 1980 y(In)e(the)h(end,)f(the)g
+(details)g(don't)g(matter.)k(The)c(most)f(signi\014can)o(t)g(b)q(ene\014t)i
+(that)f(literate)h(programmi)o(ng)c(o\013ers)177 2029 y(is)17
+b Fm(its)h(c)n(ap)n(acity)g(to)g(tr)n(ansform)f(the)h(state)g(of)g(mind)g(of)
+g(the)g(pr)n(o)n(gr)n(ammer)p Fr(.)27 b(It)18 b(is)f(no)o(w)g(legend)g(that)h
+(the)f(act)177 2079 y(of)d(explaining)g(something)g(can)h(transform)f(one's)h
+(understanding)g(of)f(it.)21 b(This)15 b(is)g(one)g(of)f(the)i
+(justi\014cations)177 2129 y(b)q(ehind)j(the)h(p)q(o)o(w)o(erful)e(com)o
+(bination)e(of)i(researc)o(h)j(and)d(teac)o(hing)h(in)f(univ)o(ersities)p
+Fo([Roso)o(vsky90])p Fr(.)33 b(Simi-)177 2179 y(larly)m(,)12
+b(b)o(y)h(constan)o(tly)h(explaining)e(the)i(unfolding)e(program)g(co)q(de)j
+(in)e(English)g(to)h(an)f(imaginary)e(reader,)j(the)177 2229
+y(programmer)e(transforms)h(his)h(p)q(erception)h(of)e(the)i(co)q(de,)f(la)o
+(ying)e(it)i(op)q(en,)f(prone,)h(to)g(the)h(critical)e(ey)o(e.)177
+2307 y(The)f(result)h(of)e(this)h(exp)q(osure)h(is)e(a)h(higher)f(qualit)o(y)
+g(of)g(programmi)o(ng.)j(When)e(exp)q(osed)h(to)e(the)i(harsh)f(ligh)o(t)e
+(of)177 2357 y(the)i(literate)g(ey)o(e,)g(bugs)g(cra)o(wl)g(out,)f(sp)q
+(ecial)h(cases)h(v)n(anish,)e(and)h(slopp)o(y)f(co)q(de)h(ev)n(ap)q(orates.)
+18 b(As)12 b(a)g(rule)g(literate)177 2407 y(programs)18 b(tak)o(e)i(longer)f
+(to)g(write)g(than)h(ordinary)f(programs,)g(but)g(the)h(total)f(dev)o
+(elopmen)o(t)f(time)g(is)h(the)177 2457 y(same)13 b(or)h(less)g(b)q(ecause)h
+(the)f(time)f(tak)o(en)g(to)h(write)g(and)f(do)q(cumen)o(t)h(the)g(program)e
+(carefully)h(is)h(comp)q(ensated)177 2507 y(for)i(b)o(y)g(a)g(reduced)j
+(debugging)c(and)i(main)o(tenance)e(time.)24 b(Th)o(us)17 b(literate)g
+(programmi)o(ng)c(do)q(es)k(not)g(merely)177 2557 y(assist)c(in)f(the)g
+(preparation)g(of)g(do)q(cumen)o(tation,)f(but)h(also)g(mak)o(es)f
+(signi\014can)o(t)g(con)o(tributes)j(to)e(the)g(pro)q(cess)i(of)177
+2606 y(programming)d(itself.)18 b(In)c(practice)h(this)f(has)g(turned)h(out)f
+(to)g(b)q(e)g(a)g(con)o(tribution)g(far)f(more)h(imp)q(ortan)o(t)e(than)177
+2656 y(the)j(mere)e(capacit)o(y)h(to)g(pro)q(duce)h(t)o(yp)q(eset)g(do)q
+(cumen)o(tation.)177 2735 y(F)m(or)h(more)f(information)e(on)j(literate)h
+(programmi)o(ng,)c(the)k(reader)h(is)e(directed)h(to)f(Kn)o(uth's)h(early)f
+(founding)177 2785 y(w)o(ork)10 b Fo([Kn)o(uth83])f Fr(and)h
+Fo([Kn)o(uth84])p Fr(.)16 b(F)m(or)10 b(more)f(recen)o(t)j(information)c
+(refer)j(to)g Fo([Smith91])p Fr(,)d(whic)o(h)j(pro)o(vides)177
+2835 y(a)j(comprehensiv)o(e)g(bibliograph)o(y)e(up)i(to)f(1990.)1042
+2940 y(17)p eop
+%%Page: 18 19
+18 18 bop 177 42 a Fi(1.2)70 b(What)23 b(is)f(F)-6 b(unnelW)g(eb?)177
+160 y Fr(F)m(unnelW)m(eb)10 b(is)h(a)g(particular)f(literate)h(programming)c
+(system)k(that)g(is)f(implemen)o(ted)f(b)o(y)h(a)h(single)f(C)h(program.)177
+210 y(F)m(unnelW)m(eb)16 b(tak)o(es)h(as)f(input)h(a)f(single)g
+Fl(.fw)g Fo(input)g(\014le)f Fr(and)h(writes)h(one)g(or)f(more)g
+Fo(pro)q(duct)h(\014les)e Fr(and)h(a)177 260 y Fo(do)q(cumen)o(tation)c
+(\014le)h Fr(\()p Fo(Figure)h(2)p Fr(\).)831 386 y Fl(+-----------+)831
+436 y(|)22 b(sloth.fw)41 b(|)831 485 y(+-----------+)962 535
+y(|)962 585 y(v)744 635 y(o---------------)o(----o)744 685
+y(|)21 b(FUNNELWEB)f(Program)h(|)744 734 y(o---------------)o(----o)962
+784 y(|)526 834 y(+----------------)o(---+-)o(----)o(-----)o(-----)o(-+)526
+884 y(|)784 b(|)526 934 y(v)g(v)221 983 y(+---------------)o(-----)o(-----)o
+(----+)84 b(+--------------)o(-----)o(-----)o(-----)o(---+)221
+1033 y(|)21 b(Product)g(File)g(\(e.g.)f(sloth.c\))h(|)87 b(|)21
+b(Documentation)e(File)i(\(sloth.tex\))f(|)221 1083 y(+---------------)o
+(-----)o(-----)o(----+)84 b(+--------------)o(-----)o(-----)o(-----)o(---+)
+343 1174 y Fh(F)m(unnelW)m(eb)10 b(follo)o(ws)h(the)g(traditiona)o(l)e(arc)o
+(hitecture)f(of)j(literate)f(programmin)o(g)f(to)q(ols.)709
+1266 y Fo(Figure)14 b(2)p Fr(:)k(Arc)o(hitecture)e(of)e(F)m(unnelW)m(eb.)177
+1378 y(In)c(literate)f(programming)d(systems,)k(it)g(is)f(usual)g(to)h(refer)
+g(to)g(the)g(pro)q(duct)g(\014le)g(as)g(a)f(\\program)e(\014le".)17
+b(Ho)o(w)o(ev)o(er,)177 1427 y(as)i(F)m(unnelW)m(eb)f(is)g(a)g(general)h(to)q
+(ol)f(that)g(can)h(b)q(e)g(used)h(to)e(prepare)i(all)d(sorts)i(of)f(text)h
+(\014les)g(that)g(are)g(not)177 1477 y(computer)f(programs,)g(the)g(more)g
+(generic)h(term)e(\\pro)q(duct)i(\014le")f(w)o(as)g(c)o(hosen.)32
+b(Pro)q(duct)20 b(\014les)e(should)g(b)q(e)177 1527 y(carefully)13
+b(distinguished)g(from)e(the)j(term)e Fo(output)g(\014les)g
+Fr(whic)o(h)h(refers)h(to)f(all)f(of)g(the)i(output)f(\014les)h(pro)q(duced)
+177 1577 y(b)o(y)g(F)m(unnelW)m(eb.)177 1654 y(F)m(unnelW)m(eb)g(is)f
+(distinguished)h(b)o(y)g(the)g(follo)o(wing)e(c)o(haracteristics:)295
+1730 y Fo(Simplici)o(t)o(y:)18 b Fr(A)d(go)o(v)o(erning)g(design)g(goal)f(of)
+h(F)m(unnelW)m(eb)f(is)h(to)g(pro)o(vide)g(a)g Fm(simple)g
+Fr(to)q(ol)g(that)295 1780 y(could)i(b)q(e)g(easily)f(learn)o(t)h(and)f
+(completely)g(mastered.)26 b(This)17 b(man)o(ual)d(is)j(thic)o(k)f(b)q
+(ecause)j(it)d(is)295 1830 y(comprehensiv)o(e)h(and)e(lingers)h(on)g(the)h(w)
+o(a)o(ys)f(in)f(whic)o(h)h(F)m(unnelW)m(eb)g(can)g(b)q(e)g(used.)26
+b(The)16 b(to)q(ol)295 1880 y(itself)e(is)g(quite)f(simple.)295
+1957 y Fo(Reliabili)o(t)n(y:)22 b Fr(Another)17 b(design)g(goal)f(is)h(to)f
+(pro)o(vide)h(a)f(to)q(ol)g(that)h(will)e(protect)j(the)g(user)g(as)295
+2007 y(m)o(uc)o(h)g(as)h(p)q(ossible)g(from)e(silly)h(errors.)34
+b(Macro)19 b(prepro)q(cessors)j(are)e(notorious)e(for)h(causing)295
+2056 y(obscure)j(errors.)38 b(Ev)o(ery)21 b(attempt)e(has)h(b)q(een)i(made)d
+(in)g(F)m(unnelW)m(eb)h(to)g(k)o(eep)h(the)g(syn)o(tax)295
+2106 y(robust.)31 b(F)m(or)18 b(example,)f(in)h(F)m(unnelW)m(eb)f(the)i(syn)o
+(tax)f(of)f(macro)g(calls)h(has)g(b)q(een)h(purp)q(osely)295
+2156 y(designed)i(to)e(b)q(e)i(highly)e(visible)g(so)h(that)g(the)g(reader)h
+(is)f(alw)o(a)o(ys)e(a)o(w)o(are)i(when)g(the)h(macro)295 2206
+y(facilit)o(y)12 b(is)i(b)q(eing)g(in)o(v)o(ok)o(ed.)295 2283
+y Fo(Language)i(and)h(T)o(yp)q(esetter)e(Indep)q(endence:)k
+Fr(Unlik)o(e)14 b(Kn)o(uth's)i(original)d(W)m(eb)i(system)295
+2332 y(whic)o(h)h(w)o(as)g(sp)q(eci\014c)h(to)f(the)h(P)o(ascal)f(programmi)o
+(ng)d(language)p Fo([BSI82])i Fr(and)h(the)g(T)1667 2341 y(E)1690
+2332 y(X)g(t)o(yp)q(e-)295 2382 y(setting)g(language)p Fo([Kn)o(uth84])p
+Fr(,)d(F)m(unnelW)m(eb)h(striv)o(es)j(to)e(b)q(e)h(language)e(and)h(t)o(yp)q
+(esetter)j(inde-)295 2432 y(p)q(enden)o(t.)h(The)14 b(curren)o(t)g(v)o
+(ersion)f(of)g(F)m(unnelW)m(eb)f(is)h(completely)f(language)g(indep)q(enden)o
+(t,)i(but)295 2482 y(is)g(still)f(somewhat)g(dep)q(enden)o(t)j(on)d(the)i(T)
+965 2491 y(E)988 2482 y(X)f(t)o(yp)q(esetter)i(language.)295
+2559 y Fo(P)o(ortabili)o(t)n(y:)f Fr(F)m(unnelW)m(eb)10 b(has)g(b)q(een)i
+(written)f(in)f(the)h(C)f(programming)d(language)i(with)h(great)295
+2608 y(emphasis)k(on)g(p)q(ortabilit)o(y)m(.)k(F)m(unnelW)m(eb)c(curren)o
+(tly)h(runs)h(on)e(the)h(Sun,)f(V)-5 b(AX,)15 b(IBM)g(PC,)f(and)295
+2658 y(Mac.)295 2735 y Fo(Con)o(trollabl)o(e:)h Fr(F)m(unnelW)m(eb)10
+b(is)h(an)f(extremely)h(con)o(trollable)f(to)q(ol.)16 b(T)m(o)11
+b(protect)h(users')g(in)o(v)o(est-)295 2785 y(men)o(t)f(in)h(source)h
+(\014les)g(constructed)h(in)e(the)g(F)m(unnelW)m(eb)g(macro)f(language,)g
+(the)h(C)g(source)i(co)q(de)295 2835 y(to)h(F)m(unnelW)m(eb)f(has)h(b)q(een)h
+(released)g(under)g(GNU)e(license.)22 b(This)14 b(means)g(that)h(it)f(will)g
+(alw)o(a)o(ys)1042 2940 y(18)p eop
+%%Page: 19 20
+19 19 bop 295 42 a Fr(b)q(e)17 b(a)o(v)n(ailable)c(to)j(ev)o(ery)o(one.)24
+b(F)m(urthermore,)16 b(license)h(has)e(b)q(een)i(gran)o(ted)f(for)g(the)g(F)m
+(unnelW)m(eb)295 91 y(User's)h(Man)o(ual)e(and)h(F)m(unnelW)m(eb)f(Hac)o(k)o
+(er's)i(Man)o(ual)e(to)g(b)q(e)i(copied)f(freely)g(so)g(long)f(as)h(they)295
+141 y(are)e(not)f(mo)q(di\014ed.)j(All)c(this)h(means)g(that)g(F)m(unnelW)m
+(eb)f(is)h(not)g(going)f(to)h(disapp)q(ear)g(suddenly)m(.)295
+217 y Fo(A)18 b(Pro)q(duction)c(T)l(o)q(ol:)20 b Fr(Ab)q(o)o(v)o(e)c(all,)d
+(F)m(unnelW)m(eb)i(has)g(b)q(een)h(designed)g(to)f(b)q(e)h(a)e(pro)q(duction)
+295 267 y(to)q(ol)e(and)h(ev)o(ery)g(e\013ort)g(has)g(b)q(een)h(made)d(to)h
+(ensure)j(that)d(it)g(will)f(op)q(erate)j(e\013ectiv)o(ely)f(in)g(a)f(pro-)
+295 317 y(fessional)h(en)o(vironmen)o(t.)j(F)m(unnelW)m(eb)d(is)g(\\op)q(en")
+g(and)g(p)q(ortable.)18 b(There)c(is)f(a)f(comprehensiv)o(e)295
+367 y(user)18 b(man)o(ual.)24 b(Its)17 b(error)g(messages)g(are)g
+(comprehensiv)o(e.)26 b(It)17 b(is)f(fast.)26 b(Finally)m(,)15
+b(it)h(has)h(b)q(een)295 417 y(designed)e(with)e(the)i(exp)q(erience)h(of)d
+(three)i(y)o(ears)g(of)e(using)h(F)m(unnelW)m(eb)f(V1.)177
+493 y(F)m(or)c(more)g(information)e(on)i(the)h(history)g(and)f(design)h(of)f
+(F)m(unnelW)m(eb,)g(see)i(the)f Fm(F)m(unnelWeb)i(Hacker's)e(Manual)p
+Fr(.)177 660 y Fi(1.3)70 b(The)22 b(Name)g(F)-6 b(unnelW)g(eb)177
+779 y Fr(The)16 b(name)e(\\F)m(unnelW)m(eb")g(w)o(as)h(c)o(hosen)i(b)q
+(ecause)g(it)d(con)o(tains)i(the)g(name)e(\\WEB",)g(whic)o(h)h(is)g(the)h
+(name)e(of)177 828 y(Kn)o(uth's)g(system.)k(It)c(w)o(as)g(also)f(c)o(hosen)i
+(b)q(ecause)h(it)d(has)h(a)g(distinctly)f(Australian)h(\015a)o(v)o(our.)177
+905 y(F)m(unnel-w)o(eb)j(spiders)g(are)g(found)f(in)g(Northern)i(and)e
+(Eastern)i(Australia.)26 b(They)16 b(are)h(ab)q(out)g(three)h(to)e(four)177
+955 y(cen)o(timetres)c(long)e(and)g(are)i(v)o(ery)f(p)q(oisonous.)17
+b(The)11 b(Sydney)g(F)m(unnel-w)o(eb)g(spider)h(\()p Fm(A)o(tr)n(ax)g(r)n
+(obustus)p Fr(\),)f(common)177 1004 y(in)k(Sydney)m(,)g(has)h(caused)g(the)g
+(most)e(trouble)i(and)f(has)h(b)q(een)g(resp)q(onsible)h(for)e(sev)o(eral)h
+(deaths.)23 b(F)m(unnel-w)o(eb)177 1054 y(spiders)16 b(lo)o(v)o(e)f(to)g(cra)
+o(wl)f(in)o(to)h(temp)q(orarily)e(discarded)j(sho)q(es)g(where)h(they)e
+(later)g(react)h(in)f(a)g(hostile)g(manner)177 1104 y(to)h(an)g(unsusp)q
+(ecting)h(fo)q(ot.)24 b(They)17 b(are)f(kno)o(wn)g(to)f(hang)h(on)g(once)g
+(they)h(sink)f(their)g(fangs)g(in.)24 b(F)m(unnel-w)o(eb)177
+1154 y(spiders)17 b(deriv)o(e)f(their)h(name)e(from)f(the)i(shap)q(e)h(of)e
+(their)h(w)o(ebs)h(whic)o(h)f(are)g(horizon)o(tally-aligned)e(narro)o(wing)
+177 1204 y(tub)q(es,)h(op)q(en)f(at)g(one)g(end)p Fo([ANZE])p
+Fr(.)177 1280 y(The)j(F)m(unnel-w)o(eb)f(spider,)g(lik)o(e)g(the)g(tiger)h
+(snak)o(e)f(and)g(the)h(white)f(p)q(oin)o(ter)g(shark,)g(is)g(secretly)i
+(regarded)f(b)o(y)177 1330 y(Australians)d(as)g(a)g(kind)f(of)g(national)g
+(treasure.)281 1450 y Fo(F)h Fr(is)g(for)f(F)m(unnel-w)o(eb)281
+1500 y(Our)h(furry-legged)g(fo)q(e.)281 1550 y(He)g(sleeps)h(in)f(y)o(our)g
+(slipp)q(er)281 1599 y(And)g(breakfasts)h(on)e(to)q(e.)281
+1649 y(|)g(One)i(v)o(erse)g(from)d Fm(A)j(Me)n(gastar's)f(Mantr)n(as:)19
+b(Things)c(that)g(Me)n(an)h(a)f(L)n(ot)g(to)f(Me)p Fr(,)378
+1699 y(b)o(y)f(Dame)g(Edna)h(Ev)o(erage)p Fo([Humphries91])p
+Fr(.)177 1866 y Fi(1.4)70 b(A)23 b(F)-6 b(unnelW)g(eb)22 b(T)-6
+b(utorial)177 1985 y Fr(The)19 b(remainder)f(of)g(this)h(c)o(hapter)h
+(consists)g(of)e(an)g(in)o(tro)q(ductory)h(tutorial)f(on)g(F)m(unnelW)m(eb.)
+32 b(Ideally)18 b(y)o(ou)177 2034 y(should)13 b(ha)o(v)o(e)f(a)h(w)o(orking)e
+(v)o(ersion)i(of)f(F)m(unnelW)m(eb)g(in)h(fron)o(t)f(of)g(y)o(ou)g(when)i
+(reading)e(this)h(c)o(hapter)h(so)e(that)h(y)o(ou)177 2084
+y(can)h(try)g(out)f(the)h(examples)f(y)o(ourself.)k(There)e(is)e(no)g(need)i
+(to)e(try)h(all)e(the)i(examples)f(so)g(long)g(as)g(y)o(ou)g(t)o(yp)q(e)h(in)
+177 2134 y(enough)i(to)f(feel)g(comfortable)f(with)h(what)g(y)o(ou)g(are)h
+(reading.)22 b(There)16 b(is)f(no)g(harm)f(in)h(reading)g(this)h(c)o(hapter)
+177 2184 y(o\017ine)d(to)q(o,)h(so)f(long)g(as)h(y)o(ou)g(get)g(to)g(the)g
+(computer)g(within)f(a)g(couple)h(of)g(da)o(ys)f(to)h(reinforce)h(what)f(y)o
+(ou)f(ha)o(v)o(e)177 2234 y(read.)177 2310 y(F)m(or)g(b)q(est)i(e\013ect,)g
+(y)o(ou)e(should)g(create)i(a)e(new,)g(temp)q(orary)m(,)f(empt)o(y)h
+(directory)h(in)f(whic)o(h)g(to)h(exp)q(erimen)o(t)f(with)177
+2360 y(F)m(unnelW)m(eb.)21 b(That)15 b(w)o(a)o(y)m(,)f(it)h(will)e(b)q(e)j
+(more)e(ob)o(vious)g(when)i(F)m(unnelW)m(eb)e(creates)j(an)e(output)g
+(\014le.)22 b(Y)m(ou)15 b(can)177 2410 y(either)f(t)o(yp)q(e)f(in)f(the)h
+(examples)e(in)h(this)h(c)o(hapter)g(directly)m(,)f(or)h(cop)o(y)f(and)h
+(paste)g(them)f(from)e(the)k(L)1727 2405 y Fk(a)1746 2410 y
+Fr(T)1769 2422 y(E)1792 2410 y(X)e(source)177 2459 y(\014le)f(for)g(this)h(c)
+o(hapter)g(or)f(the)h(F)m(unnelW)m(eb)f(test)h(suite.)18 b(The)12
+b(source)g(\014le)f(for)g(this)h(c)o(hapter)g(should)f(b)q(e)h(a)o(v)n
+(ailable)177 2509 y(in)i(a)g(\014le)g(suc)o(h)h(as)f Fl(/fwdir/userman/c)o
+(h1.te)o(x)p Fr(.)i(The)e(test)i(suite)e(should)g(b)q(e)h(a)o(v)n(ailable)d
+(in)h(a)h(directory)h(suc)o(h)177 2559 y(as)i Fl(/fwdir/tests/)p
+Fr(.)23 b(The)16 b(test)i(\014les)f(called)f Fl(ex01.fw)f Fr(through)h
+Fl(ex16.fw)f Fr(con)o(tain)h(the)h(examples)f(in)g(this)177
+2609 y(c)o(hapter.)j(The)14 b(test)g(\014les)g(called)f Fl(hi01.fw)f
+Fr(through)h Fl(hi10.fw)f Fr(con)o(tain)h(the)h(examples)f(in)f(the)i(next)g
+(c)o(hapter.)177 2685 y(If)h(y)o(ou)f(do)g(not)h(y)o(et)g(ha)o(v)o(e)g(an)f
+(installed)h(cop)o(y)f(of)h(F)m(unnelW)m(eb,)f(refer)h(to)g(Chapter)h(4)e
+(for)g(full)g(details)h(on)f(ho)o(w)177 2735 y(to)h(obtain)g(and)g(install)f
+(a)h(cop)o(y)g(of)f(F)m(unnelW)m(eb.)22 b(If)15 b(y)o(ou)f(are)i(not)f(sure)h
+(if)f(y)o(ou)f(ha)o(v)o(e)h(an)g(installed)g(cop)o(y)m(,)g(try)177
+2785 y(in)o(v)o(oking)e(F)m(unnelW)m(eb)i(b)o(y)f(giving)g(the)i(command)c
+(\\)p Fl(fw)p Fr(".)20 b(If)15 b(this)g(yields)f(an)h(error)h(suc)o(h)g(as)f
+(\\command)d(not)177 2835 y(found")h(then)i(y)o(ou)e(do)h(not)g(ha)o(v)o(e)g
+(a)f(prop)q(erly)h(installed)g(v)o(ersion)g(of)f(F)m(unnelW)m(eb.)1042
+2940 y(19)p eop
+%%Page: 20 21
+20 20 bop 177 42 a Fi(1.5)70 b(A)23 b(Hello)d(W)-6 b(orld)24
+b(Do)r(cumen)n(t)177 153 y Fr(Just)c(as)f(one)g(starts)i(the)e(pro)q(cess)i
+(of)d(learning)h(a)g(new)g(programming)d(language)i(with)g(a)h(\\Hello)f(W)m
+(orld")177 202 y(program,)c(when)i(learning)e(F)m(unnelW)m(eb,)h(y)o(ou)g
+(can)h(start)g(with)f(a)g(\\Hello)f(W)m(orld")g(do)q(cumen)o(t!)22
+b(And)16 b(here)g(it)177 252 y(is!)k(Edit)14 b(a)g(text)h(\014le)g(called)f
+Fl(hello.fw)e Fr(and)j(put)f(the)h(follo)o(wing)d(text)j(in)f(it.)19
+b(\(Note:)h(The)15 b(second)g(c)o(haracter)177 302 y(is)f(the)g(letter)h
+(\\Oh",)e(not)h(the)h(digit)e(\\Zero"\).)177 402 y Fl(@O@<hello.txt@>@{H)o
+(ello)18 b(World@+@})177 502 y Fr(T)m(o)13 b(\\run")h(this)g(\\program",)d
+(in)o(v)o(ok)o(e)i(F)m(unnelW)m(eb)h(using)f(the)i(\\)p Fl(fw)p
+Fr(")e(command)e(as)j(follo)o(ws.)177 602 y Fl(fw)22 b(hello)177
+701 y Fm(If)c(this)g(c)n(ommand)h(do)n(esn)l('t)f(work,)g(then)h(chanc)n(es)g
+(ar)n(e)f(that)g(F)m(unnelWeb)i(has)e(not)h(b)n(e)n(en)f(instal)r(le)n(d)g
+(on)h(your)177 751 y(machine.)h(R)n(efer)14 b(to)h(Chapter)g(4)g(for)f(ful)r
+(l)g(details)h(on)g(how)g(to)g(obtain)g(and)h(instal)r(l)e(a)h(c)n(opy)g(of)g
+(F)m(unnelWeb.)177 821 y Fr(There)j(should)e(b)q(e)h(no)f(errors.)28
+b(If)16 b(there)h(are,)h(ha)o(v)o(e)e(a)g(lo)q(ok)g(at)g(the)h(listing)e
+(\014le)i Fl(hello.lis)p Fr(,)e(whic)o(h)h(should)177 871 y(con)o(tain)c(an)g
+(explanation)f(of)h(the)g(error,)h(and)f(compare)g(the)h(area)f(in)g(the)h
+(\014le)f(where)h(the)g(error)g(o)q(ccurred)h(with)177 921
+y(the)h(text)f(ab)q(o)o(v)o(e.)k(If)13 b(there)j(are)e(no)g(errors,)g(y)o(ou)
+g(will)e(\014nd)i(that)g(the)h(follo)o(wing)c(t)o(w)o(o)i(\014les)h(ha)o(v)o
+(e)g(b)q(een)h(created.)177 1021 y Fl(hello.lis)64 b(-)21 b(The)g(LISTING)g
+(file.)177 1071 y(hello.txt)64 b(-)21 b(The)g(PRODUCT)g(file.)177
+1170 y Fr(T)m(ak)o(e)14 b(a)h(lo)q(ok)f(at)g Fl(hello.txt)p
+Fr(.)19 b(It)c(should)f(con)o(tain)h(a)f(single)h(line)f(with)g(the)i(text)f
+Fl(Hello)21 b(World)p Fr(.)f(Let's)15 b(tak)o(e)177 1220 y(another)f(lo)q(ok)
+f(at)h(the)h(input)e(\014le.)177 1320 y Fl(@O@<hello.txt@>@{H)o(ello)18
+b(World@+@})177 1420 y Fr(The)f(whole)g(structure)i(of)d(the)h(input)g
+(\014le)g(is)f(con)o(trolled)h(b)o(y)f(\\)p Fl(@)p Fr(",)h(called)f(the)h
+Fo(sp)q(ecial)h(c)o(haracter)p Fr(,)e(whic)o(h)177 1470 y(in)o(tro)q(duces)f
+Fo(sp)q(ecial)g(sequence)p Fr(s.)i(A)d(scanner's-ey)o(e)h(view)f(of)f(the)i
+(command)c(line)i(lo)q(oks)h(lik)o(e)f(this:)177 1570 y Fl(@O)43
+b(@<)h("hello.txt")d(@>)i(@{)g("Hello)21 b(World")42 b(@+)h(@})177
+1669 y Fr(The)11 b Fl(@)f Fr(c)o(haracter)h(con)o(trols)f(ev)o(erything.)17
+b(In)10 b(this)h(\014le)f(w)o(e)g(ha)o(v)o(e)g(six)g(di\013eren)o(t)h(sp)q
+(ecial)f(sequences)j(that)d(together)177 1719 y(form)i(a)i(single)f(macro)g
+(de\014nition.)18 b(The)c Fl(@<)g Fr(and)f Fl(@>)h Fr(delimit)d(the)k(name)e
+(of)g(the)h(macro.)j(The)e Fl(@O)e Fr(signals)g(the)177 1769
+y(start)g(of)f(the)h(macro)e(de\014nition)h(and)g(indicates)h(that)f(the)h
+(macro)e(is)i(to)f(b)q(e)h(connected)h(to)e(a)g(pro)q(duct)i(\014le)e(with)
+177 1819 y(the)j(same)e(name)g(as)h(the)g(macro)f(\(This)h(is)g(is)g(wh)o(y)f
+(w)o(e)i(got)e(a)h(pro)q(duct)h(\014le)f(when)g(w)o(e)g(ran)g(F)m(unnelW)m
+(eb\).)k(The)177 1869 y Fl(@)p Fq(f)e Fr(and)f Fl(@)p Fq(g)h
+Fr(delimit)e(the)i(b)q(o)q(dy)g(of)g(the)g(macro.)23 b(Finally)m(,)14
+b(the)j Fl(@+)e Fr(instructs)j(that)e(an)f(end)i(of)e(line)h(sequence)177
+1918 y(should)e(b)q(e)g(inserted)i(at)d(that)h(p)q(oin)o(t)g(in)f(the)i(pro)q
+(duct)f(\014le.)177 1988 y(If)c(y)o(ou)g(think)f(this)h(syn)o(tax)g(lo)q(oks)
+g(messy)m(,)g(then)g(y)o(ou're)g(righ)o(t.)17 b(It)10 b Fm(is)g
+Fr(messy)m(.)15 b(F)m(unnelW)m(eb)10 b Fm(c)n(ould)g Fr(ha)o(v)o(e)g(emplo)o
+(y)o(ed)177 2038 y(a)k(\\simpler")e(notation)h(in)g(whic)o(h)h(more)f(of)g
+(the)i Fl(@)e Fr(sequences)k(w)o(ere)e(eliminated.)h(F)m(or)d(example:)177
+2138 y Fl(Warning:)20 b(This)h(example)g(is)g(NOT)g(legal)g(FunnelWeb.)177
+2238 y(#hello.txt{Hello)e(World+})177 2338 y Fr(Ho)o(w)o(ev)o(er,)14
+b(if)f(suc)o(h)h(a)f(syn)o(tax)h(w)o(ere)h(used,)f(the)g(user)h(\(y)o(ou!\))j
+(w)o(ould)12 b(ha)o(v)o(e)i(to)f(remem)o(b)q(er)g(that)h Fl(#)f
+Fr(starts)i(a)e(new)177 2387 y(macro.)18 b(Y)m(ou)c(w)o(ould)g(also)f(ha)o(v)
+o(e)i(to)f(remem)o(b)q(er)f(that)i(the)g(c)o(haracters)h Fq(g)e
+Fr(and)g Fl(+)g Fr(cannot)h(b)q(e)g(used)g(in)f(a)g(macro)177
+2437 y(b)q(o)q(dy)j(without)f(a)h(fuss.)27 b(And)17 b(so)g(on.)27
+b(F)m(unnelW)m(eb)16 b(is)h(messier,)g(but)g(pro)o(vides)g(one)g(simple)e
+(rule:)25 b Fm(Nothing)177 2487 y(sp)n(e)n(cial)15 b(happ)n(ens)h(unless)f
+(the)g(sp)n(e)n(cial)f(char)n(acter)h Fl(@)f Fm(app)n(e)n(ars.)177
+2557 y Fr(This)f(means)g(that)g(in)g(F)m(unnelW)m(eb,)g(y)o(ou)g(can)g(lo)q
+(ok)g(at)g(large)g(blo)q(c)o(ks)g(of)g(text)h(in)f(the)h(con\014dence)h(that)
+e(\(unlik)o(e)177 2607 y(for)g(the)g(C)g(pre-pro)q(cessor\))j(there)e(are)f
+(no)g(macro)f(calls)g(hidden)h(in)g(there.)19 b(If)12 b(there)j(w)o(ere,)e
+(there)h(w)o(ould)e(b)q(e)i(an)177 2657 y Fl(@)g Fr(c)o(haracter!)391
+2642 y Fg(1)177 2727 y Fr(Let's)g(tak)o(e)g(another)h(lo)q(ok)e(at)g(the)i
+(hello)e(w)o(orld)g(program.)p 177 2757 709 2 v 223 2783 a
+Ff(1)241 2795 y Fh(The)e(only)g(exception)e(to)i(this)g(rule)f(o)q(ccurs)h
+(where)g(the)f(user)h(has)g(explicitly)e(c)o(hanged)g(the)i(sp)q(ecial)f(c)o
+(haracter)f(using)i(the)g Fe(@=)177 2835 y Fh(sp)q(ecial)f(sequence.)1042
+2940 y Fr(20)p eop
+%%Page: 21 22
+21 21 bop 177 42 a Fl(@O@<hello.txt@>@{H)o(ello)18 b(World@+@})177
+177 y Fr(In)c(its)f(curren)o(t)j(form,)11 b(it)i(consists)i(of)e(a)g(single)g
+(macro)g(de\014nition.)k(This)d(de\014nition,)f(while)g(completely)f(v)n
+(alid)177 226 y(on)i(its)g(o)o(wn,)f(only)g(represen)o(ts)j(half)d(the)i(p)q
+(o)o(w)o(er)f(of)f(F)m(unnelW)m(eb.)k(In)d(fact)g(y)o(ou)g(could)f(sa)o(y)h
+(that)g(it)f(is)h(a)g(\\Hello)177 276 y(Northern)h(Hemisphere)f(Program".)i
+(T)m(o)d(turn)h(it)f(in)o(to)g(a)g(prop)q(er)i(F)m(unnelW)m(eb)e(\\Hello)g(W)
+m(orld")f(program,)g(w)o(e)177 326 y(need)j(to)f(add)f(some)g(do)q(cumen)o
+(tation!)177 408 y(A)k(F)m(unnelW)m(eb)g(input)f(\014le)h(consists)h(of)f(a)f
+(sequence)j(of)e(macro)e(de\014nitions)i(surrounded)h(b)o(y)f(a)g(sea)g(of)g
+(do)q(c-)177 458 y(umen)o(tation)e(whic)o(h)h(is)h(just)g(ordinary)f(text.)26
+b(Mo)q(dify)16 b(y)o(our)g(hello)g(w)o(orld)g(do)q(cumen)o(t)g(so)h(that)f
+(it)h(lo)q(oks)f(lik)o(e)177 508 y(this:)177 643 y Fl(This)21
+b(hello)g(world)g(document)f(was)h(created)f(by)i(-insert)e(your)h(name)g
+(here-.)177 743 y(@O@<hello.txt@>@{H)o(ello)d(World@+@})177
+842 y(It)k(writes)e(out)h(a)h(file)f(called)f(hello.txt)g(containing)g(the)h
+(string)g(``Hello)f(World''.)177 977 y Fr(No)o(w)14 b(run)g(it)f(through)h(F)
+m(unnelW)m(eb,)f(but)h(this)g(time,)e(add)i(a)g Fl(+t)f Fr(to)h(the)g
+(command)d(line.)177 1113 y Fl(fw)22 b(hello)e(+t)177 1248
+y Fr(If)14 b(all)e(go)q(es)j(w)o(ell,)d(y)o(ou)i(should)f(\014nd)h(that)g(y)o
+(ou)g(no)o(w)f(ha)o(v)o(e)177 1383 y Fl(hello.lis)64 b(-)21
+b(A)h(LISTING)151 b(file.)177 1433 y(hello.tex)64 b(-)21 b(A)h(DOCUMENTATION)
+d(file)i(\(in)g(TeX)g(format\).)177 1482 y(hello.txt)64 b(-)21
+b(A)h(PRODUCT)151 b(file.)177 1618 y Fr(T)m(ak)o(e)13 b(a)g(lo)q(ok)g(at)g
+Fl(hello.txt)p Fr(.)j(Y)m(ou)d(will)f(\014nd)i(that)f(it)g(is)g(iden)o(tical)
+g(to)h(the)g Fl(hello.txt)d Fr(of)i(the)h(previous)g(run.)177
+1667 y(Only)g(macro)f(de\014nitions)i(a\013ect)g(the)g(pro)q(duct)g(\014les)g
+(that)f(F)m(unnelW)m(eb)g(pro)q(duces)i(\(as)e(a)g(result)h(of)f
+Fl(@O)g Fr(macro)177 1717 y(de\014nitions\).)23 b(The)16 b(surrounding)f(do)q
+(cumen)o(tation)f(has)i Fm(no)g Fr(e\013ect.)24 b(In)16 b(con)o(trast,)g(the)
+g(new)f(\014le,)h Fl(hello.tex)177 1767 y Fr(\(ha)o(v)o(e)i(a)g(lo)q(ok)e(at)
+i(it)g(no)o(w\))f(whic)o(h)h(w)o(as)g(created)h(as)f(a)g(result)g(of)g(y)o
+(our)f(adding)g(the)i Fl(+t)e Fr(option)g(con)o(tains)h(a)177
+1817 y(fairly)d(full)g(represen)o(tation)j(of)d(the)i(input)f(\014le.)25
+b(Whereas)18 b Fl(hello.txt)c Fr(is)i(the)h Fm(pr)n(o)n(duct)g(\014le)f
+Fr(of)g(F)m(unnelW)m(eb,)177 1867 y Fl(hello.tex)e Fr(is)h(the)i
+Fm(do)n(cumentation)g(\014le)p Fr(.)24 b(T)m(ry)15 b(t)o(yp)q(esetting)h(the)
+h(do)q(cumen)o(tation)d(\014le)i(no)o(w)f(using)g(the)i(T)1895
+1876 y(E)1918 1867 y(X)177 1916 y(t)o(yp)q(esetting)k(program.)36
+b(Then)20 b(prin)o(t)g(it.)37 b(The)21 b(follo)o(wing)c(commands)h(are)j(an)e
+(example)g(of)h(the)h(sort)f(of)177 1966 y(commands)12 b(y)o(ou)h(will)f(ha)o
+(v)o(e)i(to)g(giv)o(e)f(to)h(do)g(this.)177 2101 y Fl(tex)21
+b(hello)392 b(!)21 b(Typeset)g(the)g(documentation.)177 2151
+y(lpr)g(-Pcslw)g(-d)g(hello.dvi)86 b(!)21 b(Print)g(the)g(typeset)f
+(documentation.)177 2286 y Fr(The)14 b(result)g(should)f(b)q(e)g(a)g(single)g
+(page)g(con)o(taining)f(the)i(t)o(w)o(o)e(lines)h(of)g(do)q(cumen)o(tation)f
+(along)g(with)g(a)h(t)o(yp)q(eset)177 2336 y(represen)o(tation)g(of)e(the)i
+(macro.)j(A)o(t)11 b(this)h(p)q(oin)o(t,)f(y)o(ou)g(ha)o(v)o(e)h(exercised)h
+(the)g(t)o(w)o(o)e(main)e(asp)q(ects)14 b(of)d(F)m(unnelW)m(eb.)177
+2386 y(Starting)h(with)g(an)g(input)g(\014le)g(con)o(taining)g(macros)f(\(or)
+h(in)g(this)h(case)g(macro\))e(and)h(do)q(cumen)o(tation,)f(y)o(ou)h(ha)o(v)o
+(e)177 2436 y(successfully)j(generated)g(a)f(pro)q(duct)g(\014le)g(based)g
+(on)g(the)g(macros,)f(and)g(a)h(do)q(cumen)o(tation)e(\014le,)h(based)i(on)e
+(the)177 2486 y(en)o(tire)i(do)q(cumen)o(t.)i(Congratulations!)177
+2568 y(The)11 b(remainder)e(of)g(this)h(tutorial)f(is)h(divided)f(in)o(to)h
+(t)o(w)o(o)f(parts,)i(whic)o(h)f(fo)q(cus)g(on)g(F)m(unnelW)m(eb's)f(macro)g
+(facilities)177 2618 y(and)15 b(its)h(t)o(yp)q(esetting)g(facilities.)22
+b(By)16 b(tradition,)e(the)i(generation)g(of)f(program)f(\014les)h(from)f(a)h
+(literate)h(text)g(is)177 2667 y(called)e Fo(T)l(angling)p
+Fr(,)d(and)j(the)g(generation)g(of)f(t)o(yp)q(eset)j(do)q(cumen)o(tation)c
+(is)i(called)g Fo(W)l(ea)o(ving)p Fr(.)1681 2652 y Fg(2)p 177
+2717 709 2 v 223 2744 a Ff(2)241 2756 y Fh(In)8 b(F)m(unnelW)m(eb,)f(these)h
+(t)o(w)o(o)h(functions)d(are)j(asp)q(ects)e(of)h(a)h(single)e(computer)g
+(program.)12 b(Ho)o(w)o(ev)o(er,)c(in)h(Kn)o(uth's)e(WEB)j(system,)177
+2795 y(the)g(t)o(w)o(o)i(functions)c(are)j(em)o(b)q(o)q(died)d(in)i(t)o(w)o
+(o)i(separate)d(computer)f(programs)g(called)i(T)m(angle)g(and)g(W)m(ea)o(v)o
+(e,)g(presumably)e(b)q(ecause,)177 2835 y(as)j(ev)o(ery)o(one)f(kno)o(ws,)g
+(\\it)h(tak)o(es)g(t)o(w)o(o)g(to)g(T)m(angle".)1042 2940 y
+Fr(21)p eop
+%%Page: 22 23
+22 22 bop 177 42 a Fi(1.6)70 b(Macro)24 b(F)-6 b(aciliti)o(es)177
+154 y Fr(The)13 b(hello)e(w)o(orld)h(program)f(of)g(the)i(previous)g(section)
+g(exercised)h(b)q(oth)f(the)f(macro)g(expansion)g(\(pro)q(duct-\014le\))177
+204 y(asp)q(ect)i(of)e(F)m(unnelW)m(eb,)g(and)h(the)h(t)o(yp)q(esetting)f
+(\(do)q(cumen)o(tation)f(\014le\))h(asp)q(ect)h(of)e(F)m(unnelW)m(eb.)17
+b(This)c(section)177 254 y(con)o(tains)h(an)g(exp)q(osition)g(of)f(the)i
+(macro)e(facilities,)f(and)i(totally)f(ignores)h(the)h(do)q(cumen)o(tation)e
+(side.)19 b(This)14 b(is)177 303 y(partly)e(to)g(increase)h(the)g(fo)q(cus)g
+(of)e(the)i(tutorial,)e(and)h(partly)g(b)q(ecause)i(do)q(cumen)o(tation)d(is)
+h(usually)f(bulky)h(and)177 353 y(w)o(ould)h(tak)o(e)h(to)q(o)g(long)f(for)g
+(the)i(reader)g(to)f(t)o(yp)q(e)g(in)f(to)h(mak)o(e)f(the)h(tutorial)f
+(e\013ectiv)o(e.)177 490 y Fd(1.6.1)55 b(Simple)17 b(Macros)177
+588 y Fr(The)d(original)f(\\Hello)g(W)m(orld")f(program)g(consisted)j(of)e(a)
+h(single)g(macro)e(de\014nition.)177 692 y Fl(@O@<hello.txt@>@{H)o(ello)18
+b(World@+@})177 797 y Fr(In)e(fact,)g(this)g(is)g(a)g(rather)h(exceptional)f
+(macro,)f(as)h(it)g(causes)h(its)f(expansion)g(to)g(b)q(e)h(written)f(to)g(a)
+g(pro)q(duct)177 847 y(\014le.)28 b(The)17 b Fl(@O)g Fr(\(for)g
+Fo(O)p Fr(utput\))h(signals)e(this.)28 b(In)17 b(F)m(unnelW)m(eb,)g(most)f
+(macros)g(are)i(de\014ned)g(using)f Fl(@$)p Fr(.)27 b(This)177
+897 y(results)16 b(in)e(a)g(macro)f(that)i(do)q(es)g(not)f(generate)i(a)e
+(pro)q(duct)h(\014le,)g(but)f(whic)o(h)h(can)f(b)q(e)h(called)g(in)f(other)h
+(macros)177 947 y(\(including)e Fl(@O)h Fr(macros\).)j(Let)d(us)h(expand)f
+(the)g(hello)f(w)o(orld)h(program)e(to)i(include)g(some)f(other)h(macros.)177
+1051 y Fl(@O@<hello.txt@>@{@)o(<Gree)o(tings)o(@>@+@)o(})177
+1151 y(@$@<H@>==@{Hello@})177 1201 y(@$@<W@>==@{World@})177
+1300 y(@$@<Greetings@>==@)o({@<H@)o(>)19 b(@<W@>@})177 1405
+y Fr(T)o(yp)q(e)14 b(in)g(the)g(\014le)g(and)g(run)g(it)g(through)g(F)m
+(unnelW)m(eb)f(using)h(the)g(command:)177 1510 y Fl(fw)22 b(hello)177
+1614 y Fr(The)14 b(pro)q(duct)h(\014le)f(\(result.out\))h(should)e(lo)q(ok)g
+(lik)o(e)g(this:)177 1719 y Fl(Hello)21 b(World)177 1823 y
+Fr(This)16 b(short)h(program)e(illustrates)h(some)g(of)f(the)i(features)h(of)
+d(ordinary)h(macros)g(in)g(F)m(unnelW)m(eb.)24 b(Consider)177
+1873 y(the)15 b Fl(@O)e Fr(macro.)k(Instead)d(of)g(con)o(taining)e(straigh)o
+(t)i(text)h(\(\\Hello)e(W)m(orld"\),)f(it)h(no)o(w)h(con)o(tains)f(the)i
+(macro)e(call)177 1923 y Fl(@<Greetings@>)p Fr(.)20 b(A)c(F)m(unnelW)m(eb)f
+(macro)f(can)h(b)q(e)i(called)e(from)e(within)i(the)h(b)q(o)q(dy)g(of)e
+(another)i(macro)f(just)177 1973 y(b)o(y)f(giving)e(the)j(macro)d(name)h
+(delimited)f(in)i Fl(@<)f Fr(and)h Fl(@>)p Fr(.)177 2044 y(A)o(t)e(the)h(b)q
+(ottom)d(of)i(the)g(\014le)g(is)g(the)h(de\014nition)e(of)h(the)g
+Fl(@<Greetings@>)d Fr(macro.)17 b(The)12 b(de\014nition)g(is)f(similar)f(to)
+177 2094 y(the)k(de\014nition)e(of)g Fl(hello.txt)f Fr(except)j(that)f(it)g
+(starts)h(with)e Fl(@$)g Fr(to)h(indicate)g(that)g(no)f(pro)q(duct)i(\014le)f
+(is)g(desired)177 2144 y(from)f(this)i(macro)f(\(directly\).)18
+b(It)c(also)f(emplo)o(ys)g(the)h(optional)e Fl(==)i Fr(syn)o(tax)g(whic)o(h)f
+(has)h(no)g(seman)o(tic)f(impact,)177 2194 y(but)k(can)f(b)q(e)h(used)g(to)f
+(mak)o(e)f(de\014nitions)h(clearer.)27 b(The)17 b(b)q(o)q(dy)f(of)g(the)g
+Fl(@<Greetings@>)e Fr(macro)h(consists)i(of)177 2244 y(calls)d(to)f(the)i
+Fl(H)e Fr(and)h Fl(W)g Fr(macros)f(whic)o(h)h(are)g(de\014ned)h(immedia)o
+(tely)c(ab)q(o)o(v)o(e.)177 2315 y(Note)k(that)g(the)g(macros)f(are)h(not)g
+(constrained)g(to)g(b)q(e)g(de\014ned)g(in)g(an)o(y)f(particular)g(order.)21
+b(One)16 b(of)e(the)h(main)177 2365 y(features)h(of)e(literate)h(programmi)o
+(ng)d(to)q(ols)i(is)h(that)f(they)i(allo)o(w)d(the)i(di\013eren)o(t)g(parts)h
+(of)e(the)h(text)g(do)q(cumen)o(t)177 2415 y(b)q(eing)f(dev)o(elop)q(ed)h
+(\(usually)e(a)g(computer)h(program\))e(to)i(b)q(e)h(la)o(y)o(ed)e(out)h(in)f
+(an)o(y)h(order.)k(So)c(long)f(as)h(there)h(is)f(a)177 2464
+y(de\014nition)g(somewhere)g(in)f(the)i(input)e(\014le)h(for)g(ev)o(ery)h
+(macro)d(call,)h(F)m(unnelW)m(eb)g(will)g(sort)h(it)f(all)g(out.)177
+2536 y(In)h(fact,)g(F)m(unnelW)m(eb's)g(macro)f(facilit)o(y)f(is)i(v)o(ery)h
+(simple.)i(Unlik)o(e)d(man)o(y)e(macro)h(prepro)q(cessors)k(whic)o(h)d(allo)o
+(w)177 2586 y(macros)d(to)g(de\014ne)i(other)f(macros,)f(F)m(unnelW)m(eb)g
+(completely)f(\014nishes)i(parsing)g(and)f(analysing)f(the)j(macros)d(in)177
+2635 y(the)k(input)e(\014le)h(b)q(efore)g(it)g(starts)h(expanding)e(them)g
+(in)o(to)g(pro)q(duct)i(\014les.)k(Other)c(prepro)q(cessors)h(allo)o(w)d
+(macros)177 2685 y(to)j(b)q(e)h(rede\014ned)g(lik)o(e)f(v)n(ariables)f(\(as)h
+(in,)g(sa)o(y)m(,)f(T)950 2694 y(E)973 2685 y(X\))h(taking)f(on)h(man)o(y)e
+(di\013eren)o(t)j(v)n(alues)f(as)g(the)g(macro)f(pre-)177 2735
+y(pro)q(cessor)f(tra)o(v)o(els)e(through)g(the)g(input)g(\014le.)17
+b(In)10 b(con)o(trast,)i(F)m(unnelW)m(eb)e(has)h(no)g(concept)h(of)e
+(\\di\013eren)o(t)i(times")177 2785 y(and)h(treats)h(the)f(input)f(as)h(one)g
+(h)o(uge)g(static)g(orderless,)h(timeless,)e(collection)g(of)g
+(de\014nitions.)18 b(In)13 b(F)m(unnelW)m(eb,)177 2835 y(there)i(is)f(only)f
+(ev)o(er)i(one)f(time,)e(and)i(so)g(there)h(can)f(only)f(ev)o(er)i(b)q(e)f
+(one)h(v)n(alue/de\014nition)d(for)i(eac)o(h)g(macro.)1042
+2940 y(22)p eop
+%%Page: 23 24
+23 23 bop 177 42 a Fd(1.6.2)55 b(Num)n(b)r(er)17 b(of)i(Times)e(Called)177
+140 y Fr(So)e(far)g(w)o(e)g(ha)o(v)o(e)g(seen)i(only)d(tin)o(y)m(,)g
+(degenerate)j(input)e(\014les.)22 b(The)16 b(next)g(example)e(mo)o(v)o(es)f
+(up)j(to)f(the)h(lev)o(el)e(of)177 190 y(\\trivial",)c(but)h(starts)i(to)e
+(con)o(v)o(ey)g(the)h(\015a)o(v)o(our)f(of)g(the)h(w)o(a)o(y)f(F)m(unnelW)m
+(eb)f(can)i(b)q(e)g(used)g(in)f(practice.)18 b(Normally)m(,)177
+240 y(there)f(w)o(ould)d(b)q(e)i(do)q(cumen)o(tation)e(text)i(app)q(earing)f
+(b)q(et)o(w)o(een)i(the)f(macros,)e(but)i(this)f(has)g(b)q(een)i(omitted)d
+(so)177 289 y(as)i(to)f(k)o(eep)i(the)f(fo)q(cus)g(on)g(the)g(macros)f
+(themselv)o(es.)23 b(Although)15 b(the)i(next)f(example)e(is)i(m)o(uc)o(h)e
+(longer)i(than)177 339 y(the)h(previous)g(example,)f(the)h(only)f(new)h
+(construct)h(is)e Fl(@-)h Fr(whic)o(h)f(can)h(app)q(ear)g(only)f(at)g(the)h
+(end)g(of)f(a)h(line,)177 389 y(and)d(suppresses)j(it,)c(prev)o(en)o(ting)h
+(it)g(from)e(app)q(earing)i(in)g(the)g(text.)19 b(The)c Fl(@-)e
+Fr(construct)j(allo)o(ws)c(the)j(text)g(of)e(a)177 439 y(macro)g(to)g(b)q(e)h
+(aligned)f(at)h(the)g(left)g(margin,)d(rather)j(than)g(ha)o(ving)e(the)j
+(\014rst)f(line)f(hanging)g(at)h(the)g(end)g(of)f(the)177 489
+y Fl(@)p Fq(f)p Fr(.)20 b(F)m(unnelW)m(eb)14 b(could)h(ha)o(v)o(e)f(b)q(een)i
+(set)g(up)f(so)f(that)h(this)g(end)g(of)f(line)g(mark)o(er)g(w)o(as)h
+(suppressed.)23 b(Ho)o(w)o(ev)o(er,)177 538 y(it)14 b(w)o(ould)g(ha)o(v)o(e)g
+(b)q(een)i(a)e(sp)q(ecial)h(case)g(that)f(w)o(ould)g(ha)o(v)o(e)g(brok)o(en)h
+(the)g(v)o(ery)g(memorable)d(rule)i(\\the)h(text)g(of)f(a)177
+588 y(macro)f(is)h(the)g(text)h(app)q(earing)e(b)q(et)o(w)o(een)i(the)g
+Fl(@)p Fq(f)e Fr(and)h Fl(@)p Fq(g)p Fr(".)177 660 y(T)o(yp)q(e)i(the)g
+(follo)o(wing)e(text)i(in)o(to)f(the)h(\014le)g Fl(hello.fw)e
+Fr(and)h(run)h(it)f(through)h(F)m(unnelW)m(eb.)23 b(The)16
+b(\014le)g(con)o(tains)177 710 y(some)9 b(in)o(ten)o(tional)g(errors)j(so)e
+(b)q(e)h(sure)g(to)f(t)o(yp)q(e)g(it)g(in)g(exactly)g(and)g(w)o(orry)g(only)g
+(if)f(F)m(unnelW)m(eb)g Fm(do)n(esn)l('t)h Fr(generate)177
+759 y(some)j(errors.)177 865 y Fl(@O@<hello.c@>==@{@)o(-)177
+914 y(@<Include)20 b(Files@>)177 964 y(@<Include)g(Files@>)177
+1014 y(@<Main)h(Program@>)177 1064 y(@})177 1163 y(@$@<Main)f
+(Program@>==@{@-)177 1213 y(main\(\))177 1263 y({)199 1313
+y(doit\(\);)177 1363 y(})177 1413 y(@})177 1512 y(@$@<Subroutine@>==)o(@{@-)
+177 1562 y(void)h(doit\(\))177 1612 y({)199 1662 y(int)g(i;)199
+1711 y(for)g(\(i=0;i<10;i++\))243 1761 y({)264 1811 y(@<Print@>)264
+1861 y(@<Print@>)243 1911 y(})177 1960 y(}@})177 2060 y(@$@<Print@>==@{@-)177
+2110 y(printf\("Hello)e(World!"\);)177 2160 y(printf\("\\n"\);@})177
+2259 y(@$@<Scan@>==@{scan)o(f@})177 2359 y(@$@<Include)h(Files@>==@{@-)177
+2409 y(#include)g(<stdio.h>)177 2459 y(#include)g(<stdlib.h>@})177
+2564 y Fr(What)14 b(happ)q(ened?)21 b(W)m(ell,)13 b(if)g(y)o(ou)h(ha)o(v)o
+(en't)g(t)o(yp)q(ed)i(the)f(\014le)f(in)g(prop)q(erly)m(,)g(y)o(ou)g(ma)o(y)f
+(get)h(some)g(miscellaneous)177 2614 y(syn)o(tax)e(errors.)18
+b(Fix)12 b(these)h(b)q(efore)f(con)o(tin)o(uing.)k(If)c(the)g(\014le)g(has)g
+(b)q(een)g(correctly)h(t)o(yp)q(ed,)f(y)o(ou)g(should)f(b)q(e)h(faced)177
+2663 y(with)i(some)f(error)i(messages)f(to)f(do)h(with)f(the)i(n)o(um)o(b)q
+(er)e(of)g(times)g(some)g(of)h(the)g(macros)f(are)h(called.)177
+2735 y(By)h(default,)f(F)m(unnelW)m(eb)g(insists)h(that)g(eac)o(h)g(macro)e
+(de\014ned)j(is)e(in)o(v)o(ok)o(ed)g(exactly)h(once.)21 b(Ho)o(w)o(ev)o(er,)
+15 b(the)g(\014le)177 2785 y(ab)q(o)o(v)o(e)h(de\014nes)i(macros)d(that)h
+(are)h(used)g(more)e(than)h(once)h(and)f(a)g(macro)f(that)i(is)f(not)g(used)h
+(at)f(all.)24 b(Let)16 b(us)177 2835 y(examine)d(the)h(errors.)1042
+2940 y(23)p eop
+%%Page: 24 25
+24 24 bop 177 42 a Fr(First,)15 b(w)o(e)g(see)h(that)e(F)m(unnelW)m(eb)g(has)
+h(alerted)g(us)g(to)g(the)g(fact)g(that)f(the)i Fl(Include)k(Files)13
+b Fr(macro)h(has)h(b)q(een)177 91 y(called)d(t)o(wice.)18 b(Once)c(alerted)f
+(to)g(this,)f(a)g(quic)o(k)h(lo)q(ok)e(at)i(the)g(program)e(con)o(vinces)i
+(us)g(that)g(calling)e(the)i(macro)177 141 y(t)o(wice)h(is)g(a)g(mistak)o(e,)
+e(and)h(that)h(one)g(of)g(the)g(calls)g(should)f(b)q(e)i(eliminated.)177
+217 y(Second,)d(w)o(e)e(note)h(that)f(F)m(unnelW)m(eb)g(has)h(alerted)g(us)g
+(to)f(the)h(fact)f(that)h(the)g Fl(@<subroutine@>)c Fr(macro)j(is)g(nev)o(er)
+177 267 y(called.)18 b(Again,)12 b(a)h(quic)o(k)g(lo)q(ok)g(at)g(the)h
+(program)e(tells)h(us)h(that)f(this)h(is)f(a)g(mistak)o(e)f(\(and)h(a)g(v)o
+(ery)h(common)d(one)177 317 y(in)k(the)h(use)h(of)e(F)m(unnelW)m(eb\),)g(and)
+g(that)h(a)f(call)g(to)g(the)h Fl(@<subroutine@>)d Fr(macro)h(should)i(b)q(e)
+g(inserted)h(just)177 367 y(ab)q(o)o(v)o(e)d(the)g(call)f(to)h(the)h
+Fl(@<Main)20 b(Program@>)12 b Fr(macro)h(in)g(the)i(de\014nition)e(of)g
+Fl(@<hello.c@>)p Fr(.)177 443 y(These)g(t)o(w)o(o)f(cases)h(demonstrate)f(wh)
+o(y)g(these)h(c)o(hec)o(ks)h(ha)o(v)o(e)d(b)q(een)i(placed)g(in)e(F)m(unnelW)
+m(eb.)17 b(It)12 b(is)g(nearly)g(alw)o(a)o(ys)177 492 y(acceptable)k(for)f(a)
+f(macro)g(to)h(b)q(e)g(called)g(once.)22 b(Ho)o(w)o(ev)o(er,)15
+b(if)f(a)h(macro)f(is)g(not)h(called)g(at)g(all,)e(or)i(called)g(more)177
+542 y(than)f(once,)g(this)g(is)g(often)g(a)f(sign)h(that)g(the)g(user)h(has)f
+(made)f(a)h(mistak)o(e.)177 618 y(These)19 b(c)o(hec)o(ks)g(ha)o(v)o(e)e(a)g
+(dark)g(side)h(to)q(o.)28 b(In)18 b(addition)e(to)h(the)h(errors)h(men)o
+(tioned)d(ab)q(o)o(v)o(e,)i(F)m(unnelW)m(eb)f(has)177 668 y(generated)e(t)o
+(w)o(o)f(similar)d(errors)k(that)f(do)g(not)g(help)g(us.)177
+744 y(First,)h(w)o(e)f(are)h(alerted)g(to)f(the)h(fact)f(that)h(the)g
+Fl(@<print@>)d Fr(macro)h(has)i(b)q(een)g(called)f(t)o(wice.)20
+b(Clearly)m(,)13 b(in)h(this)177 794 y(case,)h(this)f(is)f(not)h(a)g
+(problem,)e(and)h(so)h(here)h(F)m(unnelW)m(eb's)f(fussiness)h(is)f(a)f(n)o
+(uisance.)177 870 y(Second,)22 b(w)o(e)e(are)g(alerted)g(to)g(the)g(fact)g
+(that)g(the)g Fl(@<scan@>)e Fr(macro)h(has)h(nev)o(er)g(b)q(een)h(called.)36
+b(Lik)o(e)19 b(the)177 920 y Fl(@<print@>)e Fr(macro,)h(this)g(macro)f(w)o
+(as)i(de\014ned)g(as)g(a)f(notational)f(con)o(v)o(enience,)j(and)e(clearly)h
+(it)f(do)q(es)h(not)177 969 y(matter)13 b(here)i(if)e(it)h(is)g(not)g(used.)k
+(Again,)13 b(F)m(unnelW)m(eb)g(is)h(b)q(eing)g(a)g(n)o(uisance.)177
+1045 y(The)19 b(four)f(cases)i(ab)q(o)o(v)o(e)e(demonstrate)h(the)g(ligh)o(t)
+e(and)h(dark)h(side)f(of)g(F)m(unnelW)m(eb's)g(insistence)i(that)e(eac)o(h)
+177 1095 y(macro)10 b(b)q(e)i(called)f(exactly)h(once.)17 b(T)m(o)11
+b(resolv)o(e)h(the)g(con\015ict)f(without)g(reducing)h(the)g(strength)g(of)f
+(the)h(c)o(hec)o(king,)177 1145 y(F)m(unnelW)m(eb)i(pro)o(vides)g(t)o(w)o(o)f
+(sp)q(ecial)h(sequences)j Fl(@Z)c Fr(\(for)h Fo(Z)p Fr(ero\))h(and)e
+Fl(@M)h Fr(\(for)g Fo(M)p Fr(an)o(y\))f(that)h(can)h(b)q(e)f(attac)o(hed)177
+1195 y(to)h(macro)e(de\014nitions.)20 b(Presence)e(of)c(the)h
+Fl(@Z)f Fr(tag)g(allo)o(ws)g(the)h(designated)g(macro)f(to)g(b)q(e)h(called)g
+(zero)g(times.)177 1245 y(Presence)j(of)c(the)i Fl(@M)e Fr(tag)h(allo)o(ws)e
+(the)j(designated)f(macro)f(to)h(b)q(e)g(called)g(more)f(than)h(once.)21
+b(A)15 b(single)g(macro)177 1294 y(ma)o(y)d(carry)j(b)q(oth)f(tags.)k(It)c
+(is)f(alw)o(a)o(ys)g(true)i(that)f(all)e(macros)i(are)g(allo)o(w)o(ed)e(to)i
+(b)q(e)h(called)e(exactly)h(once.)177 1370 y(Here)20 b(is)e(the)h(revised)g
+(program)e(with)h(the)h(errors)g(\014xed,)h(b)o(y)e(eliminating)d(or)k
+(adding)e(macro)g(calls,)i(or)f(b)o(y)177 1420 y(adding)13
+b(tags.)18 b(T)m(ry)c(pro)q(cessing)h(the)f(\014le)g(no)o(w.)k(There)d
+(should)f(b)q(e)g(no)g(errors.)177 1540 y Fl(@O@<hello.c@>==@{@)o(-)177
+1589 y(@<Include)20 b(Files@>)177 1639 y(@<Function@>)177 1689
+y(@<Main)h(Program@>)177 1739 y(@})177 1838 y(@$@<Main)f(Program@>==@{@-)177
+1888 y(main\(\))177 1938 y({)199 1988 y(doit\(\);)177 2038
+y(})177 2087 y(@})177 2187 y(@$@<Function@>==@{)o(@-)177 2237
+y(void)h(doit\(\))177 2287 y({)199 2337 y(int)g(i;)199 2386
+y(for)g(\(i=0;i<10;i++\))243 2436 y({)264 2486 y(@<Print@>)264
+2536 y(@<Print@>)243 2586 y(})177 2635 y(}@})177 2735 y(@$@<Print@>@M==@{@)o
+(-)177 2785 y(printf\("Hello)e(World!"\);)177 2835 y(printf\("\\n"\);@})1042
+2940 y Fr(24)p eop
+%%Page: 25 26
+25 25 bop 177 91 a Fl(@$@<Scan@>@Z==@{sc)o(anf@})177 191 y(@$@<Include)20
+b(Files@>==@{@-)177 241 y(#include)g(<stdio.h>)177 291 y(#include)g
+(<stdlib.h>@})177 450 y Fd(1.6.3)55 b(Inden)n(tation)177 560
+y Fr(The)14 b(b)q(o)q(dy)g(of)f(the)i Fl(print)d Fr(macro)h(of)g(the)h
+(previous)g(example)f(con)o(tains)g(t)o(w)o(o)g(lines)h(of)f(text.)19
+b(A)14 b(literal)e(substi-)177 610 y(tution)i(of)f(this)h(macro's)e(b)q(o)q
+(dy)i(in)g(its)g(con)o(text)g(w)o(ould)f(result)i(in:)243 741
+y Fl({)264 791 y(printf\("Hello)k(World!"\);)177 841 y(printf\("\\n"\);)264
+891 y(printf\("Hello)g(World!"\);)177 941 y(printf\("\\n"\);)243
+990 y(})177 1121 y Fr(But)c(instead,)e(it)h(comes)f(out)h(as)g(\(ha)o(v)o(e)g
+(a)g(lo)q(ok)e(at)i(this)g(part)g(of)f Fl(hello.c)g Fr(no)o(w\):)243
+1252 y Fl({)264 1302 y(printf\("Hello)19 b(World!"\);)264 1352
+y(printf\("\\n"\);)264 1402 y(printf\("Hello)g(World!"\);)264
+1452 y(printf\("\\n"\);)243 1502 y(})177 1633 y Fr(The)12 b(explanation)e(is)
+g(that)h(F)m(unnelW)m(eb)g(inden)o(ts)g(eac)o(h)h(line)e(of)h(m)o(ultili)o
+(ne)e(macros)h(b)o(y)h(the)g(lev)o(el)g(of)f(inden)o(tation)177
+1682 y(at)i(the)h(p)q(oin)o(t)e(of)g(call.)17 b(This)12 b(means)f(that,)h(as)
+g(in)f(the)i(case)g(ab)q(o)o(v)o(e,)e(program)g(texts,)i(whic)o(h)e(are)i
+(usually)e(highly)177 1732 y(inden)o(ted,)j(come)f(out)h(lo)q(oking)e(\\righ)
+o(t".)177 1813 y(In)i(other)h(circumstances,)g(where)g(the)g(mo)q(del)e(of)g
+(the)i(text)g(is)f(one)g(dimensional,)e(F)m(unnelW)m(eb's)h(inden)o(tation)
+177 1863 y(could)g(b)q(ecome)h(an)f(imp)q(edimen)o(t)e(or)i(ev)o(en)i(a)e
+(danger.)18 b(In)13 b(these)i(cases,)g(it)e(can)h(b)q(e)g(switc)o(hed)g
+(o\013)g(b)o(y)f(including)177 1912 y(the)i(F)m(unnelW)m(eb)e
+Fo(pragma)g Fr(line)177 2044 y Fl(@p)22 b(indentation)d(=)j(none)177
+2175 y Fr(an)o(ywhere)15 b(in)e(the)i(input)e(\014le.)177 2255
+y(One)19 b(of)f(the)h(design)f(goals)g(of)f(F)m(unnelW)m(eb)h(is)g(to)g(allo)
+o(w)f(the)i(user)g(total)f(con)o(trol)g(o)o(v)o(er)g(the)h(pro)q(duct)g
+(\014les.)177 2305 y(This)13 b(con)o(trasts)h(with)f(the)h(approac)o(h)f(of)g
+(Kn)o(uth's)g(WEB)g(system)g Fo([Kn)o(uth83])f Fr(\(up)q(on)h(whic)o(h)g(F)m
+(unnelW)m(eb)g(is)177 2355 y(based\),)18 b(whic)o(h)e(mangles)f(the)i(input)f
+(text)h(at)f(the)h(P)o(ascal)g(program)d(syn)o(tax)j(lev)o(el,)f(truncating)h
+(iden)o(ti\014ers,)177 2405 y(con)o(v)o(erting)e(the)g(text)g(to)f(upp)q(er)i
+(case,)f(and)f(paragraphing)g(text.)20 b(Here)c(is)e(an)g(example)f(of)h
+(part)h(of)f(a)g(P)o(ascal)177 2455 y(program)e(pro)q(duced)k(b)o(y)d(WEB)h
+(\(from)f(page)h(14)f(of)g Fo([Kn)o(uth83])p Fr(\):)177 2586
+y Fl(IF)22 b(R=0)f(THEN)g(XREF[P]:=XREFPTR)d(ELSE)j(XMEM[R].XLINKFIELD)o
+(:=XRE)o(FPTR;)o(END;{)o(:51})177 2635 y({58:}FUNCTION)e
+(IDLOOKUP\(T:EIGHTBIT)o(S\):NA)o(MEPO)o(INTER)o(;LABE)o(L)g(31;)177
+2685 y(VAR)i(I:0..LONGBUFSIZE;H:)o(0..HA)o(SHSIZ)o(E;K:0)o(..MA)o(XBYTE)o
+(S;W:0)o(..1;)177 2735 y(L:0..LONGBUFSIZE;P)o(:NAME)o(POINT)o(ER;BE)o(GIN)e
+(L:=IDLOC-IDFIRS)o(T;{59)o(:})177 2785 y(H:=BUFFER[IDFIRST])o(;I=ID)o(FIRST)o
+(+1;)177 2835 y(WHILE)i(I<IDLOC)f(DO)i(BEGIN)e(H:=\(H+H+BUFFER[I]\)M)o(OD)f
+(HASHSIZE;I=I+1;EN)o(D{:59)o(};)1042 2940 y Fr(25)p eop
+%%Page: 26 27
+26 26 bop 177 42 a Fr(Kn)o(uth's)13 b(theory)g(is)f(that)g(the)h(program)e
+(generated)i(b)o(y)f(a)g(literate)h(programmi)o(ng)c(system)k(should)f(b)q(e)
+h(treated)177 91 y(as)20 b(ob)r(ject)h(co)q(de)g(and)f(hence)h(should)f(lo)q
+(ok)f(lik)o(e)g(ob)r(ject)i(co)q(de)f(to)q(o.)36 b(While)20
+b(this)g(ma)o(y)e(b)q(e)i(an)g(admirable)177 141 y(approac)o(h)d(in)g(the)h
+(long)f(run,)h(the)f(presen)o(t)i(programming)14 b(en)o(vironmen)o(t)i(is)h
+(one)h(of)f(fault)o(y)f(compilers)g(and)177 191 y(buggy)c(to)q(ols.)18
+b(The)13 b(F)m(unnelW)m(eb)f(view)h(is)g(that,)f(in)g(this)h(en)o(vironmen)o
+(t,)f(the)h(programmer)e(needs)j(all)d(the)j(help)177 241 y(he)j(can)g(get)g
+(and)f(that)h(therefore)h(he)f(should)f(b)q(e)h(allo)o(w)o(ed)f(total)f(con)o
+(trol)i(o)o(v)o(er)f(the)h(pro)q(duct)h(\014le.)26 b(Another)177
+291 y(reason)12 b(for)g(F)m(unnelW)m(eb's)f(pro)o(viding)f(total)h(con)o
+(trol)g(o)o(v)o(er)h(the)g(pro)q(duct)h(\014le,)e(is)h(that)g(F)m(unnelW)m
+(eb)f(is)g(in)o(tended)177 340 y(to)17 b(b)q(e)i(target)e(language)g(indep)q
+(enden)o(t,)i(and)e(so)h(ev)o(en)g(if)f(Kn)o(uth's)g(view)h(w)o(ere)g
+(adopted,)g(it)f(w)o(ould)g(not)g(b)q(e)177 390 y(clear)d(what)g(a)g
+(legitimate)e(transformation)g(of)h(the)h(text)h(could)e(b)q(e.)177
+529 y Fd(1.6.4)55 b(Additiv)n(e)18 b(Macros)177 629 y Fr(Sometimes)c(it)i(is)
+h(con)o(v)o(enien)o(t)f(to)h(build)e(up)i(the)g(de\014nition)f(of)f(a)h
+(macro)g(in)f(stages)j(throughout)e(the)h(input)177 679 y(\014le.)h(In)13
+b(F)m(unnelW)m(eb,)g(this)g(can)g(b)q(e)h(done)g(using)f(an)g
+Fo(additiv)o(e)f(macro)p Fr(.)17 b(An)d(additiv)o(e)e(macro)g(is)h(iden)o
+(tical)g(to)177 728 y(an)h(ordinary)f(macro)g(except)i(that)228
+839 y(1.)20 b(It)14 b(has)g Fl(+=)f Fr(instead)i(of)e Fl(==)p
+Fr(.)228 920 y(2.)20 b(It)13 b(can)g(b)q(e)g(de\014ned)h(in)e(one)h(or)f
+(more)g(parts)h(throughout)g(the)g(input)g(\014le.)k(The)c(de\014nition)g(of)
+f(the)h(macro)281 970 y(is)h(the)g(concatenation)g(of)g(all)e(the)j(parts)f
+(in)g(the)g(order)h(in)e(whic)o(h)h(they)g(app)q(ear.)177 1080
+y(The)f(follo)o(wing)c(example)h(sho)o(ws)j(ho)o(w)e(additiv)o(e)g(macros)g
+(can)h(b)q(e)h(used)g(to)f(scatter)h(and)f(regroup)g(information,)177
+1130 y(in)k(this)h(case)g(assisting)g(in)f(the)h(lucid)f(construction)h(of)f
+(a)g(data)g(abstraction)h(in)f(a)g(language)g(\(P)o(ascal\))h(that)177
+1180 y(do)q(es)e(not)f(supp)q(ort)g(them)f(explicitly)m(.)177
+1290 y Fl(@!****************)o(*****)o(*****)o(****)177 1390
+y(@O@<prog.pas@>==@{)o(@-)177 1440 y(program)21 b(adt\(input,outpu)o(t\);)177
+1490 y(@<Types@>)177 1540 y(@<Variables@>)177 1589 y(@<Procedures@>)177
+1639 y(begin)g(startproc;)f(end.)177 1689 y(@})177 1789 y(@!****************)
+o(*****)o(*****)o(****)177 1888 y(@$@<Types@>+=@{@-)177 1938
+y(type)h(buffer_type)f(=)243 1988 y(record)243 2038 y(length)g(:)i(integer;)
+243 2087 y(buf)f(:)g(array[1..100])e(of)j(char;)243 2137 y(end;)177
+2187 y(@})177 2287 y(@$@<Variables@>+=@)o({@-)177 2337 y(bigbuf)f(:)g
+(buffer_type;)177 2386 y(@})177 2486 y(@$@<Procedures@>+=)o(@{@-)177
+2536 y(procedure)f(buf_init)g(\(var)h(b)h(:)f(buffer_type)325
+b(\))22 b({Body)e(of)i(buf_init})177 2586 y(procedure)e(buf_add)42
+b(\(var)21 b(b)h(:)f(buffer_type;)107 b(ch)21 b(:)h(char\))f({Body)f(of)i
+(buf_add})177 2635 y(procedure)e(buf_get)42 b(\(var)21 b(b)h(:)f
+(buffer_type;)f(var)h(ch)g(:)h(char\))f({Body)f(of)i(buf_get})177
+2685 y(@})177 2785 y(@!****************)o(*****)o(*****)o(****)1042
+2940 y Fr(26)p eop
+%%Page: 27 28
+27 27 bop 177 42 a Fl(@$@<Types@>+=@{@-)177 91 y(type)21 b(complex_type)e(=)j
+(record)f(r,i)g(:)g(real;)g(end;)177 141 y(@})177 241 y(@$@<Procedures@>+=)o
+(@{@-)177 291 y(procedure)f(cm_set)h(\(var)g(c:)g(complex_type;)e(a,b:)i
+(real\))195 b({Body)21 b(of)g(cm_set})177 340 y(procedure)f(cm_add)h(\(a,b:)f
+(complex_type;)g(var)h(c:)g(complex_type\))e({Body)i(of)g(cm_add})177
+390 y({Other)g(procedures)e(and)j(functions})177 440 y(@})177
+540 y(@!****************)o(*****)o(*****)o(****)177 639 y({...more)e(pieces)h
+(of)g(program...})177 739 y(@!****************)o(*****)o(*****)o(****)177
+853 y Fr(It)d(is)f(imp)q(ortan)o(t)f(to)h(remem)o(b)q(er)g(that)g(the)h
+(de\014nition)f(of)g(eac)o(h)h(macro)e(do)q(es)j(not)e(c)o(hange)h
+(throughout)f(the)177 903 y(input)c(\014le.)18 b(F)m(unnelW)m(eb)13
+b(parses)i(the)f(en)o(tire)g(input)f(\014le)h(and)f(assem)o(bles)g(all)f(the)
+i(macro)f(de\014nitions)g(b)q(efore)h(it)177 953 y(ev)o(en)h(starts)g(to)f
+(expand)h(macros.)j(As)d(a)f(result,)h(eac)o(h)f(additiv)o(e)g(macro)f(can)h
+(only)g(ha)o(v)o(e)g(one)g(de\014nition,)g(and)177 1003 y(that)g
+(de\014nition)g(is)f(the)i(concatenation)f(of)f(all)g(its)h(parts.)177
+1077 y(The)19 b(example)d(ab)q(o)o(v)o(e)i(sho)o(ws)g(ho)o(w)g(additiv)o(e)f
+(macros)g(can)h(b)q(e)h(used)g(to)e(rearrange)i(the)g(presen)o(tation)g(of)e
+(a)177 1126 y(computer)h(program)e(in)i(the)g(order)h(in)e(whic)o(h)h(the)g
+(user)h(wishes)g(to)f(discuss)h(it)e(rather)i(than)f(the)h(order)f(in)177
+1176 y(whic)o(h)h(the)h(compiler)d(requires)j(that)f(it)g(b)q(e)g(consumed.)
+33 b(It)19 b(is)g(easy)m(,)h(ho)o(w)o(ev)o(er,)g(to)f(abuse)g(the)h(feature)f
+(of)177 1226 y(additiv)o(e)c(macros.)24 b(In)15 b(man)o(y)f(cases,)k(the)e
+(same)f(e\013ect)j(can)e(b)q(e)h(obtained)e(more)g(clearly)h(b)o(y)g
+(replacing)f(eac)o(h)177 1276 y(part)d(of)e(an)h(additiv)o(e)g(macro)f
+(in-situ)h(using)g(uniquely)f(named)g(non-additiv)o(e)h(macros,)f(and)h(then)
+h(collect)g(them)177 1326 y(together)j(as)e(a)h(group)f(at)h(the)g(p)q(oin)o
+(t)f(where)i(the)f(additiv)o(e)f(macro)f(is)h(called.)18 b(Doing)12
+b(this)i(is)f(more)g(w)o(ork,)g(and)177 1376 y(is)i(more)e(error)j(prone,)e
+(but)h(can)g(result)g(in)f(a)h(clearer)g(exp)q(osition.)20
+b(The)15 b(follo)o(wing)d(program)h(illustrates)i(this)177
+1425 y(alternativ)o(e)f(approac)o(h.)177 1540 y Fl(@!****************)o
+(*****)o(*****)o(****)177 1639 y(@O@<prog.pas@>==@{)o(@-)177
+1689 y(program)21 b(adt\(input,outpu)o(t\);)177 1739 y(@<Types@>)177
+1789 y(@<Variables@>)177 1838 y(@<Procedures@>)177 1888 y(begin)g(startproc;)
+f(end.)177 1938 y(@})177 2038 y(@$@<Types@>==@{@-)177 2087
+y(@<Buffer)g(type@>)177 2137 y(@<Complex)g(type@>)177 2187
+y(@})177 2287 y(@$@<Variables@>==@)o({@-)177 2337 y(@<Buffer)g(variable@>)177
+2386 y(@})177 2486 y(@$@<Procedures@>==)o(@{@-)177 2536 y(@<Buffer)g
+(procedures@>)177 2586 y(@<Complex)g(procedures@>)177 2635
+y(@})177 2735 y(@!****************)o(*****)o(*****)o(****)177
+2835 y(@$@<Buffer)g(type@>==@{@-)1042 2940 y Fr(27)p eop
+%%Page: 28 29
+28 28 bop 177 42 a Fl(type)21 b(buffer_type)f(=)h(record)591
+91 y(length)g(:)g(integer;)591 141 y(buf)g(:)h(array[1..100])d(of)i(char;)591
+191 y(end;)177 241 y(@})177 340 y(@$@<Buffer)f(variable@>==@{@-)177
+390 y(bigbuf)h(:)g(buffer_type;)177 440 y(@})177 540 y(@$@<Buffer)f
+(procedures@>==@{@)o(-)177 589 y(procedure)g(buf_init\(var)f(b)j(:)g
+(buffer_type\))d({Body)i(of)g(buf_init})177 639 y(procedure)f(buf_add\(var)g
+(b)h(:)h(buffer_type;)d(ch)i(:)h(char\))f({Body)g(of)g(buf_add})177
+689 y(procedure)f(buf_get\(var)g(b)h(:)h(buffer_type;)d(var)i(ch)h(:)f
+(char\))g({Body)g(of)g(buf_get})177 739 y(@})177 839 y(@!****************)o
+(*****)o(*****)o(****)177 938 y(@$@<Complex)f(type@>==@{@-)177
+988 y(type)h(complex_type)e(=)j(record)f(r,i)g(:)g(real;)g(end;)177
+1038 y(@})177 1137 y(@$@<Complex)f(procedures@>+=@{)o(@-)177
+1187 y(procedure)g(cm_set\(var)g(c:)h(complex_type;)e(a,b)i(:)h(real\))43
+b({Body)20 b(of)i(cm_set})177 1237 y(procedure)e(cm_add\(a,b)g(:)h
+(complex_type;)f(var)h(c:)g(complex_type\))e({Body)i(of)g(cm_add})177
+1287 y({Other)g(procedures)e(and)j(functions})177 1337 y(@})177
+1436 y(@!****************)o(*****)o(*****)o(****)177 1536 y({...more)e
+(pieces)h(of)g(program...})177 1636 y(@!****************)o(*****)o(*****)o
+(****)177 1745 y Fr(One)16 b(of)e(adv)n(an)o(tages)g(of)g(F)m(unnelW)m(eb)g
+(\(and)h(literate)g(programmi)o(ng)d(in)i(general\))h(is)g(that)f(\(as)h(sho)
+o(wn)g(ab)q(o)o(v)o(e\))177 1794 y(it)d(allo)o(ws)f(the)i(user)g(to)f(la)o(y)
+f(out)h(the)h(program)e(in)g(whatev)o(er)i(order)g(is)f(desired)i(with)d
+(near)i(total)f(indep)q(endence)177 1844 y(from)g(the)j(ordering)f
+(requiremen)o(ts)g(of)f(the)i(target)f(programming)c(language.)177
+1917 y(Additiv)o(e)15 b(macros)f(are)h(allo)o(w)o(ed)f(to)h(b)q(e)h(tagged)f
+(with)f Fl(@Z)h Fr(and)g Fl(@M)g Fr(just)g(as)g(other)h(macros)e(can,)h(but)g
+(the)h(tags)177 1967 y(m)o(ust)9 b(app)q(ear)i(only)e(on)h(the)h(\014rst)g
+(de\014nition)f(of)g(the)g(macro.)16 b(Additiv)o(e)10 b(macros)f(cannot)i(b)q
+(e)f(connected)i(directly)177 2017 y(to)i(pro)q(duct)h(\014les.)177
+2155 y Fd(1.6.5)55 b(P)n(arameterized)17 b(Macros)177 2254
+y Fr(No)c(self-resp)q(ecting)i(macro)d(prepro)q(cessor)k(w)o(ould)c(b)q(e)i
+(complete)e(without)h(some)f(form)g(of)g(macro)g(parameter-)177
+2304 y(ization,)h(and)h(F)m(unnelW)m(eb)g(is)g(no)g(exception.)20
+b(F)m(unnelW)m(eb)14 b(allo)o(ws)f(eac)o(h)i(macro)e(to)h(ha)o(v)o(e)g(from)e
+(zero)k(to)e(nine)177 2354 y(formal)e(parameters)i(named)e
+Fl(@1)p Fr(,)h Fl(@2)p Fr(,)g Fl(@3)p Fr(,)g Fl(@4)p Fr(,)g
+Fl(@5)p Fr(,)g Fl(@6)p Fr(,)g Fl(@7)p Fr(,)g Fl(@8)p Fr(,)g(and)h
+Fl(@9)p Fr(.)177 2427 y(T)m(o)d(de\014ne)i(a)f(macro)f(with)h(one)g(or)g
+(more)f(parameters,)h(insert)g(a)g(formal)e(parameter)h(list)h(just)g(after)g
+(the)h(macro)177 2476 y(name)g(in)h(the)h(macro)f(de\014nition.)19
+b(Because)d(macro)e(parameters)g(ha)o(v)o(e)g(\014xed)h(names)f(\()p
+Fl(@1)p Fn(:)7 b(:)g(:)n Fl(@9)p Fr(\),)14 b(there)i(is)e(no)177
+2526 y(need)19 b(to)e(sp)q(ecify)h(the)g(names)e(of)h(formal)e(parameters)j
+(in)f(the)h(formal)d(parameter)i(list.)28 b(All)16 b(that)i(need)g(b)q(e)177
+2576 y(con)o(v)o(ey)o(ed)c(is)g(ho)o(w)f(man)o(y)f(parameters)i(the)g(macro)e
+(has.)19 b(Here)c(is)e(an)h(example)e(of)h(the)h(de\014nition)g(of)f(a)g
+(macro)177 2626 y(ha)o(ving)g(three)i(parameters:)177 2735
+y Fl(@$@<While)20 b(loop@>@\(@3@\)@M==@{)o(@-)177 2785 y(@1)177
+2835 y(while)h(\(@2\))1042 2940 y Fr(28)p eop
+%%Page: 29 30
+29 29 bop 221 42 a Fl({)243 91 y(@3)221 141 y(})177 191 y(@})177
+310 y Fr(T)m(o)11 b(call)g(a)g(parameterized)h(macro,)e(an)i(actual)f
+(parameter)g(list)h(m)o(ust)e(b)q(e)i(supplied)g(that)g(con)o(tains)f
+(exactly)h(the)177 360 y(same)j(n)o(um)o(b)q(er)g(of)f(actual)i(parameters)f
+(as)h(there)g(are)g(formal)d(parameters)j(in)f(the)h(de\014nition)f(of)g(the)
+h(macro)177 410 y(b)q(eing)h(called.)26 b(An)16 b(actual)h(parameter)f(list)g
+(is)h(delimited)d(b)o(y)j Fl(@\()f Fr(and)g Fl(@\))p Fr(,)h(and)f(parameters)
+h(are)g Fm(sep)n(ar)n(ate)n(d)177 459 y Fr(b)o(y)c(\\)p Fl(@,)p
+Fr(".)k(The)c(actual)g(parameters)g(themselv)o(es)h(are)f(general)h(F)m
+(unnelW)m(eb)e(expressions)j(\(see)f(Chapter)g(3)f(for)177
+509 y(the)g(exact)g(syn)o(tax\))f(and)h(can)f(b)q(e)h(inserted)h(in)o(to)d
+(the)i(list)f(directly)g(or)h(can)f(b)q(e)h(delimited)e(b)o(y)h
+Fl(@")g Fr(so)g(as)g(to)g(allo)o(w)177 559 y(some)j(white)g(space)h(to)f
+(assist)h(in)f(formatting)e(the)j(actual)e(parameters.)23 b(Here)16
+b(are)g(some)e(examples)h(of)f(calls)177 609 y(of)f(the)i Fl(While)21
+b(loop)13 b Fr(macro)f(de\014ned)j(ab)q(o)o(v)o(e.)177 728
+y Fl(@!)22 b(First)e(form)h(of)h(actual)e(parameters)g(without)g(whitespace)g
+(and)h(double)g(quotes.)177 778 y(@<While)g(loop@>@\(x=1;@,x)o(<=10@)o(,prin)
+o(tf\("X)o(=\045u\\)o(n",x\))o(;@\))177 877 y(@!)h(Second)e(form)h(of)g
+(actual)g(parameters.)f(The)h(double)f(quotes)h(allow)g(non-active)177
+927 y(@!)h(whitespace)d(that)i(helps)g(to)g(lay)h(out)f(the)g(actual)f
+(parameters)g(neatly.)177 977 y(@!)i(This)f(call)f(is)i(functionally)d
+(identical)h(to)h(the)h(one)f(above.)177 1027 y(@<While)g(loop@>@\()243
+1076 y(@"x:=1;@")e(@,)243 1126 y(@"x<=10@")g(@,)243 1176 y
+(@"printf\("X=\045u\\)o(n",x\))o(;@")g(@\))177 1276 y(@!)j(The)f(two)g(forms)
+g(can)g(be)g(mixed)g(in)g(a)h(single)e(call.)177 1325 y(@<While)h
+(loop@>@\(x=1;@,x)o(<=10@)o(,)482 1375 y(@"printf\("X=\045u\\n",x)o(\);@")d
+(@\))177 1494 y Fr(A)h(few)g(rules)g(ab)q(out)f(parameterized)h(macros)f(are)
+h(w)o(orth)g(men)o(tioning.)30 b(Macros)19 b(that)g(do)f(not)h(ha)o(v)o(e)f
+(an)o(y)177 1544 y(parameters)c(m)o(ust)f(ha)o(v)o(e)g(no)h(formal)d(or)j
+(actual)g(parameter)f(lists.)18 b(Additiv)o(e)c(macros)f(can)h(ha)o(v)o(e)f
+(parameters,)177 1594 y(but)h(the)h(formal)c(parameter)j(list)f(m)o(ust)g
+(app)q(ear)h(in)g(the)g(\014rst)h(de\014nition)e(part)h(only)m(.)177
+1670 y(Here)k(is)f(another)g(example)e(of)h(the)h(use)h(of)e(parameterized)g
+(macros.)26 b(This)16 b(time,)g(parameters)h(and)f(macro)177
+1719 y(calls)g(are)g(used)g(in)g(a)f(F)m(unnelW)m(eb)g(input)h(\014le)g(that)
+g(constructs)h(an)f Fn(O)q Fr(\()p Fn(n)p Fr(\))g(represen)o(tation)h(of)e(a)
+h(song)f(whose)177 1769 y(full)e(size)h(is)g Fn(O)q Fr(\()p
+Fn(n)444 1754 y Fg(2)463 1769 y Fr(\))g(in)f(the)i(n)o(um)o(b)q(er)e
+Fn(n)h Fr(of)f(unique)h(lines.)177 1938 y Fl(@O@<Twelve_bugs.tx)o(t@>==)o
+(@{@-)177 1988 y(The)21 b(Twelve)g(Bugs)g(of)g(Christmas)177
+2038 y(------------------)o(-----)o(-----)177 2087 y(@<Verse@>@\(@"first)o
+(@")84 b(@,@<1@>@\))177 2137 y(@<Verse@>@\(@"secon)o(d@")62
+b(@,@<2@>@\))177 2187 y(@<Verse@>@\(@"third)o(@")84 b(@,@<3@>@\))177
+2237 y(@<Verse@>@\(@"fourt)o(h@")62 b(@,@<4@>@\))177 2287 y
+(@<Verse@>@\(@"fifth)o(@")84 b(@,@<5@>@\))177 2337 y(@<Verse@>@\(@"sixth)o
+(@")g(@,@<6@>@\))177 2386 y(@<Verse@>@\(@"seven)o(th@")40 b(@,@<7@>@\))177
+2436 y(@<Verse@>@\(@"eight)o(h@")62 b(@,@<8@>@\))177 2486 y
+(@<Verse@>@\(@"ninth)o(@")84 b(@,@<9@>@\))177 2536 y(@<Verse@>@\(@"tenth)o
+(@")g(@,@<A@>@\))177 2586 y(@<Verse@>@\(@"eleve)o(nth@")18
+b(@,@<B@>@\))177 2635 y(@<Verse@>@\(@"twelf)o(th@")40 b(@,@<C@>@\))177
+2735 y(This)21 b(song)g(appeared)f(in)i(the)f(internet)f(newsgroup)g
+(rec.humor.funny)f(on)i(24-Dec-1991.)177 2785 y(It)h(was)f(contributed)e(by)j
+(Pat)f(Scannell)f(\(scannell@@darkst)o(ar.ma)o(30.bu)o(ll.co)o(m\).)177
+2835 y(@})1042 2940 y Fr(29)p eop
+%%Page: 30 31
+30 30 bop 177 91 a Fl(@$@<Verse@>@\(@2@\)@)o(M==@{)o(@-)177
+141 y(For)21 b(the)h(@1)f(bug)g(of)g(Christmas,)f(my)i(manager)e(said)h(to)g
+(me)286 191 y(@2)177 241 y(@})177 340 y(@$@<1@>@M==@{See)e(if)i(they)g(can)g
+(do)h(it)f(again.@})177 390 y(@$@<2@>@M==@{Ask)e(them)i(how)g(they)g(did)g
+(it)g(and@+@<1@>@})177 440 y(@$@<3@>@M==@{Try)e(to)i(reproduce)f(it@+@<2@>@})
+177 490 y(@$@<4@>@M==@{Run)f(with)i(the)g(debugger@+@<3@>@)o(})177
+540 y(@$@<5@>@M==@{Ask)e(for)i(a)g(dump@+@<4@>@})177 589 y
+(@$@<6@>@M==@{Reins)o(tall)d(the)k(software@+@<5@>)o(@})177
+639 y(@$@<7@>@M==@{Say)d(they)i(need)g(an)g(upgrade@+@<6@>@})177
+689 y(@$@<8@>@M==@{Find)d(a)k(way)f(around)g(it@+@<7@>@})177
+739 y(@$@<9@>@M==@{Blame)d(it)k(on)f(the)g(hardware@+@<8@>@})177
+789 y(@$@<A@>@M==@{Chang)o(e)e(the)i(documentation@+@<9)o(@>@})177
+839 y(@$@<B@>@M==@{Say)e(it's)i(not)g(supported@+@<A@>)o(@})177
+888 y(@$@<C@>@M==@{Tell)d(them)j(it's)g(a)h(feature@+@<B@>@})177
+1028 y Fd(1.6.6)55 b(Macro)19 b(Expansion)177 1128 y Fr(One)g(of)f(the)g
+(strengths)i(of)d(F)m(unnelW)m(eb)h(is)g(that,)h(when)f(writing)g(pro)q(duct)
+h(\014les,)g(it)f(do)q(es)h(not)f(attempt)f(to)177 1178 y(ev)n(aluate)g(an)o
+(y)f(text)h(expression)h(\(e.g.)e(text)h(blo)q(c)o(k,)g(parameter,)g(macro)e
+(call\))h(in)g(memory)f(and)h(then)h(write)177 1228 y(the)f(result)f(out.)22
+b(Instead,)15 b(it)g(alw)o(a)o(ys)f(writes)h(out)g(what)g(it)g(is)f
+(expanding)h(dynamically)d(and)j(directly)m(.)21 b(This)177
+1277 y(means)13 b(that)h(the)h(user)f(need)h(not)f(fear)g(de\014ning)g
+(macros)f(that)h(expand)g(to)f(h)o(uge)h(amoun)o(ts)f(of)g(text)h(and)g(then)
+177 1327 y(calling)d(those)i(macros)e(in)g(other)i(macros,)e(or)h(passing)g
+(those)h(h)o(uge)f(macros)f(as)h(parameters)h(to)e(other)i(macros.)177
+1377 y(In)f(all)e(cases,)i(F)m(unnelW)m(eb)f(expands)h(directly)g(to)f(the)h
+(pro)q(duct)g(\014le,)g(and)f(there)i(can)e(b)q(e)h(no)f(danger)h(in)f
+(running)177 1427 y(out)i(of)f(memory)f(during)i(expansion)f(\(except)j(for)e
+(running)f(out)h(of)f(stac)o(k)i(space)g(and)f(other)g(marginally)d(used)177
+1477 y(resources)16 b(in)e(pathological)e(cases\).)177 1550
+y(The)17 b(only)e(thing)h(to)f(remem)o(b)q(er)h(in)f(this)h(regard)h(is)f
+(that)g(F)m(unnelW)m(eb)g(alw)o(a)o(ys)f(stores)i(the)g(en)o(tire)f
+Fm(input)h Fr(\014le)177 1600 y(and)d(all)f(included)h(\014les,)f(in)h(their)
+g(en)o(tiret)o(y)h(in)e(memory)m(,)d(for)k(the)g(duration)g(of)f(the)i(run.)
+177 1674 y(Here)g(is)f(an)g(example,)e(that)i(illustrates)g(ho)o(w)f(robust)i
+(F)m(unnelW)m(eb)e(is:)177 1786 y Fl(@!)22 b(FunnelWeb)d(copes)i(well)g(with)
+g(the)g(following)f(macro)h(definitions.)177 1835 y(@!)h(\(Providing)d(that)i
+(it)h(has)f(a)g(little)g(over)g(ten)g(megabytes)f(of)h(memory\).)177
+1935 y(@O@<woppa.txt@>==@)o({@<Qu)o(ote@>)o(@\(@<H)o(umung)o(eous)o(@>@\)@)o
+(+@})177 2035 y(@$@<Quote@>@\(@1@\)=)o(=@{"@)o(1"@})177 2134
+y(@$@<Humungeous@>==)o(@{@-)177 2184 y(...Ten)g(Megabytes)f(of)h(Text...)177
+2234 y(@})177 2373 y Fd(1.6.7)55 b(Include)18 b(Files)177 2474
+y Fr(F)m(unnelW)m(eb)i(pro)o(vides)g(a)g(nested)i(include)e(\014le)h(facilit)
+o(y)d(that)i(can)h(b)q(e)g(used)g(for)f(a)g(n)o(um)o(b)q(er)f(of)h(purp)q
+(oses.)177 2523 y(When)c(F)m(unnelW)m(eb)f(runs)h(in)o(to)f(a)h(single)f
+(line)g(con)o(taining)f(the)j(sp)q(ecial)e(sequence)j Fl(@i)d
+Fr(follo)o(w)o(ed)f(b)o(y)i(a)f(blank,)177 2573 y(follo)o(w)o(ed)10
+b(b)o(y)g(a)h(\014le)g(name,)f(it)g(reads)i(in)f(the)g(designated)h(\014le)f
+(and)g(replaces)h(the)g(line)e(con)o(taining)g(the)i(command)177
+2623 y(\(including)h(the)g(end)h(of)f(line)f(mark)o(er)h(at)g(the)h(end)f(of)
+g(the)h(line\))f(with)g(the)g(en)o(tire)h(con)o(ten)o(ts)h(of)d(the)i
+(designated)177 2673 y(\014le.)k(F)m(or)c(example,)e(if)h(there)i(w)o(as)f(a)
+f(\014le)h(called)g Fl(camera.txt)e Fr(con)o(taining)g(the)j(t)o(w)o(o)e
+(lines:)177 2785 y Fl('Cos)21 b(I)h(shoot)e(with)h(a)h(camera)f(instead)f(of)
+h(a)h(gun.)177 2835 y(The)f(animals)g(flock)f(to)i(be)f(petted)g(and)g(fed,)
+1042 2940 y Fr(30)p eop
+%%Page: 31 32
+31 31 bop 177 42 a Fr(and)14 b(another)g(\014le)g(called)g
+Fl(poem.fw)e Fr(con)o(taining)h(the)h(follo)o(wing)e(four)h(lines)177
+152 y Fl(I)22 b(like)f(to)g(go)g(shooting,)f(it's)h(a)h(whole)f(lot)g(of)g
+(fun,)177 202 y(@i)h(camera.txt)177 251 y(Cos)f(they)g(know)g(my)h(camera)e
+(isn't)h(loaded)g(with)f(lead.)177 301 y(-)i(RNW,)f(04-Jan-1991.)177
+412 y Fr(Then,)14 b(if)f(F)m(unnelW)m(eb)g(w)o(ere)i(to)f(pro)q(cess)i
+Fl(poem.fw)p Fr(,)c(the)i(result)h(w)o(ould)e(b)q(e)h(as)g(if)f(F)m(unnelW)m
+(eb)h(had)f(read)i(in:)177 522 y Fl(I)22 b(like)f(to)g(go)g(shooting,)f(it's)
+h(a)h(whole)f(lot)g(of)g(fun,)177 572 y('Cos)g(I)h(shoot)e(with)h(a)h(camera)
+f(instead)f(of)h(a)h(gun.)177 621 y(The)f(animals)g(flock)f(to)i(be)f(petted)
+g(and)g(fed,)177 671 y('Cos)g(they)g(know)g(my)g(camera)g(isn't)g(loaded)f
+(with)h(lead.)177 721 y(-)h(RNW,)f(04-Jan-1991.)177 831 y Fr(F)m(unnelW)m(eb)
+11 b(expands)g(include)g(\014les)h(b)q(efore)f(it)g(starts)h(scanning)f(and)g
+(parsing)f(the)i(included)f(text.)18 b(The)11 b(result)177
+881 y(is)17 b(that)f(include)h(\014les)g(can)g(con)o(tain)f(an)o(ything)g
+(that)g(can)h(b)q(e)g(found)g(in)f(a)g(F)m(unnelW)m(eb)g(\014le.)26
+b(The)17 b(follo)o(wing)177 931 y(example)c(illustrates)h(the)g(lev)o(el)g
+(at)g(whic)o(h)f(the)i(include)f(mec)o(hanism)d(op)q(erates.)20
+b(If)13 b Fl(main.fw)g Fr(con)o(tains)177 1041 y Fl(@O@<output.dat@>==)o
+(@{@-)177 1091 y(@i)22 b(inc.fw)177 1141 y(This)f(is)h(the)f(text)g(of)g(the)
+g(sloth)g(macro.)177 1191 y(@})177 1301 y Fr(and)14 b(inc.fw)f(con)o(tains)
+177 1411 y Fl(@<Sloth@>)177 1461 y(@})177 1561 y(@$@<Sloth@>==@{@-)177
+1671 y Fr(Then)i(if)e(F)m(unnelW)m(eb)g(w)o(ere)i(applied)e(to)h
+Fl(main.fw)p Fr(,)e(it)h(w)o(ould)g(see:)177 1781 y Fl(@O@<output.dat@>==)o
+(@{@-)177 1831 y(@<Sloth@>)177 1881 y(@})177 1981 y(@$@<Sloth@>==@{@-)177
+2030 y(This)21 b(is)h(the)f(text)g(of)g(the)g(sloth)g(macro.)177
+2080 y(@})177 2190 y Fr(whic)o(h)c(it)g(w)o(ould)f(pro)q(cess)j(in)e(the)h
+(normal)d(manner.)27 b(The)18 b(only)e(sp)q(ecial)h(sequence)j(pro)q(cessing)
+e(that)f(tak)o(es)177 2240 y(place)12 b(at)g(a)f(lev)o(el)h(lo)o(w)o(er)f
+(than)h(include)g(\014les)g(is)g(the)g(pro)q(cessing)h(of)e(the)h
+Fl(<special>=<newspecia)o(l>)d Fr(sequence)177 2290 y(whic)o(h)14
+b(c)o(hanges)h(the)f(sp)q(ecial)g(c)o(haracter.)177 2363 y(A)g(few)f(other)h
+(facts)g(ab)q(out)f(include)g(\014les)h(are)g(w)o(orth)f(men)o(tioning)e
+(here.)19 b(Include)14 b(\014les)g(inherit)f(the)h(directory)177
+2413 y(sp)q(eci\014cation)k(supplied)g(using)f(the)h Fl(+I)f
+Fr(command)e(line)i(option.)28 b(The)17 b(sp)q(ecial)h(c)o(haracter)h(is)e
+(sa)o(v)o(ed)h(at)f(the)177 2463 y(start)e(of)e(eac)o(h)h(include)g(\014le)g
+(and)g(restored)i(to)d(its)h(previous)h(v)n(alue)e(at)h(the)g(end)g(of)g(eac)
+o(h)g(include)g(\014le.)k(Include)177 2513 y(\014les)c(can)g(b)q(e)g(nested)h
+(up)f(to)f(ten)i(lev)o(els.)i(Recursiv)o(e)e(included)f(\014les)g(will)e(alw)
+o(a)o(ys)g(cause)j(an)e(in\014nite)h(recursion)177 2562 y(as)f(there)h(is)e
+(no)g(b)q(ottoming)f(out)h(mec)o(hanism)e(a)o(v)n(ailable.)16
+b(Include)d(\014les)g(m)o(ust)e(con)o(tain)h(an)h(in)o(teger)g(n)o(um)o(b)q
+(er)e(of)177 2612 y(lines)i(\(i.e.)g(the)h(last)f(line)g(m)o(ust)f(b)q(e)i
+(terminated)e(with)h(an)g(end)h(of)f(line)g(mark)o(er\).)k(Once)d(F)m(unnelW)
+m(eb)f(has)g(seen)177 2662 y(\\)p Fl(@i)21 b Fr(")14 b(at)g(the)h(start)f(of)
+g(a)f(line,)h(it)f(will)g(grab)h(the)g(rest)i(of)d(the)i(line)e(ra)o(w)h(and)
+g(treat)h(it)e(as)h(a)g(\014le)g(name.)k(There)177 2712 y(is)c(no)g(place)g
+(on)f(the)i(line)e(for)h(things)f(lik)o(e)h(F)m(unnelW)m(eb)f(commen)o(ts)f
+(\(see)j(later\))f(or)g(extraneous)h(text.)177 2785 y(Include)21
+b(\014les)f(can)h(b)q(e)f(used)h(for)f(man)o(y)e(purp)q(oses,)23
+b(but)d(are)g(particularly)g(useful)g(for)g(hauling)e(in)i(macro)177
+2835 y(libraries.)1042 2940 y(31)p eop
+%%Page: 32 33
+32 32 bop 177 42 a Fi(1.7)70 b(T)n(yp)r(esetting)21 b(F)-6
+b(acilitie)o(s)177 158 y Fr(The)14 b(\014rst)g(half)e(of)g(this)h(tutorial)f
+(fo)q(cuses)j(solely)d(on)h(the)h(macro)e(facilities)g(of)g(F)m(unnelW)m(eb)h
+(\(whic)o(h)g(it)g(more)f(or)177 208 y(less)j(co)o(v)o(ers)g(completely\).)i
+(As)e(a)e(result,)i(the)f(example)f(do)q(cumen)o(ts)h(y)o(ou)f(ha)o(v)o(e)h
+(seen)i(so)e(far)f(ha)o(v)o(e)h(b)q(een)h(gross)177 257 y(distortions)k(of)g
+(\\normal")e(F)m(unnelW)m(eb)h(do)q(cumen)o(ts)h(whic)o(h)g(often)h(con)o
+(tain)e(as)i(m)o(uc)o(h)e(do)q(cumen)o(tation)g(as)177 307
+y(co)q(de.)270 292 y Fg(3)307 307 y Fr(While)12 b(there)j(are)e(applications)
+f(where)i(F)m(unnelW)m(eb)e(can)i(b)q(e)f(used)h(solely)e(as)h(a)g(macro)f
+(prepro)q(cessor,)177 357 y(most)h(applications)g(will)f(use)j(its)f(t)o(yp)q
+(esetting)h(facilities)d(as)i(w)o(ell.)177 432 y(This)g(section)h(restores)g
+(the)g(balance)f(in)f(this)h(tutorial)f(b)o(y)h(presen)o(ting)h(F)m(unnelW)m
+(eb's)e(t)o(yp)q(esetting)i(facilities.)177 574 y Fd(1.7.1)55
+b(Ov)n(erview)177 676 y Fr(The)12 b(macro)e(de\014nitions)h(discussed)h(in)f
+(the)h(macro)e(tutorial)g(completely)g(de\014ne)i(the)g(con)o(ten)o(ts)g(of)e
+(the)i(pro)q(duct)177 726 y(\014les)19 b(that)f(F)m(unnelW)m(eb)f(will)g
+(generate.)32 b(These)19 b(macro)e(de\014nitions)h(can)g(b)q(e)h(arranged)f
+(in)g(an)o(y)f(order)i(and)177 776 y(nothing)14 b(external)g(to)g(them)f(can)
+i(a\013ect)g(the)g(con)o(ten)o(ts)g(of)e(the)i(pro)q(duct)g(\014les.)k(The)c
+(macros)e(can)h(b)q(e)h(though)o(t)177 826 y(of)e(as)h(a)g(group)g(of)f
+(self-con)o(tained)h(islands.)177 901 y(Although)f(F)m(unnelW)m(eb)f(will)g
+(can)i(pro)q(cess)h(the)e(macros)g(all)f(on)h(their)g(o)o(wn,)g(the)g(full)f
+(p)q(o)o(w)o(er)i(of)e(F)m(unnelW)m(eb)h(is)177 950 y(realized)i(only)f(when)
+i(the)f(macros)f(are)i(surrounded)g(b)o(y)e(a)h(sea)g(of)f(do)q(cumen)o
+(tation.)20 b(This)15 b(sea)g(can)g(tak)o(e)g(t)o(w)o(o)177
+1000 y(forms:)j(directiv)o(es)d(and)f(free)h(text.)20 b(Some)13
+b(of)h(the)h(directiv)o(es)g(con)o(trol)f(things)g(suc)o(h)h(as)g(the)g
+(maxim)n(um)10 b(input)177 1050 y(line)f(length.)17 b(Ho)o(w)o(ev)o(er,)10
+b(most)f(of)f(them)h(are)h(t)o(yp)q(esetting)h(directiv)o(es)f(that)g
+(a\013ect)g(the)h(prin)o(ted)e(do)q(cumen)o(tation.)177 1100
+y(Th)o(us)j(a)g(F)m(unnelW)m(eb)g(do)q(cumen)o(t)f(can)h(b)q(e)h(view)o(ed)f
+(as)g(a)g(sequence)i(of)d Fo(macro)j(de\014niti)o(ons)o Fr(,)9
+b Fo(directiv)o(es)p Fr(,)g(and)177 1150 y Fo(free)15 b(text)p
+Fr(.)177 1225 y(Unlik)o(e)10 b(the)i(pro)q(duct)f(\014les)g(whic)o(h)g
+(consist)g(of)g(unscram)o(bled)f(macro)f(calls,)i(the)g(do)q(cumen)o(tation)f
+(\014le)g(is)h(more)f(or)177 1274 y(less)g(a)f(direct)h(represen)o(tation)h
+(of)e(the)h(input)f(\014le.)17 b(Eac)o(h)9 b(part)h(of)f(the)h(input)f
+(\014le)g(app)q(ears)h(in)f(the)h(do)q(cumen)o(tation)177 1324
+y(\014le)h(in)f(the)h(order)h(in)e(whic)o(h)h(it)f(app)q(ears)i(in)e(the)h
+(input)g(\014le.)17 b(Ho)o(w)o(ev)o(er,)11 b(eac)o(h)g(di\013eren)o(t)h(kind)
+e(of)g(part)h(is)g(t)o(yp)q(eset)1929 1309 y Fg(4)177 1374
+y Fr(in)i(a)g(di\013eren)o(t)i(manner.)i(Macros)d(are)g(t)o(yp)q(eset)h(in)e
+(a)g(particular)g(st)o(yle,)h(with)f(the)h(macro)e(b)q(o)q(dy)i(app)q(earing)
+f(in)177 1424 y Fl(tt)22 b(font)11 b Fr(\(see)i(some)e(F)m(unnelW)m(eb)h
+(prin)o(ted)g(do)q(cumen)o(tation)f(for)h(an)f(example\).)17
+b(T)o(yp)q(esetter)d(directiv)o(es)f(ha)o(v)o(e)177 1474 y(sp)q(eci\014c)j
+(de\014ned)f(e\013ects)h(\(more)d(later\).)18 b(F)m(ree)d(text)f(is)g(t)o(yp)
+q(eset)h(exactly)f(as)g(it)g(is,)f(except)i(that)f(eac)o(h)h(blo)q(c)o(k)e
+(of)177 1524 y(text)i(b)q(et)o(w)o(een)g(blank)e(lines)h(is)g(\014lled)f(and)
+h(justi\014ed)g(as)g(a)g(paragraph.)177 1599 y(The)f(follo)o(wing)d(example)i
+(demonstrates)h(ho)o(w)f(all)f(this)i(w)o(orks.)k(T)o(yp)q(e)c(in)g(the)g
+(follo)o(wing)d(as)i Fl(example.fw)f Fr(and)177 1648 y(run)k(it)g(through)f
+(F)m(unnelW)m(eb)g(with)h(the)g(command)d(\\)p Fl(fw)21 b(example)g(+t)p
+Fr(".)e(The)c(\\)p Fl(+t)p Fr(")f(instructs)i(F)m(unnelW)m(eb)177
+1698 y(to)j(generate)h(a)f(do)q(cumen)o(tation)f(\014le)h(called)g
+Fl(example.tex)p Fr(.)31 b(Run)19 b(the)g(\014le)g(through)h(T)1643
+1707 y(E)1666 1698 y(X)f(and)g(prin)o(t)g(it.)177 1748 y(Examine)13
+b(the)h(\014les)g Fl(example.out)e Fr(and)i Fl(example.tex)p
+Fr(.)177 1865 y Fl(You)21 b(are)h(reading)e(some)h(free)g(text)g(before)f
+(the)h(macro.)g(Free)g(text)g(can)g(consist)177 1915 y(of)h(any)f(text)g
+(\(not)g(containing)e(the)j(FunnelWeb)d(special)i(character\))f(including)177
+1965 y(typesetter)g(commands)177 2014 y(such)h(as)h($,)f(\045,)g(#,)h(and)f
+(\\TeX{})f(which)177 2064 y(will)h(be)h(typeset)e(to)h(appear)g(exactly)f(as)
+i(they)e(do)i(in)f(the)g(input)g(file!)177 2114 y(Look)g(out!)g(Here)g(comes)
+g(a)g(macro!)177 2214 y(@O@<example.out@>=)o(=@{@-)177 2263
+y(This)g(text)g(is)g(part)g(of)177 2313 y(a)h(macro)f(definition.)177
+2363 y(@})177 2463 y(This)g(is)h(free)e(text)h(following)f(the)i(macro.)e
+(This)h(sentence)f(contains)177 2513 y(two)h(@{inline@})f(typesetter)g
+(@/directives@/.)177 2562 y(Now)h(here)g(is)h(a)f(non-inline)f(typesetting)g
+(directive.)p 177 2599 709 2 v 223 2626 a Ff(3)241 2637 y Fh(As)12
+b(an)f(example,)e(the)h(author)g(used)h(F)m(unnelW)m(eb)e(to)i(dev)o(elop)f
+(a)h(largish)f(computer)f(program)g(and)i(found)f(that)g(on)h(a)o(v)o(erage)
+177 2677 y(his)g(st)o(yle)g(of)g(using)f(F)m(unnelW)m(eb)g(resulted)f(in)j
+(ab)q(out)d(30\045)j(do)q(cumen)o(ta)o(tion)c(and)j(70\045)g(macros)f(\(co)q
+(de\))g(\(measured)e(b)o(y)j(n)o(um)o(b)q(ers)177 2716 y(of)g(lines\).)223
+2744 y Ff(4)241 2756 y Fh(Here)i(the)h(term)e(\\t)o(yp)q(eset")g(is)i(used)f
+(lo)q(osely)f(to)i(refer)e(to)i(F)m(unnelW)m(eb's)e(generation)f(of)i(t)o(yp)
+q(esetter)f(commands)f(for)i(eac)o(h)177 2795 y(construct)e(in)h(the)g(input)
+g(\014le.)18 b(Strictly)m(,)11 b(the)h(term)g(should)f(b)q(e)i(used)f(only)f
+(to)i(describ)q(e)e(the)h(actions)f(of)h(a)h(t)o(yp)q(esetter)d(program)177
+2835 y(\(e.g.)h(T)275 2842 y(E)295 2835 y(X\).)1042 2940 y
+Fr(32)p eop
+%%Page: 33 34
+33 33 bop 177 91 a Fl(@t)22 b(new_page)177 191 y(This)f(sentence)f(will)h
+(appear)g(on)g(the)g(next)g(page.)177 312 y Fr(A)o(t)12 b(the)h(top)e(of)h
+(the)g Fl(example.tex)d Fr(do)q(cumen)o(tation)i(\014le)h(will)e(b)q(e)j(a)e
+(set)i(of)e(T)1383 321 y(E)1406 312 y(X)h(macro)f(de\014nitions.)17
+b(The)c(T)1895 321 y(E)1918 312 y(X)177 362 y(co)q(de)g(corresp)q(onding)h
+(to)e(the)h(input)f(ab)q(o)o(v)o(e)g(app)q(ears)h(at)f(the)h(end)g(of)f(the)h
+(\014le.)18 b(It)12 b(should)g(lo)q(ok)g(something)f(lik)o(e)177
+412 y(this.)177 533 y Fl(You)21 b(are)h(reading)e(some)h(free)g(text)g
+(before)f(the)h(macro.)g(Free)g(text)g(can)g(consist)177 583
+y(of)h(any)f(text)g(\(not)g(containing)e(the)j(FunnelWeb)d(special)i
+(character\))f(including)177 632 y(typesetter)g(commands)177
+682 y(such)h(as)h(\\$,)f(\\\045,)g(\\#,)g(and)g($\\backslash$TeX$\\{)o
+($$\\}$)d(which)177 732 y(will)j(be)h(typeset)e(to)h(appear)g(exactly)f(as)i
+(they)e(do)i(in)f(the)g(input)g(file!)177 782 y(Look)g(out!)g(Here)g(comes)g
+(a)g(macro!)177 882 y(\\fwbeginmacro)177 931 y(\\fwfilename{exampl)o(e.out)o
+(}{1}\\)o(fwequ)o(als)e(\\fwodef)h(\\fwbtx[This)f(text)i(is)h(part)f(of)177
+981 y(a)h(macro)f(definition.)177 1031 y(]fwetx=\045)177 1081
+y(\\fwcdef)177 1131 y(\\fwbeginmacronotes)177 1180 y(\\fwisafile{This)e
+(macro)i(is)g(attached)f(to)i(an)f(output)f(file.})177 1230
+y(\\fwendmacronotes)177 1280 y(\\fwendmacro)177 1380 y(This)h(is)h(free)e
+(text)h(following)f(the)i(macro.)e(This)h(sentence)f(contains)177
+1430 y(two)h(\\fwlit{inline})e(typesetter)h(\\fwemp{directives)o(}.)177
+1479 y(Now)h(here)g(is)h(a)f(non-inline)f(typesetting)g(directive.)177
+1579 y(\\fwnewpage)177 1679 y(This)h(sentence)f(will)h(appear)g(on)g(the)g
+(next)g(page.)177 1800 y Fr(The)14 b(follo)o(wing)e(p)q(oin)o(ts)i(explain)f
+(the)h Fl(example.tex)e Fr(\014le.)295 1876 y Fo(Y)l(ou)f(don't)e(ha)o(v)o(e)
+h(to)g(kno)o(w)h(T)l(eX:)f Fr(If)f(y)o(ou)g(don't)g(kno)o(w)g(T)1238
+1885 y(E)1261 1876 y(X,)g(don't)g(pa)o(y)g(to)q(o)h(m)o(uc)o(h)e(atten)o
+(tion)295 1926 y(to)14 b(this)g(section.)19 b(Y)m(ou)13 b(don't)g(need)i(to)f
+(kno)o(w)f(T)1054 1935 y(E)1078 1926 y(X)g(to)h(use)h(F)m(unnelW)m(eb.)295
+2003 y Fo(In)h(order:)h Fr(F)m(unnelW)m(eb)c(has)h(merely)g(transformed)f
+(the)h(input.)k(It)c(hasn't)g(rearranged)h(it.)295 2080 y Fo(F)l(ree)i(text:)
+22 b Fr(Most)15 b(of)g(the)h(free)h(text)f(has)f(b)q(een)i(simply)c(copied)j
+(o)o(v)o(er.)23 b(The)16 b(T)1580 2089 y(E)1603 2080 y(X)f(t)o(yp)q(esetter)
+295 2129 y(justi\014es)f(and)f(\014lls)g(all)e(paragraphs)j(fed)f(to)g(it)g
+(b)o(y)f(default,)h(so)g(most)f(of)h(the)g(text)h(has)f(just)h(b)q(een)295
+2179 y(copied)g(v)o(erbatim.)295 2256 y Fo(T)l(eX)20 b(co)q(des:)25
+b Fr(The)17 b(c)o(haracters)i(and)e(sequences)i(whic)o(h)e(T)1263
+2265 y(E)1286 2256 y(X)g(treats)h(as)f(sp)q(ecial)h(ha)o(v)o(e)f(b)q(een)295
+2306 y(neutralized)12 b(in)e(the)i(do)q(cumen)o(tation)d(\014le.)17
+b(F)m(or)11 b(example,)e(\\)p Fl($)p Fr(")i(has)g(b)q(ecome)f(\\)p
+Fl(\\$)p Fr(".)16 b(By)11 b(default,)295 2356 y(F)m(unnelW)m(eb)h(allo)o(ws)f
+(the)i(user)g(to)f(write)g(an)o(y)g(text)h(as)f(free)h(text)g(and)f(not)g(ha)
+o(v)o(e)g(to)g(w)o(orry)g(ab)q(out)295 2405 y(acciden)o(tally)i(in)o(v)o
+(oking)e(t)o(yp)q(esetter)k(features.)295 2482 y Fo(fw)h(sequences:)j
+Fr(The)15 b Fl(fw)f Fr(sequences)j(\(e.g.)e Fl(\\fwbeginmacro)p
+Fr(\))d(in)o(v)o(ok)o(e)i(T)1491 2491 y(E)1514 2482 y(X)h(macros)f(de\014ned)
+295 2532 y(earlier)g(in)g(the)g(do)q(cumen)o(tation)f(\014le)h(\(and)g(not)f
+(sho)o(wn)h(here\).)295 2609 y Fo(The)19 b(macro:)24 b Fr(The)17
+b(macro)e(is)i(t)o(yp)q(eset)h(using)e(a)g(set)i(of)e(prede\014ned)i(T)1460
+2617 y(E)1484 2609 y(X)e(macros.)26 b(See)17 b(the)295 2658
+y(prin)o(ted)e(do)q(cumen)o(tation)d(to)i(see)h(what)f(this)g(lo)q(oks)f(lik)
+o(e)g(on)h(pap)q(er.)295 2735 y Fo(T)o(yp)q(esetter)i(directiv)o(es:)k
+Fr(Unlik)o(e)15 b(the)h(T)1002 2744 y(E)1025 2735 y(X)g(command)d(sequences)
+18 b(\(whic)o(h)e(w)o(ere)h(neutral-)295 2785 y(ized\),)f(the)g(F)m(unnelW)m
+(eb)f(t)o(yp)q(esetter)i(directiv)o(es)f(turn)g(in)o(to)e(T)1286
+2794 y(E)1310 2785 y(X)h(macro)f(calls.)22 b(F)m(or)14 b(example,)295
+2835 y(\\)p Fl(@)p Fq(f)p Fl(inline@)p Fq(g)p Fr(")d(b)q(ecame)j(\\)p
+Fl(\\fwlit)p Fq(f)p Fl(inline)p Fq(g)p Fr(".)1042 2940 y(33)p
+eop
+%%Page: 34 35
+34 34 bop 177 42 a Fr(In)16 b(summary)m(,)c(F)m(unnelW)m(eb)j(pro)q(duces)i
+(t)o(yp)q(eset)g(do)q(cumen)o(tation)d(that)h(transforms,)g(but)g(do)q(es)h
+(not)g(reorder,)177 91 y(the)e(input)f(\014le.)18 b(Macros)c(are)g(t)o(yp)q
+(eset)h(in)e(a)g(sp)q(eci\014c)i(st)o(yle.)j(F)m(unnelW)m(eb)13
+b(t)o(yp)q(esetter)j(directiv)o(es)f(ha)o(v)o(e)e(partic-)177
+141 y(ular)i(w)o(ell-de\014ned)g(e\013ects.)23 b(F)m(ree)16
+b(text)g(is)f(\014lled)f(and)h(justi\014ed,)g(but)g(will)f(otherwise)i(app)q
+(ear)f(in)g(the)g(prin)o(ted)177 191 y(do)q(cumen)o(tation)e(exactly)h(as)g
+(it)f(app)q(ears)i(in)e(the)i(input)f(\014le.)177 333 y Fd(1.7.2)55
+b(T)n(yp)r(esetter)17 b(Indep)r(endence)177 436 y Fr(Although)f(the)h(curren)
+o(t)h(v)o(ersion)e(of)g(F)m(unnelW)m(eb)f(can)i(only)e(generate)j(do)q(cumen)
+o(tation)d(\014les)i(in)f(T)1783 444 y(E)1806 436 y(X)g(form,)177
+485 y(it)i(encourages)i(t)o(yp)q(esetter)h(indep)q(endence)g(b)o(y)d
+(neutralizing)g(all)f(T)1280 494 y(E)1303 485 y(X)i(con)o(trol)f(sequences)j
+(b)q(efore)f(writing)177 535 y(them)f(out.)34 b(The)20 b(result)g(is)f(that)h
+(y)o(ou)f(don't)f(ha)o(v)o(e)i(w)o(orry)f(ab)q(out)g(upsetting)h(or)f(dep)q
+(ending)h(on)f(T)1831 544 y(E)1855 535 y(X)g(b)o(y)177 585
+y(acciden)o(tally)11 b(including)g(some)g(sp)q(ecial)h(c)o(haracter)h(or)f
+(sequence.)19 b(By)12 b(default)g(y)o(our)f(input)h(\014le)g(is)f
+Fo(t)o(yp)q(esetter)177 635 y(indep)q(enden)n(t)p Fr(.)177
+710 y(This)i(sc)o(heme)g(di\013ers)h(from)d(other)i(literate)g(programming)d
+(to)q(ols,)i(including)g(all)f(earlier)j(v)o(ersions)f(of)f(F)m(unnel-)177
+760 y(W)m(eb,)h(whic)o(h)g(cop)o(y)g(their)h(free)g(text)g(directly)f(to)g
+(the)h(do)q(cumen)o(tation)e(\014le,)h(the)h(justi\014cation)f(b)q(eing)g
+(that)g(the)177 810 y(programmer)d(can)j(use)g(the)g(full)e(p)q(o)o(w)o(er)h
+(of)g(the)h(t)o(yp)q(esetter)h(language)e(to)g(describ)q(e)i(the)f(program.)i
+(The)e(disad-)177 859 y(v)n(an)o(tages)h(of)f(doing)g(this)h(are)g(\014rst)h
+(that)f(the)g(programmer)e(is)i(required)g(to)g(kno)o(w)f(the)i(t)o(yp)q
+(esetting)g(language)177 909 y(and)h(second)h(that)f(the)g(input)g(\014le)g
+(b)q(ecomes)g(t)o(yp)q(esetter)i(dep)q(enden)o(t.)25 b(F)m(unnelW)m(eb)16
+b(a)o(v)o(oids)e(these)k(problems)177 959 y(b)o(y)c(knobbling)e(the)j(free)g
+(text)f(b)q(e)h(default.)177 1034 y(Ho)o(w)o(ev)o(er,)e(F)m(unnelW)m(eb)g(do)
+q(es)h(pro)o(vide)f(a)f(trap)q(do)q(or)i(for)e(those)i(who)f(w)o(an)o(t)g
+(their)g(free)h(text)g(to)f(b)q(e)g(fed)g(directly)177 1084
+y(to)h(T)251 1093 y(E)274 1084 y(X.)f(T)m(o)h(op)q(en)g(the)g(trap)q(do)q
+(or,)g(simply)e(include)i(the)g(follo)o(wing)d(pragma)h(somewhere)j(in)e(y)o
+(our)h(input)f(\014le.)177 1201 y Fl(@p)22 b(typesetter)d(=)j(tex)177
+1319 y Fr(See)15 b(Section)f(3.11.2)e(for)i(more)f(information.)177
+1394 y(F)m(unnelW)m(eb)d(lea)o(v)o(es)h(the)h(degree)g(to)e(whic)o(h)h(the)g
+(user)h(wishes)g(to)e(bind)h(a)f(particular)h(do)q(cumen)o(t)f(to)h(a)f
+(particular)177 1444 y(t)o(yp)q(esetter)15 b(up)e(to)f(the)i(user.)k(In)13
+b(some)f(cases,)h(the)h(extra)f(t)o(yp)q(esetting)g(p)q(o)o(w)o(er)g(ma)o(y)e
+(comp)q(ensate)i(for)f(the)h(lac)o(k)177 1493 y(of)h(p)q(ortabilit)o(y)m(.)k
+(Ho)o(w)o(ev)o(er,)d(as)f(a)g(rule,)h(it)f(is)g(b)q(est)i(to)e(a)o(v)o(oid)f
+(t)o(yp)q(esetter-sp)q(ec)q(i\014c)k(commands,)12 b(so)j(as)f(to)g(allo)o(w)
+177 1543 y(y)o(our)j(input)g(\014les)h(to)f(b)q(e)g(formatted)f(at)h(a)g
+(later)h(date)f(for)g(di\013eren)o(t)h(t)o(yp)q(esetters.)31
+b(F)m(unnelW)m(eb)16 b(includes)i(a)177 1593 y(n)o(um)o(b)q(er)c(of)g(its)g
+(o)o(wn)h(t)o(yp)q(esetter)h(commands)d(so)h(as)h(to)f(supp)q(ort)i(t)o(yp)q
+(esetter-indep)q(enden)o(t)i(input)c(\014les.)20 b(The)177
+1643 y(follo)o(wing)12 b(sections)k(describ)q(e)g(some)d(of)h(these)i
+(commands.)h(In)e(particular,)e(the)j(next)e(section)i(describ)q(es)g(the)177
+1693 y(most)f(p)q(o)o(w)o(erful)g(F)m(unnelW)m(eb)g(t)o(yp)q(esetting)h
+(directiv)o(es)h(whic)o(h)e(allo)o(w)f(the)i(user)h(to)e(structure)j(the)e
+(do)q(cumen)o(t)177 1742 y(hierarc)o(hically)m(.)177 1885 y
+Fd(1.7.3)55 b(Hierarc)n(hical)18 b(Structure)177 1987 y Fr(The)h(tree)h
+(structure)g(is)f(one)f(of)g(the)h(most)e(e\013ectiv)o(e)j(structuring)g(to)q
+(ols)e(that)g(exists,)i(deriving)e(its)g(p)q(o)o(w)o(er)177
+2037 y(from)13 b(the)i(principal)f(of)g(divide)h(and)f(conquor.)21
+b(So)14 b(e\013ectiv)o(e)i(is)f(it)f(that)h(the)g(in)o(ternal)f(organization)
+g(of)g(most)177 2087 y(tec)o(hnical)j(b)q(o)q(oks)g(are)h(tree)g(structures)h
+(whic)o(h)e(are)h(concisely)f(summarized)e(in)i(the)g(table)g(of)f(con)o(ten)
+o(ts.)29 b(In)177 2136 y(con)o(trast,)14 b(computer)e(programs)g(are)i
+(usually)e(presen)o(ted)j(as)e(\015at)g(sequences)j(of)c(text)i(to)f(b)q(e)g
+(consumed)g(b)o(y)g(an)177 2186 y(anon)o(ymous)f(compiler.)177
+2261 y(In)20 b(order)h(to)e(bring)h(program)e(do)q(cumen)o(tation)h(up)h(to)f
+(the)i(structural)g(sophistication)e(commonplace)e(in)177 2311
+y(tec)o(hnical)12 b(b)q(o)q(oks,)g(F)m(unnelW)m(eb)f(pro)o(vides)g(\014v)o(e)
+h(lev)o(els)g(of)e(section)j(headings)e(implemen)o(ted)e(b)o(y)j(the)g(\014v)
+o(e)g(sp)q(ecial)177 2361 y(sequences)j Fl(@A)p Fr(,)c Fl(@B)p
+Fr(,)g Fl(@C)p Fr(,)g Fl(@D)p Fr(,)h(and)g Fl(@E)p Fr(.)f(These)i(m)o(ust)e
+(alw)o(a)o(ys)h(app)q(ear)g(at)g(the)h(start)g(of)e(a)h(line.)17
+b Fl(@A)12 b Fr(is)g(the)g(highest)177 2411 y(lev)o(el)21 b(section)g(\(e.g.)
+f(lik)o(e)g(L)617 2406 y Fk(a)636 2411 y Fr(T)659 2423 y(E)683
+2411 y(X's)g Fl(\\chapter)p Fr(\))g(and)g Fl(@E)h Fr(is)f(the)i(lo)o(w)o(est)
+e(lev)o(el)h(section)g(\(e.g.)f(lik)o(e)g(L)1824 2406 y Fk(a)1843
+2411 y Fr(T)1866 2423 y(E)1890 2411 y(X's)177 2461 y Fl(\\subsubsubsection)p
+Fr(\).)30 b(Section)19 b(headings)g(can)g(app)q(ear)g(an)o(ywhere)h(in)e(the)
+h(free)h(text)g(of)e(a)g(F)m(unnelW)m(eb)177 2510 y(input)c(\014le)g(\(i.e.)f
+(an)o(ywhere)h(except)i(inside)e(a)f(macro)g(de\014nition\).)177
+2586 y(Eac)o(h)j(section)g(heading)f(in)g(a)g(F)m(unnelW)m(eb)g(do)q(cumen)o
+(t)f(has)i(an)f(asso)q(ciated)h(name.)21 b(The)16 b(name)e(of)h(a)g(section)
+177 2635 y(can)i(b)q(e)f(pro)o(vided)h(explicitly)e(b)o(y)h(supplying)f(it)h
+(delimited)f(b)o(y)h Fl(@<)f Fr(and)h Fl(@>)g Fr(immediately)d(after)j(the)h
+(section)177 2685 y(sequence)e(\(e.g.)e Fl(@A)p Fr(\),)f(or)h(implicitly)d(b)
+o(y)i(not)h(pro)o(viding)f(an)h(explicit)f(name,)g(in)g(whic)o(h)h(case)h
+(the)g(section)f(tak)o(es)177 2735 y(the)e(name)f(of)g(the)h(\014rst)g(macro)
+f(de\014ned)h(b)q(et)o(w)o(een)h(the)g(section)f(header)g(in)g(question)f
+(and)h(the)g(follo)o(wing)d(section)177 2785 y(header.)18 b(An)12
+b(error)h(is)e(generated)i(if)e(a)g(section)h(has)g(not)f(b)q(een)i(giv)o(en)
+e(an)h(explicit)f(name)f(and)h(do)q(es)i(not)e(con)o(tain)177
+2835 y(an)o(y)j(macro)e(de\014nitions.)18 b(Here)d(are)g(some)e(example)f
+(headings:)1042 2940 y(34)p eop
+%%Page: 35 36
+35 35 bop 177 42 a Fl(@A@<Feed)20 b(the)h(Penguins)g(and)g(Save)g(the)g
+(World@>)177 91 y(@B@<Feed)f(the)h(Penguins@>)177 141 y(@C@<Feed)f(the)h
+(little)g(penguins@>)177 191 y(@C@<Feed)f(the)h(big)h(penguins@>)177
+241 y(@B@<Save)e(the)h(World@>)177 291 y(@C@<Save)f(Europe@>)177
+340 y(@C@<Save)g(Africa@>)177 440 y(@C)i(This)f(heading)f(hasn't)g(been)h
+(given)g(an)h(explicit)e(name,)g(but)i(will)f(inherit)f(the)177
+490 y(name)h(\\p{Save)f(the)i(rest)f(of)g(the)g(world})g(from)g(the)g(macro)g
+(definition)e(below.)177 589 y(@$@<Save)h(the)h(rest)g(of)h(the)f
+(world@>@Z==@{...@)o(})177 706 y Fr(The)16 b(feature)h(of)e(ha)o(ving)g
+(unnamed)f(sections)j(inherit)f(the)g(name)f(of)g(the)h(\014rst)h(macro)e
+(de\014ned)h(within)f(their)177 756 y(scop)q(e)f(is)f(presen)o(t)h(b)q
+(ecause)g(a)f(common)c(st)o(yle)k(of)f(writing)g(in)g(F)m(unnelW)m(eb)h(is)f
+(to)h(ha)o(v)o(e)f(one)h(section)g(p)q(er)h(macro)177 806 y(de\014nition.)26
+b(Because,)19 b(under)e(this)g(st)o(yle,)g(eac)o(h)g(section)g(describ)q(es)i
+(a)d(single)h(macro,)e(it)i(usually)e(turns)j(out)177 855 y(that)12
+b(the)h(macro)e(name)g(mak)o(es)g(a)h(go)q(o)q(d)g(name)f(for)h(the)h
+(section)g(to)q(o.)k(The)c(inheritance)g(mec)o(hanism)c(prev)o(en)o(ts)177
+905 y(duplication)k(of)g(the)i(name.)177 980 y(Apart)d(from)e(the)i
+(requiremen)o(t)g(that)g(eac)o(h)g(section)g(ha)o(v)o(e)g(an)f(explicit)g(or)
+h(implicit)d(name)i(and)g(that)h(its)g(sp)q(ecial)177 1030
+y(sequence)21 b(app)q(ear)e(at)f(the)h(start)g(of)f(a)g(line,)h(the)g(only)f
+(other)h(restriction)g(on)g(section)g(headings)f(is)h(that)f(a)177
+1080 y(section)c(heading)e(at)h(lev)o(el)f Fn(n)h Fr(cannot)g(app)q(ear)g
+(immediately)c(after)k(a)g(section)g(heading)g(at)g(lev)o(el)f
+Fn(n)7 b Fq(\000)g Fr(1)13 b(or)g(less.)177 1129 y(In)k(other)g(w)o(ords,)f
+(the)h(hierarc)o(h)o(y)g(cannot)g(b)q(e)g(brok)o(en.)26 b(F)m(or)16
+b(example,)f(an)h Fl(@C)g Fr(cannot)h(app)q(ear)f(after)h(an)f
+Fl(@A)177 1179 y Fr(heading)e(unless)g(there)i(is)d(an)h(in)o(terv)o(ening)g
+Fl(@B)f Fr(heading.)177 1296 y Fl(@A@<The)21 b(Top)g(Heading@>)177
+1346 y(@C@<Level)f(C)i(here)f(is)g(not)g(allowed)g(after)f(an)i(A)f(and)g
+(will)g(cause)g(an)h(error@>)177 1462 y Fr(This)14 b(rule)g(extends)i(to)e
+(the)h(start)f(of)g(the)g(\014le;)g(if)f(there)j(are)e(an)o(y)g(headings)g
+(at)g(all,)e(the)j(\014rst)g(one)f(m)o(ust)f(b)q(e)i(an)177
+1512 y Fl(@A)f Fr(heading.)j(The)e(follo)o(wing)c(\014le,)i(while)h(short,)g
+(is)f(in)h(error.)177 1628 y Fl(This)21 b(FunnelWeb)f(input)h(file)g(is)g(in)
+h(error)e(because)h(its)g(first)g(section)f(heading)177 1678
+y(is)i(at)f(level)g(C)g(rather)g(than)g(level)g(A.)177 1728
+y(@C@<2@>)177 1869 y Fd(1.7.4)55 b(Understanding)19 b(the)f(Prin)n(ted)h(Do)r
+(cumen)n(tation)177 1971 y Fr(T)o(yp)q(e)g(in)f(the)h(follo)o(wing)c(\014le,)
+k(and)g(use)g(F)m(unnelW)m(eb)f(and)g(T)1173 1980 y(E)1196
+1971 y(X)g(to)h(generate)g(the)g(corresp)q(onding)g(prin)o(ted)177
+2021 y(do)q(cumen)o(tation.)177 2137 y Fl(@A@<Table)h(of)h(Contents@>)177
+2237 y(@t)h(table_of_conten)o(ts)177 2337 y(@A@<Macros)e(for)h(Moral)g
+(Support@>)177 2436 y(The)g(following)f(macro)h(contain)f(comments)h(that)f
+(provide)h(moral)g(support)f(in)h(the)177 2486 y(output)g(code.)177
+2586 y(@$@<Programmer's)e(Cheer@>@M==@{)177 2635 y(--)j(Shift)e(to)i(the)f
+(left!)177 2685 y(--)h(Shift)e(to)i(the)f(right!)177 2735 y(--)h(Pop)f(up,)g
+(push)g(down!)177 2785 y(--)h(Byte!)e(Byte!)h(Byte!)177 2835
+y(--)h(\(From)e("The)h(New)g(Hacker's)g(Dictionary"\).)1042
+2940 y Fr(35)p eop
+%%Page: 36 37
+36 36 bop 177 42 a Fl(@})177 141 y(The)21 b(next)g(macro)g(is)g(similar)g
+(but)g(is)g(distributed)f(throughout)g(the)h(program.)177 191
+y(@$@<Hacker's)e(Cheer@>+=@{@+--)g(Pointer)i(to)g(the)g(left@+@})177
+291 y(@A@<An)g(Extremely)f(Imperative)f(Stack)i(Abstraction@>)177
+390 y(@B@<Define)f(the)h(Stack@>)177 440 y(@$@<Hacker's)e(Cheer@>+=@{--)h
+(Pointer)g(to)h(the)g(right@+@})177 490 y(@$@<Stack)f(Type@>@Z==@{type)f
+(stack)h(=)i(record)e(...)i(end;@})177 589 y(@B@<Push)e(the)h(Stack@>)177
+639 y(@$@<Hacker's)e(Cheer@>+=@{--)h(Hack)h(that)g(code@+@})177
+689 y(@$@<Push)f(Procedure@>@Z==@{@-)177 739 y(procedure)g(push\(var)g
+(b:stack;)g(v:value\);)g(@<Programmer's)f(Cheer@>)i({...}@})177
+839 y(@B@<Pop)g(the)g(Stack@>)177 888 y(@$@<Hacker's)e(Cheer@>+=@{--)h
+(Tight!)g(Tight!)h(Tight!@+@})177 938 y(@$@<Pop)g(Procedure@>@Z==)o(@{@-)177
+988 y(procedure)f(pop\(var)g(b:stack\);)g(@<Programmer's)f(Cheer@>)i({...}@})
+177 1088 y(@B@<Rough)f(the)h(Stack)g(Up)g(a)h(Bit@>)177 1137
+y(@$@<Hacker's)d(Cheer@>+=@{--)h(\(RNW,)g(04-Jan-1991\).@+@})177
+1187 y(@$@<Rough)g(Procedure@>@Z==@{@)o(-)177 1237 y(procedure)g(rough\(var)g
+(b:stack\);)g(@<Hacker's)g(Cheer@>)g({...}@})177 1337 y(@O@<dummy.txt@>==@)o
+({dumm)o(y@+@})177 1525 y Fr(An)15 b(examination)e(of)h(the)i(prin)o(ted)f
+(do)q(cumen)o(tation)f(rev)o(eals)i(a)f(lot)f(ab)q(out)h(ho)o(w)g(F)m(unnelW)
+m(eb's)f(presen)o(tation)177 1574 y(w)o(orks.)177 1678 y(First,)f(notice)g
+(ho)o(w)g(the)g Fl(@t)g Fr(t)o(yp)q(esetter)i(directiv)o(e)f(at)e(the)i(top)f
+(of)f(the)h(\014le)g(has)g(caused)h(a)f(table)g(of)f(con)o(ten)o(ts)i(to)177
+1728 y(app)q(ear.)24 b(This)15 b(is)h(one)f(of)g(F)m(unnelW)m(eb's)g(t)o(yp)q
+(esetting)i(features)f(and)g(is)f(discussed)j(in)d(a)g(later)h(section.)23
+b(The)177 1777 y(table)14 b(of)f(con)o(ten)o(ts)i(sho)o(ws)f(that)g(the)h
+(sections)g(ha)o(v)o(e)f(b)q(een)h(n)o(um)o(b)q(ered)e(hierarc)o(hically)m(.)
+177 1881 y(No)o(w)18 b(tak)o(e)h(a)f(lo)q(ok)g(at)g(the)h(t)o(yp)q(eset)i
+(macro)c(de\014nitions.)32 b(Most)19 b(imp)q(ortan)o(t)e(are)i(the)g(n)o(um)o
+(b)q(ers)f(in)g(square)177 1931 y(brac)o(k)o(ets)h(that)f(follo)o(w)e(eac)o
+(h)i(macro)f(name.)28 b(As)19 b(w)o(ell)e(as)h(n)o(um)o(b)q(ering)e(the)i
+(headings)g Fm(hier)n(ar)n(chic)n(al)r(ly)p Fr(,)f(F)m(un-)177
+1980 y(nelW)m(eb)e Fm(indep)n(endently)h Fr(n)o(um)o(b)q(ers)f(the)g(macro)f
+(de\014nitions)h Fm(se)n(quential)r(ly)p Fr(.)21 b(The)16 b(\014rst)g(macro)d
+(de\014nition)i(\(for)177 2030 y(\\Programmer's)h(Cheer"\))j(is)e(n)o(um)o(b)
+q(ered)h(1.)30 b(The)19 b(second)g(\(for)e(\\Hac)o(k)o(er's)i(Cheer"\))g(is)f
+(n)o(um)o(b)q(ered)f(2)h(and)177 2080 y(so)f(on.)27 b(Note)17
+b(that)g(it)f(is)h(not)f(macros)g(that)h(are)g(n)o(um)o(b)q(ered,)g(but)g
+(macro)f(de\014nitions.)26 b(The)18 b(distinction)e(is)177
+2130 y(necessary)e(b)q(ecause)g(some)d(macros)g(\(suc)o(h)i(as)f(the)h(\\Hac)
+o(k)o(er's)f(Cheer")h(macro\))e(are)h(additiv)o(e.)17 b(It)12
+b(is)g(imp)q(ortan)o(t)177 2180 y(to)k(realize)g(that)f(there)i(is)f(no)f
+(relationship)g(b)q(et)o(w)o(een)i(the)f(n)o(um)o(b)q(ers)g(of)f(the)h
+(headings)f(and)h(the)g(n)o(um)o(b)q(ers)f(of)177 2229 y(the)g(macro)d
+(de\014nitions.)177 2333 y(No)o(w)h(tak)o(e)g(a)f(lo)q(ok)g(at)h(the)g(notes)
+h(b)q(eneath)f(the)h(b)q(o)q(dy)f(of)f(eac)o(h)h(macro)f(de\014nition.)17
+b(All)12 b(macro)g(de\014nitions)g(are)177 2383 y(follo)o(w)o(ed)i(b)o(y)i(a)
+f(note)h(indicating)e(the)j(de\014nitions)e(in)g(whic)o(h)h(the)g(macro)e(is)
+i(called.)23 b(Additiv)o(e)15 b(macros)g(ha)o(v)o(e)177 2432
+y(an)f(additional)e(list,)h(listing)g(the)h(de\014nitions)g(in)f(whic)o(h)h
+(they)h(are)f(de\014ned.)177 2536 y(Finally)m(,)20 b(tak)o(e)g(a)g(lo)q(ok)f
+(at)i(the)g(macro)e Fm(c)n(al)r(l)h Fr(of)f(\\Programmer's)f(Cheer")j(in)f
+(section)h(3.2)f(of)f(the)i(prin)o(ted)177 2586 y(do)q(cumen)o(tation.)d
+(Macro)d(calls)f(are)g(set)h(in)f(slan)o(ted)h(roman)d(\(so)j(that)f(they)h
+(can)g(b)q(e)f(distinguished)h(from)d(the)177 2635 y Fl(tt)22
+b(font)13 b Fr(co)q(de\))j(and)e(are)h(follo)o(w)o(ed)e(b)o(y)h(the)h(n)o(um)
+o(b)q(er)f(of)g(the)h(de\014ning)g(macro)e(de\014nition.)20
+b(In)14 b(this)h(case,)g(the)177 2685 y(macro)d(w)o(as)h(de\014ned)h(in)e
+(de\014nition)h(1.)k(F)m(urther)d(do)o(wn,)e(the)i(call)e(to)h(the)h(\\Hac)o
+(k)o(er's)f(Cheer")h(macro)d(indicates)177 2735 y(that)h(the)h(macro)e(w)o
+(as)h(de\014ned)h(in)f(de\014nition)f(2.)18 b(In)12 b(fact)g(the)g(macro)f
+(is)h(additiv)o(e)g(and)f(de\014nition)h(2)g(is)g(just)g(the)177
+2785 y(\014rst)g(of)e(man)o(y)f(de\014nitions.)17 b(T)m(o)10
+b(list)h(all)f(de\014nitions)g(in)h(a)f(call)h(to)f(an)h(additiv)o(e)f(macro)
+g(w)o(ould)g(b)q(e)i(unnecessarily)177 2835 y(messy)m(.)1042
+2940 y(36)p eop
+%%Page: 37 38
+37 37 bop 177 42 a Fd(1.7.5)55 b(Literals)17 b(and)j(Emphasis)177
+144 y Fr(When)d(writing)f(ab)q(out)h(program)e(co)q(de,)j(it)f(is)g(often)g
+(desirable)g(to)g(b)q(e)g(able)g(to)g(indicate)f(that)h(a)g(particular)177
+194 y(w)o(ord)11 b(or)g(phrase)h(b)q(e)g(t)o(yp)q(eset)h(in)d(the)i(same)e
+(manner)g(as)h(the)h(co)q(de)g(b)q(eing)f(discussed.)19 b(F)m(or)11
+b(example,)f(one)h(migh)o(t)177 244 y(talk)16 b(ab)q(out)h(the)g(v)n(ariable)
+e Fl(topval)h Fr(or)g(the)i(pro)q(cedure)g Fl(stack)p 1202
+244 14 2 v 15 w(pop)e Fr(and)g(wish)h(for)f(them)g(to)g(b)q(e)i(t)o(yp)q
+(eset)g(as)177 294 y(they)d(are)f(in)f(this)i(sen)o(tence.)20
+b(This,)13 b(of)h(course,)h(is)e(simple)g(to)h(do)f(using)h(T)1355
+302 y(E)1378 294 y(X)g(macros,)f(but)h(use)h(of)e(the)i(\(more)177
+343 y(general\))h(F)m(unnelW)m(eb)f(t)o(yp)q(esetting)h(directiv)o(es)g(to)g
+(do)f(the)h(same)e(w)o(ork)h(has)h(the)g(added)f(b)q(ene\014t)i(of)e(k)o
+(eeping)177 393 y(the)g(do)q(cumen)o(t)e(p)q(ortable)h(to)g(other)g(t)o(yp)q
+(esetters.)177 469 y(F)m(unnelW)m(eb)g(pro)o(vides)h(t)o(w)o(o)f(in-text)g(t)
+o(yp)q(e)h(mo)q(di\014cation)e(constructs:)21 b Fl(@)p Fq(f)p
+Fl(...@)p Fq(g)13 b Fr(and)h Fl(@/...@/)f Fr(where)j Fn(:)7
+b(:)g(:)13 b Fr(is)177 518 y(ra)o(w)i(text.)20 b(The)15 b Fl(@)p
+Fq(f)p Fl(...@)p Fq(g)e Fr(construct)j(sets)g(the)g(enclosed)f(text)g(in)f
+(the)i(same)d(manner)h(as)h(the)g(text)g(of)f(macro)177 568
+y(de\014nitions)c(is)g(set.)18 b(The)11 b Fl(@/...@/)d Fr(construct)k
+(emphasises)e(its)h(enclosed)g(text)g(in)e(some)h(t)o(yp)q(esetter-dep)q
+(ende)q(n)o(t)177 618 y(fashion.)17 b(T)o(ypically)c(the)h(emphasised)g(text)
+g(is)g(set)h(in)e(italics.)177 693 y(Here)i(is)f(an)g(example)e(of)i(ho)o(w)f
+(these)i(constructs)h(migh)o(t)c(b)q(e)j(used:)177 812 y Fl(The)21
+b(following)f(procedure)g(@{put_sloth@})f(writes)i(the)g(@{sloth@})f
+(variable)g(to)177 861 y(the)h(output)g(file.)g(Note:)f(@/The)h(output)g
+(file)g(must)g(be)g(opened)g(for)g(writing)177 911 y(at)h(this)f(point)f(or)i
+(the)f(program)f(will)h(crash!@/)177 1055 y Fd(1.7.6)55 b(Adding)19
+b(a)g(Header)f(P)n(age)177 1157 y Fr(F)m(unnelW)m(eb)h(pro)o(vides)h(a)f(few)
+h(t)o(yp)q(esetter-indep)q(enden)o(t)j(t)o(yp)q(esetting)e(constructs)g(whic)
+o(h)f(are)g(sp)q(eci\014cally)177 1207 y(designed)14 b(for)f(the)g
+(construction)i(of)d(header)i(pages.)k(These)d(constructs)g(are)e(usually)g
+(b)q(est)h(placed)f(at)g(the)h(top)177 1257 y(of)e(y)o(our)f(input)h(\014le,)
+g(but)h(can)f(b)q(e)h(placed)f(an)o(ywhere)h(the)f(do)q(cumen)o(t)g(if)f
+(desired)i(to)f(create)i(header)f(pages)f(righ)o(t)177 1307
+y(through.)24 b(The)16 b(t)o(w)o(o)f(main)f(restrictions)j(on)e(these)i
+(constructs)h(is)e(that)g(the)g Fl(@t)f Fr(m)o(ust)g(start)h(at)g(the)g
+(start)g(of)177 1356 y(a)h(line)f(\(whic)o(h)h(cannot)g(con)o(tain)f(commen)o
+(ts\),)f(and)i(that)g(the)g(constructs)i(cannot)e(app)q(ear)g(inside)g(a)f
+(macro)177 1406 y(de\014nition.)i(Here)d(is)f(what)f(the)i(top)f(of)f(an)h
+(input)f(\014le)h(migh)o(t)e(lo)q(ok)h(lik)o(e:)177 1524 y
+Fl(@t)22 b(vskip)e(40)i(mm)177 1574 y(@t)g(title)e(titlefont)g(centre)h
+("Hairy)f(Wombat")177 1624 y(@t)i(title)e(titlefont)g(centre)h("Simulation")
+177 1674 y(@t)h(vskip)e(10)i(mm)177 1723 y(@t)g(title)e(smalltitlefont)f
+(centre)i("A)g(Program)f(in)i(Six)f(Parts")177 1773 y(@t)h(title)e
+(smalltitlefont)f(centre)i("Simulating)e(the)i(Life)g(of)h(Some)f(Hairy)g
+(Wombats")177 1823 y(@t)h(vskip)e(20)i(mm)177 1873 y(@t)g(title)e(normalfont)
+g(left)h("By)g(Zqitzypbuswapzra)e(Ypongtatoslrtzz")177 1923
+y(@t)j(new_page)177 1973 y(@t)g(table_of_conten)o(ts)177 2022
+y(@t)g(new_page)177 2140 y Fr(The)14 b Fl(@t)e Fr(at)h(the)h(start)g(of)e
+(eac)o(h)i(line)e(indicates)i(that)f(eac)o(h)g(en)o(tire)h(line)f(is)g(a)g(t)
+o(yp)q(esetter)i(directiv)o(e.)j(The)c Fl(vskip)177 2190 y
+Fr(directiv)o(e)i(instructs)h(F)m(unnelW)m(eb)e(to)h(skip)f(some)g(v)o
+(ertical)g(space)i(\(measured)f(in)f(milli)o(m)o(etres\).)22
+b(The)16 b Fl(title)177 2240 y Fr(directiv)o(e)f(instructs)h(F)m(unnelW)m(eb)
+e(to)h(p)q(osition)f(a)g(string)g(of)g(text)i(on)e(a)g(single)g(line)g(of)g
+(its)h(o)o(wn.)20 b(Options)14 b(are)177 2290 y(pro)o(vided)i(for)g(fon)o(t)f
+(and)h(alignmen)o(t.)23 b(The)16 b(\014rst)h(w)o(ord)f(after)g
+Fl(title)f Fr(is)h(the)h(fon)o(t)e(whic)o(h)h(can)h(b)q(e)f(one)h(of)e(\(in)
+177 2340 y(decreasing)j(order)f(of)e(size\))j Fl(titlefont)p
+Fr(,)c Fl(smalltitlefont)p Fr(,)g(and)i Fl(normalfont)p Fr(.)23
+b(The)17 b(second)g(w)o(ord)g(after)177 2389 y Fl(title)d Fr(is)i(the)g
+(desired)g(alignmen)o(t)d(of)i(the)h(text.)23 b(The)16 b(options)f(here)h
+(are)g Fl(left)p Fr(,)f Fl(right)p Fr(,)f(and)h Fl(centre)p
+Fr(.)21 b(The)177 2439 y Fl(new)p 246 2439 V 15 w(page)16 b
+Fr(directiv)o(e)g(instructs)i(F)m(unnelW)m(eb)d(to)h(skip)g(to)g(a)g(new)h
+(page.)25 b(Finally)m(,)14 b(the)j Fl(table)p 1704 2439 V 14
+w(of)p 1762 2439 V 15 w(contents)177 2489 y Fr(directiv)o(e)e(instructs)g(F)m
+(unnelW)m(eb)e(to)h(insert)h(a)e(table)h(of)f(con)o(ten)o(ts)i(at)f(that)g(p)
+q(oin)o(t)f(in)h(the)g(text.)177 2632 y Fd(1.7.7)55 b(Commen)n(ts)177
+2735 y Fr(A)14 b(F)m(unnelW)m(eb)g(commen)o(t)d(commences)i(with)h(the)h
+Fl(@!)j Fr(sequence)e(and)d(con)o(tin)o(ues)i(up)f(to,)f(but)h(not)g
+(including,)177 2785 y(the)h(end)f(of)g(line)g(mark)o(er)f(at)h(the)g(end)h
+(of)e(the)i(line)f(that)g(the)h(commen)o(t)c(sequence)17 b(is)d(on.)k(Commen)
+o(ts)12 b(can)i(b)q(e)177 2835 y(placed)g(on)g(an)o(y)f(line)h(except)h
+Fl(@i)f Fr(include,)f Fl(@p)g Fr(pragma,)f(and)i Fl(@t)f Fr(t)o(yp)q(esetter)
+j(directiv)o(e)f(lines.)1042 2940 y(37)p eop
+%%Page: 38 39
+38 38 bop 177 42 a Fr(The)17 b(text)f(follo)o(wing)e(the)j(F)m(unnelW)m(eb)e
+(commen)o(t)f(sequence)k Fl(@!)25 b Fr(will)15 b(not)h(app)q(ear)g(in)g(the)g
+(pro)q(duct)h(\014les)g(or)177 91 y(the)c(do)q(cumen)o(tation)e(\014le.)17
+b(It)12 b(is)g(only)g(for)f(the)i(ey)o(es)g(of)f(those)h(who)e(b)q(other)i
+(to)f(lo)q(ok)g(at)g(the)g(original)f Fl(.fw)g Fr(input)177
+141 y(\014le.)18 b(T)o(ypically)12 b(F)m(unnelW)m(eb)i(commen)o(ts)e(are)i
+(used)h(to)e(describ)q(e)j(the)e(w)o(a)o(y)g(in)f(whic)o(h)h(particular)f(F)m
+(unnelW)m(eb)177 191 y(constructs)j(are)e(b)q(eing)g(used.)19
+b(Example:)177 304 y Fl(@!)j(This)f(macro)f(is)i(really)e(revolting.)g
+(Please)g(forgive)h(me.)g(I)h(had)f(to)g(do)h(it!)177 354 y(@$@<Revolt)e
+(Me@>==@{@-)177 404 y(@#X@\(@#Y@\(@#Z@,@"@)o(#Z@"@)o(\)=6@,)o(Teapo)o(t@,@")o
+(@#Q@)o(\(45@\))o(@"@,T)o(iger@)o(\)@})177 564 y Fi(1.8)70
+b(A)23 b(Complete)d(Example)177 679 y Fr(T)m(o)c(\014nish)h(o\013)f(the)h(c)o
+(hapter,)h(a)e(complete)g(example)f(of)h(a)h(F)m(unnelW)m(eb)f(input)g
+(\014le)h(is)f(presen)o(ted.)28 b(Although)177 729 y(unrealistically)13
+b(short,)h(it)f(giv)o(es)h(a)g(b)q(etter)h(idea)f(of)f(what)h(a)f(t)o(ypical)
+g(F)m(unnelW)m(eb)h Fl(.fw)f Fr(\014le)h(lo)q(oks)f(lik)o(e.)177
+842 y Fl(@!----------------)o(-----)o(-----)o(-----)o(-----)o(---!)177
+892 y(@!)43 b(Start)21 b(of)g(FunnelWeb)f(Example)h(.fw)g(File)43
+b(!)177 942 y(@!----------------)o(-----)o(-----)o(-----)o(-----)o(---!)177
+1041 y(@t)22 b(vskip)e(40)i(mm)177 1091 y(@t)g(title)e(titlefont)g(centre)h
+("Powers:")177 1141 y(@t)h(title)e(titlefont)g(centre)h("An)g(Example)f(of")
+177 1191 y(@t)i(title)e(titlefont)g(centre)h("A)g(Short")177
+1241 y(@t)h(title)e(titlefont)g(centre)h("FunnelWeb)f(.fw)h(File")177
+1290 y(@t)h(vskip)e(10)i(mm)177 1340 y(@t)g(title)e(smalltitlefont)f(centre)i
+("by)g(Ross)g(Williams")177 1390 y(@t)h(title)e(smalltitlefont)f(centre)i
+("26)g(January)f(1992")177 1440 y(@t)i(vskip)e(20)i(mm)177
+1490 y(@t)g(table_of_conten)o(ts)177 1589 y(@A@<FunnelWeb)d(Example)i
+(Program@>)177 1689 y(This)43 b(program)20 b(writes)43 b(out)21
+b(each)43 b(of)21 b(the)43 b(first)21 b(@{p@})42 b(powers)21
+b(of)43 b(the)21 b(first)43 b(@{n@})177 1739 y(integers.)20
+b(These)43 b(constant)20 b(parameters)g(are)h(located)42 b(here)21
+b(so)g(that)g(they)43 b(are)21 b(easy)g(to)177 1789 y(change.)177
+1888 y(@$@<Constants@>==@)o({@-)177 1938 y(n)h(:)f(constant)f(natural)h(:=)g
+(10;)109 b(--)21 b(How)g(many)g(numbers?)f(\(Ans:)h([1,n]\).)177
+1988 y(p)h(:)f(constant)f(natural)h(:=)43 b(5;)109 b(--)21
+b(How)g(many)g(powers?)42 b(\(Ans:)21 b([1,p]\).@})177 2087
+y(@B)h(Here)f(is)43 b(the)21 b(outline)f(of)i(the)43 b(program.)20
+b(This)h(FunnelWeb)f(file)42 b(generates)20 b(a)i(single)177
+2137 y(Ada)f(output)g(file)43 b(called)20 b(@{Power.ada@}.)f(The)i(main)g
+(program)g(consists)42 b(of)21 b(a)g(loop)g(that)177 2187 y(iterates)f(once)h
+(for)g(each)g(number)g(to)g(be)h(written)e(out.)177 2287 y
+(@O@<Power.ada@>==@)o({@-)177 2337 y(@<Pull)h(in)g(packages@>)177
+2436 y(procedure)f(example)g(is)243 2486 y(@<Constants@>)177
+2536 y(begin)h(--)g(example)243 2586 y(for)g(i)g(in)h(1..n)f(loop)308
+2635 y(@<Write)f(out)h(the)h(first)e(p)i(powers)f(of)g(i)g(on)h(a)f(single)g
+(line@>)243 2685 y(end)g(loop;)177 2735 y(end)g(example;)177
+2785 y(@})1042 2940 y Fr(38)p eop
+%%Page: 39 40
+39 39 bop 177 42 a Fl(@B)22 b(In)f(this)g(section,)42 b(we)21
+b(pull)g(in)h(the)f(packages)f(that)h(this)g(program)42 b(needs)21
+b(to)g(run.)g(In)177 91 y(fact,)g(all)g(we)g(need)g(is)h(the)f(IO)g(package)g
+(so)g(that)g(we)g(can)h(write)e(out)i(the)f(results.)f(To)h(use)177
+141 y(the)g(IO)h(package,)e(we)h(first)g(of)g(all)h(need)42
+b(to)22 b(haul)f(it)g(in)g(\(@{with)g(text_io@}\))e(and)j(then)177
+191 y(we)g(need)f(to)g(make)g(all)g(its)g(identifiers)f(visible)g(at)h(the)h
+(top)f(level)g(\(@{use)f(text_io@}\).)177 291 y(@$@<Pull)g(in)i
+(packages@>==@{wi)o(th)d(text_io;)h(use)h(text_io;@})177 390
+y(@B)h(Here)f(is)43 b(the)21 b(bit)g(that)g(writes)g(out)43
+b(the)21 b(first)f(@{p@})h(powers)g(of)43 b(@{i@}.)20 b(The)i(power)177
+440 y(values)43 b(are)f(calculated)g(incrementally)f(in)i(@{ip@})f(to)i
+(avoid)e(the)h(use)g(of)g(the)177 490 y(exponentiation)19 b(operator.)177
+589 y(@$@<Write)h(out)h(the)g(first)g(p)h(powers)e(of)i(i)f(on)h(a)f(single)g
+(line@>==@{@-)177 639 y(declare)243 689 y(ip)g(:)h(natural)e(:=)h(1;)177
+739 y(begin)243 789 y(for)g(power)f(in)i(1..p)f(loop)308 839
+y(ip:=ip*i;)308 888 y(put\(natural'image)o(\(ip\))d(&)k(")g("\);)243
+938 y(end)f(loop;)243 988 y(new_line;)177 1038 y(end;@})177
+1137 y(@!----------------)o(-----)o(-----)o(-----)o(-----)o(---!)177
+1187 y(@!)65 b(End)21 b(of)h(FunnelWeb)e(Example)g(.fw)h(File)65
+b(!)177 1237 y(@!----------------)o(-----)o(-----)o(-----)o(-----)o(---!)177
+1399 y Fi(1.9)70 b(Summary)177 1515 y Fr(This)17 b(c)o(hapter)h(has)f(pro)o
+(vided)g(an)g(in)o(tro)q(duction)g(to)g(F)m(unnelW)m(eb)f(and)h(a)g(tutorial)
+f(that)i(co)o(v)o(ers)f(most)f(of)h(its)177 1565 y(features.)h(F)m(unnelW)m
+(eb's)11 b(functionalit)o(y)f(can)h(b)q(e)h(split)f(in)o(to)g(t)o(w)o(o)g
+(parts:)17 b(a)11 b(macro)f(prepro)q(cessor,)k(and)d(supp)q(ort)177
+1615 y(for)h(t)o(yp)q(esetting.)18 b(The)13 b(reader)g(should)f(b)q(e)g(a)o
+(w)o(are)g(that)g(the)h(examples)e(in)g(this)h(c)o(hapter,)h(constructed)h
+(as)e(they)177 1664 y(w)o(ere)h(to)e(demonstrate)g(particular)g(features)i
+(of)e(F)m(unnelW)m(eb,)g(do)g(not)g(presen)o(t)i(a)e(realistic)h(picture)g
+(of)f(the)h(b)q(est)177 1714 y(use)j(of)f(the)h(to)q(ol.)k(Only)14
+b(the)h(\014nal)f(example)f(of)h(this)h(c)o(hapter)g(comes)f(close.)20
+b(The)15 b(reader)h(should)e(study)h(this)177 1764 y(last)g(example)f
+(carefully)h(and)g(then)h(write)f(some)f(real)h(programs)f(using)h(F)m
+(unnelW)m(eb)g(b)q(efore)h(pro)q(ceeding)g(to)177 1814 y(Chapter)c(2)f(whic)o
+(h)g(pro)o(vides)g(more)f(adv)n(anced)h(information.)k(A)o(t)c(this)g(stage)h
+(it)e(do)q(es)i(not)f(particularly)f(matter)177 1864 y(exactly)i(ho)o(w)e(y)o
+(ou)h(use)h(F)m(unnelw)o(eb,)g(as)f(ev)o(ery)o(one)h(dev)o(elops)g(their)f(o)
+o(wn)g(st)o(yle)h(an)o(yw)o(a)o(y)m(.)j(The)d(imp)q(ortan)o(t)d(thing)177
+1914 y(is)14 b(to)g(try)g(it.)1042 2940 y(39)p eop
+%%Page: 40 41
+40 40 bop 1042 2940 a Fr(40)p eop
+%%Page: 41 42
+41 41 bop 177 373 a Fj(Chapter)34 b(2)177 602 y Fp(F)-10 b(unnelW)g(eb)41
+b(Hin)m(ts)177 838 y Fr(Whereas)12 b(Chapter)f(1)g(pro)o(vides)g(an)f(in)o
+(tro)q(duction)h(to)g(F)m(unnelW)m(eb)f(and)g(Chapter)i(3)e(a)h
+(de\014nition,)f Fm(this)h Fr(c)o(hapter)177 888 y(con)o(tains)i(hin)o(ts)g
+(ab)q(out)f(ho)o(w)g(F)m(unnelW)m(eb)h(can)g(b)q(e)g(used.)19
+b(This)12 b(c)o(hapter)i(probably)e(should)g(not)h(b)q(e)g(read)h(un)o(til)
+177 938 y(the)j(reader)g(has)f(already)g(commenced)f(using)h(F)m(unnelW)m
+(eb,)g(or)g(at)f(the)i(v)o(ery)g(least,)f(tried)g(out)g(some)g(of)f(the)177
+987 y(examples)f(in)h(Chapter)h(1.)21 b(Those)15 b(who)g(\014nd)g(themselv)o
+(es)h(using)e(F)m(unnelW)m(eb)h(frequen)o(tly)g(should)g(read)h(this)177
+1037 y(c)o(hapter)f(at)f(some)f(stage)h(so)g(as)g(to)g(ensure)h(that)f(they)h
+(are)f(getting)g(the)g(most)f(out)h(of)f(it.)177 1108 y(Most)19
+b(of)f(the)h(examples)f(in)g(this)h(c)o(hapter)h(ha)o(v)o(e)e(b)q(een)i
+(placed)f(in)f(the)h(F)m(unnelW)m(eb)g(regression)h(test)f(suite)177
+1157 y(whic)o(h)14 b(should)g(b)q(e)g(a)o(v)n(ailable)e(in)h(a)h(directory)g
+(called)g Fl(/fwdir/tests/)p Fr(.)h(The)f(\014les)h(to)e(examine)g(are)h
+Fl(hi01.fw)177 1207 y Fr(through)g Fl(hi10.fw)p Fr(.)177 1363
+y Fi(2.1)70 b(Macro)24 b(Names)177 1475 y Fr(When)17 b(using)f(F)m(unnelW)m
+(eb,)g(the)h(c)o(hoice)g(of)f(macro)f(names)h(can)g(b)q(e)h(as)g(imp)q(ortan)
+o(t)e(to)h(the)h(readabilit)o(y)e(of)h(a)177 1525 y(program)d(as)h(the)h(c)o
+(hoice)g(of)f(program)f(iden)o(ti\014ers,)h(and)g(it)g(is)h(imp)q(ortan)o(t)d
+(that)j(the)g(user)g(kno)o(w)f(the)h(range)f(of)177 1574 y(options)g(a)o(v)n
+(ailable.)295 1645 y Fo(Names)i(are)f(case)h(sensitiv)o(e)d(and)i(exact)g
+(matc)o(hing:)i Fr(Macro)c(names)g(are)h(case)h(sensitiv)o(e)295
+1695 y(and)e(are)f(matc)o(hed)g(exactly)m(.)17 b(The)c(strings)g(used)g(as)g
+(a)f(macro)f(name)g(at)h(the)h(p)q(oin)o(t)f(of)g(de\014nition)295
+1744 y(and)i(call)f(m)o(ust)g(b)q(e)h Fm(identic)n(al)g Fr(for)g(the)g
+(connection)h(to)e(b)q(e)i(made.)295 1815 y Fo(Names)e(can)f(con)o(tain)f(an)
+o(y)h(prin)o(tabl)o(e)e(c)o(haracter:)16 b Fr(F)m(unnelW)m(eb)10
+b(is)h(less)h(restrictiv)o(e)g(ab)q(out)295 1865 y(its)19 b(macro)d(names)i
+(than)g(most)f(programming)e(languages)i(are)i(ab)q(out)f(their)h(iden)o
+(ti\014ers.)32 b(A)295 1914 y(F)m(unnelW)m(eb)15 b(macro)e(name)h(can)h(con)o
+(tain)g(an)o(y)f(sequence)j(of)e(prin)o(table)f(c)o(haracters,)j(including)
+295 1964 y(blanks)12 b(and)f(punctuation.)18 b(Names)11 b(can)h(start)g(and)g
+(end)g(with)f(an)o(y)h(c)o(haracter.)18 b(Names)11 b(cannot)295
+2014 y(cross)k(line)f(b)q(oundaries.)k(The)d(follo)o(wing)c(are)j(all)f
+(legal)g(macro)f(names:)352 2115 y Fl(@<This)20 b(macro)h(expands)f(to)i
+(some)f(really)f(bad)h(code@>)352 2165 y(@<@>)352 2215 y(@<453)f(#$)i(\045&#)
+f(--===~~1">>>@>)352 2265 y(@<<@>)352 2314 y(@<<>@>)352 2364
+y(@<a)g(b)g(c)h(d)f(e)h(f)g(g@>)352 2414 y(@<)152 b(!)108 b(@>)352
+2464 y(@<??)20 b(...@>)352 2514 y(@<"Who's)g(been)h(hacking)f(MY)h(program")f
+(said)h(Father)g(Bear.@>)352 2564 y(@<Update)f(the)h(maximum)f(and)h(return)g
+(for)g(more)g(data@>)295 2665 y Fo(Names)16 b(m)o(ust)d(b)q(e)i(no)g(more)f
+(than)g(a)i(maxim)o(um)d(limit)g(in)h(length:)i Fr(Names)c(can)i(b)q(e)g(no)
+295 2714 y(longer)e(than)h(a)f(prede\014ned)i(maxim)o(um)8
+b(length.)17 b(Curren)o(tly)c(this)f(length)h(cannot)f(b)q(e)i(mo)q
+(di\014ed.)177 2785 y(T)o(ypically)m(,)8 b(macro)h(names)g(will)f(consist)j
+(of)e(a)h(short)g(English)g(phrase)g(or)g(sen)o(tence)i(that)e(describ)q(es)i
+(the)f(con)o(ten)o(ts)177 2835 y(of)i(the)i(macro.)1042 2940
+y(41)p eop
+%%Page: 42 43
+42 42 bop 177 42 a Fi(2.2)70 b(Quic)n(k)22 b(Names)177 157
+y Fr(Sometimes)14 b(a)i(particular)g(macro)g(m)o(ust)f(b)q(e)i(used)g
+(extremely)f(often.)25 b(When)17 b(this)f(happ)q(ens)h(it)f(is)g(desirable)
+177 207 y(to)e(mak)o(e)f(the)i(macro's)e(name)g(as)h(short)h(as)f(p)q
+(ossible.)20 b(The)15 b(shortest)g(ordinary)f(F)m(unnelW)m(eb)g(macro)f(name)
+g(is)177 257 y(the)h(empt)o(y)f(name)g(\\)p Fl(@<@>)p Fr(",)f(whic)o(h)h(is)h
+(four)f(c)o(haracters)j(long.)h(Single-c)o(haracter)d(names)f(are)h(\014v)o
+(e)g(c)o(haracters)177 307 y(long.)177 381 y(T)m(o)h(cater)i(for)e(the)h
+(cases)h(where)g(really)e(short)h(names)f(are)h(needed,)h(F)m(unnelW)m(eb)e
+(pro)o(vides)h(a)f Fo(quic)o(k)i(name)177 431 y Fr(syn)o(tax)c(that)h(allo)o
+(ws)e(one-c)o(haracter)i(macro)e(names)h(to)g(b)q(e)h(sp)q(eci\014ed)g(in)f
+(t)o(w)o(o)g(less)h(c)o(haracters.)19 b(Quic)o(k)14 b(names)177
+481 y(tak)o(e)20 b(the)h(form)d(of)i(the)h(sp)q(ecial)f(c)o(haracter,)i
+(follo)o(w)o(ed)d(b)o(y)h(a)g(hash)g(\()p Fl(#)p Fr(\))g(follo)o(w)o(ed)e(b)o
+(y)i(a)g(single)g(c)o(haracter.)177 531 y(Examples:)177 647
+y Fl(@#A)109 b(@#|)f(@#&)g(@#m)177 763 y Fr(This)17 b(form)d(of)i(macro)f
+(name)h(has)g(the)h(same)f(syn)o(tactic)h(functionalit)o(y)e(as)i(an)f
+(ordinary)g(name)f(and)h(can)h(b)q(e)177 813 y(substituted)g(wherev)o(er)g
+(an)f(ordinary)f(name)g(can)g(b)q(e.)24 b(In)16 b(fact)g(quic)o(k)f(names)g
+(liv)o(e)g(in)g(the)h(same)f(namespace)177 863 y(as)g(ordinary)g(macro)e
+(names.)21 b(F)m(or)15 b(example)e(the)j(quic)o(kname)d Fl(@#A)i
+Fr(is)f(the)i Fm(same)g(name)g Fr(\(refers)g(to)f(the)h(same)177
+913 y(macro\))d(as)h(the)g(ordinary)g(name)f Fl(@<A@>)p Fr(.)177
+988 y(Because)g(quic)o(k)d(names)g(lo)q(ok)g(syn)o(tactically)g(\\op)q(en")h
+(\(i.e.)f(they)h(do)g(not)f(ha)o(v)o(e)h(a)g(closing)p Fl(@>)e
+Fr(as)i(ordinary)g(names)177 1037 y(do\),)i(it)h(is)g(b)q(est)h(to)f(a)o(v)o
+(oid)e(them)h(except)i(where)g(a)f(macro)f(m)o(ust)g(b)q(e)h(called)g(v)o
+(ery)g(often.)177 1200 y Fi(2.3)70 b(F)-6 b(unnelW)g(eb)22
+b(the)h(Martinet)177 1315 y Fr(There)13 b(are)g(man)o(y)d(w)o(a)o(ys)i(in)g
+(whic)o(h)g(a)g(macro)f(prepro)q(cessor)j(can)f(cause)g(unexp)q(ected)h
+(di\016culties.)j(F)m(unnelW)m(eb)177 1365 y(seeks)g(to)d(a)o(v)o(oid)g(man)o
+(y)f(of)h(these)j(problems)d(b)o(y)g(p)q(erforming)g(a)g(n)o(um)o(b)q(er)g
+(of)h(c)o(hec)o(ks.)22 b(This)15 b(section)h(describ)q(es)177
+1415 y(some)d(of)g(the)i(c)o(hec)o(ks)g(that)f(F)m(unnelW)m(eb)f(p)q
+(erforms.)295 1490 y Fo(T)l(railing)h(blanks)h(in)g(the)h(input)e(\014le:)k
+Fr(T)m(railing)12 b(blanks)i(are)h(usually)f(not)g(dangerous,)g(but)295
+1540 y(F)m(unnelW)m(eb)19 b(disallo)o(ws)e(them)i(an)o(yw)o(a)o(y)m(.)31
+b(All)18 b(trailing)g(blanks)g(in)h(the)g Fm(input)h Fr(\()p
+Fl(.fw)e Fr(\014le\))h(are)295 1589 y(\015agged)d(as)h(errors)g(b)o(y)f(F)m
+(unnelW)m(eb.)25 b(F)m(unnelW)m(eb)15 b(do)q(es)i(not)f(\015ag)g(trailing)f
+(blanks)h(in)g(an)o(y)f(of)295 1639 y(its)f(output)g(\014les.)295
+1714 y Fo(Input)19 b(line)f(length:)24 b Fr(F)m(unnelW)m(eb)17
+b(has)g(a)h(maxim)n(um)13 b(input)18 b(line)f(length.)29 b(If)17
+b(F)m(unnelW)m(eb)295 1764 y(reads)h(an)e(input)h(line)f(longer)g(than)h
+(this)f(length,)h(it)f(\015ags)h(the)g(line)f(with)g(an)h(error)g(message.)
+295 1813 y(The)e(maxim)n(um)9 b(length)14 b(can)g(b)q(e)h(c)o(hanged)f(using)
+g(a)f(pragma)f(\(see)k(Chapter)e(3\).)295 1888 y Fo(Pro)q(duct)k(\014le)h
+(line)f(length:)23 b Fr(F)m(unnelW)m(eb)16 b(w)o(atc)o(hes)i(the)g(length)g
+(of)e(output)i(lines)f(and)g(all)295 1938 y(output)h(lines)f(longer)g(than)h
+(the)g(limit)c(are)k(\015agged)f(with)g(error)h(messages.)29
+b(The)18 b(maxim)n(um)295 1988 y(length)h(can)g(b)q(e)g(c)o(hanged)h(using)e
+(a)h(pragma)d(\(see)21 b(Chapter)e(3\).)33 b(That)18 b(F)m(unnelW)m(eb)g(p)q
+(olices)295 2038 y(output)c(lines)f(is)h(v)o(ery)f(imp)q(ortan)o(t.)j(Some)d
+(programs)f(can)i(b)q(eha)o(v)o(e)f(v)o(ery)h(strangely)g(if)e(they)i(get)295
+2087 y(an)i(input)g(line)g(that)g(is)h(to)q(o)f(long)f(\(e.g.)h(F)m(ortran)g
+(compilers)f(can)h(simply)f(ignore)h(text)g(past)h(a)295 2137
+y(certain)e(column!\))i(and)d(once)h(F)m(unnelW)m(eb)e(starts)i(expanding)f
+(macros)f(using)h(inden)o(tation,)f(it)295 2187 y(is)h(sometimes)e(not)i(ob)o
+(vious)f(ho)o(w)h(wide)f(the)i(pro)q(duct)g(\014le)f(will)e(b)q(e.)295
+2262 y Fo(Con)o(trol)j(c)o(haracters:)20 b Fr(The)c(presence)h(of)e(con)o
+(trol)g(c)o(haracters)i(in)d(a)h(text)h(\014le)f(can)g(result)h(in)295
+2312 y(some)11 b(confusing)g(b)q(eha)o(viour)h(do)o(wnstream)f(when)h(the)g
+(\014le)g(is)f(presen)o(ted)j(to)d(v)n(arious)g(programs.)295
+2361 y(Unfortunately)m(,)i(some)f(text)i(editors)g(allo)o(w)e(con)o(trol)h(c)
+o(haracters)i(to)f(b)q(e)g(inserted)g(in)o(to)f(the)h(text)295
+2411 y(rather)i(to)q(o)g(easily)m(,)e(and)h(it)g(is)g(all)f(to)q(o)h(easy)h
+(to)f(b)q(e)h(tripp)q(ed)g(up.)23 b(F)m(unnelW)m(eb)15 b(prev)o(en)o(ts)h
+(these)295 2461 y(problems)e(b)o(y)g(\015agging)f(with)i(diagnostics)f(all)f
+(non-end-of-line)h(con)o(trol)g(c)o(haracters)j(detected)295
+2511 y(in)f(the)h(input)f(\()p Fl(.fw)p Fr(\))g(\014le)h(\(ev)o(en)g(T)m
+(ABs\).)26 b(The)17 b(result)g(is)f(that)h(the)g(user)g(is)g(guaran)o(teed)g
+(that)295 2561 y(pro)q(duct)e(\014les)f(generated)h(from)d(F)m(unnelW)m(eb)h
+(con)o(tain)h(no)f(unin)o(ten)o(tional)g(con)o(trol)g(c)o(haracters.)295
+2610 y(This)g(said,)g(F)m(unnelW)m(eb)f(do)q(es)i(allo)o(w)d(the)j(insertion)
+f(of)g(con)o(trol)f(c)o(haracters)j(in)e(the)g(output)h(\014le)295
+2660 y(b)o(y)g(explicitly)f(sp)q(ecifying)h(them)f(in)g(the)i(text)f(using)g
+(a)f Fl(@^)h Fr(con)o(trol)f(sequence.)295 2735 y Fo(Num)o(b)q(er)j(of)g(in)o
+(v)o(o)q(cations:)h Fr(F)m(unnelW)m(eb)d(c)o(hec)o(ks)i(the)f(n)o(um)o(b)q
+(er)f(of)g(times)f(that)i(eac)o(h)g(macro)295 2785 y(is)j(called)f(and)g
+(issues)i(an)e(error)i(if)d(the)j(total)d(is)i(not)f(one.)29
+b(The)18 b Fl(@Z)g Fr(\(for)f(zero\))h(and)g Fl(@M)f Fr(\(for)295
+2835 y(man)o(y\))12 b(macro)h(attributes)i(can)f(b)q(e)g(used)h(to)f(b)o
+(ypass)g(these)h(c)o(hec)o(ks.)1042 2940 y(42)p eop
+%%Page: 43 44
+43 43 bop 295 42 a Fo(Recursion:)28 b Fr(Because)21 b(F)m(unnelW)m(eb)e(do)q
+(es)h(not)g(pro)o(vide)f(an)o(y)g(conditional)f(constructs,)23
+b(all)295 91 y(recursiv)o(ely)17 b(de\014ned)g(macros)e(m)o(ust,)g(b)o(y)g
+(de\014nition,)h(expand)g(in\014nitely)m(,)1483 76 y Fg(1)1516
+91 y Fr(and)g(are)g(therefore)295 141 y(unacceptable.)37 b(F)m(unnelW)m(eb)20
+b(p)q(erforms)f Fm(static)h Fr(c)o(hec)o(ks)h(to)f(detect)h(recursion,)h
+(detecting)f(it)295 191 y(b)q(efore)13 b(macro)d(expansion)i(commences.)k
+(The)d(user)f(need)h(not)f(fear)g(that)g(F)m(unnelW)m(eb)f(will)f(lo)q(c)o(k)
+295 241 y(up)k(or)g(sp)q(ew)h(forth)f(if)f(a)g(recursiv)o(e)j(macro)c(is)i
+(acciden)o(tally)f(sp)q(eci\014ed.)177 399 y Fi(2.4)70 b(Fiddling)21
+b(With)h(End)i(of)f(Lines)177 512 y Fr(One)13 b(of)f(the)h(\014ddly)f(asp)q
+(ects)j(of)c(programming)e(with)j(F)m(unnelW)m(eb)g(is)h(coping)f(with)g(end)
+h(of)f(lines.)17 b(If)12 b(y)o(ou)g(w)o(an)o(t)177 562 y(y)o(our)17
+b(pro)q(duct)h(\014le)e(to)h(b)q(e)h(w)o(ell)e(inden)o(ted)h(without)g(m)o
+(ultiple)d(blank)i(lines)h(or)g(co)q(de)g(run-ons,)h(y)o(ou)e(ha)o(v)o(e)h
+(to)177 612 y(sp)q(end)e(a)f(little)f(time)f(w)o(orking)h(out)h(ho)o(w)g(the)
+g(end)h(of)e(line)g(mark)o(ers)h(get)g(mo)o(v)o(ed)e(around.)177
+684 y(The)k(rule)g(to)f(remem)o(b)q(er)g(is)g(that,)g(disregarding)h(the)g
+(e\013ects)h(of)e(sp)q(ecial)h(sequences)i(within)c(a)h(macro)g(b)q(o)q(dy)m
+(,)177 733 y Fm(the)i(b)n(o)n(dy)g(of)g(a)g(macr)n(o)f(c)n(onsists)h(of)g
+(exactly)g(the)f(text)h(b)n(etwe)n(en)g(the)f(op)n(ening)i
+Fl(@)p Fq(f)e Fm(and)i(the)f(closing)f Fl(@)p Fq(g)p Fr(.)24
+b(This)177 783 y(text)15 b(includes)f(end)g(of)g(line)f(mark)o(ers.)177
+855 y(If)h(for)f(example)g(y)o(ou)g(call)g(a)h(macro)f(in)g(a)h(sequence)i
+(of)d(co)q(de)p Fn(:)7 b(:)g(:)177 961 y Fl(while)21 b(the_walrus_is_sle)o
+(epy)e(do)243 1011 y(begin)243 1061 y(writeln\('zzzzzz)o(z'\);)243
+1111 y(@<Wake)h(up)h(the)h(walrus@>)243 1161 y(writeln\('Umphar)o(umpha)o
+(...'\))o(;)243 1211 y(end;)177 1317 y Fr(where)15 b Fl(<wake)21
+b(up)g(the)h(walrus>)12 b Fr(is)i(de\014ned)h(as)f(follo)o(ws)177
+1423 y Fl(@$@<Wake)20 b(up)i(the)f(walrus@>==@{)177 1473 y
+(wake_up_the_walrus)o(\(the_)o(walru)o(s\);)177 1523 y(@})177
+1629 y Fr(then)15 b(when)f Fl(<Wake)21 b(up)g(the)g(walrus>)13
+b Fr(is)h(expanded)g(y)o(ou)g(will)e(get)177 1736 y Fl(while)21
+b(the_walrus_is_sle)o(epy)e(do)243 1786 y(begin)243 1835 y(writeln\("zzzzzz)o
+(z"\);)243 1935 y(wake_up_the_wal)o(rus\(t)o(he_wa)o(lrus\))o(;)243
+2035 y(writeln\("Umphar)o(umpha)o(..."\))o(;)243 2085 y(end;)177
+2191 y Fr(The)13 b(blank)f(lines)h(w)o(ere)g(in)o(tro)q(duced)h(b)o(y)e(the)i
+(end)f(on)f(line)h(mark)o(ers)f(included)h(in)f(the)h(de\014nition)f(of)g
+Fl(<Wake)21 b(up)177 2241 y(the)g(walrus>)p Fr(.)e(A)c(go)q(o)q(d)f(solution)
+f(to)i(this)g(problem)e(is)h(to)h(suppress)h(the)f(end)g(of)f(line)h(mark)o
+(ers)e(b)o(y)i(de\014ning)177 2291 y(the)g(macro)d(as)i(follo)o(ws)177
+2397 y Fl(@$@<Wake)20 b(up)i(the)f(walrus@>==@{@-)177 2447
+y(wake_up_the_walrus)o(\(the_)o(walru)o(s\);@})177 2553 y Fr(This)14
+b(is)g(the)g(usual)g(form)e(of)h(macro)g(de\014nitions)h(in)f(F)m(unnelW)m
+(eb)h(\014les.)177 2625 y(In)g(additiv)o(e)f(macros,)g(this)h(format)e(do)q
+(es)j(not)f(w)o(ork)f(prop)q(erly)i(b)q(ecause)g(the)g(end)g(of)e(line)g
+(that)h(is)g(suppressed)177 2675 y(b)o(y)f(the)h(trailing)d
+Fl(@)p Fq(g)i Fr(do)q(es)h(not)f(get)g(replaced)i(b)o(y)d(the)i(end)g(of)e
+(line)h(at)g(the)h(end)f(of)g(the)h(macro)e(in)o(v)o(o)q(cation.)k(F)m(or)177
+2725 y(example)d(the)h(de\014nition)p 177 2757 709 2 v 223
+2783 a Ff(1)241 2795 y Fh(A)f(sp)q(ecial)f(case)g(exists)g(where)h(there)e
+(is)i(recursion)e(but)h(no)h(con)o(ten)o(t.)18 b(In)12 b(this)h(case,)f(the)h
+(expansion)d(is)j(\014nite)f(\(the)g(empt)o(y)177 2835 y(string\))e(ev)o(en)g
+(though)g(the)h(op)q(eration)e(of)i(expanding)d(is)k(in\014nite.)h(F)m
+(unnelW)m(eb)d(do)q(es)g(not)h(treat)f(this)h(case)g(sp)q(ecially)m(.)1042
+2940 y Fr(43)p eop
+%%Page: 44 45
+44 44 bop 177 42 a Fl(@$@<Wake)20 b(up)i(the)f(walrus@>+=@{@-)177
+91 y(wake_up_the_walrus)o(_once)o(\(the_)o(walru)o(s\);@})177
+205 y Fr(later)14 b(follo)o(w)o(ed)e(b)o(y)177 318 y Fl(@$@<Wake)20
+b(up)i(the)f(walrus@>+=@{@-)177 368 y(wake_up_the_walrus)o(_agai)o(n\(the)o
+(_walr)o(us\);@)o(})177 482 y Fr(is)14 b(equiv)n(alen)o(t)f(to)h(the)g
+(single)g(de\014nition)177 595 y Fl(@$@<Wake)20 b(up)i(the)f(walrus@>==@{@-)
+177 645 y(wake_up_the_walrus)o(_once)o(\(the_)o(walru)o(s\);wa)o(ke_u)o
+(p_the)o(_walr)o(us_ag)o(ain\(t)o(he_wa)o(lrus)o(\);@})177
+759 y Fr(Putting)14 b(the)h(trailing)e Fl(@)p Fq(g)h Fr(on)g(a)g(new)h(line)f
+(at)g(the)h(end)g(of)f(the)g(macro)g(\(except)h(for)f(the)h(last)g
+(de\014nition)e(part\))177 809 y(solv)o(es)h(the)h(problem.)177
+922 y Fl(@$@<Wake)20 b(up)i(the)f(walrus@>+=@{@-)177 972 y
+(wake_up_the_walrus)o(_once)o(\(the_)o(walru)o(s\);)177 1022
+y(@})177 1135 y Fr(later)14 b(follo)o(w)o(ed)e(b)o(y)177 1249
+y Fl(@$@<Wake)20 b(up)i(the)f(walrus@>+=@{@-)177 1299 y(wake_up_the_walrus)o
+(_agai)o(n\(the)o(_walr)o(us\);@)o(})177 1412 y Fr(is)14 b(equiv)n(alen)o(t)f
+(to)h(the)g(single)g(de\014nition)177 1526 y Fl(@$@<Wake)20
+b(up)i(the)f(walrus@>==@{@-)177 1576 y(wake_up_the_walrus)o(_once)o(\(the_)o
+(walru)o(s\);)177 1625 y(wake_up_the_walrus)o(_agai)o(n\(the)o(_walr)o
+(us\);@)o(})177 1739 y Fr(Managing)12 b(end)i(of)f(line)g(mark)o(ers)g(is)g
+(tric)o(ky)m(,)g(but)h(once)g(y)o(ou)f(establish)g(a)h(con)o(v)o(en)o(tion)f
+(for)g(coping)g(with)g(them,)177 1789 y(the)i(problem)d(disapp)q(ears)j(in)o
+(to)e(the)i(bac)o(kground.)177 1950 y Fi(2.5)70 b(F)-6 b(udging)24
+b(Conditionals)177 2065 y Fr(As)13 b(a)g(macro)e(prepro)q(cessor,)k(the)e
+(facilit)o(y)e(that)i(F)m(unnelW)m(eb)f(most)g(ob)o(viously)f(lac)o(ks)h(is)h
+(a)f(conditional)f(facilit)o(y)177 2115 y(\(suc)o(h)19 b(as)e(C's)h
+Fl(#ifdef)p Fr(\).)28 b(It)18 b(migh)o(t,)e(therefore,)k(come)c(as)i(a)f
+(surprise)i(to)f(kno)o(w)f(that)h(the)g(\014rst)h(v)o(ersion)e(of)177
+2164 y(F)m(unnelW)m(eb)g(actually)g(had)g(a)g(built)g(in)g(conditional)g
+(facilit)o(y)m(.)26 b(The)18 b(facilit)o(y)e(allo)o(w)o(ed)h(the)h
+(programmer)d(to)177 2214 y(sp)q(ecify)f(a)e(construct)i(that)f(w)o(ould)f
+(select)i(from)d(one)i(of)g(a)f(n)o(um)o(b)q(er)g(of)g(macro)g(expressions)i
+(dep)q(ending)g(on)e(the)177 2264 y(v)n(alue)h(of)h(a)f(con)o(trolling)g
+(macro)f(expression.)177 2338 y(In)i(three)h(y)o(ears)g(the)f(construct)i(w)o
+(as)e(nev)o(er)g(used.)177 2412 y(The)f(reason)g(w)o(as)f(that)h(conditional)
+e(constructs)j(could)e(b)q(e)i(fudged)e(nearly)g(as)h(easily)f(as)g(they)h
+(could)f(b)q(e)h(used.)177 2462 y(Because)j(of)e(this,)f(the)i(in)o(built)e
+(conditional)f(feature)j(w)o(as)f(remo)o(v)o(ed)f(in)h(the)h(curren)o(t)g(v)o
+(ersion)f(of)g(F)m(unnelW)m(eb.)177 2512 y(Not)e(only)e(did)h(this)h
+(simplify)c(the)k(program,)e(but)h(is)h(also)e(allo)o(w)o(ed)h(recursiv)o(e)h
+(macros)f(to)g(b)q(e)h(detected)i(through)177 2561 y(static)g(analysis)g
+(rather)g(than)g(during)g(macro)e(expansion.)177 2635 y(There)18
+b(are)g(t)o(w)o(o)e(basic)h(w)o(a)o(ys)g(to)g(fudge)g(a)f(conditional.)26
+b(First,)18 b(the)f(commen)o(t)e(facilit)o(y)h(of)g(the)h(target)h(pro-)177
+2685 y(gramming)11 b(language)i(ma)o(y)f(b)q(e)j(emplo)o(y)o(ed.)i(F)m(or)c
+(example,)g(in)g(Ada,)h(commen)o(ts)e(commence)h(with)h(\\)p
+Fl(--)p Fr(")f(and)177 2735 y(terminate)g(at)h(the)h(end)f(of)g(the)g(line.)k
+(Using)c(this)g(fact,)g(it)f(is)h(easy)h(to)e(construct)j(macros)d(that)h
+(can)g(b)q(e)h(called)177 2785 y(at)d(the)g(start)h(of)e(eac)o(h)h(target)g
+(line)g(and)f(whic)o(h)h(turn)g(on)g(and)f(o\013)h(the)g(lines)g(so)g(mark)o
+(ed)e(b)o(y)i(de\014ning)g(the)g(macro)177 2835 y(to)i(b)q(e)g(the)h(empt)o
+(y)e(string)h(\(ON\))g(or)g(the)h(commen)o(t)c(sym)o(b)q(ol)h(\()p
+Fl(--)p Fr(\))i(\(OFF\).)g(F)m(or)g(example:)1042 2940 y(44)p
+eop
+%%Page: 45 46
+45 45 bop 177 42 a Fl(@A@<Debug)20 b(Macro@>)177 141 y(The)h(following)f
+(macro)h(determines)f(whether)g(debug)h(code)g(will)g(be)g(included)f(in)i
+(the)177 191 y(program.)e(All)h(lines)g(of)h(debug)e(code)h(commence)f(with)h
+(a)h(call)f(to)g(this)g(macro)g(and)g(so)177 241 y(we)h(can)f(turn)g(all)g
+(that)g(code)g(on)g(or)h(off)f(here)g(by)g(defining)f(this)h(macro)g(to)g(be)
+h(either)177 291 y(empty)f(or)g(the)g(single-line)f(comment)g(symbol)h
+(\(\\p{--}\).)f(Note)h(the)g(use)g(of)h(a)177 340 y(quick)f(macro)g(name.)177
+440 y(@$@#D@M==@{@})106 b(@!)22 b(Turns)f(the)g(debug)g(code)f(ON.)177
+490 y(@!)i(Use)f(this)g(definition)e(to)j(turn)f(the)g(debug)g(code)g(OFF:)g
+(@$@#D==@{--@})177 589 y(...)g(then)g(later)g(in)g(the)h(file...)177
+689 y(@$@<Sloth)e(incrementing)f(loop@>==@{@-)177 739 y(while)i(sloth<walrus)
+e(loop)243 789 y(@#D)i(assert\(sloth<wal)o(rus,")o(AWK!)d
+(sloth>=walrus!!!!!!)o(!"\);)243 839 y(@#D)j(assert\(timer<tim)o(ermax)o
+(,"AWK)o(!)e(timer>=timermax!!)o(!"\);)243 888 y(inc\(sloth\);)177
+938 y(end)i(loop@})177 1051 y Fr(The)16 b(other)f(w)o(a)o(y)f(to)h(fudge)g(a)
+f(conditional)g(is)h(to)g(de\014ne)g(a)g(macro)f(with)g(a)h(single)g
+(parameter.)20 b(A)15 b(call)f(to)h(the)177 1101 y(macro)g(is)g(then)i(wrapp)
+q(ed)g(around)e(all)g(the)h(conditional)f(co)q(de)i(in)e(the)h(program.)23
+b(The)16 b(macro)f(can)h(then)g(b)q(e)177 1151 y(de\014ned)f(to)f(presen)o(t)
+h(or)f(ignore)g(the)g(co)q(de)h(of)e(its)h(argumen)o(t.)j(F)m(or)d(example:)
+177 1263 y Fl(@A@<Debug)20 b(Macro@>)177 1363 y(The)h(following)f(macro)h
+(determines)f(whether)g(debug)h(code)g(will)g(be)g(included)f(in)i(the)177
+1413 y(program.)e(All)h(debug)g(code)g(is)h(wrapped)e(by)h(a)h(call)f(to)g
+(this)g(macro)g(and)g(so)177 1463 y(we)h(can)f(turn)g(all)g(the)g(debug)g
+(code)g(on)g(or)h(off)f(here)g(by)g(defining)f(this)h(macro)g(to)g(be)177
+1513 y(either)g(empty)f(or)i(its)f(parameter.)177 1612 y
+(@$@#D@\(@1@\)@M==@{@)o(1@})106 b(@!)21 b(Turns)g(the)g(debug)g(code)g(ON.)
+177 1662 y(@!)h(Use)f(this)g(definition)e(to)j(turn)f(the)g(debug)g(code)g
+(OFF:)g(@$@#D@\(@1@\)==@{@)o(})177 1762 y(...)g(then)g(later)g(in)g(the)h
+(file...)177 1861 y(@$@<Sloth)e(incrementing)f(loop@>==@{@-)177
+1911 y(while)i(sloth<walrus)e(loop)243 1961 y(@#D@\(assert\(slo)o(th<wa)o
+(lrus,)o("AWK!)f(sloth>=walrus!!!!!)o(!!"\);)352 2011 y(assert\(timer<ti)o
+(merma)o(x,"AW)o(K!)h(timer>=timermax!)o(!!"\);)o(@\))243 2060
+y(inc\(sloth\);)177 2110 y(end)i(loop@})177 2223 y Fr(In)16
+b(languages)g(that)g(allo)o(w)f(m)o(ulti-li)o(ne)f(commen)o(ts)g(\(e.g.)i(C)g
+(with)g Fl(/*)f Fr(and)h Fl(*/)p Fr(\),)g(commen)o(ts)f(can)h(b)q(e)h(used)g
+(to)177 2273 y(eliminate)12 b(the)j(conditioned)e(co)q(de)i(rather)g(than)f
+(absence.)19 b(F)m(or)14 b(example:)177 2386 y Fl(@$@#D@\(@1@\)@M==@{/)o(*)19
+b(@1)i(*/@})87 b(@!)21 b(Comments)f(out)h(the)h(debug)e(code)177
+2499 y Fr(\(Note:)i(If)15 b(this)h(example)e(w)o(ere)j(ev)o(er)f(actually)f
+(used,)h(the)h(programmer)c(w)o(ould)i(ha)o(v)o(e)g(to)g(b)q(e)i(careful)e
+(not)h(to)177 2548 y(place)e(commen)o(ts)e(in)i(the)g(argumen)o(t)f(co)q(de.)
+19 b(Nested)c(commen)o(ts)d(in)i(C)g(are)g(non-p)q(ortable.\))177
+2622 y(The)f(parameterized)f(macro)f(idea)g(can)i(b)q(e)f(generalized)h(to)f
+(supp)q(ort)h(the)f(c)o(hoice)h(of)e(more)g(than)h(one)g(m)o(utually)177
+2672 y(exclusiv)o(e)j(alternativ)o(e.)i(F)m(or)d(example:)177
+2785 y Fl(@A)22 b(This)f(module)f(contains)g(non-portable)g(code)g(that)h
+(must)g(execute)g(on)g(Hewlett)177 2835 y(Packard,)f(Sun,)h(and)g(DEC)h
+(workstations.)d(The)i(following)f(FunnelWeb)g(macro)h(is)1042
+2940 y Fr(45)p eop
+%%Page: 46 47
+46 46 bop 177 42 a Fl(defined)21 b(to)g(choose)f(between)h(these)g(three.)f
+(The)h(first)g(parameter)f(is)h(the)h(HP)f(code,)177 91 y(the)g(second)g(is)g
+(the)g(Sun)h(code,)e(and)i(the)f(third)f(is)i(the)f(DEC)g(code.)g(Whichever)
+177 141 y(parameter)f(constitutes)g(the)h(body)g(of)g(this)g(macro)g
+(determines)f(which)177 191 y(machine)h(the)g(code)g(is)g(being)g
+(targeted\\note{Di)o(ction)o(ary)e(says)i(only)g(one)g(t)177
+241 y(in)h(targeted.})d(for.)177 340 y(@$@<Machine)h(specific)g
+(code@>@\(@3@\)@M==@)o({@1@)o(})41 b(@!)21 b(Configure)f(for)h(HP.)177
+440 y(...then)g(later)f(in)i(the)f(file...)177 540 y(@<Machine)f(specific)g
+(code@>@\()177 589 y(@"get_command_line)o(\(coml)o(ine\)@)o(")237
+b(@,)21 b(@!)h(HP.)177 639 y(@"scan_command_lin)o(e\(128)o(,coml)o(ine\);)o
+(@")106 b(@,)21 b(@!)h(Sun.)177 689 y(@"dcl_get_command_)o(line\()o(comli)o
+(ne,25)o(6\);@")40 b(@\))21 b(@!)h(DEC.)177 793 y Fr(Of)13
+b(course,)g(this)g(could)f(also)g(b)q(e)h(p)q(erformed)f(using)h(three)h
+(separate)f(macros.)k(The)c(main)d(adv)n(an)o(tage)i(of)g(using)177
+842 y(a)j(single)g(macro)g(is)g(that)g(the)i(m)o(utual)c(exclusivit)o(y)i(is)
+g(enforced.)24 b(Also,)15 b(b)q(ecause)i(F)m(unnelW)m(eb)e(ensures)j(that)177
+892 y(the)d(n)o(um)o(b)q(er)f(of)g(formal)e(and)j(actual)f(parameters)h(are)g
+(the)g(same,)e(this)i(metho)q(d)f(lessens)i(the)f(c)o(hance)g(that)g(a)177
+942 y(mac)o(hine)e(will)f(b)q(e)j(forgotten)f(in)f(some)g(places.)177
+1099 y Fi(2.6)70 b(Changing)23 b(the)f(Strength)i(of)f(Headings)177
+1211 y Fr(F)m(unnelW)m(eb)18 b(pro)o(vides)g(\014v)o(e)g(heading)g(lev)o
+(els:)26 b Fl(@A)p Fr(,)17 b Fl(@B)p Fr(,)g Fl(@C)p Fr(,)g
+Fl(@D)p Fr(,)h(and)f Fl(@E)h Fr(to)g(whic)o(h)g(it)f(binds)i(\014v)o(e)f
+(di\013eren)o(t)177 1261 y(t)o(yp)q(ographical)e(strengths.)28
+b(These)17 b(bindings)f(are)h(static;)h(a)f(lev)o(el)f Fl(@A)g
+Fr(heading)g(will)f(alw)o(a)o(ys)h(b)q(e)h(t)o(yp)q(eset)h(in)177
+1311 y(a)e(particular)g(fon)o(t)g(size)h(regardless)h(of)e(the)g(size)i(of)d
+(the)i(do)q(cumen)o(t.)25 b(The)17 b(fon)o(t)f(sizes)h(ha)o(v)o(e)f(b)q(een)i
+(preset)g(to)177 1361 y(b)q(e)f(\\reasonable")e(for)h(a)f(range)h(of)f(do)q
+(cumen)o(t)h(sizes,)h(but)f(ma)o(y)d(b)q(e)k(inappropriate)e(for)h(v)o(ery)g
+(small)d(or)j(large)177 1410 y(do)q(cumen)o(ts.)177 1482 y(F)m(unnelW)m(eb)d
+(do)q(es)h(not)f(curren)o(tly)h(pro)o(vide)g(an)f(\\o\016cial")e(w)o(a)o(y)i
+(\(e.g.)f(a)h(pragma\))f(to)h(c)o(hange)h(the)g(t)o(yp)q(esetting)177
+1531 y(strength)f(of)f(headings.)17 b(This)12 b(feature)g(migh)o(t)e(b)q(e)j
+(added)f(in)f(later)h(v)o(ersions.)18 b(Mean)o(while,)12 b(a)f(hac)o(k)h(is)g
+(a)o(v)n(ailable)177 1581 y(that)17 b(will)e(do)h(the)i(job,)e(pro)o(viding)f
+(that)i(y)o(ou)f(do)h(not)f(mind)f(the)i(hac)o(k)g(b)q(eing)g(T)1490
+1590 y(E)1513 1581 y(X-sp)q(eci\014c)h(and)e(probably)177 1631
+y(F)m(unnelW)m(eb-v)o(ersion)e(sp)q(eci\014c.)177 1702 y(Inside)g(the)h(set)f
+(of)f(T)504 1711 y(E)528 1702 y(X)g(macro)g(de\014nitions)g(that)h(F)m
+(unnelW)m(eb)f(writes)i(at)e(the)i(top)e(of)h(ev)o(ery)g(do)q(cumen)o(tation)
+177 1752 y(\014le)d(are)h(\014v)o(e)f(\\library")f(de\014nitions)h
+Fl(fwliba)p Fn(:)c(:)g(:)m Fl(fwlibe)j Fr(whic)o(h)h(pro)o(vide)g(\014v)o(e)g
+(di\013eren)o(t)h(t)o(yp)q(esetting)g(strengths)177 1802 y(for)j(headings.)23
+b(Near)16 b(the)h(end)f(of)f(the)h(set)g(of)f(de\014nitions,)h(F)m(unnelW)m
+(eb)f(binds)g(these)i(macros)e(to)g(\014v)o(e)h(other)177 1851
+y(macros)i Fl(fwseca)p Fn(:)7 b(:)g(:)n Fl(fwsece)17 b Fr(whic)o(h)i(are)h
+(in)o(v)o(ok)o(ed)e(directly)i(in)e(the)i(generated)g(T)1511
+1860 y(E)1535 1851 y(X)f(co)q(de)h(to)f(t)o(yp)q(eset)h(the)177
+1901 y(headings.)177 2005 y Fl(\\def\\fwseca#1#2{\\f)o(wliba)o({#1}{)o(#2}})
+177 2055 y(\\def\\fwsecb#1#2{\\f)o(wlibb)o({#1}{)o(#2}})177
+2104 y(\\def\\fwsecc#1#2{\\f)o(wlibc)o({#1}{)o(#2}})177 2154
+y(\\def\\fwsecd#1#2{\\f)o(wlibd)o({#1}{)o(#2}})177 2204 y
+(\\def\\fwsece#1#2{\\f)o(wlibe)o({#1}{)o(#2}})177 2308 y Fr(This)10
+b(means)g(that)h(the)g(t)o(yp)q(esetting)g(strength)h(of)d(the)i(headings)g
+(in)f(a)g(F)m(unnelW)m(eb)g(do)q(cumen)o(t)g(can)g(b)q(e)h(c)o(hanged)177
+2357 y(b)o(y)j(rede\014ning)g(these)i(macros)d(at)g(the)i(top)f(of)f(a)h(F)m
+(unnelW)m(eb)f(do)q(cumen)o(t.)k(F)m(or)d(example:)177 2461
+y Fl(@p)22 b(typesetter)d(=)j(tex)177 2511 y(\\def\\fwseca#1#2{\\f)o(wlibc)o
+({#1}{)o(#2}})177 2614 y Fr(w)o(ould)10 b(set)h Fl(@A)f Fr(headings)g(at)h
+(the)f(same)g(strength)i(as)e(the)h(default)f(strength)i(of)d
+Fl(@C)h Fr(headings.)17 b(The)11 b Fl(typesetter)177 2664 y
+Fr(directiv)o(e)k(is)e(necessary)j(to)e(ensure)h(that)f(the)g(T)935
+2673 y(E)958 2664 y(X)g(con)o(trol)g(sequences)i(get)e(through)g(to)g(the)g
+(do)q(cumen)o(tation)177 2714 y(\014le)g(un\014ltered.)177
+2785 y(The)g(follo)o(wing)d(will)h(tone)i(do)o(wn)f(all)f(headings)h(b)o(y)g
+(t)o(w)o(o)g(lev)o(els)h(\(with)f(the)h Fl(@D)f Fr(and)g Fl(@E)g
+Fr(lev)o(els)h(b)q(eing)f(allo)q(cated)177 2835 y(the)i(default)e
+Fl(@E)h Fr(t)o(yp)q(esetting)g(strength)i(b)q(ecause)f(there)g(is)f(nothing)f
+(w)o(eak)o(er\).)1042 2940 y(46)p eop
+%%Page: 47 48
+47 47 bop 177 42 a Fl(@p)22 b(typesetter)d(=)j(tex)177 91 y
+(\\def\\fwseca#1#2{\\f)o(wlibc)o({#1}{)o(#2}})177 141 y
+(\\def\\fwsecb#1#2{\\f)o(wlibd)o({#1}{)o(#2}})177 191 y
+(\\def\\fwsecc#1#2{\\f)o(wlibe)o({#1}{)o(#2}})177 241 y
+(\\def\\fwsecd#1#2{\\f)o(wlibe)o({#1}{)o(#2}})177 291 y
+(\\def\\fwsece#1#2{\\f)o(wlibe)o({#1}{)o(#2}})177 408 y Fr(These)17
+b(de\014nitions)f(a\013ect)g(only)f(the)h(headings)f(that)h(follo)o(w)e
+(them,)g(and)i(so)f(they)h(should)g(b)q(e)g(placed)g(at)f(the)177
+458 y(top)f(of)f(the)i(F)m(unnelW)m(eb)e(input)h(\014le.)177
+622 y Fi(2.7)70 b(E\016ciency)21 b(Notes)177 739 y Fr(The)14
+b(follo)o(wing)e(notes)i(are)h(w)o(orth)f(k)o(eeping)f(in)h(mind)e(when)i
+(using)g(F)m(unnelW)m(eb.)295 814 y Fo(Memory:)j Fr(When)12
+b(F)m(unnelW)m(eb)f(pro)q(cesses)j(an)d(input)g(\014le,)g(it)g(reads)h(the)g
+(en)o(tire)g(input)f(\014le,)h(and)295 864 y(all)i(the)h(included)g(\014les)g
+(in)o(to)g(memory)m(.)920 849 y Fg(2)957 864 y Fr(This)g(organization)e(do)q
+(es)j(not)f(p)q(ose)g(a)g(constrain)o(t)g(on)295 914 y(mac)o(hines)e(with)h
+(large)f(memories,)e(but)j(could)g(presen)o(t)h(a)f(problem)e(on)i(the)g
+(smaller)f(mac)o(hines)295 964 y(suc)o(h)i(as)f(the)g(PC.)295
+1039 y Fo(Sp)q(eed:)j Fr(F)m(unnelW)m(eb)12 b(is)g(not)g(a)g(slo)o(w)g
+(program.)k(Ho)o(w)o(ev)o(er,)c(it)g(is)g(not)h(particularly)e(fast)h
+(either.)295 1089 y(If)17 b(the)g(sp)q(eed)h(at)f(whic)o(h)g(F)m(unnelW)m(eb)
+f(runs)h(is)g(imp)q(ortan)o(t)e(to)i(y)o(ou,)f(then)i(the)f(thing)f(to)h(k)o
+(eep)295 1138 y(in)e(mind)d(is)j(that)g(F)m(unnelW)m(eb)f(has)h(b)q(een)h
+(optimized)d(to)i(deal)f(e\016cien)o(tly)h(with)f(large)g(slabs)h(of)295
+1188 y(text.)23 b(F)m(unnelW)m(eb)15 b(treats)h(input)f(\014les)g(as)h(a)f
+(sequence)i(of)e(text)g(slabs)h(and)f(sp)q(ecial)g(sequences)295
+1238 y(\(e.g.)i Fl(@+)p Fr(\))h(and)f(whenev)o(er)i(it)e(hits)h(a)g(sp)q
+(ecial)g(sequence,)i(it)d(has)h(to)f(stop)h(and)g(think.)29
+b(Th)o(us,)295 1288 y(while)19 b(a)f(ten)h(megab)o(yte)f(text)i(slab)e(w)o
+(ould)g(b)q(e)h(manipulated)e(as)i(a)g(single)f(tok)o(en,)i(in)e(a)h(few)295
+1338 y(milliseconds,)11 b(a)i(similar)e(ten)j(megab)o(yte)e(c)o(h)o(unk)h
+(\014lled)g(with)f(sp)q(ecial)i(sequences)h(w)o(ould)e(tak)o(e)g(a)295
+1388 y(lot)j(longer.)25 b(If)16 b(F)m(unnelW)m(eb)f(is)h(running)g(slo)o(wly)
+m(,)f(lo)q(ok)g(to)h(see)i(if)d(the)i(input)f(con)o(tains)g(a)g(high)295
+1437 y(densit)o(y)e(of)f(sp)q(ecial)h(sequences.)21 b(This)13
+b(can)h(sometimes)e(happ)q(en)i(if)f(F)m(unnelW)m(eb)g(is)g(b)q(eing)h(used)
+295 1487 y(as)f(a)f(bac)o(k)o(end)h(macro)e(pro)q(cessor)j(and)f(its)f(input)
+g(is)h(b)q(eing)f(generated)i(automatically)9 b(b)o(y)k(some)295
+1537 y(other)i(program.)295 1612 y Fo(Macro)i(expansion:)h
+Fr(When)d(tangling)e(\(expanding)i(macros\),)e(F)m(unnelW)m(eb)h(nev)o(er)i
+(expands)295 1662 y(a)11 b(macro)f(expression)i(in)o(to)e(memory;)f(it)h(alw)
+o(a)o(ys)g(writes)i(it)f(to)f(the)i(pro)q(duct)g(\014le)f(as)g(it)f(go)q(es.)
+18 b(This)295 1712 y(is)10 b(a)h(p)q(o)o(w)o(erful)e(fact,)i(b)q(ecause)h(it)
+e(means)f(that)i(y)o(ou)f(can)g(write)h(macros)e(con)o(taining)h(an)g
+(unlimited)295 1762 y(amoun)o(t)h(of)h(text,)h(and)f(pass)h(suc)o(h)g(macros)
+f(as)h(parameters)f(to)h(other)g(macros)e(without)h(b)q(ecom-)295
+1812 y(ing)j(concerned)j(ab)q(out)e(o)o(v)o(er\015o)o(wing)f(some)g(kind)g
+(of)h(bu\013er)h(memory)m(.)k(In)16 b(short,)g(F)m(unnelW)m(eb)295
+1861 y(do)q(es)f(not)f(imp)q(ose)e(an)o(y)i(limits)d(on)j(the)h(size)f(of)f
+(macro)g(b)q(o)q(dies)h(or)g(their)h(expansions.)177 2025 y
+Fi(2.8)70 b(In)n(teractiv)n(e)21 b(Mo)r(de)177 2142 y Fr(As)15
+b(w)o(ell)e(as)i(ha)o(ving)e(a)h(command)d(line)j(in)o(terface)h(with)f(lots)
+g(of)g(options,)f(F)m(unnelW)m(eb)h(also)g(pro)o(vides)g(a)g(com-)177
+2192 y(mand)c(language)h(and)g(a)h(mo)q(de)e(\(\\in)o(teractiv)o(e)i(mo)q
+(de"\))e(in)i(whic)o(h)f(commands)e(in)i(the)i(language)d(can)i(b)q(e)g(t)o
+(yp)q(ed)177 2242 y(in)o(teractiv)o(ely)m(.)26 b(The)17 b(F)m(unnelW)m(eb)f
+(command)e(in)o(terpreter)19 b(w)o(as)d(created)i(primarily)d(to)h(supp)q
+(ort)i(regression)177 2292 y(testing,)c(but)g(can)g(also)f(b)q(e)i(useful)f
+(to)g(F)m(unnelW)m(eb)f(users.)177 2367 y(F)m(unnelW)m(eb's)d(command)d(in)o
+(terpreter)12 b(reads)f(one)f(command)d(p)q(er)k(line)f(and)g(can)g(read)g(a)
+g(stream)g(of)f(commands)177 2417 y(either)j(from)e(a)h(text)h(\014le,)f(or)h
+(from)d(the)j(console.)18 b(The)12 b(in)o(terpreter)h(can)e(understand)i(o)o
+(v)o(er)e(t)o(w)o(en)o(t)o(y)h(commands.)177 2466 y(See)17
+b(Chapter)f(3)f(for)g(a)g(full)f(list.)22 b(Ho)o(w)o(ev)o(er,)16
+b(most)e(of)h(them)g(w)o(ere)h(designed)g(to)f(supp)q(ort)i(regression)f
+(testing)177 2516 y(and)e(will)e(not)i(b)q(e)h(of)e(use)i(to)e(the)i(casual)f
+(user.)177 2592 y(The)g(commands)e(that)i(are)g(of)f(greatest)j(use)e(to)g
+(the)h(casual)e(user)i(are:)286 2709 y Fl(!)327 b(-)21 b(Comment.)g(Ignores)f
+(the)h(whole)g(line.)286 2759 y(EXECUTE)f(fn)131 b(-)21 b(Execute)g(the)g
+(specified)f(file.)p 177 2796 709 2 v 223 2823 a Ff(2)241 2835
+y Fh(If)11 b(a)g(\014le)g(is)h(included)d Fc(n)j Fh(times,)e(F)m(unnelW)m(eb)
+g(k)o(eeps)g Fc(n)i Fh(copies)e(in)h(memory)m(.)1042 2940 y
+Fr(47)p eop
+%%Page: 48 49
+48 48 bop 286 42 a Fl(FW)22 b(options)129 b(-)21 b(Invoke)g(FunnelWeb-proper)
+d(once.)286 91 y(SET)j(options)108 b(-)21 b(Sets)g(options.)286
+141 y(SHOW)261 b(-)21 b(Displays)g(currently)e(active)i(options.)286
+191 y(TRACE)g(ON)174 b(-)21 b(Turns)g(command)g(tracing)f(ON.)286
+241 y(QUIT)261 b(-)21 b(Quits)g(FunnelWeb.)177 373 y Fr(T)m(o)16
+b(distinguish)h(here)h(b)q(et)o(w)o(een)g(in)o(v)o(o)q(cations)e(of)g(the)i
+(F)m(unnelW)m(eb)e(program)f(and)i(F)m(unnelW)m(eb)f(runs)i(inside)177
+423 y(the)c(shell,)g(w)o(e)g(call)f(the)h(latter)g Fo(F)l(unnelW)l(eb)f(prop)
+q(er)p Fr(.)k(The)d(\\)p Fl(FW)p Fr(")e(command)f(in)o(v)o(ok)o(es)j(F)m
+(unnelW)m(eb)f(prop)q(er)177 473 y(with)h(the)g(sp)q(eci\014ed)h(options)f
+(whic)o(h)f(tak)o(e)h(the)h(same)d(syn)o(tax)i(as)g(they)g(do)g(on)f(the)i
+(command)c(line.)17 b(The)e(only)177 523 y(restriction)g(is)f(that)g(none)g
+(of)g(the)g(action)g(options)f(can)i(b)q(e)f(turned)h(on)f(except)h(\\)p
+Fl(+F)p Fr(")e(whic)o(h)h(m)o(ust)f(b)q(e)i(turned)177 572
+y(on.)177 654 y(The)e(\\)p Fl(SET)p Fr(")f(command)e(has)j(the)h(same)e(syn)o
+(tax)g(as)h(the)h(\\)p Fl(FW)p Fr(")e(command)e(except)k(that)f(it)g(do)q(es)
+g(not)g(allo)o(w)e Fm(any)177 703 y Fr(action)i(options)g(to)g(b)q(e)h(sp)q
+(eci\014ed.)19 b(It's)14 b(sole)f(e\013ect)i(is)e(to)g(set)i(default)d
+(option)h(v)n(alues)g(for)g(the)h(rest)g(of)f(the)h(run.)177
+785 y(The)g(\\)p Fl(SHOW)p Fr(")f(command)e(displa)o(ys)i(the)i(curren)o(t)g
+(default)f(options.)177 866 y(By)e(default,)g(F)m(unnelW)m(eb)f(do)q(es)i
+(not)f(ec)o(ho)h(the)f(commands)e(that)i(it)f(pro)q(cesses)k(in)d(a)f
+(script.)19 b(The)12 b(\\)p Fl(TRACE)20 b(ON)p Fr(")177 916
+y(command)11 b(turns)k(on)f(suc)o(h)g(tracing.)177 997 y(These)j(commands)12
+b(can)k(b)q(e)f(com)o(bined)f(to)h(streamline)f(the)i(use)g(of)f(F)m(unnelW)m
+(eb.)21 b(F)m(or)15 b(example,)e(y)o(ou)i(migh)o(t)177 1047
+y(wish)f(to)g(create)h(a)f(script)g(called)g Fl(typeset.fws)d
+Fr(to)j(pro)q(cess)i(a)d(whole)h(group)g(of)f(\014les.)177
+1179 y Fl(trace)21 b(on)177 1229 y(!This)g(script)f(typesets)h(the)g(whole)g
+(program.)177 1279 y(!)h(Set)f(no)g(listing)g(file,)f(no)i(product)e(files,)h
+(but)g(specify)f(a)i(documentation)d(file)177 1328 y(!)j(and)f(specify)f(the)
+h(directory)f(into)h(which)g(it)g(should)g(be)g(placed.)177
+1378 y(set)g(-L)h(-O)f(+T/usr/ross/typese)o(t/)177 1428 y(fw)h(prog1)177
+1478 y(fw)g(prog2)177 1528 y(fw)g(prog3)177 1578 y(fw)g(prog4)177
+1710 y Fr(There)12 b(are)e(a)g(few)h(w)o(a)o(ys)f(in)f(whic)o(h)i(this)f
+(script)h(can)g(b)q(e)f(run.)18 b(The)10 b(simplest)g(is)g(simply)e(to)i(sp)q
+(ecify)h(it)f(in)g(the)h(\\)p Fl(+X)p Fr(")177 1760 y(option)g(of)f(a)h(F)m
+(unnelW)m(eb)g(in)o(v)o(o)q(cation.)16 b(F)m(unnelW)m(eb)11
+b(shellscripts)h(default)f(to)g(\\)p Fl(<current)p 1621 1760
+14 2 v 14 w(directory>)p Fr(")e(and)177 1810 y(\\)p Fl(.fws)p
+Fr(".)177 1942 y Fl(fw)22 b(+xtypeset)177 2074 y Fr(The)14
+b(second)h(alternativ)o(e)f(is)g(to)g(en)o(ter)h(in)o(teractiv)o(e)f(mo)q
+(de.)177 2207 y Fl(fw)22 b(+k)177 2339 y Fr(F)m(rom)12 b(there,)j(y)o(ou)e
+(can)h(execute)i(the)f(script)f(using:)177 2472 y Fl(execute)21
+b(typeset)177 2604 y Fr(In)o(teractiv)o(e)13 b(mo)q(de)e(could)h(b)q(e)h(v)o
+(ery)f(useful)g(to)g(those)h(with)f(m)o(ultiple-windo)o(w)d(w)o(orkstations.)
+17 b(The)c(user)g(could)177 2654 y(create)f(a)f(windo)o(w)e(con)o(taining)h
+(an)g(in)o(teractiv)o(e)h(session)h(of)e(F)m(unnelW)m(eb,)g(and)g(then)i
+(switc)o(h)f(b)q(et)o(w)o(een)h(windo)o(ws,)177 2704 y(editing,)h(and)h
+(executing)g(F)m(unnelW)m(eb)g(prop)q(er)h(and)e(other)i(programs.)177
+2785 y(If)c(y)o(ou)f(\014nd)i(y)o(ourself)f(using)f(the)i(command)c(in)o
+(terpreter)13 b(a)e(lot,)g(b)q(e)g(sure)h(to)f(read)h(ab)q(out)f(the)g(other)
+h(commands)177 2835 y(that)i(are)g(a)o(v)n(ailable)e(in)h(Chapter)i(3.)1042
+2940 y(48)p eop
+%%Page: 49 50
+49 49 bop 177 42 a Fi(2.9)70 b(Setting)21 b(Up)i(Default)f(Options)177
+159 y Fr(If)14 b(y)o(ou)h(do)f(not)h(lik)o(e)f(F)m(unnelW)m(eb's)g(default)g
+(settings)i(for)e(its)h(command)d(line)i(options,)g(there)i(are)f(a)f(n)o(um)
+o(b)q(er)177 209 y(of)f(w)o(a)o(ys)h(in)f(whic)o(h)h(y)o(ou)g(can)g(c)o
+(hange)g(them.)295 284 y Fo(De\014ne)e(an)h(\\alias":)k Fr(Use)12
+b(y)o(our)g(op)q(erating)f(system)h(\\)p Fl(alias)p Fr(")e(facilit)o(y)g(to)i
+(create)h(an)e(alias)g(for)295 334 y(F)m(unnelW)m(eb)i(con)o(taining)f(the)h
+(desired)i(options.)i(F)m(unnelW)m(eb)12 b(pro)q(cesses)k(options)d(from)e
+(left)i(to)295 384 y(righ)o(t,)g(so)h(y)o(ou)g(can)g(o)o(v)o(erride)g(these)h
+(defaults)f(later)g(if)f(y)o(ou)h(wish.)295 460 y Fo(Create)k(a)f(script)f
+(called)g(\\)p Fl(fwinit.fws)p Fo(":)j Fr(When)d(F)m(unnelW)m(eb)f(starts)h
+(up,)f(it)g(executes)j(a)295 510 y(script)12 b(called)e(\\)p
+Fl(fwinit.fws)p Fr(")f(if)h(suc)o(h)h(a)g(script)g(exists)h(in)e(the)i
+(curren)o(t)g(directory)m(.)17 b(Y)m(ou)11 b(can)g(use)295
+560 y(this)j(fact)f(to)h(set)g(options)f(b)q(efore)i(the)f(run)g(of)f(F)m
+(unnelW)m(eb)g(prop)q(er)h(b)o(y)f(creating)h(suc)o(h)h(a)e(script)295
+609 y(and)i(placing)e(a)i(single)f(\\)p Fl(set)p Fr(")f(command)f(in)i(it)h
+(con)o(taining)e(the)i(desired)h(options.)k(The)15 b(main)295
+659 y(trouble)f(with)f(this)h(approac)o(h)f(is)g(that)h(the)g(options)f(in)g
+(the)h Fl(set)f Fr(command)d(will)i(b)q(e)i(pro)q(cessed)295
+709 y Fm(after)d Fr(the)h(command)d(line)i(options,)g(whic)o(h)h(means)e
+(that)i(y)o(ou)f(w)o(on't)g(b)q(e)h(able)f(to)h(o)o(v)o(erride)f(them)295
+759 y(on)j(the)g(command)e(line.)177 835 y(F)m(or)h(example,)f(y)o(ou)h(migh)
+o(t)f(b)q(e)i(in)o(v)o(olv)o(ed)e(more)h(with)g(presen)o(ting)h(programs)f
+(than)g(with)g(running)h(them,)e(and)177 884 y(w)o(an)o(t)f(F)m(unnelW)m(eb)g
+(to)h(generate)h(a)e(do)q(cumen)o(tation)f(\014le)i(b)o(y)f(default,)g(but)h
+(not)g(to)f(pro)q(duce)i(listing)d(or)i(pro)q(duct)177 934
+y(\014les)i(b)o(y)g(default.)k(In)c(Unix)f(y)o(ou)h(could)f(do)h(this)g
+(with:)177 1053 y Fl(alias)21 b(fw)g(fw)h(-L)f(-O)g(+T)177
+1219 y Fi(2.10)70 b(F)-6 b(unnelW)g(eb)23 b(and)g(Mak)n(e)177
+1336 y Fr(The)11 b(Unix)g Fl(Make)e Fr(program)g(allo)o(ws)h(a)g(set)i(of)e
+(dep)q(endencies)j(b)q(et)o(w)o(een)f(a)e(set)i(of)e(\014les)h(to)g(b)q(e)g
+(describ)q(ed,)i(and)d(then)177 1386 y(uses)16 b(these)f(dep)q(endencies)i
+(to)d(con)o(trol)g(the)h(w)o(a)o(y)f(in)g(whic)o(h)g(the)h(\014les)g(are)f
+(created)i(and)e(up)q(dated.)20 b(T)o(ypically)m(,)177 1436
+y Fl(Make)13 b Fr(is)g(used)i(to)e(con)o(trol)g(the)i(pro)q(cess)g(of)e
+(transforming)f(a)h(collection)g(of)g(source)i(co)q(de)f(\014les)g(to)f(one)h
+(or)g(more)177 1485 y(executable)j(\014les.)24 b(As)16 b(the)g(use)g(of)f(F)m
+(unnelW)m(eb)g(implies)f(an)h(extra)h(stage)h(to)e(this)h(pro)q(cess,)h(it)e
+(is)h(natural)f(to)177 1535 y(include)e(the)f(transformation)f(of)g
+Fl(.fw)h Fr(\014les)h(to)f(source)h(co)q(de)g(\014les)g(as)f(part)h(of)e(the)
+i Fl(Make)f Fr(pro)q(cess.)19 b(This)12 b(is)g(easy)177 1585
+y(to)i(do,)f(but)h(the)h(user)g(should)e(b)q(e)i(a)o(w)o(are)f(of)f(one)h
+(asp)q(ect)h(of)e(F)m(unnelW)m(eb)h(whic)o(h)g(can)g(cause)h(problems.)177
+1661 y(It)d(is)g(often)h(useful,)f(when)g(using)g(F)m(unnelW)m(eb,)g(to)g
+(create)h(a)f(F)m(unnelW)m(eb)g Fl(.fw)f Fr(\014le)i(that)f(generates)i(more)
+d(than)177 1711 y(one)j(pro)q(duct)g(\014le.)k(That)13 b(is,)g(a)g(single)g
+Fl(.fw)g Fr(\014le)h(ma)o(y)d(ha)o(v)o(e)i(man)o(y)f(macro)g(de\014nitions)h
+(connected)j(to)d(pro)q(duct)177 1760 y(\014les)g(so)g(that)f(when)h(the)g(F)
+m(unnelW)m(eb)f Fl(.fw)g Fr(\014le)g(is)h(pro)q(cessed)h(b)o(y)f(F)m(unnelW)m
+(eb,)e(sev)o(eral)i(\014les)g(are)g(created.)19 b(F)m(or)177
+1810 y(example,)d(this)g(facilit)o(y)f(has)i(b)q(een)g(used)h(to)e(great)h
+(e\013ect)h(to)f(place)f(the)h(description)h(of)e(an)g(Ada)g(pac)o(k)n(age's)
+177 1860 y(pac)o(k)n(age)e(sp)q(eci\014cation)g(\014le)g(and)g(pac)o(k)n(age)
+f(b)q(o)q(dy)h(\014le)g(in)g(the)g(same)f(F)m(unnelW)m(eb)g
+Fl(.fw)h Fr(\014le.)177 1936 y(The)j(use)h(of)e(m)o(ultiple)e(pro)q(duct)k
+(\014les,)f(ho)o(w)o(ev)o(er,)h(pro)o(v)o(ok)o(es)e(a)h(problem)e(with)h(dep)
+q(endencies.)29 b(Supp)q(ose)18 b(for)177 1986 y(example)9
+b(that)h(a)g(F)m(unnelW)m(eb)g Fl(prog.fw)e Fr(pro)q(duces)k(t)o(w)o(o)d(pro)
+q(duct)j(\014les)e Fl(proc.spec)e Fr(\(a)i(pac)o(k)n(age)g(sp)q
+(eci\014cation\))177 2035 y(and)16 b Fl(prog.body)f Fr(\(a)h(pac)o(k)n(age)f
+(b)q(o)q(dy\).)26 b(If)16 b(the)g(pac)o(k)n(age)g(is)g(accessed)j(in)d(the)g
+(w)o(a)o(y)g(that)g(pac)o(k)n(ages)g(normally)177 2085 y(are,)j(it)e(will)f
+(b)q(e)i(quite)f(common)e(for)i(the)h(programmer)d(to)j(w)o(an)o(t)f(to)g(mo)
+q(dify)e(the)j(pac)o(k)n(age)g(b)q(o)q(dy)f(without)177 2135
+y(mo)q(difying)12 b(the)j(program)e(sp)q(eci\014cation.)20
+b(So)14 b(the)i(programmer)c(will)h(edit)h(the)i Fl(prog.fw)d
+Fr(\014le)h(to)g(c)o(hange)h(the)177 2185 y(pac)o(k)n(age)c(b)q(o)q(dy)m(.)17
+b(The)12 b(result)g(of)e(running)h(this)h(through)f(F)m(unnelW)m(eb)g(will)f
+(b)q(e)i(the)g(desired)g(new)g(pac)o(k)n(age)f(b)q(o)q(dy)177
+2235 y(\014le.)23 b(Ho)o(w)o(ev)o(er,)16 b(F)m(unnelW)m(eb)f(will)f(also)h
+(pro)q(duce)i(a)e(new)h(pac)o(k)n(age)f(sp)q(eci\014cation)h(pro)q(duct)h
+(\014le)e Fm(even)i(though)177 2285 y(it)d(may)h(b)n(e)f(identic)n(al)g(to)g
+(the)h(pr)n(evious)f(version!)k Fr(The)c(result)g(is)f(that)g(the)h(newly)f
+(created)i(\(with)e(a)g(recen)o(t)i(\014le)177 2334 y(date\))h(sp)q
+(eci\014cation)h(pac)o(k)n(age)e(\014le)g(could)h(pro)o(v)o(ok)o(e)f(a)g(h)o
+(uge)h(remak)o(e)f(of)g(m)o(uc)o(h)f(of)h(the)i(program)d(in)h(whic)o(h)g(it)
+177 2384 y(resides.)177 2460 y(T)m(o)j(solv)o(e)h(the)g(problem,)f(F)m
+(unnelW)m(eb)h(includes)g(a)g(command)d(line)i(option)g(\()p
+Fl(D)h Fr(for)f(Delete\),)j(whic)o(h)d(when)177 2510 y(turned)f(on)f(\(using)
+g(\\)p Fl(+D)p Fr("\))g(causes)h(F)m(unnelW)m(eb)f(to)g(suppress)i(pro)q
+(duct)f(and)f(do)q(cumen)o(tation)f(\014les)h(that)g(are)177
+2560 y(iden)o(tical)c(to)h(the)g(previously)f(existing)h(v)o(ersions)g(of)f
+(the)h(same)f(\014les.)18 b(F)m(or)12 b(example,)f(if,)h(during)g(a)g(F)m
+(unnelW)m(eb)177 2609 y(run,)h(a)g(macro)e(w)o(as)i(connected)i(to)e(a)f(pro)
+q(duct)i(\014le)f(called)f Fl(x.dat)p Fr(,)g(and)h(the)g(macro)f(expanded)h
+(to)g Fm(exactly)g Fr(the)177 2659 y(same)g(text)h(as)f(is)h(con)o(tained)f
+(in)g Fl(x.dat)f Fr(then)i(F)m(unnelW)m(eb)f(w)o(ould)g(simply)e
+Fm(never)k(write)e(the)i(pr)n(o)n(duct)f(\014le)p Fr(,)f(the)177
+2709 y(\014le)h Fl(x.dat)f Fr(w)o(ould)g(b)q(e)h(un)o(touc)o(hed)h(and,)e(as)
+h(a)g(result,)g(no)g(further)g Fl(Make)f Fr(propagations)h(w)o(ould)f(tak)o
+(e)h(place.)177 2785 y(F)m(unnelW)m(eb)e(implemen)o(ts)f(this)i(feature)g(b)o
+(y)g(writing)f(eac)o(h)h(pro)q(duct)h(\014le)f(to)f(a)h(temp)q(orary)f
+(\014le)h(with)f(a)h(temp)q(o-)177 2835 y(rary)j(\014le)f(name.)21
+b(It)15 b(then)h(compares)f(the)h(temp)q(orary)e(\014le)h(with)g(the)h
+(target)g(\014le.)22 b(If)15 b(the)h(t)o(w)o(o)e(are)i(iden)o(tical,)1042
+2940 y(49)p eop
+%%Page: 50 51
+50 50 bop 177 42 a Fr(it)18 b(deletes)h(the)f(temp)q(orary)f(\014le.)30
+b(If)17 b(the)h(t)o(w)o(o)f(are)i(di\013eren)o(t)f(it)g(deletes)h(the)f
+(target)g(\014le)g(and)g(renames)f(the)177 91 y(temp)q(orary)c(\014le)h(to)g
+(the)g(target)h(\014le.)177 165 y(Use)c(of)f(the)h Fl(D)f Fr(facilit)o(y)e
+(means)i(that)g(the)h(programmer)d(need)j(not)f(b)q(e)h(punished)g(\(b)o(y)f
+(extra)h Fl(Make)e Fr(propagations\))177 215 y(for)14 b(describing)g(more)f
+(than)h(one)g(pro)q(duct)h(\014le)f(in)f(the)i(same)e(F)m(unnelW)m(eb)g
+(\014le.)177 376 y Fi(2.11)70 b(The)23 b(Dangers)g(of)g(F)-6
+b(unnelW)g(eb)177 492 y Fr(Lik)o(e)15 b(man)o(y)e(to)q(ols)i(that)g(are)h
+(general)f(and)g(\015exible,)g(F)m(unnelW)m(eb)g(can)g(b)q(e)h(used)g(in)f(a)
+g(v)n(ariet)o(y)f(of)h(w)o(a)o(ys,)g(b)q(oth)177 541 y(go)q(o)q(d)h(and)h
+(bad.)26 b(One)18 b(of)e(the)h(original)e(app)q(eals)i(of)f(the)h(literate)g
+(approac)o(h)g(to)f(programming)d(for)k(Kn)o(uth,)177 591 y(the)h(in)o(v)o
+(en)o(tor)f(of)f(literate)i(programmi)o(ng,)d(w)o(as)i(that)g(it)g(allo)o(ws)
+f(the)i(programmer)d(to)i(describ)q(e)i(the)e(target)177 641
+y(program)12 b(b)q(ottom)g(up,)h(top)g(do)o(wn,)g(size)h(to)f(side,)g(or)h(c)
+o(haotically)e(if)g(desired.)19 b(The)14 b(\015exibilit)o(y)e(that)h(this)h
+(st)o(yle)177 691 y(of)h(programmi)o(ng)d(lea)o(v)o(es)j(m)o(uc)o(h)f(ro)q
+(om)f(for)i(bad)g(do)q(cumen)o(tation)e(as)i(w)o(ell)g(as)g(go)q(o)q(d)f(do)q
+(cumen)o(tation.)20 b(Y)m(ears)177 741 y(of)c(exp)q(erience)j(with)e(F)m
+(unnelW)m(eb)f(has)h(rev)o(ealed)g(the)h(follo)o(wing)c(st)o(ylistic)i
+(pitfalls)g(whic)o(h)g(the)i(exp)q(erienced)177 791 y(F)m(unnelW)m(eb)c(user)
+h(should)e(tak)o(e)h(care)h(to)f(a)o(v)o(oid.)952 775 y Fg(3)295
+865 y Fo(Spaghetti)h(organization:)j Fr(By)e(far)f(the)h(w)o(orst)g(problem)e
+(that)h(arises)h(in)f(connection)h(with)295 914 y(the)k(literate)e(st)o(yle)h
+(o)q(ccurs)h(where)g(the)g(programmer)c(has)j(used)g(the)h(literate)f(to)q
+(ol)f(to)g(com-)295 964 y(pletely)f(scram)o(ble)e(the)i(program)d(so)j(that)f
+(the)h(program)d(is)i(describ)q(ed)i(and)e(la)o(y)o(ed)g(out)g(in)g(an)295
+1014 y(unordered,)j(undisciplined)e(\\stream)f(of)g(consciousness".)29
+b(In)17 b(suc)o(h)h(cases)g(the)g(programmer)295 1064 y(ma)o(y)11
+b(b)q(e)i(using)g(the)g(literate)g(st)o(yle)f(as)h(a)f(crutc)o(h)i(to)f(a)o
+(v)o(oid)e(ha)o(ving)g(to)i(think)f(ab)q(out)h(structuring)295
+1114 y(the)i(presen)o(tation.)295 1188 y Fo(Boring)h(organization:)i
+Fr(A)o(t)d(the)h(other)g(extreme,)f(a)g(program)f(ma)o(y)f(b)q(e)j(organized)
+f(in)g(suc)o(h)295 1238 y(a)h(strict)g(w)o(a)o(y)g(that)f(it)h(is)g(essen)o
+(tially)f(laid)g(out)h(in)f(the)i(order)f(most)f(\\desired")h(b)o(y)g(the)g
+(target)295 1287 y(programming)c(language.)21 b(F)m(or)15 b(example,)f(eac)o
+(h)i(macro)e(migh)o(t)f(con)o(tain)i(a)g(single)g(pro)q(cedure,)295
+1337 y(with)g(all)e(the)i(macros)f(b)q(eing)h(called)f(b)o(y)h(a)f(macro)g
+(connected)i(to)f(a)f(\014le)h(at)f(the)i(top.)k(In)15 b(man)o(y)295
+1387 y(cases)20 b(a)f(b)q(oring)f(structure)j(ma)o(y)c(b)q(e)i(en)o(tirely)g
+(appropriate,)h(but)f(the)g(programmer)e(should)295 1437 y(b)q(e)h(w)o(arned)
+f(that)f(it)h(is)f(easy)h(to)g(slip)f(in)o(to)g(suc)o(h)i(a)e(normativ)o(e)f
+(st)o(yle,)i(largely)f(forgetting)g(the)295 1487 y(descriptiv)o(e)f
+(structural)g(p)q(o)o(w)o(er)f(that)g(F)m(unnelW)m(eb)g(pro)o(vides.)295
+1561 y Fo(P)o(o)q(or)h(random)f(access:)k Fr(Using)c(F)m(unnelW)m(eb,)e(it)h
+(is)h(quite)f(p)q(ossible)h(to)f(write)h(programs)e(lik)o(e)295
+1611 y(no)o(v)o(els)j(|)f(to)g(b)q(e)h(read)g(from)e(co)o(v)o(er)i(to)f(co)o
+(v)o(er.)21 b(Sometimes)13 b(the)i(story)g(is)f(v)o(ery)h(exciting,)f(with)
+295 1660 y(data)i(structures)j(making)13 b(dashing)j(triumphs)f(and)h
+(optimized)f(co)q(de)i(bringing)e(the)h(story)h(to)295 1710
+y(a)d(satisfying)e(conclusion.)18 b(These)d(programs)e(can)g(b)q(e)i(w)o
+(orks)e(of)g(art.)18 b(Unfortunately)m(,)13 b(without)295 1760
+y(careful)e(construction,)h(suc)o(h)f(\\no)o(v)o(el-programs")d(can)j(b)q
+(ecome)f(v)o(ery)h(hard)g(to)f(access)j(randomly)295 1810 y(b)o(y)18
+b(\(sa)o(y\))h(a)f(main)o(tenance)f(programmer)g(who)h(wishes)h(only)e(to)i
+(div)o(e)f(in)g(and)g(\014x)g(a)g(sp)q(eci\014c)295 1860 y(problem.)f(If)d
+(the)g(en)o(tire)h(program)d(is)i(scram)o(bled)f(for)g(sequen)o(tial)h(exp)q
+(osition,)f(it)h(can)g(b)q(e)h(hard)295 1909 y(to)f(\014nd)h(the)f(parts)h
+(relating)f(to)g(a)g(single)g(function.)k(Someho)o(w)13 b(a)h(balance)g(m)o
+(ust)f(b)q(e)i(struc)o(k)g(in)295 1959 y(the)h(do)q(cumen)o(t)f(b)q(et)o(w)o
+(een)h(the)g(needs)h(of)d(the)i(sequen)o(tial)f(and)g(of)g(the)h
+(random-access)f(reader.)295 2009 y(This)f(balance)g(will)e(dep)q(end)k(on)d
+(the)i(in)o(tended)f(use)h(of)e(the)i(program.)295 2083 y Fo(T)l(o)q(o-in)o
+(terdep)q(end)o(en)n(t)g(do)q(cumen)o(tati)o(on:)k Fr(Sometimes,)13
+b(when)j(editing)f(a)g(program)f(writ-)295 2133 y(ten)j(using)g(F)m(unnelW)m
+(eb,)f(one)h(kno)o(ws)f(ho)o(w)g(to)g(mo)q(dify)f(the)i(program,)e(but)h(one)
+h(is)g(unsure)g(of)295 2183 y(ho)o(w)f(to)h(up)q(date)g(the)g(surrounding)f
+(do)q(cumen)o(tation!)25 b(The)16 b(do)q(cumen)o(tation)g(ma)o(y)e(b)q(e)j(w)
+o(o)o(v)o(en)295 2233 y(in)o(to)e(suc)o(h)g(a)g(net)o(w)o(ork)h(of)e(facts)h
+(that)h(it)e(seems)i(that)f(c)o(hanging)f(a)h(small)e(piece)i(of)g(co)q(de)h
+(could)295 2282 y(in)o(v)n(alidate)g(man)o(y)f(pieces)k(of)d(do)q(cumen)o
+(tation)g(scattered)k(throughout)d(the)h(do)q(cumen)o(t.)27
+b(The)295 2332 y(do)q(cumen)o(tation)12 b(b)q(ecomes)h(a)g(big)g(tar)g(pit)g
+(in)f(whic)o(h)h(mo)o(v)o(emen)o(t)e(is)i(imp)q(ossible.)j(F)m(or)c(example,)
+295 2382 y(if)18 b(y)o(ou)g(ha)o(v)o(e)g(talk)o(ed)g(ab)q(out)h(a)f
+(particular)g(data)g(structure)j(in)o(v)n(arian)o(t)c(throughout)h(a)g(do)q
+(cu-)295 2432 y(men)o(t,)f(c)o(hanging)f(that)h(in)o(v)n(arian)o(t)e(in)i(a)f
+(small)f(w)o(a)o(y)h(could)h(mean)f(ha)o(ving)g(to)h(up)q(date)g(all)f(the)
+295 2482 y(do)q(cumen)o(tation)i(without)g(touc)o(hing)h(m)o(uc)o(h)f(co)q
+(de.)33 b(In)19 b(suc)o(h)h(cases,)h(the)e(do)q(cumen)o(tation)f(is)295
+2531 y(to)q(o)c(in)o(terdep)q(enden)o(t.)21 b(This)14 b(could)g(b)q(e)h
+(symptomatic)c(of)j(an)f(excessibly)j(in)o(terconnected)g(pro-)295
+2581 y(gram,)g(or)g(of)g(an)h(excessiv)o(ely)h(v)o(erb)q(ose)g(or)e(redundan)
+o(t)i(do)q(cumen)o(ting)d(st)o(yle.)27 b(In)17 b(an)o(y)f(case,)i(a)295
+2631 y(balance)13 b(m)o(ust)f(b)q(e)h(struc)o(k)h(b)q(et)o(w)o(een)h(the)e
+(con)o(v)o(ersational)f(st)o(yle)h(that)g(encourages)i(redundancy)295
+2681 y(\(b)o(y)c(men)o(tioning)d(things)j(man)o(y)e(times\))h(and)g(the)i
+(normalized)d(database)i(approac)o(h)f(where)i(eac)o(h)p 177
+2717 709 2 v 223 2744 a Ff(3)241 2756 y Fh(The)f(fact)g(that)g(these)g
+(faults)f(are)h(listed)g(here)g(do)q(es)f(not)h(mean)g(that)g(the)g(author)f
+(has)h(eliminated)d(them)j(in)g(his)h(o)o(wn)f(w)o(ork.)177
+2795 y(Rather,)d(it)g(is)g(mainly)f(the)h(author's)e(o)o(wn)i(mistak)o(es)f
+(that)g(ha)o(v)o(e)h(resulted)e(in)i(this)g(list)g(b)q(eing)f(compiled.)12
+b(The)c(author)f(immediate)o(ly)177 2835 y(confesses)j(to)h(sev)o(eral)f(of)h
+(the)g(faults)f(listed)g(here,)h(most)f(notably)f(that)i(of)g(P)o(a)o(vlo)o
+(v)f(do)q(cumen)o(tat)o(ion)o(.)1042 2940 y Fr(50)p eop
+%%Page: 51 52
+51 51 bop 295 42 a Fr(fact)17 b(is)f(giv)o(en)g(at)g(only)g(one)g(p)q(oin)o
+(t,)g(and)h(the)g(reader)g(is)g(left)f(to)g(\014gure)h(out)f(the)h
+(implications)295 91 y(throughout)d(the)h(do)q(cumen)o(t.)295
+164 y Fo(P)o(a)o(vlo)o(v)d(do)q(cumen)o(tation:)i Fr(By)f(placing)e(so)h(m)o
+(uc)o(h)f(emphasis)g(on)h(the)g(do)q(cumen)o(tation,)f(F)m(un-)295
+214 y(nelW)m(eb)16 b(naturally)g(pro)o(vides)h(slots)f(where)i(do)q(cumen)o
+(tation)d(\\should")h(go.)25 b(F)m(or)17 b(example,)e(a)295
+264 y(F)m(unnelW)m(eb)h(user)i(ma)o(y)d(feel)h(that)h(there)h(ma)o(y)c(b)q(e)
+j(a)g(rather)g(unpleasan)o(t)g(gap)f(b)q(et)o(w)o(een)i(a)e
+Fl(@C)295 314 y Fr(mark)o(er)g(and)h(the)g(follo)o(wing)d(macro.)25
+b(In)17 b(man)o(y)e(cases)j Fm(no)f Fr(commen)o(tary)e(is)h(needed)i(and)f
+(the)295 363 y(zone)c(is)f(b)q(etter)i(left)e(blank)g(rather)h(than)g(b)q
+(eing)f(\014lled)g(with)g(the)h(kind)e(of)h(uninformativ)o(e)e(w)o(a\017e)295
+413 y(one)17 b(often)h(\014nds)f(\014lling)e(the)j(slots)f(of)g(structured)i
+(do)q(cumen)o(tation)d(written)h(according)g(to)g(a)295 463
+y(military)10 b(standards)k(\(e.g.)e(MIL-STD-2167A\).)1067
+448 y Fg(4)1097 463 y Fr(The)h(lesson)h(is)e(to)h(add)g(do)q(cumen)o(tation)e
+(only)295 513 y(when)h(it)e(adds)i(something.)j(The)d(lesson)f(in)g(Strunk)g
+(and)g(White)p Fo([Strunk79])e Fr(\(p.)i(23\))f(holds)h(for)295
+563 y(program)i(do)q(cumen)o(tation)f(as)i(it)g(do)q(es)g(for)g(other)g
+(writing:)k(\\Vigorous)13 b(writing)g(is)h(concise.)19 b(A)295
+613 y(sen)o(tence)14 b(should)d(con)o(tain)g(no)f(unnecessary)k(w)o(ords,)d
+(a)g(paragraph)g(no)g(unnecessary)j(sen)o(tences,)295 662 y(for)h(the)g(same)
+f(reason)h(that)f(a)h(dra)o(wing)f(should)g(ha)o(v)o(e)g(no)h(unnecessary)i
+(lines)d(and)h(a)f(mac)o(hine)295 712 y(no)g(unnecessary)i(parts.)j(This)13
+b(requires)j(not)d(that)h(the)h(writer)f(mak)o(e)f(all)f(his)i(sen)o(tences)j
+(short,)295 762 y(or)d(that)f(he)h(a)o(v)o(oid)f(all)f(detail)h(and)g(treat)i
+(his)e(sub)r(jects)j(only)c(in)h(outline,)g(but)h(that)f(ev)o(ery)i(w)o(ord)
+295 812 y(tell.".)295 885 y Fo(Duplicate)10 b(do)q(cumen)o(tation)o(:)15
+b Fr(Where)d(the)g(programmer)d(is)i(generating)g(pro)q(duct)h(\014les)g
+(that)295 935 y(m)o(ust)17 b(exist)g(on)g(their)h(o)o(wn)f(within)f(the)i(en)
+o(tire)g(programming)c(en)o(vironmen)o(t)i(\(e.g.)h(the)h(case)295
+984 y(of)f(a)h(programmer)d(in)j(a)f(team)g(who)h(is)f(using)h(F)m(unnelW)m
+(eb)f(for)g(his)h(o)o(wn)g(b)q(ene\014t)h(but)f(m)o(ust)295
+1034 y(generate)c(\(sa)o(y\))f(commen)o(ted)e(Ada)i(sp)q(eci\014cation)g(pac)
+o(k)n(age)f(\014les\))i(there)g(is)e(a)h(tendency)h(for)e(the)295
+1084 y(commen)o(ts)k(in)h(the)h(target)f(co)q(de)h(to)g(duplicate)f(the)h
+(commen)o(tary)d(in)i(the)h(F)m(unnelW)m(eb)f(text.)295 1134
+y(This)11 b(ma)o(y)e(or)i(ma)o(y)e(not)i(b)q(e)h(a)f(problem,)f(dep)q(ending)
+h(on)g(the)h(exact)f(situation.)17 b(Ho)o(w)o(ev)o(er,)11 b(if)g(this)295
+1184 y(is)g(happ)q(ening,)g(it)g(is)f(certainly)h(w)o(orth)g(the)h
+(programmer)c(sp)q(ending)k(some)e(time)g(deciding)g(if)g(one)295
+1233 y(or)j(other)g(of)f(the)h(F)m(unnelW)m(eb)f(or)h(inline-comm)o(en)o(t)d
+(do)q(cumen)o(tation)i(should)g(b)q(e)h(discarded.)19 b(In)295
+1283 y(man)o(y)11 b(cases,)j(a)e(mixture)g(can)g(b)q(e)i(used,)f(with)f(the)h
+(F)m(unnelW)m(eb)f(do)q(cumen)o(tation)g(referring)h(the)295
+1333 y(reader)i(to)f(the)h(inline)e(commen)o(ts)f(where)j(they)f(are)g
+(presen)o(t.)20 b(F)m(or)14 b(example:)177 1443 y Fl(@A)22
+b(Here)f(is)g(the)g(header)g(comment)f(for)h(the)g(list)g(package)g
+(specification.)177 1493 y(The)g(reader)g(should)f(read)h(these)g(comments)f
+(carefully)g(as)i(they)f(define)f(a)i(list.)177 1542 y(There)f(is)g(no)h
+(need)f(to)g(duplicate)f(the)h(comments)f(in)i(this)f(text.)177
+1642 y(@$@<Specification)d(package)j(header)f(comments@>==@{@-)177
+1692 y(--)i(LIST)f(PACKAGE)177 1742 y(--)h(============)177
+1792 y(--)g(*)f(A)h(LIST)f(consists)f(of)h(zero)g(or)h(more)f(ITEMS.)177
+1841 y(--)h(*)f(The)g(items)g(are)g(numbered)f(1)i(to)f(N)h(where)f(N)g(is)h
+(the)f(number)f(of)i(items)f(in)g(the)g(list.)177 1891 y(--)h(*)f(If)h(the)f
+(list)g(is)g(non-empty,)f(item)h(1)g(is)h(called)e(the)h(HEAD)g(of)h(the)f
+(list.)177 1941 y(--)h(*)f(If)h(the)f(list)g(is)g(non-empty,)f(item)h(N)g(is)
+h(called)e(the)h(TAIL)g(of)h(the)f(list.)177 1991 y(--)h(...)177
+2041 y(@})295 2150 y Fo(Ov)o(erdo)q(cumen)o(tin)o(g:)c Fr(Another)e(evil)f
+(that)g(can)g(arise)h(when)f(using)g(F)m(unnelW)m(eb)g(is)g(to)g(o)o(v)o(er-)
+295 2200 y(do)q(cumen)o(t)j(the)h(target)g(program.)29 b(In)19
+b(some)e(of)h(Kn)o(uth's)g(earlier)h(\(e.g.)e(1984\))h(examples)f(of)295
+2250 y(literate)11 b(programming,)d(eac)o(h)j(v)n(ariable)f(is)h(giv)o(en)f
+(its)h(o)o(wn)f(description)i(and)e(eac)o(h)i(piece)g(of)e(co)q(de)295
+2300 y(has)16 b(a)f(detailed)g(explanation.)22 b(This)16 b(lev)o(el)f(of)g
+(analysis,)f(while)h(justi\014ed)h(for)f(tric)o(ky)h(tracts)g(of)295
+2350 y(co)q(de,)d(is)f(probably)g(not)g(w)o(arran)o(ted)h(for)f(most)f(of)h
+(the)h(co)q(de)g(that)f(constitutes)i(most)d(programs.)295
+2400 y(Suc)o(h)18 b(o)o(v)o(er-commen)o(ting)d(can)j(ev)o(en)g(ha)o(v)o(e)f
+(the)h(detrimen)o(tal)f(a\013ect)h(of)f(obscuring)h(the)g(co)q(de,)295
+2449 y(making)11 b(it)h(hard)h(to)g(understand)h(b)q(ecause)h(it)d(is)h(so)g
+(scattered)i(\(see)f(\\spaghetti)f(organization")295 2499 y(earlier\).)18
+b(It)12 b(is)g(up)g(to)g(the)h(user)g(to)f(decide)h(when)f(a)g(stretc)o(h)i
+(of)d(just)i(a)e(few)i(lines)f(of)f(co)q(de)i(should)295 2549
+y(b)q(e)i(pulled)e(to)h(bits)g(and)g(analysed)f(and)h(when)h(it)e(is)h
+(clearer)h(to)f(lea)o(v)o(e)f(it)h(alone.)295 2622 y(In)i(the)g(case)g(where)
+h(there)g(are)e(a)h(few)f(rather)h(tric)o(ky)g(lines)f(of)g(co)q(de,)h(a)f
+(detailed)h(explanation)295 2672 y(ma)o(y)10 b(b)q(e)j(appropriate.)k(The)12
+b(follo)o(wing)e(example)g(con)o(tains)i(a)f(solution)g(to)h(a)g(problem)e
+(outlined)295 2722 y(in)k(section)g(16.3)f(of)g(the)h(b)q(o)q(ok)g(\\The)g
+(Science)h(of)e(Programming")d(b)o(y)k(Da)o(vid)e(Gries)p Fo([Gries81])295
+2771 y Fr(.)p 177 2796 709 2 v 223 2823 a Ff(4)241 2835 y Fh(Note:)j(This)c
+(is)h(not)e(a)i(criticism)d(of)i(2167A,)g(only)f(of)i(the)e(w)o(a)o(y)i(it)f
+(is)h(sometimes)d(used.)1042 2940 y Fr(51)p eop
+%%Page: 52 53
+52 52 bop 177 42 a Fl(@C@<Calculation)19 b(of)i(the)g(longest)g(plateau)f(in)
+h(array)g(b@>)177 141 y(This)g(section)f(contains)h(a)g(solution)f(to)i(a)f
+(problem)g(outlined)f(in)h(section)g(16.3)f(of)177 191 y(the)h(book)g(@/The)g
+(Science)f(of)i(Programming@/)d(by)i(David)g(Gries[Gries81].)177
+291 y(@D)h(Given)e(a)i(sorted)e(array)h(@{b[1..N]@})f(of)h(integers,)f(we)h
+(wish)g(to)h(determine)e(the)177 340 y(@/length@/)g(of)h(the)g(longest)g(run)
+g(of)g(identically)f(valued)g(elements)h(in)g(the)g(array.)177
+390 y(This)g(problem)f(is)i(defined)e(by)i(the)f(following)f(precondition)f
+(and)i(postcondition.)177 490 y(@$@<Precondition@>)o(==@{/)o(*)e(Pre:)i
+(sorted\(b\).)f(*/@})177 540 y(@$@<Postcondition@)o(>==@{)o(@-)177
+589 y(/*)i(Post:)e(sorted\(b\))g(and)h(p)h(is)f(the)h(length)e(of)h(the)h
+(longest)e(run)h(in)h(b[1..N].)e(*/@})177 689 y(@D)i(We)f(approach)f(a)i
+(solution)e(to)h(the)g(problem)g(by)g(deciding)f(to)i(try)f(the)g(approach)f
+(of)177 739 y(scanning)g(through)h(the)g(array)g(one)g(element)f(at)h(a)h
+(time)f(maintaining)f(a)h(useful)177 789 y(invariant)f(through)g(each)h
+(iteration.)f(A)i(loop)f(variable)177 839 y(array)g(index)g(@{i@})f(is)i
+(created)e(for)h(this)g(purpose.)f(The)i(bound)e(function)h(is)177
+888 y(@{N-i@}.)f(Here)h(is)h(the)f(invariant.)177 988 y(@$@<Invariant@>==@)o
+({@-)177 1038 y(/*)h(Invariant:)d(sorted\(b\))h(and)h(1<=i<=N)g(and)239
+b(*/)177 1088 y(/*)261 b(p)22 b(is)f(len)g(of)h(longest)e(run)h(in)h
+(b[1..i].)e(*/@})177 1187 y(@D)i(Establishing)d(the)i(invariant)f(above)h(in)
+g(the)g(initial,)f(degenerate)g(case)h(is)g(easy.)177 1287
+y(@$@<Establish)e(the)i(plateau)g(loop)g(invariant)f(initially@>==@{i)o(=1;)f
+(p=1;@})177 1386 y(@D)j(At)f(this)g(stage,)f(we)i(have)f(the)g(following)f
+(loop)h(structure.)f(Note)h(that)g(when)f(both)177 1436 y(the)h(invariant)f
+(and)h(@{i)h(!=)f(N@})g(are)g(true,)g(the)g(postcondition)e(holds)i(and)g
+(the)g(loop)177 1486 y(can)g(terminate.)177 1586 y(@$@<Set)g(p)g(to)g(the)h
+(length)e(of)i(the)f(longest)f(plateau)g(in)i(sorted)e(array)h
+(b[1..N]@>==@{@-)177 1636 y(@<Precondition@>)177 1685 y(@<Establish)f(the)h
+(plateau)f(loop)h(invariant)f(initially@>)177 1735 y(while)h(\(i)g(!=)h(N\))
+221 1785 y({)243 1835 y(@<Invariant@>)243 1885 y(@<Loop)e(body@>)221
+1934 y(})177 1984 y(@<Postcondition@>)177 2034 y(@})177 2134
+y(@D)i(Now)f(there)f(remains)h(only)g(the)g(loop)g(body)g(whose)g(sole)g
+(task)g(is)g(to)g(increase)f(@{i@})177 2183 y(\(and)h(so)h(decrease)e(the)h
+(value)g(of)g(the)g(bound)g(function\))f(while)h(maintaining)e(the)177
+2233 y(invariant.)h(If)h(@{p@})g(is)g(the)h(length)e(of)i(the)f(longest)f
+(run)177 2283 y(seen)h(so)h(far)f(\(i.e.)f(in)i(b[1..i]\),)e(then,)h(because)
+f(the)h(array)g(is)g(sorted,)177 2333 y(the)g(extension)f(of)i(our)f(array)g
+(range)f(to)177 2383 y(@{b[1..i+1]@})f(can)i(only)g(result)g(in)g(an)h
+(increase)e(in)h(@{p@})g(if)g(the)h(new)f(element)177 2433
+y(terminates)f(a)h(run)h(of)f(length)g(@{p+1@}.)f(The)h(increase)f(can)h(be)h
+(at)f(most)g(1.)g(Because)177 2482 y(the)g(array)g(is)g(sorted,)g(we)g(need)
+177 2532 y(only)g(compare)f(the)i(endpoints)e(of)h(this)g(possible)f(run)h
+(to)h(see)f(if)g(it)h(exists.)e(This)177 2582 y(is)i(performed)d(as)j(shown)f
+(below.)177 2682 y(@$@<Loop)f(body@>==@{i++;)f(if)j(\(b[i])e(!=)i(b[i-p]\))e
+(p++;@})295 2827 y Fr(Where)15 b(the)f(co)q(de)h(is)f(more)f(ob)o(vious,)f
+(it)i(is)g(often)g(b)q(etter)h(to)f(let)g(the)g(co)q(de)h(sp)q(eak)g(for)e
+(itself.)1042 2940 y(52)p eop
+%%Page: 53 54
+53 53 bop 177 42 a Fl(@C)22 b(The)f(following)f(function)g(compares)g(two)h
+(C~strings)f(and)h(returns)g(TRUE)g(iff)g(they)177 91 y(are)g(identical.)177
+191 y(@$@<Function)e(comp@>==@{@-)177 241 y(bool)i(comp\(p,q\))177
+291 y(char)g(*p,*q;)177 340 y({)199 390 y(while)g(\(TRUE\))243
+440 y({)264 490 y(if)h(\(*p)f(!=)g(*q)43 b(\))22 b(return)f(FALSE;)264
+540 y(if)h(\(*p)f(==)g('\\0'\))g(return)g(TRUE;)264 589 y(p++;)g(q++;)243
+639 y(})177 689 y(})177 739 y(@})177 932 y Fi(2.12)70 b(Wholistic)20
+b(Debugging)177 1062 y Fr(Surprising)f(though)f(it)g(ma)o(y)e(b)q(e,)k(F)m
+(unnelW)m(eb)e(has)g(a)h(k)o(ey)f(role)g(to)h(pla)o(y)e(in)h(the)h
+Fm(debugging)h Fr(of)d(programs.)177 1112 y(Long)12 b(exp)q(erience)i(in)e
+(programming)d(has)k(led)f(me)f(to)h(the)h(concept)h(of)e Fo(wholistic)f
+(debugging)p Fr(.)j(When)f(most)177 1162 y(programmers)g(detect)j(a)e(bug,)g
+(their)g(\014rst)h(reaction)g(seems)g(to)f(b)q(e)h(to)f(jump)f(in)o(to)h(the)
+h(debugger)g(where)g(they)177 1212 y(often)f(sp)q(end)h(man)o(y)e(hours)h
+(stepping)h(through)f(endless)h(stretc)o(hes)i(of)c(co)q(de)i(and)f
+(generally)g(w)o(asting)f(a)h(lot)f(of)177 1261 y(time.)177
+1346 y(In)j(con)o(trast,)g(m)o(y)d(\014rst)j(reaction)g(when)g(I)f(detect)i
+(a)e(bug)h(is)f(to)g(realize)h(that)f Fm(the)h(c)n(o)n(de)h(must)f(not)h(b)n
+(e)f(in)g(go)n(o)n(d)177 1396 y(enough)j(shap)n(e)g(if)f(such)g(a)g(bug)h(c)n
+(an)f(arise.)28 b Fr(The)18 b(presence)i(of)d(the)h(bug)f(is)g(tak)o(en)g(as)
+h(symptomatic)c(of)j(the)177 1446 y(lac)o(k)g(of)f(general)i(health)f(of)f
+(the)i(co)q(de.)29 b(If)17 b(that)g(bug)g(o)q(ccurred,)i(wh)o(y)e(not)g
+(another?)28 b(In)18 b(resp)q(onse)h(to)e(this)177 1495 y(realization,)12
+b(m)o(y)f(reaction)i(is)g(not)g(to)g(en)o(ter)h(the)f(debugger,)g(but)h
+(rather)f(to)g(return)h(to)f(the)g(original)e(co)q(de)j(and)177
+1545 y(tend)k(it)e(lik)o(e)h(a)f(garden,)i(adding)e(more)g(commen)o(ts,)f
+(rew)o(orking)i(the)h(grott)o(y)e(bits,)i(adding)e(assertions,)i(and)177
+1595 y(lo)q(oking)d(for)h(faults.)26 b(In)16 b(man)o(y)f(cases,)j(the)f
+(searc)o(h)h(for)e(faults)g(do)q(es)h(not)f(ev)o(en)h(cen)o(tre)i(on)d(the)h
+(sp)q(eci\014c)h(bug)177 1645 y(that)c(arose,)g(but)g(do)q(es)h(tend)f(to)g
+(fo)q(cus)g(on)g(the)h(area)f(of)f(co)q(de)i(where)g(the)f(bug)g(is)g(lik)o
+(ely)e(to)i(b)q(e.)177 1729 y(The)h(result)g(is)f(often)g(that)h(the)g
+(original)d(bug)i(is)h(lo)q(cated)f(more)f(quic)o(kly)h(than)g(it)g(w)o(ould)
+f(ha)o(v)o(e)i(b)q(een)g(had)f(the)177 1779 y(debugger)i(b)q(een)h(in)o(v)o
+(olv)o(ed.)k(But)16 b(ev)o(en)f(if)g(it)g(isn't,)g(there)h(are)g(other)g(b)q
+(ene\014ts.)24 b(A)15 b(programmer)e(who)i(en)o(ters)177 1829
+y(the)g(debugger)f(ma)o(y)e(sta)o(y)i(there)i(for)d(hours)h(and)g(still)f
+(not)h(\014nd)g(the)h(bug.)j(The)c(result)h(is)e(frustration)h(and)g(no)177
+1879 y(p)q(ositiv)o(e)c(gain)g(at)g(all.)15 b(In)c(con)o(trast,)g(b)o(y)f
+(tending)g(to)g(the)h(co)q(de,)h(the)f(programmer)d(is)i(making)e(forw)o(ard)
+i(progress)177 1929 y(at)15 b(all)f(times)h(\(the)h(co)q(de)g(is)f(constan)o
+(tly)g(impro)o(ving\))e(ev)o(en)j(if)f(the)h(bug)f(is)g(not)g(immediately)d
+(found.)22 b(A)o(t)15 b(the)177 1979 y(end)i(of)e(ten)i(hours,)g(the)g
+(programmer)d(can)i(at)g(least)g(feel)h(that)f(the)h(co)q(de)g(is)f(\\ten)g
+(hours)h(b)q(etter",)g(whereas)177 2028 y(the)e(debugger)h(freak)e(will)f
+(lik)o(ely)g(feel)i(defeated.)21 b(All)13 b(this)i(mak)o(es)e(co)q(de)i
+(tending)g(b)q(etter)h(psyc)o(hologically)d(as)177 2078 y(w)o(ell)g(as)h(a)g
+(more)f(e\016cien)o(t)h(approac)o(h)g(to)g(debugging.)177 2163
+y(I)19 b(call)f(this)h(tec)o(hnique)g(wholistic)f(debugging,)h(for)f(it)h(is)
+f(lik)o(e)g(the)i(di\013erence)g(b)q(et)o(w)o(een)g(con)o(v)o(en)o(tional)e
+(and)177 2213 y(wholistic)d(medicine.)20 b(Go)15 b(to)g(a)f(con)o(v)o(en)o
+(tional)g(do)q(ctor)i(with)f(a)f(headac)o(he)i(and)f(he)h(migh)o(t)d(send)j
+(o\013)f(for)f(head)177 2262 y(X-ra)o(ys,)20 b(p)q(erform)e(allergy)g(tests)i
+(and)f(p)q(erform)f(man)o(y)f(other)i(debugging)f(activities.)33
+b(Go)18 b(to)h(a)f(wholistic)177 2312 y(do)q(ctor)e(with)f(the)g(same)f
+(problem)g(and)h(he)h(migh)o(t)d(lo)q(ok)h(to)h(see)h(if)e(y)o(ou)h(are)g
+(\014t,)g(assess)i(y)o(our)e(men)o(tal)e(health,)177 2362 y(and)i(ask)h(y)o
+(ou)f(if)f(y)o(our)i(marriage)d(is)j(w)o(orking.)21 b(Both)16
+b(approac)o(hes)g(are)g(appropriate)f(at)h(di\013eren)o(t)g(times.)22
+b(In)177 2412 y(programming,)10 b(the)k(wholistic)g(approac)o(h)f(is)h(not)g
+(used)h(enough.)177 2605 y Fi(2.13)70 b(Examples)22 b(of)h(F)-6
+b(unnelW)g(eb)23 b(Applications)177 2735 y Fr(Despite)16 b(\(or)g(p)q(erhaps)
+g(b)q(ecause)i(of)s(\))d(its)g(\015exibilit)o(y)f(and)h(simplicit)o(y)m(,)e
+(F)m(unnelW)m(eb)i(can)g(b)q(e)i(applied)d(to)i(quite)177 2785
+y(a)f(n)o(um)o(b)q(er)f(of)h(di\013eren)o(t)h(text)g(pro)q(cessing)g(and)f
+(do)q(cumen)o(ting)f(problems.)21 b(This)15 b(section)h(describ)q(es)h(some)d
+(of)177 2835 y(the)h(more)e(in)o(teresting)h(real)g(problems)f(that)h(F)m
+(unnelW)m(eb)f(has)h(solv)o(ed.)1042 2940 y(53)p eop
+%%Page: 54 55
+54 54 bop 177 42 a Fd(2.13.1)55 b(Analyzing)19 b(the)f(Monster)g(P)n
+(ostscript)h(Header)f(File)177 141 y Fr(During)c(m)o(y)e(Ph.D.)h
+(candidature,)h(I)g(determined)g(at)g(one)g(p)q(oin)o(t)g(that)g(it)g(w)o
+(ould)f(b)q(e)i(v)o(ery)f(desirable)g(to)g(auto-)177 191 y(matically)f
+(insert)j(diagrams)d(from)h(the)i Fm(MacDr)n(aw)g Fr(program)e(on)h(m)o(y)f
+(Macin)o(tosh)h(in)o(to)g(T)1627 200 y(E)1650 191 y(X)g Fl(insert)p
+Fr(ions)f(in)177 240 y(m)o(y)e(thesis.)20 b(This)14 b(w)o(ould)f(allo)o(w)f
+(diagrams)g(to)i(\015oat)f(around)h(with)g(the)h(text)f(and)g(b)q(e)h(prin)o
+(ted)f(automatically)177 290 y(rather)k(than)f(ha)o(ving)g(to)g(b)q(e)g(prin)
+o(ted)h(separately)g(and)f(stuc)o(k)h(in)f(with)g(real)g(glue.)27
+b(On)18 b(the)g(face)f(of)g(it,)g(the)177 340 y(problem)c(seemed)i(inheren)o
+(tly)g(solv)n(able)e(as)i(the)g(Macin)o(tosh)g(could)f(generate)i(P)o
+(ostScript)f(for)f(eac)o(h)h(diagram)177 390 y(and)f(this)g(P)o(ostScript)h
+(could)e(presumably)g(b)q(e)i(inserted)g(in)o(to)e(the)h(P)o(ostScript)h
+(generated)g(using)f(T)1768 399 y(E)1791 390 y(X.)177 462 y(The)19
+b(only)e(trouble)h(w)o(as)g(that)g(the)h(Macin)o(tosh)f(P)o(ostScript)h(co)q
+(de)g(for)f(the)g(diagrams)f(relied)h(on)g(an)g(Apple)177 512
+y(P)o(ostScript)d(header)f(\014le.)k(This)c(mean)o(t)f(that)g(the)i(header)g
+(\014le)e(had)h(to)f(b)q(e)i(included)f(at)f(the)i(start)f(of)f(the)i(T)1895
+521 y(E)1918 512 y(X)177 562 y(P)o(ostScript)d(if)d(the)j(inserted)g(P)o
+(ostScript)f(for)f(the)h(diagrams)e(w)o(as)i(to)f(w)o(ork.)17
+b(Unfortunately)m(,)10 b(merely)g(including)177 612 y(the)17
+b(header)g(\014le)f(at)g(the)g(top)g(didn't)f(w)o(ork,)h(and)g(it)g(turned)h
+(out)e(that)i(a)e(rather)i(detailed)f(analysis)f(of)h(some)177
+662 y(parts)d(of)e(the)h(Apple)g(header)h(\014le)f(w)o(as)g(required)h(in)e
+(order)i(to)e(p)q(erform)g(the)i(necessary)h(surgery)f(on)e(the)i(header)177
+712 y(\014le)h(to)f(mak)o(e)f(it)h(w)o(ork.)18 b(This)13 b(analysis)g(w)o(as)
+g(sev)o(erely)i(aggra)o(v)n(ated)e(b)o(y)g(the)h(fact)g(that)f(the)h(P)o
+(ostScript)h(header)177 761 y(\014le)f(w)o(as)g(virtually)e(unreadable.)18
+b(Basically)13 b(it)h(w)o(as)f(ab)q(out)h(50K)g(of)f(in)o(terw)o(o)o(v)o(en)g
+(de\014nitions,)h(that)g(lo)q(ok)o(ed)f(as)177 811 y(if)f(it)g(had)g(b)q(een)
+i(run)f(through)f(a)g(w)o(ord)h(pro)q(cessor.)19 b(There)14
+b(w)o(as)e(no)g(w)o(a)o(y)g(that)h(the)g(co)q(de)g(could)f(b)q(e)i(understo)q
+(o)q(d)177 861 y(clearly)g(without)f(some)g(kind)g(of)h(reformatting.)i(Tw)o
+(o)d(other)i(asp)q(ects)g(of)e(the)i(problem)d(further)j(complicated)177
+911 y(the)g(analysis:)239 1019 y Fq(\017)21 b Fr(The)12 b(de\014nitions)h(of)
+e(in)o(terest)i(\(i.e.)f(the)g(ones)h(causing)f(the)h(problems\))e(w)o(ere)i
+(scattered)h(throughout)e(the)281 1069 y(\014le.)239 1150 y
+Fq(\017)21 b Fr(Man)o(y)c(de\014nitions)h(could)g(not)g(b)q(e)h(mo)o(v)o(ed.)
+28 b(F)m(or)18 b(one)g(or)g(more)f(reasons)i(\(e.g.)e(to)h(k)o(eep)h(a)e
+(de\014nition)281 1200 y(within)e(the)h(activ)n(ation)f(of)g(a)h(particular)f
+(dictionary)h Fl(begin)e Fr(and)i Fl(end)p Fr(\))f(it)h(w)o(ould)f(ha)o(v)o
+(e)h(b)q(een)h(un)o(wise)281 1250 y(to)d(mo)o(v)o(e)e(the)i(de\014nitions)g
+(of)g(in)o(terest)h(to)e(the)i(same)e(p)q(oin)o(t)g(in)h(the)g(\014le.)177
+1358 y(In)f(fact)g(the)h(\014le)f(w)o(as)g(so)g(messy)g(and)g(complicated)f
+(that,)g(as)i(a)e(rule,)h(it)g(had)g(to)g(b)q(e)h(handled)f(with)f(kid)h(glo)
+o(v)o(es.)177 1408 y(It)h(w)o(ould)f(ha)o(v)o(e)h(b)q(een)h(un)o(wise)f(to)g
+(re-arrange)g(the)h(de\014nitions)f(or)g(to)f(insert)i(commen)o(ts.)177
+1481 y(T)m(o)j(m)o(y)f(surprise,)k(F)m(unnelW)m(eb)d(pro)o(vided)g(an)h
+(unexp)q(ected)i(solution)c(to)i(the)g(problem.)31 b(First)19
+b(I)g(replaced)177 1531 y(all)e(o)q(ccurrences)j(of)d(the)i
+Fl(@)e Fr(in)g(the)h(header)h(\014le)f(with)f Fl(@@)p Fr(.)29
+b(Second,)19 b(I)e(placed)h(the)g(en)o(tire)h(header)f(\014le)g(in)f(a)177
+1580 y(F)m(unnelW)m(eb)d(macro)f(de\014nition)h(connected)j(to)d(a)g(pro)q
+(duct)h(\014le.)20 b(I)14 b(then)i(pro)q(cessed)g(the)f(\014le)g(and)f(c)o
+(hec)o(k)o(ed)i(to)177 1630 y(mak)o(e)f(sure)i(that)g(the)f(pro)q(duct)i
+(\014le)e(w)o(as)g(iden)o(tical)g(to)g(the)h(original)d(\014le.)25
+b(By)17 b(doing)e(all)g(this)h(I)g(had)h(placed)177 1680 y(the)f(header)g
+(\014le)g(under)g(F)m(unnelW)m(eb)e(con)o(trol.)22 b(I)16 b(then)f(left)g
+(the)h(macro)e(de\014nition)h(largely)g(un)o(touc)o(hed,)h(but)177
+1730 y(replaced)21 b(the)f(P)o(ostScript)g(de\014nitions)f(of)g(in)o(terest)i
+(with)e(F)m(unnelW)m(eb)g(macro)f(calls,)i(mo)o(ving)d(the)j(actual)177
+1780 y(P)o(ostScript)15 b(de\014nitions)f(in)o(to)f(F)m(unnelW)m(eb)g(macro)g
+(de\014nitions)h(at)g(the)g(end)g(of)g(the)g(F)m(unnelW)m(eb)g(\014le.)177
+1888 y Fl(@O@<LaserHeader.ps)o(@>==@)o({@-)177 1938 y(Unreadable)20
+b(Postscript)g(code)177 1988 y(@<Print)h(routine@>)177 2038
+y(Unreadable)f(Postscript)g(code)177 2087 y(@<Zap)h(routine@>)177
+2137 y(Unreadable)f(Postscript)g(code)177 2187 y(@})177 2287
+y(@A)i(This)f(routine)f(looks)h(as)g(if)g(it)h(does)f(this,)f(but)i(really)e
+(is)i(does)f(that,)177 2337 y(blah,)g(blah)g(blah.)177 2436
+y(@$@<Print)f(routine@>==@{@-)177 2486 y(/print)h({)g(push)g(pop)g(pop)h
+(push)f(turn)g(around)f(and)h(jump)g(up)h(and)f(down)g(and)g(print)g(it})g
+(def)177 2536 y(@})177 2635 y(@A)h(This)f(routine)f(zaps)h(the...)177
+2735 y(@$@<Zap)g(routine@>==@{@-)177 2785 y(/zap)g({)h(push)f(pop)g(pop)g
+(push)g(turn)g(around)g(and)g(jump)g(up)g(and)g(down)g(and)g(print)g(it})g
+(def)177 2835 y(@})1042 2940 y Fr(54)p eop
+%%Page: 55 56
+55 55 bop 177 42 a Fr(Use)19 b(of)f(F)m(unnelW)m(eb)g(mean)o(t)f(that)h(I)g
+(w)o(as)h(able)f(to)g(pluc)o(k)g(out)g(the)h(de\014nitions)f(of)g(in)o
+(terest)h(\(a)f(v)o(ery)h(small)177 91 y(part)g(of)e(the)i(whole)g(\014le\))f
+(and)g(collect)h(them)f(as)g(a)g(group)g(at)h(the)g(end)f(of)g(the)h(\014le)g
+(where)g(they)g(could)f(b)q(e)177 141 y(studied.)g(Because)13
+b(eac)o(h)f(de\014nition)e(w)o(as)i(safely)e(con)o(tained)i(in)e(a)h(macro,)f
+(it)h(w)o(as)g(p)q(ossible)g(to)g(write)h(a)f(detailed)177
+191 y(commen)o(tary)i(of)i(eac)o(h)g(routine)h(without)e(fear)i(of)e
+(a\013ecting)i(the)f(\014nal)g(P)o(ostScript)h(co)q(de)g(in)e(an)o(y)h(w)o(a)
+o(y)f(at)h(all.)177 241 y(Once)h(this)f(analysis)e(w)o(as)i(completed,)f(it)g
+(w)o(as)g(p)q(ossible)h(to)g(p)q(erform)e(surgery)j(on)e(the)i(o\013ending)e
+(P)o(ostScript)177 291 y(de\014nitions)k(in)f(an)h(extremely)f(con)o(trolled)
+h(w)o(a)o(y)m(.)28 b(In)18 b(particular,)g(the)h(F)m(unnelW)m(eb)e(input)g
+(\014le)h(serv)o(ed)h(as)f(a)177 340 y(rep)q(ository)f(for)g(all)e(the)i
+(di\013eren)o(t)h(v)o(ersions)f(of)f(particular)g(routines)h(that)g(w)o(ere)g
+(tried)g(in)g(order)g(to)f(get)h(the)177 390 y(de\014nitions)g(to)g(w)o(ork.)
+27 b(A)17 b(new)g(\()p Fo(Z)p Fr(ero\))h(macro)d(w)o(as)i(created)i(for)d
+(eac)o(h)i(v)o(ersion)f(of)f(eac)o(h)i(de\014nition,)e(and)h(a)177
+440 y(commen)o(tary)12 b(of)h(ho)o(w)h(it)f(p)q(erformed)h(added)g(ab)q(o)o
+(v)o(e)f(it.)177 516 y(This)e(case)g(demonstrates)h(that)e(F)m(unnelW)m(eb)g
+(is)h(an)g(extremely)f(p)q(o)o(w)o(erful)g(to)q(ol)g(for)g(dissecting)i(and)e
+(do)q(cumen)o(t-)177 566 y(ing)15 b(cryptic)h(text)g(\014les.)22
+b(Through)16 b(the)g(use)g(of)e(macros,)h(particular)g(parts)h(of)e(the)i
+(\014le)g(can)f(b)q(e)h(isolated)f(and)177 616 y(discussed)i(without)e
+(a\013ecting)g(the)h(\014nal)f(pro)q(duct)h(\014le)f(in)g(an)o(y)f(w)o(a)o(y)
+m(.)21 b(In)15 b(the)h(example)e(ab)q(o)o(v)o(e,)h(only)f(a)h(small)177
+665 y(part)d(of)f(the)i(\014le)e(w)o(as)h(analysed,)f(the)i(rest)g(b)q(eing)e
+(left)h(as)g(a)f(blob,)g(but)h(in)g(the)g(general)g(case,)h(a)e(cryptic)h
+(text)h(\014le)177 715 y(could)i(b)q(e)g(inserted)h(in)o(to)e(F)m(unnelW)m
+(eb)g(and)h(then)g(incremen)o(tally)e(dissected)k(\(and)e(p)q(ossibly)f(mo)q
+(di\014ed\))g(un)o(til)177 765 y(the)k(result)g(is)g(a)f(fully)f(do)q(cumen)o
+(ted)h(literate)h(program.)27 b(That)17 b(this)g(can)h(b)q(e)g(done)f
+(without)g(a\013ecting)h(the)177 815 y(actual)c(pro)q(duct)g(\014le)g
+(demonstrates)h(the)f(high)f(degree)j(of)d(descriptiv)o(e)i(con)o(trol)e
+(that)h(F)m(unnelW)m(eb)g(pro)o(vides.)177 960 y Fd(2.13.2)55
+b(Making)19 b(Ada)g(ADTs)g(more)e(A)177 1063 y Fr(Lik)o(e)c(man)o(y)f(mo)q
+(dern)g(programming)e(languages,)j(Ada)g(pro)o(vides)h(mec)o(hanisms)d(for)i
+(hiding)f(information)f(and)177 1113 y(structure.)25 b(In)16
+b(particular,)f(Ada)g(pro)o(vides)h(a)f Fo(pac)o(k)m(age)h
+Fr(facilit)o(y)d(that)j(allo)o(ws)e(the)i(programmer)e(to)h(declare)177
+1163 y(ob)r(jects)g(in)e(a)g(pac)o(k)n(age)h(de\014nition)f(and)g(de\014ne)i
+(them)e(in)g(a)g(corresp)q(onding)i(pac)o(k)n(age)e(b)q(o)q(dy)m(.)k(This)d
+(w)o(orks)f(w)o(ell)177 1213 y(for)h(functions)g(and)g(pro)q(cedures.)20
+b(Ho)o(w)o(ev)o(er,)14 b(in)g(the)g(case)h(of)f(t)o(yp)q(es,)g(implemen)o
+(tation)d(issues)k(\(in)e(particular,)177 1262 y(the)h(need)h(to)e(kno)o(w)g
+(the)h(size)h(of)e(exp)q(orted)h(t)o(yp)q(es\))h(ha)o(v)o(e)e(led)h(the)g
+(designers)h(of)d(Ada)i(to)f(force)h(the)g(placemen)o(t)177
+1312 y(of)f(priv)n(ate)g(t)o(yp)q(e)g(de\014nitions)g(in)g(the)h
+(de\014nition)e(pac)o(k)n(age)h(rather)h(than)f(the)h(implemen)o(tatio)o(n)c
+(pac)o(k)n(age.)18 b(This)177 1362 y(means)12 b(that)h(some)g(implem)o(en)o
+(tation)d(details)j(are)g(presen)o(t)i(in)d(the)i(pac)o(k)n(age)f
+(de\014nition)f(for)h(all)f(to)h(see.)19 b(While)177 1412 y(not)i(actually)e
+(dangerous)i(\(the)h(user)g(of)d(the)j(pac)o(k)n(age)e(cannot)h(mak)o(e)e
+(use)i(of)f(the)h(information)d(without)177 1462 y(recourse)d(to)d(\\Chapter)
+h(13")f(of)g(the)i(Ada)e(Language)g(Reference)j(Man)o(ual)p
+Fo([DOD83])p Fr(\),)c(this)h(asp)q(ect)i(of)e(Ada)h(is)177
+1512 y(certainly)h(unpleasan)o(t.)177 1588 y(During)9 b(the)i(dev)o(elopmen)o
+(t)e(of)h(some)f(Ada)h(programs,)f(F)m(unnelW)m(eb)g(w)o(as)h(used)h(to)f
+(solv)o(e)g(this)g(problem.)15 b(Instead)177 1637 y(of)j(creating)i(a)e
+(separate)i(\014le)f(for)g(the)g(pac)o(k)n(age)g(sp)q(eci\014cation)h(and)e
+(pac)o(k)n(age)h(b)q(o)q(dy)m(,)g(a)g(single)f(F)m(unnelW)m(eb)177
+1687 y(\014le)h(w)o(as)f(created)i(con)o(taining)d(t)o(w)o(o)h(sections,)i
+(one)f(for)f(the)h(eac)o(h)g(pac)o(k)n(age)f(part.)31 b(The)19
+b(\\priv)n(ate")f(part)g(of)177 1737 y(the)h(pac)o(k)n(age)f(sp)q
+(eci\014cation)h(w)o(as)f(then)g(mo)o(v)o(ed)f(\(using)h(a)g(F)m(unnelW)m(eb)
+f(macro)g(de\014nition\))h(to)g(the)h(section)177 1787 y(describing)f(the)h
+(pac)o(k)n(age)e(b)q(o)q(dy)m(.)29 b(Readers)18 b(who)g(wished)g(only)e(to)i
+(read)g(the)g(pac)o(k)n(age)g(sp)q(eci\014cation)g(could)177
+1837 y(read)13 b(only)e(the)i(\014rst)g(part,)f(whic)o(h)g(con)o(tained)g(a)g
+(fully)e(do)q(cumen)o(ted)j(description)f(not)g(con)o(taining)f(the)i(priv)n
+(ate)177 1886 y(de\014nition.)177 2031 y Fd(2.13.3)55 b(Multiple)18
+b(Language)g(Systems)177 2135 y Fr(With)10 b(the)h(prev)n(alence)h(of)e(op)q
+(en)h(systems)g(and)f(m)o(ulti-v)o(endor)f(computing,)g(it)h(is)g(often)h
+(necessary)i(to)d(construct)177 2185 y(systems)20 b(consisting)g(of)f
+(programs)f(written)i(in)g(a)f(n)o(um)o(b)q(er)g(of)g(di\013eren)o(t)i
+(programmi)o(ng)c(languages)i(for)g(a)177 2234 y(n)o(um)o(b)q(er)c(of)f
+(di\013eren)o(t)j(systems.)22 b(F)m(or)15 b(example,)f(a)h(particular)g
+(functionalit)o(y)f(migh)o(t)f(b)q(e)j(implemen)o(ted)d(b)o(y)i(a)177
+2284 y(shellscript)k(\(in)o(v)o(ok)o(ed)e(b)o(y)g(the)h(user\))h(that)f
+(calls)f(a)h(C)f(program)f(that)i(mak)o(es)f(a)g(net)o(w)o(ork)h(connection)h
+(to)e(a)177 2334 y(P)o(ascal)e(program)f(that)h(queries)h(a)f(database.)23
+b(Quite)15 b(often)h(all)e(these)i(programs)e(m)o(ust)h(conspire)h(closely)f
+(to)177 2384 y(execute)k(their)e(function.)25 b(In)17 b(the)g(normal)d(case,)
+k(they)f(m)o(ust)f(b)q(e)h(written)g(separately)m(.)26 b(F)m(unnelW)m(eb)16
+b(allo)o(ws)177 2434 y(them)d(to)h(b)q(e)g(written)h(as)f(a)f(whole.)177
+2510 y(By)19 b(creating)f(a)g(single)g(F)m(unnelW)m(eb)g(\014le)g(that)g
+(creates)i(man)o(y)c(pro)q(duct)j(\014les)g(in)f(di\013eren)o(t)h(languages,)
+f(the)177 2559 y(programmer)c(can)i(describ)q(e)i(the)e(in)o(teraction)g(b)q
+(et)o(w)o(een)i(the)e(di\013eren)o(t)h(programs)e(in)g(an)o(y)h(manner)f
+(desired.)177 2609 y(F)m(urthermore,)f(b)q(ecause)i(the)e(di\013eren)o(t)h
+(pro)q(duct)g(\014les)g(are)g(all)d(created)k(in)e(the)g(same)g(\\text)g
+(space")h(\(i.e.)e(in)h(a)177 2659 y(single)g(F)m(unnelW)m(eb)f(\014le\),)h
+(it)f(is)h(easy)g(for)g(them)f(to)h(share)g(information.)177
+2735 y(F)m(or)h(example,)e(in)i(one)g(real)g(application)e(F)m(unnelW)m(eb)i
+(w)o(as)g(used)g(to)g(create)i(a)d(system)h(for)g(prin)o(ting)f(\014les)h(on)
+177 2785 y(a)i(laser)h(prin)o(ter)g(connected)i(to)d(a)g(remote)g(V)m(ax)g
+(Unix)g(mac)o(hine)g(from)e(a)j(lo)q(cal)e(V)m(ax)h(VMS)h(mac)o(hine.)27
+b(The)177 2835 y(system)18 b(consisted)h(of)f(t)o(w)o(o)g(\014les:)27
+b(a)18 b(VMS)g(DCL)g(command)d(pro)q(cedure)20 b(to)e(run)h(on)f(the)g(lo)q
+(cal)g(no)q(de,)h(and)1042 2940 y(55)p eop
+%%Page: 56 57
+56 56 bop 177 42 a Fr(a)16 b(Unix)h(shellscript)g(to)f(run)h(on)g(the)g
+(remote)f(no)q(de.)27 b(The)17 b(user,)h(b)o(y)e(giving)f(the)i(prin)o(t)g
+(command,)d(in)o(v)o(ok)o(ed)177 91 y(the)h(lo)q(cal)f(VMS)h(command)d(pro)q
+(cedure,)17 b(whic)o(h)d(in)g(turn)i(\014red)f(up)g(the)g(remote)g(Unix)f
+(shellscript.)21 b(The)15 b(t)o(w)o(o)177 141 y(scripts)g(then)g(co)q(op)q
+(erated)g(to)f(transfer)h(the)f(\014les)g(to)g(b)q(e)h(prin)o(ted)f(and)g
+(prin)o(t)f(them.)177 215 y(In)e(addition)f(to)h(its)g(usual)f(do)q(cumen)o
+(tation)g(p)q(o)o(w)o(ers,)i(F)m(unnelW)m(eb)e(assisted)i(in)e(the)i
+(creation)f(of)g(this)g(system)f(in)177 265 y(t)o(w)o(o)i(sp)q(ecial)g(w)o(a)
+o(ys.)17 b(First,)c(it)e(allo)o(w)o(ed)g(pieces)i(of)f(co)q(de)h(from)d(the)j
+(t)o(w)o(o)e(di\013eren)o(t)j(command)9 b(pro)q(cedures)14
+b(to)e(b)q(e)177 315 y(partially)g(in)o(terw)o(o)o(v)o(en)h(in)g(a)g
+(description)h(of)f(their)g(in)o(teraction.)18 b(This)13 b(is)h(just)f(not)g
+(p)q(ossible)h(with)f(commen)o(ts.)177 364 y(Second,)19 b(it)e(facilitated)g
+(the)h(use)h(of)e(shared)i(information.)26 b(F)m(or)17 b(example,)g(under)i
+(some)d(conditions,)i(eac)o(h)177 414 y(\014le)d(to)f(b)q(e)h(prin)o(ted)g(w)
+o(ould)f(b)q(e)h(renamed)f(and)h(copied)f(to)h(the)g(remote)f(system)g(using)
+h(a)f(particular)g(constan)o(t)177 464 y(\014lename)h(\(e.g.)g(\\)p
+Fl(printfile.tmp)p Fr("\).)20 b(F)m(unnelW)m(eb)15 b(allo)o(w)o(ed)g(this)g
+(constan)o(t)i(\014lename)d(to)i(b)q(e)g(included)g(in)f(a)177
+514 y(single)i(macro)e(de\014nition)i(whic)o(h)g(w)o(as)g(in)o(v)o(ok)o(ed)f
+(in)g(the)i(de\014nition)e(of)h(eac)o(h)g(of)f(the)i(scripts.)28
+b(This)17 b(ensured)177 564 y(that)d(the)h(t)o(w)o(o)e(scripts)i(used)g(the)f
+(same)f(name.)177 677 y Fl(@A)22 b(The)f(following)f(macro)g(contains)h(the)g
+(temporary)f(file)h(name)g(used)g(to)g(allow)g(the)177 726
+y(two)g(shellscripts)f(to)h(transfer)f(each)h(file)g(to)g(be)h(printed.)177
+826 y(@$@<printfile@>@M=)o(=@{pr)o(intme)o(.txt@)o(})177 926
+y(@A)g(Here)f(are)g(the)g(scripts)f(for)h(the)h(local)e(VMS)h(node)g(and)h
+(the)f(remote)f(UNIX)h(node.)177 1025 y(@O@<vmscommandproc)o(edure)o(.com@)o
+(>==@{)o(@-)177 1075 y(DCL)g(commands)177 1125 y(copy)g(@<printfile@>)e
+(unixnode::)177 1175 y(DCL)i(commands)177 1225 y(@})177 1324
+y(@O@<unixshellscrip)o(t@>==)o(@{@-)177 1374 y(unix)g(commands)177
+1424 y(print)g(@<printfile@>)177 1474 y(unix)g(commands)177
+1523 y(@})177 1636 y Fr(In)13 b(the)h(case)g(of)e(the)i(prin)o(ting)e
+(system,)h(the)h(en)o(tire)f(system)g(w)o(as)g(describ)q(ed)i(and)e
+(de\014ned)h(in)f(a)f(single)h(F)m(unnel-)177 1686 y(W)m(eb)h
+Fl(.fw)g Fr(\014le.)19 b(In)c(larger)f(systems)g(con)o(taining)g(man)o(y)e(F)
+m(unnelW)m(eb)i Fl(.fw)f Fr(\014les)i(for)f(man)o(y)f(di\013eren)o(t)i(mo)q
+(dules)177 1736 y(in)e(man)o(y)e(di\013eren)o(t)i(languages,)g(the)g(same)f
+(tric)o(k)h(can)g(b)q(e)h(pulled)e(b)o(y)h(placing)f(F)m(unnelW)m(eb)g(macro)
+g(de\014nitions)177 1786 y(for)g(shared)h(v)n(alues)e(in)o(to)h(F)m(unnelW)m
+(eb)f(include)h(\014les.)18 b(F)m(or)11 b(example,)g(a)h(suite)g(of)f
+(implemen)o(tations)e(of)j(net)o(w)o(ork)177 1836 y(no)q(des,)18
+b(with)f(eac)o(h)h(implem)o(en)o(tation)c(b)q(eing)j(in)g(a)g(di\013eren)o(t)
+h(programmi)o(ng)c(language)i(for)h(a)g(di\013eren)o(t)h(tar-)177
+1885 y(get)d(mac)o(hine,)e(could)i(all)e(share)i(a)g(table)f(of)g
+(con\014guration)h(constan)o(ts)g(de\014ned)h(in)e(macros)g(in)g(a)g(F)m
+(unnelW)m(eb)177 1935 y(include)g(\014le.)177 2009 y(In)h(summary)m(,)c(F)m
+(unnelW)m(eb's)k(macro)e(and)i(include)g(\014le)f(mec)o(hanisms)f(pro)o(vide)
+i(a)f(simple)g(w)o(a)o(y)g(for)g(programs)177 2059 y(written)f(in)f
+(di\013eren)o(t)i(languages)e(to)g(share)h(information.)i(This)d(reduces)j
+(redundancy)f(b)q(et)o(w)o(een)f(the)h(systems)177 2109 y(and)g(hence)h(the)g
+(c)o(hance)g(of)e(inconsistencies)i(arising.)177 2248 y Fd(2.13.4)55
+b(The)19 b(Case)g(of)g(the)f(Small)f(F)-5 b(unction)177 2349
+y Fr(Often,)14 b(when)f(programming,)d(there)k(is)f(a)g(need)h(for)f(a)g(co)q
+(de)h(abstraction)g(facilit)o(y)d(that)j(op)q(erates)g(at)f(the)h(text)177
+2399 y(lev)o(el.)26 b(If)17 b(the)g(statemen)o(t)g(\\)p Fl(a:=3;)p
+Fr(")f(o)q(ccurs)j(often,)e(it)f(ma)o(y)f(b)q(e)i(b)q(est)h(simply)d(to)h
+(rep)q(eat)i(it)f(v)o(erbatim.)25 b(If)16 b(a)177 2449 y(sequence)e(of)d(one)
+g(h)o(undred)h(statemen)o(ts)g(is)f(rep)q(eated)j(often,)d(it)g(is)g(normal)f
+(to)h(remo)o(v)o(e)f(the)i(co)q(de)h(to)e(a)g(function)177
+2498 y(and)j(replace)h(the)g(o)q(ccurrences)i(b)o(y)c(a)h(function)g(call.)j
+(Ho)o(w)o(ev)o(er,)d(in)g(b)q(et)o(w)o(een)h(these)h(t)o(w)o(o)d(extremes)i
+(are)f(cases)177 2548 y(where)i(a)f(particular)f(sequence)k(of)c(co)q(de)i
+(is)e(long)g(enough)h(and)g(app)q(ears)h(often)f(enough)g(to)f(b)q(e)i
+(troublesome,)177 2598 y(but)e(whic)o(h)g(is)g(b)q(ound)g(so)g(messily)e(to)i
+(its)g(en)o(vironmen)o(t)f(as)h(to)f(mak)o(e)g(a)g(function)h(call)f(cum)o(b)
+q(ersome.)177 2672 y(F)m(or)d(example,)g(the)h(follo)o(wing)d(line)i(of)h
+(statemen)o(ts)f(\(referring)i(to)e(\014v)o(e)h(v)n(ariables)f(declared)i
+Fm(lo)n(c)n(al)e Fr(to)h(a)f(function\))177 2722 y(migh)o(t)i(app)q(ear)i
+(ten)h(times)e(in)g(a)h(function:)177 2835 y Fl(a=b*3.14159;)19
+b(c=d)j(\045)f(256;)g(e=e+1;)1042 2940 y Fr(56)p eop
+%%Page: 57 58
+57 57 bop 177 42 a Fr(No)o(w)11 b(the)h(\\normal")d(rule)j(of)f(programmi)o
+(ng)e(sa)o(ys)i(that)h(these)h(statemen)o(ts)f(should)f(b)q(e)h(placed)g(in)f
+(a)g(pro)q(cedure)177 91 y(\(also)h(called)h(a)f(\\function")g(in)h(the)g(C)g
+(programmi)o(ng)d(language)i(used)h(in)g(this)f(example\),)g(but)h(here)h
+(\014v)o(e)f(lo)q(cal)177 141 y(v)n(ariables)j(are)h(used.)27
+b(Use)17 b(of)f(a)g(pro)q(cedure)i(\(function\))f(w)o(ould)e(result)j(in)e(a)
+g(pro)q(cedure)i(de\014nition)e(lo)q(oking)177 191 y(something)d(lik)o(e:)177
+284 y Fl(void)21 b(frobit\(a,b,c,d,e\))177 334 y(float)g(*a,b;)177
+384 y(int)g(*c,d;)177 434 y(unsigned)f(*e;)177 484 y({*a=b)h(<<)g(8;)h(*c=d)f
+(\045)g(256;)g(*e=*e+1;})177 577 y Fr(and)14 b(a)f(pro)q(cedure)j(call)d
+(something)g(lik)o(e)177 671 y Fl(frobit\(&a,b,&c,d,&)o(e\);)177
+764 y Fr(This)h(migh)o(t)d(b)q(e)j(w)o(ork)n(able)f(in)g(a)g(language)f(that)
+i(allo)o(w)o(ed)e(formal)f(parameters)j(to)f(b)q(e)h(sp)q(eci\014ed)h(to)f(b)
+q(e)g(b)q(ound)177 814 y(only)d(to)h(particular)f(v)n(ariables.)17
+b(Similarl)o(y)m(,)8 b(it)k(migh)o(t)d(b)q(e)k(p)q(ossible)e(to)h(a)o(v)o
+(oid)e(the)j(parameter)e(list)g(in)g(languages)177 864 y(that)17
+b(supp)q(ort)h(lo)q(cal)e(pro)q(cedures)j(that)e(can)g(access)i(non-lo)q(cal)
+d(v)n(ariables)g(\(suc)o(h)i(as)e(P)o(ascal\).)28 b(Ho)o(w)o(ev)o(er,)17
+b(in)177 914 y(our)12 b(example)f(here,)i(in)e(the)i(C)f(programmi)o(ng)d
+(language,)i(these)i(options)f(are)g(not)g(a)o(v)n(ailable,)e(and)i(so)g(w)o
+(e)g(m)o(ust)177 964 y(either)i(create)h(a)d(function)h(with)g(\014v)o(e)g
+(parameters,)g(or)g(use)h(the)f(C)g(macro)f(prepro)q(cessor)k(\(the)e(b)q
+(est)g(solution\).)177 1013 y(F)m(unnelW)m(eb)d(pro)o(vides)g(the)h(same)f
+(macro)f(facilit)o(y)f(for)i(languages)g(that)g(do)g(not)h(ha)o(v)o(e)f(a)g
+(built-in)f(prepro)q(cessor.)177 1082 y(In)j(particularly)g(sp)q(eed-stresse)
+q(d)j(applications,)c(the)i(programmer)d(ma)o(y)g(b)q(e)j(reluctan)o(t)g(to)f
+(remo)o(v)o(e)g(co)q(de)h(to)f(a)177 1131 y(pro)q(cedure)j(b)q(ecause)g(of)d
+(the)h(pro)q(cedure-call)h(o)o(v)o(erhead.)k(F)m(unnelW)m(eb)13
+b(macros)g(can)h(help)g(there)h(to)q(o.)177 1200 y(In)e(summary)m(,)d(there)k
+(sometimes)d(arises)j(in)f(programmi)o(ng)d(situations)j(where)h(the)f(cost)h
+(of)e(de\014ning)h(a)g(pro)q(ce-)177 1249 y(dure)f(is)e(higher)h(than)g(the)h
+(b)q(ene\014ts)g(it)f(will)e(b)q(esto)o(w.)18 b(Commo)o(n)8
+b(reasons)k(for)f(this)f(are)i(the)f(run-time)f(pro)q(cedure)177
+1299 y(o)o(v)o(erhead)j(and)g(the)g(messy)f(binding)g(problems)f(caused)j(b)o
+(y)f(remo)o(ving)d(target)j(co)q(de)h(from)d(its)h(target)i(con)o(text.)177
+1349 y(F)m(unnelW)m(eb)g(can)g(help)g(in)g(these)h(situations)f(b)o(y)g(allo)
+o(wing)e(the)i(programmer)e(to)i(de\014ne)h(a)f(text)h(macro.)i(This)177
+1399 y(a)o(v)o(oids)e(all)g(the)h(problems)f(and)g(pro)o(vides)h(an)g
+(additional)e(incen)o(tiv)o(e)i(for)f(the)i(programmer)c(to)j(describ)q(e)h
+(the)177 1449 y(piece)e(of)e(co)q(de)i(so)f(isolated.)177 1580
+y Fd(2.13.5)55 b(When)19 b(Commen)n(ts)d(are)j(Bad)177 1676
+y Fr(In)d(the)h(\\go)q(o)q(d)f(old)f(da)o(ys")h(of)g(small)e(mac)o(hine)h
+(memories)f(and)i(in)o(terpreted)i(BASIC,)e(programmers)f(w)o(ould)177
+1725 y(eliminate)f(the)i(\\)p Fl(REM)p Fr(")e(statemen)o(ts)h(\(commen)o
+(ts\))f(from)g(their)i(BASIC)g(programs)e(so)h(as)h(to)f(sa)o(v)o(e)h(space)g
+(and)177 1775 y(increase)e(execution)g(sp)q(eed.)19 b(Whilst)13
+b(this)g(w)o(as)g(ob)o(viously)e(an)i(appalling)e(programming)f(practice,)j
+(the)h(small)177 1825 y(memories)e(and)i(slo)o(w)f(micropro)q(cessors)i
+(often)f(made)e(this)i(tempting,)e(if)h(not)h(necessary)m(.)177
+1893 y(Thankfully)m(,)9 b(times)h(ha)o(v)o(e)h(c)o(hanged)h(since)f(then,)h
+(and)f(most)f(co)q(de)i(is)f(no)o(w)f(compiled)g(rather)i(than)f(in)o
+(terpreted.)177 1943 y(Ho)o(w)o(ev)o(er,)19 b(from)e(time)f(to)i(time)f(one)h
+(still)f(runs)i(in)o(to)f(an)f(en)o(vironmen)o(t)g(or)h(situation,)g(or)h(sp)
+q(ecial-purp)q(ose)177 1993 y(language,)i(where)h(commen)o(ts)d(are)i(either)
+g(una)o(v)n(ailable)e(\(no)h(commen)o(t)f(feature\))i(or)g(undesirable.)39
+b(Here)177 2043 y(F)m(unnelW)m(eb)12 b(can)h(b)q(e)g(used)g(to)g(fully)e(do)q
+(cumen)o(t)h(the)h(co)q(de)g(without)f(resulting)h(in)f(an)o(y)g(commen)o(ts)
+e(in)i(the)h(\014nal)177 2092 y(co)q(de)i(at)f(all.)i(F)m(or)e(example:)239
+2186 y Fq(\017)21 b Fr(Commen)o(ts)15 b(in)h(frequen)o(tly)i(used)g
+Fl(.h)e Fr(header)i(\014les)g(in)e(C)h(programs)f(can)h(ha)o(v)o(e)g(a)g
+(signi\014can)o(t)f(impact)281 2236 y(on)f(compilation)d(sp)q(eed.)23
+b(Often)16 b(suc)o(h)f(header)i(\014les)e(are)g(fairly)f(cryptic)i(and)f
+(really)f(ough)o(t)h(to)g(b)q(e)g(w)o(ell)281 2286 y(commen)o(ted,)d(but)i
+(their)g(authors)g(are)h(reluctan)o(t)f(to.)239 2362 y Fq(\017)21
+b Fr(Commen)o(ts)16 b(are)k(undesirable)f(in)f(P)o(ostScript)i(header)g
+(\014les)f(that)g(m)o(ust)f(b)q(e)h(transferred)i(rep)q(eatedly)281
+2412 y(along)13 b(comm)o(unicati)o(ons)e(c)o(hannels)k(\(e.g.)e(the)i(Apple)f
+(Macin)o(tosh)g(LaserW)m(riter)g(header)h(\014le\).)239 2488
+y Fq(\017)21 b Fr(In)o(terpreted)16 b(programs)d(in)g(em)o(b)q(edded)h
+(systems.)239 2565 y Fq(\017)21 b Fr(Hand)14 b(written)g(mac)o(hine)f(co)q
+(de)h(in)g(hex)g(dump)f(form)f(could)i(b)q(e)g(commen)o(ted.)239
+2642 y Fq(\017)21 b Fr(A)16 b(programmer)d(ma)o(y)g(wish)j(to)f(annotate)g(a)
+h(text)g(data)f(\014le)g(con)o(taining)g(lists)g(of)g(n)o(um)o(b)q(ers)g
+(that)h(is)f(to)281 2691 y(b)q(e)e(fed)f(in)o(to)g(a)f(statistical)h(program)
+f(that)h(do)q(es)h(not)f(pro)o(vide)g(an)o(y)g(commen)o(t)e(facilit)o(y)g
+(for)i(its)g(input)g(\014le.)177 2785 y(In)g(all)f(these)i(situations,)e(F)m
+(unnelW)m(eb)h(allo)o(ws)e(full)h(in)o(tegrated)h(do)q(cumen)o(tation)e
+(without)i(an)o(y)f(impact)g(on)g(the)177 2835 y(\014nal)i(co)q(de.)1042
+2940 y(57)p eop
+%%Page: 58 59
+58 58 bop 177 42 a Fd(2.13.6)55 b(Do)r(cumen)n(ts)17 b(That)i(Share)g(T)-5
+b(ext)177 144 y Fr(F)m(unnelW)m(eb)13 b(is)g(v)o(ery)h(useful)g(when)g
+(preparing)f(m)o(ultiple)f(do)q(cumen)o(ts)h(that)h(m)o(ust)e(share)i(large)f
+(slabs)h(of)f(iden-)177 194 y(tical)g(text)i(that)f(are)g(b)q(eing)g(constan)
+o(tly)g(mo)q(di\014ed.)177 270 y(F)m(or)g(example)e(someone)h(preparing)h(t)o
+(w)o(o)g(sligh)o(tly)e(di\013eren)o(t)j(user)g(man)o(uals)d(for)h(t)o(w)o(o)g
+(sligh)o(tly)g(di\013eren)o(t)i(audi-)177 319 y(ences)h(migh)o(t)c(w)o(an)o
+(t)h(the)h(man)o(uals)e(to)i(share)h(large)e(slabs)h(of)f(text,)h(while)g
+(still)f(allo)o(wing)e(di\013erences)16 b(b)q(et)o(w)o(een)177
+369 y(them.)i(The)d(follo)o(wing)c(example)i(sho)o(ws)h(ho)o(w)g(this)g(can)h
+(b)q(e)f(done.)20 b(The)14 b(co)q(de)h(is)f(cluttered,)h(but)g(this)f
+(clutter)177 419 y(w)o(ould)f(not)h(b)q(e)h(a)e(problem)g(if)g(the)h(lumps)f
+(of)g(text)h(w)o(ere)h(mo)q(derately)e(large.)177 537 y Fl
+(@O@<manual1.txt@>=)o(=@{@<)o(M1@>@)o(+@})177 587 y(@O@<manual2.txt@>=)o
+(=@{@<)o(M2@>@)o(+@})177 687 y(@$@<M1@>+=@{@<T1@>)o(@})177
+736 y(@$@<M2@>+=@{@<T1@>)o(@})177 786 y(@$@<T1@>@M==@{Firs)o(t)19
+b(lump)i(of)g(text)g(shared)g(by)g(both)g(documents.@+@})177
+886 y(@$@<M1@>+=@{Text)e(for)i(first)g(document@+@})177 936
+y(@$@<M2@>+=@{Text)e(for)i(second)f(document@+@})177 1035 y
+(@$@<M1@>+=@{@<T2@>)o(@})177 1085 y(@$@<M2@>+=@{@<T2@>)o(@})177
+1135 y(@$@<T2@>@M==@{Seco)o(nd)f(lump)i(of)g(text)g(shared)g(by)g(both)g
+(documents.@+@})177 1253 y Fr(An)16 b(alternativ)o(e)g(approac)o(h,)f(whic)o
+(h)h(migh)o(t)e(w)o(ork)h(b)q(etter)i(in)f(situations)f(where)i(there)g(are)f
+(man)o(y)e(small)g(dif-)177 1303 y(ferences)k(b)q(et)o(w)o(een)f(the)f(t)o(w)
+o(o)f(do)q(cumen)o(ts)h(rather)g(than)g(a)f(few)h(large)f(ones,)i(is)e(to)h
+(de\014ne)g(a)g(macro)e(with)h(t)o(w)o(o)177 1353 y(argumen)o(ts,)c(one)h
+(for)f(eac)o(h)h(pro)q(duct)g(\014le)g(do)q(cumen)o(t.)17 b(W)m(rite)11
+b(the)h(do)q(cumen)o(t)f(from)f(top)h(to)h(b)q(ottom,)e(but)i(place)177
+1403 y(all)h(stretc)o(hes)j(that)e(di\013er)g(b)q(et)o(w)o(een)i(the)e(t)o(w)
+o(o)g(do)q(cumen)o(ts)f(in)h(a)f(macro)g(call.)177 1521 y Fl(@!)22
+b(Set)f(the)g(definition)f(of)h(@#D)g(to)177 1571 y(@!)87 b(@1)21
+b(to)h(create)e(the)h(shareholders)f(report.)177 1621 y(@!)87
+b(@2)21 b(to)h(create)e(the)h(customers)f(report.)177 1670
+y(@$@#D@\(@2@\)@M==@{@)o(1@})177 1770 y(@O@<report.txt@>==)o(@{@-)177
+1820 y(1992)h(ANNUAL)g(REPORT)f(TO)i(@#D@\(Shareholder)o(s@,C)o(ustom)o
+(ers@\))177 1870 y(==================)o(====@)o(#D@\(=)o(=====)o(=====)o
+(=@,=)o(=====)o(===@\))177 1919 y(This)f(has)g(been)g(a)h(very)f(good)g(year)
+g(for)g(The)g(Very)g(Big)g(Corporation)f(of)h(America.)177
+1969 y(With)g(your)g(help,)g(we)g(have)g(been)g(able)g(to)h(successfully)177
+2019 y(@#D@\(@"screw)d(the)j(customers)e(for)h(every)g(cent)f(they)h
+(have@"@,)286 2069 y(@"knock)f(the)i(shareholders)d(into)i(submission)f(to)h
+(bring)g(you)g(lower)g(prices@"@\).)177 2119 y(With)g(gross)g(earnings)f
+(approaching)g(six)h(trillion)f(dollars,)g(we)h(have)g(been)g(able)g(to)177
+2168 y(@#D@\(@"increase)e(dividends@"@,)286 2218 y(@"lower)h(prices@"@\).)177
+2268 y(We)i(expect)e(to)h(have)g(an)h(even)f(better)f(year)h(next)g(year.)177
+2318 y(@})177 2436 y Fr(One)c(application)f(where)h(text)g(sharing)g(can)f(b)
+q(e)i(particularly)d(useful)i(is)f(in)g(the)i(preparation)e(of)g(computer)177
+2486 y(do)q(cumen)o(tation)10 b(con)o(taining)g(examples.)17
+b(F)m(or)11 b(example,)f(a)h(b)q(o)q(ok)g(describing)g(a)g(new)h(programming)
+c(language)177 2536 y(migh)o(t)j(b)q(e)j(full)d(of)i(examples)f(of)g(small)f
+(programs)h(written)h(in)g(the)h(language)e(whic)o(h)h(the)g(user)h(migh)o(t)
+d(w)o(an)o(t)i(to)177 2586 y(try)g(without)g(ha)o(ving)f(to)h(t)o(yp)q(e)g
+(them)f(all)g(in.)17 b(The)d(\\default")e(approac)o(h)h(of)f(k)o(eeping)h(a)g
+(cop)o(y)g(of)f(the)i(examples)177 2635 y(in)f(the)h(text)g(of)e(the)i(b)q(o)
+q(ok)f(and)g(another)h(cop)o(y)f(in)g(separate)h(\014les)g(is)f(cum)o(b)q
+(ersome)f(and)h(error)i(prone,)e(b)q(ecause)177 2685 y(b)q(oth)h(\014les)g
+(ha)o(v)o(e)g(to)g(b)q(e)g(up)q(dated)h(whenev)o(er)g(an)e(example)g(is)h(c)o
+(hanged.)k(A)c(more)f(sophisticated)h(approac)o(h)g(is)177
+2735 y(to)d(store)g(eac)o(h)g(example)e(in)i(a)f(separate)i(\014le,)e(and)h
+(then)g(use)g(the)h(\\include)e(\014le")g(facilit)o(y)f(of)h(the)h(w)o(ord)g
+(pro)q(cessor)177 2785 y(to)k(include)g(eac)o(h)h(example)e(in)h(the)g(text.)
+23 b(This)15 b(is)g(a)g(b)q(etter)h(solution,)e(but)i(su\013ers)h(from)c(a)i
+(few)g(dra)o(wbac)o(ks.)177 2835 y(First,)i(when)f(editing)g(the)h(b)q(o)q
+(ok)f(in)g(a)f(w)o(ord)h(pro)q(cessor,)j(the)d(examples)g(in)f(the)i(b)q(o)q
+(ok)f(will)f(not)h(b)q(e)g(directly)1042 2940 y(58)p eop
+%%Page: 59 60
+59 59 bop 177 42 a Fr(accessible)19 b(or)f(visible.)29 b(T)m(o)17
+b(see)i(an)e(example,)g(the)h(writer)g(w)o(ould)f(ha)o(v)o(e)h(to)f(op)q(en)i
+(the)f(\014le)g(con)o(taining)e(the)177 91 y(example)11 b(in)g(a)h(separate)h
+(windo)o(w.)k(This)12 b(could)f(b)q(ecome)h(tedious)g(if)g(the)g(text)h(con)o
+(tained)f(man)o(y)e(examples,)h(as)177 141 y(man)o(y)h(texts)j(do.)i(F)m
+(urthermore,)c(there)i(is)f(a)f(risk)h(that)f(some)g(example)f(\014les)i
+(will)f(b)q(e)h(included)g(in)f(the)h(wrong)177 191 y(place.)k(Second,)12
+b(b)q(ecause)i(the)e(b)q(o)q(ok)g(is)f(dep)q(enden)o(t)j(on)d(the)i(included)
+e(\014les,)i(the)f(b)q(o)q(ok)f(will)g(end)h(up)g(consisting)177
+241 y(of)h(a)h(directory)h(of)e(a)h(h)o(undred)g(or)g(more)f(\014les)h
+(instead)g(of)g(just)g(a)f(few.)177 316 y(An)g(alternativ)o(e)f(solution)g
+(is)g(to)h(construct)h(a)e(single)h(F)m(unnelW)m(eb)f Fl(.fw)f
+Fr(\014le)i(that,)f(when)h(pro)q(cessed,)i(pro)q(duces)177
+366 y(b)q(oth)h(the)g(b)q(o)q(ok)g(\014le)g(and)f(the)i(example)d(\014les.)24
+b(This)16 b(solution)f(assumes)g(that)h(the)g(b)q(o)q(ok)g(consists)h(of)e(a)
+g(text)177 416 y(\014le)f(con)o(taining)f(commands)e(for)j(a)f(t)o(yp)q
+(esetter)k(suc)o(h)d(as)g(T)1112 425 y(E)1135 416 y(X.)177
+534 y Fl(@O@<Book.tex@>==@{)o(@#B@})177 633 y(@$@#B+=@{@-)177
+683 y(The)21 b(first)g(step)g(to)g(learning)g(the)g(object)f(oriented)g
+(AdaCgol++)g(language)h(is)g(to)g(examine)177 733 y(a)h(hello)f(world)f
+(program.)177 832 y(\\start{verbatim})177 882 y(@<Ex1@>)177
+932 y(\\finish{verbatim})177 982 y(@})177 1081 y(@$@<Ex1@>==@{read)e
+(iopack@+Enter)i(!World~!)g(!Hello~!)g(ex)h(pr)h(flu)f(X[1]@})177
+1131 y(@O@<Ex1.c@>==@{@<E)o(x1@>@)o(})177 1231 y(@$@#B+=@{@-)177
+1281 y(To)h(understand)d(the)i(program,)g(think)f(of)i(the)f(execution)f
+(state)h(as)g(a)h(plate)e(of)i(cheese...)177 1331 y(@})177
+1448 y Fr(Most)12 b(of)f(the)h(\014le)f(will)f(consist)i(of)f(part)h
+(de\014nitions)f(of)g(the)h(additiv)o(e)f(macro)f Fl(@#B)p
+Fr(.)h(The)h(de\014nition)f(is)g(\\brok)o(en")177 1498 y(to)j(allo)o(w)e(a)i
+(macro)e(de\014nition,)h(wherev)o(er)j(an)e(example)e(app)q(ears.)177
+1573 y(The)e(example)f(ab)q(o)o(v)o(e)g(is)g(a)h(little)f(messy)g(b)q(ecause)
+i(F)m(unnelW)m(eb)e(do)q(es)i(not)e(allo)o(w)f(macros)h(connected)i(to)f(pro)
+q(duct)177 1623 y(\014les)18 b(to)f(b)q(e)h(called,)f(and)g(it)g(do)q(es)h
+(not)f(ha)o(v)o(e)g(text)h(expressions)h(that)e(write)g(to)h(an)f(pro)q(duct)
+h(\014le)f(as)g(w)o(ell)g(as)177 1673 y(ev)n(aluating)d(to)h(text.)22
+b(Nev)o(ertheless,)17 b(it)e(presen)o(ts)i(a)e(fairly)f(clean)h(solution)f
+(to)h(the)h(problem)e(of)g(k)o(eeping)h(the)177 1723 y(example)e(programs)f
+(in)i(a)f(computing)g(text)h(up)g(to)g(date.)177 1866 y Fd(2.13.7)55
+b(Generics)177 1968 y Fr(It)13 b(is)g(w)o(ell)f(kno)o(wn)h(that)g(generics)h
+(in)f(programmi)o(ng)d(languages)i(are)i(closely)f(aligned)f(with)g(textual)h
+(substitu-)177 2018 y(tion.)j(In)11 b(fact,)f(a)g(go)q(o)q(d)g(w)o(a)o(y)g
+(to)g(understand)i(the)f(generic)g(facilit)o(y)e(of)g(a)h(new)h(programming)c
+(language)i(is)i(to)f(ask)177 2068 y(oneself)15 b(the)g(question)g(\\In)f
+(what)g(w)o(a)o(y)g(do)q(es)h(this)g(generic)g(facilit)o(y)e(di\013er)i(from)
+d(simple)h(text)i(substitution?")177 2118 y(The)j(di\013erences,)j(if)16
+b(an)o(y)m(,)h(t)o(ypically)g(ha)o(v)o(e)g(to)g(do)h(with)f(the)h
+(di\013erence)i(in)d(scoping)g(b)q(et)o(w)o(een)i(textual)f(and)177
+2168 y(in)o(telligen)o(t)d(substitution)g(and)h(whether)h(the)f(generic)g(co)
+q(de)h(is)e(shared)i(or)e(copied)h(b)o(y)g(the)g(implemen)o(tati)o(on.)177
+2217 y(In)e(most)f(cases)i(the)f(di\013erences)j(are)d(quite)g(minor.)177
+2293 y(Because)h(generic)g(facilities)d(are)h(so)h(closely)f(aligned)f(with)h
+(text)h(substitution,)f(it)g(is)g(p)q(ossible)h(to)f(use)h(F)m(unnel-)177
+2343 y(W)m(eb's)i(parameterized)g(macros)g(to)g(pro)o(vide)g(generics)h(in)f
+(programmi)o(ng)d(languages)j(that)g(do)g(not)g(supp)q(ort)177
+2392 y(generics.)27 b(Simply)14 b(write)j(a)f(F)m(unnelW)m(eb)f(macro)h
+(whose)h(parameters)f(are)h(the)g(parameters)f(of)g(the)h(generic)177
+2442 y(and)d(whose)g(b)q(o)q(dy)g(is)g(the)h(generic)f(ob)r(ject.)177
+2518 y(The)i(follo)o(wing)d(F)m(unnelW)m(eb)j(\014le)f(giv)o(es)h(an)f
+(example)g(of)g(a)g(fully)g(w)o(ork)o(ed)g(V)m(ax)g(P)o(ascal)h(generic)h
+(set)f(pac)o(k)n(age)177 2567 y(implemen)o(ted)d(using)i(F)m(unnelW)m(eb)f
+(parameterized)h(macros.)21 b(The)15 b(pac)o(k)n(age)g(w)o(as)g(written)g(b)o
+(y)g(Barry)h(Dwy)o(er)177 2617 y(of)c(the)i(Computer)d(Science)k(Departmen)o
+(t)d(of)g(the)h(Univ)o(ersit)o(y)g(of)f(Adelaide)g(in)h(1987)e(and)i(w)o(as)f
+(emailed)f(to)i(me)177 2667 y(on)j(11)f(No)o(v)o(em)o(b)q(er)f(1987.)23
+b(The)16 b(generic)g(pac)o(k)n(age)f(pro)o(vides)h(a)f(set)i(abstraction)f
+(implemen)o(ted)d(using)i(link)o(ed)177 2717 y(lists.)j(Note)c(the)h(clev)o
+(er)g(use)f(of)g(the)g(instan)o(tiation)f(parameters)h(in)f(t)o(yp)q(e,)h
+(function,)f(and)h(pro)q(cedure)i(names.)177 2835 y Fl(@$@<Generic)k(Set)h
+(Module@>@\(@2@\)==@)o({@-)1042 2940 y Fr(59)p eop
+%%Page: 60 61
+60 60 bop 177 42 a Fl(@!)22 b(@1)f(is)g(the)g(base)g(type,)g(@2)h(is)f(the)g
+(set)g(type.)177 91 y([inherit)f(\('@1'\),)h(environment)e(\('@2'\)])177
+191 y(module)i(@2;)177 291 y(type)43 b(@2)21 b(=)h(^@2Record;)308
+340 y(@2Record)e(=)i(record)373 390 y(Member:)f(@1;)373 440
+y(Next:)g(@2;)373 490 y(end;)177 589 y(procedure)f(Null@2)h(\(var)g(Result:)f
+(@2\);)177 639 y(begin)h(new)g(\(Result\);)177 689 y(Result^.Member)e(:=)i
+(\(-)h(MaxInt\)::@1;)177 739 y(Result^.Next)d(:=)j(nil)f(end;)177
+839 y(function)f(IsNull@2)g(\(S:)i(@2\):)f(boolean;)177 888
+y(begin)g(IsNull@2)f(:=)h(S^.Member::integer)e(=)i(-)h(MaxInt)e(end;)177
+988 y(procedure)g(ForEach@1)g(\(S:)h(@2;)g(procedure)f(DoIt)h(\(i:)g(@1\)\);)
+177 1038 y(var)65 b(ThisS,)20 b(NextS:)h(@2;)177 1088 y(begin)g(ThisS)g(:=)g
+(S;)177 1137 y(while)g(ThisS^.Member::in)o(teger)d(<>)k(-)f(MaxInt)g(do)243
+1187 y(begin)f(NextS)h(:=)g(ThisS^.Next;)243 1237 y(DoIt)g(\(ThisS^.Member\))
+o(;)243 1287 y(ThisS)f(:=)i(NextS)e(end;)177 1337 y(end;)177
+1436 y(function)g(First@1)h(\(S:)g(@2\):)g(@1;)177 1486 y(begin)g(First@1)f
+(:=)i(S^.Member)e(end;)177 1586 y(function)g(Is@1InSet)g(\(i:)h(@1;)h(S:)f
+(@2\):)g(boolean;)243 1636 y(procedure)e(TestEquals)h(\(j:)h(@1\);)243
+1685 y(begin)f(if)i(Equal@1)e(\(i,)h(j\))h(then)f(Is@1InSet)e(:=)j(true;)f
+(end;)177 1735 y(begin)g(Is@1InSet)f(:=)h(false;)g(ForEach@1)f(\(S,)h
+(TestEquals\);)e(end;)177 1835 y(function)h(Includes@2)g(\(S1,)h(S2:)g(@2\):)
+g(boolean;)177 1885 y(var)g(Result:)g(boolean;)243 1934 y(procedure)e
+(TestIfInS1)h(\(i:)h(@1\);)243 1984 y(begin)f(if)i(Result)e(then)h(if)h(not)f
+(Is@1InSet)f(\(i,)h(S1\))g(then)g(Result)g(:=)g(false;)f(end;)177
+2034 y(begin)h(Result)f(:=)i(true;)177 2084 y(ForEach@1)e(\(S2,)h
+(TestIfInS1\);)177 2134 y(Includes@2)f(:=)h(Result)g(end;)177
+2233 y(function)f(Disjoint@2s)g(\(S1,)h(S2:)g(@2\):)g(boolean;)177
+2283 y(var)g(Result:)g(boolean;)243 2333 y(procedure)e(TestIfInS1)h(\(i:)h
+(@1\);)243 2383 y(begin)f(if)i(Result)e(then)h(if)h(Is@1InSet)e(\(i,)h(S1\))g
+(then)g(Result)f(:=)i(false;)e(end;)177 2433 y(begin)h(Result)f(:=)i(true;)
+177 2482 y(ForEach@1)e(\(S2,)h(TestIfInS1\);)177 2532 y(Disjoint@2s)f(:=)h
+(Result)g(end;)177 2632 y(function)f(Equal@2)h(\(S1,)g(S2:)g(@2\):)g
+(boolean;)177 2682 y(begin)177 2731 y(Equal@2)g(:=)g(Includes@2)f(\(S1,)h
+(S2\))g(and)g(Includes@2)f(\(S2,)h(S1\);)177 2781 y(end;)1042
+2940 y Fr(60)p eop
+%%Page: 61 62
+61 61 bop 177 42 a Fl(procedure)20 b(Insert@1)g(\(i:)h(@1;)h(var)f(S:)g
+(@2\);)177 91 y(var)65 b(This,)21 b(Pred,)f(Succ:)h(@2;)177
+141 y(begin)177 191 y(if)h(not)f(Is@1InSet)f(\(i,)h(S\))g(then)243
+241 y(begin)243 291 y(Pred)g(:=)g(nil;)g(Succ)g(:=)g(S;)243
+340 y(while)f(Succ^.Member::integ)o(er)f(>)i(i::integer)f(do)h(begin)308
+390 y(Pred)g(:=)g(Succ;)g(Succ)g(:=)g(Succ^.Next)f(end;)243
+440 y(if)h(Succ^.Member::int)o(eger)d(<)k(i::integer)e(then)h(begin)308
+490 y(new)g(\(This\);)f(This^.Next)g(:=)i(Succ;)e(This^.Member)g(:=)h(i;)308
+540 y(if)g(Pred)g(<>)h(nil)f(then)g(Pred^.Next)f(:=)h(This)g(else)g(S)g(:=)h
+(This;)308 589 y(end;)243 639 y(end;)177 689 y(end;)177 789
+y(procedure)e(Insert@1s)g(\(S1:)h(@2;)g(var)g(S2:)h(@2\);)177
+839 y(var)65 b(This,)21 b(Pred,)f(Succ:)h(@2;)243 888 y(procedure)e(Add@1)i
+(\(i:)g(@1\);)243 938 y(begin)f(Insert@1)g(\(i,)i(S2\))f(end;)177
+988 y(begin)177 1038 y(ForEach@1)f(\(S1,)h(Add@1\);)177 1088
+y(end;)177 1187 y(procedure)f(Remove@1)g(\(i:)h(@1;)h(var)f(S:)g(@2\);)177
+1237 y(var)65 b(Pred,)21 b(This:)f(@2;)177 1287 y(begin)177
+1337 y(Pred)h(:=)h(nil;)e(This)h(:=)h(S;)177 1386 y(while)f(not)g(Equal@1)f
+(\(This^.Member,)f(i\))j(do)f(begin)243 1436 y(Pred)g(:=)g(This;)g(This)g(:=)
+g(This^.Next)f(end;)177 1486 y(if)i(Pred)f(<>)g(nil)g(then)g(Pred^.Next)f(:=)
+h(This^.Next)f(else)h(S)g(:=)h(This^.Next;)177 1536 y(Dispose)f(\(This\);)177
+1586 y(end;)177 1685 y(procedure)f(Dispose@2)g(\(var)h(S:)g(@2\);)177
+1735 y(var)65 b(Old:)21 b(@2;)177 1785 y(begin)177 1835 y(while)g(S)h(<>)f
+(nil)g(do)g(begin)g(Old)g(:=)h(S;)f(S)h(:=)f(S^.Next;)f(Dispose)h(\(Old\))f
+(end;)177 1885 y(end;)177 1984 y(end.)177 2034 y(@})177 2134
+y(@O@<NaryTreeSet.pa)o(s@>==)o(@{@-)221 2183 y(@<Generic)g(Set)h
+(Module@>@\(@"NaryT)o(ree@")o(@,@")o(NaryT)o(reeSe)o(t@"@\))o(@})177
+2233 y(@O@<NaryTreeSetSet)o(.pas@)o(>==@{)o(@-)221 2283 y(@<Generic)f(Set)h
+(Module@>@\(@"NaryT)o(reeSe)o(t@"@)o(,@"Na)o(ryTre)o(eSetS)o(et@"@)o(\)@})177
+2408 y Fr(A)12 b(great)h(adv)n(an)o(tage)e(of)g(the)i(approac)o(h)f
+(re\015ected)i(in)e(the)g(ab)q(o)o(v)o(e)g(example)f(is)h(that)g(it)g(allo)o
+(ws)e(the)j(programmer)177 2458 y(to)f(construct)i(a)d(generic)i(ob)r(ject)g
+(in)f(a)f(language)h(that)g(do)q(es)g(not)g(supply)g(generics,)h
+Fm(with)g(c)n(omplete)g(typ)n(esafety.)177 2507 y Fr(This)g(con)o(trasts)h
+(to)e(the)i(approac)o(h)e(that)h(migh)o(t)e(b)q(e)i(used)h(in)e(a)h(language)
+f(suc)o(h)h(as)g(C)g(where)h(the)f(programmer)177 2557 y(migh)o(t)e(c)o(ho)q
+(ose)i(to)g(construct)h(a)e(\\generic")h(pac)o(k)n(age)f(b)o(y)h
+(parameterizing)f(a)g(pac)o(k)n(age)g(with)g(p)q(oin)o(ters)i(to)e
+Fl(void)p Fr(.)177 2607 y(The)i(resulting)f(pac)o(k)n(age)g(is)g(p)q(o)o(w)o
+(erful)g(but)g(extremely)g(un)o(t)o(yp)q(esafe.)18 b(Suc)o(h)c(a)f(generic)h
+(list)e(pac)o(k)n(age)h(is)g(used)h(in)177 2657 y(the)f(co)q(de)h(of)e(F)m
+(unnelW)m(eb)g(itself)g(and)h(caused)h(no)e(end)h(of)f(problems,)g(as)g(the)i
+(compiler)d(had)h(no)h(w)o(a)o(y)f(of)g(telling)177 2707 y(if)19
+b(p)q(oin)o(ters)h(to)f(the)h(correctly)h(t)o(yp)q(ed)f(ob)r(ject)g(w)o(ere)h
+(b)q(eing)e(handed)h(to)g(the)g(correct)h(list-ob)r(ject/function)177
+2757 y(com)o(bination.)177 2835 y(The)e(ma)r(jor)f(disadv)n(an)o(tage)g(of)g
+(the)h(text)h(generic)g(approac)o(h)e(is)h(that)g(it)g(causes)h(the)f(co)q
+(de)h(of)e(the)i(generic)1042 2940 y(61)p eop
+%%Page: 62 63
+62 62 bop 177 42 a Fr(ob)r(ject)19 b(to)f(b)q(e)h(duplicated)f(once)h(for)e
+(eac)o(h)i(instan)o(tiation.)29 b(Dep)q(ending)19 b(on)f(the)g(n)o(um)o(b)q
+(er)g(and)g(size)h(of)e(the)177 91 y(instan)o(tiations,)c(this)h(ma)o(y)d(or)
+j(ma)o(y)e(not)i(b)q(e)h(acceptable.)177 166 y(Where)22 b(the)f(duplication)f
+(of)g(co)q(de)h(is)g(unacceptable,)i(a)d(h)o(ybrid)h(approac)o(h)f(ma)o(y)f
+(b)q(e)i(tak)o(en.)39 b(As)21 b(in)f(the)177 216 y(C)c(example,)e(the)i
+(programmer)d(could)i(write)h(a)f(single)g(generic)h(pac)o(k)n(age)f(using)g
+(p)q(oin)o(ters)h(to)g Fl(void)e Fr(or)i(some)177 266 y(other)g(un)o(t)o(yp)q
+(esafe)g(mec)o(hanism.)j(Then)d(the)g(programmer)d(creates)k(a)e(F)m(unnelW)m
+(eb)f(generic)i(pac)o(k)n(age)f(whose)177 315 y(functions)g(do)f(nothing)f
+(more)h(than)g(call)g(the)h(functions)f(of)g(the)h(un)o(t)o(yp)q(esafe)g(pac)
+o(k)n(age,)f(and)g(whose)h(t)o(yp)q(es)g(do)177 365 y(nothing)f(more)g(than)g
+(con)o(tain)g(the)h(t)o(yp)q(es)h(of)d(the)j(un)o(t)o(yp)q(esafe)f(pac)o(k)n
+(age.)k(This)c(solution)e(in)o(v)o(olv)o(es)h(the)h(use)g(of)177
+415 y(un)o(t)o(yp)q(esafe)i(programmi)o(ng,)c(but)j(this)g(is)g(a)g
+(one-o\013)g(and)g(if)f(done)h(carefully)g(and)g(correctly)m(,)g(the)h
+(result)g(can)177 465 y(b)q(e)e(a)e(t)o(yp)q(esafe)i(generic)g(pac)o(k)n(age)
+e(in)o(v)o(olving)f(minim)o(al)e(co)q(de)15 b(duplication.)177
+627 y Fi(2.14)70 b(Summary)177 743 y Fr(This)16 b(c)o(hapter)h(has)f(describ)
+q(ed)i(some)d(of)h(the)g(\014ner)h(asp)q(ects)h(of)d(the)i(use)g(of)e(F)m
+(unnelW)m(eb.)24 b(Throughout,)16 b(the)177 793 y(p)q(o)o(w)o(er)f(and)f
+(danger)g(of)g(F)m(unnelW)m(eb)f(as)h(a)g(general)h(text-rearranging)f
+(prepro)q(cessor)j(has)d(b)q(een)i(emphasised.)177 843 y(F)m(unnelW)m(eb)g
+(can)g(b)q(e)h(used)g(b)q(oth)f(to)g(mak)o(e)e(programs)h(more)g(readable)h
+(or)g(more)f(obscure.)26 b(It)16 b(is)g(up)g(to)g(the)177 892
+y(programmer)c(to)h(ensure)j(that)e(F)m(unnelW)m(eb)f(is)h(used)h(prop)q
+(erly)m(.)1042 2940 y(62)p eop
+%%Page: 63 64
+63 63 bop 177 372 a Fj(Chapter)34 b(3)177 598 y Fp(F)-10 b(unnelW)g(eb)41
+b(De\014nition)177 858 y Fi(3.1)70 b(In)n(tro)r(duction)177
+968 y Fr(This)15 b(purp)q(ose)h(of)e(this)h(c)o(hapter)g(is)g(to)g(pro)o
+(vide)f(a)h(complete)f(and)g(consisten)o(t)i(de\014nition)f(of)f(the)h(F)m
+(unnelW)m(eb)177 1018 y(input)h(language)e(and)i(the)g(b)q(eha)o(viour)f(of)g
+(the)h(F)m(unnelW)m(eb)f(program.)22 b(Usually)m(,)14 b(a)i(c)o(hapter)g(suc)
+o(h)h(as)e(this)h(is)177 1068 y(called)c(a)g(\\reference)i(man)o(ual",)9
+b(but)j(this)g(c)o(hapter)h(is)f(in)o(tended)g(to)g(go)g(further)g(b)o(y)g
+(actually)f(de\014ning)h(the)h(lan-)177 1118 y(guage)f(and)f(program.)16
+b(This)c(c)o(hapter)g(tak)o(es)g(precedence)j(o)o(v)o(er)d(all)e(other)j(c)o
+(hapters)g(and)e(all)g(implemen)o(tatio)o(ns)177 1167 y(of)i(F)m(unnelW)m
+(eb.)18 b(If)13 b(an)h(implemen)o(tation)c(con)o(tradicts)15
+b(this)f(c)o(hapter,)g(then)h(the)g(implem)o(en)o(tation)c(is)j(wrong.)177
+1236 y(This)j(is)g(the)h(c)o(hapter)h(that)e(y)o(ou)g(should)g(turn)g(if)g(y)
+o(ou)g(\014nd)g(y)o(ourself)g(asking)g(a)g(sp)q(eci\014c)h(question)g(ab)q
+(out)f(a)177 1286 y(sp)q(eci\014c)g(asp)q(ect)f(of)f(F)m(unnelW)m(eb.)21
+b(In)15 b(man)o(y)e(cases)k(it)e(will)e(b)q(e)j(con)o(v)o(enien)o(t)g(to)e
+(access)j(this)f(c)o(hapter)g(through)177 1336 y(the)f(index.)177
+1490 y Fi(3.2)70 b(Notation)177 1600 y Fr(A)17 b(particular)g(v)n(arian)o(t)f
+(of)g(EBNF)i(\(Extended)g(Bac)o(h)o(us)g(Naur)f(F)m(orm\))e(will)h(b)q(e)h
+(used)h(to)f(describ)q(e)i(the)e(F)m(un-)177 1649 y(nelW)m(eb)h(syn)o(tax.)32
+b(In)18 b(this)g(v)n(arian)o(t,)g(literal)g(strings)g(are)h(delimited)e(b)o
+(y)h(double)g(quotes)h(\(e.g.)f Fl("string")p Fr(\),)177 1699
+y(optional)d(constructs)j(b)o(y)f(square)g(brac)o(k)o(ets)g(\(e.g.)f
+Fl([optional])p Fr(\),)e(and)j(constructs)h(rep)q(eated)g(zero)f(or)g(more)
+177 1749 y(times)i(b)o(y)g(braces)i(\(e.g.)e Fq(f)p Fl(zeroormore)p
+Fq(g)p Fr(\).)33 b(Constructs)21 b(to)e(b)q(e)h(rep)q(eated)i(a)d(\014xed)h
+(n)o(um)o(b)q(er)f(of)g(times)f(are)177 1799 y(enclosed)g(in)e(braces)h
+(follo)o(w)o(ed)e(b)o(y)i(a)f(decimal)e(n)o(um)o(b)q(er)i(indicating)g(the)h
+(n)o(um)o(b)q(er)e(of)h(times)g(to)g(b)q(e)h(rep)q(eated)177
+1849 y(\(e.g.)d Fq(f)p Fl(sixtimes)p Fq(g)p Fl(6)p Fr(\).)19
+b(Constructs)e(to)e(b)q(e)g(rep)q(eated)i(one)e(or)g(more)f(times)g(are)h
+(enclosed)h(in)f(braces)h(and)f(fol-)177 1899 y(lo)o(w)o(ed)e(b)o(y)h(a)f
+Fl(+)h Fr(\(e.g.)f Fq(f)p Fl(oneormore)p Fq(g)p Fl(+)p Fr(\).)j(The)e
+(traditional)e(BNF)j(\\)p Fl(::=)p Fr(")d(is)i(replaced)h(b)o(y)e(the)i
+(visually)d(simpler)177 1948 y(\\)p Fl(=)p Fr(".)17 b(The)e(traditional)d
+(BNF)j(angle)e(brac)o(k)o(ets)i(are)f(abandoned.)177 2017 y(Although)c(F)m
+(unnelW)m(eb)g(allo)o(ws)f(the)i(sp)q(ecial)g(c)o(haracter)g(to)g(b)q(e)g(c)o
+(hanged)f(using)h(the)g(construct)h(\\)p Fn(<)p Fr(sp)q(ecial)p
+Fn(>)p Fr(=",)177 2067 y(use)19 b(of)f(\\)p Fn(<)p Fr(sp)q(ecial)p
+Fn(>)p Fr(")h(to)f(refer)h(to)g(F)m(unnelW)m(eb's)e(sp)q(ecial)i(c)o
+(haracter)h(is)e(cum)o(b)q(ersome)f(and)h(abstract.)33 b(T)m(o)177
+2117 y(simplify)17 b(the)i(presen)o(tation,)i(the)f(default)f(sp)q(ecial)g(c)
+o(haracter)i(\\)p Fl(@)p Fr(")d(is)h(used)h(throughout)g(this)f(c)o(hapter)h
+(to)177 2167 y(represen)o(t)c(the)f(sp)q(ecial)f(c)o(haracter.)177
+2320 y Fi(3.3)70 b(T)-6 b(erminology)177 2430 y Fr(A)14 b(sp)q(eci\014c)i
+(terminology)c(has)i(arisen)h(for)f(dealing)f(with)h(F)m(unnelW)m(eb.)k(Some)
+13 b(particularly)g(useful)i(examples)177 2480 y(are:)295 2549
+y Fo(Journal)10 b(\014le:)16 b Fr(An)11 b(output)g(\014le)g(con)o(taining)f
+(a)g(cop)o(y)h(of)f(the)i(output)f(sen)o(t)g(to)g(the)h(user's)f(console)295
+2599 y(during)j(an)h(in)o(v)o(o)q(cation)e(of)h(F)m(unnelW)m(eb.)19
+b(In)c(other)g(systems,)f(this)h(\014le)g(is)f(sometimes)f(called)h(a)295
+2649 y(\\log)f(\014le".)295 2718 y Fo(Pro)q(duct)19 b(\014le:)24
+b Fr(An)18 b(output)g(\014le,)g(generated)h(b)o(y)e(the)h(T)m(angle)f(comp)q
+(onen)o(t)g(of)g(F)m(unnelW)m(eb,)295 2767 y(that)d(con)o(tains)g(the)h
+(expansion)e(of)h(the)g(macros)f(in)h(the)g(input)g(\014le.)1368
+2752 y Fg(1)p 177 2796 709 2 v 223 2823 a Ff(1)241 2835 y Fh(Other)d(names)f
+(considered)e(for)j(this)g(w)o(ere:)k(generated)9 b(\014le,)i(expanded)d
+(\014le,)j(result)f(\014le,)h(program)e(\014le,)i(and)f(tangle)g(\014le.)1042
+2940 y Fr(63)p eop
+%%Page: 64 65
+64 64 bop 177 42 a Fr(A)14 b(complete)f(list)g(of)g(all)f(the)j(sp)q(ecial)f
+(F)m(unnelW)m(eb)f(terminology)e(app)q(ears)k(in)e(the)h(glossary)m(.)j(Be)e
+(sure)f(to)g(refer)177 91 y(to)g(it)f(if)g(an)o(y)h(of)f(the)i(terms)e(used)i
+(are)f(unclear.)177 250 y Fi(3.4)70 b(An)23 b(Arc)n(hitectural)d(Ov)n(erview)
+177 363 y Fr(An)e(understanding)f(of)g(the)h(in)o(ternals)f(of)g(F)m(unnelW)m
+(eb)f(assists)j(with)d(understanding)i(its)f(op)q(eration)h(\()p
+Fo(Fig-)177 413 y(ure)d(3)p Fr(\).)177 485 y(During)h(a)h(single)g(run,)g(F)m
+(unnelW)m(eb)g(reads)h(and)e(pro)q(cesses)k(a)d(single)f(input)h(\014le)g
+(called)g(the)g Fo(input)g(\014le)f Fr(or)177 535 y(the)e Fo(F)l(unnelW)l(eb)
+f(\014le)p Fr(.)k(The)d(\014le)g(is)f(pro)q(cessed)j(b)o(y)d(passing)h(it)f
+(through)h(a)f(series)i(of)e(stages)h(called)g Fo(phases)p
+Fr(.)177 585 y(The)19 b(result)f(is)g(that)g(some)g Fo(output)g(\014les)e
+Fr(are)j(generated.)32 b(A)18 b Fo(journal)g(\014le)f Fr(is)h(generated)h
+(con)o(taining)e(a)177 635 y(cop)o(y)h(of)g(the)g(messages)g(that)h(app)q
+(ear)f(on)g(the)h(console)f(during)g(the)g(F)m(unnelW)m(eb)g(run.)31
+b(A)18 b Fo(listing)f(\014le)g Fr(is)177 685 y(created)d(con)o(taining)e(a)h
+(summary)d(of)i(the)i(run,)f(including)e(an)o(y)i(error)g(messages.)18
+b(A)13 b Fo(do)q(cumen)o(tation)c Fr(\014le)k(is)177 734 y(generated)j(con)o
+(taining)d(t)o(yp)q(esetter)j(commands)c(that)j(when)f(fed)h(in)o(to)e(a)h(t)
+o(yp)q(esetter)j(program)12 b(will)h(result)i(in)177 784 y(prin)o(ted)f(do)q
+(cumen)o(tation.)i(Finally)m(,)11 b(one)j(or)f(more)f Fo(pro)q(duct)h
+(\014les)f Fr(are)i(generated)g(con)o(taining)f(the)g(result)h(of)177
+834 y(unscram)o(bling)e(the)j(macro)d(de\014nitions)i(of)g(the)g(input)g
+(\014le.)177 906 y(These)h(\014les)g(need)g(not)f(all)f(b)q(e)h(generated)i
+(on)d(an)o(y)h(particular)g(F)m(unnelW)m(eb)f(run.)19 b(Whether)c(eac)o(h)g
+(output)f(\014le)177 956 y(app)q(ears)h(is)f(con)o(trolled)f(b)o(y)h(command)
+d(line)i(options.)373 1103 y Fl(.fw)21 b(Input)g(File)g(\(FunnelWeb)f(file\))
+635 1153 y(V)526 1202 y(+---------+)390 b(\\)526 1252 y(|)21
+b(Scanner)g(|)392 b(|)526 1302 y(+---------+)e(|)635 1352 y(V)501
+b(|)526 1402 y(+--------+)412 b(|)526 1451 y(|)21 b(Parser)g(|)414
+b(|)526 1501 y(+--------+)e(|)635 1551 y(V)501 b(|)526 1601
+y(+----------+)368 b(>-------+--------)o(----+)526 1651 y(|)21
+b(Analyser)g(|)370 b(|)152 b(|)262 b(|)526 1701 y(+----------+)368
+b(|)152 b(|)262 b(|)635 1750 y(V)501 b(|)152 b(|)262 b(|)373
+1800 y(+-----------+------)o(-----)o(-+)215 b(|)152 b(V)262
+b(V)373 1850 y(V)523 b(V)218 b(|)152 b(|)262 b(|)286 1900 y(+--------+)325
+b(+-------+)129 b(|)152 b(|)262 b(|)286 1950 y(|)22 b(Tangle)e(|)327
+b(|)22 b(Weave)e(|)131 b(|)152 b(|)262 b(|)286 1999 y(+--------+)325
+b(+-------+)129 b(/)152 b(|)262 b(|)373 2049 y(|)523 b(|)392
+b(|)262 b(|)373 2099 y(V)523 b(V)392 b(V)262 b(V)243 2149 y(Product)20
+b(Files)195 b(Documentation)19 b(File)86 b(Listing)21 b(File)43
+b(Journal)20 b(File)343 2290 y Fh(F)m(unnelW)m(eb)9 b(pro)q(cesses)g(eac)o(h)
+g(input)g(\014le)h(in)h(a)f(sequence)e(of)j(phases.)i(If)e(an)f(error)f(o)q
+(ccurs)g(during)g(a)i(phase,)e(no)281 2340 y(subsequen)o(t)g(phases)h(are)h
+(executed.)673 2431 y Fo(Figure)j(3)p Fr(:)k(F)m(unnelW)m(eb's)13
+b(pro)q(cessing)i(phases.)177 2541 y(The)f(phases)h(are)g(brie\015y)f
+(describ)q(ed)i(b)q(elo)o(w.)295 2613 y Fo(The)e(Scanner)c
+Fr(reads)j(the)g(input)f(\014le,)g(expands)h(and)f(reads)h(in)e(include)i
+(\014les,)f(scans)h(the)g(input)295 2663 y(stream,)k(pro)q(cesses)i(pragmas)d
+(and)g(t)o(yp)q(esetter)j(directiv)o(es,)f(and)f(parses)h(all)e(the)h(F)m
+(unnelW)m(eb)295 2713 y(sp)q(ecial)d(sequences.)21 b(The)14
+b(result)h(is)f(a)f(list)h(of)f(tok)o(ens)h(that)g(is)g(handed)g(to)g(the)h
+(parser.)295 2785 y Fo(The)k(P)o(arser)d Fr(reads)i(the)g(scanner's)g(tok)o
+(en)f(list)g(and)g(parses)h(it,)f(constructing)h(a)f(do)q(cumen)o(t)295
+2835 y(list)d(and)f(a)h(macro)f(table.)18 b(whic)o(h)13 b(are)i(passed)g(to)e
+(later)h(phases.)1042 2940 y(64)p eop
+%%Page: 65 66
+65 65 bop 295 42 a Fo(The)20 b(Analyser)c Fr(examines)g(the)i(macro)e(table)i
+(generated)g(b)o(y)f(the)h(parser)h(and)e(p)q(erforms)g(a)295
+91 y(n)o(um)o(b)q(er)12 b(of)f(c)o(hec)o(ks)j(of)d(the)i(macro)e(structures)k
+(that)d(the)h(parser)g(could)f(not)g(mak)o(e)f(on)h(its)g(single)295
+141 y(pass.)17 b(F)m(or)10 b(example,)f(the)h(analyser)g(detects)i(and)e
+(\015ags)g(un)o(used)h(macros)e(and)h(recursiv)o(e)h(macros.)295
+191 y(The)k(analyser)f(forms)e(the)j(\014nal)e(stage)h(of)f(F)m(unnelW)m
+(eb's)h(fron)o(t-end)g(pro)q(cessing.)295 260 y Fo(T)l(angle)g
+Fr(expands)g(certain)h(macros)f(in)g(the)h(macro)e(table)h(to)g(generate)i
+(one)e(or)g(more)g(pro)q(duct)295 309 y(\014les.)295 378 y
+Fo(W)l(ea)o(v)o(e)g Fr(uses)h(the)g(do)q(cumen)o(t)e(list)g(to)h(generate)h
+(a)f(do)q(cumen)o(tation)f(\014le.)177 447 y(A)i(single)g(run)h(through)f
+(these)i(phases)f(constitutes)h(a)e(single)g(in)o(v)o(o)q(cation)e(of)i
+Fo(F)l(unnelW)l(eb)g(prop)q(er)p Fr(.)20 b(Most)177 496 y(in)o(v)o(o)q
+(cations)d(of)h(the)h Fo(F)l(unnelW)l(eb)f(program)e Fr(will)h(consist)i
+(only)e(of)g(a)h(single)g(execution)h(of)e(F)m(unnelW)m(eb)177
+546 y(prop)q(er.)h(Ho)o(w)o(ev)o(er,)12 b(F)m(unnelW)m(eb)f(also)g(pro)o
+(vides)g(a)g(command)e(shell)i(that)g(pro)o(vides)h(man)o(y)d(useful)j
+(commands,)177 596 y(including)j(a)g(command)f(to)h(in)o(v)o(ok)o(e)g(F)m
+(unnelW)m(eb)g(prop)q(er.)25 b(Discussion)16 b(of)f(the)i(command)c(shell)i
+(is)h(deferred)177 646 y(un)o(til)d(Section)h(3.15.)177 799
+y Fi(3.5)70 b(Diagnostics)177 909 y Fr(During)16 b(execution,)h(F)m(unnelW)m
+(eb)f(pro)q(ceeds)j(cautiously)d(with)g(eac)o(h)h(of)f(its)g(phases,)i(only)e
+(pro)q(ceeding)h(with)177 959 y(the)i(next)g(phase)f(if)g(the)g(previous)h
+(phase)g(has)f(b)q(een)h(successful.)33 b(This)18 b(means)f(that,)i(when)f
+(debugging)g(a)177 1009 y(F)m(unnelW)m(eb)d(\014le,)h(y)o(ou)f(ma)o(y)e
+(\014nd)j(that)g(the)g(n)o(um)o(b)q(er)f(of)g(errors)i Fm(incr)n(e)n(ases)e
+Fr(after)h(y)o(ou)f(\014x)g(some)g(of)g(them,)g(as)177 1059
+y(y)o(ou)f(will)e(b)q(e)i(exp)q(osing)g(y)o(ourself)g(to)g(the)g(next)h(F)m
+(unnelW)m(eb)e(phase.)177 1127 y(F)m(unnelW)m(eb)i(emplo)o(ys)g(\014v)o(e)h
+(lev)o(els)g(of)f(diagnostics)h(at)f(di\013eren)o(t)i(lev)o(els)f(of)f(sev)o
+(erit)o(y)m(.)24 b(Sev)o(erit)o(y)17 b(is)e(de\014ned)i(in)177
+1177 y(terms)d(of)f(the)i(lev)o(el)e(of)g(activit)o(y)g(at)h(whic)o(h)g(the)g
+(diagnostic)g(causes)h(F)m(unnelW)m(eb)e(to)h(ab)q(ort.)295
+1246 y Fo(W)l(arning:)i Fr(A)c(w)o(arning)f(do)q(es)h(not)g(cause)h(F)m
+(unnelW)m(eb)e(to)g(terminate)g(or)h(curtail)f(its)h(op)q(eration)295
+1295 y(in)h(an)o(y)f(w)o(a)o(y)m(,)f(but)i(serv)o(es)h(merely)e(to)h(w)o(arn)
+f(the)i(user)g(of)e(particular)g(conditions)h(that)f(migh)o(t)f(b)q(e)295
+1345 y(symptomatic)g(of)j(deep)q(er)h(problems.)295 1414 y
+Fo(Error:)k Fr(An)c(error)h(causes)f(F)m(unnelW)m(eb)f(to)h(terminate)f(pro)q
+(cessing)h(of)f(the)h(curren)o(t)h(input)f(\014le)295 1464
+y(at)d(the)g(end)g(of)f(the)h(curren)o(t)h(phase.)18 b(F)m(or)11
+b(example,)g(if)f(an)i(error)g(o)q(ccurs)h(during)f(scanning,)f(F)m(un-)295
+1514 y(nelW)m(eb)k(will)f(con)o(tin)o(ue)i(scanning)f(\(and)g(p)q(ossibly)g
+(generate)i(further)f(scanning)f(diagnostics\),)295 1563 y(but)f(will)f(not)h
+(in)o(v)o(ok)o(e)f(the)h(parser.)295 1632 y Fo(Sev)o(ere)h(Error:)k
+Fr(A)c(sev)o(ere)h(error)f(\(or)f(\\sev)o(ere")i(for)e(short\))h(is)f(the)h
+(same)e(as)i(an)f(error)h(except)295 1682 y(that)f(F)m(unnelW)m(eb)g
+(terminates)f(the)i(curren)o(t)g(phase)g(imm)o(ediately)m(.)295
+1750 y Fo(F)l(atal)d(Error:)k Fr(A)11 b(fatal)e(error)j(causes)g(F)m(unnelW)m
+(eb)e(not)h(only)f(to)g(terminate)h(the)g(curren)o(t)h(phase)295
+1800 y(and)h(run)g(imm)o(ediately)m(,)c(but)k(also)f(to)g(terminate)g(total)g
+(F)m(unnelW)m(eb)g(pro)q(cessing)i(immediately)l(.)295 1850
+y(A)g(sev)o(ere)i(error)f(will)d(not)i(cause)h(a)e(F)m(unnelW)m(eb)g(script)i
+(to)f(terminate,)f(but)h(a)f(fatal)g(error)i(will.)295 1900
+y(A)f(fatal)f(error)i(causes)g(F)m(unnelW)m(eb)e(to)h(return)h(con)o(trol)f
+(to)g(the)g(op)q(erating)g(system.)295 1969 y Fo(Assertion)e(Error:)17
+b Fr(An)c(assertion)g(error)h(o)q(ccurs)g(if)e(F)m(unnelW)m(eb)g(detects)i
+(an)f(in)o(ternal)f(incon-)295 2018 y(sistency)m(,)h(in)f(whic)o(h)g(case)h
+(F)m(unnelW)m(eb)e(terminates)h(immediately)d(and)j(ungracefully)m(.)k(Suc)o
+(h)d(an)295 2068 y(error)j(can)g(o)q(ccur)g(only)e(if)h(there)h(are)g(bugs)f
+(in)g(F)m(unnelW)m(eb.)22 b(With)14 b(luc)o(k,)h(suc)o(h)h(errors)g(will)e(b)
+q(e)295 2118 y(extremely)g(rare.)177 2187 y(F)m(unnelW)m(eb)c(indicates)g
+(the)h(lev)o(el)e(of)h(sev)o(erit)o(y)h(of)e(eac)o(h)i(diagnostic)e(that)h
+(it)g(issues)h(b)o(y)f(starting)g(eac)o(h)g(diagnostic)177
+2236 y(either)h(with)f(the)h(full)e(name)g(of)h(the)h(sev)o(erit)o(y)f(lev)o
+(el)g(or)h(with)f(just)g(the)h(\014rst)g(letter)g(of)f(the)h(sev)o(erit)o(y)f
+(lev)o(el)g(follo)o(w)o(ed)177 2286 y(b)o(y)k(a)f(colon.)177
+2355 y(F)m(unnelW)m(eb)f(con)o(v)o(eys)h(the)f(presence)j(or)d(absence)i(of)d
+(diagnostics)h(at)g(the)h(op)q(erating)f(system)g(lev)o(el)g(b)o(y)g(return-)
+177 2405 y(ing)g Fl(EXIT)p 336 2405 14 2 v 15 w(SUCCESS)f Fr(status)i(if)f
+(no)g(diagnostics)g(o)q(ccurred)i(during)f(the)g(run)f(and)h
+Fl(EXIT)p 1552 2405 V 15 w(FAILURE)e Fr(status)i(if)f(one)177
+2454 y(or)i(more)f(diagnostics)h(\(including)f(w)o(arnings\))g(o)q(ccurred)j
+(during)d(the)i(run.)1378 2439 y Fg(2)177 2608 y Fi(3.6)70
+b(T)n(yp)r(esetter)21 b(Indep)r(endence)177 2718 y Fr(One)16
+b(of)f(the)g(design)h(goals)e(of)g(F)m(unnelW)m(eb)h(w)o(as)g(to)g(pro)o
+(vide)g(a)g Fm(tar)n(get-language)g Fr(indep)q(enden)o(t)i(literate)e(pro-)
+177 2768 y(gramming)9 b(system.)18 b(This)12 b(goal)g(has)h(b)q(een)h(ac)o
+(hiev)o(ed)f(simply)e(b)o(y)i(treating)f(the)i(text)f(written)h(to)e(the)i
+(pro)q(duct)p 177 2796 709 2 v 223 2823 a Ff(2)241 2835 y Fh(F)m(rom)c(the)h
+(sym)o(b)q(ols)f(of)h(the)g(ANSI)h(standard)d(C)j(library)e
+Fe(stdlib.h)p Fh(.)i(See)f Fb([Kernighan88])p Fh(,)g(p.252.)1042
+2940 y Fr(65)p eop
+%%Page: 66 67
+66 66 bop 177 42 a Fr(\014le)15 b(as)g(homogeneous)f(and)h(t)o(yp)q(esetting)
+h(it)f(in)g Fl(tt)21 b(font)p Fr(.)g(A)15 b(secondary)h(goal)e(w)o(as)h(to)g
+(pro)o(vide)g(a)f Fm(typ)n(esetter)177 91 y Fr(indep)q(enden)o(t)i(literate)f
+(programming)d(system.)21 b(By)15 b(this)g(is)f(mean)o(t)g(that)h(it)f(b)q(e)
+i(p)q(ossible)f(to)g(create)h(F)m(unnel-)177 141 y(W)m(eb)d(input)g(\014les)h
+(that)f(do)g(not)h(con)o(tain)e(t)o(yp)q(esetter-sp)q(e)q(ci\014c)k
+(commands.)g(T)m(o)c(a)h(lesser)i(exten)o(t)f(this)g(goal)e(has)177
+191 y(also)h(b)q(een)i(ac)o(hiev)o(ed.)177 272 y(The)h(di\016cult)o(y)f(with)
+h(pro)o(viding)f(t)o(yp)q(esetter-indep)q(enden)o(t)k(t)o(yp)q(esetting)e(is)
+f(that)f(eac)o(h)i(desired)g(t)o(yp)q(esetting)177 322 y(feature)d(m)o(ust)e
+(b)q(e)h(recreated)j(in)c(a)h(t)o(yp)q(esetter-indep)q(enden)o(t)j(F)m
+(unnelW)m(eb)d(t)o(yp)q(esetting)h(construct)g(that)f(F)m(un-)177
+372 y(nelW)m(eb)f(can)f(translate)i(in)o(to)e(whatev)o(er)h(t)o(yp)q
+(esetting)h(language)d(is)i(b)q(eing)g(targeted)g(b)o(y)g(W)m(ea)o(v)o(e.)k
+(T)m(ak)o(en)c(to)f(the)177 422 y(extreme,)j(this)g(w)o(ould)g(result)h(in)e
+(F)m(unnelW)m(eb)h(pro)o(viding)f(the)i(full)e(syn)o(tactic)i(and)f(seman)o
+(tic)f(p)q(o)o(w)o(er)h(of)g(T)1883 431 y(E)1906 422 y(X,)177
+472 y(but)k(with)e(a)h(more)f(generic,)j(F)m(unnelW)m(eb-sp)q(eci\014c)f(syn)
+o(tax.)27 b(This)17 b(w)o(as)g(unfeasible)g(in)g(the)h(time)d(a)o(v)n
+(ailable,)177 521 y(and)f(undesirable)g(as)g(w)o(ell.)177 603
+y(The)22 b(compromise)e(struc)o(k)i(in)g(the)g(F)m(unnelW)m(eb)f(design)h(is)
+f(to)h(pro)o(vide)f(a)h(set)g(of)f(primitiv)o(e)f(t)o(yp)q(esetter-)177
+653 y(indep)q(enden)o(t)15 b(t)o(yp)q(esetting)f(features)h(that)f(are)g
+(implem)o(en)o(ted)e(b)o(y)h(F)m(unnelW)m(eb.)k(These)e(are)f(the)g
+Fo(t)o(yp)q(esetter)177 702 y(directiv)o(es)p Fr(.)32 b(If)20
+b(the)g(user)h(is)e(prepared)i(to)f(restrict)h(to)e(these)i(directiv)o(es,)h
+(then)e(the)h(user's)f(F)m(unnelW)m(eb)177 752 y(do)q(cumen)o(t)c(will)f(b)q
+(e)h(b)q(oth)h(target-language)e(and)h(t)o(yp)q(esetter)j(indep)q(enden)o(t.)
+26 b(Ho)o(w)o(ev)o(er,)17 b(if)e(the)i(user)g(wishes)177 802
+y(to)f(use)h(the)f(more)f(sophisticated)i(features)g(of)e(the)i(target)f(t)o
+(yp)q(esetting)h(system,)f(the)g(user)h(can)g(sp)q(ecify)f(the)177
+852 y(t)o(yp)q(esetter)g(in)d(a)h(\\)p Fl(typesetter)p Fr(")d(pragma)h(and)h
+(then)i(place)e(t)o(yp)q(esetter)k(commands)11 b(in)i(the)h(free)h(text)f(of)
+f(the)177 902 y(F)m(unnelW)m(eb)i(do)q(cumen)o(t)g(where)i(they)f(will)e(b)q
+(e)i(passed)g(v)o(erbatim)e(to)h(the)h(do)q(cumen)o(tation)f(\014le.)22
+b(The)16 b(c)o(hoice)177 952 y(of)d(the)i(trade-o\013)f(b)q(et)o(w)o(een)i(t)
+o(yp)q(esetter)g(indep)q(endence)g(and)e(t)o(yp)q(esetting)g(p)q(o)o(w)o(er)h
+(is)e(left)h(to)g(the)g(user.)177 1033 y(This)g(said,)f(exp)q(erience)k(with)
+c(F)m(unnelW)m(eb)h(V1)g(o)o(v)o(er)g(a)f(three)j(y)o(ear)e(p)q(erio)q(d,)g
+(indicates)g(that)g(the)h(t)o(yp)q(esetting)177 1083 y(facilities)e(pro)o
+(vided)h(b)o(y)f(F)m(unnelW)m(eb)h(are)g(su\016cien)o(t)g(for)g(most)f(do)q
+(cumen)o(tation.)177 1266 y Fi(3.7)70 b(Command)22 b(Line)g(In)n(terface)177
+1400 y Fd(3.7.1)55 b(In)n(v)n(oking)19 b(F)-5 b(unnelW)g(eb)177
+1511 y Fr(When)14 b(a)f(user)i(in)o(v)o(ok)o(es)e(F)m(unnelW)m(eb)g(at)g(the)
+h(op)q(erating)g(system)f(command)e(lev)o(el,)h(the)j(user)f(m)o(ust)f(pro)o
+(vide)g(a)177 1561 y(command)g(line)j(instructing)g(F)m(unnelW)m(eb)g(what)g
+(to)g(do.)24 b(T)o(ypically)14 b(an)i(op)q(erating)g(system)g(command)d(line)
+177 1610 y(consists)h(of)e(a)h Fm(verb)g Fr(indicating)e(that)i(a)g
+(particular)g(program)e(should)i(b)q(e)g(run,)g(follo)o(w)o(ed)f(b)o(y)g(a)h
+(list)f(of)h(options.)177 1660 y(F)m(or)h(example:)177 1793
+y Fl($)22 b(rename)e(file1)h(file2)177 1926 y Fr(In)f(this)f(case,)j(the)e(v)
+o(erb)g(is)f Fl(rename)f Fr(and)i(the)g(command)c(line)k(options)f(are)h
+Fl(file1)g(file2)p Fr(.)34 b(The)20 b(en)o(tire)177 1976 y(command)11
+b(line)j(b)q(egins)g(with)f(the)i Fl($)f Fr(and)f(ends)i(with)f(the)g
+Fl(2)p Fr(.)177 2057 y(Op)q(erating)d(systems)g(di\013er)g(greatly)f(in)g
+(the)h(depth)g(with)g(whic)o(h)f(they)h(pro)q(cess)h(their)f(command)d
+(lines,)j(ranging)177 2107 y(from)d(systems)i(that)g(simply)d(pass)j(the)h
+(en)o(tire)f(command)d(line)i(string)h(to)f(the)i(in)o(v)o(ok)o(ed)d(program)
+g(\(e.g.)i(MSDOS\))177 2157 y(through)k(to)g(systems)g(that)f(p)q(erform)g
+(complete)h(command)d(line)i(parsing)g(\(e.g.)h(VMS\).)f(Syn)o(tax)h(con)o(v)
+o(en)o(tions)177 2207 y(v)n(ary)g(considerably)m(.)177 2288
+y(So)k(as)g(to)g(ac)o(hiev)o(e)h(maxim)n(um)13 b(p)q(ortabilit)o(y)k(and)h
+(consistency)i(of)d(in)o(v)o(o)q(cation)g(across)i(di\013eren)o(t)g
+(platforms,)177 2338 y(F)m(unnelW)m(eb)g(reads)h(its)f(command)e(line)h(as)i
+(a)f(ra)o(w)g(string)g(and)g(p)q(erforms)g(all)f(its)h(o)o(wn)g(parsing.)34
+b(This)19 b(is)177 2388 y(p)q(ortable)12 b(b)q(ecause,)i(at)d(the)i(v)o(ery)f
+(least,)g(all)f(op)q(erating)g(systems)h(allo)o(w)f(in)o(v)o(ok)o(ed)g
+(programs)f(access)k(to)e(the)g(ra)o(w)177 2438 y(command)f(line.)177
+2519 y(The)j(command)e(v)o(erb)i(used)h(to)e(in)o(v)o(ok)o(e)g(F)m(unnelW)m
+(eb)h(should)g(b)q(e)g(\\)p Fl(fw)p Fr(".)177 2652 y Fl(FunnelWeb_verb)19
+b(=)43 b("fw")177 2785 y Fr(If)14 b(this)g(v)o(erb)h(is)f(not)g(a)o(v)n
+(ailable,)d(some)i(alternativ)o(es)h(are)h(\\)p Fl(funweb)p
+Fr(",)d(\\)p Fl(fun)p Fr(",)g(and)i(\\)p Fl(funnelweb)p Fr(".)i(The)f(v)o
+(erbs)177 2835 y Fl(web)e Fr(or)h Fl(fweb)f Fr(should)h(b)q(e)g(a)o(v)o
+(oided)f(as)h(they)h(are)f(the)h(names)e(of)g(other)h(literate)h(programmi)o
+(ng)c(systems.)1042 2940 y(66)p eop
+%%Page: 67 68
+67 67 bop 177 42 a Fd(3.7.2)55 b(Command)17 b(Line)h(Argumen)n(ts)177
+158 y Fr(F)m(ollo)o(wing)c(the)j(v)o(erb)g(is)g(the)g(b)q(o)q(dy)g(of)f(the)h
+(command)d(line)i(whic)o(h)g(F)m(unnelW)m(eb)g(parses)i(in)o(to)e(zero)h(or)g
+(more)177 208 y Fo(argumen)o(ts)12 b Fr(separated)j(b)o(y)e(runs)i(of)e(one)h
+(or)g(more)f(blanks.)177 350 y Fl(FunnelWeb_command_)o(line)18
+b(=)k(FunnelWeb_verb)d({{")i("}+)g(argument})177 493 y Fr(Because)e(some)c
+(op)q(erating)h(systems)h(con)o(v)o(ert)g(their)g(command)d(line)i(to)g(upp)q
+(er)h(case)h(b)q(efore)f(handing)f(it)g(to)177 543 y(the)h(in)o(v)o(ok)o(ed)f
+(program,)f(F)m(unnelW)m(eb)h(has)h(b)q(een)h(constructed)g(so)f(as)g(to)f(b)
+q(e)h Fm(insensitive)g Fr(to)f(the)h(case)h(of)e(its)177 593
+y(command)9 b(line)i(argumen)o(ts.)16 b(Ho)o(w)o(ev)o(er,)c(when)g(dealing)f
+(in)o(ternally)f(with)i(argumen)o(ts,)e(F)m(unnelW)m(eb)h Fm(pr)n(eserves)177
+642 y Fr(the)k(case)h(of)e(its)h(command)c(line)k(argumen)o(ts)e(so)i(that)g
+(it)f(will)f(b)q(e)i(able)g(to)f(op)q(erate)i(with)e(op)q(erating)h(systems)
+177 692 y(\(suc)o(h)g(as)f(Unix\))g(whose)g(\014le)g(names)f(are)h(case)h
+(dep)q(enden)o(t.)177 777 y(A)d(v)n(alid)d(F)m(unnelW)m(eb)i(argumen)o(t)f
+(consists)j(of)d(a)h Fo(sign)p Fr(,)f(an)h(iden)o(tifying)f
+Fo(letter)p Fr(,)f(and)i(an)g(optional)f Fo(string)f Fr(with)177
+827 y(no)14 b(spaces)h(separating)f(them.)177 970 y Fl(argument)42
+b(=)22 b(sign)f(id_letter)f([non_blank_stri)o(ng])177 1020
+y(sign)130 b(=)22 b("+")f(|)g("-")h(|)f("=")177 1069 y(id_letter)f(=)i("B")f
+(|)g("C")h(|)f("D")g(|)h("F")f(|)h("H")f(|"I")g(|)g("J")h(|)f("K")g(|)439
+1119 y("L")g(|)g("O")h(|)f("Q")g(|)h("S")f(|)h("T")f(|)g("W")h(|)f("X")177
+1262 y Fr(In)14 b(addition)f(there)i(is)f(a)f(sp)q(ecial)h(form)f(of)g
+(argumen)o(t)g(that)h(do)q(es)g(not)g(b)q(egin)g(with)f(a)h(sign.)177
+1404 y Fl(argument)20 b(=)i(non_blank_string_)o(not_b)o(eginn)o(ing_)o(with_)
+o(+_=_o)o(r_-)177 1547 y Fr(This)14 b(form)e(is)i(exactly)g(equiv)n(alen)o(t)
+f(to)h(the)g(same)f(string)h(with)g(\\)p Fl(+F)p Fr(")f(prep)q(ended)j(to)d
+(it.)177 1632 y(The)e(seman)o(tic)f(e\013ect)i(of)e(these)i(argumen)o(ts)d
+(is)i(de\014ned)g(in)f(terms)g(of)g Fo(options)e Fr(whic)o(h)j(are)f(the)h
+(in)o(ternal)g(param-)177 1682 y(eters)17 b(of)e(F)m(unnelW)m(eb)g(and)g
+(whic)o(h)g(corresp)q(ond)i(closely)f(with)f(the)h(set)g(of)f(legal)f
+(command)f(line)i(argumen)o(ts.)177 1732 y(F)m(unnelW)m(eb)g(has)g(a)g
+(prede\014ned)i(set)f(of)e(options)h(eac)o(h)g(iden)o(ti\014ed)g(b)o(y)g(an)g
+(iden)o(tifying)f(letter)i(ha)o(ving)e(t)o(w)o(o)g(at-)177
+1781 y(tributes:)22 b(a)14 b Fm(string)p Fr(,)h(and)g(a)f Fm(b)n(o)n(ole)n
+(an)p Fr(.)23 b(The)15 b(b)q(o)q(olean)g(determines)g(whether)i(an)e(option)f
+(is)h(turned)h Fm(on)g Fr(or)f Fm(o\013)p Fr(.)177 1831 y(The)f(string)g(con)
+o(tains)g(additional)e(information)f(dep)q(ending)k(on)e(the)i(option.)177
+1916 y(When)e(F)m(unnelW)m(eb)f(starts)i(up,)e(its)h(options)g(ha)o(v)o(e)f
+(prede\014ned)j(default)d(v)n(alues.)17 b(F)m(unnelW)m(eb)12
+b(then)i(parses)g(its)177 1966 y(command)g(line)i(sequen)o(tially)g(from)e
+(left)i(to)h(righ)o(t)f(executing)h(the)g(e\013ect)h(of)e(eac)o(h)h(argumen)o
+(t)e(on)h(the)h(argu-)177 2016 y(men)o(t's)d(corresp)q(onding)h(option.)20
+b(The)15 b(sign)f(and)h(the)g(string)f(comp)q(onen)o(ts)h(of)f(the)h(argumen)
+o(t)e(are)i(pro)q(cessed)177 2066 y Fm(indep)n(endently)p Fr(.)31
+b(A)18 b(sign)f(of)h Fl(+)f Fr(turns)i(the)f(option)f(on.)30
+b(A)18 b(sign)f(of)g Fl(-)h Fr(turns)g(the)h(option)e(o\013.)29
+b(A)18 b(sign)g(of)f Fl(=)177 2116 y Fr(lea)o(v)o(es)f(the)h(option's)e(b)q
+(o)q(olean)h(attribute)g(unc)o(hanged.)25 b(The)16 b(argumen)o(t)f(string)h
+(replaces)h(the)g(string)f(of)f(the)177 2166 y(corresp)q(onding)h(option,)e
+(unless)h(the)h(argumen)o(t)d(string)i(is)g(empt)o(y)m(,)e(in)h(whic)o(h)h
+(case)h(the)f(option)f(string)h(is)g(not)177 2215 y(c)o(hanged.)177
+2301 y(Because)20 b(F)m(unnelW)m(eb)d(pro)q(cesses)j(its)e(command)d(line)j
+(argumen)o(ts)f(from)f(left)h(to)h(righ)o(t,)g(a)f(later)h(argumen)o(t)177
+2350 y(can)e(cancel)h(the)g(e\013ect)h(of)d(an)h(earlier)g(one.)25
+b(F)m(or)16 b(example)f Fl(fw)21 b(+t)g(-t)16 b Fr(will)f(result)h(in)g(the)h
+Fl(t)f Fr(option)f(ending)177 2400 y(up)k Fm(o\013)p Fr(.)32
+b(This)18 b(allo)o(ws)f(users)j(to)e(set)h(up)f(their)h(o)o(wn)f(default)g
+(argumen)o(ts)g(b)o(y)g(de\014ning)g(a)g(sym)o(b)q(ol)f(in)g(their)177
+2450 y(op)q(erating)c(system's)g(command)d(language.)17 b(F)m(or)c(example,)e
+(a)i(Unix)f(user)j(who)d(w)o(an)o(ts)h(F)m(unnelW)m(eb)g(to)g(delete)177
+2500 y(all)e(iden)o(tical)h(output)g(\014les)g(and)g(create)i(a)e(do)q(cumen)
+o(tation)f(\014le)h(on)g(eac)o(h)h(run)f(with)g(a)g(default)g
+Fl(.typ)f Fr(extension)177 2550 y(could)j(simply)e(place)i(the)g(follo)o
+(wing)e(de\014nition)h(in)g(their)i(\\)p Fl(.login)p Fr(")d(\014le.)177
+2692 y Fl(alias)21 b(fw)g(fw)h(+d)f(+t.typ)177 2835 y Fr(These)15
+b(default)f(options)f(can)h(then)h(later)f(b)q(e)g(easily)g(o)o(v)o(erridden)
+g(on)g(the)g(command)d(line.)1042 2940 y(67)p eop
+%%Page: 68 69
+68 68 bop 177 42 a Fd(3.7.3)55 b(Options)177 146 y Fr(F)m(unnelW)m(eb's)14
+b(options)h(are)g(in)o(ternal)f(parameters)h(whic)o(h)g(can)g(b)q(e)g(mo)q
+(di\014ed)e(b)o(y)i(corresp)q(onding)h(argumen)o(ts)177 196
+y(on)e(F)m(unnelW)m(eb's)f(command)e(line.)18 b(A)c(description)g(of)g(eac)o
+(h)g(argumen)o(t)f(and)g(option)h(follo)o(ws.)295 273 y Fo(B1)p
+Fn(:)7 b(:)g(:)o Fo(B6:)36 b(T)l(racedumps:)31 b Fr(These)22
+b(six)e(options)h(ha)o(v)o(e)f(b)q(een)i(pro)o(vided)e(to)h(assist)g(in)f
+(the)295 323 y(debugging)e(and)h(testing)g(of)f(F)m(unnelW)m(eb.)32
+b(They)19 b(determine)g(whic)o(h)f(of)g(six)h(p)q(ossible)g(trace)295
+373 y(dumps)g(are)h(to)f(b)q(e)h(written)g(to)f(the)i(listing)d(\014le.)35
+b(Only)19 b(the)h(b)q(o)q(olean)f(attributes)h(of)f(these)295
+423 y(options)14 b(are)g(ev)o(er)h(used.)k(The)14 b(six)g(dumps)f(are)h(iden)
+o(ti\014ed)g(b)o(y)g(the)g(digits)f Fl(1..6)g Fr(as)h(follo)o(ws:)228
+545 y(1.)20 b(Dump)12 b(a)i(hexdump)f(of)g(eac)o(h)i(mapp)q(ed)d(input)i(and)
+g(include)g(\014le.)228 632 y(2.)20 b(Dump)12 b(the)j(global)d(line)h(list)h
+(created)h(b)o(y)f(the)g(scanner.)228 720 y(3.)20 b(Dump)12
+b(the)j(tok)o(en)f(list)f(created)j(b)o(y)d(the)i(scanner.)228
+807 y(4.)20 b(Dump)12 b(the)j(macro)d(table)i(created)i(b)o(y)d(the)i
+(parser.)228 895 y(5.)20 b(Dump)12 b(the)j(do)q(cumen)o(t)e(list)h(created)h
+(b)o(y)f(the)g(parser.)228 983 y(6.)20 b(Dump)12 b(a)i(table)g(summarizing)c
+(CPU)15 b(and)e(real)h(time)f(usage.)295 1105 y(Because)18
+b(these)e(options)f(are)h(so)g(closely)f(related,)h(a)f(hac)o(k)g(has)h(b)q
+(een)h(pulled)e(to)g(enable)g(them)295 1154 y(to)h(all)g(to)g(b)q(e)h(con)o
+(trolled)f(b)o(y)g(the)h Fl(B)f Fr(argumen)o(t.)24 b(The)17
+b(string)f(argumen)o(t)g(to)g(the)h Fl(B)f Fr(argumen)o(t)295
+1204 y(determines)f(whic)o(h)f(of)f(the)i(six)f(options)g(are)g(to)g(b)q(e)h
+(a\013ected)g(b)o(y)f(the)h(sign.)j(Examples:)g Fl(+B134)295
+1254 y Fr(turns)d(on)f(options)f Fl(B1)p Fr(,)g Fl(B3)p Fr(,)g(and)h
+Fl(B4)p Fr(.)j Fl(-B1)d Fr(turns)g(o\013)g(option)f Fl(B1)p
+Fr(.)18 b Fl(Default:)i(-B123456)p Fr(.)295 1331 y Fo(B7:)h(Determini)o(sm:)
+15 b Fr(If)d(the)h Fl(B7)f Fr(option)g(is)g(turned)h(on,)f(F)m(unnelW)m(eb)g
+(suppresses)j(the)e(output)295 1381 y(of)g(an)o(ything)g(non-deterministic,)g
+(or)h(mac)o(hine)e(dep)q(enden)o(t.)20 b(This)14 b(assists)g(in)g(regression)
+h(test-)295 1431 y(ing.)23 b(Only)16 b(the)g(b)q(o)q(olean)f(attribute)h(is)g
+(used)h(in)e(this)h(option.)22 b(This)16 b(option)f(is)g(con)o(trolled)h(b)o
+(y)295 1481 y(the)e Fl(B7)f Fr(argumen)o(t)g(whic)o(h)g(falls)f(under)i(the)g
+(same)f(argumen)o(t)f(syn)o(tax)i(as)f(the)h(other)g Fl(B)f
+Fr(options.)295 1530 y(Examples:)k Fl(+B7)p Fr(,)c Fl(-B7)p
+Fr(.)k Fl(Default:)j(-B7)p Fr(.)295 1607 y Fo(C:)e(Listing)13
+b(File)i(Con)o(text:)k Fr(The)c Fl(C)f Fr(option)g(is)g(alw)o(a)o(ys)g
+(turned)h(on)g(and)f(cannot)h(b)q(e)g(turned)295 1657 y(o\013.)24
+b(Its)16 b(only)f(attribute)h(is)g(a)g(n)o(um)o(b)q(er)f(whic)o(h)g
+(determines)h(the)h(n)o(um)o(b)q(er)e(of)g(lines)h(of)f(con)o(text)295
+1707 y(that)j(the)g(lister)g(will)e(place)h(around)h(lines)f(\015agged)g
+(with)g(diagnostics)g(in)g(the)i(listing)d(\014le)h(\(if)295
+1757 y(a)f(listing)e(\014le)i(is)g(written\).)24 b(A)16 b(v)n(alue)f(of)h
+(100)f(indicates)h(in\014nite)f(con)o(text)i(whic)o(h)f(means)f(that)295
+1807 y(the)j(en)o(tire)f(listing)e(\014le)i(will)e(b)q(e)i(written)h(out)e
+(if)g(a)g(single)g(diagnostic)g(o)q(ccurs.)28 b(The)17 b(v)n(alue)f(of)295
+1856 y(this)g(n)o(um)o(b)q(er)f(can)h(b)q(e)g(sp)q(eci\014ed)i(b)o(y)d(sp)q
+(ecifying)h(it)f(as)h(a)f(string)h(of)f(decimal)f(digits)h(to)h(the)g
+Fl(+C)295 1906 y Fr(argumen)o(t.)h(Examples:)g Fl(+C100)p Fr(,)12
+b Fl(+C10)p Fr(.)18 b Fl(Default:)i(+C2)p Fr(.)295 1983 y Fo(D:)f(Delete)e
+(Iden)o(tical)f(Output)h(Files:)22 b Fr(Only)16 b(the)h(b)q(o)q(olean)g
+(attribute)g(of)e(this)i(option)f(is)295 2033 y(used.)23 b(When)15
+b(turned)h(on,)f(the)h(option)e(causes)i(the)g(suppression)h(\(deletion\))e
+(of)f(pro)q(duct)i(\014les)295 2083 y(and)j(do)q(cumen)o(tation)f(\014les)i
+(\(but)g(not)f(listing)f(or)h(journal)g(\014les\))g(that)h(are)f(iden)o
+(tical)g(to)g(the)295 2133 y(curren)o(tly)14 b(existing)f(\014les)h(of)f(the)
+g(same)g(name.)j(F)m(or)d(example,)f(if)g(F)m(unnelW)m(eb)h(is)g(instructed)i
+(to)295 2182 y(generate)d Fl(stack.h)e Fr(as)h(an)g(pro)q(duct)h(\014le,)f
+(and)f(the)i(text)f(to)g(b)q(e)h(written)f(to)g Fl(stack.h)f
+Fr(is)g(iden)o(tical)295 2232 y(to)i(the)h(curren)o(tly)g(existing)f
+Fl(stack.h)p Fr(,)f(then)i(F)m(unnelW)m(eb)e(will)g(simply)f(not)i(write)h
+(an)o(y)f(pro)q(duct)295 2282 y(\014le,)h(lea)o(ving)e(the)i(curren)o(tly)h
+(existing)e Fl(stack.h)f Fr(as)i(it)f(is)h(\(and)g(in)f(particular)g(lea)o
+(ving)g(the)h(\014le's)295 2332 y(date)e(attribute)g(the)g(same\).)17
+b(This)10 b(prev)o(en)o(ts)i(unnecessary)h Fl(make)c Fr(propagations.)16
+b(F)m(or)10 b(example,)295 2382 y(in)16 b(a)f(C)h(program,)e(if)h
+Fl(stack.fw)f Fr(is)i(a)f(F)m(unnelW)m(eb)h(input)f(\014le)h(that)g
+(generates)i Fl(stack.h)c Fr(and)295 2432 y Fl(stack.c)p Fr(,)9
+b(a)h(mo)q(di\014cation)d(to)j Fl(stack.fw)e Fr(that)i(a\013ects)h
+Fl(stack.c)e Fr(but)h(do)q(es)h(not)e(a\013ect)i Fl(stack.h)295
+2481 y Fr(will)f(not)i(pro)o(v)o(ok)o(e)f(the)i(recompilation)c(of)i(mo)q
+(dules)g(that)h Fl(#include)20 b(stack.h)p Fr(,)10 b(so)i(long)e(as)i(the)295
+2531 y(in)o(terv)o(ening)i(F)m(unnelW)m(eb)f(run)i(has)f Fl(+D)f
+Fr(set.)19 b(Examples:)e Fl(-D)p Fr(,)c Fl(+D)p Fr(.)g Fl(Default:)20
+b(-D)p Fr(.)295 2608 y Fo(F:)f(F)l(unnelW)l(eb)d(Input)h(File:)22
+b Fr(If)16 b(this)g(option)g(is)g(turned)h(on,)f(F)m(unnelW)m(eb)g(pro)q
+(cesses)j(the)295 2658 y(input)h(\014le)h(whose)f(name)f(is)h(sp)q(eci\014ed)
+i(b)o(y)e(the)h(option)f(string.)37 b(Examples:)29 b Fl(+Fsloth.fw)p
+Fr(,)295 2708 y Fl(+Fwalrus)p Fr(,)12 b Fl(-F)p Fr(.)h Fl(Default:)20
+b(-F)p Fr(.)295 2785 y Fo(H:)h(Displa)o(y)c(Help)i(Message:)26
+b Fr(If)17 b(this)g(option)g(is)g(turned)i(on,)e(F)m(unnelW)m(eb)g(displa)o
+(ys)g(the)295 2835 y(message)d(sp)q(eci\014ed)h(b)o(y)e(the)h(argumen)o(t)e
+(string.)18 b(Eac)o(h)c(message)g(has)f(a)g(name.)k(The)d(main)e(help)1042
+2940 y(68)p eop
+%%Page: 69 70
+69 69 bop 295 42 a Fr(message)16 b(is)g(called)f(\\)p Fl(menu)p
+Fr(")g(and)h(con)o(tains)g(a)f(list)h(of)f(the)h(other)h(help)f(messages.)24
+b(Examples:)295 91 y Fl(+Hregistration)p Fr(,)11 b Fl(+Hoptions)p
+Fr(.)16 b Fl(Default:)k(-Hmenu)p Fr(.)295 165 y Fo(I:)c(Include)e(default)g
+(\014le)g(sp)q(eci\014cation:)i Fr(This)e(option)f(is)h(alw)o(a)o(ys)e
+(turned)j(on)f(and)f(cannot)295 215 y(b)q(e)j(turned)g(o\013.)22
+b(Its)16 b(string)f(attribute)h(is)f(used)h(as)f(the)h(default)f(\014le)g(sp)
+q(eci\014cation)h(for)f(include)295 265 y(\014les.)j(Usually)12
+b(this)g(option)g(is)g(used)h(to)f(sp)q(ecify)h(a)f(directory)h(from)e(whic)o
+(h)h(include)g(\014les)h(should)295 315 y(b)q(e)i(obtained.)j(Examples:)e
+Fl(=I/usr/dave/includes)o(/)p Fr(.)f Fl(Default:)20 b(+I)p
+Fr(.)295 388 y Fo(J:)d(Journal)d(File:)19 b Fr(If)14 b(this)g(option)g(is)g
+(turned)i(on,)e(F)m(unnelW)m(eb)g(generates)i(a)e(journal)g(\014le.)20
+b(A)295 438 y(journal)15 b(\014le)h(con)o(tains)g(a)g(log)f(of)g(all)g(the)i
+(console)f(input)g(and)g(output)g(to)g(F)m(unnelW)m(eb)f(during)295
+488 y(a)h(single)g(in)o(v)o(o)q(cation)f(of)h(the)h(F)m(unnelW)m(eb)f
+(program)f(\(Note:)23 b(The)17 b Fl(Q)f Fr(option)f(do)q(es)i(not)g(a\013ect)
+295 538 y(this.\).)23 b(The)16 b(journal)f(\014le)g(is)h(particularly)f
+(useful)g(for)g(examining)f(what)h(happ)q(ened)i(during)e(a)295
+588 y(F)m(unnelW)m(eb)e(shell)h(run.)k(The)d(string)e(attribute)i(is)e(the)i
+(name)d(of)h(the)h(journal)f(\014le.)18 b(Examples:)295 638
+y Fl(+Jjournfile)p Fr(,)11 b Fl(-J)p Fr(.)i Fl(Default:)20
+b(-J)p Fr(.)295 711 y Fo(K:)g(Keyb)q(oard:)k Fr(If)16 b(this)h(option)f(is)g
+(turned)i(on,)e(F)m(unnelW)m(eb)g(en)o(ters)i(an)f(in)o(teractiv)o(e)g(mo)q
+(de)295 761 y(in)i(whic)o(h)g(the)h(user)h(can)e(en)o(ter)h(F)m(unnelW)m(eb)f
+(shell)g(commands)e(in)o(teractiv)o(ely)m(.)34 b(The)20 b(string)295
+811 y(attribute)15 b(is)e(un)o(used.)19 b(Examples:)e Fl(+K)p
+Fr(,)c Fl(-K)p Fr(.)g Fl(Default:)20 b(-K)p Fr(.)295 885 y
+Fo(L:)d(Listing)d(File:)k Fr(If)c(this)h(option)e(is)i(turned)g(on,)f(F)m
+(unnelW)m(eb)g(generates)i(a)f(listing)e(\014le)i(con-)295
+935 y(taining)e(a)g(summary)e(of)i(a)h(run)g(on)f(F)m(unnelW)m(eb)h(prop)q
+(er.)k(The)d(string)e(argumen)o(t)g(is)h(the)g(name)295 985
+y(of)g(the)g(listing)f(\014le)h(to)f(b)q(e)i(created.)k(Examples:)e
+Fl(+L)p Fr(,)c Fl(-L)p Fr(,)g Fl(+Llisting.lis)p Fr(.)j Fl(Default:)k(-L)p
+Fr(.)295 1058 y Fo(O:)e(Pro)q(duct)d(Files:)k Fr(If)c(this)g(option)f(is)h
+(turned)h(on,)e(F)m(unnelW)m(eb)h(generates)h(a)f(pro)q(duct)h(\014le)295
+1108 y(for)e(eac)o(h)h(macro)e(in)g(the)i(input)f(\014le)g(that)g(is)g(b)q
+(ound)g(to)g(an)g(output)h(\014le.)j(The)d(string)f(attribute)295
+1158 y(con)o(tributes)22 b(to)e(the)h(name)e(of)h(the)h(pro)q(duct)g
+(\014les.)38 b(This)20 b(option)g(is)g(con)o(trolled)g(b)o(y)g(the)h
+Fl(O)295 1208 y Fr(argumen)o(t)d(b)q(ecause)j(pro)q(duct)e(\014les)g(used)h
+(to)f(b)q(e)g(called)g(\\)p Fo(O)p Fr(utput)g(\014les"\).)33
+b(Examples:)27 b Fl(-O)p Fr(,)295 1258 y Fl(+O/usr/dave/product)o(/)p
+Fr(.)15 b Fl(Default:)20 b(+O)p Fr(.)295 1332 y Fo(Q:)15 b(Quiet:)h
+Fr(If)c(this)g(option)g(is)g(turned)i(on,)e(F)m(unnelW)m(eb)f(suppresses)16
+b(all)11 b(output)h(to)h(the)g(screen)295 1381 y(\(standard)k(output\))f
+(unless)g(one)g(or)g(more)f(errors)i(o)q(ccur,)g(in)e(whic)o(h)h(case)h(a)e
+(single)h(line)f(sum-)295 1431 y(marizing)d(the)i(errors)h(is)e(sen)o(t)i(to)
+e(standard)h(output)g(at)f(the)i(end)f(of)f(the)h(run.)k(If)13
+b(this)h(option)f(is)295 1481 y(turned)j(o\013,)e(F)m(unnelW)m(eb)g(writes)h
+(to)g(the)g(console)g(in)f(its)g(normal)f(garrulous)h(w)o(a)o(y)m(.)19
+b(The)c(string)295 1531 y(attribute)g(is)e(un)o(used)i(in)f(this)g(option.)j
+(Examples:)g Fl(-Q)p Fr(,)c Fl(+Q)p Fr(.)g Fl(Default:)20 b(-Q)p
+Fr(.)295 1605 y Fo(S:)13 b(Screen:)k Fr(If)11 b(this)h(option)f(is)g(turned)i
+(on,)e(F)m(unnelW)m(eb)h(writes)g(all)e(diagnostics)i(to)f(the)i(screen)295
+1654 y(\(standard)i(output\))g(as)g(w)o(ell)f(as)g(to)h(the)g(listing)f
+(\014le.)20 b(By)14 b(default,)g(they)h(are)g(sen)o(t)h(only)e(to)g(the)295
+1704 y(listing)i(\014le.)28 b(This)17 b(option)g(has)g(a)g(single)f(n)o
+(umerical)g(attribute)i(that)f(can)g(b)q(e)h(sp)q(eci\014ed)h(as)e(a)295
+1754 y(decimal)10 b(string)i(in)g(the)g(string)g(comp)q(onen)o(t)f(of)g(the)h
+Fl(S)g Fr(argumen)o(t.)k(The)c(n)o(um)o(b)q(er)f(is)h(the)g(n)o(um)o(b)q(er)
+295 1804 y(of)g(lines)f(of)h(con)o(text)g(that)g(should)g(surround)g(eac)o(h)
+h(diagnostic)e(sen)o(t)i(to)e(the)i(screen.)19 b(Examples:)295
+1854 y Fl(-S)p Fr(,)13 b Fl(+S6)p Fr(,)g Fl(+S0)p Fr(.)k Fl(Default:)j(-S)p
+Fr(.)295 1928 y Fo(T:)e(Do)q(cumen)o(tation)c(\014le:)20 b
+Fr(If)14 b(this)i(option)1034 1913 y Fg(3)1067 1928 y Fr(is)e(turned)j(on,)d
+(F)m(unnelW)m(eb)h(generates)i(a)d(do)q(c-)295 1977 y(umen)o(tation)f(\014le)
+i(in)g(T)657 1986 y(E)680 1977 y(X)g(format.)k(The)c(string)g(argumen)o(t)f
+(con)o(tributes)i(to)f(the)g(name)f(of)g(the)295 2027 y(do)q(cumen)o(tation)g
+(\014le)h(to)g(b)q(e)g(created.)23 b(By)15 b(default)f(this)h(option)f(is)h
+(turned)h(o\013,)f(as)f(exp)q(erience)295 2077 y(has)h(sho)o(wn)f(that)g
+(most)f(F)m(unnelW)m(eb)h(runs)g(are)h(made)e(during)h(program)e(dev)o
+(elopmen)o(t;)h(do)q(cu-)295 2127 y(men)o(tation)f(runs)j(o)q(ccur)g(far)f
+(more)e(rarely)m(.)18 b(Examples:)f Fl(-T)p Fr(,)c Fl(+Tsloth.tex)p
+Fr(.)j Fl(Default:)k(-T)p Fr(.)295 2201 y Fo(W:)e(Width)e(of)g(Pro)q(duct)g
+(Files:)j Fr(If)c(this)g(option)f(is)h(turned)h(on,)f(a)g(limit)d(is)j
+(placed)g(on)g(the)295 2250 y(length)f(of)g(lines)g(in)g(pro)q(duct)h
+(\014les)g(generated)g(during)f(the)h(run.)20 b(Lines)14 b(that)g(breac)o(h)i
+(the)e(limit)295 2300 y(are)k(\015agged)f(with)g(error)h(messages.)28
+b(This)17 b(option)g(has)g(a)g(single)g(n)o(umerical)f(attribute)i(that)295
+2350 y(can)c(b)q(e)h(sp)q(eci\014ed)h(as)e(a)f(decimal)g(string)h(in)f(the)i
+(string)f(comp)q(onen)o(t)f(of)h(the)g Fl(W)g Fr(argumen)o(t.)j(The)295
+2400 y(n)o(um)o(b)q(er)f(is)h(the)h(sp)q(eci\014ed)g(maxim)n(um)13
+b(width.)26 b(This)17 b(option)f(is)h(one)g(of)f(t)o(w)o(o)h(limits)d(that)j
+(are)295 2450 y(placed)i(on)f(the)h(width)f(of)f(pro)q(duct)i(\014les.)32
+b(The)18 b(other)h(limit)d(is)i(an)g(attribute)g(of)g(the)h(input)295
+2500 y(\014le)c(that)f(defaults)h(to)g(80)f(c)o(haracters,)i(but)e(can)h(b)q
+(e)g(raised)g(or)g(lo)o(w)o(ered)g(using)f(an)g(output)h(line)295
+2549 y(length)f(pragma.)i(The)d(width)h(that)f(is)g(enforced)i(is)e(the)h(lo)
+o(w)o(er)f(of)g(this)g(v)n(alue)g(and)g(the)i(v)n(alue)d(of)295
+2599 y(the)j Fl(W)e Fr(option)h(\(if)f(turned)i(on\).)j(Examples:)e
+Fl(-W)p Fr(,)d Fl(+W100)p Fr(.)k Fl(Default:)j(-W80)p Fr(.)295
+2673 y Fo(X:)f(Execute:)i Fr(If)16 b(this)f(option)g(is)h(turned)g(on,)g(F)m
+(unnelW)m(eb)f(executes)i(the)g(F)m(unnelW)m(eb)e(shell)295
+2723 y(script)g(\014le)f(sp)q(eci\014ed)h(b)o(y)f(the)g(string)g(attribute.)
+19 b(Examples:)e Fl(+Xmaster)p Fr(,)11 b Fl(-X)p Fr(.)i Fl(Default:)21
+b(-X)p Fr(.)p 177 2757 709 2 v 223 2783 a Ff(3)241 2795 y Fh(This)c(option)f
+(is)h(con)o(trolled)d(b)o(y)j(the)f Fe(T)i Fh(command)c(line)i(argumen)o(t)f
+(b)q(ecause)g(do)q(cumen)o(tati)o(on)f(\014les)j(used)f(to)h(b)q(e)g(called)
+177 2835 y(t)o(yp)q(esetter)9 b(\014les.)1042 2940 y Fr(69)p
+eop
+%%Page: 70 71
+70 70 bop 177 42 a Fi(3.8)70 b(File)21 b(Name)h(Inheritance)177
+157 y Fr(During)10 b(a)h(single)f(run)h(of)f(F)m(unnelW)m(eb,)g(F)m(unnelW)m
+(eb)h(can)g(pro)q(duce)g(man)o(y)e(di\013eren)o(t)j(output)f(\014les.)17
+b(As)11 b(it)g(w)o(ould)177 207 y(b)q(e)i(v)o(ery)g(tedious)g(to)f(ha)o(v)o
+(e)g(to)g(sp)q(ecify)h(the)g(name)f(of)f(eac)o(h)i(of)f(these)i(\014les)f
+(explicitly)e(eac)o(h)i(time)e(F)m(unnelW)m(eb)h(is)177 257
+y(run,)g(F)m(unnelW)m(eb)e(pro)o(vides)i(a)f(system)g(of)f(defaults)h(that)g
+(allo)o(ws)f(the)i(user)g(to)f(sp)q(ecify)h(the)g(minim)n(um)7
+b(required)177 306 y(to)15 b(successfully)i(complete)d(the)i(run.)23
+b(T)m(o)14 b(do)h(this)h(F)m(unnelW)m(eb)e(allo)o(ws)g(\014le)i(sp)q
+(eci\014cations)g(to)f(inherit)g(\014elds)177 356 y(from)d(one)i(another.)177
+430 y(F)m(unnelW)m(eb)k(structures)j(\014lenames)d(in)o(to)g(three)i
+(\014elds)f(whic)o(h)f(are)h(inherited)g(indep)q(enden)o(tly)m(.)32
+b(The)19 b(\014elds)177 480 y(are:)f Fo(directory)p Fr(,)11
+b Fo(name)p Fr(,)h(and)h Fo(extension)p Fr(.)i(On)e(systems)g(ha)o(ving)f
+(other)i(\014elds)f(\(e.g.)g Fm(network)g(no)n(de)p Fr(,)h
+Fm(devic)n(e)177 530 y(name)p Fr(\),)d(the)g(extra)g(\014elds)g(are)g
+(considered)g(to)f(b)q(e)h(part)g(of)e(the)i(directory)g(\014eld.)17
+b(V)m(ersion)11 b(n)o(um)o(b)q(ers)f(are)g(ignored.)177 580
+y(A)k(\014eld)g(can)g(inherit)g(a)g(v)n(alue)f(if)g(its)h(curren)o(t)h(v)n
+(alue)e(is)h(the)h(empt)o(y)d(string.)177 654 y(The)i(follo)o(wing)e(table)i
+(giv)o(es)f(the)i(full)d(inheritance)j(sc)o(heme)f(used)h(in)e(F)m(unnelW)m
+(eb.)p 402 733 1323 2 v 401 783 2 50 v 427 768 a(Script)p 579
+783 V 70 w(Input)p 743 783 V 64 w(Include)p 925 783 V 50 w(Journal)p
+1112 783 V 50 w(List)p 1290 783 V 108 w(Do)q(cumen)o(t)p 1526
+783 V 49 w(Pro)q(duct)p 1723 783 V 402 785 1323 2 v 401 834
+2 50 v 579 834 V 743 834 V 769 819 a Fl(@i)p 925 834 V 1112
+834 V 1290 834 V 1526 834 V 739 w(@o)p 1723 834 V 401 884 V
+427 869 a(+x)p 579 884 V 134 w(+f)p 743 884 V 120 w(+i)p 925
+884 V 138 w(+j)p 1112 884 V 143 w(+l)p 1290 884 V 134 w(+t)p
+1526 884 V 192 w(+o)p 1723 884 V 401 934 V 427 919 a Fr(\\)p
+Fl(.fws)p Fr(")p 579 934 V 48 w(\\)p Fl(.fw)p Fr(")p 743 934
+V 56 w(\\)p Fl(.fwi)p Fr(")p 925 934 V 52 w(\\)p Fl(.jrn)p
+Fr(")p 1112 934 V 57 w(\\)p Fl(.lis)p Fr(")p 1290 934 V 48
+w(\\)p Fl(.tex)p Fr(")p 1526 934 V 1723 934 V 401 984 V 579
+984 V 743 984 V 769 969 a Fl(+f)p 925 984 V 138 w(+f)p 1112
+984 V 143 w(+f)p 1290 984 V 134 w(+f)p 1526 984 V 1723 984
+V 401 1034 V 427 1019 a Fr(DefDir)p 579 1034 V 55 w(Defdir)p
+743 1034 V 50 w(Defdir)p 925 1034 V 68 w(Defdir)p 1112 1034
+V 73 w(Defdir)p 1290 1034 V 64 w(Defdir)p 1526 1034 V 122 w(Defdir)p
+1723 1034 V 402 1035 1323 2 v 177 1133 a(The)g(table)g(is)f(arranged)h(with)f
+(items)g(of)g(highest)g(priorit)o(y)g(at)h(the)g(top.)k(The)c(\\)p
+Fl(+<letter>)p Fr(")d(cells)j(refer)h(to)e(the)177 1183 y(\014le)h(sp)q
+(eci\014cation)h(supplied)g(in)e(the)i(giv)o(en)f(command)d(line)j(argumen)o
+(t.)k(\\)p Fl(+F)p Fr(")12 b(is)h(the)h(name)e(of)g(the)i(input)f(\014le.)177
+1233 y(\\Defdir")k(refers)i(to)f(the)g(default)f(directory)i(sp)q
+(eci\014cation)f(pro)o(vided)g(b)o(y)f(the)h(op)q(erating)g(system.)29
+b(Empt)o(y)177 1283 y(cells)14 b(do)g(not)g(con)o(tribute.)177
+1357 y(The)g(follo)o(wing)d(example)i(sho)o(ws)h(ho)o(w)f(the)h(table)g(is)f
+(used.)19 b(Supp)q(ose)c(that)f(the)g(user)h(in)o(v)o(ok)o(ed)e(F)m(unnelW)m
+(eb)g(as)177 1407 y(follo)o(ws:)177 1522 y Fl(fw)22 b(/usr/ross/work/)o
+(sloth)o(.fw)d(+twalrus)177 1636 y Fr(T)m(o)g(w)o(ork)g(out)g(what)h(the)g
+(do)q(cumen)o(tation)e(\014le)i(should)f(b)q(e)h(called,)g(F)m(unnelW)m(eb)f
+(starts)i(with)e(the)h(empt)o(y)177 1686 y(string)d(and)g(then)h(w)o(orks)f
+(do)o(wn)g(the)h(Do)q(cumen)o(t)e(column)f(of)i(the)h(table.)27
+b(The)18 b(top)f(en)o(try)g(is)g(empt)o(y)f(so)i(w)o(e)177
+1736 y(ignore)g(it)f(and)g(pro)q(ceed)j(to)d(the)i(second)f(en)o(try)h(whic)o
+(h)e(consists)i(of)e(\\)p Fl(+T)p Fr(".)f(The)i(user)h(sp)q(eci\014ed)g(the)g
+(string)177 1786 y(\\)p Fl(walrus)p Fr(")d(as)i(the)g(v)n(alue)f(of)g(this)h
+(option,)f(and)h(as)g(our)f(curren)o(t)i(\(empt)o(y\))e(string)h(do)q(es)h
+(not)e(ha)o(v)o(e)h(a)f(name)177 1836 y(\014eld,)d(w)o(e)g(insert)h(the)g
+(string)f(\\)p Fl(walrus)p Fr(")e(in)o(to)i(the)h(name)d(\014eld,)i
+(resulting)g(in)g(the)h(string)f(\\)p Fl(walrus)p Fr(".)j(Mo)o(ving)177
+1886 y(do)o(wn)d(to)g(the)h(next)f(ro)o(w,)g(w)o(e)g(encoun)o(ter)i(the)f
+(constan)o(t)f(string)h(\\)p Fl(.tex)p Fr(".)i(This)d(string)g(consists)h(of)
+f(an)g(empt)o(y)177 1935 y(directory)j(and)e(name)g(\014eld,)h(but)g(a)f(\\)p
+Fl(.tex)p Fr(")g(\014le)h(extension.)24 b(As)16 b(our)g(curren)o(t)h(string)f
+(\\)p Fl(walrus)p Fr(",)e(do)q(es)j(not)177 1985 y(already)f(ha)o(v)o(e)g(a)g
+(\014le)h(extension)g(\(i.e.)e(the)i(\014le)f(extension)h(\014eld)g(of)e(our)
+i(curren)o(t)g(string)g(is)f(empt)o(y\),)f(w)o(e)i(add)177
+2035 y(in)f(\\)p Fl(.tex)p Fr(",)f(resulting)h(in)g(the)h(string)f(\\)p
+Fl(walrus.tex)p Fr(".)22 b(Next)17 b(w)o(e)f(encoun)o(ter)i(the)f(\\)p
+Fl(+F)p Fr(")e(\014eld)h(whic)o(h)g(is)g(the)177 2085 y(input)c(\014lename)f
+(\\)p Fl(/usr/ross/work/slo)o(th.fw)o Fr(")e(consisting)k(of)e(a)h(directory)
+h(\014eld)g(\\)p Fl(/usr/ross/work)o(/)p Fr(",)c(a)177 2135
+y(name)k(\014eld)i(\\)p Fl(sloth)p Fr(",)d(and)j(a)f(\014le)g(extension)h
+(\014eld)g(\\)p Fl(.fw)p Fr(".)j(Our)d(\\)p Fl(walrus.tex)p
+Fr(")d(string)i(already)g(has)h(name)177 2184 y(and)f(\014le)g(extension)h
+(\014elds,)e(but)i(its)f(directory)g(\014eld)g(is)g(empt)o(y)m(,)e(and)i(so)g
+(w)o(e)g(add)g(in)f(the)i(directory)g(\014eld)f(from)177 2234
+y(the)f(input)g(\014le)g(sp)q(eci\014cation,)g(resulting)g(in)f(the)h(string)
+g(\\)p Fl(/usr/ross/work/w)o(alrus)o(.tex)o Fr(".)i(Finally)m(,)10
+b(w)o(e)j(hit)177 2284 y(the)i(default)f(directory)i(sp)q(eci\014cation,)f
+(whic)o(h)f(is)h(\(sa)o(y\))f(\\)p Fl(/usr/ross/play/)p Fr(".)j(Ho)o(w)o(ev)o
+(er,)d(as)h(the)g(directory)177 2334 y(\014eld)f(of)f(our)h(w)o(alrus)g
+(string)g(is)g(already)f(full,)f(it)i(has)g(no)g(e\013ect.)177
+2408 y(In)j(general,)f(there)i(is)f(no)f(need)h(to)g(remem)o(b)q(er)e(the)i
+(exact)g(details)g(of)e(F)m(unnelW)m(eb's)h(\014lename)g(inheritance.)177
+2458 y(The)e(imp)q(ortan)o(t)f(thing)g(is)h(to)g(kno)o(w)f(that)h(it)f
+(exists,)h(and)g(to)g(use)h(it.)177 2620 y Fi(3.9)70 b(F)-6
+b(unnelW)g(eb)22 b(Startup)177 2735 y Fr(F)m(unnelW)m(eb's)c(command)d(line)j
+(options)f(can)i(b)q(e)f(divided)g(in)o(to)f(t)o(w)o(o)h(groups.)31
+b Fo(Action)19 b(options)d Fr(instruct)177 2785 y(F)m(unnelW)m(eb)j(to)g(p)q
+(erforms)g(some)g(sort)h(of)f(indep)q(enden)o(t)i(action)e(suc)o(h)h(as)f
+(pro)q(cessing)i(a)e(\014le.)35 b Fo(Ordinary)177 2835 y(options)11
+b Fr(merely)i(mo)q(dify)f(the)i(w)o(a)o(y)g(in)f(whic)o(h)h(F)m(unnelW)m(eb)f
+(executes)j(the)f(actions.)1042 2940 y(70)p eop
+%%Page: 71 72
+71 71 bop 177 42 a Fr(The)13 b(four)e(action)h(options)g(are:)17
+b Fl(+F)p Fr(,)11 b Fl(+K)p Fr(,)h Fl(+X)p Fr(,)f(and)g Fl(+H)p
+Fr(.)h(F)m(or)f(F)m(unnelW)m(eb)h(to)g(b)q(e)g(successfully)i(in)o(v)o(ok)o
+(ed,)d(at)h(least)177 91 y(one)17 b(action)f(option)g(m)o(ust)g(b)q(e)h(sp)q
+(eci\014ed.)28 b(If)16 b(zero)i(action)e(options)g(are)i(sp)q(eci\014ed,)g(F)
+m(unnelW)m(eb)e(terminates)177 141 y(with)e(failure)f(status.)19
+b(If)14 b(more)f(than)h(one)g(action)g(option)f(is)h(sp)q(eci\014ed,)h(F)m
+(unnelW)m(eb)e(p)q(erforms)h(the)g(sp)q(eci\014ed)177 191 y(actions)g(in)g(a)
+f(prede\014ned)j(order.)177 259 y(Assuming)e(that)h(the)g(user)h(has)f(sp)q
+(eci\014ed)h(at)f(least)g(one)g(action,)f(the)h(order)h(in)e(whic)o(h)h
+(actions)g(are)g(executed)177 309 y(is)f(as)g(follo)o(ws:)295
+377 y Fo(Initializati)o(on)i(script:)24 b Fr(F)m(unnelW)m(eb)17
+b(starts)h(b)o(y)f(lo)q(oking)f(in)h(the)h(curren)o(t)h(directory)f(for)f(a)
+295 427 y(\014le)e(called)g(\\)p Fl(fwinit.fws)p Fr(".)k(If)14
+b(it)h(do)q(esn't)g(\014nd)h(one,)f(it)f(do)q(esn't)i(raise)f(an)o(y)f
+(error.)23 b(If)14 b(it)h(do)q(es)295 477 y(\014nd)e(one,)g(it)f(executes)j
+(it)d(as)h(a)f(F)m(unnelW)m(eb)h(shellscript.)18 b(Initialization)10
+b(scripts)k(are)f(useful)g(for)295 527 y(setting)g(up)e(F)m(unnelW)m(eb)h
+(options)f(\(e.g.)g(using)h(the)g(\\)p Fl(set)p Fr(")f(command)e(without)j
+(ha)o(ving)e(to)i(t)o(yp)q(e)295 577 y(them)h(eac)o(h)i(time\).)295
+645 y Fo(Execute)e(argumen)o(t)e(script:)k Fr(If)c(a)g(shellscript)h(has)g(b)
+q(een)g(sp)q(eci\014ed)h(using)e(the)h(\\)p Fl(+X)p Fr(")f(option,)295
+695 y(F)m(unnelW)m(eb)j(executes)i(it.)295 763 y Fo(Pro)q(cess)k(input)d
+(\014le:)25 b Fr(If)17 b(the)i(user)f(has)g(sp)q(eci\014ed)h(an)f(input)f
+(\014le)h(using)f(the)h(\\)p Fl(+F)p Fr(")f(option,)295 813
+y(then)e(this)f(is)g(pro)q(cessed)i(next)e(\(b)o(y)g(F)m(unnelW)m(eb)f(prop)q
+(er\).)295 881 y Fo(Displa)o(y)k(help)g(message:)24 b Fr(If)16
+b(the)h(user)h(requested,)h(using)d(the)i(\\)p Fl(+H)p Fr(")d(option,)i(that)
+f(a)h(help)295 931 y(message)d(b)q(e)g(displa)o(y)o(ed,)f(the)i(message)e(is)
+h(displa)o(y)o(ed)f(at)h(this)g(time.)295 999 y Fo(In)o(teractiv)o(e)f(mo)q
+(de:)18 b Fr(If)13 b(the)g(user)i(sp)q(eci\014ed)g(the)e(\\)p
+Fl(+K)p Fr(")g(option,)f(F)m(unnelW)m(eb)h(en)o(ters)h(in)o(terac-)295
+1049 y(tiv)o(e)g(\(k)o(eyb)q(oard\))g(mo)q(de.)177 1117 y(F)m(unnelW)m(eb)e
+(pro)q(cesses)j(these)f(actions)e(in)g(the)h(ab)q(o)o(v)o(e)f(order)i
+(regardless)f(of)f(the)h(order)g(in)f(whic)o(h)g(they)h(app)q(ear)177
+1167 y(on)h(the)g(command)d(line.)177 1236 y(It)17 b(ma)o(y)e(b)q(e)i(hard)g
+(to)g(see)g(ho)o(w)g(some)f(of)g(these)i(actions)f(migh)o(t)d(b)q(e)k(com)o
+(bined.)25 b(Nev)o(ertheless,)19 b(F)m(unnelW)m(eb)177 1285
+y(allo)o(ws)e(this.)31 b(F)m(or)18 b(example,)g(a)g(user)h(migh)o(t)d(wish)i
+(to)g(pro)q(cess)i(a)e(batc)o(h)h(of)f(\014les)g(as)g(sp)q(eci\014ed)i(in)e
+(a)g(script)177 1335 y(\(\\)p Fl(+Xscript.fws)p Fr("\),)13
+b(b)q(e)j(reminded)f(of)g(the)h(in)o(teractiv)o(e)f(commands)e(a)o(v)n
+(ailable)h(\(\\)p Fl(+Hcommand)p Fr("\),)f(and)i(then)177 1385
+y(en)o(ter)d(in)o(teractiv)o(e)g(mo)q(de)e(so)h(as)g(to)g(b)q(e)h(able)e(to)h
+(repro)q(cess)j(\014les)d(for)g(whic)o(h)g(F)m(unnelW)m(eb)f(rep)q(orted)j
+(errors)f(\(after)177 1435 y(correcting)j(the)g(errors)g(in)e(a)h(di\013eren)
+o(t)h(w)o(orkstation)e(windo)o(w\).)177 1588 y Fi(3.10)70 b(Scanner)177
+1697 y Fr(The)16 b(scanner)h(reads)f(in)f(the)h(input)f(\014le)g(and)g(pro)q
+(duces)i(a)e(list)g(of)g(tok)o(ens)h(whic)o(h)f(it)g(hands)g(on)o(to)g(the)h
+(parser.)177 1747 y(In)c(addition,)f(some)h(input)g(constructs)i(ma)o(y)d
+(cause)i(the)g(scanner)h(to)e(mo)q(dify)e(some)h(of)h(F)m(unnelW)m(eb's)g
+(options.)177 1879 y Fd(3.10.1)55 b(Basic)19 b(Input)g(File)e(Pro)r(cessing)
+177 1974 y Fr(In)d(order)h(to)f(read)h(in)f(an)g(input)g(\014le)g(or)g
+(include)h(\014le,)f(the)g(scanner)i(calls)e(a)g(submo)q(dule)f(called)h(the)
+h Fo(mapp)q(er)177 2024 y Fr(that)d(reads)g(a)f(\014le)h(in)f(and)g(creates)j
+(a)d(con)o(tiguous)g(cop)o(y)h(of)f(it)g(in)g(memory)m(.)j(The)e(scanner)h
+(then)f(p)q(erforms)f(three)177 2074 y(c)o(hec)o(ks)18 b(on)e(the)h(\014le,)g
+(the)g(\014rst)g(\(\014le)g(termination\))e(of)h(whic)o(h)g(is)g(p)q
+(erformed)g(b)q(efore)i(scanning)e(commences,)177 2124 y(and)e(the)g(other)h
+(t)o(w)o(o)e(of)h(whic)o(h)f(tak)o(e)h(place)g(during)g(scanning)g(b)q(efore)
+g(eac)o(h)h(line)e(is)h(scanned.)295 2192 y Fo(File)c(T)l(ermination)o(:)k
+Fr(The)c(\014rst)g(c)o(hec)o(k)h(the)f(scanner)h(mak)o(es)d(is)h(whether)i
+(the)f(\014le)g(is)f(terminated)295 2242 y(prop)q(erly)m(.)19
+b(A)14 b(\014le)g(is)g(considered)i(to)e(b)q(e)g(prop)q(erly)h(terminated)e
+(if)h(it)f(either)i(con)o(tains)f(no)g(lines,)295 2291 y(or)j(if)f(the)h
+(last)g(line)f(in)g(the)i(\014le)e(is)h(terminated)f(b)o(y)h(an)f
+(end-of-line)g(mark)o(er.)26 b(If)16 b(the)h(scanner)295 2341
+y(detects)i(that)e(an)f(input)g(\014le)h(is)g(not)f(prop)q(erly)h
+(terminated,)f(it)h(adds)f(an)h(end-of-line)f(mark)o(er)295
+2391 y(itself)e(\(to)g(the)g(cop)o(y)g(in)f(memory)f(only\).)295
+2459 y Fo(Unprin)o(tab)o(le)i(Characters:)21 b Fr(The)16 b(second)h(c)o(hec)o
+(k)f(the)g(scanner)h(mak)o(es)d(is)i(for)f(unprin)o(table)295
+2509 y(c)o(haracters)j(\(ASCI)q(I)f(0{31)e(and)h(127{255)f(\(except)j(for)e
+(EOL\(10\)\)\))h(whic)o(h)f(it)g(\015ags)g(as)g(errors)295
+2559 y(and)e(replaces)h(b)o(y)f(question)g(marks.)295 2627
+y Fo(Line)22 b(Lengths:)31 b Fr(The)21 b(third)g(c)o(hec)o(k)g(the)h(scanner)
+g(mak)o(es)d(is)i(input)g(line)f(length.)38 b(When)295 2677
+y(F)m(unnelW)m(eb)18 b(starts)g(up,)h(a)e(default)h(maxim)n(um)c(input)j
+(line)h(length)g(of)f(80)g(is)h(set.)31 b(This)17 b(can)295
+2727 y(b)q(e)22 b(c)o(hanged)f(dynamically)d(during)i(scanning)h(using)f(a)h
+Fl(@p)g(maximum)p 1461 2727 14 2 v 14 w(input)p 1585 2727 V
+15 w(line)p 1688 2727 V 15 w(length)295 2777 y Fr(pragma.)c(If)c(the)i(n)o
+(um)o(b)q(er)e(of)g(c)o(haracters)j(on)e(a)f(line)h(\(not)g(including)f(the)h
+(end)h(of)e(line)g(mark)o(er\))295 2827 y(exceeds)j(this)e(limit,)d(F)m
+(unnelW)m(eb)i(generates)j(an)d(error.)1042 2940 y(71)p eop
+%%Page: 72 73
+72 72 bop 177 42 a Fd(3.10.2)55 b(Sp)r(ecial)18 b(Sequences)177
+144 y Fr(The)11 b(scanner)g(scans)g(the)g(input)e(\014le)h(from)f(top)h(to)g
+(b)q(ottom,)e(left)i(to)g(righ)o(t,)g(treating)g(the)h(input)f(as)g(ordinary)
+f(text)177 194 y(\(to)14 b(b)q(e)g(handed)g(directly)f(to)h(the)g(parser)g
+(as)g(a)f(text)h(tok)o(en\))g(unless)g(it)f(encoun)o(ters)i(the)f
+Fo(sp)q(ecial)g(c)o(haracter)1931 179 y Fg(4)177 244 y Fr(whic)o(h)i(in)o
+(tro)q(duces)h(a)f Fo(sp)q(ecial)h(sequence)p Fr(.)23 b(Th)o(us,)17
+b(the)f(scanner)i(partitions)d(the)i(input)f(\014le)g(in)o(to)f(ordinary)177
+293 y(text)g(and)e(sp)q(ecial)i(sequences.)177 411 y Fl(input_file)20
+b(=)h({ordinary_text)e(|)j(special_sequence})177 529 y Fr(Up)q(on)11
+b(startup,)g(the)g(sp)q(ecial)g(c)o(haracter)h(is)e Fl(@)p
+Fr(,)h(but)g(it)f(can)g(b)q(e)i(c)o(hanged)e(using)h(the)g
+Fn(<)p Fr(sp)q(ecial)p Fn(>)p Fl(=)p Fn(<)p Fr(new)p 1781 529
+13 2 v 16 w(sp)q(ecial)p Fn(>)177 579 y Fr(sp)q(ecial)k(sequence.)22
+b(Rather)15 b(than)g(using)f Fn(<)p Fr(sp)q(ecial)p Fn(>)i
+Fr(whenev)o(er)g(the)f(sp)q(ecial)g(c)o(haracter)h(app)q(ears,)f(this)g(do)q
+(c-)177 629 y(umen)o(t)j(uses)j(the)f(default)e(sp)q(ecial)i(c)o(haracter)g
+(\\)p Fl(@)p Fr(")f(to)g(represen)o(t)i(the)f(curren)o(t)h(sp)q(ecial)e(c)o
+(haracter.)35 b(More)177 679 y(imp)q(ortan)o(tly)m(,)13 b(F)m(unnelW)m(eb's)i
+(error)h(messages)g(all)e(use)i(the)g(default)g(sp)q(ecial)f(c)o(haracter)i
+(in)e(their)h(error)h(mes-)177 728 y(sages)e(ev)o(en)f(if)f(the)i(sp)q(ecial)
+f(c)o(haracter)h(has)f(b)q(een)h(c)o(hanged.)177 804 y(An)i(o)q(ccurrence)i
+(of)c(the)i(sp)q(ecial)g(c)o(haracter)g(in)f(the)h(input)f(\014le)g(in)o(tro)
+q(duces)i(a)e(sp)q(ecial)g(sequence.)28 b(The)16 b(kind)177
+853 y(of)e(sp)q(ecial)g(sequence)i(is)e(determined)g(b)o(y)g(the)h(c)o
+(haracter)h(follo)o(wing)11 b(the)k(sp)q(ecial)f(c)o(haracter.)20
+b(Only)14 b(prin)o(table)177 903 y(c)o(haracters)i(can)e(follo)o(w)e(the)i
+(sp)q(ecial)g(c)o(haracter.)177 979 y(The)j(follo)o(wing)c(list)j(giv)o(es)g
+(all)e(the)j(p)q(ossible)f(c)o(haracters)i(that)e(can)h(follo)o(w)d(the)i(sp)
+q(ecial)h(c)o(haracter,)g(and)f(the)177 1028 y(legalit)o(y)c(of)g(eac)o(h)i
+(sequence.)20 b(The)13 b(\014rst)h(column)e(giv)o(es)g(the)i(ASCI)q(I)f(n)o
+(um)o(b)q(er)g(of)f(eac)o(h)i(ASCI)q(I)f(c)o(haracter.)19 b(The)177
+1078 y(second)12 b(column)e(giv)o(es)g(the)i(sp)q(ecial)f(sequence)i(for)e
+(that)g(c)o(haracter.)19 b(The)11 b(next)h(column)d(con)o(tains)i(one)g(of)f
+(three)177 1128 y(c)o(haracters:)25 b(\\)p Fl(-)p Fr(")16 b(means)g(that)h
+(the)g(sequence)i(is)d(illegal.)24 b(\\)p Fl(S)p Fr(")16 b(indicates)h(that)g
+(the)g(sequence)i(is)d(a)g Fo(simple)177 1178 y(sequence)i
+Fr(\(with)i(no)f(attributes)h(or)g(side)f(e\013ects\))j(that)d(app)q(ears)i
+(exactly)e(as)h(sho)o(wn)f(and)g(is)h(con)o(v)o(erted)177 1228
+y(directly)f(in)o(to)e(a)h(tok)o(en)h(and)f(fed)g(to)g(the)h(parser.)33
+b(Finally)m(,)17 b(\\)p Fl(C)p Fr(")g(indicates)i(that)f(the)h(sp)q(ecial)f
+(sequence)j(is)177 1278 y(complex,)12 b(p)q(ossibly)i(ha)o(ving)f(a)g(follo)o
+(wing)e(syn)o(tax)j(or)g(pro)q(ducing)g(funn)o(y)g(side)g(e\013ects.)177
+1395 y Fl(ASC)43 b(SEQ)g(COMMENT)177 1445 y(-----------------)177
+1495 y(000)152 b(\\)177 1545 y(016)174 b(|)21 b(Unprintable)f(characters)g
+(and)h(hence)g(illegal)f(specials.)177 1595 y(031)152 b(/)177
+1644 y(032)43 b(@)87 b(-)22 b(Illegal)e(\(space\).)177 1694
+y(033)43 b(@!)65 b(C)22 b(Comment.)177 1744 y(034)43 b(@")65
+b(S)22 b(Parameter)e(delimeter.)177 1794 y(035)43 b(@#)65 b(C)22
+b(Short)e(name)h(sequence.)177 1844 y(036)43 b(@$)65 b(S)22
+b(Start)e(of)i(macro)f(definition.)177 1894 y(037)43 b(@\045)65
+b(-)22 b(Illegal.)177 1943 y(038)43 b(@&)65 b(-)22 b(Illegal.)177
+1993 y(039)43 b(@')65 b(-)22 b(Illegal.)177 2043 y(040)43 b(@\()65
+b(S)22 b(Open)f(parameter)f(list.)177 2093 y(041)43 b(@\))65
+b(S)22 b(Close)e(parameter)g(list.)177 2143 y(042)43 b(@*)65
+b(-)22 b(Illegal.)177 2192 y(043)43 b(@+)65 b(C)22 b(Insert)e(newline.)177
+2242 y(044)43 b(@,)65 b(S)22 b(Parameter)e(separator.)177 2292
+y(045)43 b(@-)65 b(C)22 b(Suppress)e(end)h(of)g(line)g(marker.)177
+2342 y(046)43 b(@.)65 b(-)22 b(Illegal.)177 2392 y(047)43 b(@/)65
+b(S)22 b(Open)f(or)g(close)g(emphasised)f(text.)177 2441 y(048)43
+b(@0)65 b(-)22 b(Illegal.)177 2491 y(049)43 b(@1)65 b(S)22
+b(Formal)e(parameter)g(1.)177 2541 y(050)43 b(@2)65 b(S)22
+b(Formal)e(parameter)g(2.)177 2591 y(051)43 b(@3)65 b(S)22
+b(Formal)e(parameter)g(3.)177 2641 y(052)43 b(@4)65 b(S)22
+b(Formal)e(parameter)g(4.)p 177 2678 709 2 v 223 2705 a Ff(4)241
+2716 y Fh(This)10 b(sort)g(of)h(c)o(haracter)d(is)j(often)e(referred)g(to)h
+(as)h(the)f(\\escap)q(e)f(c)o(haracter")e(or)k(the)f(\\con)o(trol)e(c)o
+(haracter")g(in)i(other)g(systems.)177 2756 y(Ho)o(w)o(ev)o(er,)15
+b(as)f(there)g(is)g(great)g(p)q(oten)o(tial)e(to)i(confuse)f(these)g(names)g
+(with)i(the)e(\\escap)q(e")g(c)o(haracter)f(\(ASCI)q(I)i(27\))g(and)g(ASCI)q
+(I)177 2795 y(\\con)o(trol")d(c)o(haracters,)g(the)h(term)g(\\sp)q(ecial")f
+(has)i(b)q(een)f(c)o(hosen)g(instead.)18 b(This)c(results)e(in)g(the)h(terms)
+f Fa(sp)n(e)n(cial)k(char)n(acter)f Fh(and)177 2835 y Fa(sp)n(e)n(cial)f(se)n
+(quenc)n(e)p Fh(.)1042 2940 y Fr(72)p eop
+%%Page: 73 74
+73 73 bop 177 42 a Fl(053)43 b(@5)65 b(S)22 b(Formal)e(parameter)g(5.)177
+91 y(054)43 b(@6)65 b(S)22 b(Formal)e(parameter)g(6.)177 141
+y(055)43 b(@7)65 b(S)22 b(Formal)e(parameter)g(7.)177 191 y(056)43
+b(@8)65 b(S)22 b(Formal)e(parameter)g(8.)177 241 y(057)43 b(@9)65
+b(S)22 b(Formal)e(parameter)g(9.)177 291 y(058)43 b(@:)65 b(-)22
+b(Illegal.)177 340 y(059)43 b(@;)65 b(-)22 b(Illegal.)177 390
+y(060)43 b(@<)65 b(S)22 b(Open)f(macro)f(name.)177 440 y(061)43
+b(@=)65 b(C)22 b(Set)f(special)f(character.)177 490 y(062)43
+b(@>)65 b(S)22 b(Close)e(macro)h(name.)177 540 y(063)43 b(@?)65
+b(-)22 b(Illegal.)e(Reserved)g(for)h(future)g(use.)177 589
+y(064)43 b(@@)65 b(C)22 b(Insert)e(special)h(character)f(into)g(text.)177
+639 y(065)43 b(@A)65 b(S)22 b(New)f(section)f(\(level)h(1\).)177
+689 y(066)43 b(@B)65 b(S)22 b(New)f(section)f(\(level)h(2\).)177
+739 y(067)43 b(@C)65 b(S)22 b(New)f(section)f(\(level)h(3\).)177
+789 y(068)43 b(@D)65 b(S)22 b(New)f(section)f(\(level)h(4\).)177
+839 y(069)43 b(@E)65 b(S)22 b(New)f(section)f(\(level)h(5\).)177
+888 y(070)43 b(@F)65 b(-)22 b(Illegal.)177 938 y(071)43 b(@G)65
+b(-)22 b(Illegal.)177 988 y(072)43 b(@H)65 b(-)22 b(Illegal.)177
+1038 y(073)43 b(@I)65 b(C)22 b(Include)e(file.)177 1088 y(074)43
+b(@J)65 b(-)22 b(Illegal.)177 1137 y(075)43 b(@K)65 b(-)22
+b(Illegal.)177 1187 y(076)43 b(@L)65 b(-)22 b(Illegal.)177
+1237 y(077)43 b(@M)65 b(S)22 b(Tag)f(macro)g(as)g(being)g(allowed)f(to)h(be)h
+(called)e(many)h(times.)177 1287 y(078)43 b(@N)65 b(-)22 b(Illegal.)177
+1337 y(079)43 b(@O)65 b(S)22 b(New)f(macro)g(attached)f(to)h(product)f(file.)
+h(Has)g(to)h(be)f(at)h(start)e(of)i(line.)177 1386 y(080)43
+b(@P)65 b(C)22 b(Pragma.)177 1436 y(081)43 b(@Q)65 b(-)22 b(Illegal.)177
+1486 y(082)43 b(@R)65 b(-)22 b(Illegal.)177 1536 y(083)43 b(@S)65
+b(-)22 b(Illegal.)177 1586 y(084)43 b(@T)65 b(C)22 b(Typesetter)d(directive.)
+177 1636 y(085)43 b(@U)65 b(-)22 b(Illegal.)177 1685 y(086)43
+b(@V)65 b(-)22 b(Illegal.)177 1735 y(087)43 b(@W)65 b(-)22
+b(Illegal.)177 1785 y(088)43 b(@X)65 b(-)22 b(Illegal.)177
+1835 y(089)43 b(@Y)65 b(-)22 b(Illegal.)177 1885 y(090)43 b(@Z)65
+b(S)22 b(Tags)f(macro)f(as)i(being)f(allowed)f(to)h(be)h(called)e(zero)h
+(times.)177 1934 y(091)43 b(@[)65 b(-)22 b(Illegal.)e(Reserved)g(for)h
+(future)g(use.)177 1984 y(092)43 b(@\\)65 b(-)22 b(Illegal.)177
+2034 y(093)43 b(@])65 b(-)22 b(Illegal.)e(Reserved)g(for)h(future)g(use.)177
+2084 y(094)43 b(@^)65 b(C)22 b(Insert)e(control)h(character)f(into)g(text)177
+2134 y(095)43 b(@_)65 b(-)22 b(Illegal.)177 2183 y(096)43 b(@`)65
+b(-)22 b(Illegal.)177 2233 y(097)43 b(@a)65 b(\\)177 2283 y(109)43
+b(@m)87 b(|)21 b(Identical)f(to)i(@A..@Z.)177 2333 y(122)43
+b(@z)65 b(/)177 2383 y(123)43 b(@{)65 b(S)22 b(Open)f(macro)f(body/Open)g
+(literal)h(directive.)177 2433 y(124)43 b(@|)65 b(-)22 b(Illegal.)177
+2482 y(125)43 b(@})65 b(S)22 b(Close)e(macro)h(body/Close)f(literal)g
+(directive.)177 2532 y(126)43 b(@~)65 b(-)22 b(Illegal.)177
+2582 y(127)f(to)h(255)f(are)g(not)g(standard)f(printable)g(ASCII)h
+(characters)f(and)h(are)g(illegal.)177 2685 y Fr(The)11 b(most)e(imp)q(ortan)
+o(t)f(thing)i(to)g(remem)o(b)q(er)g(ab)q(out)g(the)h(scanner)g(is)f(that)h
+Fm(nothing)h(happ)n(ens)h(unless)f(the)f(sp)n(e)n(cial)177
+2735 y(char)n(acter)17 b(is)g(se)n(en.)27 b Fr(There)18 b(are)e(no)h(funn)o
+(y)f(sequences)j(that)e(will)e(cause)i(strange)h(things)e(to)h(happ)q(en.)26
+b(The)177 2785 y(b)q(est)16 b(w)o(a)o(y)e(to)g(view)h(a)f(F)m(unnelW)m(eb)g
+(do)q(cumen)o(t)g(at)h(the)g(scanner)h(lev)o(el)e(is)g(as)h(a)f(b)q(o)q(dy)h
+(of)f(text)h(punctuated)h(b)o(y)177 2835 y(sp)q(ecial)e(sequences)j(that)d
+(serv)o(e)h(to)f(structure)i(the)e(text)h(at)e(a)h(higher)g(lev)o(el.)1042
+2940 y(73)p eop
+%%Page: 74 75
+74 74 bop 177 42 a Fr(The)18 b(remaining)d(description)j(of)f(the)h(scanner)h
+(consists)f(of)f(a)g(detailed)g(description)h(of)f(the)h(e\013ect)h(of)d(eac)
+o(h)177 91 y(complex)d(sp)q(ecial)h(sequence.)177 243 y Fd(3.10.3)55
+b(Setting)18 b(the)g(Sp)r(ecial)g(Character)177 349 y Fr(The)e(sp)q(ecial)f
+(c)o(haracter)h(can)f(b)q(e)h(set)f(using)g(the)h(sequence)h
+Fn(<)p Fr(sp)q(ecial)p Fn(>)p Fl(=)p Fn(<)p Fr(newsp)q(ecialc)o(har)p
+Fn(>)p Fr(.)23 b(F)m(or)15 b(example,)177 399 y Fl(@=#)e Fr(w)o(ould)g(c)o
+(hange)i(the)f(sp)q(ecial)g(c)o(haracter)h(to)f(a)g(hash)g(\()p
+Fl(#)p Fr(\))f(c)o(haracter.)20 b(The)14 b(sp)q(ecial)g(c)o(haracter)h(ma)o
+(y)d(b)q(e)j(set)177 449 y(to)d(an)o(y)f(prin)o(table)g(ASCI)q(I)h(c)o
+(haracter)h(except)g(the)g(blank)e(c)o(haracter)i(\(i.e.)e(an)o(y)g(c)o
+(haracter)i(in)e(the)i(ASCI)q(I)f(range)177 498 y([33)p Fn(;)7
+b Fr(126]\).)15 b(In)d(normal)f(use,)i(it)f(should)g(not)g(b)q(e)h(necessary)
+i(to)d(c)o(hange)h(the)g(sp)q(ecial)f(c)o(haracter)i(of)e(F)m(unnelW)m(eb,)
+177 548 y(and)17 b(it)f(is)h(probably)f(b)q(est)i(to)e(a)o(v)o(oid)g(c)o
+(hanging)g(the)h(sp)q(ecial)g(c)o(haracter)h(so)f(as)g(not)f(to)h(confuse)g
+(F)m(unnelW)m(eb)177 598 y(readers)g(conditioned)f(to)f(the)i
+Fl(@)e Fr(c)o(haracter.)25 b(Ho)o(w)o(ev)o(er,)16 b(the)h(feature)f(is)g(v)o
+(ery)g(useful)f(where)i(the)g(text)f(b)q(eing)177 648 y(prepared)f(con)o
+(tains)f(man)o(y)e Fl(@)i Fr(c)o(haracters)h(\(e.g.)f(a)f(list)h(of)f(in)o
+(ternet)i(electronic)g(mail)c(addresses\).)177 799 y Fd(3.10.4)55
+b(Inserting)18 b(the)g(Sp)r(ecial)g(Character)h(in)n(to)f(the)g(T)-5
+b(ext)177 905 y Fr(The)13 b(sp)q(ecial)f(sequence)j Fn(<)p
+Fr(sp)q(ecial)p Fn(>)p Fl(@)e Fr(inserts)g(the)g(sp)q(ecial)g(c)o(haracter)g
+(in)o(to)f(the)h(text)f(as)h(if)e(it)h(w)o(ere)h(not)g(sp)q(ecial)177
+955 y(at)h(all.)k(The)c Fl(@)g Fr(of)f(this)i(sequence)h(has)e(nothing)g(to)f
+(do)h(with)g(the)h(curren)o(t)g(sp)q(ecial)g(c)o(haracter.)20
+b(If)14 b(the)g(curren)o(t)177 1005 y(sp)q(ecial)e(c)o(haracter)h(is)e
+Fl(P)h Fr(then)g(the)g(sequence)i Fl(P@)d Fr(will)f(insert)j(a)e
+Fl(P)g Fr(in)o(to)g(the)h(text.)18 b(Example:)e Fl(@@#@=#@#@#=@@@)177
+1055 y Fr(translates)f(to)f Fl(@#@#@)p Fr(.)177 1206 y Fd(3.10.5)55
+b(Inserting)18 b(Arbitrary)g(Characters)h(in)n(to)g(the)f(T)-5
+b(ext)177 1313 y Fr(While)13 b(F)m(unnelW)m(eb)h(do)q(es)h(not)f(tolerate)g
+(unprin)o(table)g(c)o(haracters)i(in)d(the)i(input)f(\014le)g(\(except)h(for)
+f(the)h(end)f(of)177 1362 y(line)f(c)o(haracter\),)h(it)e(do)q(es)i(allo)o(w)
+d(the)i(user)h(to)f(sp)q(ecify)h(that)e(unprin)o(table)h(c)o(haracters)i(app)
+q(ear)e(in)f(the)i(pro)q(duct)177 1412 y(\014le.)k(The)c Fl(@^)f
+Fr(sequence)j(inserts)f(a)e(single)g(c)o(haracter)i(of)e(the)i(user's)f(c)o
+(ho)q(osing)g(in)o(to)f(the)h(text.)k(The)c(c)o(haracter)177
+1462 y(can)19 b(b)q(e)g(sp)q(eci\014ed)i(b)o(y)d(giving)f(its)i(ASCI)q(I)g(n)
+o(um)o(b)q(er)f(in)g(one)h(of)f(four)h(bases:)28 b(binary)m(,)19
+b(o)q(ctal,)g(decimal,)f(and)177 1512 y(hexadecimal.)f(Here)e(is)f(the)g(syn)
+o(tax:)177 1636 y Fl(control_sequence)19 b(=)i("@^")g(char_spec)177
+1686 y(char_spec)173 b(=)21 b(binary)g(|)g(octal)g(|)h(decimal)e(|)i
+(hexadecimal)177 1736 y(binary)239 b(=)21 b(\("b")g(|)h("B"\))282
+b("\(")21 b({binary_digit}8)41 b("\)")177 1786 y(octal)261
+b(=)21 b(\("o")g(|)h("O")f(|)h("q")f(|)g("Q"\))g("\(")g({octal_digit}3)63
+b("\)")177 1835 y(decimal)217 b(=)21 b(\("d")g(|)h("D"\))282
+b("\(")21 b({decimal_digit}3)e("\)")177 1885 y(hexadecimal)129
+b(=)21 b(\("h")g(|)h("H")f(|)h("x")f(|)g("X"\))g("\(")g({hex_digit}2)107
+b("\)")177 1935 y(binary_digit)g(=)21 b("0")g(|)h("1")177 1985
+y(octal_digit)129 b(=)21 b(binary_digit)f(|)h("2")g(|)h("3")f(|)h("4")f(|)g
+("5")h(|)f("6")g(|)h("7")177 2035 y(decimal_digit)85 b(=)21
+b(octal_digit)f(|)h("8")h(|)f("9")177 2085 y(hex_digit)173
+b(=)21 b(decimal_digit)e(|)j("A")f(|)h("B")f(|)g("C")h(|)f("D")g(|)h("E")f(|)
+h("F")896 2134 y(|)g("a")f(|)h("b")f(|)g("c")h(|)f("d")g(|)h("e")f(|)h("f")
+177 2259 y Fr(Example:)177 2383 y Fl(@!)g(Unix)f(Make)f(requires)h(that)g
+(productions)e(commence)h(with)h(tab)g(characters.)177 2433
+y(@^D\(009\)prog.o)e(<-)i(prog.c)177 2557 y Fr(Note)16 b(that)g(the)g
+(decimal)e(\\)p Fl(9)p Fr(")h(is)g(expressed)j(with)d(leading)g(zeros)i(as)e
+(\\)p Fl(009)p Fr(".)22 b(F)m(unnelW)m(eb)15 b(requires)i(a)e(\014xed)177
+2607 y(n)o(um)o(b)q(er)e(of)g(digits)g(for)g(eac)o(h)h(base.)19
+b(Eigh)o(t)13 b(digits)g(for)g(base)h(t)o(w)o(o,)f(three)i(digits)e(for)g
+(base)h(ten,)g(three)h(digits)e(for)177 2657 y(base)i(eigh)o(t)e(and)h(t)o(w)
+o(o)f(digits)h(for)f(base)i(sixteen.)177 2735 y(F)m(unnelW)m(eb)h(treats)h
+(the)g(c)o(haracter)g(resulting)f(from)e(a)i Fl(@^)g Fr(sequence)i(as)e
+(ordinary)g(text)g(in)g(ev)o(ery)h(sense.)26 b(If)177 2785
+y(y)o(our)13 b(input)h(\014le)f(con)o(tains)h(man)o(y)d(instances)k(of)e(a)g
+(particular)h(con)o(trol)f(c)o(haracter,)h(y)o(ou)g(can)f(pac)o(k)n(age)g(it)
+h(up)f(in)177 2835 y(a)h(macro)e(lik)o(e)i(an)o(y)f(other)h(text.)19
+b(In)14 b(particular,)f(quic)o(k)h(names)f(can)h(b)q(e)g(used)h(to)f(great)g
+(e\013ect:)1042 2940 y(74)p eop
+%%Page: 75 76
+75 75 bop 177 42 a Fl(@!)22 b(Unix)f("Make")f(requires)g(that)h(productions)f
+(commence)g(with)h(tab)g(characters.)177 91 y(@!)h(So)f(we)g(define)g(a)g
+(macro)g(with)g(a)h(quick)f(name)f(as)i(a)f(tab)h(character.)177
+141 y($@#T@{@^D\(009\)@})177 191 y(@!)g(And)f(use)g(it)g(in)h(our)f
+(productions.)177 241 y(@#Tprog.o)f(<-)h(prog.c)177 291 y(@#Ta.out)f(<-)i
+(prog.o)177 399 y Fr(W)m(arning:)c(If)c(y)o(ou)f(insert)j(a)e(Unix)g(newline)
+g(c)o(haracter)i(\(decimal)c(10\))i(in)o(to)g(the)h(text,)f(F)m(unnelW)m(eb)g
+(will)f(treat)177 448 y(this)i(as)f(an)h(end)g(of)f(line)g(sequence)j
+(regardless)f(of)e(what)g(the)h(c)o(haracter)h(sequence)h(for)d(end)h(of)f
+(line)g(is)h(on)f(the)177 498 y(mac)o(hine)h(up)q(on)i(whic)o(h)f(it)h(is)f
+(running.)26 b(Unix)16 b(EOL)h(is)f(F)m(unnelW)m(eb's)g(in)o(ternal)g
+(represen)o(tation)i(for)e(end)h(of)177 548 y(line.)h(Th)o(us,)13
+b(in)h(the)g(curren)o(t)h(v)o(ersion)f(of)g(F)m(unnelW)m(eb,)e(inserting)i(c)
+o(haracter)i(10)d(in)o(to)g(the)h(text)h(is)e(imp)q(ossible)177
+598 y(unless)h(this)f(also)f(happ)q(ens)i(to)f(b)q(e)h(the)f(c)o(haracter)h
+(used)g(b)o(y)f(the)h(op)q(erating)e(system)h(to)g(mark)e(the)j(end)f(of)g
+(line.)177 736 y Fd(3.10.6)55 b(Commen)n(ts)177 835 y Fr(When)17
+b(F)m(unnelW)m(eb)f(encoun)o(ters)i(the)g Fl(@!)26 b Fr(sequence)18
+b(during)f(its)f(left-to-righ)o(t)g(scan)h(of)f(the)h(line,)f(it)g(thro)o(ws)
+177 885 y(a)o(w)o(a)o(y)c(the)i(rest)h(of)e(the)h(line)f(\(including)f(the)i
+(EOL\))g(without)f(analysing)f(it)h(further.)19 b(Commen)o(ts)11
+b(can)i(app)q(ear)177 934 y(in)h(an)o(y)f(line)g(except)j(\\)p
+Fl(@i)p Fr(",)c(\\)p Fl(@t)p Fr(",)h(and)g(\\)p Fl(@p)p Fr(")g(lines.)177
+1007 y(F)m(unnelW)m(eb)f(commen)o(ts)f(can)i(b)q(e)g(used)h(to)e(insert)i
+(commen)o(ts)d(in)o(to)g(y)o(our)i(input)f(\014le)h(that)g(will)e(neither)i
+(app)q(ear)177 1057 y(in)f(the)h(pro)q(duct)g(\014les)f(nor)g(in)g(the)h(do)q
+(cumen)o(tation)e(\014le,)h(but)g(will)f(b)q(e)i(solely)e(for)h(the)h(b)q
+(ene\014t)g(of)f(those)h(reading)177 1106 y(and)h(editing)f(the)i(input)e
+(\014le)h(directly)m(.)k(Example:)177 1215 y Fl(@!)k(I)f(have)g(used)g(a)h
+(quick)e(macro)h(for)g(this)g(definition)f(as)h(it)h(will)f(be)g(used)g
+(often.)177 1264 y(@$@#C@{--@})177 1372 y Fr(Because)d(commen)o(ts)d(are)i
+(de\014ned)g(to)g(include)f(the)h(end-of-line)f(mark)o(er,)f(care)i(m)o(ust)f
+(b)q(e)h(tak)o(en)f(when)h(they)177 1422 y(are)d(b)q(eing)g(added)h(or)e
+(remo)o(v)o(ed)g(within)h(the)g(text)h(of)e(macro)f(b)q(o)q(dies.)19
+b(F)m(or)13 b(example)g(the)i(text)f(fragmen)o(t)177 1530 y
+Fl(for)21 b(\(i=0;i<MAXVAL;i++\))127 b(@!)22 b(Print)f(out)g(a[0..MAXVAL-1].)
+243 1580 y(printf\("\045u\\n",a)o([i]\);)177 1688 y Fr(will)13
+b(expand)h(to)177 1796 y Fl(for)21 b(\(i=0;i<MAXVAL;i++\))193
+b(printf\("\045u\\n",a[)o(i]\);)177 1904 y Fr(This)19 b(problem)f(really)g
+(has)i(no)e(solution;)j(if)d(F)m(unnelW)m(eb)h(commen)o(ts)e(w)o(ere)j
+(de\014ned)g(to)f(omit)e(the)j(end)f(of)177 1954 y(line)14
+b(mark)o(er,)g(the)h(expanded)h(text)f(w)o(ould)f(con)o(tain)g(trailing)f
+(blanks!)20 b(As)c(it)e(is,)g(F)m(unnelW)m(eb)g(commen)o(ts)f(are)177
+2004 y(designed)18 b(to)f(supp)q(ort)h(single)f(line)g(commen)o(ts)f(whic)o
+(h)h(can)g(b)q(e)h(inserted)h(and)e(remo)o(v)o(ed)f(as)h(a)g(line)g(without)
+177 2054 y(causing)d(trouble.)k(F)m(or)c(example:)177 2162
+y Fl(@!)22 b(Print)e(out)h(a[0..MAXVAL-1].)177 2212 y(for)g
+(\(i=0;i<MAXVAL;i++\))243 2261 y(printf\("\045u\\n",a)o([i]\);)177
+2369 y Fr(If)13 b(y)o(ou)g(w)o(an)o(t)g(a)g(commen)o(t)f(construct)j(that)e
+(do)q(es)h(not)g(enclose)g(the)g(end)g(of)f(line)g(mark)o(er,)f(com)o(bine)g
+(the)i(insert)177 2419 y(end)h(of)e(line)g(construct)j Fl(@+)d
+Fr(with)h(the)g(commen)o(t)e(construct)k Fl(@!)i Fr(as)c(in)177
+2527 y Fl(for)21 b(\(i=0;i<MAXVAL;i++\))127 b(@+@!)21 b(Print)g(out)g
+(a[0..MAXVAL-1].)243 2577 y(printf\("\045u\\n",a)o([i]\);)177
+2685 y Fr(F)m(unnelW)m(eb)d(commen)o(ts)f(should)h(really)g(only)g(b)q(e)h
+(used)g(to)g(commen)o(t)d(the)j(F)m(unnelW)m(eb)f(constructs)j(b)q(eing)177
+2735 y(used)d(in)e(the)h(input)f(\014le.)26 b(Commen)o(ts)14
+b(on)j(the)g(target)g(co)q(de)g(are)g(b)q(est)h(placed)e(in)g(commen)o(ts)f
+(in)h(the)h(target)177 2785 y(language)d(or)h(in)f(the)h(do)q(cumen)o(ting)f
+(text)i(surrounding)f(the)g(macro)e(de\014nitions.)21 b(In)15
+b(the)g(example)f(ab)q(o)o(v)o(e,)g(a)177 2835 y(C)g(commen)o(t)e(w)o(ould)h
+(ha)o(v)o(e)g(b)q(een)j(more)c(appropriate.)1042 2940 y(75)p
+eop
+%%Page: 76 77
+76 76 bop 177 42 a Fd(3.10.7)55 b(Quic)n(k)19 b(Names)177 148
+y Fr(F)m(unnelW)m(eb)13 b(pro)o(vides)g(a)f Fo(quic)o(k)i(name)e
+Fr(syn)o(tax)h(as)g(an)g(alternativ)o(e,)f(for)h(macros)f(whose)h(name)f
+(consists)i(of)e(a)177 198 y(single)f(c)o(haracter,)h(to)e(the)i(angle)e
+(brac)o(k)o(et)h(syn)o(tax)g(usually)f(used)i(\(e.g.)e Fl(@<Sloth@>)p
+Fr(\).)15 b(A)c(quic)o(k)f(name)g(sequence)177 248 y(consists)15
+b(of)e Fl(@#)p Fn(x)g Fr(where)j Fn(x)p Fr(,)d(the)h(name)f(of)g(the)i
+(macro,)d(can)i(b)q(e)g(an)o(y)g(prin)o(table)f(c)o(haracter)j(except)f
+(space.)177 374 y Fl(quick_name)20 b(=)h("@#")g(non_space_printable)177
+499 y Fr(The)14 b(result)g(is)f(iden)o(tical)f(to)h(the)h(equiv)n(alen)o(t)e
+(ordinary)h(name)f(syn)o(tax,)h(but)g(is)g(shorter.)19 b(F)m(or)13
+b(example,)e Fl(@#X)i Fr(is)177 549 y(equiv)n(alen)o(t)i(to)h
+Fl(@<X@>)p Fr(.)22 b(This)16 b(shorter)h(w)o(a)o(y)e(of)g(writing)g(one-c)o
+(haracter)j(macro)c(names)h(is)h(more)e(con)o(v)o(enien)o(t)177
+599 y(where)g(a)f(macro)f(m)o(ust)g(b)q(e)h(used)h(v)o(ery)f(often.)18
+b(F)m(or)12 b(example,)g(the)h(macro)f(calls)h(in)f(the)i(follo)o(wing)c
+(fragmen)o(t)h(of)177 649 y(an)j(Ada)g(program)e(are)i(a)g(little)f(clumsy)m
+(.)177 775 y Fl(@!)22 b(Define)e(@<D@>)h(as)g("")h(to)f(turn)g(on)g(debug)g
+(code)g(and)g("--")g(to)h(turn)f(it)g(off.)177 824 y(@$@<D@>@{--@})177
+874 y(@<D@>assert\(b>3\);)177 924 y(@<D@>if)g(x>7)g(then)g(write\("error"\))e
+(end)i(if)177 1050 y Fr(The)14 b(calls)g(can)g(b)q(e)h(shortened)g(using)f
+(the)g(alternativ)o(e)g(syn)o(tax.)177 1175 y Fl(@!)22 b(Define)e(@#|)h(as)h
+("")f(to)g(turn)g(on)h(debug)f(code)f(and)i("--")f(to)g(turn)g(it)g(off.)177
+1225 y(@$@#|@{--@})177 1275 y(@#|assert\(b>3\);)177 1325 y(@#|if)g(x>7)g
+(then)g(write\("error"\))e(end)i(if)177 1478 y Fd(3.10.8)55
+b(Inserting)18 b(End)h(of)g(Line)e(Mark)n(ers)177 1585 y Fr(An)11
+b(end)g(of)f(line)g(mark)o(er/c)o(haracter)h(can)g(b)q(e)g(inserted)h(in)o
+(to)e(the)h(text)h(using)e(the)h Fl(@+)g Fr(sequence.)19 b(This)10
+b(is)h(exactly)177 1635 y(equiv)n(alen)o(t)k(to)h(a)g(real)g(end)g(of)g(line)
+f(in)h(the)g(text)h(at)e(the)i(p)q(oin)o(t)e(where)j(it)d(o)q(ccurs.)26
+b(While)15 b(this)h(feature)h(ma)o(y)177 1684 y(sound)12 b(rather)h(useless,)
+h(it)d(is)h(v)o(ery)h(useful)f(for)g(la)o(ying)e(out)i(the)g(input)g(\014le.)
+18 b(F)m(or)11 b(example,)g(the)i(follo)o(wing)c(input)177
+1734 y(data)14 b(for)f(a)h(database)g(program)177 1860 y Fl(Animal)21
+b(=)g(Kangaroo)177 1910 y(Size)65 b(=)21 b(Medium)177 1959
+y(Speed)43 b(=)21 b(Fast)177 2059 y(Animal)g(=)g(Sloth)177
+2109 y(Size)65 b(=)21 b(Medium)177 2159 y(Speed)43 b(=)21 b(Slow)177
+2258 y(Animal)g(=)g(Walrus)177 2308 y(Size)65 b(=)21 b(Big)177
+2358 y(Speed)43 b(=)21 b(Medium)177 2484 y Fr(can)14 b(b)q(e)h(con)o(v)o
+(erted)g(in)o(to)177 2609 y Fl(Animal)21 b(=)g(Kangaroo)42
+b(@+Size)21 b(=)g(Medium)43 b(@+Speed)20 b(=)i(Fast)86 b(@+)177
+2659 y(Animal)21 b(=)g(Sloth)108 b(@+Size)21 b(=)g(Medium)43
+b(@+Speed)20 b(=)i(Slow)86 b(@+)177 2709 y(Animal)21 b(=)g(Walrus)86
+b(@+Size)21 b(=)g(Big)109 b(@+Speed)20 b(=)i(Medium)42 b(@+)177
+2835 y Fr(whic)o(h)14 b(is)g(easier)g(to)g(read,)g(and)g(more)f(easily)g
+(allo)o(ws)g(comparisons)f(b)q(et)o(w)o(een)k(records.)1042
+2940 y(76)p eop
+%%Page: 77 78
+77 77 bop 177 42 a Fd(3.10.9)55 b(Suppressing)19 b(End)g(of)g(Line)e(Mark)n
+(ers)177 137 y Fr(End)e(of)g(line)f(mark)o(ers)h(can)g(b)q(e)g(suppressed)j
+(b)o(y)c(the)i Fl(@-)e Fr(sequence.)24 b(A)15 b(single)f(o)q(ccurrence)k(of)c
+(a)h Fl(@-)g Fr(sequence)177 187 y(serv)o(es)20 b(to)e(suppress)i(only)e(the)
+g(end)h(of)f(line)f(mark)o(er)h(follo)o(wing)d(it)j(and)g(m)o(ust)f(app)q
+(ear)i Fm(exactly)f Fr(b)q(efore)h(the)177 237 y(end)e(of)f(line)h(mark)o(er)
+e(to)i(b)q(e)g(suppressed.)29 b(No)17 b(trailing)e(spaces,)j
+Fl(@!)27 b Fr(commen)o(ts,)15 b(or)h(an)o(y)h(other)g(c)o(haracters)177
+287 y(are)e(p)q(ermitted)g(b)q(et)o(w)o(een)h(a)e Fl(@-)g Fr(sequence)j(and)d
+(the)h(end)g(of)f(line)g(that)h(it)f(is)h(supp)q(osed)h(to)e(suppress.)22
+b(The)15 b Fl(@-)177 337 y Fr(sequence)i(is)d(useful)g(for)g(constructing)h
+(long)f(output)g(lines)g(without)g(them)g(ha)o(ving)f(to)h(app)q(ear)h(in)f
+(the)g(input.)177 386 y(It)e(can)h(also)e(b)q(e)i(used)g(in)e(the)i(same)e(w)
+o(a)o(y)h(as)g(the)g Fl(@+)g Fr(w)o(as)g(used)h(in)f(the)g(previous)h
+(section)g(to)f(assist)g(in)g(exp)q(osing)177 436 y(the)17
+b(structure)i(of)c(output)i(text)g(without)e(a\013ecting)i(the)g(output)f
+(text)h(itself.)25 b(Finally)m(,)15 b(it)h(is)g(in)o(v)n(aluable)e(for)177
+486 y(suppressing)h(the)g(EOL)f(after)g(the)h(op)q(ening)e(macro)g(text)i
+Fl(@)p Fq(f)e Fr(construct.)20 b(F)m(or)13 b(example:)177 583
+y Fl(@$@<Walrus@>@{@-)177 633 y(I)22 b(am)f(the)g(walrus!@})177
+729 y Fr(is)14 b(equiv)n(alen)o(t)f(to)177 826 y Fl(@$@<Walrus@>@{I)19
+b(am)i(the)g(walrus!@})177 922 y Fr(The)14 b(commen)o(t)d(construct)k(\()p
+Fl(@!)p Fr(\))j(can)13 b(also)g(b)q(e)g(used)h(to)f(suppress)i(end)f(of)f
+(lines.)k(Ho)o(w)o(ev)o(er,)d(the)f Fl(@-)g Fr(construct)177
+972 y(should)i(b)q(e)g(preferred)i(for)d(this)h(purp)q(ose)h(as)e(it)h(mak)o
+(es)e(explicit)i(the)g(programmer's)d(in)o(ten)o(t)j(to)f(suppress)j(the)177
+1022 y(end)e(of)e(line.)177 1155 y Fd(3.10.10)55 b(Include)18
+b(Files)177 1251 y Fr(F)m(unnelW)m(eb)12 b(pro)o(vides)h(an)g(include)g
+(\014le)f(facilit)o(y)f(with)i(a)f(maxim)o(um)c(depth)13 b(of)f(10.)18
+b(When)13 b(F)m(unnelW)m(eb)f(sees)i(a)177 1301 y(line)g(of)f(the)i(form)d
+Fl(@i)21 b(<filename>)p Fr(,)12 b(it)i(replaces)h(the)g(en)o(tire)f(line)g
+(\(including)f(the)i(EOL\))f(with)g(the)h(con)o(ten)o(ts)177
+1350 y(of)c(the)h(sp)q(eci\014ed)h(include)f(\014le.)17 b(F)m(unnelW)m(eb's)
+11 b(include)g(\014le)h(facilit)o(y)e(is)h(in)o(tended)h(to)g(op)q(erate)g
+(at)f(the)i(line)e(lev)o(el.)177 1400 y(If)k(the)h(last)f(line)g(of)f(the)i
+(include)g(\014le)f(is)g(not)g(terminated)g(b)o(y)g(an)g(EOL,)g(F)m(unnelW)m
+(eb)g(issues)h(a)f(w)o(arning)g(and)177 1450 y(in)o(terts)g(one)f(\(in)f(the)
+i(cop)o(y)f(in)f(memory\).)177 1519 y(The)g Fl(@i)g Fr(construct)h(is)f
+(illegal)e(if)h(it)g(app)q(ears)i(an)o(ywhere)f(except)i(at)d(the)i(start)f
+(of)f(a)h(line.)k(The)c(construct)i(m)o(ust)177 1569 y(b)q(e)e(follo)o(w)o
+(ed)e(b)o(y)h(a)g(single)g(blank.)17 b(The)c(\014le)f(name)f(is)h(de\014ned)i
+(to)e(b)q(e)h(ev)o(erything)g(b)q(et)o(w)o(een)g(the)g(blank)f(and)g(the)177
+1619 y(end)j(of)e(the)h(line)g(\(no)g(commen)o(ts)e(\()p Fl(@!)p
+Fr(\))18 b(please!\).)g(Example:)f(If)c(the)i(input)e(\014le)h(is)177
+1715 y Fl("Uh)21 b(Oh,)h(It's)e(the)i(Fuzz.)e(We're)h(busted!")f(said)h(Baby)
+g(Bear.)177 1765 y(@i)h(mr_plod.txt)177 1815 y("Quick!)f(Flush)f(the)h(stash)
+g(down)g(the)g(dunny)g(and)g(let's)g(split.")f(said)h(Father)g(Bear.)177
+1912 y Fr(and)14 b(there)h(is)f(a)f(\014le)h(called)g Fl(mr)p
+672 1912 14 2 v 15 w(plod.txt)e Fr(con)o(taining)177 2008 y
+Fl("'Ello,)21 b('Ello,)f('Ello!)h(What's)f(all)h(this)g('ere)g(then?")g(Mr)g
+(Plod)g(exclaimed.)177 2105 y Fr(then)15 b(the)f(scanner)h(translates)g(the)g
+(input)e(\014le)h(in)o(to)177 2201 y Fl("Uh)21 b(Oh,)h(It's)e(the)i(Fuzz.)e
+(We're)h(busted!")f(said)h(Baby)g(Bear.)177 2251 y("'Ello,)g('Ello,)f('Ello!)
+h(What's)f(all)h(this)g('ere)g(then?")g(Mr)g(Plod)g(exclaimed.)177
+2301 y("Quick!)g(Flush)f(the)h(stash)g(down)g(the)g(dunny)g(and)g(let's)g
+(split.")f(said)h(Father)g(Bear.)177 2398 y Fr(As)14 b(a)g(p)q(oin)o(t)f(of)g
+(terminology)m(,)d(F)m(unnelW)m(eb)k(calls)f(the)h(original)e(input)i(\014le)
+f(the)i Fo(input)e(\014le)f Fr(and)h(calls)h(include)177 2447
+y(\014les)g(and)g(their)g(included)g(\014les)h Fo(include)e(\014les)p
+Fr(.)177 2516 y(The)g(include)f(\014le)g(construct)i(op)q(erates)g(at)e(a)g
+(v)o(ery)g(lo)o(w)g(lev)o(el.)17 b(An)12 b(include)h(line)e(can)i(app)q(ear)f
+(an)o(ywhere)h(in)f(the)177 2566 y(input)i(\014le)g(regardless)h(of)e(the)i
+(con)o(text)f(of)f(the)i(surrounding)f(lines.)177 2635 y(F)m(unnelW)m(eb)d
+(sets)i(the)g(sp)q(ecial)f(c)o(haracter)h(to)e(the)i(default)e(\()p
+Fl(@)p Fr(\))h(at)g(the)g(start)g(of)f(eac)o(h)i(include)e(\014le)h(and)g
+(restores)177 2685 y(it)h(to)g(its)f(previous)i(v)n(alue)e(at)h(the)g(end)h
+(of)e(the)i(include)f(\014le.)k(This)c(allo)o(ws)f(macro)g(libraries)g(to)h
+(b)q(e)h(constructed)177 2735 y(and)e(included)f(that)h(are)g(indep)q(enden)o
+(t)h(of)e(the)h(prev)n(ailing)e(sp)q(ecial)h(c)o(haracter)i(at)f(the)g(p)q
+(oin)o(t)f(of)g(inclusion.)16 b(The)177 2785 y(same)g(go)q(es)h(for)f(the)h
+(input)f(line)g(length)g(limit)e(whic)o(h)i(is)h(reset)h(to)e(the)h(default)f
+(v)n(alue)g(at)g(the)h(start)g(of)f(eac)o(h)177 2835 y(include)e(\014le)g
+(and)g(restored)h(to)f(its)g(previous)g(v)n(alue)f(afterw)o(ards.)1042
+2940 y(77)p eop
+%%Page: 78 79
+78 78 bop 177 42 a Fd(3.10.11)55 b(Pragmas)177 143 y Fr(Most)19
+b(to)q(ols)g(ha)o(v)o(e)f(to)h(supp)q(ort)g(some)f(essen)o(tial,)i(but)f
+(rather)h(inelegan)o(t)e(features.)33 b(In)19 b(F)m(unnelW)m(eb)f(these)177
+193 y(messy)c(bits)g(ha)o(v)o(e)f(all)g(b)q(een)i(stu\013ed)g(in)o(to)e(the)i
+(scanner's)g Fo(pragma)e Fr(\(for)h Fm(pr)n(agma)p Fr(tic\))g(construct.)177
+268 y(A)h(pragma)e(consists)j(of)e(a)h(single)f(line)g(of)g(input)h
+(\(including)f(the)h(EOL\))h(commencing)c(with)j Fl(@p)p Fr(.)20
+b(This)15 b(m)o(ust)177 318 y(b)q(e)g(follo)o(w)o(ed)e(b)o(y)h(a)g(single)g
+(space,)g(and)g(then)h(the)g(pragma)e(v)o(erb.)19 b(This)14
+b(m)o(ust)g(b)q(e)g(follo)o(w)o(ed)f(b)o(y)h(a)g(sequence)i(of)177
+368 y(zero)f(or)f(more)f(argumen)o(ts)g(separated)i(b)o(y)f(one)g(or)g(more)e
+(spaces.)20 b(F)m(our)13 b(pragmas)g(are)h(a)o(v)n(ailable)177
+485 y Fl(pragma)21 b(=)g(pragma_ident)f(|)h(pragma_mill)f(|)h(pragma_moll)f
+(|)h(pragma_typesetter)177 602 y Fr(The)14 b(follo)o(wing)e(syn)o(tax)i
+(de\014nitions)f(assist)i(in)e(de\014ning)h(the)h(pragmas.)177
+719 y Fl(s)174 b(=)22 b({")f("}+)177 768 y(ps)152 b(=)22 b(\("@p")f(|)g
+("@P"\))g(")h(")177 818 y(number)64 b(=)22 b({)f(decimal_digit)f(}+)177
+868 y(numorinf)g(=)i(number)e(|)i("infinity")177 985 y Fr(The)14
+b(argumen)o(ts)g(to)f(pragmas)g(are)h(case-sensitiv)o(e)h(and)f(m)o(ust)f(b)q
+(e)h(sp)q(eci\014ed)i(in)d(lo)o(w)o(er)h(case.)177 1060 y(Pragmas)f(are)h
+(pro)q(cessed)i(and)d(consumed)h(en)o(tirely)g(b)o(y)f(the)i(scanner.)k(The)
+14 b(parser)h(nev)o(er)g(sees)g(them)e(and)h(so)177 1110 y(they)i(can)f(pla)o
+(y)f(no)h(part)h(in)e(the)i(parser)g(lev)o(el)f(syn)o(tax.)22
+b(As)15 b(a)g(result,)h(pragma)d(lines)i(can)g(app)q(ear)h(an)o(ywhere)177
+1160 y(in)g(the)g(en)o(tire)g(input)g(\014le)g(regardless)h(of)e(the)h
+(surrounding)g(con)o(text)h(\(e.g.)e(ev)o(en)i(in)e(the)h(middle)e(of)h(a)h
+(macro)177 1209 y(de\014nition\).)i(The)c(sole)g(e\013ect)i(of)d(a)h(pragma)e
+(is)h(to)h(mo)q(dify)e(some)h(in)o(ternal)g(parameter)h(of)f(F)m(unnelW)m
+(eb.)177 1284 y(The)h(follo)o(wing)e(sections)j(describ)q(e)g(the)g(four)e(F)
+m(unnelW)m(eb)h(pragmas.)177 1418 y Fo(3.10.11.1)48 b(Inden)o(tation)177
+1520 y Fr(When)18 b(F)m(unnelW)m(eb)g(expands)g(a)g(macro,)f(it)g(can)h(do)g
+(so)g(in)f(t)o(w)o(o)h(w)o(a)o(ys.)29 b(First)18 b(it)g(can)g(treat)h(the)f
+(text)g(it)g(is)177 1570 y(pro)q(cessing)e(as)e(a)g(one-dimensional)e(stream)
+i(of)g(text,)h(and)f(merely)f(insert)i(the)g(b)q(o)q(dy)g(of)f(the)h(macro)e
+(in)h(place)177 1620 y(of)d(the)g(macro)f(call.)17 b(Second,)12
+b(it)e(can)i(treat)g(the)f(text)h(of)f(the)g(macro)f(as)h(a)g(t)o(w)o(o)g
+(dimensional)e(ob)r(ject)j(and)f(inden)o(t)177 1670 y(eac)o(h)k(line)f(of)g
+(the)h(macro)f(b)q(o)q(dy)g(b)o(y)g(the)i(amoun)o(t)c(that)j(the)g(macro)e
+(call)h(itself)g(w)o(as)h(inden)o(ted.)20 b(Consider)15 b(the)177
+1719 y(follo)o(wing)c(macros.)177 1836 y Fl(@$@<Loop)20 b(Structure@>@{@-)177
+1886 y(i=1;)177 1936 y(while)h(\(i<=N\))243 1986 y(@<Loop)f(body@>)177
+2036 y(endwhile)177 2085 y(@})177 2185 y(@$@<Loop)g(body@>@{@-)177
+2235 y(a[i]:=0;)177 2285 y(i:=i+1;@})177 2402 y Fr(Under)15
+b(the)f(regime)f(of)h Fo(no)h(inden)o(tati)o(on)10 b Fr(the)15
+b(lo)q(op)e(structure)j(macro)c(expands)j(to:)177 2518 y Fl(i=1;)177
+2568 y(while)21 b(\(i<=N\))243 2618 y(a[i]:=0;)177 2668 y(i:=i+1;)177
+2718 y(endwhile)177 2835 y Fr(Under)15 b(the)f(regime)f(of)h
+Fo(blank)g(inden)o(tati)o(on)c Fr(the)15 b(lo)q(op)e(structure)j(macro)d
+(expands)h(to:)1042 2940 y(78)p eop
+%%Page: 79 80
+79 79 bop 177 42 a Fl(i=1;)177 91 y(while)21 b(\(i<=N\))243
+141 y(a[i]:=0;)243 191 y(i:=i+1;)177 241 y(endwhile)177 363
+y Fr(The)11 b Fl(indentation)d Fr(pragma)h(determines)h(whic)o(h)h(of)f
+(these)i(t)o(w)o(o)d(regimes)h(will)f(b)q(e)i(used)h(to)e(expand)h(the)g
+(macros)177 413 y(when)k(constructing)f(the)h(pro)q(duct)g(\014les.)j(The)c
+(syn)o(tax)g(of)g(the)g(pragma)e(is:)177 535 y Fl(pragma_ident)19
+b(=)j(ps)f("indentation")f(s)h("=")g(s)h(\("blank")e(|)i("none"\))177
+658 y Fr(Its)15 b(t)o(w)o(o)e(forms)f(lo)q(ok)h(lik)o(e)g(this:)177
+780 y Fl(@p)22 b(indentation)d(=)j(blank)177 830 y(@p)g(indentation)d(=)j
+(none)177 952 y Fr(In)13 b(the)h(curren)o(t)h(v)o(ersion)f(of)e(F)m(unnelW)m
+(eb,)h(the)h(inden)o(tation)e(regime)g(is)i(an)f(attribute)g(that)h(is)f
+(attac)o(hed)h(to)f(an)177 1002 y(en)o(tire)g(run)g(of)e(T)m(angle;)h(it)g
+(is)g(not)g(p)q(ossible)h(to)f(bind)g(it)g(to)g(particular)g(pro)q(duct)h
+(\014les)g(or)f(to)g(particular)g(macros.)177 1052 y(As)h(a)e(result,)i(it)e
+(do)q(esn't)i(matter)e(where)i(inden)o(tation)f(pragmas)e(o)q(ccur)j(in)f
+(the)g(input)g(\014le)g(or)g(ho)o(w)f(man)o(y)f(there)177 1102
+y(are)k(so)g(long)f(as)h(they)h(are)f(all)f(the)h(same.)j(By)d(default)g(F)m
+(unnelW)m(eb)f(uses)i(blank)f(inden)o(tation.)177 1242 y Fo(3.10.11.2)48
+b(Maxim)o(um)15 b(Input)f(Line)g(Length)177 1348 y Fr(F)m(unnelW)m(eb)19
+b(generates)i(an)e(error)h(for)f(eac)o(h)h(input)f(line)g(that)g(exceeds)j(a)
+d(certain)h(maxim)n(um)15 b(n)o(um)o(b)q(er)j(of)177 1397 y(c)o(haracters.)i
+(A)o(t)13 b(the)h(start)g(of)f(the)h(pro)q(cessing)h(of)d(eac)o(h)i(input)f
+(\014le)h(and)f(eac)o(h)h(include)f(\014le,)g(this)h(maxim)n(um)9
+b(is)177 1447 y(set)15 b(to)f(a)g(default)g(v)n(alue)g(of)f(80.)19
+b(Ho)o(w)o(ev)o(er,)14 b(the)h(maxim)n(um)10 b(can)15 b(b)q(e)g(c)o(hanged)f
+(using)g(a)g(maxim)n(um)c(input)k(line)177 1497 y(length)g(pragma.)177
+1619 y Fl(pragma_mill)20 b(=)h(ps)h("maximum_input_l)o(ine_l)o(engt)o(h")d(s)
+i("=")h(s)f(numorinf)177 1742 y Fr(The)15 b(maxim)n(um)10 b(input)k(line)f
+(length)i(can)f(b)q(e)h(v)n(aried)f Fm(dynamic)n(al)r(ly)g
+Fr(throughout)g(the)h(input)f(\014le.)19 b(Eac)o(h)14 b(maxi-)177
+1792 y(m)o(um)7 b(input)i(line)g(length)h(pragma's)e(scop)q(e)i(co)o(v)o(ers)
+h(the)f(line)f(follo)o(wing)e(the)j(pragma)e(through)i(to)f(and)h(including)
+177 1841 y(the)17 b(next)g(maxim)n(um)12 b(input)k(line)g(length)h(pragma,)d
+(but)j(not)f(co)o(v)o(ering)g(an)o(y)g(in)o(terv)o(ening)g(include)h
+(\014les.)26 b(A)o(t)177 1891 y(the)14 b(start)g(of)f(an)g(include)h(\014le,)
+f(F)m(unnelW)m(eb)g(resets)i(the)f(maxim)o(um)9 b(input)k(line)g(length)g(to)
+h(the)g(default)f(v)n(alue.)177 1941 y(It)h(restores)i(it)e(to)f(its)h
+(previous)g(v)n(alue)g(at)f(the)i(end)f(of)g(the)g(include)g(\014le.)177
+2018 y(This)k(pragma)f(is)h(useful)g(for)g(detecting)i(text)f(that)f(has)h
+(stra)o(y)o(ed)g(o\013)f(the)h(righ)o(t)f(side)g(of)g(the)h(screen)h(when)177
+2068 y(editing.)25 b(If)16 b(y)o(ou)f(use)i(F)m(unnelW)m(eb,)f(and)g(set)i
+(the)e(maxim)o(um)c(input)k(line)f(length)i(to)f(b)q(e)h(the)f(width)g(of)g
+(y)o(our)177 2118 y(editing)g(windo)o(w,)g(y)o(ou)g(will)e(nev)o(er)k(b)q(e)f
+(caugh)o(t)f(b)o(y)m(,)g(for)g(example,)f(o\013-screen)j(op)q(ening)e(commen)
+o(t)f(sym)o(b)q(ols.)177 2168 y(Y)m(ou)d(can)g(also)f(b)q(e)i(sure)g(that)f
+(y)o(our)g(source)h(text)f(can)h(b)q(e)f(prin)o(ted)h(ra)o(w,)e(if)g
+(necessary)m(,)j(without)d(lines)h(wrapping)177 2218 y(around.)177
+2358 y Fo(3.10.11.3)48 b(Maxim)o(um)15 b(Output)e(File)h(Line)h(Length)177
+2463 y Fr(As)e(w)o(ell)e(as)i(k)o(eeping)f(an)g(ey)o(e)h(on)f(input)g(line)g
+(lengths,)g(F)m(unnelW)m(eb)g(also)g(k)o(eeps)h(an)f(ey)o(e)h(on)f(the)h
+(line)f(lengths)g(of)177 2513 y(pro)q(duct)f(\014les)f(and)g(\015ags)g(all)f
+(lines)h(longer)g(than)g(a)f(certain)i(limit)c(with)j(error)h(messages.)17
+b(Unlik)o(e)9 b(the)i(maxim)n(um)177 2563 y(input)17 b(line)f(length,)h(whic)
+o(h)g(can)g(v)n(ary)f(dynamically)e(throughout)j(the)g(input)g(\014le,)g(the)
+g(maxim)n(um)c(pro)q(duct)177 2613 y(\014le)18 b(line)e(length)i(remains)e
+(\014xed)i(throughout)f(the)h(generation)g(of)f(all)f(the)i(pro)q(duct)g
+(\014les.)29 b(The)18 b(maxim)n(um)177 2662 y(pro)q(duct)d(\014le)f(line)f
+(length)h(pragma)d(allo)o(ws)i(this)h(v)n(alue)f(to)g(b)q(e)i(set.)k(If)13
+b(there)i(is)f(more)e(than)i(one)g(suc)o(h)h(pragma)177 2712
+y(in)f(an)f(input)h(\014le,)f(the)i(pragmas)d(m)o(ust)h(all)g(sp)q(ecify)h
+(the)h(same)e(v)n(alue.)177 2835 y Fl(pragma_moll)20 b(=)h(ps)h
+("maximum_output_)o(line_)o(leng)o(th")d(s)i("=")g(s)h(numorinf)1042
+2940 y Fr(79)p eop
+%%Page: 80 81
+80 80 bop 177 42 a Fr(The)14 b(default)g(v)n(alue)f(is)h(80)f(c)o(haracters.)
+177 126 y(This)h(pragma)f(is)h(only)f(one)i(of)f(t)o(w)o(o)f(constrain)o(ts)i
+(on)f(the)h(length)f(of)g(the)h(lines)f(of)g(the)h(pro)q(duct)g(\014les.)20
+b(The)14 b Fl(+W)177 176 y Fr(command)e(line)j(option)f(also)g(con)o
+(tributes.)22 b(The)15 b(actual)f(v)n(alue)h(that)f(F)m(unnelW)m(eb)h(uses)h
+(is)e(the)i(minim)n(um)10 b(of)177 226 y(the)15 b(limits)c(sp)q(eci\014ed)16
+b(in)d(the)i(command)c(line)i(and)h(pragmas.)177 310 y(F)m(unnelW)m(eb)i(do)q
+(es)h(not)f(monitor)e(the)j(length)f(of)g(the)h(lines)f(of)f(its)h(other)h
+(output)g(\014les)f(\(journal)g(\014le,)g(listing)177 360 y(\014le,)e(do)q
+(cumen)o(tation)e(\014le\).)177 524 y Fo(3.10.11.4)48 b(T)o(yp)q(esetter)177
+639 y Fr(The)22 b Fl(typesetter)d Fr(pragma)g(allo)o(ws)h(the)i(user)h(to)e
+(sp)q(ecify)h(whether)g(the)g(input)f(\014le)g(is)g(supp)q(osed)i(to)e(b)q(e)
+177 689 y(t)o(yp)q(esetter-indep)q(ende)q(n)o(t,)15 b(or)c(whether)j(it)d
+(con)o(tains)h(commands)d(in)j(a)f(particular)h(t)o(yp)q(esetter)i(language.)
+i(The)177 739 y(pragma)c(has)i(the)h(follo)o(wing)c(syn)o(tax.)177
+879 y Fl(pragma_typesetter)18 b(=)k(ps)f("typesetter")f(s)h("=")g(s)h
+(\("none")e(|)i("tex"\))177 1020 y Fr(The)14 b(t)o(w)o(o)g(forms)e(of)i(the)g
+(pragma)e(lo)q(ok)h(lik)o(e)g(this.)177 1161 y Fl(@)22 b(typesetter)d(=)j
+(none)177 1210 y(@)g(typesetter)d(=)j(tex)177 1351 y Fr(A)17
+b(source)h(\014le)f(can)g(con)o(tain)f(more)g(than)h(one)g(t)o(yp)q(esetter)i
+(pragma,)c(but)i(they)h(m)o(ust)d(all)h(sp)q(ecify)h(the)h(same)177
+1401 y(v)n(alue.)g(The)c(default)f(is)h Fl(none)p Fr(.)j(The)e(t)o(yp)q
+(esetter)h(setting)e(a\013ects)h(t)o(w)o(o)f(things:)295 1485
+y Fo(Handling)k(of)h(free)f(text:)25 b Fr(If)17 b(the)g(t)o(yp)q(esetter)j
+(is)d(not)g Fl(none)p Fr(,)g(W)m(ea)o(v)o(e)f(writes)i(the)g(free)g(text)295
+1535 y Fm(dir)n(e)n(ctly)c Fr(to)i(the)g(do)q(cumen)o(tation)e(\014le)h
+(without)g(c)o(hanging)g(it)f(whatso)q(ev)o(er.)24 b(This)15
+b(means)g(that)295 1585 y(if)d(\(sa)o(y\))g Fl(\\centerline)e
+Fr(app)q(ears)j(in)f(the)h(input)f(\014le,)g(it)g(will)f(copied)i(directly)f
+(to)g(the)h(do)q(cumen-)295 1635 y(tation)k(\014le.)27 b(If)17
+b(the)h(t)o(yp)q(esetter)h(is)e Fl(none)p Fr(,)f(W)m(ea)o(v)o(e)h(in)o
+(tercepts)i(an)o(y)d(c)o(haracters)j(or)e(sequences)295 1685
+y(that)g(migh)o(t)d(ha)o(v)o(e)i(a)g(sp)q(ecial)g(meaning)f(to)h(the)h
+(target)f(t)o(yp)q(esetter)j(and)d(replaces)i(them)d(with)295
+1734 y(t)o(yp)q(esetter)h(commands)11 b(to)i(t)o(yp)q(eset)i(the)f(sequences)
+i(so)d(that)h(they)g(will)e(app)q(ear)i(as)f(they)h(do)f(in)295
+1784 y(the)k(input.)26 b(F)m(or)16 b(example,)f(if)g(the)i(t)o(yp)q(esetter)i
+(is)d Fl(none)g Fr(and)g(the)h(target)g(t)o(yp)q(esetter)i(is)d(T)1765
+1793 y(E)1788 1784 y(X,)295 1834 y(then)h(if)d Fl($)i Fr(\(the)g(T)581
+1843 y(E)604 1834 y(X)g(\\mathematics)d(mo)q(de")h(c)o(haracter\))j(app)q
+(ears)g(in)e(the)h(input)f(\014le,)h(it)f(will)295 1884 y(b)q(e)g(b)q(e)f
+(written)h(to)e(the)i(do)q(cumen)o(tation)e(\014le)g(as)h Fl(\\$)p
+Fr(.)295 1968 y Fo(Restrictions)f(on)j(the)g(target)f(t)o(yp)q(esetter:)i
+Fr(A)o(t)e(a)f(later)g(date,)h(di\013eren)o(t)g(w)o(ea)o(v)o(e)g(mo)q(dules)
+295 2018 y(migh)o(t)d(b)q(e)j(incorp)q(orated)g(in)o(to)f(F)m(unnelW)m(eb)g
+(to)g(cater)h(for)f(a)g(v)n(ariet)o(y)g(of)f(di\013eren)o(t)i(t)o(yp)q
+(esetters.)295 2068 y(If)k(this)f(happ)q(ens,)j(it)d(will)g(b)q(e)h(imp)q
+(ortan)o(t)e(to)i(ensure)h(that)f(t)o(yp)q(esetter-sp)q(eci\014c)j(source)e
+(\014les)295 2118 y(\(i.e.)e Fl(typesetter)e Fq(6)p Fr(=)j
+Fl(none)p Fr(\))e(are)i(not)g(pro)q(cessed)h(with)e(di\013eren)o(t)i(target)f
+(t)o(yp)q(esetters.)34 b(F)m(or)295 2168 y(example,)18 b(a)g(user)h(migh)o(t)
+d(inno)q(cen)o(tly)i(attempt)f(to)h(generate)i(a)e Fl(troff)f
+Fr(do)q(cumen)o(tation)g(\014le)295 2217 y(from)f(a)h(F)m(unnelW)m(eb)g
+(source)i(\014le)e(con)o(taining)f(a)h Fl(typesetter)j(=)i(tex)16
+b Fr(\(and)i(b)o(y)f(implication)295 2267 y(T)318 2276 y(E)341
+2267 y(X)j(con)o(trol)f(sequences\).)36 b(The)20 b(pragma)d(could)i(also)g(b)
+q(e)h(useful)f(for)g(catc)o(hing)g(t)o(yp)q(esetter)295 2317
+y(clashes)12 b(in)f(source)h(and)f(include)g(\014les.)18 b(The)11
+b(setting)h Fl(none)e Fr(is)h(sp)q(ecial)g(b)q(ecause)i(it)d(is)h(guaran)o
+(teed)295 2367 y(to)j(w)o(ork)g(with)f(an)o(y)h(future)g(target)g(t)o(yp)q
+(esetter.)177 2451 y(The)i(aim)d(of)h(all)g(this)h(is)g(to)g(ensure)h(that)g
+(an)o(y)e(t)o(yp)q(esetter)j(dep)q(endency)h(is)d(correctly)h(pro)q(claimed.)
+k(Because)177 2501 y Fl(none)12 b Fr(is)h(the)h(default)f(t)o(yp)q(esetter,)i
+(a)e(user)h(who)f(creates)i(a)e(source)i(\014le)e(without)g(a)f
+Fl(typesetter)20 b(=)i(x)13 b Fr(pragma)177 2551 y(will)d(so)q(on)i(\014nd)g
+(that)g(the)h(con)o(trol)e(sequences)j(they)f(are)f(inserting)g(in)o(to)f
+(the)h(source)h(do)q(cumen)o(t)f(are)g(app)q(earing)177 2601
+y(v)o(erbatim)i(in)h(the)g(prin)o(ted)h(do)q(cumen)o(tation!)21
+b(In)15 b(order)h(to)f(activ)n(ate)g(these)h(sequences,)i(they)e(will)d(b)q
+(e)j(forced)177 2651 y(to)e(add)g(a)f Fl(typesetter)f Fr(pragma,)g(th)o(us)i
+(making)d(the)k(dep)q(endency)h(explicit.)177 2735 y(It)f(ma)o(y)d(seem)j
+(strange)g(to)f(place)h(the)g Fl(typesetter)d Fr(setting)j(facilit)o(y)e
+(within)h(a)g(pragma)f(\()p Fl(@p)p Fr(\))h(when)h(there)h(is)177
+2785 y(a)e(separate)i(t)o(yp)q(esetting)g(construct)g(\()p
+Fl(@t)p Fr(\).)k(This)15 b(has)g(b)q(een)g(done)g(to)g(sustain)g(the)g(rule)g
+(of)f(th)o(um)o(b)f(that)i(sa)o(ys)177 2835 y(that)f(pragmas)e(do)i(not)g
+(participate)g(in)f(the)i(parser-lev)o(el)f(syn)o(tax,)g(but)g(t)o(yp)q
+(esetter)i(directiv)o(es)f(do.)1042 2940 y(80)p eop
+%%Page: 81 82
+81 81 bop 177 42 a Fd(3.10.12)55 b(F)-5 b(reestanding)19 b(T)n(yp)r(esetter)d
+(Directiv)n(es)177 141 y Fr(F)m(unnelW)m(eb)c(pro)o(vides)g(t)o(w)o(o)g
+(kinds)g(of)g(t)o(yp)q(esetter)j(directiv)o(e)e(to)f(assist)h(the)f(user)i
+(to)e(pro)q(duce)h(do)q(cumen)o(tation.)177 191 y(These)j(are)e
+Fo(inline)d Fr(and)j Fo(freestanding)o Fr(.)i(Unlik)o(e)e(pragmas,)e(eac)o(h)
+j(of)f(these)h(categories)g(of)f(directiv)o(e)h(partic-)177
+241 y(ipates)g(in)f(the)h(parser-lev)o(el)h(syn)o(tax)e(and)h(can)g(app)q
+(ear)g(only)e(in)i(certain)g(con)o(texts)g(\(see)h(the)g(parser)f(section\).)
+177 291 y(Inline)f(directiv)o(es)i(are)f(designed)g(to)f(b)q(e)h(used)h
+(within)e(paragraphs)g(to)h(alter)f(the)h(lo)q(ok)f(of)g(the)h(enclosed)h
+(text.)177 341 y(F)m(reestanding)f(t)o(yp)q(esetter)i(directiv)o(es)f(are)f
+(designed)h(to)e(app)q(ear)i(on)e(lines)h(of)f(their)h(o)o(wn)f(and)h(ha)o(v)
+o(e)g(a)f(bigger)177 390 y(t)o(yp)q(ographical)f(impact.)177
+463 y(The)18 b(syn)o(tax)f(of)f(freestanding)i(t)o(yp)q(esetter)i(directiv)o
+(es)e(is)f(almost)e(iden)o(tical)i(to)g(that)g(of)f(pragmas.)27
+b(All)16 b(the)177 513 y(same)11 b(syn)o(tax)i(rules)f(apply)g(\(except)i
+(that)e(the)h(actual)e(k)o(eyw)o(ords)i(are)f(di\013eren)o(t\).)19
+b(The)13 b(follo)o(wing)c(subsections)177 563 y(describ)q(e)16
+b(the)e(four)g(t)o(yp)q(esetter)i(directiv)o(es)f(a)o(v)n(ailable.)177
+673 y Fl(ftd)21 b(=)h(ftd_newpage)d(|)j(ftd_toc)e(|)i(ftd_vskip)e(|)h
+(ftd_title)177 723 y(ts)43 b(=)22 b("@t)f(")177 853 y Fo(3.10.12.1)48
+b(New)17 b(P)o(age)177 953 y Fr(The)d(new)h(page)f(pragma)e(is)h(a)h(t)o(yp)q
+(esetting)h(pragma)d(with)h(the)i(follo)o(wing)c(syn)o(tax.)177
+1063 y Fl(ftd_newpage)20 b(=)h(ts)h("new_page")177 1174 y Fr(It)14
+b(only)f(form)f(lo)q(oks)i(lik)o(e)f(this.)177 1284 y Fl(@t)22
+b(new_page)177 1394 y Fr(Its)15 b(sole)f(e\013ect)i(is)e(to)g(cause)i(a)e
+(\\skip)g(to)g(a)g(new)g(page")g(command)e(to)i(b)q(e)h(inserted)h(in)o(to)d
+(the)i(do)q(cumen)o(tation)177 1444 y(\014le.)21 b(The)15 b(new)h(page)e
+(command)f(is)h(suc)o(h)i(that)f(if)f(the)h(t)o(yp)q(esetter)i(is)e(already)g
+(at)f(the)i(top)e(of)h(a)f(page,)h(it)f(will)177 1494 y(skip)g(to)g(the)g
+(top)g(of)f(the)i(next)f(page.)177 1624 y Fo(3.10.12.2)48 b(T)l(able)15
+b(of)g(Con)o(ten)o(ts)177 1724 y Fr(The)f(new)h(page)f(pragma)e(is)h(a)h(t)o
+(yp)q(esetting)h(pragma)d(with)h(the)i(follo)o(wing)c(syn)o(tax.)177
+1834 y Fl(ftd_toc)21 b(=)g(ts)g("table_of_contents")177 1944
+y Fr(It)14 b(only)f(form)f(lo)q(oks)i(lik)o(e)f(this.)177 2055
+y Fl(@t)22 b(table_of_conten)o(ts)177 2165 y Fr(Its)16 b(sole)f(e\013ect)h
+(is)f(to)g(instruct)h(W)m(ea)o(v)o(e)f(to)f(insert)i(a)f(table)g(of)f(con)o
+(ten)o(ts)i(at)f(this)g(p)q(oin)o(t)g(in)f(the)i(prin)o(ted)g(do)q(cu-)177
+2215 y(men)o(tation.)g(This)e(pragma)e(do)q(es)j(not)f(skip)f(to)h(a)g(top)g
+(of)f(a)g(new)i(page)f(\014rst.)177 2345 y Fo(3.10.12.3)48
+b(V)l(ertical)14 b(Skip)177 2445 y Fr(The)e(v)o(ertical)f(skip)g(pragma)f(is)
+h(a)g(t)o(yp)q(esetting)i(pragma)c(that)j(instructs)g(W)m(ea)o(v)o(e)f(to)g
+(insert)i(a)e(sp)q(eci\014ed)i(amoun)o(t)177 2495 y(of)g(v)o(ertical)h(space)
+h(in)o(to)e(the)i(do)q(cumen)o(tation.)i(The)d(pragma)e(has)i(the)g(follo)o
+(wing)e(syn)o(tax.)177 2605 y Fl(ftd_vskip)20 b(=)i(ts)f("vskip")f(s)i
+(number)f(s)g("mm")177 2715 y Fr(F)m(or)14 b(example:)177 2825
+y Fl(@t)22 b(vskip)e(26)i(mm)1042 2940 y Fr(81)p eop
+%%Page: 82 83
+82 82 bop 177 42 a Fo(3.10.12.4)48 b(Title)177 147 y Fr(The)14
+b(title)g(pragma)e(is)i(a)f(t)o(yp)q(esetting)i(pragma)d(with)i(the)g(follo)o
+(wing)e(syn)o(tax.)177 269 y Fl(ftd_title)20 b(=)i(ts)f("title")f(s)i(font)f
+(s)h(alignment)d(text)177 319 y(font)130 b(=)22 b("normalfont")d(|)j
+("titlefont")d(|)j("smalltitlefont")177 369 y(alignment)e(=)i("left")e(|)i
+("centre")e(|)i("right")177 419 y(text)130 b(=)22 b("""")f({printable_char})d
+("""")177 541 y Fr(It's)f(e\013ect)i(is)d(to)h(instruct)h(W)m(ea)o(v)o(e)e
+(to)h(insert)h(a)e(single)h(line)f(in)o(to)g(the)i(prin)o(ted)f(do)q(cumen)o
+(tation)f(con)o(taining)177 591 y(the)e(sp)q(eci\014ed)i(text)e(set)g(in)f
+(the)i(sp)q(eci\014ed)g(fon)o(t)e(and)g(aligned)g(in)g(the)h(sp)q(eci\014ed)i
+(manner.)h(The)d(double)f(quotes)177 641 y(delimiting)g(the)j(text)g(are)f
+(for)h(sho)o(w)f(only;)g(if)f(y)o(ou)h(w)o(an)o(t)g(to)g(put)h(a)f(double)g
+(quote)h(in)f(the)h(string,)f(y)o(ou)g(don't)177 691 y(need)g(to)f(double)g
+(them.)177 768 y(Here)h(is)f(an)g(example)e(of)i(the)g(pragma.)177
+890 y Fl(@t)22 b(title)e(smalltitlefont)f(centre)i("How)g(to)g(Flip)g(a)h
+(Bit")177 1039 y Fd(3.10.13)55 b(Scanner/P)n(arser)20 b(In)n(terface)177
+1144 y Fr(If)12 b(the)g(scanner)i(terminates)d(without)h(an)o(y)f(errors,)i
+(con)o(trol)f(is)g(passed)h(to)f(the)g(parser.)19 b(The)12
+b(parser)h(parses)g(the)177 1194 y(tok)o(en)h(list)f(generated)i(b)o(y)f(the)
+g(scanner.)19 b(The)c(tok)o(en)e(list)h(consists)g(of)f(text)i(scraps,)f
+(freestanding)g(t)o(yp)q(esetter)177 1244 y(directiv)o(es,)h(and)e(sp)q
+(ecial)h(sequence)i(tok)o(ens.)177 1321 y(The)g(user)g(should)f(b)q(ear)h(in)
+e(mind)f(that)j Fm(the)g(sc)n(anner)g(\014nishes)h(running)f(b)n(efor)n(e)g
+(the)g(p)n(arser)f(starts)g(running.)177 1371 y Fr(This)g(means)g(that)g(the)
+g(scanner)i(cannot)e(b)q(e)h(in\015uenced)g(in)f(an)o(y)g(w)o(a)o(y)f(b)o(y)h
+(higher)g(order)h(structures)i(suc)o(h)e(as)177 1421 y(the)d(parser)g(migh)o
+(t)d(parse.)18 b(F)m(or)12 b(example,)f(it)g(is)h(imp)q(ossible)f(to)h(write)
+g(a)g(F)m(unnelW)m(eb)f(macro)g(to)h(include)g(a)g(\014le,)177
+1471 y(or)i(insert)h(a)e Fl(vskip)g Fr(pragma)f(in)o(to)h(the)i(input)e
+(text.)177 1641 y Fi(3.11)70 b(P)n(arser)177 1760 y Fr(By)19
+b(the)f(time)f(the)i(parser)g(starts,)h(the)f(scanner)h(has)e(completely)f
+(terminated.)30 b(A)o(t)18 b(this)h(p)q(oin)o(t,)f(it)g(is)g(not)177
+1810 y(p)q(ossible)d(for)f(an)o(y)g(more)f(\014les)i(to)f(b)q(e)h(included,)f
+(and)h(sp)q(ecial)f(c)o(haracters)j(are)d(no)h(longer)f(presen)o(t)i(to)e
+(confuse)177 1860 y(things.)29 b(All)17 b(that)h(remains)e(is)i(a)f(list)g
+(of)g Fo(text)j(tok)o(ens)p Fr(,)c Fo(sp)q(ecial)j(tok)o(ens)p
+Fr(,)e(and)g Fo(t)o(yp)q(esetter)h(directiv)o(e)177 1910 y(tok)o(ens)p
+Fr(.)f(T)m(ext)c(tok)o(ens)i(consist)f(en)o(tirely)g(of)f(sequences)j(of)e
+(prin)o(table)f(c)o(haracters)j(and)d(end)h(of)g(line)f(mark)o(ers.)177
+1959 y(Sp)q(ecial)g(tok)o(ens)h(represen)o(t)h(the)f(sp)q(ecial)f(sequences)j
+(that)d(the)h(scanner)g(found)f(in)f(the)i(input)f(\014le.)18
+b(T)o(yp)q(esetter)177 2009 y(directiv)o(e)12 b(tok)o(ens)h(represen)o(t)h
+(the)e(freestanding)g(t)o(yp)q(esetter)i(directiv)o(es)f(that)f(the)g
+(scanner)h(encoun)o(tered.)19 b(The)177 2059 y(parser)13 b(consumes)f(the)g
+(tok)o(en)g(list)g(and)f(builds)h(a)f(macro)g(table)g(that)h(is)g(later)g
+(used)g(to)g(generate)h(pro)q(duct)g(\014les.)177 2109 y(It)h(also)f
+(constructs)j(a)e(do)q(cumen)o(t)f(list)h(that)g(is)f(used)i(to)f(generate)h
+(the)g(do)q(cumen)o(tation)d(\014le.)177 2186 y(The)i(syn)o(tax)g(rules)h
+(app)q(earing)f(in)f(the)h(follo)o(wing)e(sections)j(refer)g(to)e(the)i(tok)o
+(en)f(list.)177 2335 y Fd(3.11.1)55 b(High)19 b(Lev)n(el)e(Structure)177
+2440 y Fr(A)o(t)c(the)g(highest)g(lev)o(el,)f(the)h(F)m(unnelW)m(eb)f(parser)
+i(parses)f(the)h(input)e(\014le)g(\(tok)o(en)h(list\))f(in)o(to)g(a)h
+(sequence)h(of)e(text)177 2490 y(scraps,)j(macro)d(de\014nitions,)i(and)g(t)o
+(yp)q(esetter)i(directiv)o(es.)177 2613 y Fl(input_file)k(=)h({text)g(|)h
+(macro)f(|)g(directive})177 2735 y Fr(All)f(three)i(of)e(these)i(kinds)f(of)f
+(comp)q(onen)o(ts)g(con)o(tribute)h(to)g(the)g(do)q(cumen)o(tation)e(\014le,)
+j(but)f(only)f(macro)177 2785 y(de\014nitions)15 b(con)o(tribute)g(to)f(the)h
+(pro)q(duct)h(\014les.)k(If)14 b(all)g(the)h(free)g(text)g(and)g(directiv)o
+(es)g(w)o(ere)h(remo)o(v)o(ed)d(from)g(a)177 2835 y(F)m(unnelW)m(eb)h(input)f
+(\014le,)h(the)g(pro)q(duct)h(\014les)f(w)o(ould)f(not)h(b)q(e)h(a\013ected.)
+1042 2940 y(82)p eop
+%%Page: 83 84
+83 83 bop 177 42 a Fd(3.11.2)55 b(F)-5 b(ree)19 b(T)-5 b(ext)177
+142 y Fo(F)l(ree)18 b(text)e Fr(is)g(an)o(y)f(text)i(that)g(is)f(not)g(part)g
+(of)g(a)g(macro)f(de\014nition)g(or)i(a)f(directiv)o(e.)25
+b(A)16 b(scrap)i(of)d(free)i(text)177 192 y(consists)j(of)d(a)h(sequence)j
+(of)d(items)f(dra)o(wn)h(from)f(the)i(follo)o(wing)d(list:)26
+b(non-sp)q(ecial)18 b(prin)o(table)g(c)o(haracters,)177 241
+y(insert-eol)f(sp)q(ecial)g(sequences,)j(insert)d(sp)q(ecial)g(c)o(haracter)h
+(sp)q(ecial)f(sequences,)i(insert)f(arbitrary)e(c)o(haracter)177
+291 y(sp)q(ecial)e(sequence.)177 403 y Fl(free_text)129 b(=)22
+b(ordinary_text)177 452 y(ordinary_text)41 b(=)22 b({ordinary_char)d(|)i(eol)
+g(|)h(text_special}+)177 502 y(text_special)63 b(=)22 b("@+")f(|)g("@@")g(|)h
+("@^")f(char_spec)177 552 y(ordinary_char)41 b(=)22 b(")f(".."~"-special)177
+664 y Fr(An)14 b(example)f(of)g(some)g(rather)i(messy)e(free)i(text)g(is)e
+(as)h(follo)o(ws:)177 775 y Fl(This@@)21 b(is)g(a)h(very@+)e(messy)177
+825 y(@^D\(009\)chunk)f(of)j(text)f(indeed.)177 875 y(But)g(FunnelWeb)f
+(still)h(views)g(it)g(as)177 925 y(a)h(single)e(chunk)h(of)g(text.)177
+1036 y Fr(F)m(unnelW)m(eb)16 b(nev)o(er)h(sees)i(t)o(w)o(o)c(text)j(c)o(h)o
+(unks)f(next)g(to)f(eac)o(h)h(other)g(in)f(the)h(input;)g(they)g(are)g(alw)o
+(a)o(ys)e(merged)177 1086 y(in)o(to)e(a)h(single)f(text)i(tok)o(en.)177
+1159 y(The)j(free)f(text)h(in)f(an)g(input)f(\014le)h(do)q(es)h(not)f
+(a\013ect)h(the)g(pro)q(duct)g(\014les.)28 b(Ho)o(w)o(ev)o(er,)17
+b(b)o(y)g(default,)g(it)g(app)q(ears)177 1209 y(in)g(the)g(prin)o(ted)h(do)q
+(cumen)o(tation)e(exactly)h(as)g(it)f(is)h(giv)o(en)g(in)f(the)i(input)f
+(\014le,)g(except)i(that)e(it)f(is)h(\014lled)g(and)177 1259
+y(justi\014ed)d(in)o(to)g(paragraphs.)177 1332 y(An)o(y)20
+b(prin)o(table)f(c)o(haracter)i(or)e(particular)g(sequence)j(of)d(c)o
+(haracters)i(ma)o(y)d(app)q(ear)i(in)f(the)h(free)g(text)g(of)f(a)177
+1382 y(do)q(cumen)o(t.)30 b(F)m(unnelW)m(eb)18 b(ensures)i(that)e(they)g
+(will)f(app)q(ear)h(exactly)h(as)f(giv)o(en)f(in)h(the)g(input)g(\014le,)h
+(ev)o(en)g(if)177 1432 y(they)c(happ)q(en)g(to)f(b)q(e)g(escap)q(e)i(c)o
+(haracters)g(or)e(commands)e(in)i(the)g(target)h(t)o(yp)q(esetter.)21
+b(Ho)o(w)o(ev)o(er,)14 b(F)m(unnelW)m(eb)177 1482 y(also)j(pro)o(vides)h(a)g
+(sp)q(ecial)g(mo)q(de)e(that)i(allo)o(ws)f(this)g(censoring)i(to)e(b)q(e)i(o)
+o(v)o(erridden.)30 b(See)18 b(Section)g(for)g(more)177 1532
+y(information.)177 1671 y Fd(3.11.3)55 b(T)n(yp)r(esetter)17
+b(Directiv)n(es)177 1771 y Fr(F)m(unnelW)m(eb)e(pro)o(vides)h(a)g(v)n(ariet)o
+(y)f(of)g(t)o(yp)q(esetter)j(directiv)o(es)e(to)g(assist)g(the)g(user)h(to)f
+(t)o(yp)q(eset)h(the)f(do)q(cumen)o(t)177 1821 y(in)h(a)g(t)o(yp)q
+(esetter-indep)q(ende)q(n)o(t)j(w)o(a)o(y)m(.)28 b(These)18
+b(are)g(divided)f(in)o(to)g Fo(freestandin)o(g)g(t)o(yp)q(esetter)h(directiv)
+o(es)177 1871 y Fr(\(ftd\))c(and)g Fo(inline)f(t)o(yp)q(esetter)h(directiv)o
+(es)d Fr(\(itd\).)18 b(The)d(in)o(ternal)f(syn)o(tax)g(of)f(the)i
+(freestanding)f(t)o(yp)q(esetter)177 1920 y(directiv)o(es)g(has)g(already)f
+(b)q(een)h(discussed)h(in)e(the)h(scanner)h(section.)j(The)c(follo)o(wing)d
+(syn)o(tax)i(rule)g(de\014nes)i(the)177 1970 y(con)o(text)g(in)e(whic)o(h)h
+(these)h(constructs)h(can)e(app)q(ear.)177 2082 y Fl(directive)20
+b(=)i(ftd)f(|)g(itd)177 2131 y(itd)152 b(=)22 b(section)e(|)i(literal)e(|)i
+(emphasis)177 2243 y Fr(The)14 b(remainder)g(of)f(this)h(section)h(describ)q
+(es)h(the)e(inline)f(t)o(yp)q(esetter)j(directiv)o(es.)177
+2374 y Fo(3.11.3.1)48 b(Section)177 2474 y Fr(The)19 b(section)f(directiv)o
+(e)h(pro)o(vides)f(a)f(w)o(a)o(y)h(for)f(the)i(user)g(to)e(structure)j(the)f
+(program)d(and)i(do)q(cumen)o(tation)177 2524 y(in)o(to)e(a)g(hierarc)o
+(hical)h(tree)h(structure,)g(just)f(as)g(in)f(most)f(large)i(do)q(cumen)o
+(ts.)26 b(A)16 b(section)i(construct)g(consists)177 2574 y(of)f(a)g
+(case-insensitiv)o(e)h(iden)o(tifying)e(letter,)j(whic)o(h)e(determines)h
+(the)g(absolute)f(lev)o(el)g(of)g(the)h(section)g(in)f(the)177
+2623 y(do)q(cumen)o(t,)c(and)h(an)f(optional)g(section)i(name,)d(whic)o(h)i
+(has)g(exactly)g(the)g(same)f(syn)o(tax)h(as)g(a)f(macro)g(name.)177
+2735 y Fl(section)64 b(=)22 b("@")f(levelchar)f([name])177
+2785 y(levelchar)g(=)i("A")f(|)g("B")h(|)f("C")g(|)h("D")f(|)h("E")f(|)439
+2835 y("a")g(|)g("b")h(|)f("c")g(|)h("d")f(|)h("e")1042 2940
+y Fr(83)p eop
+%%Page: 84 85
+84 84 bop 177 42 a Fr(The)15 b(section)f(construct)i(is)e(not)g(quite)g
+(\\inline")f(as)h(it)g(m)o(ust)f(app)q(ear)h(only)f(at)h(the)h(start)g(of)e
+(a)h(line.)k(Ho)o(w)o(ev)o(er,)177 91 y(unlik)o(e)10 b(the)h(\\)p
+Fl(@i)p Fr(",)f(\\)p Fl(@p)p Fr(",)g(and)g(\\)p Fl(@t)p Fr(")g(constructs,)j
+(it)d(do)q(es)h(not)g(consume)f(the)h(remainder)f(of)g(the)h(line)g
+(\(although)177 141 y(it)j(w)o(ould)f(b)q(e)h(silly)f(to)h(place)g(an)o
+(ything)f(on)g(the)i(same)e(line)g(an)o(yw)o(a)o(y\).)177 218
+y(F)m(unnelW)m(eb)d(pro)o(vides)h(\014v)o(e)g(lev)o(els)g(of)f(sections,)i
+(ranging)e(from)f(the)i(highest)g(lev)o(el)f(of)h Fl(A)f Fr(\(lik)o(e)g(a)h
+(L)1691 213 y Fk(a)1710 218 y Fr(T)1733 231 y(E)1756 218 y(X)g(c)o(hapter\))
+177 268 y(to)k(the)h(lo)o(w)o(est)g(lev)o(el)f(of)g Fl(E)g
+Fr(\(lik)o(e)g(a)g(L)752 263 y Fk(a)771 268 y Fr(T)794 281
+y(E)817 268 y(X)h(subsubsubsection\).)25 b(F)m(unnelW)m(eb)14
+b(input)i(\014les)f(need)i(not)e(con)o(tain)177 318 y(an)o(y)e(sections)i(at)
+e(all,)f(but)i(if)f(they)h(do,)f(the)h(\014rst)g(section)h(m)o(ust)d(b)q(e)i
+(at)g(lev)o(el)f Fl(A)p Fr(,)g(and)g(follo)o(wing)e(sections)k(m)o(ust)177
+368 y(not)i(skip)g(hierarc)o(hical)g(lev)o(els)h(\(e.g.)e(an)h
+Fl(@D)g Fr(cannot)g(follo)o(w)f(an)h Fl(@C)p Fr(\).)f(F)m(unnelW)m(eb)h
+(generates)i(an)e(error)h(if)e(a)177 418 y(lev)o(el)e(is)f(skipp)q(ed.)177
+495 y(All)c(section)i Fm(must)f Fr(ha)o(v)o(e)g(names)f(asso)q(ciated)i(with)
+e(them,)h(but)g(for)g(con)o(v)o(enience,)h(the)g(section)g(name)d(is)i
+(optional)177 545 y(if)16 b(the)i(section)g(con)o(tains)f(one)g(or)g(more)g
+(macro)e(de\014nitions)j(\(i.e.)e(at)h(least)g(one)g(macro)f(de\014nition)h
+(app)q(ears)177 594 y(b)q(et)o(w)o(een)i(the)f(section)g(construct)h(in)e
+(question)g(and)h(the)g(next)g(section)g(construct)h(in)e(the)g(input)h
+(\014le.\).)28 b(In)177 644 y(this)19 b(case,)g(the)g(section)g
+Fm(inherits)f Fr(the)h(name)e(of)h(the)h(\014rst)g(macro)e(de\014ned)i(in)f
+(the)h(section.)32 b(This)18 b(feature)177 694 y(streamlines)c(the)g(input)g
+(\014le,)f(a)o(v)o(oiding)f(duplicate)i(name)f(inconsistencies.)177
+771 y(An)o(y)g(sequence)i(of)d(prin)o(table)g(c)o(haracters)j(can)e(b)q(e)g
+(used)h(in)e(the)i(section)f(name,)e(ev)o(en)j(the)f(target)h(t)o(yp)q
+(esetter's)177 821 y(escap)q(e)i(sequence)g(\(e.g.)d(in)g(T)643
+830 y(E)667 821 y(X,)g(\\)p Fl(\\)p Fr("\).)177 898 y(The)h(follo)o(wing)e
+(example)g(demonstrates)j(the)f(section)h(construct.)177 1021
+y Fl(@A@<Life)20 b(Simulation@>)177 1120 y(This)h(is)h(the)f(main)g
+(simulation)e(module)i(for)g(planet)g(earth,)f(simulated)g(down)h(to)g(the)
+177 1170 y(molecular)f(level.)h(This)g(is)g(a)h(REALLY)e(big)h(program.)f(I)i
+(mean)f(really)g(big.)g(I)g(mean,)177 1220 y(if)h(you)f(thought)f(the)h
+(X-Windows)f(source)h(code)g(was)g(big,)g(you're)f(in)i(for)f(a)h(shock...)
+177 1320 y(@B)g(We)f(start)g(by)g(looking)f(at)i(the)f(code)g(for)g(six)g
+(legged)g(stick)g(insects)f(as)h(they)177 1370 y(form)g(a)h(good)f(example)f
+(of)h(a)h(typical)e(object-oriented)f(animal)i(implementation.)177
+1469 y(@$@<Six)g(Legged)f(Stick)h(Insects@>@{@-)177 1519 y(slsi.creep;)f
+(slsi.crawl;)f(slsi.creep;@})177 1641 y Fr(In)c(the)h(ab)q(o)o(v)o(e)f
+(example,)e(the)j(name)e(for)g(the)i(lev)o(el)f(A)g(section)h(is)f(pro)o
+(vided)g(explicitly)m(,)e(while)i(the)g(name)f(for)177 1691
+y(the)h(lev)o(el)e(B)h(section)h(will)d(b)q(e)j(inherited)f(from)e(the)j
+(macro)e(name.)177 1832 y Fo(3.11.3.2)48 b(Literal)13 b(Directiv)o(e)177
+1937 y Fr(Exp)q(erience)j(has)d(sho)o(wn)h(that)g(one)f(of)g(the)h(most)f
+(common)e(t)o(yp)q(esetting)j(requiremen)o(t)g(is)f(that)h(of)f(b)q(eing)g
+(able)177 1987 y(to)j(t)o(yp)q(eset)h(small)d(program)g(fragmen)o(ts)g(in)i
+(the)g(middle)e(of)h(the)i(do)q(cumen)o(ting)d(free)j(text.)24
+b(T)o(ypically)14 b(there)177 2037 y(is)g(a)g(frequen)o(t)h(need)g(to)f
+(refer)h(to)f(program)f(iden)o(ti\014ers,)h(and)g(it)g(assists)h(the)g
+(reader)g(to)f(ha)o(v)o(e)g(suc)o(h)h(iden)o(ti\014ers)177
+2087 y(t)o(yp)q(eset)g(in)d(the)i(same)e(manner)g(as)h(the)h(program)d(text)j
+(in)e(the)i(macro)d(de\014nition.)18 b(F)m(unnelW)m(eb)12 b(V1)h(de\014ned)h
+(a)177 2136 y(T)200 2145 y(E)223 2136 y(X)f(macro)f(for)h(this)g(\(called)g
+Fl(p)p Fr(\))g(that)g(simply)e(t)o(yp)q(eset)j(its)f(argumen)o(t)f(in)h
+Fl(tt)21 b(font)p Fr(.)c(This)c(pro)o(v)o(ed)g(so)g(useful,)177
+2186 y(that)h(the)h(facilit)o(y)d(has)i(b)q(een)h(made)e(t)o(yp)q
+(esetter-indep)q(enden)o(t)k(in)c(F)m(unnelW)m(eb)h(V3.)177
+2263 y(T)m(o)f(sp)q(ecify)h(that)f(some)g(text)h(b)q(e)g(t)o(yp)q(eset)h(in)e
+Fl(tt)21 b(font)p Fr(,)12 b(enclose)j(the)f(text)g(in)f(curly)g(brace)i(sp)q
+(ecial)e(sequences)177 2313 y(as)h(follo)o(ws.)177 2436 y Fl(literal)21
+b(=)g("@{")g(ordinary_text)e("@}")177 2558 y Fr(As)10 b(in)g(macro)e(names,)h
+(section)i(names,)e(and)h(macro)e(b)q(o)q(dies,)j(the)f(text)g(con)o(tained)g
+(within)f(the)h(literal)f(construct)177 2608 y(is)16 b(protected)j(b)o(y)d(F)
+m(unnelW)m(eb)g(from)f(an)o(y)h(non-literal)f(in)o(terpretation)i(b)o(y)f
+(the)h(t)o(yp)q(esetter)i(and)d(the)h(user)h(is)177 2658 y(free)d(to)e
+(enclose)i Fm(any)f Fr(text)g(co)o(v)o(ered)h(b)o(y)e(the)h(de\014nition)f
+Fl(ordinary)p 1252 2658 14 2 v 14 w(text)p Fr(.)k(F)m(unnelW)m(eb)c(guaran)o
+(tees)i(that,)e(no)177 2708 y(matter)f(what)h(the)g(text)g(is,)f(it)g(will)g
+(b)q(e)h(t)o(yp)q(eset)h(in)e Fl(tt)21 b(font)12 b Fr(exactly)h(as)f(it)h
+(app)q(ears.)18 b(Ho)o(w)o(ev)o(er,)13 b(the)g(text)g(will)177
+2757 y(b)q(e)i(\014lled)e(and)h(justi\014ed)g(in)o(to)f(a)h(paragraph)f(as)h
+(usual.)177 2835 y(Here)h(is)f(an)g(example)e(of)i(the)g(use)h(of)e(the)i
+(construct:)1042 2940 y(84)p eop
+%%Page: 85 86
+85 85 bop 177 42 a Fl(@C)22 b(The)f(@{WOMBAT@})e(\(Waste)i(Of)g(Money,)g
+(Brains,)f(And)h(Time\))g(function)177 91 y(calls)g(the)g(@{kangaroo@})e
+(input)i(function)f(which)h(has)g(been)177 141 y(known)g(to)g(cause)g
+(keybounce.)177 191 y(This)g(keybounce)f(can)h(be)h(dampened)e(using)h(the)g
+(@{wet_sloth@})e(subsystem.)177 322 y Fo(3.11.3.3)48 b(Emphasis)14
+b(Directiv)o(e)177 422 y Fr(The)g(emphasis)e(directiv)o(e)i(is)f(v)o(ery)h
+(similar)d(to)i(the)h(literal)e(directiv)o(e)i(except)h(that)e(it)g(causes)i
+(its)e(argumen)o(t)f(to)177 472 y(b)q(e)h(t)o(yp)q(eset)i(in)d(an)g
+(emphasised)h(manner)e(\(e.g.)i(italics\).)k(Lik)o(e)12 b(the)h(literal)f
+(directiv)o(e,)h(the)g(emphasis)f(directiv)o(e)177 522 y(protects)k(its)e
+(text)g(argumen)o(t.)177 633 y Fl(emphasise)20 b(=)i("@/")f(ordinary_text)e
+("@/")177 745 y Fr(Example:)177 857 y Fl(@C)j(What)f(you)g(@/really@/)e
+(need,)i(of)h(course,)e(is)h(a)h(@/great@/,)e(@/big@/,)177
+906 y(network)h(with)f(packets)h(just)g(flying)f(@/everywhere@/.)177
+956 y(This)h(section)f(implements)g(an)i(interface)177 1006
+y(to)g(such)f(a)g(@/humungeous@/)e(network.)177 1145 y Fd(3.11.4)55
+b(Macros)177 1245 y Fr(The)19 b(third)f(category)h(of)e(construct)j(app)q
+(earing)e(at)g(the)h(highest)f(syn)o(tactic)h(lev)o(el)f(in)f(a)h(F)m(unnelW)
+m(eb)g(input)177 1295 y(\014le)e(is)f(the)h(macro)e(de\014nition.)23
+b(A)15 b(macro)f(de\014nition)i(binds)f(a)g(unique)h Fo(macro)h(name)e
+Fr(to)g(a)h Fo(macro)h(b)q(o)q(dy)177 1345 y Fr(con)o(taining)e(an)g
+Fo(expression)e Fr(consisting)j(of)f(text,)h(calls)f(to)h(other)g(macros,)e
+(and)i(formal)d(parameters.)23 b(The)177 1395 y(syn)o(tax)14
+b(for)g(a)f(macro)g(de\014nition)g(is)h(as)g(follo)o(ws:)177
+1507 y Fl(macro)21 b(=)h(\("@O")e(|)i("@$"\))f(name)g([formal_paramet)o
+(er_li)o(st])352 1556 y(["@Z"])f(["@M"])h(["==")f(|)i("+="])f("@{")g
+(expression)e("@}")177 1668 y Fr(The)i(complexit)o(y)d(of)h(the)i(macro)d
+(de\014nition)i(syn)o(tax)g(is)g(mostly)e(to)i(enable)g(the)h(user)g(to)e
+(attac)o(h)h(v)n(arious)177 1718 y(attributes)d(to)f(the)g(macro.)23
+b(If)16 b(the)g(user)h(c)o(ho)q(oses)g Fl(@O)p Fr(,)e(then)i(the)f(macro)f
+(cannot)h(b)q(e)h(called,)f(but)g(is)f(instead)177 1768 y(attac)o(hed)g(to)f
+(a)g(pro)q(duct)h(\014le.)k(If)14 b(the)h(user)h(c)o(ho)q(oses)f
+Fl(@$)p Fr(,)e(then)i(the)g(macro)e(is)h(an)g(ordinary)g(macro)f
+(de\014nition)177 1817 y(that)h(is)g(not)g(attac)o(hed)g(to)g(a)f(\014le.)177
+1891 y(By)g(default,)f(a)g(non-\014le)g(macro)f(m)o(ust)g(b)q(e)i(in)o(v)o
+(ok)o(ed)f(exactly)g(once)h(b)o(y)f(one)h(other)g(macro.)j(Macros)d(that)g
+(aren't)177 1941 y(are)19 b(\015agged)e(with)h(errors)i(b)o(y)d(the)i(F)m
+(unnelW)m(eb)f(analyser.)30 b(Ho)o(w)o(ev)o(er,)19 b(if)e(the)i(user)g(uses)g
+(the)g Fl(@Z)f Fr(sequence)177 1990 y(in)f(the)h(macro)e(de\014nition,)h(the)
+h(macro)e(is)h(then)h(p)q(ermitted)f(to)g(b)q(e)h(in)o(v)o(ok)o(ed)f(zero)h
+(times,)e(as)i(w)o(ell)e(as)i(once.)177 2040 y(Similarly)l(,)13
+b(if)i(the)i(user)g(uses)g(the)g Fl(@M)e Fr(sequence)j(in)e(the)g(macro)f
+(de\014nition,)h(the)g(macro)f(is)h(p)q(ermitted)f(to)h(b)q(e)177
+2090 y(called)f(man)o(y)e(times)h(as)h(w)o(ell)f(as)h(once.)22
+b(If)15 b(b)q(oth)g Fl(@Z)f Fr(and)h Fl(@M)g Fr(are)g(presen)o(t)h(then)g
+(the)g(macro)d(is)i(p)q(ermitted)g(to)177 2140 y(b)q(e)g(in)o(v)o(ok)o(ed)e
+(zero,)h(one,)g(or)f(man)o(y)f(times.)177 2213 y(The)j(purp)q(ose)g(of)e
+(enforcing)h(the)h(default)f(\\exactly)g(one)g(call")f(rule)i(is)f(to)f
+(\015ag)h(pieces)h(of)f(co)q(de)h(that)f(the)h(user)177 2263
+y(ma)o(y)d(ha)o(v)o(e)i(de\014ned)g(in)g(a)f(macro)g(but)h(not)f(ho)q(ok)o
+(ed)h(in)o(to)f(the)h(rest)h(of)e(the)i(program.)h(Exp)q(erience)g(sho)o(ws)e
+(that)177 2313 y(this)k(is)f(a)g(common)e(error.)29 b(Similarly)m(,)14
+b(it)j(can)h(b)q(e)g(dangerous)g(to)f(m)o(ultiply)e(in)o(v)o(ok)o(e)i(a)g
+(macro)f(in)o(tended)i(to)177 2363 y(b)q(e)h(in)o(v)o(ok)o(ed)e(only)h(once.)
+31 b(F)m(or)18 b(example,)g(it)f(ma)o(y)g(b)q(e)h(dangerous)h(to)f(in)o(v)o
+(ok)o(e)f(a)h(scrap)h(of)f(non-idemp)q(oten)o(t)177 2413 y(initialization)12
+b(co)q(de)j(in)e(t)o(w)o(o)h(di\013eren)o(t)h(parts)g(of)f(the)g(main)e
+(function)i(of)g(a)g(program!)j(Ho)o(w)o(ev)o(er,)d(F)m(unnelW)m(eb)177
+2462 y(will)h(not)i(generate)h(an)f(error)g(if)f(a)h(macro)e(without)h
+Fl(@M)h Fr(is)f(called)h(b)o(y)f(another)h(macro)f(that)h(is)f(called)h(more)
+177 2512 y(than)d(once.)177 2586 y(If)f(the)h(text)g(string)g
+Fl(==)f Fr(\(or)h(nothing\))e(follo)o(ws)g(the)i(macro)f(name,)f(the)i
+(expression)g(that)g(follo)o(ws)e(is)h(the)h(en)o(tire)177
+2635 y(text)j(of)e(the)i(macro)e(b)q(o)q(dy)m(.)24 b(If)15
+b(the)i(text)g(string)f Fl(+=)f Fr(follo)o(ws)g(the)h(macro)f(name,)g(then)i
+(more)e(than)h(one)g(suc)o(h)177 2685 y(de\014nition)d(is)f(allo)o(w)o(ed)g
+(\(but)h(not)g(required\))h(in)e(the)i(do)q(cumen)o(t)e(and)h(the)h(b)q(o)q
+(dy)f(of)f(the)h(macro)f(consists)i(of)e(the)177 2735 y(concatenation)17
+b(of)g(all)e(suc)o(h)j(expressions)g(in)e(the)i(order)f(in)g(whic)o(h)f(they)
+i(o)q(ccur)g(in)e(the)h(input)g(\014le.)27 b(Suc)o(h)17 b(a)177
+2785 y(macro)12 b(is)g(said)h(to)f(b)q(e)i(additiv)o(e)d(and)i(is)g
+Fo(additiv)o(el)o(y)f(de\014ned)p Fr(.)j(Th)o(us)e(a)g(macro)e(b)q(o)q(dy)i
+(can)g(either)g(b)q(e)h(de\014ned)177 2835 y(in)g(one)h(place)g(using)f(one)h
+(de\014nition)f(\(using)g Fl(==)p Fr(\))g(or)h(it)f(can)h(b)q(e)g
+Fm(distribute)n(d)f Fr(throughout)g(the)h(input)g(\014le)f(in)g(a)1042
+2940 y(85)p eop
+%%Page: 86 87
+86 86 bop 177 42 a Fr(sequence)15 b(of)c(one)i(or)f(more)f(macro)g
+(de\014nitions)h(\(using)g Fl(+=)p Fr(\).)17 b(If)12 b(neither)h
+Fl(==)f Fr(and)g Fl(+=)g Fr(are)h(presen)o(t,)g(F)m(unnelW)m(eb)177
+91 y(assumes)h(a)g(default)f(of)g Fl(==)p Fr(.)177 169 y(Macros)g(attac)o
+(hed)g(to)f(pro)q(duct)h(\014les)f(cannot)h(b)q(e)f(additiv)o(ely)f
+(de\014ned.)19 b(Additiv)o(ely)11 b(de\014ned)i(macros)f(can)g(ha)o(v)o(e)177
+218 y(parameter)h(lists)g(and)f Fl(@Z)h Fr(and)g Fl(@M)f Fr(attributes,)i
+(but)f(these)h(m)o(ust)e(b)q(e)i(sp)q(eci\014ed)g(only)e(in)h(the)g(\014rst)h
+(de\014nition)e(of)177 268 y(the)j(macro.)h(Ho)o(w)o(ev)o(er,)e
+Fl(+=)g Fr(m)o(ust)f(app)q(ear)h(in)f(eac)o(h)i(de\014nition.)177
+409 y Fo(3.11.4.1)48 b(Names)177 514 y Fr(Names)16 b(are)g(used)i(to)e(iden)o
+(tify)f(macros)g(and)i(sections.)26 b(A)16 b(name)f(consists)j(of)d(a)h
+(sequence)j(of)c(from)g(zero)i(to)177 564 y(80)12 b(prin)o(table)h(c)o
+(haracters,)h(including)e(the)h(blank)f(c)o(haracter.)20 b(End)13
+b(of)f(line)g(c)o(haracters)j(are)e(not)g(p)q(ermitted)f(in)177
+613 y(names.)19 b(Names)13 b(are)i(case)g(sensitiv)o(e;)g(t)o(w)o(o)f
+(di\013eren)o(t)h(macros)e(are)i(p)q(ermitted)f(to)g(ha)o(v)o(e)h(names)e
+(that)h(di\013er)h(in)177 663 y(case)g(only)m(.)h(Lik)o(e)e(free)g(text,)g
+(names)e(are)i(t)o(yp)q(eset)h(b)o(y)f(F)m(unnelW)m(eb)f(and)g(are)h(safe)g
+(from)e(misin)o(terpretation)g(b)o(y)177 713 y(the)17 b(target)f(t)o(yp)q
+(esetter.)27 b(F)m(or)16 b(example,)f(it)h(is)g(quite)g(acceptable)h(to)f
+(use)h(the)g(macro)d(name)h Fl(@<\\medskip@>)177 763 y Fr(ev)o(en)g(if)e(the)
+h(target)h(t)o(yp)q(esetter)h(is)e(T)764 772 y(E)787 763 y(X.)177
+885 y Fl(name)130 b(=)22 b("@<")f(name_text)f("@>")177 935
+y(name_text)g(=)i({ordinary_char)d(|)i(text_special})177 1076
+y Fo(3.11.4.2)48 b(F)l(ormal)15 b(P)o(arameter)f(Lists)177
+1181 y Fr(F)m(unnelW)m(eb)f(allo)o(ws)e(macros)h(to)h(ha)o(v)o(e)g(up)g(to)g
+(nine)g(macro)e(parameters,)i(named)f Fl(@1)p Fr(,)g Fl(@2)p
+Fr(,)g Fn(:)7 b(:)g(:)o Fr(,)13 b Fl(@9)p Fr(.)k(If)12 b(a)h(macro)177
+1230 y(do)q(es)f(not)g(ha)o(v)o(e)f(a)g(formal)e(parameter)i(list,)g(it)g(is)
+h(de\014ned)g(to)f(ha)o(v)o(e)h(no)f(parameters,)g(and)h(an)f(actual)g
+(parameter)177 1280 y(list)k(m)o(ust)g(not)g(app)q(ear)h(at)f(the)h(p)q(oin)o
+(t)f(of)g(call.)22 b(If)15 b(a)h(macro)e(has)i(a)f(formal)e(parameter)i
+(list,)g(it)g(is)g(de\014ned)i(to)177 1330 y(ha)o(v)o(e)g(one)h(or)f(more)f
+(parameters,)h(and)h(a)e(corresp)q(onding)j(actual)d(parameter)h(m)o(ust)f(b)
+q(e)i(supplied)f(for)g(eac)o(h)177 1380 y(formal)12 b(parameter,)h(at)g(the)i
+(p)q(oin)o(t)e(of)h(call.)177 1457 y(Because)19 b(F)m(unnelW)m(eb)c
+(parameters)i(ha)o(v)o(e)f(predictable)h(names,)f(the)h(only)f(information)d
+(that)k(a)f(formal)e(pa-)177 1507 y(rameter)e(list)g(need)i(con)o(v)o(ey)e
+(is)g Fm(how)i(many)f Fr(parameters)f(a)g(macro)f(has.)18 b(F)m(or)12
+b(this)g(reason)h(a)f(formal)e(parameter)177 1557 y(list)19
+b(tak)o(es)g(the)h(form)d(of)i(the)g(highest)h(n)o(um)o(b)q(ered)e(formal)f
+(parameter)i(desired,)i(enclosed)f(in)f(paren)o(theses)177
+1606 y(sequences.)177 1729 y Fl(formal_parameter_l)o(ist)g(=)i("@\(")g
+(formal_parameter)e("@\)".)177 1779 y(formal_parameter)g(=)i("@1")g(|)h("@2")
+f(|)g("@3")g(|)h("@4")f(|)g("@5")g(|)591 1828 y("@6")g(|)h("@7")f(|)g("@8")g
+(|)h("@9")177 1977 y Fd(3.11.5)55 b(Expressions)177 2082 y
+Fr(Expressions)19 b(are)e(F)m(unnelW)m(eb's)f(most)g(p)q(o)o(w)o(erful)h
+(form)e(of)i(expressing)h(a)e(text)i(string.)28 b(Macro)17
+b(b)q(o)q(dies)g(are)177 2132 y(de\014ned)e(as)f(expressions.)20
+b(Actual)14 b(parameters)g(consist)g(of)f(expressions.)177
+2209 y(An)i(expression)h(consists)g(of)e(a)g(sequence)j(of)d(zero)i(or)e
+(more)g(expression)i(elemen)o(ts.)21 b(An)14 b(expression)i(elemen)o(t)177
+2259 y(can)i(b)q(e)g(ordinary)e(text,)j(a)e(macro)f(call,)h(or)g(a)g(formal)e
+(parameter)i(of)f(the)i(macro)e Fm(de\014nition)i Fr(in)f(whic)o(h)g(the)177
+2309 y(formal)12 b(parameter)h(o)q(ccurs.)177 2431 y Fl(expression)20
+b(=)h({ordinary_text)e(|)j(macro_call)e(|)h(formal_parameter})177
+2580 y Fd(3.11.6)55 b(Macro)19 b(Calls)177 2685 y Fr(A)d(macro)e(call)h
+(consists)i(of)e(a)g(name)g(optionally)e(follo)o(w)o(ed)h(b)o(y)i(an)f
+(actual)g(parameter)h(list.)22 b(The)16 b(n)o(um)o(b)q(er)f(of)177
+2735 y(parameters)j(in)f(the)h(actual)g(parameter)f(list)g(m)o(ust)g(b)q(e)h
+(the)h(same)d(as)i(the)g(n)o(um)o(b)q(er)f(of)h(formal)d(parameters)177
+2785 y(sp)q(eci\014ed)j(in)d(the)h(de\014nition)g(of)f(the)i(macro.)22
+b(If)16 b(the)g(macro)f(has)h(no)g(formal)d(parameter)i(list,)h(its)g(call)f
+(m)o(ust)177 2835 y(ha)o(v)o(e)f(no)g(actual)f(parameter)h(list.)1042
+2940 y(86)p eop
+%%Page: 87 88
+87 87 bop 177 42 a Fl(macro_call)260 b(=)21 b(name)g([actual_parameter_)o
+(list])177 91 y(actual_parameter_l)o(ist)e(=)i("@\(")g(actpar)g({)g("@,")g
+(actpar)g(})g("@\)")177 141 y(actpar)348 b(=)21 b(expression)f(|)700
+191 y(\()i(whitespace)e("@""")g(expression)g("@""")h(whitespace)e(\))177
+241 y(whitespace)260 b(=)21 b({")h(")f(|)h(eol})177 335 y Fr(F)m(unnelW)m(eb)
+15 b(allo)o(ws)f(parameters)h(to)h(b)q(e)f(passed)i(directly)m(,)e(or)g
+(delimited)f(b)o(y)h(sp)q(ecial)g(double)h(quotes.)22 b(Eac)o(h)177
+385 y(form)15 b(is)h(useful)g(under)h(di\013eren)o(t)g(circumstances.)26
+b(Direct)17 b(sp)q(eci\014cation)g(is)f(useful)g(where)i(the)f(parameters)177
+435 y(are)d(short)g(and)f(can)h(b)q(e)g(all)f(placed)g(on)h(one)f(line.)18
+b(Double)13 b(quoted)h(parameters)f(allo)o(w)f(whitespace)j(on)e(either)177
+485 y(side)19 b(\(that)g(is)g(not)g(considered)h(part)f(of)f(the)i
+(parameter\))e(and)h(are)g(useful)g(for)g(la)o(ying)e(out)h(rather)i(messy)
+177 535 y(parameters.)e(Here)d(are)g(examples)e(of)g(the)h(t)o(w)o(o)g
+(forms.)177 629 y Fl(@<Generic)20 b(Loop@>@\()243 679 y(@"x:=1;@")41
+b(@,)243 729 y(@"x<=10;@")19 b(@,)243 779 y(@"print)h("x=\045u,)g
+(x^2=\045u",x,x*x;)243 828 y(x:=x+1;@+@")177 878 y(@\))177
+978 y(@<Colours@>@\(red@,)o(green)o(@,blu)o(e@,ye)o(llow@)o(\))177
+1072 y Fr(As)15 b(sho)o(wn,)e(the)h(t)o(w)o(o)g(forms)e(ma)o(y)g(b)q(e)j
+(mixed)d(within)h(the)i(same)e(parameter)g(list.)177 1141 y(Exp)q(erience)j
+(has)e(sho)o(wn)g(that)g(the)g(v)n(ast)g(ma)r(jorit)o(y)e(of)h(macros)g(ha)o
+(v)o(e)h(no)f(parameters.)177 1273 y Fd(3.11.7)55 b(F)-5 b(ormal)18
+b(P)n(arameters)177 1368 y Fr(F)m(ormal)d(parameters)i(can)h(app)q(ear)g(in)f
+(the)h(expressions)h(forming)c(macro)h(b)q(o)q(dies)h(in)g(accordance)i(with)
+e(the)177 1418 y(syn)o(tax)k(rules)g(de\014ned)h(ab)q(o)o(v)o(e.)38
+b(A)21 b(formal)d(parameter)j(expands)g(to)g(the)g(text)h(of)e(the)h
+(expansion)g(of)f(its)177 1468 y(corresp)q(onding)c(actual)f(parameter.)21
+b(There)16 b(is)f(nothing)f(prev)o(en)o(ting)i(a)f(formal)d(parameter)j(b)q
+(eing)g(pro)o(vided)177 1518 y(as)g(part)h(of)e(an)h(expression)h(that)g
+(forms)d(an)i(actual)g(parameter.)21 b(In)16 b(that)f(happ)q(ens,)h(the)f
+(formal)e(parameter)177 1568 y(is)i(b)q(ound)h(to)f(the)h(actual)f(parameter)
+f(of)h(the)h(calling)e(macro,)g(not)h(the)h(called)f(macro.)21
+b(After)16 b(the)f(follo)o(wing)177 1618 y(de\014nitions,)177
+1712 y Fl(@$@<One@>@\(@1@\)=@{)o(A)k(walrus)i(in)g(@1)g(is)h(a)f(walrus)g(in)
+g(vain.@})177 1762 y(@$@<Two@>@\(@1@\)=@{)o(@<One)o(@>@\(S)o(@1n@\))o(@})177
+1856 y Fr(the)15 b(call)177 1951 y Fl(@<Two@>@\(pai@\))177
+2045 y Fr(will)e(result)h(in)g(the)g(expansion)177 2140 y Fl(A)22
+b(walrus)e(in)i(Spain)e(is)i(a)f(walrus)g(in)g(vain.)177 2272
+y Fd(3.11.8)55 b(Macros)19 b(are)g(Static)177 2368 y Fr(In)f(F)m(unnelW)m
+(eb,)g(the)g(actions)g(of)g Fm(macr)n(o)g(de\014nition)h Fr(and)e
+Fm(macr)n(o)i(exp)n(ansion)g Fr(o)q(ccur)g(during)e(t)o(w)o(o)h(separate)177
+2417 y(phases)13 b(\(parser)h(and)e(tangle\))g(and)g(cannot)g(b)q(e)h(in)o
+(terlea)o(v)o(ed.)18 b(As)12 b(a)g(result,)h(the)g(F)m(unnelW)m(eb)e(macro)g
+(facilit)o(y)g(is)177 2467 y(completely)i(static.)18 b(It)c(is)g(not)g(p)q
+(ossible)g(for)f(one)h(macro)f(to)h(de\014ne)h(another)f(while)f(the)i
+(\014rst)f(macro)f(is)h(b)q(eing)177 2517 y(expanded;)k(eac)o(h)f(m)o(ust)e
+(b)q(e)i(de\014ned)h(statically)m(.)24 b(It)17 b(is)f(not)g(p)q(ossible)h(to)
+f(de\014ne)i(a)e(macro)f(to)h(ev)o(en)h(assist)g(in)177 2567
+y(the)g(de\014nition)e(of)g(other)i(macros.)23 b(Because)18
+b(the)e(scanner,)h(parser,)g(analyser,)f(and)g(tangler)g(phases)h(are)f(all)
+177 2617 y(in)o(v)o(ok)o(ed)e(sequen)o(tially)m(,)f(there)i(is)f(no)h(ro)q
+(om)d(for)i(feedbac)o(k)h(of)f(de\014nitions)g(b)q(et)o(w)o(een)i(di\013eren)
+o(t)f(lev)o(els)f(\(e.g.)g(the)177 2666 y(user)h(cannot)f(de\014ne)h(a)f
+(macro)e(for)i(the)g Fl(vskip)f Fr(pragma\).)177 2735 y(This)k(lac)o(k)f(of)g
+(p)q(o)o(w)o(er)h(is)f(fully)f(in)o(ten)o(tional.)25 b(By)17
+b(totally)e(excluding)i(the)g(more)f(incomprehensible)g(w)o(a)o(ys)g(in)177
+2785 y(whic)o(h)d(a)h(general)f(purp)q(ose)i(macro)d(prepro)q(cessor)k(can)d
+(b)q(e)h(used,)g(F)m(unnelW)m(eb)f(pro)o(vides)h(de\014nite)g(guaran)o(tees)
+177 2835 y(to)g(the)g(reader)h(of)f(its)g(input)f(\014les:)1042
+2940 y(87)p eop
+%%Page: 88 89
+88 88 bop 239 42 a Fq(\017)21 b Fr(F)m(unnelW)m(eb)15 b(guaran)o(tees)h(that)
+f(a)g(piece)h(of)e(text)i(do)q(es)g(not)f(con)o(tain)g(a)g(macro)f(call)g
+(unless)i(it)f(con)o(tains)281 91 y(the)f(sp)q(ecial)h(c)o(haracter)g(follo)o
+(w)o(ed)d(b)o(y)i Fn(<)g Fr(or)g Fl(#)p Fr(.)239 177 y Fq(\017)21
+b Fr(F)m(unnelW)m(eb)13 b(allo)o(ws)g(calls)g(to)h(b)q(e)h(made)d(to)i
+(macros)f(that)h(are)g(de\014ned)h(later)f(in)g(the)g(input)g(\014le.)177
+343 y Fi(3.12)70 b(Analyser)177 460 y Fr(The)14 b(e\013ect)g(of)e(the)i
+(parser)g(is)f(to)g(construct)h(a)f(macro)e(table)i(con)o(taining)f(a)h
+(represen)o(tation)h(of)e(all)g(the)i(macros)177 510 y(de\014ned)19
+b(within)e(the)i(do)q(cumen)o(t,)f(and)f(a)h(do)q(cumen)o(t)f(list)h(whic)o
+(h)f(con)o(tains)h(a)g(complete)f(represen)o(tation)i(of)177
+560 y(the)f(en)o(tire)h(do)q(cumen)o(t.)28 b(If)18 b(there)h(are)f(no)f
+(error)i(diagnostics)e(\(or)h(w)o(orse\))g(at)g(the)g(end)g(of)f(the)h
+(parser)h(run,)177 610 y(F)m(unnelW)m(eb)11 b(in)o(v)o(ok)o(es)h(the)g
+(analyser)g(whic)o(h)f(tests)j(for)d(the)h(follo)o(wing)d(conditions)j(and)f
+(\015ags)h(them)f(with)g(errors)177 659 y(if)i(they)i(arise.)239
+778 y Fq(\017)21 b Fr(No)14 b(macros)f(de\014ned)i(in)e(the)i(input)e
+(\014le.)239 864 y Fq(\017)21 b Fr(No)14 b(macros)f(connected)i(to)f(output)g
+(\014les.)239 949 y Fq(\017)21 b Fr(Call)13 b(of)g(an)h(unde\014ned)h(macro.)
+239 1035 y Fq(\017)21 b Fr(Call)13 b(ha)o(ving)f(the)j(wrong)e(n)o(um)o(b)q
+(er)h(of)f(parameters.)239 1120 y Fq(\017)21 b Fr(Call)13 b(of)g(a)g(macro)g
+(that)h(is)g(connected)h(to)f(an)g(output)g(\014le.)239 1205
+y Fq(\017)21 b Fr(No)14 b(calls)f(made)g(to)h(a)f(macro)g(without)g(the)i
+Fl(@Z)e Fr(option.)239 1291 y Fq(\017)21 b Fr(More)14 b(than)g(one)g(call)f
+(made)g(to)h(a)f(macro)g(without)h(the)g Fl(@M)f Fr(option.)239
+1376 y Fq(\017)21 b Fr(Directly)14 b(or)g(indirectly)f(recursiv)o(ely)i
+(de\014ned)g(macros.)239 1461 y Fq(\017)21 b Fr(Unnamed)13
+b(sections)i(that)f(con)o(tain)f(no)h(macro)f(de\014nitions.)177
+1581 y(F)m(unnelW)m(eb)i(p)q(erforms)f(a)h(static)g(analysis)g(to)f(detect)j
+(recursion.)23 b(Unfortunately)m(,)14 b(the)i(recursion)g(detection)177
+1630 y(algorithm)i(\015ags)i(all)f(macros)g(that)h(ha)o(v)o(e)g(an)g
+(in\014nite)g(expansion)g(rather)h(than)g(just)f(all)f(macros)g(with)h(a)177
+1680 y(recursiv)o(e)15 b(de\014nition.)i(If)c(A)g(calls)g(B,)g(and)g(B)g
+(calls)g(C,)g(and)g(C)g(calls)f(B,)h(then)h(F)m(unnelW)m(eb)f(will)e(\015ag)i
+(A)g(as)g(w)o(ell)177 1730 y(as)h(B)g(and)g(C.)f(It)h(is)g(hop)q(ed)h(that)e
+(this)h(problem)f(will)f(b)q(e)j(\014xed)f(in)g(a)f(later)h(v)o(ersion.)177
+1806 y(Because)j(F)m(unnelW)m(eb)d(do)q(es)h(not)f(pro)o(vide)h(an)o(y)f
+(kind)g(of)g(conditional)f(feature,)i(the)g(prev)o(en)o(tion)g(of)f
+(recursion)177 1856 y(do)q(es)h(not)f(represen)o(t)i(a)d(curtailmen)o(t)g(of)
+g(expressiv)o(e)j(p)q(o)o(w)o(er.)177 1932 y(Macros)f(ma)o(y)d(b)q(e)i(in)o
+(v)o(ok)o(ed)f(recursiv)o(ely)m(,)h(but)g(ma)o(y)e(not)i(b)q(e)g(recursiv)o
+(e.)20 b(Th)o(us:)177 2051 y Fl(@<Sloth@>@\(@<Sloth)o(@>@\(W)o(alrus)o
+(@\)@\))106 b(@!)21 b(LEGAL)64 b(recursive)20 b(invocation.)177
+2150 y(@$@<Teapot@>==@{@<)o(Teapo)o(t@>@})193 b(@!)21 b(ILLEGAL)f(recursive)g
+(definition.)177 2316 y Fi(3.13)70 b(T)-6 b(angle)177 2434
+y Fr(If)17 b(the)g(scanner,)i(parser,)f(and)f(analyser)g(ha)o(v)o(e)g
+(successfully)h(\(i.e.)e(with)h(no)f(errors,)j(sev)o(ere)f(errors,)h(or)e
+(fatal)177 2484 y(errors\))j(completed,)f(and)f(the)h(T)m(angle)f(option)g
+(\()p Fl(+O)p Fr(\))g(is)g(turned)i(on)e(\(it)h(is)f(b)o(y)g(default\),)h
+(then)h(the)f(T)m(angle)177 2533 y(comp)q(onen)o(t)12 b(of)h(F)m(unnelW)m(eb)
+f(is)h(in)o(v)o(ok)o(ed)f(to)g(generate)j(the)e(pro)q(duct)h(\014les)f(sp)q
+(eci\014ed)i(in)d(the)h Fl(@O)g Fr(macros)f(of)g(the)177 2583
+y(input)i(\014le.)177 2659 y(The)j(op)q(eration)f(of)f(T)m(angle)g(is)h(v)o
+(ery)h(simple.)23 b(Eac)o(h)16 b Fl(@O)g Fr(macro)f(is)h(expanded)g(and)g
+(written)h(to)f(a)g(\014le)g(of)f(the)177 2709 y(same)f(name.)20
+b(As)15 b(there)i(are)e(a)f(\014nite)h(n)o(um)o(b)q(er)g(of)f(macros,)g(and)g
+(the)i(analyser)f(guaran)o(tees)h(that)f(the)g(macro)177 2759
+y(structure)h(is)e(non-recursiv)o(e,)h(T)m(angle)e(is)g(guaran)o(teed)i(to)e
+(terminate.)177 2835 y(Three)i(remaining)d(p)q(oin)o(ts)i(are)g(w)o(orth)g
+(discussing.)1042 2940 y(88)p eop
+%%Page: 89 90
+89 89 bop 228 42 a Fr(1.)20 b(T)m(angle)12 b(expands)h(macros)g(using)f
+(blank)g(inden)o(tation)h(unless)g(the)h(user)g(has)f(sp)q(eci\014ed)i
+(otherwise)f(in)e(an)281 91 y(inden)o(tation)h(pragma)f(in)i(the)g(input)g
+(\014le)g(\(see)h(Section)f(3.10.11.1\).)228 167 y(2.)20 b(T)m(angle)d(k)o
+(eeps)j(trac)o(k)f(of)e(the)i(length)g(of)f(the)h(lines)f(that)g(it)g(is)h
+(writing)e(and)i(issues)g(an)f(error)i(if)d(an)o(y)281 217
+y(line)d(of)f(an)o(y)h(pro)q(duct)h(\014le)f(that)g(it)g(generates)i(is)d
+(longer)h(than)g(the)h(maxim)n(um)o(.)h(The)e(maxim)n(um)c(is)k(the)281
+266 y(minim)n(um)9 b(of)j(a)h(v)n(alue)g(defaulted)g(or)g(sp)q(eci\014ed)i
+(in)d(the)i(input)f(\014le)g(\(Section)h(3.10.11.3\),)c(and)j(the)g(v)n(alue)
+281 316 y(\(if)g(an)o(y\))h(pro)o(vided)f(b)o(y)h(the)h Fl(+w)e
+Fr(command)e(line)j(argumen)o(t)e(\(Section)j(3.7.3\).)228
+392 y(3.)20 b(It)14 b(is)f(w)o(orth)g(the)i(user)f(obtaining)e(some)h
+(understanding)h(of)f(the)h(resources)i(that)e(F)m(unnelW)m(eb)f(requires)281
+441 y(to)h(p)q(erform)f(its)h(task.)177 531 y(When)c(F)m(unnelW)m(eb's)g
+(scanner)h(executes,)i(it)c(reads)i(eac)o(h)f(\014le)g(in)o(to)g(memory)d
+(where)k(it)f(is)g(k)o(ept)g(for)g(the)g(duration)177 581 y(of)h(the)h(run.)
+18 b(Th)o(us,)12 b(there)g(m)o(ust)f(b)q(e)h(ro)q(om)e(in)h(memory)e(for)i
+(the)h(en)o(tire)h(input)e(\014le,)g(including)g(all)f(include)i(\014les.)177
+631 y(While)k(this)h(approac)o(h)g(ma)o(y)e(seem)i(exp)q(ensiv)o(e)h(in)e
+(memory)m(,)f(it)h(is)h(almost)e(necessary)k(in)e(order)g(to)g(supp)q(ort)177
+680 y(forw)o(ard)c(references.)20 b(T)m(o)12 b(merely)g(scan)h(the)h(input)e
+(\014le,)h(recording)g(the)h(macro)d(names,)h(but)h(lea)o(ving)f(the)h(text)
+177 730 y(on)h(disk,)f(w)o(ould)g(require)i(man)o(y)d(random)g(access)k(disk)
+e(seeks.)177 797 y(In)h(con)o(trast,)h(F)m(unnelW)m(eb)f(nev)o(er)h(builds)e
+(an)h(in)o(ternal)g(represen)o(tation)i(of)d(the)i(pro)q(duct)g(\014le.)22
+b(Instead,)15 b(eac)o(h)177 847 y(piece)e(of)e(output)h(is)f(written)h
+(immediately)c(to)k(the)g(pro)q(duct)h(\014le.)k(This)11 b(means)g(that)h(as)
+g(long)e(as)i(the)g(input)g(\014le)177 897 y(\014ts)j(in)e(memory)m(,)e(the)j
+(pro)q(duct)h(\014le)f(can)g(b)q(e)h(arbitrarily)e(large.)18
+b(It)c(also)f(means)h(that)g(users)h(need)g(not)f(fear)g(to)177
+947 y(de\014ne)g(or)f(call)f(macros)g(that)h(they)g(kno)o(w)f(will)g(expand)h
+(to)f(megab)o(ytes)g(of)h(text.)18 b(Nor)13 b(need)g(they)h(fear)f(placing)
+177 997 y(a)j(call)g(to)g(suc)o(h)h(a)f(macro)f(as)h(part)g(of)g(an)g(actual)
+g(parameter.)25 b(F)m(unnelW)m(eb)15 b(do)q(es)i(not)g(ev)o(er)g(expand)f
+(actual)177 1046 y(parameters)j(in)o(ternally)m(.)31 b(In)18
+b(fact,)i(it)e(do)q(es)h(not)g(expand)g(them)f(un)o(til)f(it)i(hits)f(the)i
+(corresp)q(onding)f(formal)177 1096 y(parameter)13 b(during)g(its)g
+(expansion)g(of)g(the)h(called)e(macro.)17 b(A)o(t)c(that)g(p)q(oin)o(t,)g
+(it)g(lo)q(oks)f(up)i(the)f Fm(expr)n(ession)h Fr(\(not)177
+1146 y(the)h(expansion)e(of)h(the)g(expression\))h(for)f(the)g(corresp)q
+(onding)h(actual)f(parameter,)f(and)h(starts)h(expanding)e(it.)177
+1297 y Fi(3.14)70 b(W)-6 b(ea)n(v)n(e)177 1405 y Fr(If)17 b(the)g(scanner,)i
+(parser,)f(and)f(analyser)g(ha)o(v)o(e)g(successfully)h(\(i.e.)e(with)h(no)f
+(errors,)j(sev)o(ere)f(errors,)h(or)e(fatal)177 1455 y(errors\))g(completed,)
+e(and)g(the)h(W)m(ea)o(v)o(e)f(option)f(\()p Fl(+T)p Fr(\))h(is)h(turned)g
+(on)f(\(it)g(is)g Fm(o\013)h Fr(b)o(y)f(default\),)g(then)h(the)g(W)m(ea)o(v)
+o(e)177 1505 y(comp)q(onen)o(t)c(of)g(F)m(unnelW)m(eb)f(is)i(in)o(v)o(ok)o
+(ed)e(to)h(generate)i(a)e(text)h(\014le)g(in)e(the)i(format)e(of)h(a)g
+(particular)g(t)o(yp)q(esetter.)177 1555 y(The)f(result,)h(when)f(fed)g
+(through)g(the)h(particular)e(t)o(yp)q(esetter)j(and)e(prin)o(ted,)g(is)g(a)f
+(fully)g(t)o(yp)q(eset)i(represen)o(tation)177 1605 y(of)h(the)i(en)o(tire)g
+(input)e(\014le)h(complete)f(with)h(cross)h(referencing)g(information.)177
+1735 y Fd(3.14.1)55 b(T)-5 b(arget)19 b(T)n(yp)r(esetter)177
+1829 y Fr(Curren)o(tly)m(,)14 b(F)m(unnelW)m(eb)g(pro)q(duces)i(do)q(cumen)o
+(tation)d(\014les)i(in)f(the)h(format)d(of)i(only)g(one)g(t)o(yp)q(esetter)j
+(|)d(T)1883 1838 y(E)1906 1829 y(X.)177 1879 y(Ho)o(w)o(ev)o(er,)f(the)h(W)m
+(ea)o(v)o(e)e(pac)o(k)n(age)h(of)f(F)m(unnelW)m(eb)g(is)h(fairly)f(small,)e
+(and)j(it)f(is)h(hop)q(ed)g(that)g(it)g(can)g(b)q(e)h(rewritten)177
+1928 y(so)f(as)f(to)g(pro)o(vide)g(a)g(collection)g(of)g(t)o(yp)q(esetter)i
+(mo)q(dules)d(from)g(whic)o(h)h(the)h(user)g(will)e(b)q(e)i(able)f(to)g(c)o
+(ho)q(ose)h(using)177 1978 y(a)h(command)d(line)i(argumen)o(t.)177
+2108 y Fd(3.14.2)55 b(Cross)20 b(Reference)c(Num)n(b)r(ering)177
+2202 y Fr(When)h(F)m(unnelW)m(eb)g(pro)q(duces)i(its)e(t)o(yp)q(eset)h(do)q
+(cumen)o(tation,)e(it)h Fm(numb)n(ers)g Fr(eac)o(h)h(section)g(and)e(eac)o(h)
+i(macro)177 2252 y(de\014nition)e(and)h(cross)h(references)h(the)f(macro)d
+(de\014nitions.)27 b(The)17 b(exact)g(sc)o(heme)g(used)h(has)e(b)q(een)i
+(carefully)177 2302 y(though)o(t)c(out.)k(Ho)o(w)o(ev)o(er,)c(as)g(it)f(can)h
+(b)q(e)h(a)e(little)g(confusing)h(to)g(the)g(b)q(eginner,)g(it)g(is)g
+(explained)f(here)i(in)f(full.)177 2369 y(The)d(most)f(imp)q(ortan)o(t)f
+(thing)h(is)h(that)g(there)h(is)e Fm(no)j(r)n(elation)d Fr(b)q(et)o(w)o(een)i
+(the)f(macro)f(n)o(um)o(b)q(ering)f(and)i(the)g(section)177
+2419 y(n)o(um)o(b)q(ering.)28 b(In)17 b(Kn)o(uth's)h(W)m(eb)f(there)i(are)f
+(only)f(section)h(n)o(um)o(b)q(ers.)29 b(In)18 b(F)m(unnelW)m(eb,)f(the)h(n)o
+(um)o(b)q(ering)e(of)177 2469 y(sections)f(and)f(macros)f(is)h(separated.)177
+2536 y(In)h(F)m(unnelW)m(eb,)f Fm(se)n(ctions)h Fr(are)h(n)o(um)o(b)q(ered)e
+(hierarc)o(hically)h(in)f(ascending)h(order.)22 b(F)m(or)15
+b(example,)e(the)j(second)177 2586 y(lev)o(el-C)i(section)i(of)e(the)i(third)
+e(lev)o(el-B)h(section)h(of)e(the)h(\014rst)h(lev)o(el-A)e(section)i(is)f(n)o
+(um)o(b)q(ered)f(\\1.3.2".)31 b(In)177 2635 y(con)o(trast,)17
+b Fm(macr)n(o)f(de\014nitions)h Fr(are)f(n)o(um)o(b)q(ered)g(sequen)o(tially)
+f(in)h(ascending)g(order.)24 b(F)m(or)16 b(example,)f(the)h(\014rst)177
+2685 y(macro)c(de\014nition)h(is)g(n)o(um)o(b)q(er)f(1,)g(the)i(second)g(is)f
+(n)o(um)o(b)q(er)g(2,)f(and)h(so)g(on.)18 b(Note)13 b(that)g(it)g(is)g
+Fm(macr)n(o)h(de\014nitions)177 2735 y Fr(that)k(are)g(n)o(um)o(b)q(ered,)g
+(not)f Fm(macr)n(os)p Fr(.)29 b(This)17 b(distinction)h(is)f(necessary)j(b)q
+(ecause)f(additiv)o(e)e(macros)f(\(i.e.)h(the)177 2785 y(ones)f(with)e
+Fl(+=)p Fr(\))g(can)h(b)q(e)h(de\014ned)g(b)o(y)e(a)h(collection)f(of)g
+(partial)g(de\014nitions)h(scattered)i(throughout)e(the)g(input)177
+2835 y(\014le.)j(A)c(single)g(additiv)o(e)f(macro)f(ma)o(y)g(b)q(e)j
+(de\014ned)g(in)e(de\014nitions)h(5,)f(67,)g(128,)g(and)h(153.)1042
+2940 y(89)p eop
+%%Page: 90 91
+90 90 bop 177 42 a Fi(3.15)70 b(F)-6 b(unnelW)g(eb)23 b(Shell)177
+167 y Fd(3.15.1)55 b(In)n(tro)r(duction)177 269 y Fr(One)19
+b(of)f(the)h(goals)e(of)g(F)m(unnelW)m(eb)h(is)g(that)g(it)g(m)o(ust)f(b)q(e)
+i(extremely)f(p)q(ortable.)31 b(Huge)19 b(e\013orts,)h(desp)q(erate)177
+319 y(actions,)e(and)g(great)g(sacri\014ces)h(w)o(ere)f(made)f(in)g(the)h
+(name)f(of)g(p)q(ortabilit)o(y)m(.)27 b(F)m(or)17 b(example,)g(F)m(unnelW)m
+(eb)g(is)177 369 y(written)e(in)e(C.)177 444 y(An)i(equally)e(imp)q(ortan)o
+(t)g(goal)g(w)o(as)i(that)f(of)g(correctness)k(and)c(reliabilit)o(y)m(.)j(T)m
+(o)d(this)h(end,)f(it)g(w)o(as)h(determined)177 494 y(that)d(a)f(large)g
+(automated)f(suite)i(of)f(test)h(programs)e(b)q(e)i(prepared)h(to)e(assist)h
+(in)f(regression)i(testing.)k(Preparing)177 544 y(the)e(test)g(suite)f(w)o
+(as)g(tedious,)g(but)g(ac)o(hiev)n(able.)j(Automating)12 b(it)h(p)q(ortably)h
+(w)o(as)g(more)f(di\016cult.)177 619 y(The)h(di\016cult)o(y)e(faced)i(w)o(as)
+f(that)g(if)f(F)m(unnelW)m(eb)h(w)o(as)g(implemen)o(ted)e(in)i(the)g(form)f
+(of)g(a)h(utilit)o(y)f(that)h(could)g(b)q(e)177 669 y(in)o(v)o(ok)o(ed)h
+(from)g(the)h(op)q(erating)g(system)g(command)e(language,)h(the)h(only)g(w)o
+(a)o(y)f(to)h(set)h(up)f(regression)h(testing)177 719 y(w)o(as)11
+b(in)f(the)h(command)d(language)i(of)g(the)h(op)q(erating)g(system)f(of)g
+(the)h(target)g(mac)o(hine)f(\(shellscripts)i(for)e(UNIX,)177
+769 y(DCL)h(for)h(VMS,)f(batc)o(h)h(\014les)g(for)f(MSDOS,)g(and)g
+Fm(nothing)i Fr(on)e(the)h(Macin)o(tosh\).)18 b(The)12 b(h)o(uge)f(v)n
+(ariation)f(in)h(these)177 819 y(command)i(languages)i(led)g(to)g(the)h
+(conclusion)g(that)f(either)h(the)g(automation)d(of)i(regression)i(testing)f
+(w)o(ould)177 868 y(ha)o(v)o(e)i(to)h(b)q(e)g(rewritten)h(on)e(eac)o(h)h
+(target)g(mac)o(hine,)f(or)g(a)g(small)f(command)e(language)j(w)o(ould)g(ha)o
+(v)o(e)g(to)g(b)q(e)177 918 y(created)g(within)d(F)m(unnelW)m(eb.)24
+b(In)17 b(the)f(end,)h(the)g(t)o(win)e(goals)h(of)f(p)q(ortabilit)o(y)g(and)h
+(regression)h(testing)g(w)o(ere)177 968 y(considered)g(so)f(imp)q(ortan)o(t)e
+(that)i(a)f(small)e(command)g(shell)j(w)o(as)f(constructed)j(inside)e(F)m
+(unnelW)m(eb.)22 b(This)16 b(is)177 1018 y(called)e(the)g Fo(F)l(unnelW)l(eb)
+g(command)h(shell)p Fr(,)c(or)i(just)i(\\the)f(shell")f(for)h(short.)177
+1093 y(By)i(default,)f(when)i(F)m(unnelW)m(eb)e(is)g(in)o(v)o(ok)o(ed,)g(it)h
+(do)q(es)g(not)g(en)o(ter)h(its)e(shell.)24 b(If)15 b(just)h(giv)o(en)f(the)h
+(name)f(of)g(an)177 1143 y(input)c(\014le,)f(it)g(will)f(simple)g(pro)q(cess)
+k(the)e(input)f(\014le)h(in)f(the)h(normal)e(manner)g(and)i(then)g
+(terminate.)16 b(T)m(o)10 b(instruct)177 1193 y(F)m(unnelW)m(eb)g(to)g(in)o
+(v)o(ok)o(e)f(its)h(shell,)g(the)g Fl(+K)g Fr(or)g Fl(+X)g
+Fr(command)d(line)i(option)h(m)o(ust)f(b)q(e)h(sp)q(eci\014ed)i(when)e(F)m
+(unnelW)m(eb)177 1243 y(is)i(in)o(v)o(ok)o(ed)g(from)f(the)i(op)q(erating)f
+(system.)17 b(It)c(is)f(also)g(in)o(v)o(ok)o(ed)g(up)q(on)g(startup)h(if)f
+(the)h(\014le)f Fl(fwinit.fws)f Fr(exists.)177 1318 y(Most)16
+b(F)m(unnelW)m(eb)f(users)i(will)d(nev)o(er)j(need)g(to)e(use)h(the)h(shell)e
+(and)h(need)g(not)g(ev)o(en)g(kno)o(w)f(ab)q(out)h(it.)23 b(There)177
+1368 y(are)14 b(four)g(main)e(uses)j(of)e(the)i(shell:)228
+1486 y(1.)20 b(As)14 b(a)g(to)q(ol)f(to)h(supp)q(ort)g(automated)f
+(regression)i(testing.)228 1570 y(2.)20 b(As)d(a)f(dev)o(elopmen)o(t)f(to)q
+(ol)g(on)h(mac)o(hines)g(that)g(do)g(not)g(ha)o(v)o(e)g(a)g(built)g(in)g
+(shell)g(\(e.g.)f(the)i(Macin)o(tosh\).)281 1620 y(The)d(shell)g(can)g(b)q(e)
+h(used)f(to)g(pro)q(cess)i(whole)e(groups)g(of)f(\014les)h(automatically)m(.)
+228 1705 y(3.)20 b(As)c(a)f(con)o(v)o(enience.)24 b(A)16 b(user)h(w)o(orking)
+d(on)h(a)h(m)o(ulti-tasking,)c(m)o(ulti-windo)o(w)g(w)o(orkstation)j(ma)o(y)f
+(wish)281 1754 y(to)g(k)o(eep)h(an)f(in)o(teractiv)o(e)g(session)h(of)f(F)m
+(unnelW)m(eb)g(going)f(in)g(one)i(windo)o(w)e(rather)i(than)f(ha)o(ving)f(to)
+h(run)281 1804 y(up)g(the)g(utilit)o(y)f(eac)o(h)h(time)f(it)g(is)h
+(required.)228 1889 y(4.)20 b(As)15 b(a)g(con)o(v)o(enien)o(t)g(v)o(ehicle)g
+(for)g(enclosing)g(utilities.)20 b(The)15 b(F)m(unnelW)m(eb)g(shell)g(con)o
+(tains)g(useful)g(general)281 1938 y(purp)q(ose)g(commands)c(suc)o(h)k(as)f
+(the)h(di\013erences)h(command)11 b Fl(diff)p Fr(.)177 2082
+y Fd(3.15.2)55 b(Return)18 b(Statuses)177 2184 y Fr(The)g(hierarc)o(h)o(y)f
+(of)g(diagnostics)g(describ)q(ed)i(in)d(Section)i(3.5)e(is)h(also)g(used)h
+(in)e(the)i(shell)f(commands.)25 b(Eac)o(h)177 2234 y(shell)14
+b(command)d(returns)k(a)f(status)h(whic)o(h)f(can)g(a\013ect)h(further)f(pro)
+q(cessing.)295 2309 y Fo(Success)f Fr(status)i(is)f(the)g(normal)e(command)f
+(return)k(status.)295 2385 y Fo(W)l(arning)f Fr(status)j(is)e(returned)j(if)d
+(some)f(minor)g(problem)h(arose)h(with)f(the)i(execution)f(of)f(the)295
+2435 y(command.)295 2510 y Fo(Error)h Fr(status)h(is)g(returned)h(if)e(a)g
+(signi\014can)o(t)h(problem)e(arises)i(during)f(the)i(execution)f(of)f(the)
+295 2560 y(command.)23 b(Ho)o(w)o(ev)o(er,)17 b(unlik)o(e)f(a)g(sev)o(ere)j
+(error,)e(it)f(do)q(es)h Fm(not)g Fr(cause)h(termination)c(of)i(the)h(en-)295
+2610 y(closing)d(shellscript.)295 2685 y Fo(Sev)o(ere)23 b(error)c
+Fr(status)j(is)f(returned)h(if)e(a)g(problem)g(arises)h(during)g(the)g
+(execution)h(of)e(the)295 2735 y(command)c(that)j(prev)o(en)o(ts)h(the)f
+(command)d(from)h(deliv)o(ering)h(on)g(its)h(\\promise".)30
+b(A)19 b(sev)o(ere)295 2785 y(error)12 b(causes)g(F)m(unnelW)m(eb)e(to)g(ab)q
+(ort)h(the)g(script)g(\(and)g(an)o(y)f(stac)o(k)o(ed)h(scripts\))h(to)e(the)h
+(in)o(teractiv)o(e)295 2835 y(lev)o(el.)18 b(\(Ho)o(w)o(ev)o(er,)c(the)g
+Fl(tolerate)f Fr(command)e(allo)o(ws)h(this)i(to)g(b)q(e)h(temp)q(orarily)d
+(o)o(v)o(erridden\).)1042 2940 y(90)p eop
+%%Page: 91 92
+91 91 bop 295 42 a Fo(F)l(atal)15 b(error)c Fr(status)j(is)f(returned)i(if)d
+(a)h(problem)f(arises)h(that)g(is)g(so)h(serious)f(that)g(execution)h(of)295
+91 y(F)m(unnelW)m(eb)c(cannot)g(con)o(tin)o(ue.)17 b(A)10 b(fatal)f(error)i
+(causes)g(F)m(unnelW)m(eb)e(to)h(ab)q(ort)g(to)g(the)h(op)q(erating)295
+141 y(system)j(lev)o(el.)295 219 y Fo(Assertion)i(error)e Fr(status)j(is)f
+(nev)o(er)g(returned.)26 b(If)15 b(an)h(assertion)g(error)h(o)q(ccurs,)g(F)m
+(unnelW)m(eb)295 269 y(b)q(om)o(bs)d(out)g(ungracefully)g(to)g(the)h(op)q
+(erating)g(system.)k(Assertion)d(errors)f(should)g(nev)o(er)g(hap-)295
+319 y(p)q(en.)k(If)13 b(they)i(do,)e(then)i(there)g(is)f(a)f(bug)h(in)f(F)m
+(unnelW)m(eb.)177 397 y(T)m(o)k(b)q(e)i(precise,)h(the)f(status)f(returned)i
+(b)o(y)e(eac)o(h)g(command)e(is)h(a)h(v)o(ector)h(of)e(n)o(um)o(b)q(ers)h(b)q
+(eing)g(the)g(n)o(um)o(b)q(er)177 447 y(of)d(eac)o(h)h(of)f(the)h(di\013eren)
+o(t)g(kinds)f(of)g(diagnostic)g(generated)i(b)o(y)e(the)h(command.)k(Usually)
+14 b(only)h(one)g(kind)g(of)177 497 y(diagnostic)d(is)g(generated.)19
+b(Ho)o(w)o(ev)o(er,)13 b(the)g Fl(fw)f Fr(command)e(and)i(a)g(few)h(of)f(the)
+h(other)g(commands)d(can)i(generate)177 546 y(more)k(than)h(one)g(kind)f(of)h
+(diagnostic.)26 b(These)18 b(status)g(v)o(ectors)g(are)f(summed)e(in)o
+(ternally)h(where)i(they)g(ma)o(y)177 596 y(later)13 b(b)q(e)h(accessed)h
+(using)e(the)g Fl(status)f Fr(command.)j(Ho)o(w)o(ev)o(er,)e(the)h(curren)o
+(t)g(diagnostic)e(state)i(ev)n(ap)q(orates)g(as)177 646 y(so)q(on)g(as)g(the)
+h(next)f(command)d(is)j(encoun)o(tered.)177 798 y Fd(3.15.3)55
+b(Command)17 b(Line)h(Length)177 904 y Fr(The)c(maxim)o(um)9
+b(length)14 b(of)f(a)h(shell)g(command)d(line)i(is)h(guaran)o(teed)g(to)g(b)q
+(e)h(at)e(least)h(300)g(c)o(haracters.)177 1056 y Fd(3.15.4)55
+b(String)19 b(Substitution)177 1162 y Fr(Most)f(command)c(shells)k(pro)o
+(vide)f(some)g(form)f(of)g(string)i(substitution)g(so)f(as)h(to)f(pro)o(vide)
+g(some)g(degree)h(of)177 1212 y(parameterization.)j(The)16
+b(F)m(unnelW)m(eb)f(shell)g(pro)o(vides)h(36)e(di\013eren)o(t)j(string)e(v)n
+(ariables)g(named)f Fl($0..$9)g Fr(and)177 1262 y Fl($A..$Z)i
+Fr(\(case)i(insensitiv)o(e\).)28 b(Eac)o(h)17 b(v)n(ariable)f(can)i(hold)e(a)
+h(string)g(con)o(taining)f(an)o(y)g(sequence)k(of)c(prin)o(table)177
+1312 y(c)o(haracters)g(and)e(can)g(b)q(e)g(as)g(long)f(as)h(a)g(command)d
+(line.)177 1390 y(The)k Fl(define)e Fr(command)e(allo)o(ws)i(the)h(user)i(to)
+e(assign)f(a)h(v)n(alue)g(to)g(these)h(v)n(ariables.)j(The)d
+Fl(define)e Fr(command)177 1439 y(tak)o(es)i(t)o(w)o(o)e(argumen)o(ts.)18
+b(The)c(\014rst)h(is)f(the)h(digit)e(or)h(letter)h(of)e(the)i(v)n(ariable)e
+(to)g(b)q(e)i(de\014ned.)20 b(The)14 b(second)h(is)f(a)177
+1489 y(double)f(quote)h(delimited)e(string)h(b)q(eing)g(the)h(string)g(v)n
+(alue)e(to)i(b)q(e)g(assigned)f(to)g(the)h(v)n(ariable.)j(If)c(y)o(ou)g(w)o
+(an)o(t)g(to)177 1539 y(include)h(a)g(double)f(quote)i(c)o(haracter)g(within)
+e(the)i(string,)e(y)o(ou)g(don't)h(need)h(to)e(double)h(it.)177
+1617 y(Examples:)177 1742 y Fl(define)21 b(3)g("/root/usr/usrs/use)o(rs/us)o
+(ers5/)o(this)o(user/)o(workd)o(ir/fw)o(dir/t)o(estdi)o(r")177
+1792 y(define)g(M)g("/user/local/rubbis)o(h/bin)o(/fw")177
+1841 y(define)g(Q)g("You)g(don't)g(need)g(to)g(double")g(double)f(quotes")177
+1966 y Fr(Only)13 b(the)h(iden)o(tifying)d(c)o(haracter)k(of)d(the)i(v)n
+(ariable)e(b)q(eing)h(assigned)g(is)g(used)h(in)f(the)g(de\014nition.)18
+b(This)13 b(syn)o(tax)177 2016 y(is)18 b(a)g(simple)f(w)o(a)o(y)g(of)h(prev)o
+(en)o(ting)g(the)h(v)n(ariable)e(from)f(b)q(eing)j(substituted)g(b)q(efore)g
+(it)f(has)g(a)g(c)o(hance)h(to)f(b)q(e)177 2066 y(de\014ned!)177
+2144 y(The)c(follo)o(wing)e(p)q(oin)o(ts)i(clean)g(up)g(the)g(remaining)e
+(seman)o(tic)h(details:)239 2268 y Fq(\017)21 b Fr(There)16
+b(is)f(only)g(one)g(set)h(of)f(v)n(ariables)f(and)h(they)h(are)f(global)f(to)
+h(all)f(shellscripts.)23 b(There)16 b(are)g Fm(no)g(lo)n(c)n(al)281
+2318 y(variables)p Fr(.)239 2408 y Fq(\017)21 b Fr(When)f(a)h(shellscript)g
+(is)f(in)o(v)o(ok)o(ed)f(using)h(the)h Fl(execute)e Fr(command,)g(the)i
+(substitution)f(v)n(ariables)g Fl(0)281 2458 y Fr(through)14
+b Fl(9)g Fr(are)g(a\013ected.)19 b(See)c(Section)f(3.15.7.9)e(for)h(more)g
+(details.)239 2547 y Fq(\017)21 b Fr(If)13 b(y)o(ou)h(w)o(an)o(t)f(to)h
+(include)g(a)g(dollar)e(sign)i(c)o(haracter)h(in)f(a)f(command)e(use)k(\\)p
+Fl($$)p Fr(".)239 2637 y Fq(\017)21 b Fr(F)m(unnelW)m(eb)14
+b(also)g(de\014nes)h(\\)p Fl($/)p Fr(")f(whic)o(h)g(translates)h(to)g(the)g
+(c)o(haracter)g(that)g(separates)h(directory)f(and)281 2687
+y(\014le)21 b(name)g(\014elds)g(in)g(\014le)h(names)f(on)g(the)h(host)g(mac)o
+(hine.)39 b(F)m(or)21 b(example:)32 b(Sun=\\)p Fl(/)p Fr(",)22
+b(V)m(ax=\\)p Fl(])p Fr(",)281 2737 y(Mac=\\)p Fl(:)p Fr(",)13
+b(PC=\\)p Fl(\\)p Fr(".)239 2827 y Fq(\017)21 b Fr(Substitution)14
+b(is)f(not)h(p)q(erformed)g(recursiv)o(ely)m(.)1042 2940 y(91)p
+eop
+%%Page: 92 93
+92 92 bop 177 42 a Fd(3.15.5)55 b(Ho)n(w)20 b(a)f(Command)e(Line)g(is)i(Pro)r
+(cessed)177 158 y Fr(When)13 b(F)m(unnelW)m(eb)f(reads)i(in)e(a)h(command)d
+(line)i(\(from)f(the)j(console)f(or)g(a)f(script)i(\014le\),)f(it)f(pro)q
+(cesses)j(it)e(in)f(the)177 208 y(follo)o(wing)f(sequence:)228
+350 y(1.)20 b(The)14 b(command)c(line)j(is)h(c)o(hec)o(k)o(ed)g(for)f
+(non-prin)o(table)g(c)o(haracters.)20 b(If)13 b(there)h(are)g(an)o(y)m(,)e
+(they)i(are)g(\015agged)281 400 y(with)f(a)h(sev)o(ere)i(error.)228
+504 y(2.)k(All)11 b(dollar)f(string)i(substitution)g(v)n(ariables)f(in)g(the)
+i(command)c(line)i(are)h(replaced)h(b)o(y)e(their)h(corresp)q(ond-)281
+554 y(ing)j(string.)25 b(The)17 b(command)c(line)j(is)f(pro)q(cessed)k(from)
+14 b(left)i(to)g(righ)o(t.)24 b(Substitutions)17 b(are)f(p)q(erformed)281
+604 y(non)e(recursiv)o(ely)m(.)228 708 y(3.)20 b(A)o(t)9 b(this)h(p)q(oin)o
+(t,)f(if)g(the)h(line)f(is)g(empt)o(y)m(,)g(or)g(consists)i(en)o(tirely)e(of)
+g(blanks,)h(it)f(is)g(ignored)h(and)f(the)h(in)o(terpreter)281
+757 y(mo)o(v)o(es)j(to)g(the)i(next)f(line.)228 861 y(4.)20
+b(A)14 b(sev)o(ere)h(error)g(is)f(generated)h(if)e(the)i(line)e(at)h(this)g
+(stage)g(b)q(egins)g(with)g(a)g(blank.)228 965 y(5.)20 b(If)13
+b(the)i(\014rst)g(c)o(haracter)g(of)e(the)i(line)e(is)h(\\)p
+Fl(!)p Fr(",)e(the)j(line)e(is)h(a)g(commen)o(t)d(line)j(and)g(is)f(ignored.)
+228 1069 y(6.)20 b(The)e(run)g(of)g(non-blanks)f(commencing)e(at)j(the)h
+(start)f(of)f(the)i(line)e(is)h(compared)f(case-insensitiv)o(ely)281
+1119 y(to)e(eac)o(h)h(of)f(the)i(legal)d(command)f(v)o(erbs.)24
+b(If)15 b(the)h(command)d(is)j(illegal,)d(a)j(sev)o(ere)h(error)f(is)g
+(generated,)281 1169 y(otherwise)f(the)f(command)d(is)j(pro)q(cessed.)177
+1343 y Fd(3.15.6)55 b(Options)177 1459 y Fr(The)14 b(F)m(unnelW)m(eb)g(shell)
+g(main)o(tains)d(three)k(sets)g(of)f(command)d(line)i(options.)228
+1602 y(1.)20 b(The)10 b(set)g(of)f(options)g(resulting)g(from)f(applying)g
+(the)i(op)q(erating)f(system)g(lev)o(el)g(command)e(line)i(argumen)o(ts)281
+1652 y(to)14 b(the)g(default)g(option)f(settings.)228 1756
+y(2.)20 b(A)14 b(set)h(of)e(shell)h(options)f(that)h(prev)n(ail)f(during)h
+(the)g(shell)g(in)o(v)o(o)q(cation.)228 1860 y(3.)20 b(The)14
+b(set)h(of)e(option)g(v)n(alues)h(activ)o(e)g(during)g(a)f(particular)h(in)o
+(v)o(o)q(cation)e(of)i(F)m(unnelW)m(eb)f(prop)q(er.)177 2002
+y(When)i(F)m(unnelW)m(eb)f(is)g(in)o(v)o(ok)o(ed)f(from)g(the)i(op)q(erating)
+f(system)g(with)g(just)h Fl(+F)p Fr(,)e(only)h(the)h(\014rst)g(of)f(these)h
+(three)177 2052 y(sets)k(comes)e(in)o(to)g(existence.)30 b(If)18
+b(the)g(user)g(in)o(v)o(ok)o(es)f(the)h(F)m(unnelW)m(eb)f(shell,)h(the)g
+(shell)g(options)f(come)f(in)o(to)177 2102 y(existence)j(and)e(are)h
+(initialized)d(with)i(the)h(v)n(alue)e(of)h(the)h(\014rst)f(set.)29
+b(These)19 b(shell)e(options)f(are)i(used)g(as)f(the)177 2151
+y(default)d(for)g(all)f(subsequen)o(t)j Fl(fw)d Fr(commands.)k(Ho)o(w)o(ev)o
+(er,)d(they)h(can)f(b)q(e)h(altered)g(using)f(the)h(script)g(command)177
+2201 y Fl(set)p Fr(.)i(If)11 b(a)h Fl(fw)f Fr(command)e(executed)14
+b(in)d(a)g(shell)h(con)o(tains)g(additional)e(command)f(line)i(options,)g
+(these)i(o)o(v)o(erride)177 2251 y(the)i(shell)e(options)h(for)f(that)h(run,)
+g(but)g(do)g(not)g(c)o(hange)g(the)g(shell)g(options.)k(An)c(example)f(follo)
+o(ws:)177 2393 y Fl($)22 b(fw)f(+k)h(+t)261 b(!)21 b(Original)f(invocation)g
+(of)h(FunnelWeb)f(from)h(OS.)657 2443 y(!)g(Shell)g(options)f(are)h(now)h
+(default)e(with)h("+t".)177 2493 y(FunnelWeb>fw)e(sloth)87
+b(!)21 b(Equivalent)f(to)h(fw)h(sloth)e(+t.)177 2543 y(FunnelWeb>set)f(-l)131
+b(!)21 b(Change)g(the)g(l)h(shell)e(option.)177 2593 y(FunnelWeb>fw)f(sloth)i
+(+q)h(!)f(Equivalent)f(to)h(fw)h(sloth)e(+t)i(-l)f(+q.)177
+2642 y(FunnelWeb>fw)e(sloth)87 b(!)21 b(Equivalent)f(to)h(fw)h(sloth)e(+t)i
+(-l.)177 2785 y Fr(The)14 b(existence)h(of)d(the)i(shell)f(option)f(set)i
+(means)e(that)h(the)h(user)g(can)f(set)h(up)f(a)g(set)h(of)f(defaults)g(to)g
+(b)q(e)g(applied)177 2835 y(to)h(all)f Fl(fw)g Fr(commands)e(issued)k(within)
+e(the)i(shell.)1042 2940 y(92)p eop
+%%Page: 93 94
+93 93 bop 177 42 a Fd(3.15.7)55 b(Shell)18 b(Commands)177 136
+y Fr(This)c(section)h(describ)q(es)h(eac)o(h)e(of)f(the)i(F)m(unnelW)m(eb)e
+(shell)h(commands.)h(The)g(syn)o(tax)f(is:)177 226 y Fl(shell_command)19
+b(=)j(absent)64 b(|)22 b(codify)e(|)i(compare)e(|)i(define)e(|)i(diff)86
+b(|)22 b(diffsummary)d(|)526 276 y(diffzero)h(|)i(eneo)64 b(|)22
+b(execute)e(|)i(exists)e(|)i(fixeols)e(|)i(help)173 b(|)526
+326 y(here)108 b(|)22 b(quit)64 b(|)22 b(set)108 b(|)22 b(show)64
+b(|)22 b(skipto)42 b(|)22 b(status)129 b(|)526 376 y(tolerate)20
+b(|)i(trace)42 b(|)22 b(write)64 b(|)22 b(writeu)177 425 y(s)g(=)f({")h("}+)
+177 516 y Fr(As)d(a)e(rule,)i(F)m(unnelW)m(eb)f(shell)g(commands)d(return)20
+b(sev)o(ere)f(status)g(if)e(their)i(argumen)o(ts)e(are)h(syn)o(tactically)177
+566 y(incorrect)d(or)f(if)f(they)i(are)f(unable)g(to)f(successfully)j(op)q
+(erate)e(on)g(argumen)o(t)f(\014les.)177 688 y Fo(3.15.7.1)48
+b(Absen)o(t)177 782 y Fr(The)19 b Fl(absent)d Fr(command)g(p)q(erforms)h(no)h
+(action)g(except)i(to)d(return)j(a)e(status.)31 b(If)18 b(the)g(\014le)h(sp)q
+(eci\014ed)g(in)f(its)177 832 y(argumen)o(t)13 b(do)q(esn't)h(exist)h(it)e
+(returns)i(success)i(status,)d(otherwise)h(it)e(returns)j(sev)o(ere)f
+(status.)177 922 y Fl(Syntax)21 b(:)g(absent)g(=)g("absent")g(s)g(filename)
+177 972 y(Example:)f(absent)h(result.out)177 1062 y Fr(This)16
+b(command)d(is)i(useful)h(in)f(regression)i(testing)f(for)f(making)e(sure)k
+(that)f(F)m(unnelW)m(eb)f Fm(hasn)l('t)g Fr(pro)q(duced)i(a)177
+1112 y(particular)d(output)g(\014le.)177 1234 y Fo(3.15.7.2)48
+b(Co)q(dify)177 1329 y Fr(The)14 b Fl(codify)f Fr(command)e(tak)o(es)j(t)o(w)
+o(o)f(argumen)o(ts:)k(an)d(input)g(\014le)f(and)h(an)f(output)h(\014le.)k(It)
+c(reads)h(eac)o(h)f(line)f(of)177 1378 y(the)g(input)g(\014le)g(and)f(writes)
+h(a)g(corresp)q(onding)g(line)g(to)f(the)h(output)g(\014le.)18
+b(The)13 b(corresp)q(onding)h(line)e(consists)h(of)177 1428
+y(a)e(C)g(macro)f(call)g(con)o(taining)g(a)g(string)h(con)o(taining)f(the)i
+(input)f(line.)16 b(The)c(command)c(con)o(v)o(erts)k(all)e(bac)o(kslashes)177
+1478 y(in)j(input)h(lines)f(to)g(double)h(bac)o(kslashes)g(so)g(as)f(to)g(a)o
+(v)o(oid)g(un)o(w)o(an)o(ted)g(in)o(terpretations)h(b)o(y)g(the)g(C)f
+(compiler.)k(It)177 1528 y(also)c(con)o(v)o(erts)i(double)f(quotes)h(in)e
+(the)i(line)e(to)h(bac)o(kslashed)g(double)g(quotes.)177 1618
+y Fl(Syntax)21 b(:)g(codify)g(=)g("codify")g(s)g(filename)f(s)i(filename)177
+1668 y(Example:)e(codify)h(header.tex)f(header.c)177 1758 y
+Fr(The)14 b(follo)o(wing)e(example)g(demonstrates)j(the)f(transformation.)177
+1849 y Fl(Input)43 b(Line:)20 b(\\def\\par{\\leavevmode)o(\\endg)o(raf})o
+(\045)f(A)j("jolly)e(good)h(hack".)177 1899 y(Output)g(Line:)f
+(WX\("\\\\def\\\\par{\\\\lea)o(vevmo)o(de\\\\)o(endgr)o(af}\045)e(A)k
+(\\"jolly)e(good)h(hack\\"."\);)177 1989 y Fr(The)c Fl(codify)e
+Fr(command)f(w)o(as)i(in)o(tro)q(duced)h(to)g(assist)f(in)g(the)h(dev)o
+(elopmen)o(t)f(of)g(F)m(unnelW)m(eb.)25 b(It)16 b(is)h(used)g(to)177
+2039 y(con)o(v)o(ert)f(longish)e(text)i(\014les)f(in)o(to)f(C)h(co)q(de)h(to)
+f(write)h(them)e(out.)21 b(The)16 b(C)f(co)q(de)h(is)f(then)h(included)f
+(within)f(the)177 2089 y(F)m(unnelW)m(eb)h(C)g(program.)20
+b(F)m(or)14 b(example,)g(the)h(set)h(of)f(T)1088 2098 y(E)1111
+2089 y(X)g(de\014nitions)g(that)g(app)q(ears)h(at)f(the)h(top)f(of)f(ev)o
+(ery)177 2139 y(do)q(cumen)o(tation)e(\014le)i(w)o(as)f Fl(codif)p
+Fr(ied)f(and)i(inserted)g(in)o(to)f(the)h(F)m(unnelW)m(eb)f(co)q(de)h(so)f
+(that)h(F)m(unnelW)m(eb)f(w)o(ould)177 2188 y(not)h(ha)o(v)o(e)g(to)f(lo)q
+(ok)g(for)h(a)f(\014le)h(con)o(taining)f(the)i(de\014nitions)f(at)f(run)h
+(time.)177 2311 y Fo(3.15.7.3)48 b(Compare)177 2405 y Fr(The)17
+b Fl(compare)f Fr(command)d(tak)o(es)18 b(t)o(w)o(o)e(\014lename)f(argumen)o
+(ts)h(and)h(p)q(erforms)f(a)h(binary)f(comparison)f(of)h(the)177
+2455 y(t)o(w)o(o)e(\014les.)19 b(If)14 b(the)h(\014les)f(are)h(iden)o(tical,)
+e(success)k(status)e(is)f(returned.)20 b(If)14 b(they)h(are)f(di\013eren)o
+(t,)h(sev)o(ere)h(status)f(is)177 2504 y(returned.)20 b(No)14
+b(information)d(ab)q(out)i(the)i(manner)e(in)g(whic)o(h)h(the)h(\014les)f
+(di\013er)g(is)g(con)o(v)o(ey)o(ed.)177 2595 y Fl(Syntax)21
+b(:)g(compare)g(=)g("compare")f(s)i(filename)e(s)h(filename)177
+2645 y(Example:)f(compare)h(result.txt)e(answer.txt)177 2735
+y Fr(The)14 b Fl(compare)e Fr(command)f(w)o(as)i(created)j(as)d(the)h(main)e
+(c)o(hec)o(king)i(mec)o(hanism)d(for)i(regression)i(testing.)j(Ho)o(w-)177
+2785 y(ev)o(er,)12 b(its)e(binary)g(output)h(w)o(as)f(so)q(on)g(found)g(to)h
+(b)q(e)g(un)o(w)o(ork)n(able)e(and)i(the)g(more)e(sophisticated)i
+Fl(diff)f Fr(command)177 2835 y(w)o(as)k(added)g(so)g(that)g(the)h(actual)e
+(di\013erences)j(b)q(et)o(w)o(een)g(the)e(\014les)g(could)g(b)q(e)g
+(examined.)1042 2940 y(93)p eop
+%%Page: 94 95
+94 94 bop 177 42 a Fo(3.15.7.4)48 b(De\014ne)177 141 y Fr(The)12
+b Fl(define)e Fr(command)e(assigns)k(a)f(v)n(alue)g(to)g(a)g(shell)g(string)g
+(substitution)h(v)n(ariable.)k(The)c Fl(define)e Fr(command)177
+191 y(tak)o(es)15 b(t)o(w)o(o)e(argumen)o(ts.)18 b(The)c(\014rst)h(is)f(the)h
+(digit)e(or)h(letter)h(of)e(the)i(v)n(ariable)e(to)g(b)q(e)i(de\014ned.)20
+b(The)14 b(second)h(is)f(a)177 241 y(double)f(quote)h(delimited)e(string)h(b)
+q(eing)g(the)h(string)g(v)n(alue)e(to)i(b)q(e)g(assigned)f(to)g(the)h(v)n
+(ariable.)j(If)c(y)o(ou)g(w)o(an)o(t)g(to)177 291 y(include)h(a)g(double)f
+(quote)i(c)o(haracter)g(within)e(the)i(string,)e(y)o(ou)g(don't)h(need)h(to)e
+(double)h(it.)177 401 y Fl(Syntax)43 b(:)21 b(define)g(=)g("define")f(s)i
+(letter)f(s)g("""")g(text)g("""")177 450 y(Examples:)f(define)h(3)g
+("/usr/usrs/thisuser)o(/wor)o(kdir/)o(fwdir)o(/test)o(dir")395
+500 y(define)g(M)g("/user/local/rubbis)o(h/bi)o(n/fw")395 550
+y(define)g(Q)g("You)g(don't)g(need)g(to)g(double")g(double)f(quotes")177
+660 y Fr(The)f(command)d(in)o(terpreter)21 b(expands)e(the)g(command)d(line)i
+(b)q(efore)h(it)g(executes)h(the)g Fl(define)d Fr(command.)177
+710 y(This)h(means)f(that)g(y)o(ou)h(can)f(de\014ne)i(string)f(substitution)g
+(v)n(ariables)f(in)g(terms)g(of)h(eac)o(h)g(other)g(with)f(static)177
+760 y(binding.)177 833 y(The)d Fl(define)f Fr(command)e(w)o(as)i(in)o(tro)q
+(duced)i(to)e(allo)o(w)f(the)j(parameterization)d(of)i(the)g(directories)h
+(in)o(v)o(olv)o(ed)d(in)177 882 y(regression)j(testing.)177
+955 y(See)g(Section)f(3.15.4)e(for)i(more)f(details.)177 1086
+y Fo(3.15.7.5)48 b(Di\013)177 1185 y Fr(The)16 b Fl(diff)f
+Fr(command)e(reads)k(in)e(t)o(w)o(o)g(text)i(\014les)f(and)f
+Fm(app)n(ends)i Fr(a)f(rep)q(ort)g(to)g(a)g(log)e(\014le)i(con)o(taining)f(a)
+g(list)g(of)177 1235 y(the)h(di\013erences)h(b)q(et)o(w)o(een)f(the)f(t)o(w)o
+(o)g(input)f(\014les.)21 b(If)15 b(the)g(log)f(\014le)h(do)q(es)g(not)g
+(already)g(exist,)g(an)f(empt)o(y)g(one)h(is)177 1285 y(created)h(\014rst.)
+177 1395 y Fl(Syntax)43 b(:)21 b(diff)g(=)h("diff")e(s)i(filename)e(s)i
+(filename)e(s)h(filename)f(s)i(["ABORT"])177 1445 y(Examples:)e(diff)h
+(result.tex)f(answer.tex)g(diff.log)395 1494 y(diff)h($Otest23.out)e
+($Atest23.out)h($Ldiff.log)f(ABORT)177 1604 y Fr(The)i Fl(diff)f
+Fr(command)e(p)q(erforms)i(a)g(full)f(line-based)i(di\013erences)i(op)q
+(eration.)37 b(It)21 b(will)e(iden)o(tify)h(di\013eren)o(t)177
+1654 y(sections)15 b(in)f(a)f(\014le,)h(ev)o(en)g(if)f(they)i(are)f(of)f
+(di\013ering)h(length.)177 1727 y(The)19 b(implem)o(en)o(tation)c(of)j(the)g
+Fl(diff)f Fr(command)f(is)i(quite)g(complicated.)29 b(T)m(o)17
+b(b)q(e)i(sure)g(that)f(it)g(is)g(at)g(least)177 1777 y(getting)e(its)h
+(same/di\013eren)o(t)f(pro)q(clamation)e(righ)o(t,)i(the)h
+Fl(diff)f Fr(command)d(p)q(erforms)j(a)g(binary)g(comparison)177
+1827 y(as)e(an)g(extra)g(c)o(hec)o(k.)177 1900 y(The)g(follo)o(wing)e(p)q
+(oin)o(ts)i(describ)q(e)h(the)g(rules)f(for)g(determining)e(the)j(result)g
+(status.)228 2010 y(1.)20 b Fl(diff)13 b Fr(ab)q(orts)h(with)g(a)f(sev)o(ere)
+j(error)f(if)e(the)h(log)f(\014le)h(cannot)g(b)q(e)h(op)q(ened)g(or)e
+(created)j(for)d(app)q(ending.)228 2091 y(2.)20 b(An)14 b(ordinary)f(error)i
+(is)f(generated)h(if)e(either)i(or)f(b)q(oth)g(of)f(the)i(input)e(\014les)i
+(cannot)f(b)q(e)g(op)q(ened.)228 2172 y(3.)20 b(If,)15 b(at)h(the)g(end)h(of)
+e(the)h(run,)g(the)h(t)o(w)o(o)e(input)g(\014les)i(ha)o(v)o(e)e(not)h(b)q
+(een)h(pro)o(v)o(en)f(to)f(b)q(e)i(iden)o(tical,)e(and)g(the)281
+2222 y Fl(ABORT)e Fr(k)o(eyw)o(ord)h(is)f(presen)o(t,)i Fl(diff)e
+Fr(returns)j(sev)o(ere)f(status.)228 2303 y(4.)20 b Fl(diff)10
+b Fr(returns)j(success)h(status)e(if)f(none)g(of)g(the)h(ab)q(o)o(v)o(e)f
+(conditions)g(\(or)h(similar)c(conditions\))k(o)q(ccur,)g(ev)o(en)281
+2353 y(if)h(the)h(t)o(w)o(o)g(\014les)g(are)g(di\013eren)o(t.)177
+2463 y(The)k Fl(diff)f Fr(command)d Fm(app)n(ends)19 b Fr(its)f
+(di\013erences)h(rep)q(ort)g(rather)f(than)g(merely)e(writing)h(it.)28
+b(This)18 b(allo)o(ws)e(a)177 2513 y(regression)f(test)g(script)g(to)f(p)q
+(erform)f(a)g(series)j(of)d(regression)i(tests)g(and)f(pro)q(duce)h(a)f(rep)q
+(ort)h(for)e(the)i(user.)177 2586 y(The)e Fl(diff)e Fr(command)f(w)o(as)i
+(added)h(to)f(the)h(shell)f(after)g(it)g(had)g(b)q(ecome)g(apparen)o(t)h
+(that)f(the)h(simpler)e Fl(compare)177 2635 y Fr(command)h(w)o(as)i(not)h
+(yielding)e(enough)i(information.)i(Whereas)f(early)e(on,)g(regression)i
+(testing)f(w)o(as)g(treated)177 2685 y(mainly)8 b(as)i(a)f(to)q(ol)h(to)g
+(ensure)h(that)f(F)m(unnelW)m(eb)g(w)o(as)g(b)q(eing)g(p)q(orted)g(to)g
+(other)h(mac)o(hines)e(correctly)m(,)i(it)f(b)q(egan)g(to)177
+2735 y(place)j(an)f(increasing)h(role)g(during)f(dev)o(elopmen)o(t)g(in)g
+(iden)o(tifying)f(the)i(e\013ects)i(of)d(c)o(hanges)h(made)f(to)g(the)h(co)q
+(de.)177 2785 y(The)j Fl(diff)e Fr(command)f(supp)q(orts)j(this)f
+(application)f(of)h(regression)h(testing)g(b)o(y)f(pinp)q(oin)o(ting)f(the)i
+(di\013erences)177 2835 y(b)q(et)o(w)o(een)f(nearly-iden)o(tical)e(text)i
+(\014les.)1042 2940 y(94)p eop
+%%Page: 95 96
+95 95 bop 177 42 a Fo(3.15.7.6)48 b(Di\013summary)177 160 y
+Fr(The)16 b Fl(diffsummary)d Fr(command)g(writes)j(a)g(short)g(rep)q(ort)g
+(to)g(the)g(console)g(giving)e(the)i(n)o(um)o(b)q(er)f(of)g(di\013erence)177
+209 y(op)q(erations)20 b(that)f(ha)o(v)o(e)h(tak)o(en)f(place)h(and)f(ho)o(w)
+g(man)o(y)f(of)h(the)h(pairs)f(of)g(\014les)h(compared)f(w)o(ere)h(iden)o
+(tical.)177 259 y(Coun)o(ting)14 b(starts)h(at)f(the)h(most)e(recen)o(t)j
+(execution)f(of)f(a)g Fl(diffzero)e Fr(command,)g(or)i(if)f(there)j(has)f(b)q
+(een)g(none,)177 309 y(when)g(F)m(unnelW)m(eb)e(started)i(up.)177
+454 y Fl(Syntax)43 b(:)21 b(diffsummary)f(=)h("diffsummary")177
+504 y(Examples:)f(diffsummary)177 649 y Fr(The)15 b Fl(diffsummary)d
+Fr(command)g(w)o(as)i(added)h(so)f(as)g(to)h(allo)o(w)d(regression)k(testing)
+f(scripts)g(to)f(displa)o(y)g(a)g(sum-)177 699 y(mary)f(of)i(the)g(results)h
+(of)e(the)i(test.)22 b(If)14 b(the)i(summary)c(indicates)j(that)g(no)g(pair)f
+(of)g(\014les)h(di\013ered,)h(then)f(there)177 749 y(is)f(no)g(need)g(to)g
+(lo)q(ok)f(in)h(the)g Fl(diff)f Fr(log)g(\014le.)177 918 y
+Fo(3.15.7.7)48 b(Di\013zero)177 1036 y Fr(The)13 b Fl(diffzero)d
+Fr(command)g(zeros)j(the)g(di\013eren)o(t)g(summary)d(coun)o(ters)j(used)g(b)
+o(y)f(the)h Fl(diff)e Fr(and)h Fl(diffsummary)177 1086 y Fr(commands.)177
+1231 y Fl(Syntax)43 b(:)21 b(diffzero)f(=)i("diffzero")177
+1281 y(Examples:)e(diffzero)177 1426 y Fr(The)g Fl(diffzero)e
+Fr(command)f(w)o(as)j(added)g(so)g(as)g(to)f(allo)o(w)f(regression)j(testing)
+f(shellscripts)h(to)f(zero)g(their)177 1476 y(di\013erences)c(coun)o(ters)e
+(at)f(the)h(start)g(of)e(a)h(run.)18 b(This)13 b(allo)o(ws)f(testers)k(to)d
+(in)o(v)o(ok)o(e)f(the)i(same)e(regression)i(testing)177 1526
+y(script)h(t)o(wice)f(in)f(one)i(in)o(teractiv)o(e)f(session)h(without)e
+(receiving)h(an)g(in\015ated)g(di\013erences)i(summary)m(.)177
+1695 y Fo(3.15.7.8)48 b(Eneo)177 1814 y Fr(The)15 b Fl(eneo)e
+Fr(command)f(tak)o(es)j(one)f(\014lename)g(argumen)o(t.)k(If)c(the)h(\014le)f
+(do)q(es)h(not)g(exist,)f(no)g(action)g(is)h(tak)o(en.)k(If)177
+1863 y(the)14 b(\014le)f(do)q(es)h(exist,)f(it)g(is)f(deleted.)19
+b(In)13 b(b)q(oth)h(cases)g(success)i(status)d(is)g(returned.)20
+b(Ho)o(w)o(ev)o(er,)13 b(if)f(the)i(\014le)f(exists)177 1913
+y(and)h(cannot)g(b)q(e)g(deleted,)h Fl(eneo)e Fr(returns)i(sev)o(ere)h
+(status.)177 2058 y Fl(Syntax)43 b(:)21 b(eneo)g(=)h("eneo")e(s)i(filename)
+177 2108 y(Examples:)e(eneo)h(result.out)177 2253 y Fr(The)e
+Fl(eneo)e Fr(command)e(w)o(as)j(added)h(so)f(as)g(to)g(allo)o(w)f(regression)
+i(testing)g(scripts)g(to)f(ensure)i(that)e(existing)177 2303
+y(output)h(\014les)g(w)o(ere)h(not)f(presen)o(t)h(b)q(efore)g(pro)q(ceeding)g
+(with)e(a)h(test)h(run.)33 b(If)19 b(F)m(unnelW)m(eb)f(w)o(ere)i(to)f(fail)e
+(to)177 2353 y(generate)e(an)f(output)g(\014le,)f(it)h(w)o(ould)f(b)q(e)i
+(extremely)e(undesirable)h(for)g(the)h(old)e(v)o(ersion)h(to)f(b)q(e)i(used.)
+177 2439 y(ENEO)h(stands)h(for)e Fo(E)p Fr(stablish)g(the)h
+Fo(N)p Fr(on)g Fo(E)p Fr(xistence)h Fo(O)p Fr(f.)22 b(Most)16
+b(op)q(erating)f(systems)h(pro)o(vide)f(a)h(command)177 2489
+y(to)f(delete)h(\014les.)23 b(T)o(ypically)13 b(these)k(commands)c(are)i(v)o
+(erbs)h(suc)o(h)g(as)f(\\delete",)h(\\remo)o(v)o(e",)e(and)h(\\kill".)k(As)d
+(a)177 2539 y(consequence,)h(the)f(designers)g(of)e(delete)i(commands)d
+(usually)h(consider)i(the)f(command)e(to)h(ha)o(v)o(e)h(failed)f(if)g(it)177
+2589 y(fails)e(to)h(\014nd)g(the)g(\014le)g(to)g(b)q(e)g(deleted.)19
+b(Ho)o(w)o(ev)o(er,)13 b(in)g(m)o(y)e(exp)q(erience,)k(the)e(most)f(common)e
+(use)k(for)e(the)i(delete)177 2639 y(command)f(is)j(to)f Fm(establish)i(the)f
+(non-existenc)n(e)i(of)e Fr(one)g(or)g(more)e(\014les.)24 b(T)o(ypically)m(,)
+14 b(a)i(script)g(is)g(starting)g(up)177 2688 y(and)f(needs)i(to)e(clear)g
+(the)h(air)f(b)q(efore)h(getting)f(started.)23 b(If)15 b(the)h(\014les)f(are)
+h(there,)g(they)g(should)f(b)q(e)h(deleted;)h(if)177 2738 y(they)e(are)f
+(not,)f(then)i(that's)f(OK)g(to)q(o.)787 2723 y Fg(5)p 177
+2796 709 2 v 223 2823 a Ff(5)241 2835 y Fh(As)e(far)f(as)g(I)h(kno)o(w,)e
+(the)h Fe(eneo)g Fh(command)d(is)k(original.)1042 2940 y Fr(95)p
+eop
+%%Page: 96 97
+96 96 bop 177 42 a Fo(3.15.7.9)48 b(Execute)177 138 y Fr(The)20
+b Fl(execute)d Fr(command)f(causes)21 b(a)e(sp)q(eci\014ed)h(text)g(\014le)f
+(to)g(b)q(e)g(executed)i(as)e(a)g(F)m(unnelW)m(eb)g(shellscript.)177
+188 y(The)e(\014rst)h(argumen)o(t)d(is)i(the)g(name)f(of)g(the)h(script)g
+(\014le.)27 b(The)17 b(remaining)e(argumen)o(ts)h(are)h(assigned)g(to)f(the)
+177 237 y(substitution)i(v)n(ariables)f Fl($1)p Fr(,)g Fl($2)p
+Fr(,)g Fn(:)7 b(:)g(:)o Fr(,)18 b Fl($9)p Fr(.)28 b(Substitution)17
+b(v)n(ariables)g(in)g(the)h(range)g Fl($1)f Fr(to)g Fl($9)g
+Fr(that)h(do)f(not)177 287 y(corresp)q(ond)d(to)e(an)g(argumen)o(t)f(are)i
+(set)g(to)f(the)h(empt)o(y)e(string)h Fl("")p Fr(.)17 b Fl($0)12
+b Fr(is)g(set)h(to)f(the)h(empt)o(y)e(string)h(regardless.)177
+337 y(The)k(execute)h(command)12 b(can)k(b)q(e)f(used)h(recursiv)o(ely)m(,)g
+(allo)o(wing)d(shell)i(scripts)h(to)f(in)o(v)o(ok)o(e)f(eac)o(h)i(other.)23
+b(A)15 b(\014le)177 387 y(extension)g(default)e(of)h(\\)p Fl(.fws)p
+Fr(")e(\(F)m(unnelW)m(eb)i(Script\))g(applies)g(to)f(script)i(\014les.)177
+485 y Fl(Syntax)43 b(:)21 b(execute)f(=)i("execute")e(s)i(filename)e
+({argument_string)o(})177 534 y(Examples:)g(execute)g(megatest.fws)g
+(/usr/users/ross/)o(fwtes)o(t)f(!)395 584 y(execute)h(sloth)177
+682 y Fr(The)14 b(\014rst)h(example)e(ab)q(o)o(v)o(e)g(will)g(result)h(in)g
+(the)g(follo)o(wing)e(substitution)i(v)n(ariable)e(assignmen)o(ts.)177
+780 y Fl($0)22 b(=)f("")177 829 y($1)h(=)f("/usr/users/ross/f)o(wtest)o(")177
+879 y($2)h(=)f("!")177 929 y($3)h(=)f("")177 979 y(...)177
+1029 y($9)h(=)f("")177 1126 y Fr(It)16 b(should)f(b)q(e)g(stressed)j(that)d
+(there)i(are)f(no)f(lo)q(cal)f(v)n(ariables)h(in)g(the)g(F)m(unnelW)m(eb)g
+(command)e(language;)h(the)177 1176 y(v)n(ariables)f(ab)q(o)o(v)o(e)h(are)g
+(globally)e(mo)q(di\014ed.)177 1246 y(The)j Fl(execute)f Fr(command)e(w)o(as)
+i(added)h(to)g(allo)o(w)e(the)i(creation)h(of)e(sub-scripts)i(to)f(test)g(F)m
+(unnelW)m(eb)g(in)f(par-)177 1296 y(ticular)g(w)o(a)o(ys.)177
+1421 y Fo(3.15.7.10)48 b(Exists)177 1517 y Fr(The)19 b Fl(exists)d
+Fr(command)g(p)q(erforms)h(no)h(action)g(except)i(to)d(return)j(a)e(status.)
+31 b(If)18 b(the)g(\014le)h(sp)q(eci\014ed)g(in)f(its)177 1567
+y(argumen)o(t)13 b(exists)i(it)e(returns)i(success)i(status,)d(otherwise)h
+(it)e(returns)j(sev)o(ere)f(status.)177 1665 y Fl(Syntax)21
+b(:)g(exists)g(=)g("exists")g(s)g(filename)177 1714 y(Example:)f(exists)h
+(test6.fw)177 1812 y Fr(This)10 b(command)d(is)j(useful)g(in)g(regression)h
+(testing)f(for)g(ensuring)g(that)g(F)m(unnelW)m(eb)g(has)g(pro)q(duced)h(a)f
+(particular)177 1862 y(output)k(\014le.)177 1987 y Fo(3.15.7.11)48
+b(Fixeols)177 2083 y Fr(The)13 b Fl(fixeols)f Fr(command)e(tak)o(es)j(t)o(w)o
+(o)f(\014lename)g(argumen)o(ts:)k(an)d(input)f(\014le)h(and)g(an)f(output)h
+(\014le.)18 b(It)13 b(reads)g(in)177 2133 y(the)f(input)f(\014le)g(and)g
+(writes)h(it)e(to)h(the)h(output)f(\014le)g(c)o(hanging)g(all)e(the)j(end)g
+(of)e(line)h(con)o(trol)g(c)o(haracter)h(sequences)177 2183
+y(to)k(the)g(lo)q(cal)f(format.)22 b(It)15 b(can)h(also)f(tak)o(e)h(one)g
+(\014lename)f(argumen)o(t,)f(in)h(whic)o(h)h(case)h(it)e(replaces)i(the)f
+(target)177 2233 y(\014le)e(with)g(its)f(transformation.)177
+2331 y Fl(Syntax)43 b(:)21 b(fixeols)f(=)i("fixeols")e(s)i(filename)e([s)h
+(filename])177 2380 y(Examples:)f(fixeols)g(imported.hak)g(result.kln)395
+2430 y(fixeols)g(sloth.dat)177 2528 y Fr(The)12 b Fl(fixeols)e
+Fr(command)e(w)o(orks)k(b)o(y)f(parsing)g(the)h(input)f(\014le)g(in)o(to)g
+(alternating)f(runs)i(of)f(prin)o(table)g(c)o(haracters)177
+2578 y(\(ASCI)q(I)i(20)f(to)g(ASCI)q(I)h(126\))e(and)i(runs)g(of)e(non-prin)o
+(table)h(c)o(haracters)i(\(all)e(the)h(others\).)18 b(It)13
+b(then)g(parses)g(eac)o(h)177 2628 y(run)g(of)f(non-prin)o(table)f(c)o
+(haracters)j(from)d(left)h(to)g(righ)o(t)g(in)o(to)f(subruns)j(of)e(non-prin)
+o(tables)g(not)g(con)o(taining)f(the)177 2677 y(same)j(c)o(haracter)i(t)o
+(wice.)22 b(It)15 b(then)g(replaces)h(eac)o(h)g(subrun)g(with)e(a)h(nativ)o
+(e)f(EOL.)1479 2662 y Fg(6)1513 2677 y Fr(F)m(or)g(example,)f(if)i(a)f(nativ)
+o(e)177 2727 y(EOL)g(is)g Fl(X)p Fr(,)f(and)h Fl(ABCD)f Fr(are)h(non-prin)o
+(table)g(c)o(haracters,)h(and)f(the)g(\014le)g(to)g(b)q(e)g(con)o(v)o(erted)h
+(is)p 177 2757 709 2 v 223 2783 a Ff(6)241 2795 y Fh(Note:)j(A)13
+b(nativ)o(e)f(EOL)h(can)g(b)q(e)f(inserted)f(in)o(to)h(a)h(text)f(\014le)g
+(in)h(a)g(p)q(ortable)e(manner)f(simply)i(b)o(y)g(writing)g(\\)p
+Fe(\\n)p Fh(")g(to)h(the)f(text)177 2835 y(output)e(stream.)1042
+2940 y Fr(96)p eop
+%%Page: 97 98
+97 97 bop 177 42 a Fl(thisABisABCDanABAB)o(examp)o(leABC)o(CCof)18
+b(the)k(conversion.)177 173 y Fr(then)15 b Fl(fixeols)d Fr(w)o(ould)h(pro)q
+(duce)177 304 y Fl(thisXisXanXXexampl)o(eXXXo)o(f)19 b(the)i(conversion.)177
+435 y Fr(The)c Fl(fixeols)e Fr(command)f(w)o(as)j(devised)g(to)g(solv)o(e)f
+(the)i(problem)d(created)j(sometimes)d(when)i(text)g(\014les)g(are)177
+485 y(mo)o(v)o(ed)c(from)f(one)i(mac)o(hine)f(to)h(another)h(\(e.g.)e(with)h
+(the)h(k)o(ermit)e(program\))f(using)i(a)g(binary)g(transfer)h(mo)q(de)177
+534 y(rather)j(than)f(a)g(text)h(transfer)g(mo)q(de.)27 b(If)17
+b(suc)o(h)h(a)f(transfer)h(is)f(made,)f(and)h(the)h(text)g(\014le)f(line)g
+(termination)177 584 y(con)o(v)o(en)o(tions)f(di\013er)f(on)g(the)h(t)o(w)o
+(o)f(mac)o(hines,)f(one)i(can)f(wind)g(up)h(with)f(a)g(set)h(of)f(text)h
+(\014les)f(with)g(improp)q(erly)177 634 y(terminated)10 b(lines.)16
+b(This)10 b(can)g(cause)i(problems)d(on)h(a)f(n)o(um)o(b)q(er)h(of)f(fron)o
+(ts,)h(but)h(in)e(particular)h(a\013ects)i(regression)177 684
+y(testing)h(whic)o(h)f(relies)h(hea)o(vily)e(on)h(exact)h(comparisons)e(b)q
+(et)o(w)o(een)j(\014les.)k(The)12 b Fl(fixeols)f Fr(command)f(pro)o(vides)i
+(a)177 734 y(solution)g(to)h(this)g(problem)f(b)o(y)h(pro)o(viding)f(a)h(p)q
+(ortable)g(w)o(a)o(y)f(to)h(\\purify")f(text)i(\014les)f(whose)h(end)g(of)e
+(lines)h(ha)o(v)o(e)177 783 y(b)q(ecome)h(incorrect.)20 b(The)14
+b(regression)i(testing)e(scripts)h(all)e(apply)h Fl(fixeols)e
+Fr(to)i(their)g(input)g(and)g(output)g(\014les)177 833 y(b)q(efore)h(eac)o(h)
+f(test.)177 985 y Fo(3.15.7.12)48 b(Fw)177 1095 y Fr(The)12
+b Fl(fw)g Fr(command)d(allo)o(ws)h(F)m(unnelW)m(eb)i(prop)q(er)g(to)g(b)q(e)h
+(in)o(v)o(ok)o(ed)e(from)f(a)h(shell)h(script.)18 b(The)12
+b(syn)o(tax)g(is)g(almost)177 1145 y(iden)o(tical)h(to)h(the)h(syn)o(tax)e
+(with)h(whic)o(h)g(F)m(unnelW)m(eb)f(is)h(in)o(v)o(ok)o(ed)f(from)f(the)j(op)
+q(erating)e(system.)177 1276 y Fl(Syntax)43 b(:)21 b(fw)g(=)h("fw")f(s)h
+(ordinary_funnelw)o(eb_c)o(omman)o(d_lin)o(e)177 1325 y(Examples:)e(fw)h
+(sloth)g(+t)h(+d)395 1375 y(fw)f(-l)h(walrus)177 1506 y Fr(Some)13
+b(imp)q(ortan)o(t)f(p)q(oin)o(ts)i(ab)q(out)g(this)f Fl(fw)h
+Fr(command)d(are:)239 1637 y Fq(\017)21 b Fr(Options)14 b(are)g(inherited)h
+(from)d(the)i(default)g(shell)g(options.)239 1732 y Fq(\017)21
+b Fr(The)14 b Fl(F)g Fr(\(input)g(\014le)g(option\))f(m)o(ust)g(b)q(e)h
+(turned)h(on.)239 1827 y Fq(\017)21 b Fr(The)14 b Fl(K)p Fr(,)f
+Fl(H)p Fr(,)h(and)f Fl(X)h Fr(options)f(m)o(ust)g(b)q(e)i(turned)g(o\013.)239
+1922 y Fq(\017)21 b Fr(The)14 b Fl(J)g Fr(option)f(m)o(ust)g(b)q(e)h(turned)h
+(o\013.)239 2017 y Fq(\017)21 b Fr(The)14 b(options)g(sp)q(eci\014ed)h(in)f
+(a)f Fl(fw)h Fr(command)d(do)i(not)h(a\013ect)h(the)g(default)e(shell)h
+(options.)239 2112 y Fq(\017)21 b Fr(This)14 b(command)d(p)q(erforms)i(no)h
+(action)f(in)h(the)g(V)-5 b(AX)15 b(VMS)f(v)o(ersion)g(of)f(F)m(unnelW)m(eb.)
+177 2263 y Fo(3.15.7.13)48 b(Help)177 2373 y Fr(The)16 b Fl(help)f
+Fr(command)d(pro)o(vides)k(online)f(help)g(from)f(within)g(the)i(F)m(unnelW)m
+(eb)f(shell.)23 b(It)15 b(pro)o(vides)h(access)h(to)177 2423
+y(all)c(of)g(the)i(same)e(messages)h(that)f(the)i Fl(+H)e Fr(command)f(line)h
+(option)g(do)q(es.)177 2554 y Fl(Syntax)43 b(:)21 b(help)g(=)h("help")e([s)i
+(help_message_na)o(me])177 2604 y(Examples:)e(help)395 2654
+y(help)h(commands)177 2785 y Fr(If)14 b(no)h(message)f(name)g(is)g(giv)o(en,)
+g(the)h(default)g(message)f(is)h(displa)o(y)o(ed.)k(It)c(con)o(tains)g(a)f
+(list)g(of)g(the)h(other)h(help)177 2835 y(messages)e(and)g(their)g(names.)j
+(The)e(actual)e(messages)h(themselv)o(es)g(are)g(not)g(listed)g(here.)1042
+2940 y(97)p eop
+%%Page: 98 99
+98 98 bop 177 42 a Fo(3.15.7.14)48 b(Here)177 147 y Fr(The)19
+b Fl(here)e Fr(command)e(acts)j(as)g(a)g(target)g(for)g(the)g
+Fl(skipto)f Fr(command.)27 b(When)18 b(the)h(shell)f(in)o(terpreter)h(en-)177
+197 y(coun)o(ters)h(a)e Fl(skipto)g Fr(command,)e(it)i(ignores)h(all)e(the)i
+(follo)o(wing)d(commands)g(un)o(til)i(it)g(encoun)o(ters)i(a)f
+Fl(here)177 247 y Fr(command.)177 371 y Fl(Syntax)i(:)g(here)g(=)h("here")177
+421 y(Example:)e(here)177 545 y Fr(The)14 b Fl(skipto)p Fr(/)p
+Fl(here)c Fr(mec)o(hanism)h(w)o(as)i(created)i(to)e(allo)o(w)e(groups)i(of)g
+(regression)h(tests)h(to)e(b)q(e)g(skipp)q(ed)h(during)177
+595 y(debugging)f(without)h(ha)o(ving)f(to)h(commen)o(t)d(them)i(out.)18
+b(F)m(or)c(more)f(information,)d(see)15 b(Section)g(3.15.7.18.)177
+737 y Fo(3.15.7.15)48 b(Quit)177 843 y Fr(The)14 b Fl(quit)f
+Fr(command)e(terminates)i(F)m(unnelW)m(eb)g(immediately)d(and)k(returns)h
+(con)o(trol)e(to)h(the)g(op)q(erating)f(sys-)177 893 y(tem.)k(This)d(applies)
+g(regardless)h(of)e(the)i(depth)f(of)f(the)i(script)g(b)q(eing)e(executed.)
+177 1017 y Fl(Syntax)21 b(:)g(quit)g(=)h("quit")177 1067 y(Example:)e(quit)
+177 1209 y Fo(3.15.7.16)48 b(Set)177 1315 y Fr(The)15 b Fl(set)e
+Fr(command)f(mo)q(di\014es)h(the)i(default)f(shell)g(options.)k(F)m(or)c
+(example,)f Fl(set)21 b(+t)14 b Fr(sets)h(the)g Fl(+t)f Fr(option)f(for)177
+1365 y(all)g(subsequen)o(t)i(F)m(unnelW)m(eb)f(runs)g(within)g(the)g(shell)g
+(un)o(til)f(another)h(set)h(command)c(sets)k Fl(-t)p Fr(.)177
+1489 y Fl(Syntax)43 b(:)21 b(set)g(=)h("set")f(s)g(ordinary_funnelweb)o
+(_comm)o(and_l)o(ine)177 1539 y(Examples:)f(set)h(sloth)g(+t)g(+d)395
+1589 y(set)g(-lwalrus)177 1713 y Fr(The)c(restrictions)g(on)f(the)h
+Fl(set)e Fr(command)e(are)k(iden)o(tical)e(to)h(those)h(on)f(the)h
+Fl(fw)e Fr(command)e(except)18 b(that,)e(in)177 1763 y(addition,)c(the)j
+Fl(+F)e Fr(option)g(cannot)i(b)q(e)f(turned)h(on)f(in)f(the)i
+Fl(set)e Fr(command.)177 1840 y(The)f(set)h(command)c(is)j(useful)g(for)f
+(setting)i(option)e(defaults)h(b)q(efore)g(a)g(long)f(run)h(of)f(regression)i
+(tests.)19 b(It)12 b(could)177 1890 y(also)h(b)q(e)g(useful)h(to)f(set)h
+(default)f(options)f(in)h(a)g(F)m(unnelW)m(eb)f(shell)h(k)o(ept)h(b)o(y)f(a)g
+(user)h(in)f(a)f(w)o(orkstation)h(windo)o(w.)177 2033 y Fo(3.15.7.17)48
+b(Sho)o(w)177 2139 y Fr(The)14 b Fl(show)f Fr(command)e(displa)o(ys)j(the)g
+(curren)o(t)h(default)f(shell)f(options.)18 b(These)d(options)f(are)g(the)g
+(options)g(that)177 2189 y(subsequen)o(t)i Fl(fw)d Fr(commands)f(will)g
+(inherit.)177 2313 y Fl(Syntax)21 b(:)g(show)g(=)h("show")177
+2362 y(Example:)e(show)177 2505 y Fo(3.15.7.18)48 b(Skipto)177
+2611 y Fr(The)14 b Fl(skipto)f Fr(command)e(causes)k(the)g(shell)e(to)h
+(ignore)g(all)e(subsequen)o(t)k(commands)11 b(un)o(til)i(a)h
+Fl(here)f Fr(command)177 2661 y(is)h(encoun)o(tered.)177 2785
+y Fl(Syntax)43 b(:)21 b(skipto)g(=)g("skipto")177 2835 y(Examples:)f(skipto)
+1042 2940 y Fr(98)p eop
+%%Page: 99 100
+99 99 bop 177 42 a Fr(The)14 b Fl(skipto)p Fr(/)p Fl(here)c
+Fr(mec)o(hanism)h(w)o(as)i(created)i(to)e(allo)o(w)e(groups)i(of)g
+(regression)h(tests)h(to)e(b)q(e)g(skipp)q(ed)h(during)177
+91 y(debugging)c(without)f(ha)o(ving)g(to)h(commen)o(t)e(them)h(out.)17
+b(It)10 b(is)g(lik)o(e)f(a)h(cut)g(price)h Fl(goto)p Fr(.)16
+b(F)m(or)10 b(example,)f(supp)q(osing)177 141 y(that)15 b(there)h(w)o(ere)f
+(eigh)o(t)g(tests)h(and)e(that)h(y)o(ou)f(had)h(debugged)g(the)g(\014rst)h
+(\014v)o(e.)k(Y)m(ou)14 b(migh)o(t)f(w)o(an)o(t)h(to)h(skip)f(the)177
+191 y(\014rst)i(\014v)o(e)f(tests)h(so)g(that)f(y)o(ou)f(can)h(concen)o
+(trate)i(on)e(the)g(next)h(three.)22 b(The)16 b(follo)o(wing)c(co)q(de)k(sho)
+o(ws)f(ho)o(w)g(this)177 241 y(can)f(b)q(e)h(done.)177 359
+y Fl(skipto)177 409 y(execute)21 b(test)f(infile1)177 459 y(execute)h(test)f
+(infile2)177 509 y(execute)h(test)f(infile3)177 559 y(execute)h(test)f
+(infile4)177 608 y(execute)h(test)f(infile5)177 658 y(here)177
+708 y(execute)h(test)f(infile6)177 758 y(execute)h(test)f(infile7)177
+808 y(execute)h(test)f(infile8)177 926 y Fr(It)15 b(should)f(b)q(e)h
+(stressed)i(that)d(F)m(unnelW)m(eb)g(p)q(erforms)g(full)f(command)f(line)i
+(pro)q(cessing)h(including)f(the)h(dollar)177 976 y(substitutions)i(b)q
+(efore)g(testing)f(the)h(line)f(to)g(see)h(if)f(it)g(is)g Fl(here)p
+Fr(.)24 b(This)16 b(can)g(lead)g(to)g(non-ob)o(vious)f(problems.)177
+1026 y(F)m(or)f(example.)177 1144 y Fl(skipto)177 1194 y(!)22
+b(Test)f(the)g(Parser)177 1244 y(!)h(---------------)177 1294
+y(define)f(X)g("execute)f(parsertest.fws")177 1344 y($X)i(infile1)177
+1393 y($X)g(infile2)177 1443 y($X)g(infile3)177 1493 y($X)g(infile4)177
+1543 y($X)g(infile5)177 1593 y(here)177 1711 y Fr(The)14 b(ab)q(o)o(v)o(e)e
+(lo)q(oks)h(correct,)h(but,)f(b)q(ecause)i(the)e Fl(define)f
+Fr(command)e(isn't)j(executed)h(\(and)f Fl($X)g Fr(is)g(not)g(de\014ned\))177
+1761 y(the)h(subsequen)o(t)g Fl($X)f Fr(lines)g(result)g(in)g(a)f(leading)g
+(blanks)h(error.)18 b(The)c(problem)d(can)j(b)q(e)f(corrected)i(b)o(y)e
+(de\014ning)177 1811 y Fl($X)h Fr(b)q(efore)g(the)h Fl(skipto)d
+Fr(command.)177 1947 y Fo(3.15.7.19)48 b(Status)177 2050 y
+Fr(The)20 b Fl(status)e Fr(command)f(tak)o(es)i(t)o(w)o(o)g(forms.)33
+b(In)20 b(its)f(\014rst)h(form)e(in)h(whic)o(h)g(no)g(argumen)o(ts)g(are)g
+(giv)o(en,)h(it)177 2099 y(writes)13 b(out)f(the)h(n)o(um)o(b)q(er)e(of)h(w)o
+(arnings,)g(errors)h(and)f(sev)o(ere)i(errors)g(that)e(1\))g(w)o(ere)h
+(generated)h(b)o(y)e(the)g(previous)177 2149 y(command)j(and)j(2\))g(ha)o(v)o
+(e)f(b)q(een)i(generated)g(during)f(the)g(en)o(tire)h(shell)f(in)o(v)o(o)q
+(cation.)28 b(In)18 b(its)g(second)h(form)d(it)177 2199 y(tak)o(es)d(from)d
+(one)j(to)f(three)h(argumen)o(ts)f(eac)o(h)g(of)g(whic)o(h)g(sp)q(eci\014es)i
+(a)e(diagnostic)g(sev)o(erit)o(y)h(and)f(a)g(n)o(um)o(b)q(er.)k(The)177
+2249 y Fl(status)e Fr(command)e(compares)j(eac)o(h)g(of)g(these)h(n)o(um)o(b)
+q(ers)f(with)g(the)g(n)o(um)o(b)q(er)g(of)f(that)h(diagnostic)f(generated)177
+2299 y(b)o(y)g(the)g(previous)h(command)c(and)i(generates)j(a)d(sev)o(ere)j
+(error)f(if)e(they)h(di\013er.)177 2417 y Fl(Syntax)43 b(:)21
+b(status)g(=)g("status")f({s)i(\("w"|"e"|"s"\))d(num}0..3)177
+2467 y(Examples:)h(status)395 2517 y(status)h(w1)g(e5)g(s1)395
+2567 y(status)g(w4)395 2616 y(status)g(s1)g(e2)177 2735 y Fr(The)15
+b Fl(status)d Fr(command)g(w)o(as)h(in)o(tro)q(duced)i(to)f(test)h(the)g
+(status)f(results)i(of)d(commands)f(during)h(their)i(debug-)177
+2785 y(ging.)i(It)c(is)g(also)f(useful)h(for)g(c)o(hec)o(king)h(to)e(see)j
+(that)e(the)g(righ)o(t)g(n)o(um)o(b)q(er)f(of)h(diagnostics)f(ha)o(v)o(e)h(b)
+q(een)h(generated)177 2835 y(at)g(particular)g(p)q(oin)o(ts)f(in)h(test)h
+(scripts.)1042 2940 y(99)p eop
+%%Page: 100 101
+100 100 bop 177 42 a Fo(3.15.7.20)48 b(T)l(olerate)177 141
+y Fr(The)15 b Fl(tolerate)e Fr(command)f(instructs)k(the)f(shell)f(not)g(to)h
+(ab)q(ort)f(pro)q(cessing)i(of)e(the)h(script)g(if)f(the)h(next)g(com-)177
+191 y(mand)c(generates)k(one)e(or)g(more)f(w)o(arnings,)g(errors,)i(or)f(sev)
+o(ere)h(errors.)19 b(F)m(or)13 b(the)g(purp)q(oses)i(of)d(this)h(command,)177
+241 y(a)g(blank)f(line)h(coun)o(ts)g(as)h(a)e(command,)e(so)j(b)q(e)h(sure)g
+(to)f(place)g(the)h Fl(tolerate)d Fr(command)g(imm)o(ediately)f(ab)q(o)o(v)o
+(e)177 291 y(the)15 b(command)c(ab)q(out)j(whic)o(h)f(y)o(ou)h(wish)f(to)h(b)
+q(e)h(toleran)o(t.)177 401 y Fl(Syntax)21 b(:)g(tolerate)f(=)i("tolerate")177
+451 y(Example:)e(tolerate)177 561 y Fr(The)15 b(tolerate)f(command)d(w)o(as)j
+(in)o(tro)q(duced)h(to)e(allo)o(w)g(F)m(unnelW)m(eb)g(\(i.e.)g(the)i
+Fl(fw)e Fr(command\))e(to)j(b)q(e)h(tested)g(in)177 611 y(a)f(script)g(under)
+h(conditions)f(whic)o(h)f(w)o(ould)h(normally)d(cause)k(it)e(to)h(ab)q(ort)g
+(the)g(script.)177 741 y Fo(3.15.7.21)48 b(T)l(race)177 841
+y Fr(The)13 b Fl(trace)e Fr(command)e(turns)k(on)f(or)g(o\013)g(command)d
+(tracing)j(during)g(script)h(execution.)18 b(By)12 b(default,)g(tracing)177
+891 y(is)i(turned)h(o\013.)177 1001 y Fl(Syntax)43 b(:)21 b(trace)g(=)g
+("trace")g([s)g(\("on")g(|)h("off"\)])177 1051 y(Examples:)e(trace)h(on)395
+1101 y(trace)g(off)177 1211 y Fr(The)14 b Fl(trace)f Fr(command)e(w)o(as)j
+(in)o(tro)q(duced)h(to)f(assist)g(in)f(the)i(debugging)e(of)h(regression)h
+(test)g(scripts.)177 1342 y Fo(3.15.7.22)48 b(W)l(rite)177
+1441 y Fr(The)15 b Fl(write)e Fr(command)f(accepts)k(a)e(double-quoted)h
+(argumen)o(t)e(and)h(writes)i(it)e(follo)o(w)o(ed)f(b)o(y)h(an)g(EOL)h(to)f
+(the)177 1491 y(console)k(\(standard)g(output\).)29 b(There)19
+b(is)e(no)g(need)h(to)g(double)f(an)o(y)g(double)g(quotes)h(o)q(ccurring)g
+(within)f(the)177 1541 y(string.)177 1651 y Fl(Syntax)43 b(:)21
+b(write)g(=)g("write")g(s)g(string)177 1701 y(Examples:)f(write)h("Now)g
+(about)g(to)g(start)g(the)g(next)g(test.")395 1751 y(write)g("You)g(don't)g
+(need)g(to)g(")h(double)e(enclosed)g(double)h(quotes.")177
+1861 y Fr(The)13 b Fl(write)f Fr(command)d(w)o(as)k(added)f(so)h(as)g(to)f
+(allo)o(w)f(regression)j(testing)e(scripts)i(to)e(inform)f(the)i(user)g(of)f
+(their)177 1911 y(progress.)177 2041 y Fo(3.15.7.23)48 b(W)l(riteu)177
+2141 y Fr(The)14 b Fl(writeu)e Fr(command)e(is)j(iden)o(tical)g(to)g(the)h
+Fl(write)e Fr(command)e(except)15 b(that)e(it)g(underlines)h(the)g(text)g(on)
+f(an)177 2191 y(additional)f(follo)o(wing)f(output)k(line.)177
+2301 y Fl(Syntax)43 b(:)21 b(writeu)g(=)g("writeu")f(s)i(string)177
+2351 y(Examples:)e(writeu)h("Test)f(6")177 2511 y Fi(3.16)70
+b(Concluding)22 b(Remarks)177 2625 y Fr(This)d(c)o(hapter)i(de\014nes)f(the)g
+(seman)o(tics)f(of)f(the)i(F)m(unnelW)m(eb)f(program.)32 b(As)20
+b(stated)g(at)f(the)h(start)g(of)f(this)177 2675 y(c)o(hapter,)g(this)f(do)q
+(cumen)o(t)f(tak)o(es)h(precedence)i(o)o(v)o(er)e(the)g(F)m(unnelW)m(eb)f
+(program.)27 b(While)17 b(the)h(de\014nition)f(of)177 2725
+y(F)m(unnelW)m(eb)12 b(in)h(this)g(c)o(hapter)g(is)g(reasonably)g(solid,)e
+(it)i(is)f(far)h(from)e(w)o(atertigh)o(t,)h(and)h(it)f(is)h(hop)q(ed)g(that)g
+(it)g(can)177 2774 y(b)q(e)g(tigh)o(tened)g(further)g(in)f(future)h(v)o
+(ersions.)18 b(All)12 b(constructiv)o(e)i(criticism)d(will)g(b)q(e)i
+(gratefully)e(receiv)o(ed)j(b)o(y)e(the)177 2824 y(author)i(Ross)g(William)o
+(s)d(\()p Fl(ross@spam.adelaide.)o(edu.a)o(u)p Fr(\).)1032
+2940 y(100)p eop
+%%Page: 101 102
+101 101 bop 177 376 a Fj(Chapter)34 b(4)177 607 y Fp(F)-10
+b(unnelW)g(eb)41 b(Installation)177 846 y Fr(This)14 b(c)o(hapter)h(describ)q
+(es)h(ho)o(w)d(to)h(obtain,)f(compile,)e(and)j(install)f(F)m(unnelW)m(eb.)k
+(Y)m(ou)d(will)e(need:)239 955 y Fq(\017)21 b Fr(FTP)14 b(access)i(to)e(the)g
+(in)o(ternet)h Fm(or)e Fr(a)h(F)m(unnelW)m(eb)f(distribution)h(kit)f(on)h
+(disk.)239 1037 y Fq(\017)21 b Fr(A)d(Sun,)h(VMS)g(V)-5 b(AX,)18
+b(Macin)o(tosh,)h(or)f(PC)h Fm(or)f Fr(lots)g(of)f(extra)i(time)e(to)h(p)q
+(ort)h(F)m(unnelW)m(eb)e(to)h(a)g(new)281 1086 y(platform.)239
+1168 y Fq(\017)j Fr(Ab)q(out)15 b(four)f(megab)o(ytes)g(of)g(free)h(disk)f
+(space.)21 b(Y)m(ou)14 b(migh)o(t)e(b)q(e)j(able)g(to)f(install)f(it)h(with)h
+(less,)f(but)h(four)281 1217 y(megab)o(ytes)f(is)h(safe.)21
+b(The)15 b(distribution)f(kit)h(itself)f(is)h(ab)q(out)f(t)o(w)o(o)h(and)f(a)
+h(half)f(megab)o(ytes.)20 b(If)14 b(y)o(ou)g(are)281 1267 y(short)d(on)g
+(space,)h(y)o(ou)f(can)g(thro)o(w)g(a)o(w)o(a)o(y)f(ev)o(erything)h(after)g
+(installation)e(except)k(the)e(binary)g(executable)281 1317
+y(whic)o(h)j(will)e(consume)i(ab)q(out)f(half)g(a)h(megab)o(yte.)239
+1398 y Fq(\017)21 b Fr(A)14 b(C)g(compiler.)239 1479 y Fq(\017)21
+b Fr(An)16 b(acquain)o(tance)h(with)f(the)h(C)f(programming)d(language)j(and)
+g(the)h(abilit)o(y)d(to)j(compile)d(and)i(link)g(C)281 1529
+y(programs)d(on)g(y)o(our)h(mac)o(hine.)239 1610 y Fq(\017)21
+b Fr(Elemen)o(tary)13 b(systems)h(programming)c(kno)o(wledege)k(for)g(y)o
+(our)g(mac)o(hine.)239 1692 y Fq(\017)21 b Fr(Ab)q(out)14 b(an)g(hour.)177
+1802 y(Y)m(ou)f(will)f Fm(not)i Fr(need)g(an)o(y)f(sort)h(of)f(system)g
+(privileges)h(to)f(install)f(F)m(unnelW)m(eb,)h(unless)h(y)o(ou)f(w)o(an)o(t)
+g(the)h(F)m(unnel-)177 1851 y(W)m(eb)g(command)d Fl(fw)i Fr(to)h(b)q(e)g
+(automatically)d(a)o(v)n(ailable)h(to)i(ev)o(ery)o(one)g(on)g(y)o(our)g(mac)o
+(hine)e(as)i(w)o(ell)f(as)h(y)o(ourself.)177 2011 y Fi(4.1)70
+b(Obtaining)22 b(a)h(Cop)n(y)g(of)h(F)-6 b(unnelW)g(eb)177
+2125 y Fr(The)14 b(simplest)f(w)o(a)o(y)h(to)f(obtain)g(a)h(cop)o(y)g(of)f(F)
+m(unnelW)m(eb)h(is)f(b)o(y)h(anon)o(ymous)e(FTP)i(from:)243
+2235 y Fl(Machine)63 b(:)22 b(sirius.itd.adelaid)o(e.edu)o(.au)c
+([IP=129.127.40.3].)243 2285 y(Directory)h(:)j(~pub/funnelweb/)62
+b(\(or)22 b(a)f(directory)f(of)h(similar)g(name\).)177 2395
+y Fr(It)d(is)f(not)g(clear)h(at)f(the)h(time)e(of)h(writing)g(whether)h(F)m
+(unnelW)m(eb)f(will)f(b)q(e)i(presen)o(ted)h(as)f(a)f(\\)p
+Fl(.tar)p Fr(")f(\014le,)i(or)177 2444 y(as)e(a)g(directory)h(tree,)g(or)f(b)
+q(oth.)25 b(Just)17 b(sni\013)f(around)g(and)g(use)g(y)o(our)g(common)d
+(sense.)27 b(Tw)o(o)15 b(p)q(oin)o(ts)h(deserv)o(e)177 2494
+y(atten)o(tion)e(ho)o(w)o(ev)o(er:)228 2604 y(1.)20 b(Be)15
+b(sure)g(to)f(use)h(the)f Fm(text)g Fr(transfer)h(mo)q(de)e(whenev)o(er)j(y)o
+(ou)d(transfer)i(ra)o(w)f(F)m(unnelW)m(eb)g(\014les.)19 b(Ho)o(w)o(ev)o(er,)
+281 2654 y(y)o(ou)13 b(should)h(use)h Fm(binary)f Fr(mo)q(de)e(for)i(T)m(AR)f
+(\014les)h(and)g(other)h(conglomerate)d(represen)o(tations.)228
+2735 y(2.)20 b(If)13 b(y)o(ou)g(ha)o(v)o(e)g(to)g(transfer)i(the)f(\014les)f
+(individually)m(,)d(don't)j(lump)f(all)g(the)i(F)m(unnelW)m(eb)f(\014les)g
+(in)o(to)g(a)g(single)281 2785 y(directory)m(.)20 b(Refer)14
+b(to)h(the)g(sections)g(that)f(follo)o(w)f(for)h(information)d(on)j(the)h
+(directory)g(tree)h(y)o(ou)e(should)281 2835 y(create)h(to)f(receiv)o(e)h
+(the)g(F)m(unnelW)m(eb)e(\014les.)1032 2940 y(101)p eop
+%%Page: 102 103
+102 102 bop 177 42 a Fr(If)13 b(anon)o(ymous)f(FTP)h(is)g(not)h(a)o(v)n
+(ailable)d(to)i(y)o(ou,)f(con)o(tact)i(the)g(author)f(for)g(up-to-date)h
+(information)c(on)j(other)177 91 y(c)o(hannels)i(of)e(distribution.)243
+207 y Fl(Name:)42 b(Dr)21 b(Ross)g(N.)h(Williams)243 257 y(Email:)e
+(ross@spam.adelaide)o(.edu.)o(au)243 307 y(Snail:)g(16)h(Lerwick)g(Avenue,)f
+(Hazelwood)g(Park)h(5066,)g(Australia.)177 468 y Fi(4.2)70
+b(Establishing)21 b(The)i(Directory)f(T)-6 b(ree)177 584 y
+Fr(A)o(t)15 b(this)g(stage,)f(w)o(e)h(will)e(assume)h(that)h(y)o(ou)f(ha)o(v)
+o(e)h(someho)o(w)e(obtained)h(a)h(set)g(of)f(\014les)h(that)g(are)g(supp)q
+(osed)h(to)177 634 y(b)q(e)f(F)m(unnelW)m(eb,)f(and)h(that)f(they)i(are)f
+(sitting)f(on)g(a)h(disk)f(on)h(the)g(mac)o(hine)e(on)i(whic)o(h)f(y)o(ou)g
+(wish)h(to)f(compile)177 684 y(and)g(install)f(F)m(unnelW)m(eb.)177
+758 y(The)f(\014rst)g(thing)f(y)o(ou)f(ha)o(v)o(e)h(to)g(do)g(is)h(to)f(mak)o
+(e)e(sure)k(that)e(the)h(F)m(unnelW)m(eb)e(directory)i(tree)h(has)e(b)q(een)i
+(correctly)177 808 y(unpac)o(k)o(ed.)19 b(The)14 b(directory)h(tree)g(should)
+e(lo)q(ok)g(lik)o(e)g(this.)243 924 y Fl(fwdir)151 b(-)22 b(Root)f(FunnelWeb)
+f(directory.)308 973 y(admin)86 b(-)22 b(Administrative)d(files.)308
+1023 y(answers)42 b(-)22 b(Answers)e(to)h(test)g(suite.)308
+1073 y(hackman)42 b(-)22 b(FunnelWeb)e(Hacker's)g(Manual.)308
+1123 y(results)42 b(-)22 b(For)f(test)g(results.)308 1173 y(scripts)42
+b(-)22 b(Test)f(scripts.)308 1222 y(sources)42 b(-)22 b(Source)e(code.)308
+1272 y(tests)86 b(-)22 b(Test)f(suite.)308 1322 y(userman)42
+b(-)22 b(FunnelWeb)e(User's)g(Manual.)177 1438 y Fr(The)e(follo)o(wing)d
+(sections)j(describ)q(e)i(the)e(con)o(ten)o(ts)g(of)f(eac)o(h)h(directory)g
+(in)f(alphab)q(etical)g(order.)29 b(Chec)o(k)18 b(the)177 1488
+y(con)o(ten)o(ts)g(to)f(mak)o(e)e(sure)j(that)f(y)o(ou)g(ha)o(v)o(e)f(ev)o
+(erything.)28 b(Do)16 b(not)h(b)q(ecome)g(fussed)h(if)e(y)o(our)g
+(con\014guration)h(is)177 1537 y(not)d(quite)f(as)h(sp)q(eci\014ed)h(as)e(it)
+g(is)h(v)o(ery)g(easy)g(for)f(installation)e(guides)j(suc)o(h)g(as)g(this)f
+(one)h(to)g(go)f(out)g(of)g(date)h(as)177 1587 y(minor)g(last)h(min)o(ute)f
+(c)o(hanges)i(and)g(up)q(dates)g(are)g(made)f(to)g(the)h(distribution)f(kit.)
+22 b(Chec)o(k)17 b(the)f(source)h(from)177 1637 y(whic)o(h)d(y)o(ou)f
+(obtained)h(the)g(kit,)f(and)h(if)f(it)h(is)f(di\013eren)o(t)i(to)q(o,)e(pro)
+q(ceed.)177 1778 y Fd(4.2.1)55 b(Admin)18 b(Directory)177 1879
+y Fr(The)c Fl(admin)e Fr(directory)i(con)o(tains)f(administrativ)o(e)e
+(\014les)j(to)f(do)g(with)g(licensing)g(and)g(suc)o(h.)18 b(It)c(is)f(also)f
+(a)h(catc)o(h-)177 1929 y(all)e(directory)i(for)e(\014les)i(that)f(don't)f(b)
+q(elong)h(an)o(ywhere)g(else.)18 b(A)o(t)12 b(the)h(time)e(of)g(writing,)g
+(it)h(is)f(not)h(clear)h(exactly)177 1979 y(what)h(will)e(b)q(e)j(in)e(the)i
+Fl(admin)e Fr(directory)m(.)18 b(Wh)o(y)13 b(not)h(tak)o(e)g(a)g(lo)q(ok?)177
+2120 y Fd(4.2.2)55 b(Answ)n(ers)20 b(Directory)177 2221 y Fr(The)13
+b Fl(answers)f Fr(directory)h(con)o(tains)g(the)g(\\correct)h(answ)o(ers")g
+(to)f(all)e(the)j(regression)g(testing)f(input)f(\014les.)18
+b(The)177 2271 y(regression)d(test)g(scripts)g(compare)e(these)j(\014les)e
+(to)g(the)g(\014les)g(generated)i(in)d(the)i Fl(results)d Fr(directory)m(.)
+177 2386 y Fl(an01.lis)20 b(...)h(an04.lis)177 2436 y(ex01.lis)f(...)h
+(ex16.lis)177 2486 y(ex01.out)f(...)h(ex10.out)177 2536 y(ex11.tex)f(...)h
+(ex16.tex)177 2586 y(generate.lis)177 2635 y(hi01.lis)f(...)h(hi10.lis)177
+2685 y(hi01.out)f(...)h(hi05.out)177 2735 y(hi06a.out)177 2785
+y(hi06b.out)177 2835 y(hi07a.out)1032 2940 y Fr(102)p eop
+%%Page: 103 104
+103 103 bop 177 42 a Fl(hi07b.out)177 91 y(hi08.out)20 b(...)h(hi10.out)177
+141 y(pr01.lis)f(...)h(pr10.lis)177 191 y(sc01.lis)f(...)h(sc29.lis)177
+241 y(tg01.lis)f(...)h(tg09.lis)177 291 y(tg01.out)f(...)h(tg09.out)177
+340 y(wv01.lis)f(...)h(wv06.lis)177 390 y(wv01.tex)f(...)h(wv06.tex)177
+532 y Fd(4.2.3)55 b(Hac)n(kman)18 b(Directory)177 634 y Fr(The)c
+Fl(hackman)f Fr(directory)i(con)o(tains)e(the)i Fl(.tex)e Fr(\014les)h(that)g
+(mak)o(e)e(up)i(the)h Fm(F)m(unnelWeb)h(Hacker's)e(Manual)p
+Fr(.)177 750 y Fl(h_ch0.tex)107 b(-)22 b(Preface,)e(etc.)177
+800 y(h_ch1.tex)107 b(-)22 b(Design.)177 850 y(h_ch2.tex)107
+b(-)22 b(Implementation.)177 900 y(h_ch3.tex)107 b(-)22 b(Modification.)177
+949 y(h_ch4.tex)107 b(-)22 b(Future.)177 999 y(h_cha.tex)107
+b(-)22 b(Appendices.)177 1049 y(h_manual.tex)41 b(-)22 b(Main)f(TeX)g(file.)
+177 1166 y Fr(See)15 b(the)f(commen)o(t)e(at)h(the)i(top)e(of)h
+Fl(h)p 769 1166 14 2 v 15 w(manual.tex)e Fr(\014le)h(for)h(instructions)g(on)
+g(ho)o(w)f(to)h(t)o(yp)q(eset)h(and)f(prin)o(t)f(the)177 1216
+y Fm(F)m(unnelWeb)j(Hacker's)f(Manual)p Fr(.)177 1290 y(There)j(is)e(no)h
+(need)g(to)g(read)g(or)g(prin)o(t)f(the)h Fm(F)m(unnelWeb)i(Hacker's)e
+(Manual)g Fr(unless)h(y)o(ou)e(in)o(tend)h(to)f(mo)q(dify)177
+1340 y(F)m(unnelW)m(eb.)177 1482 y Fd(4.2.4)55 b(Results)18
+b(Directory)177 1584 y Fr(The)f Fl(results)f Fr(directory)h(exists)g(as)g(a)g
+(target)g(directory)g(for)g(the)g(output)g(\014les)g(generated)h(b)o(y)e(F)m
+(unnelW)m(eb)177 1633 y(during)d(regression)i(testing.)j(This)13
+b(directory)h(is)g(distributed)f(empt)o(y)g(and)g(should)g(b)q(e)h(empt)o(y)e
+(at)h(the)h(start)g(of)177 1683 y(regression)i(testing.)22
+b(Ho)o(w)o(ev)o(er,)15 b(it)f(is)h(p)q(ermissible)f(for)h(the)g
+Fl(results)e Fr(directory)j(to)f(con)o(tain)f(\014les)h(generated)177
+1733 y(during)i(a)f(previous)h(test)h(run,)g(as)f(the)g(regression)h(testing)
+g(scripts)g(delete)g(sp)q(eci\014c)g(un)o(w)o(an)o(ted)f(\014les)g(b)q(efore)
+177 1783 y(eac)o(h)e(test)g(an)o(yw)o(a)o(y)m(.)177 1925 y
+Fd(4.2.5)55 b(Scripts)19 b(Directory)177 2026 y Fr(The)h Fl(scripts)e
+Fr(directory)i(stores)h(the)f(F)m(unnelW)m(eb)f(command)e(shell)i(scripts)i
+(that)e(are)h(used)g(to)g(p)q(erform)177 2076 y(regression)15
+b(testing.)177 2193 y Fl(master.fws)85 b(-)22 b(The)f(master)g(test)g
+(script.)f(This)h(is)g(the)g(one)h(you)f(run.)177 2243 y(test_gen.fws)41
+b(-)22 b(Script)e(to)i(generate)e(certain)g(tricky)h(input)g(files.)177
+2292 y(test_l.fws)85 b(-)22 b(Test)f(FunnelWeb)f(with)h(+L.)177
+2342 y(test_ld.fws)63 b(-)22 b(Test)f(FunnelWeb)f(with)h(+L)g(+B...)177
+2392 y(test_lo.fws)63 b(-)22 b(Test)f(FunnelWeb)f(with)h(+L)g(+O.)177
+2442 y(test_lo2.fws)41 b(-)22 b(Test)f(FunnelWeb)f(with)h(+L)g(+O)g(\(two)g
+(output)g(files\).)177 2492 y(test_lot.fws)41 b(-)22 b(Test)f(FunnelWeb)f
+(with)h(+L)g(+O)g(+T.)177 2541 y(test_lt.fws)63 b(-)22 b(Test)f(FunnelWeb)f
+(with)h(+L)g(+T.)177 2683 y Fd(4.2.6)55 b(Sources)19 b(Directory)177
+2785 y Fr(The)g Fl(sources)d Fr(directory)j(con)o(tains)f Fm(al)r(l)f
+Fr(of)g(the)i(C)f(source)h(\014les)f(required)h(to)f(build)f(a)h(F)m(unnelW)m
+(eb)f(binary)177 2835 y(executable.)i(In)14 b(the)h(follo)o(wing)c(list,)i
+(\014les)h(giv)o(en)g(without)f(an)h(extension)g(represen)o(t)j(b)q(oth)d
+Fl(.c)f Fr(and)h Fl(.h)f Fr(\014les.)1032 2940 y(103)p eop
+%%Page: 104 105
+104 104 bop 177 42 a Fl(analyse)151 b(-)22 b(The)f(analyser.)177
+91 y(as)261 b(-)22 b(Assertions.)177 141 y(clock)195 b(-)22
+b(A)f(clock)g(abstraction.)177 191 y(command)151 b(-)22 b(The)f(shell)g
+(command)f(interpreter.)177 241 y(data)217 b(-)22 b(Shared)e(data)h
+(structures)f(and)h(global)g(variables.)177 291 y(dump)217
+b(-)22 b(Functions)e(to)h(dump)g(internal)f(data)h(structures.)177
+340 y(environ.h)107 b(-)22 b(Lightweight)d(machine-dependent,)f
+(program-independent)g(header.)177 390 y(help)217 b(-)22 b(Module)e(to)i
+(write)f(out)g(help)g(messages.)177 440 y(help_gnu)129 b(-)22
+b(Function)e(to)h(write)g(out)g(the)g(GNU)h(license.)177 490
+y(help_gnu.txt)41 b(-)22 b(The)f(GNU)g(license)g(in)g(text)g(form.)177
+540 y(help_gnu.ctx)41 b(-)22 b(The)f(GNU)g(license)g(in)g(C)h(code)e(form.)
+177 589 y(list)217 b(-)22 b(A)f(list)g(abstraction.)177 639
+y(lister)173 b(-)22 b(Module)e(to)i(manage)e(the)i(listing)e(file.)177
+689 y(machin)173 b(-)22 b(Module)e(to)i(hold)f(machine-dependen)o(t,)e
+(program-dependent)f(stuff.)177 739 y(main.c)173 b(-)22 b(The)f(main\(\))g
+(program.)177 789 y(mapper)173 b(-)22 b(Module)e(to)i(read)f(files)g(into)f
+(memory.)177 839 y(memory)173 b(-)22 b(Memory)e(management.)177
+888 y(misc)217 b(-)22 b(Miscellaneous)d(functions.)177 938
+y(option)173 b(-)22 b(Command)e(line)h(option)g(processing.)177
+988 y(parser)173 b(-)22 b(The)f(parser.)177 1038 y(scanner)151
+b(-)22 b(The)f(scanner.)177 1088 y(section)151 b(-)22 b(A)f(section)g(number)
+f(abstraction.)177 1137 y(style.h)151 b(-)22 b(A)f(machine-independent,)d
+(program-independen)o(t)h(header)i(file.)177 1187 y(table)195
+b(-)22 b(A)f(table)g(abstraction.)177 1237 y(tangle)173 b(-)22
+b(The)f(tangler.)177 1287 y(texhead)151 b(-)22 b(Module)e(to)i(write)f(out)g
+(TeX)g(header)f(in)i(documentation)d(files.)177 1337 y(texhead.ctx)63
+b(-)22 b(The)f(TeX)g(header)g(in)g(C)h(code)f(form.)177 1386
+y(texhead.tex)63 b(-)22 b(The)f(TeX)g(header)g(in)g(TeX)g(form.)177
+1436 y(weave)195 b(-)22 b(The)f(weaver.)177 1486 y(writfile)129
+b(-)22 b(Output)e(abstraction.)177 1594 y Fr(The)13 b(\\)p
+Fl(.txt)p Fr(",)f(and)g(\\)p Fl(.tex)p Fr(")g(\014les)h(do)f(not)h
+(participate)g(in)f(the)i(compilation,)c(but)j(are)g(considered)h(part)f(of)f
+(the)177 1644 y(source)17 b(co)q(de)g(as)f(they)g(w)o(ere)h(used)f(to)g
+(generate)h(the)f(\\)p Fl(.ctx)p Fr(")f(\014les.)24 b(The)16
+b(\\)p Fl(.ctx)p Fr(")e(\014les)j(are)f(included)g(b)o(y)f
+Fl(.c)177 1693 y Fr(\014les)f(of)g(the)g(same)f(name.)k(They)d(do)g(not)g
+(need)h(to)e(b)q(e)i(compiled)d(themselv)o(es.)177 1831 y Fd(4.2.7)55
+b(T)-5 b(ests)19 b(Directory)177 1930 y Fr(The)13 b Fl(tests)f
+Fr(directory)h(stores)h(all)d(the)i(input)f(\014les)h(of)f(the)h(regression)h
+(test)g(suite.)k(These)c(come)d(in)h(t)o(w)o(o)g(kinds:)177
+1980 y(F)m(unnelW)m(eb)k(input)g(\014les)h(with)f(extensions)i(of)e(\\)p
+Fl(.fw)p Fr(",)f(and)h(F)m(unnelW)m(eb)g(include)h(\014les)g(with)f
+(extensions)h(of)177 2030 y(\\)p Fl(.fwi)p Fr(".)177 2137 y
+Fl(FunnelWeb)j(Input)h(Files:)243 2187 y(an01.fw)f(...)h(an04.fw)86
+b(-)21 b(Analyser)g(tests.)243 2237 y(ex01.fw)f(...)h(ex16.fw)86
+b(-)21 b(Examples)g(from)f(the)i(tutorial)e(in)h(user)g(manual.)243
+2287 y(generate.fw)259 b(-)21 b(Generates)f(a)i(few)f(other)g(tricky)f(input)
+h(files.)243 2337 y(hi01.fw)f(...)h(hi10.fw)86 b(-)21 b(Examples)g(from)f
+(the)i(hints)e(chapter)h(in)g(user)g(manual.)243 2386 y(pr01.fw)f(...)h
+(pr10.fw)86 b(-)21 b(Parser)g(tests.)243 2436 y(sc01_note.fw)237
+b(-)21 b(A)h(note)f(explaining)f(absence)g(of)h(sc01.fw)243
+2486 y(sc02.fw)f(...)h(sc29.fw)86 b(-)21 b(Scanner)g(tests.)243
+2536 y(tg01.fw)f(...)h(tg09.fw)86 b(-)21 b(Tangler)g(tests.)243
+2586 y(wv01.fw)f(...)h(wv06.fw)86 b(-)21 b(Weaver)g(tests.)177
+2685 y(FunnelWeb)f(Include)g(Files:)243 2735 y(ex09a.fwi)243
+2785 y(sc13a.fwi)f(...)j(sc13f.fwi)243 2835 y(sc15a.fwi)1032
+2940 y Fr(104)p eop
+%%Page: 105 106
+105 105 bop 243 42 a Fl(tg08a.fwi)177 180 y Fd(4.2.8)55 b(Userman)18
+b(Directory)177 279 y Fr(The)c Fl(userman)f Fr(directory)i(con)o(tains)e(the)
+i Fl(.tex)e Fr(\014les)h(that)g(mak)o(e)e(up)i(the)h Fm(F)m(unnelWeb)h
+(User's)e(Manual)p Fr(.)177 388 y Fl(u_ch0.tex)107 b(-)22 b(Preface,)e(etc.)
+177 438 y(u_ch1.tex)107 b(-)22 b(Tutorial.)177 488 y(u_ch2.tex)107
+b(-)22 b(Hints.)177 538 y(u_ch3.tex)107 b(-)22 b(Definition.)177
+588 y(u_ch4.tex)107 b(-)22 b(Installation.)177 637 y(u_ch5.tex)107
+b(-)22 b(Administration.)177 687 y(u_cha.tex)107 b(-)22 b(Appendices.)177
+737 y(u_manual.tex)41 b(-)22 b(Main)f(TeX)g(file.)177 846 y
+Fr(See)15 b(the)f(commen)o(t)e(at)h(the)i(top)e(of)h Fl(u)p
+769 846 14 2 v 15 w(manual.tex)e Fr(\014le)h(for)h(instructions)g(on)g(ho)o
+(w)f(to)h(t)o(yp)q(eset)h(and)f(prin)o(t)f(the)177 896 y Fm(F)m(unnelWeb)j
+(User's)e(Manual)p Fr(.)177 1055 y Fi(4.3)70 b(Compiling)20
+b(F)-6 b(unnelW)g(eb)177 1169 y Fr(The)17 b(F)m(unnelW)m(eb)g(source)h(co)q
+(de)f(is)g(en)o(tirely)g(con)o(tained)g(within)f(the)h Fl(sources)e
+Fr(directory)m(.)27 b(Ho)o(w)o(ev)o(er,)18 b(some)177 1219
+y(simple)13 b(script)h(\014les)g(and)g(mak)o(e\014les)f(can)h(b)q(e)h(found)e
+(in)g(the)i Fl(admin)e Fr(directory)m(.)177 1292 y(F)m(unnelW)m(eb)j(con)o
+(tains)h(some)f(mac)o(hine-dep)q(enden)o(t)h(comp)q(onen)o(ts,)f(so)h(b)q
+(efore)g(compiling)d(F)m(unnelW)m(eb,)i(y)o(ou)177 1341 y(need)e(to)e(sp)q
+(ecify)h(y)o(our)g(mac)o(hine)e(in)h(the)i(source)g(\014le)e
+Fl(environ.h)p Fr(.)k(T)m(o)c(do)g(this,)h(edit)f(the)i Fl(environ.h)c
+Fr(\014le)j(and)177 1391 y(set)i(exactly)f(one)g(of)f(the)i(mac)o(hine)d
+(name)h Fl(#define)p Fr(s)g(to)h Fl(1)p Fr(.)j(F)m(or)d(example,)e(on)i(the)g
+(Sun)g(y)o(ou)g(should)f(set:)177 1500 y Fl(#define)21 b(MAC)g(0)177
+1550 y(#define)g(SUN)g(1)177 1600 y(#define)g(VMS)g(0)177 1650
+y(#define)g(PC)43 b(0)177 1759 y Fr(There)17 b(should)e(b)q(e)h(little)f
+(di\016cult)o(y)f(compiling)f(F)m(unnelW)m(eb)i(for)g(an)o(y)g(of)g(these)i
+(platforms.)k(If)15 b(the)h(mac)o(hine)177 1809 y(on)g(whic)o(h)g(y)o(ou)g
+(are)g(compiling)d(F)m(unnelW)m(eb)j(is)g(not)g(one)g(of)g(the)h(ones)f
+(listed)g(in)g(the)h Fl(environ.h)d Fr(\014le,)i(then)177 1859
+y(c)o(ho)q(ose)g(the)h(closest)f(one)g(y)o(ou)f(can.)23 b(T)m(ry)15
+b(the)h Fl(SUN)f Fr(if)g(y)o(ou)g(are)h(running)f(a)g(non-Sun)h(Unix.)22
+b(If)16 b(y)o(ou)f(run)g(in)o(to)177 1908 y(serious)g(di\016culties,)f(y)o
+(ou)f(will)g(ha)o(v)o(e)h(to)g(customize)g Fl(machin.h)e Fr(and)i
+Fl(machin.c)f Fr(for)h(y)o(our)g(mac)o(hine.)j(See)e(the)177
+1958 y(commen)o(ts)d(in)i(these)h(\014les)f(for)g(instructions)g(on)g(ho)o(w)
+g(to)f(do)h(this.)177 2031 y(Once)h(y)o(ou)f(ha)o(v)o(e)f(sp)q(eci\014ed)j(a)
+e(target)g(mac)o(hine,)e(compile)g(F)m(unnelW)m(eb)i(b)o(y)f(p)q(oin)o(ting)g
+(y)o(our)h(C)g(compiler)e(at)i(all)177 2081 y(the)j(\\)p Fl(.c)p
+Fr(")f(\014les)h(in)f(the)h Fl(sources)e Fr(directory)m(.)27
+b(The)17 b(\\)p Fl(.txt)p Fr(",)e(and)h(\\)p Fl(.tex)p Fr(")g(\014les)h(do)f
+(not)g(participate)h(in)f(the)177 2131 y(compilation,)11 b(but)j(app)q(ear)h
+(in)e(the)i Fl(sources)e Fr(directory)i(b)q(ecause)g(they)g(w)o(ere)g(used)g
+(to)f(generate)h(the)g(\\)p Fl(.ctx)p Fr(")177 2180 y(\014les.)21
+b(The)15 b(\\)p Fl(.ctx)p Fr(")e(\014les)i(are)g(included)g(b)o(y)g
+Fl(.c)f Fr(\014les)h(of)f(the)h(same)f(name)f(and)i(do)f(not)h(need)h(to)e(b)
+q(e)h(compiled)177 2230 y(separately)m(.)j(Link)c(the)g(results.)177
+2303 y(The)g(result)g(of)f(all)f(this)h(should)g(b)q(e)h(a)f(binary)g
+(executable)h(called)f Fl(fw)p Fr(,)g(or)g Fl(fw.exe)p Fr(,)f(or)h
+Fl(fw.xxx)f Fr(where)i Fl(.xxx)f Fr(is)177 2353 y(whatev)o(er)j(\014le)e
+(extension)h(is)g(appropriate)g(on)f(the)h(target)g(mac)o(hine.)k(Clean)c(up)
+f(the)h Fl(sources)f Fr(directory)h(b)o(y)177 2403 y(deleting)f(all)f(the)h
+(listing)f(and)h(ob)r(ject)g(\014les.)177 2562 y Fi(4.4)70
+b(T)-6 b(esting)22 b(F)-6 b(unnelW)g(eb)177 2676 y Fr(Once)13
+b(y)o(ou)d(ha)o(v)o(e)h(obtained)g(a)g(binary)g(executable,)h(y)o(ou)f
+(should)g(test)h(F)m(unnelW)m(eb)f(b)q(efore)h(making)c(it)j(a)o(v)n(ailable)
+177 2725 y(to)j(users.)19 b(T)m(o)14 b(do)f(this:)228 2835
+y(1.)20 b(Set)14 b(the)h(default)e(directory)i(to)f(b)q(e)g(the)h
+Fl(scripts)d Fr(directory)m(.)1032 2940 y(105)p eop
+%%Page: 106 107
+106 106 bop 228 42 a Fr(2.)20 b(Cop)o(y)14 b(the)i(F)m(unnelW)m(eb)e
+(executable)i(in)o(to)e(the)i(scripts)g(directory)g(\(or)f(b)q(e)g(able)g(to)
+g(in)o(v)o(ok)o(e)f(it)g(from)f(the)281 91 y(scripts)i(directory\).)228
+174 y(3.)20 b(Edit)d(the)h(script)g Fl(master.fws)p Fr(.)27
+b(Lo)q(cate)18 b(the)g(section)g(called)f(\\De\014ne)h(Sym)o(b)q(ol)d(F)m(or)
+i(the)h(Ro)q(ot)e(T)m(est)281 224 y(Directory")g(and)g(de\014ne)i(the)e
+Fl(R)g Fr(sym)o(b)q(ol)f(to)h(p)q(oin)o(t)g(to)g(the)g(F)m(unnelW)m(eb)g(ro)q
+(ot)g(directory)h Fl(fwdir)p Fr(.)24 b(The)281 274 y(examples)13
+b(in)g(the)i(commen)o(ts)d(in)h(the)i(script)f(should)g(mak)o(e)f(it)g(clear)
+h(what)g(is)g(required.)228 356 y(4.)20 b(In)o(v)o(ok)o(e)13
+b(F)m(unnelW)m(eb)h(to)f(execute)j(the)f(master)e(test)i(script)g(with)e(the)
+i(command)c(line)i Fl(fw)22 b(+xmaster)177 472 y Fr(The)16
+b Fl(master.fws)e Fr(script)j(should)e(run)h(for)g(a)f(few)h(min)o(utes.)23
+b(If)15 b(all)g(go)q(es)h(w)o(ell,)f(y)o(ou)h(will)e(\014nd)i(a)g
+(di\013erences)177 521 y(rep)q(ort)g(on)f(y)o(our)g(screen)i(rep)q(orting)f
+(zero)g(di\013erences.)24 b(If)14 b(this)h(happ)q(ens,)h(then)g(F)m(unnelW)m
+(eb)f(has)g(b)q(een)h(fully)177 571 y(tested)h(and)e(is)h(ready)g(to)f(b)q(e)
+h(made)e(a)o(v)n(ailable)f(to)j(users.)24 b(Y)m(ou)15 b(should)g(delete)h
+(all)e(the)i(\014les)g(in)f(the)h Fl(results)177 621 y Fr(directory)f(and)f
+(pro)q(ceed)h(to)f(the)g(next)h(section)f(on)g(installing)e(F)m(unnelW)m(eb)h
+(for)h(users.)177 695 y(If)e(there)i(w)o(ere)f(one)g(or)g(more)e
+(di\013erences,)k(y)o(ou)d(can)g(either)i(giv)o(e)e(up)g(and)g(con)o(tact)h
+(the)g(author,)g(or)f(attempt)g(to)177 745 y(\014x)j(the)g(co)q(de)h(y)o
+(ourself.)21 b(If)14 b(y)o(ou)g(decide)i(to)f(\014x)f(the)i(co)q(de)g(y)o
+(ourself,)e(start)h(with)g(the)g(di\013erences)i(log)d(\014le)h(and)177
+795 y(follo)o(w)d(y)o(our)i(nose.)k(Go)q(o)q(d)c(luc)o(k!)177
+957 y Fi(4.5)70 b(Installing)21 b(F)-6 b(unnelW)g(eb)177 1072
+y Fr(A)o(t)15 b(this)g(stage)g(y)o(ou)f(should)h(ha)o(v)o(e)g(a)f
+Fl(fwdir)g Fr(directory)h(tree)h(somewhere)f(in)g(y)o(our)f(\014le)h(system.)
+20 b(Its)c(con)o(ten)o(ts)177 1122 y(should)g(b)q(e)g(almost)d(iden)o(tical)i
+(to)h(the)g(directory)g(con)o(ten)o(ts)h(sp)q(eci\014ed)g(earlier)f(in)f
+(this)h(c)o(hapter)g(except)h(there)177 1172 y(should)d(no)o(w)f(b)q(e)i(an)e
+(additional)g(binary)g(executable)i(\014le)f(sitting)f(in)h(the)g
+Fl(scripts)f Fr(directory)m(.)177 1246 y(T)m(o)g(mak)o(e)g(F)m(unnelW)m(eb)g
+(a)o(v)n(ailable)f(to)h(users,)i(y)o(ou)f(should:)228 1361
+y(1.)20 b(Mak)o(e)14 b(the)g(en)o(tire)h(directory)g(tree)g(readable)f(to)g
+(all)e(users.)228 1444 y(2.)20 b(Mo)o(v)o(e)15 b(the)h(binary)f(executable)i
+(from)d(the)i(scripts)g(directory)g(to)g(the)g Fl(admin)e Fr(directory)i
+Fm(or)f Fr(cop)o(y)h(it)f(to)281 1494 y(somewhere)f(con)o(v)o(enien)o(t)g
+(suc)o(h)h(as)f(a)g Fl(/bin)f Fr(directory)m(.)228 1577 y(3.)20
+b(Set)d(up)f(a)g(sym)o(b)q(ol,)f(path,)i(or)f(command)e(of)h(some)h(kind)g(b)
+o(y)g(the)h(name)e(of)h Fl(fw)g Fr(that)g(\\p)q(oin)o(ts")g(to)g(the)281
+1626 y(binary)h(executable.)30 b(If)18 b(p)q(ossible,)g(set)g(this)g(up)g(so)
+f(that)h(the)g Fl(fw)f Fr(sym)o(b)q(ol)f(is)i(a)o(v)n(ailable)d(to)i(all)g
+(users.)281 1676 y(Alternativ)o(ely)m(,)j(y)o(ou)f(can)h(inform)d(in)o
+(terested)22 b(users)f(of)e(ho)o(w)g(they)h(can)g(add)g(a)f(command)e(to)i
+(their)281 1726 y Fl(login)13 b Fr(command)e(\014le)j(to)f(mak)o(e)g(the)h
+(command)d(a)o(v)n(ailable)h(to)i(them.)177 1841 y(If)i(y)o(ou)g(are)h(short)
+f(of)g(disk)g(space)h(or)g(ha)o(v)o(e)f(a)g(system)g(that)g(is)g(stressed)j
+(in)d(some)f(other)i(w)o(a)o(y)m(,)e(it)h(ma)o(y)e(b)q(e)j(of)177
+1891 y(assistance)g(to)f(y)o(ou)f(to)g(kno)o(w)g(that)h(F)m(unnelW)m(eb)f
+(has)h(b)q(een)h(constructed)h(so)d(that)h(its)g(binary)f(executable)i(is)177
+1941 y Fm(total)r(ly)d(self)g(c)n(ontaine)n(d)p Fr(.)19 b(The)14
+b(binary)e(executable)j(do)q(es)f(not)g(rely)f(on)g(an)o(y)g(other)i(\014les)
+e(to)h(op)q(erate.)k(Nor)c(do)q(es)177 1991 y(it)f(care)h(ab)q(out)f(its)g(p)
+q(osition)g(in)g(the)g(\014le)h(system.)j(In)c(fact,)g(all)f(that)h(is)g
+(really)g(required)h(to)f(use)h(F)m(unnelW)m(eb)f(is)177 2040
+y(the)g(binary)e(executable)i(and)f(the)h Fm(F)m(unnelWeb)h(User's)e(Manual)p
+Fr(.)19 b(Th)o(us,)12 b(if)f(y)o(ou)g(are)i(short)f(of)g(disk)f(space,)i(y)o
+(ou)177 2090 y(can)j(mo)o(v)o(e)f(the)i(binary)e(executable)j(to)d(y)o(our)h
+(\\)p Fl(/bin)p Fr(")f(directory)i(and)f(delete)h(the)g(en)o(tire)f(F)m
+(unnelW)m(eb)g(tree.)177 2140 y(Ho)o(w)o(ev)o(er,)e(making)d(the)k(tree)g(a)o
+(v)n(ailable)d(to)h(users)j(is)e(encouraged)g(b)q(ecause:)239
+2255 y Fq(\017)21 b Fr(It)14 b(allo)o(ws)f(users)i(to)f(cop)o(y)f(the)i(tree)
+g(and)f(install)f(it)g(on)h(another)g(mac)o(hine)f(without)g(b)q(othering)h
+(y)o(ou.)239 2338 y Fq(\017)21 b Fr(It)12 b(allo)o(ws)g(users)h(access)i(to)d
+(the)h(T)813 2347 y(E)836 2338 y(X)g(co)q(de)g(for)f(the)h
+Fm(F)m(unnelWeb)h(User's)f(Manual)g Fr(and)g(the)g Fm(F)m(unnelWeb)281
+2388 y(Hacker's)h(Manual)p Fr(.)239 2470 y Fq(\017)21 b Fr(It)13
+b(allo)o(ws)e(users)j(access)g(to)e(the)h(regression)h(test)g(suite.)k(This)
+12 b(ma)o(y)f(not)h(seem)h(imp)q(ortan)o(t,)d(but)j(it)f(could)281
+2520 y(b)q(e)k(v)o(ery)f(con)o(v)o(enien)o(t)h(for)f(the)h(user)g(as)f(the)h
+Fl(ex*)f Fr(and)g Fl(hi*)g Fr(\014les)g(of)g(the)h(regression)g(test)g(suite)
+g(con)o(tain)281 2570 y(most)f(of)h(the)g(examples)g(from)e(the)j
+Fm(F)m(unnelWeb)h(User's)e(Manual)p Fr(.)26 b(By)16 b(making)e(them)h(a)o(v)n
+(ailable)f(y)o(ou)281 2620 y(will)e(sa)o(v)o(e)i(users)i(the)e(trouble)g(of)g
+(t)o(yping)f(them)g(in.)177 2735 y(Finally)m(,)i(y)o(ou)h(should)h(\014ll)f
+(in)g(and)h(send)g(o\013)g(a)g(F)m(unnelW)m(eb)f(registration)h(form.)24
+b(This)17 b(allo)o(ws)f(me)f(to)i(get)g(a)177 2785 y(handle)g(on)g(the)g
+(size)h(and)f(needs)h(of)f(the)g(user)h(base,)g(and)f(y)o(ou)f(to)h(b)q(e)h
+(k)o(ept)f(informed)f(of)g(new)h(F)m(unnelW)m(eb)177 2835 y(releases)f
+(\(optional\).)h(See)d(Section)h(5.4)d(for)i(more)f(information.)1032
+2940 y(106)p eop
+%%Page: 107 108
+107 107 bop 177 42 a Fi(4.6)70 b(Prin)n(ting)22 b(Man)n(uals)177
+157 y Fr(F)m(unnelW)m(eb)d(comes)g(with)g(t)o(w)o(o)g(man)o(uals,)f(a)h
+Fm(F)m(unnelWeb)i(User's)e(Manual)h Fr(and)f(a)g Fm(F)m(unnelWeb)i(Hacker's)
+177 207 y(Manual)p Fr(.)k(Instructions)17 b(for)f(ho)o(w)f(to)h(t)o(yp)q
+(eset)h(and)f(prin)o(t)g(these)h(man)o(uals)d(app)q(ear)i(at)g(the)g(top)g
+(of)f(the)i(main)177 257 y(T)200 266 y(E)223 257 y(X)d(\014les)h(for)e(these)
+i(man)o(uals)d Fl(u)p 709 257 14 2 v 16 w(manual.tex)f Fr(and)j
+Fl(h)p 1059 257 V 16 w(manual.tex)p Fr(.)177 332 y(There)e(is)f(no)g(need)h
+(to)f(prin)o(t)g(the)h Fm(F)m(unnelWeb)h(Hacker's)f(Manual)g
+Fr(unless)f(y)o(ou)g(in)o(tend)g(to)g(mo)q(dify)e(F)m(unnelW)m(eb.)177
+381 y(Ho)o(w)o(ev)o(er,)k(y)o(ou)g(should)g(mak)o(e)f(a)h(few)g(copies)h(of)f
+(the)h Fm(F)m(unnelWeb)h(User's)e(Manual)h Fr(a)o(v)n(ailable)d(for)i(users,)
+i(or)e(at)177 431 y(least)i(let)f(them)f(kno)o(w)h(where)h(the)g(T)765
+440 y(E)788 431 y(X)f(source)i(for)e(the)h Fm(F)m(unnelWeb)h(User's)e(Manual)
+h Fr(is)f(k)o(ept)h(so)f(that)g(they)177 481 y(can)g(t)o(yp)q(eset)i(and)d
+(prin)o(t)h(it)g(themselv)o(es.)177 643 y Fi(4.7)70 b(Installation)21
+b(Problems?)177 759 y Fr(If)e(y)o(ou)g(run)g(in)o(to)g(an)o(y)g(problems)f
+(installing)f(F)m(unnelW)m(eb,)j(please)g(write)f(a)g(short)h(rep)q(ort)g
+(describing)g(the)177 809 y(problem)14 b(and)i(mail)d(it)i(to)g(the)h(author)
+g(Ross)f(Williams)e(\()p Fl(ross@spam.adelai)o(de.ed)o(u.au)o
+Fr(\).)21 b(I)15 b(ma)o(y)f(not)h(b)q(e)177 859 y(able)g(to)g(help)g(y)o(ou)f
+(with)h(it)f(immediately)l(,)e(but)j(I)g(certainly)g(w)o(an)o(t)g(to)f(kno)o
+(w)h(that)g(a)f(problem)g(exists)i(so)f(that)177 909 y(it)f(can)g(b)q(e)g
+(corrected)i(in)e(future)g(releases)i(of)d(F)m(unnelW)m(eb.)1032
+2940 y(107)p eop
+%%Page: 108 109
+108 108 bop 1032 2940 a Fr(108)p eop
+%%Page: 109 110
+109 109 bop 177 379 a Fj(Chapter)34 b(5)177 613 y Fp(F)-10
+b(unnelW)g(eb)41 b(Administration)177 881 y Fi(5.1)70 b(In)n(tro)r(duction)
+177 999 y Fr(Whether)21 b(a)e(computer)g(program)f(is)h(useful)h(dep)q(ends)h
+(not)f(just)f(on)g(the)i(functionalit)o(y)d(pro)o(vided)h(b)o(y)g(the)177
+1049 y(program,)13 b(but)i(also)g(on)g(the)g(totalit)o(y)f(of)g(the)i
+(culture)g(and)e(services)j(surrounding)e(it)g(suc)o(h)g(as)g(license)h
+(costs,)177 1098 y(the)j(qualit)o(y)e(of)h(do)q(cumen)o(tation,)f(presence)k
+(of)d(a)g(standard)h(and)f(so)g(on.)31 b(This)19 b(c)o(hapter)g(addresses)h
+(these)177 1148 y(issues)15 b(from)d(a)i(user)h(p)q(ersp)q(ectiv)o(e.)177
+1315 y Fi(5.2)70 b(The)22 b(User's)h(Commitme)o(n)n(t)d(T)-6
+b(o)24 b(F)-6 b(unnelW)g(eb)177 1434 y Fr(One)20 b(of)f(the)i(problems)d
+(that)i(migh)o(t)d(prev)o(en)o(t)k(p)q(oten)o(tial)e(users)i(from)c(using)j
+(F)m(unnelW)m(eb)f(is)g(the)h(lev)o(el)f(of)177 1483 y(commitm)o(en)o(t)14
+b(that)j(it)f(requires.)27 b(As)17 b(so)q(on)g(as)g(the)g(user)h(starts)f
+(creating)g(F)m(unnelW)m(eb)f Fl(.fw)g Fr(\014les,)h(the)h(user)177
+1533 y(b)q(ecomes)c(dep)q(enden)o(t)h(on)e(the)h(F)m(unnelW)m(eb)f(program,)f
+(as)h(the)h(\014les)g(so)f(created)i(will)d(b)q(ecome)i(unmanageable)177
+1583 y(if)i(the)h(F)m(unnelW)m(eb)f(program)f(w)o(ere)i(to)g(b)q(ecome)f(una)
+o(v)n(ailable)e(for)j(some)e(reason.)27 b(There)17 b(are)g(a)g(n)o(um)o(b)q
+(er)e(of)177 1633 y(w)o(a)o(ys)f(in)g(whic)o(h)h(computer)f(programs)f(can)i
+(b)q(ecome)f(una)o(v)n(ailable,)e(including)i(op)q(erating)g(system)h
+(upgrades,)177 1683 y(cop)o(yrigh)o(t)d(problems,)f(inabilit)o(y)f(to)h
+(\014x)h(bugs,)g(or)g(just)h(the)f(inabilit)o(y)e(of)h(the)i(program)d(to)i
+(b)q(e)h(p)q(orted)g(to)f(a)f(new)177 1732 y(target)k(platform.)177
+1809 y(The)j(fact)f(is)g(that)h(F)m(unnelW)m(eb)e(de\014nes)j(an)e(input)g
+(language)g(and)g(that)g(curren)o(tly)h(there)h(is)e(only)f(one)i(im-)177
+1859 y(plemen)o(tation)f(of)h(the)i(language.)32 b(Users)20
+b(will)d(only)h(write)i(programs)d(using)i(that)g(language)e(if)h(they)i
+(feel)177 1908 y(comfortable)12 b(ab)q(out)i(the)h(a)o(v)n(ailabili)o(t)o(y)c
+(of)i(its)h(implemen)o(tatio)o(n.)177 1985 y(I)i(ha)o(v)o(e)g(b)q(een)i
+(critically)d(a)o(w)o(are)h(of)g(these)i(issues)f(throughout)f(the)h(dev)o
+(elopmen)o(t)e(of)h(F)m(unnelW)m(eb)g(and)g(ha)o(v)o(e)177
+2034 y(tak)o(en)i(ev)o(ery)g(p)q(ossible)g(step)h(to)f(mak)o(e)e(F)m(unnelW)m
+(eb)h(a)h(solid)e(base)j(on)o(to)e(whic)o(h)h(to)f(build)g(programs.)28
+b(The)177 2084 y(follo)o(wing)11 b(p)q(oin)o(ts)j(describ)q(e)i(the)e
+(actions)g(I)g(ha)o(v)o(e)g(tak)o(en.)295 2161 y Fo(GNU)19
+b(license:)i Fr(F)m(unnelW)m(eb's)16 b(C)g(source)i(co)q(de)f(has)g(b)q(een)g
+(released)h(under)f(GNU)g(General)295 2210 y(Public)c(License)h(V)m(ersion)f
+(2.)18 b(This)13 b(means)f(that)h(the)h(source)g(co)q(de)g(to)f(F)m(unnelW)m
+(eb)f(will)g(alw)o(a)o(ys)295 2260 y(b)q(e)18 b(a)o(v)n(ailable)c(to)j(an)o
+(y)o(one)f(who)h(w)o(an)o(ts)g(it.)26 b(The)17 b(F)m(unnelW)m(eb)f(program)f
+(can)i(nev)o(er)h(b)q(e)g(tak)o(en)295 2310 y(a)o(w)o(a)o(y)13
+b(from)f(y)o(ou.)295 2386 y Fo(P)o(ortabili)o(t)n(y:)22 b Fr(F)m(unnelW)m(eb)
+17 b(has)g(b)q(een)h(designed)f(and)g(written)g(to)g(b)q(e)g(extremely)g(p)q
+(ortable.)295 2436 y(First,)g(all)e(F)m(unnelW)m(eb)h(really)g(do)q(es)h(is)f
+(read)h(and)g(write)f(text)h(\014les.)26 b(This)17 b(mak)o(es)e(it)h(easy)h
+(to)295 2486 y(mak)o(e)9 b(p)q(ortable.)17 b(Second,)11 b(F)m(unnelW)m(eb)f
+(is)g(written)g(in)g(the)h(C)f(programmi)o(ng)d(language)p
+Fo([ANSI])295 2536 y Fr(with)15 b(p)q(ortabilit)o(y)e(as)i(a)f(ma)r(jor)g
+(design)g(goal.)20 b(Third,)14 b(F)m(unnelW)m(eb)h(has)f(already)h(b)q(een)h
+(p)q(orted)295 2586 y(to)d(four)h(p)q(opular)e(platforms:)k(SunOS,)e(V)-5
+b(AX)14 b(VMS,)f(PC,)g(and)g(Macin)o(tosh)g(and)h(it)f(should)g(not)295
+2635 y(pro)o(v)o(e)j(hard)g(to)f(mo)o(v)o(e)f(it)h(to)h(others.)24
+b(F)m(ourth,)15 b(F)m(unnelW)m(eb)g(comes)h(with)f(a)g(h)o(uge)h(automated)
+295 2685 y(regression)g(test)f(suite.)20 b(This)14 b(mak)o(es)f(it)h(easy)h
+(to)f(pinp)q(oin)o(t)f(problems)g(when)i(it)f(is)g(mo)o(v)o(ed)f(to)h(a)295
+2735 y(new)f(platform.)j(P)o(ortabilit)o(y)11 b(is)h(imp)q(ortan)o(t)f(b)q
+(ecause,)k(ev)o(en)e(if)f Fm(you)h Fr(are)g(not)g(using)f(F)m(unnelW)m(eb)295
+2785 y(on)17 b(some)e(funn)o(y)h(platform,)f(y)o(ou)h(ma)o(y)e(w)o(an)o(t)j
+(to)f(send)h(a)g(computer)f(program)f(written)i(using)295 2835
+y(F)m(unnelW)m(eb)d(to)f(someone)h(who)f(do)q(es.)1032 2940
+y(109)p eop
+%%Page: 110 111
+110 110 bop 295 42 a Fo(Qualit)o(y:)27 b Fr(The)20 b(F)m(unnelW)m(eb)e
+(source)j(co)q(de)f(is)f(high)f(qualit)o(y)g(co)q(de.)35 b(Although)19
+b(it)f(has)i(not)295 91 y(b)q(een)13 b(formally)c(dev)o(elop)q(ed)j(under)g
+(an)o(y)f(particular)h(co)q(ding)f(standard,)h(it)f(is)h(w)o(ell)f(designed)h
+(and)295 141 y(do)q(cumen)o(ted.)18 b(Design)c(decisions)g(ha)o(v)o(e)g(not)g
+(b)q(een)h(tak)o(en)f(ligh)o(tly)m(.)295 216 y Fo(Do)q(cumen)o(tation:)20
+b Fr(F)m(unnelW)m(eb)c(is)g(w)o(ell)f(do)q(cumen)o(ted)h(b)o(y)g(this)h(man)o
+(ual)d(and)i(b)o(y)g(the)g Fm(F)m(un-)295 266 y(nelWeb)j(Hacker's)f(Manual)p
+Fr(.)29 b(This)17 b(is)g(imp)q(ortan)o(t)f(b)q(ecause)j(it)e(means)f(that)i
+(if)e(y)o(ou)h(w)o(an)o(t)g(to)295 316 y(send)c(someone)e(a)g(program)f
+(written)i(using)g(F)m(unnelW)m(eb,)f(y)o(ou)g(can)h(simply)d(p)q(oin)o(t)i
+(them)g(to)h(this)295 366 y(man)o(ual)c(rather)k(than)f(ha)o(ving)e(to)h
+(explain)g(it)h(all)e(y)o(ourself.)17 b(It)10 b(is)h(also)f(comforting)e(for)
+j(managers)295 415 y(who)j(are)h(con)o(trolling)e(source)i(co)q(de)g(to)f
+(kno)o(w)g(that)g(the)h(format)d(in)i(whic)o(h)g(the)g(source)i(co)q(de)f(is)
+295 465 y(written)g(is)e(w)o(ell-do)q(cumen)o(ted.)295 540
+y Fo(Standardizatio)o(n:)i Fr(Users)g(who)e(create)h(source)h(\014les)e
+(using)g(F)m(unnelW)m(eb)g(are)h(not)f(only)f(com-)295 590
+y(mitting)j(to)j(the)g(F)m(unnelW)m(eb)e(program;)h(they)h(are)g(also)f(in)o
+(v)o(esting)g(in)g(the)h(F)m(unnelW)m(eb)f(lan-)295 640 y(guage.)22
+b(If)14 b(F)m(unnelW)m(eb's)h(language)f(c)o(hanges)i(radically)d(for)i(some)
+f(reason,)i(then)g(this)f(in)o(v)o(est-)295 690 y(men)o(t)f(b)o(y)h(users)h
+(will)d(b)q(e)j(undermined.)k(T)m(o)14 b(protect)i(this)f(in)o(v)o(estmen)o
+(t,)f(I)h(in)o(tend)g(to)f(main)o(tain)295 740 y(an)g(\\o\016cial")e(v)o
+(ersion)j(of)e(F)m(unnelW)m(eb)h(whose)g(language)f(will)g(not)h(c)o(hange)h
+(radically)m(,)d(at)h(least)295 789 y(not)h(in)g(a)f(non)h(bac)o(kw)o(ard)g
+(compatible)e(manner.)177 864 y(It)17 b(is)f(m)o(y)f(hop)q(e)h(that)h(the)g
+(com)o(bination)d(of)i(these)h(factors)g(will)e(alleviate)g(an)o(y)h(fears)h
+(that)g(users)h(ma)o(y)c(ha)o(v)o(e)177 914 y(ab)q(out)g(committing)c(their)
+15 b(source)g(\014les)f(to)g(F)m(unnelW)m(eb.)177 1077 y Fi(5.3)70
+b(Do)r(cumen)n(tation)177 1194 y Fr(The)14 b(follo)o(wing)e(F)m(unnelW)m(eb)h
+(do)q(cumen)o(tation)g(is)h(a)o(v)n(ailable:)264 1311 y Fl("FunnelWeb)20
+b(User's)64 b(Manual":)20 b(Tutorial,)g(Hints,)h(Reference)f(Manual.)264
+1360 y("FunnelWeb)g(Hacker's)g(Manual":)g(Notes)h(on)g(Design)g(and)g
+(Implementation.)177 1477 y Fr(Ev)o(ery)o(one)14 b(in)o(v)o(olv)o(ed)e(with)h
+(F)m(unnelW)m(eb)f(should)h(read)h(the)g Fm(F)m(unnelWeb)h(User's)e(Manual)p
+Fr(.)19 b(It)13 b(con)o(tains)g(ev)o(ery-)177 1527 y(thing)h(y)o(ou)f(need)i
+(to)f(kno)o(w)f(ab)q(out)h(ho)o(w)f(to)h(use)h(F)m(unnelW)m(eb.)i(In)d(fact,)
+f(y)o(ou)h(are)g(reading)g(it)f(no)o(w!)177 1602 y(The)18 b
+Fm(F)m(unnelWeb)h(Hacker's)f(Manual)g Fr(is)f(for)g(those)h(who)f(w)o(an)o(t)
+g(to)g(install,)g(mo)q(dify)m(,)e(\014x,)i(\014ddle)h(with,)f(and)177
+1652 y(generally)d(hac)o(k)g(the)g(F)m(unnelW)m(eb)f(C)h(source)h(co)q(de.)
+177 1727 y(Both)h(of)e(these)j(man)o(uals)c(are)j(shipp)q(ed)g(with)e(the)i
+(F)m(unnelW)m(eb)f(distribution)g(kit,)f(and)h(should)g(b)q(e)h(a)o(v)n
+(ailable)177 1777 y(on)g(y)o(our)f(mac)o(hine)f(in)i(the)g(form)e(of)h(LaT)m
+(eX)g(text)i(\014les.)23 b(If)16 b(y)o(ou)f(cannot)h(\014nd)g(them,)f(y)o(ou)
+g(can)h(obtain)f(them)177 1827 y(from)d(the)j(F)m(unnelW)m(eb)e(FTP)h(arc)o
+(hiv)o(e)g(\(see)i(Section)e(5.11\).)177 1990 y Fi(5.4)70 b(Registration)177
+2106 y Fr(If)13 b(y)o(ou)g(install)g(or)g(use)i(F)m(unnelW)m(eb,)d(please)i
+(register)h(b)o(y)e(\014lling)f(in)h(and)h(returning)g(the)g(registration)f
+(form)f(in)177 2156 y Fo(Figure)i(4)p Fr(.)k(F)m(eel)c(free)h(to)e(expand)i
+(the)f(form)e(if)h(there)i(is)f(not)g(enough)g(ro)q(om.)177
+2231 y(Email)h(the)j(form)e(to)h Fl(ross@spam.adelaide)o(.edu.)o(au)p
+Fr(,)e(or)i(snail)g(mail)e(it)i(to)g(Ross)g(William)o(s,)f(16)g(Lerwic)o(k)
+177 2281 y(Av)o(en)o(ue,)c(Hazelw)o(o)q(o)q(d)f(P)o(ark)g(5066,)f(Australia.)
+17 b(Y)m(ou)11 b(ma)o(y)e(wish)i(to)g(mak)o(e)e(a)i(con)o(tribution)g(when)g
+(y)o(ou)g(register.)177 2331 y(See)k(Section)f(5.5)f(for)h(more)f
+(information.)177 2494 y Fi(5.5)70 b(Supp)r(ort)177 2610 y
+Fr(F)m(unnelW)m(eb)13 b(is)h(released)h(\\as)f(is")f(under)i(a)e(GNU)h
+(license,)g(and)g(no)f(formal)f(supp)q(ort)i(is)g(a)o(v)n(ailable.)i(Y)m(ou)d
+(ha)o(v)o(e)177 2660 y(the)20 b(righ)o(t)e(to)h(mak)o(e)e(c)o(hanges)j(to)f
+(F)m(unnelW)m(eb)f(and)h(to)g(use)h(the)f(mo)q(di\014ed)f(v)o(ersions)h
+(created)i(b)o(y)d(random)177 2710 y(programmers.)e(Ho)o(w)o(ev)o(er,)e(this)
+g(is)g(discouraged)g(\(see)h(Section)g(5.9\).)177 2785 y(In)h(fact)g(the)h
+(supp)q(ort)g(that)f(is)g(most)f(needed)i(is)f(y)o(our)g(\014nancial)f(supp)q
+(ort)i(for)f(the)g(F)m(unnelW)m(eb)g(dev)o(elop)q(ers!)177
+2835 y(It)h(has)g(tak)o(en)h Fm(months)f Fr(of)g(full-tim)o(e)e
+Fm(unp)n(aid)j Fr(w)o(ork)e(to)h(bring)g(F)m(unnelW)m(eb)g(to)f(y)o(ou)h(in)g
+(its)g(curren)o(t)h(form.)26 b(I)1032 2940 y(110)p eop
+%%Page: 111 112
+111 111 bop 264 602 a Fl(+------------------)o(----F)o(unnel)o(Web)19
+b(Registration)g(Form-------------)o(----)o(-----)o(+)264 652
+y(|)j(1.)f(Date:)1350 b(|)264 702 y(|)1547 b(|)264 751 y(|)22
+b(2.)f(Title)g(and)g(name:)1132 b(|)264 801 y(|)1547 b(|)264
+851 y(|)22 b(3.)f(Internet)f(email)h(address:)957 b(|)264 901
+y(|)1547 b(|)264 951 y(|)22 b(4.)f(Snail)g(mail)g(address:)1044
+b(|)264 1000 y(|)1547 b(|)264 1050 y(|)22 b(5.)f(Work)g(phone)g(number)g
+(\(country,area,n)o(umber)o(\):)585 b(|)264 1100 y(|)1547 b(|)264
+1150 y(|)22 b(6.)f(Which)g(category)f(of)i(FunnelWeb)e(user)g(best)h
+(describes)f(you?)326 b(|)264 1200 y(|)153 b(Latent)86 b(-)21
+b(Installed)f(FunnelWeb,)g(but)h(don't)g(intend)f(to)i(use)f(it.)86
+b(|)264 1250 y(|)153 b(Beginner)42 b(-)21 b(Haven't)g(used)g(FunnelWeb)e
+(much)i(yet;)g(have)g(an)h(open)f(mind.)f(|)264 1299 y(|)153
+b(Casual)86 b(-)21 b(Use)g(FunnelWeb)f(occasionally.)542 b(|)264
+1349 y(|)153 b(Convert)64 b(-)21 b(Use)g(FunnelWeb)f(to)i(do)f(most)g
+(programming.)324 b(|)264 1399 y(|)153 b(Fanatic)64 b(-)21
+b(FunnelWeb)f(has)h(become)g(a)g(way)h(of)f(life.)369 b(|)264
+1449 y(|)1547 b(|)264 1499 y(|)22 b(7.)f(What)g(changes)g(or)g(new)g
+(features)f(would)h(you)g(like)g(to)h(see)f(in)g(FunnelWeb?)63
+b(|)264 1548 y(|)1547 b(|)264 1598 y(|)g(|)264 1648 y(|)g(|)264
+1698 y(|)g(|)264 1748 y(|)g(|)264 1797 y(|)g(|)264 1847 y(|)22
+b(8.)f(Do)h(you)f(want)g(to)g(be)h(kept)f(informed)f(of)h(new)g(FunnelWeb)f
+(developments?)106 b(|)264 1897 y(|)1547 b(|)264 1947 y(+------------------)o
+(-----)o(-----)o(-----)o(----)o(-----)o(-----)o(-----)o(-----)o(-----)o(----)
+o(-----)o(+)343 2038 y Fh(T)m(o)433 b(register)e(as)h(a)281
+2088 y(F)m(unnelW)m(eb)13 b(user,)i(please)f(\014ll)g(in)h(this)f(form)g(and)
+g(email)f(it)i(to)g Fe(ross@spam.)o(ad)o(ela)o(ide)o(.ed)o(u.a)o(u)p
+Fh(,)e(or)h(snail)g(mail)281 2138 y(it)f(to)f(Ross)h(Williams,)e(16)i(Lerwic)
+o(k)f(Av)o(en)o(ue,)g(Hazelw)o(o)q(o)q(d)f(P)o(ark)h(5066,)g(Australia.)18
+b(Y)m(ou)13 b(ma)o(y)f(wish)g(to)h(mak)o(e)e(a)281 2188 y(con)o(tribution)d
+(when)j(y)o(ou)g(register.)i(See)e(Section)e(5.5)i(for)g(more)f(information.)
+650 2279 y Fo(Figure)k(4)p Fr(:)k(The)d(F)m(unnelW)m(eb)e(registration)h
+(form.)1032 2940 y(111)p eop
+%%Page: 112 113
+112 112 bop 177 42 a Fr(don't)15 b(w)o(an)o(t)f(to)h(incon)o(v)o(enience)g
+(users)i(who)d(install)g(F)m(unnelW)m(eb,)g(pla)o(y)g(with)g(it,)h(and)f
+(then)i(hardly)e(ev)o(er)i(use)177 91 y(it.)i(If)c(y)o(ou)g(are)g(in)g(this)g
+(category)m(,)f(please)i(register,)g(but)f(don't)g(b)q(other)h(con)o
+(tributing.)j(Ho)o(w)o(ev)o(er,)c(if)f(y)o(ou)h(\014nd)177
+141 y(that)h(F)m(unnelW)m(eb)f(has)h(b)q(ecome)g(a)f(useful)h(programming)c
+(to)q(ol,)j(a)g(con)o(tribution)h(of)f(some)g(p)q(ositiv)o(e)g(m)o(ultiple)
+177 191 y(of)f(US$50)h(w)o(ould)f(b)q(e)h(appreciated.)177
+266 y(T)m(o)f(mak)o(e)g(a)g(con)o(tribution,)g(send)i(pa)o(ymen)o(t)e(with)g
+(a)h(completed)f(registration)h(form)e(\(see)j(Section)g(5.4\))e(to:)243
+382 y Fl(Renaissance)19 b(Software)h(Pty)h(Ltd)243 432 y(Email:)f
+(ross@spam.adelaide)o(.edu.)o(au)243 482 y(Snail:)g(16)h(Lerwick)g(Avenue,)f
+(Hazelwood)g(Park)h(5066,)g(Australia.)177 598 y Fr(P)o(a)o(ymen)o(t)14
+b(can)h(b)q(e)g(b)o(y)g(p)q(ersonal)g(or)g(bank)g(c)o(heque)h(to)e(an)o(y)h
+(bank)g(in)f(the)h(w)o(orld)g(or)g(b)o(y)f(Visa)h(or)g(Mastercard.)177
+648 y(Please)j(giv)o(e)e(the)h(card)g(name,)f(n)o(um)o(b)q(er,)g(expiry)h
+(date,)g(and)g(the)g(amoun)o(t)e(to)h(b)q(e)i(paid)e(in)g(US)h(dollars.)26
+b(All)177 698 y(con)o(tributions)16 b(will)f(b)q(e)i(appreciated)g(and)f
+(will)f(encourage)i(further)g(F)m(unnelW)m(eb)f(dev)o(elopmen)o(t.)24
+b(Ho)o(w)o(ev)o(er,)177 748 y(no)14 b(undertaking)g(is)f(made)g(whatso)q(ev)o
+(er)i(ab)q(out)f(ho)o(w)f(the)i(money)d(will)h(b)q(e)h(used.)177
+910 y Fi(5.6)70 b(Cop)n(yrigh)n(t)177 1026 y Fr(The)14 b(F)m(unnelW)m(eb)g
+(program)e(is)i(Cop)o(yrigh)o(t)894 1025 y(c)883 1026 y Fq(\015)f
+Fr(1992)g(Ross)h(William)o(s.)177 1101 y(Ho)o(w)o(ev)o(er,)28
+b(F)m(unnelW)m(eb)d(has)g(b)q(een)i(released)f(b)o(y)f(the)h(author)g(and)f
+(cop)o(yrigh)o(t)f(o)o(wner)i(Ross)f(William)o(s)177 1151 y(\()p
+Fl(ross@spam.adelaide.)o(edu.a)o(u)p Fr(\))16 b(under)k(V)m(ersion)f(2)f(of)g
+(the)i(GNU)e(General)h(Public)g(License)h(published)177 1201
+y(b)o(y)14 b(the)g(F)m(ree)h(Soft)o(w)o(are)f(F)m(oundation.)i(Here)f(are)g
+(some)e(w)o(a)o(ys)g(that)h(y)o(ou)g(can)g(obtain)f(a)h(cop)o(y)f(of)h(this)g
+(license.)239 1317 y Fq(\017)21 b Fr(The)14 b(license)h(app)q(ears)g(as)f(an)
+f(app)q(endix)h(in)g(the)g Fm(F)m(unnelWeb)i(Hacker's)f(Manual)p
+Fr(.)239 1401 y Fq(\017)21 b Fr(If)13 b(y)o(ou)h(ha)o(v)o(e)g(a)f(w)o(orking)
+g(v)o(ersion)h(of)f(F)m(unnelW)m(eb,)g(in)o(v)o(ok)o(e)g(it)h(with)f
+Fl(fw)22 b(+hlicense)e(+jlicense.txt)p Fr(.)239 1484 y Fq(\017)h
+Fr(Lo)q(ok)13 b(in)h(the)g Fl(help)f Fr(mo)q(dule)g(of)g(the)h(F)m(unnelW)m
+(eb)g(source)h(co)q(de.)239 1567 y Fq(\017)21 b Fr(FTP)14 b(the)h(license)f
+(from)e Fl(prep.ai.mit.edu)f Fr(in)j Fl(/pub/gnu/COPYIN)o(G-2)p
+Fr(.)239 1650 y Fq(\017)21 b Fr(W)m(rite)13 b(to)h(the)h(F)m(ree)f(Soft)o(w)o
+(are)g(F)m(oundation,)e(Inc.,)h(675)h(Mass)g(Av)o(e,)g(Cam)o(bridge,)d(MA)j
+(02139,)e(USA.)177 1767 y(The)i(license)h(allo)o(ws)d(y)o(ou)i(to)f
+(redistribute)i(F)m(unnelW)m(eb)f(and/or)f(mo)q(dify)e(it)j(under)g(certain)h
+(conditions.)i(The)177 1817 y(license)e(do)q(es)g(not)f(co)o(v)o(er)h(the)g
+Fm(F)m(unnelWeb)h(User's)f(Manual)g Fr(and)f Fm(F)m(unnelWeb)i(Hacker's)f
+(Manual)g Fr(whic)o(h)f(are)177 1867 y(distributed)h(under)f(a)g(simpler)f
+(license)h(that)g(prohibits)g(c)o(hanges.)177 1941 y(Note:)23
+b(F)m(unnelW)m(eb)15 b(is)h(distributed)g(WITHOUT)g(ANY)g(W)-5
+b(ARRANTY;)15 b(without)h(ev)o(en)g(the)h(implied)c(w)o(ar-)177
+1991 y(ran)o(t)o(y)h(of)f(MER)o(CHANT)m(ABILITY)h(or)g(FITNESS)g(F)o(OR)g(A)g
+(P)m(AR)m(TICULAR)f(PURPOSE.)177 2154 y Fi(5.7)70 b(No)n(w)n(arran)n(t)n(y)
+177 2270 y Fr(Users)15 b(of)e(F)m(unnelW)m(eb)g(should)g(b)q(e)h(a)o(w)o(are)
+f(that)h(F)m(unnelW)m(eb)e(comes)h(with)g(no)h(w)o(arran)o(t)o(y)m(.)j(Here)d
+(is)g(an)f(extract)177 2320 y(from)e(the)i(GNU)f(General)g(Public)g(License)i
+(V)m(ersion)e(2,)g(under)h(whic)o(h)g(F)m(unnelW)m(eb)e(is)i(distributed.)18
+b(F)m(or)12 b(more)177 2369 y(information)f(see)k(Section)g(5.6.)308
+2486 y Fl(11.)21 b(BECAUSE)f(THE)i(PROGRAM)e(IS)h(LICENSED)f(FREE)h(OF)h
+(CHARGE,)e(THERE)h(IS)g(NO)h(WARRANTY)264 2536 y(FOR)g(THE)f(PROGRAM,)f(TO)h
+(THE)g(EXTENT)g(PERMITTED)f(BY)h(APPLICABLE)f(LAW.)43 b(EXCEPT)20
+b(WHEN)264 2586 y(OTHERWISE)g(STATED)h(IN)g(WRITING)g(THE)g(COPYRIGHT)f
+(HOLDERS)g(AND/OR)h(OTHER)f(PARTIES)264 2635 y(PROVIDE)h(THE)g(PROGRAM)f("AS)
+h(IS")h(WITHOUT)e(WARRANTY)g(OF)h(ANY)h(KIND,)e(EITHER)h(EXPRESSED)264
+2685 y(OR)h(IMPLIED,)e(INCLUDING,)g(BUT)h(NOT)g(LIMITED)f(TO,)h(THE)h
+(IMPLIED)e(WARRANTIES)g(OF)264 2735 y(MERCHANTABILITY)f(AND)i(FITNESS)g(FOR)g
+(A)g(PARTICULAR)f(PURPOSE.)42 b(THE)21 b(ENTIRE)g(RISK)g(AS)264
+2785 y(TO)h(THE)f(QUALITY)f(AND)h(PERFORMANCE)f(OF)h(THE)g(PROGRAM)g(IS)g
+(WITH)g(YOU.)43 b(SHOULD)20 b(THE)264 2835 y(PROGRAM)h(PROVE)f(DEFECTIVE,)g
+(YOU)h(ASSUME)g(THE)g(COST)g(OF)g(ALL)h(NECESSARY)e(SERVICING,)1032
+2940 y Fr(112)p eop
+%%Page: 113 114
+113 113 bop 264 42 a Fl(REPAIR)21 b(OR)g(CORRECTION.)308 141
+y(12.)g(IN)g(NO)h(EVENT)f(UNLESS)f(REQUIRED)g(BY)i(APPLICABLE)d(LAW)j(OR)f
+(AGREED)g(TO)g(IN)g(WRITING)264 191 y(WILL)g(ANY)g(COPYRIGHT)f(HOLDER,)h(OR)g
+(ANY)g(OTHER)g(PARTY)g(WHO)g(MAY)g(MODIFY)g(AND/OR)264 241
+y(REDISTRIBUTE)f(THE)h(PROGRAM)f(AS)i(PERMITTED)d(ABOVE,)i(BE)g(LIABLE)g(TO)g
+(YOU)h(FOR)f(DAMAGES,)264 291 y(INCLUDING)f(ANY)h(GENERAL,)g(SPECIAL,)f
+(INCIDENTAL)f(OR)j(CONSEQUENTIAL)d(DAMAGES)h(ARISING)264 340
+y(OUT)i(OF)f(THE)g(USE)g(OR)h(INABILITY)e(TO)h(USE)g(THE)g(PROGRAM)g
+(\(INCLUDING)e(BUT)j(NOT)f(LIMITED)264 390 y(TO)h(LOSS)f(OF)g(DATA)g(OR)g
+(DATA)g(BEING)g(RENDERED)f(INACCURATE)g(OR)h(LOSSES)g(SUSTAINED)f(BY)264
+440 y(YOU)i(OR)f(THIRD)g(PARTIES)f(OR)h(A)h(FAILURE)e(OF)i(THE)f(PROGRAM)f
+(TO)i(OPERATE)e(WITH)h(ANY)g(OTHER)264 490 y(PROGRAMS\),)f(EVEN)h(IF)g(SUCH)g
+(HOLDER)g(OR)g(OTHER)g(PARTY)g(HAS)g(BEEN)g(ADVISED)f(OF)i(THE)264
+540 y(POSSIBILITY)e(OF)h(SUCH)g(DAMAGES.)177 726 y Fi(5.8)70
+b(Distribution)177 853 y Fr(Users)15 b(of)d(F)m(unnelW)m(eb)h(should)f(b)q(e)
+i(a)o(w)o(are)f(that)g(they)h(can)f(distribute)g(the)h(program)e(freely)m(.)
+17 b(The)d(follo)o(wing)c(is)177 903 y(an)h(extract)h(from)e(the)i(GNU)f
+(General)g(Public)g(License)h(V)m(ersion)g(2,)f(under)h(whic)o(h)f(F)m
+(unnelW)m(eb)g(is)g(distributed.)308 1038 y Fl(1.)21 b(You)g(may)h(copy)f
+(and)g(distribute)f(verbatim)g(copies)g(of)i(the)f(Program's)264
+1088 y(source)g(code)g(as)g(you)g(receive)g(it,)g(in)g(any)g(medium,)g
+(provided)f(that)h(you)264 1138 y(conspicuously)e(and)j(appropriately)d
+(publish)h(on)h(each)g(copy)g(an)h(appropriate)264 1187 y(copyright)e(notice)
+h(and)g(disclaimer)f(of)h(warranty;)f(keep)h(intact)g(all)g(the)264
+1237 y(notices)g(that)g(refer)f(to)i(this)f(License)f(and)h(to)h(the)f
+(absence)f(of)i(any)f(warranty;)264 1287 y(and)h(give)e(any)i(other)e
+(recipients)g(of)i(the)f(Program)f(a)i(copy)f(of)g(this)g(License)264
+1337 y(along)g(with)g(the)g(Program.)264 1436 y(You)h(may)f(charge)f(a)i(fee)
+f(for)g(the)g(physical)f(act)i(of)f(transferring)e(a)j(copy,)f(and)264
+1486 y(you)h(may)f(at)g(your)g(option)g(offer)f(warranty)g(protection)g(in)i
+(exchange)e(for)h(a)g(fee.)177 1622 y Fr(The)14 b(license)h(also)e(allo)o(ws)
+g(y)o(ou)g(other)i(freedoms.)j(F)m(or)13 b(more)g(information)e(see)k
+(Section)f(5.6.)177 1808 y Fi(5.9)70 b(Mo)r(di\014cation)177
+1935 y Fr(F)m(unnelW)m(eb)16 b(is)g(distributed)g(under)h(a)f(GNU)g(license,)
+h(and)f(y)o(ou)g(are)g(free)h(to)f(mo)q(dify)e(the)j(source)g(co)q(de)g(and)
+177 1985 y(distribute)12 b(mo)q(di\014ed)e(copies)i(\(see)h(Section)f(5.6\).)
+k(Ho)o(w)o(ev)o(er,)c(there)h(are)e(go)q(o)q(d)g(reasons)i(wh)o(y)e(y)o(ou)g
+(should)g(a)o(v)o(oid)177 2034 y(doing)i(this.)228 2170 y(1.)20
+b(If)13 b(y)o(ou)g(distribute)h(mo)q(di\014ed)d(v)o(ersions)j(of)f(F)m
+(unnelW)m(eb,)f(y)o(ou)h(run)h(the)g(risk)f(of)g(creating)g(a)g(v)o(ersion)h
+(that)281 2220 y(will)e(div)o(erge)i(from)f(the)h(\\o\016cial")e(v)o(ersion)i
+(of)f(F)m(unnelW)m(eb)h(that)g(I)f(in)o(tend)h(to)g(main)o(tain.)228
+2318 y(2.)20 b(If)13 b(y)o(ou)f(release)i(a)f(v)o(ersion)g(of)g(F)m(unnelW)m
+(eb)f(with)h(a)f(c)o(hanged)i(input)f(language,)e(users)k(of)d(y)o(our)h(mo)q
+(di\014ed)281 2368 y(v)o(ersion)g(will)f(create)i(source)g(\014les)g(that)f
+(will)e(no)i(longer)g(w)o(ork)g(on)g(other)g(v)o(ersions)h(of)e(F)m(unnelW)m
+(eb.)17 b(The)281 2418 y(result)e(w)o(ould)e(b)q(e)h(c)o(haos.)177
+2553 y(F)m(or)d(these)i(reasons)g(I)e(request)j(that)d(y)o(ou)g(do)h(not)f
+(distribute)h(mo)q(di\014ed)e(v)o(ersions)j(of)e(F)m(unnelW)m(eb,)g
+(particularly)177 2603 y(v)o(ersions)19 b(with)g(a)f(mo)q(di\014ed)g
+(language.)31 b(Ho)o(w)o(ev)o(er,)20 b(if)e(y)o(ou)g(m)o(ust)g(distribute)h
+(a)f(v)o(ersion)h(with)g(a)f(mo)q(di\014ed)177 2653 y(language,)13
+b Fm(ple)n(ase)j(change)g(its)f(name)g Fr(\(i.e.)e(from)g(\\F)m(unnelW)m(eb")
+h(to)g(something)f(else\).)20 b(Please)c(also)d(allo)q(cate)177
+2702 y(a)19 b(new)h(\014le)f(extension)i(to)e(replace)h(\\)p
+Fl(.fw)p Fr(")e(as)i(the)g(extension)g(for)f(source)i(\014les)e(written)h(in)
+f(the)h(mo)q(di\014ed)177 2752 y(language.)177 2835 y(F)m(or)14
+b(more)f(information,)d(refer)15 b(to)f(the)g Fm(F)m(unnelWeb)i(Hacker's)f
+(Manual)p Fr(.)1032 2940 y(113)p eop
+%%Page: 114 115
+114 114 bop 177 42 a Fi(5.10)70 b(V)-6 b(ersions)177 157 y
+Fr(F)m(unnelW)m(eb)1502 b(w)o(as)177 207 y(created)19 b(in)f(1986)f(and)g(w)o
+(as)h(used)g(extensiv)o(ely)h(b)o(y)e(Ross)h(William)o(s)d(\()p
+Fl(ross@spam.adelaide.)o(edu.a)o(u)p Fr(\))g(for)177 257 y(three)k(y)o(ears.)
+29 b(Ho)o(w)o(ev)o(er,)18 b(V)m(ersion)g(1.0)e(w)o(as)h(written)h(in)f(Ada)h
+(and)f(w)o(as)g(not)g(v)o(ery)h(p)q(ortable)g(\(it)f(w)o(as)g(fairly)177
+307 y(V)-5 b(AX/VMS)16 b(sp)q(eci\014c\).)24 b(Da)o(vid)14
+b(Hulse)i(\()p Fl(dave@cs.adelaide.e)o(du.au)o Fr(\))d(to)q(ok)i(the)h
+(\014rst)g(step)g(to)o(w)o(ards)f(a)g(re-)177 357 y(lease)j(b)o(y)e
+(translating)g(the)i(Ada)e(co)q(de)i(in)o(to)e(C.)h(Ross)f(Williams)e(then)j
+(extensiv)o(ely)h(rew)o(ork)o(ed)f(the)h(C)e(co)q(de,)177 406
+y(making)c(it)h(robust)i(and)e(p)q(ortable,)h(adding)f(new)h(features,)h(and)
+f(p)q(olishing)e(it)i(to)f(its)h(curren)o(t)i(form.)199 523
+y Fl(Vers)43 b(Lang)f(Created)h(Released)63 b(Author)217 b(Copyright)129
+b(Licensing)199 572 y(----)43 b(----)f(-------)h(--------)63
+b(--------------)41 b(-------------)g(---------)199 622 y(V1.0)i(Ada)64
+b(1986)109 b(Never)129 b(Ross)43 b(Williams)f(Ross)21 b(Williams)199
+672 y(V2.0)43 b(C)108 b(1989)h(Never)129 b(David)21 b(Hulse)108
+b(Public)21 b(domain)42 b(No)21 b(restriction.)199 722 y(V3.0)43
+b(C)108 b(1992)h(May-1992)63 b(Ross)43 b(Williams)f(Ross)21
+b(Williams)42 b(GNU)21 b(release.)177 838 y Fr(This)14 b(man)o(ual)d(w)o(as)j
+(released)h(for:)286 954 y Fl(*)22 b(FunnelWeb)150 b(V3.0.)286
+1004 y(*)22 b(User's)e(Manual)64 b(V1.0.)286 1054 y(*)22 b(Hacker's)e(Manual)
+g(V1.0.)286 1104 y(*)i(TeX)f(Definitions)e(V1.0.)177 1266 y
+Fi(5.11)70 b(FTP)23 b(Arc)n(hiv)n(e)f(and)i(Author)177 1382
+y Fr(The)14 b(F)m(unnelW)m(eb)g(FTP)g(arc)o(hiv)o(e)g(is:)243
+1498 y Fl(Machine)63 b(:)22 b(sirius.itd.adelaid)o(e.edu)o(.au)c
+([IP=129.127.40.3].)243 1548 y(Directory)h(:)j(~pub/funnelweb/)62
+b(\(or)22 b(a)f(directory)f(of)h(similar)g(name\).)177 1664
+y Fr(The)14 b(author)g(of)g(F)m(unnelW)m(eb)f(and)h(this)g(man)o(ual)d(is:)
+243 1780 y Fl(Name:)42 b(Dr)21 b(Ross)g(N.)h(Williams)243 1830
+y(Email:)e(ross@spam.adelaide)o(.edu.)o(au)243 1880 y(Snail:)g(16)h(Lerwick)g
+(Avenue,)f(Hazelwood)g(Park)h(5066,)g(Australia.)177 1996 y
+Fr(I)11 b(in)o(tend)g(to)g(main)o(tain)d(an)i(\\o\016cial")f(v)o(ersion)i(of)
+f(F)m(unnelW)m(eb)h(whic)o(h)f(I)h(will)f(release)i(under)f(GNU)g(license)h
+(from)177 2046 y(time)d(to)h(time.)15 b(I)10 b(am)e(happ)o(y)i(to)g(receiv)o
+(e)h(constructiv)o(e)g(criticism)e(ab)q(out)h(F)m(unnelW)m(eb)g(and)f(its)h
+(do)q(cumen)o(tation.)177 2121 y(I)k(will)e(alw)o(a)o(ys)g(b)q(e)i(happ)o(y)f
+(to)h(receiv)o(e)h(mail)10 b(ab)q(out)k(F)m(unnelW)m(eb,)e(but)i(cannot)g
+(guaran)o(tee)g(that)f(I)h(will)e(b)q(e)i(able)177 2171 y(to)g(reply)g(to)g
+(it)f(immediately)l(.)1032 2940 y(114)p eop
+%%Page: 115 116
+115 115 bop 177 379 a Fj(App)s(endix)34 b(A)177 612 y Fp(Glossary)177
+854 y Fo(Analyser:)20 b Fr(A)15 b(comp)q(onen)o(t)f(of)h(the)g(F)m(unnelW)m
+(eb)g(program)e(that)i(c)o(hec)o(ks)i(the)e(macro)f(table)h(created)h(b)o(y)f
+(the)177 903 y(parser)g(for)f(errors.)19 b(F)m(or)14 b(example,)e(the)i
+(analyser)g(c)o(hec)o(ks)h(to)f(see)h(if)e(an)o(y)h(macro)e(without)i(a)f
+Fl(@Z)h Fr(has)g(not)g(b)q(een)177 953 y(called.)177 1029 y
+Fo(Argumen)o(t:)h Fr(A)d(string)f(delimited)f(b)o(y)h(blanks)g(app)q(earing)h
+(on)f(the)h(F)m(unnelW)m(eb)f(command)d(line.)17 b(Argumen)o(ts)177
+1079 y(are)d(used)h(to)f(con)o(trol)g(options.)177 1154 y Fo(Directiv)o(e:)j
+Fr(A)e(F)m(unnelW)m(eb)e(sp)q(ecial)i(sequence)i(or)d(co)q(op)q(erating)h
+(group)f(of)g(sp)q(ecial)g(sequences)j(that)e(do)f(not)177
+1204 y(form)e(part)i(of)g(a)f(macro)g(de\014nition.)18 b(A)13
+b(directiv)o(e)i(can)f(tak)o(e)g(the)g(form)f(of)g(a)g(pragma.)177
+1280 y Fo(Do)q(cumen)o(tation:)i Fr(Descriptiv)o(e)g(text.)177
+1355 y Fo(Do)q(cumen)o(tation)i(\014le:)25 b Fr(An)18 b(output)g(\014le,)h
+(pro)q(duced)g(b)o(y)f(the)g(W)m(ea)o(v)o(e)f(comp)q(onen)o(t)h(of)f(F)m
+(unnelW)m(eb,)h(that)177 1405 y(con)o(tains)c(t)o(yp)q(esetter)i(commands.)g
+(When)e(fed)g(in)o(to)f(the)i(appropriate)f(t)o(yp)q(esetter)i(program,)c
+(the)j(result)f(is)g(a)177 1455 y(t)o(yp)q(eset)i(image)11
+b(of)j(the)g(input)g(\014le.)177 1531 y Fo(F)l(ree)19 b(text:)24
+b Fr(The)17 b(text)h(in)e(an)h(input)g(\014le)g(that)g(remains)f(if)g(one)h
+(w)o(ere)h(to)e(remo)o(v)o(e)g(macro)g(de\014nitions)h(and)177
+1580 y(directiv)o(es.)177 1656 y Fo(F)l(unnelW)l(eb:)27 b Fr(This)19
+b(w)o(ord)f(has)i(a)e(n)o(um)o(b)q(er)g(of)h(di\013eren)o(t)h(meanings)d(all)
+h(p)q(ertaining)h(to)g(the)g(F)m(unnelW)m(eb)177 1706 y(system)g(of)g
+(programming.)32 b(1\))19 b(The)h(en)o(tire)g(system)g(of)f(programmi)o(ng)d
+(as)k(in)f(\\Ma)o(yb)q(e)h(F)m(unnelW)m(eb)f(can)177 1756 y(help.")k(2\))15
+b(The)h(computer)f(program)f(that)i(implem)o(en)o(ts)e(the)i(system)f(as)h
+(in)f(\\Run)g(it)g(through)g(F)m(unnelW)m(eb)177 1805 y(and)d(see)h(what)f
+(comes)f(out.")17 b(3\))12 b(The)g(language)f(implemen)o(ted)f(b)o(y)h(the)i
+(F)m(unnelW)m(eb)e(program)f(as)i(in)g(\\I)f(wrote)177 1855
+y(the)k(program)d(in)h(F)m(unnelW)m(eb.")18 b(or)13 b(\\I)h(wrote)g(the)h
+(program)d(in)i(Ada)f(using)h(F)m(unnelW)m(eb.".)177 1931 y
+Fo(F)l(unnelW)l(eb)g(\014le:)j Fr(A)d(\014le)g(whose)g(con)o(ten)o(ts)h(are)g
+(written)f(in)f(the)i(F)m(unnelW)m(eb)e(language.)177 2006
+y Fo(F)l(unnelW)l(eb)h(language:)j Fr(The)d(language)f(in)g(whic)o(h)h(F)m
+(unnelW)m(eb)f(input)h(\014les)g(are)h(written.)177 2082 y
+Fo(F)l(unnelW)l(eb)i(prop)q(er:)24 b Fr(Usually)m(,)16 b(when)h(F)m(unnelW)m
+(eb)g(is)g(in)o(v)o(ok)o(ed,)f(it)h(pro)q(cesses)j(a)c(single)h(input)g
+(\014le)g(and)177 2132 y(then)e(terminates.)i(Ho)o(w)o(ev)o(er,)d(it)f(also)g
+(has)h(a)g(command)d(language)i(mo)q(de)f(in)i(whic)o(h)f(it)h(is)f(p)q
+(ossible)h(to)g(in)o(v)o(ok)o(e)177 2182 y(\\F)m(unnelW)m(eb")g(man)o(y)e
+(times.)19 b(This)14 b(leads)h(to)f(confusion)g(b)q(et)o(w)o(een)i(\\F)m
+(unnelW)m(eb")d(the)i(outer)g(program)e(and)177 2232 y(\\F)m(unnelW)m(eb")19
+b(the)h(inner)g(program.)34 b(T)m(o)18 b(a)o(v)o(oid)h(this)g(confusion,)i
+(the)f(inner)g(F)m(unnelW)m(eb)f(is)h(sometimes)177 2281 y(referred)c(to)e
+(as)g(\\F)m(unnelW)m(eb)f(prop)q(er".)177 2357 y Fo(FW:)i Fr(An)f
+(abbreviation)f(for)g(\\F)m(unnelW)m(eb")g(that)h(is)g(used)h(wherev)o(er)g
+(appropriate.)177 2433 y Fo(Include)f(\014le:)j Fr(A)d(\014le)g(read)h(in)e
+(b)o(y)h(F)m(unnelW)m(eb)f(as)h(the)h(result)f(of)g(an)f(include)h(pragma)e
+(\()p Fl(@i)22 b(filename)p Fr(\).)177 2508 y Fo(Input)16 b(\014le:)k
+Fr(An)o(y)c(\014le)f(read)h(in)f(b)o(y)g(F)m(unnelW)m(eb.)22
+b(The)16 b(phrase)g(\\the)g(input)f(\014le")g(refers)i(to)f(the)g(ro)q(ot)f
+(input)177 2558 y(\014le)f(\(sp)q(eci\014ed)i(using)d(the)i
+Fl(+F)e Fr(option\).)177 2634 y Fo(Journal)h(\014le:)k Fr(An)c(output)g
+(\014le)g(con)o(taining)f(a)h(cop)o(y)f(of)h(the)g(output)h(sen)o(t)g(to)e
+(the)i(user's)g(console)f(during)g(an)177 2683 y(in)o(v)o(o)q(cation)f(of)g
+(F)m(unnelW)m(eb.)18 b(In)13 b(other)i(systems,)f(this)g(\014le)f(is)h
+(sometimes)e(called)i(a)f(\\log)g(\014le".)177 2759 y Fo(Listing)g(\014le:)k
+Fr(An)d(output)h(\014le)e(summarizing)e(the)k(result)f(of)g(pro)q(cessing)h
+(an)e(input)h(\014le.)177 2835 y Fo(Macro:)19 b Fr(A)14 b(binding)f(of)g(a)h
+(name)f(to)g(a)h(string.)1032 2940 y(115)p eop
+%%Page: 116 117
+116 116 bop 177 42 a Fo(Macro)14 b(de\014nition)o(:)h Fr(A)d(construct)i(app)
+q(earing)e(in)g(a)g(F)m(unnelW)m(eb)f(\014le)h(that)h(binds)f(a)g(name)f(to)h
+(a)f(text)i(string.)177 91 y(A)h(F)m(unnelW)m(eb)f(\014le)h(consists)h(of)f
+(a)f(series)i(of)f(macro)e(de\014nitions)i(surrounded)h(b)o(y)f(do)q(cumen)o
+(tary)f(text.)177 166 y Fo(Mapp)q(er:)18 b Fr(A)13 b(comp)q(onen)o(t)f(of)g
+(the)h(F)m(unnelW)m(eb)f(program)g(that)g(reads)i(in)e(the)i(input)e(\014le)h
+(and)g(creates)h(a)f(cop)o(y)177 216 y(of)g(it)h(in)f(memory)m(.)177
+291 y Fo(Option:)j Fr(An)e(parameter)f(in)o(ternal)f(to)i(the)f(F)m(unnelW)m
+(eb)g(program)f(whic)o(h)h(can)h(b)q(e)f(con)o(trolled)g(b)o(y)h(command)177
+340 y(line)g(argumen)o(ts)f(or)h(pragmas.)177 415 y Fo(Output)h(\014le:)21
+b Fr(An)o(y)15 b(\014le)g(written)h(b)o(y)f(F)m(unnelW)m(eb.)22
+b(This)16 b(includes)g(listing,)e(journal,)g(pro)q(duct,)i(and)g(do)q(cu-)177
+465 y(men)o(tation)e(\014les.)21 b(\(W)m(arning:)f(During)14
+b(most)g(of)g(F)m(unnelW)m(eb's)h(dev)o(elopmen)o(t)f(the)i(term)e(\\output)h
+(\014le")g(w)o(as)177 515 y(also)10 b(used)i(to)f(refer)h(to)f(what)g(are)g
+(no)o(w)f(called)h(\\pro)q(duct)h(\014les".)17 b(This)11 b(turned)g(out)g(to)
+g(b)q(e)h(extremely)e(confusing)177 565 y(and)j(so)h(the)f(term)g(\\pro)q
+(duct)h(\014le")f(w)o(as)g(in)o(v)o(en)o(ted)g(to)h(distinguish)e(the)i
+(generic)g(from)e(the)i(sp)q(eci\014c.)19 b(Ho)o(w)o(ev)o(er,)177
+614 y(as)14 b(this)g(w)o(as)g(a)f(late)h(mo)q(di\014cation,)d(y)o(ou)j(ma)o
+(y)e(\014nd)i(some)f(o)q(ccurrences)k(of)c(the)i(old)e(use)h(of)g(\\output)g
+(\014le".\).)177 689 y Fo(P)o(arser:)20 b Fr(A)15 b(comp)q(onen)o(t)f(of)h
+(the)h(F)m(unnelW)m(eb)e(program)g(that)h(pro)q(cesses)i(the)f(tok)o(en)f
+(list)g(generated)h(b)o(y)f(the)177 739 y(scanner)i(and)f(pro)q(duces)h(a)f
+(macro)e(table)i(and)f(a)h(do)q(cumen)o(t)f(list.)23 b(The)17
+b(parser)g(mainly)c(analyses)j(the)g(input)177 789 y(\014le)e(at)g(the)g(syn)
+o(tactic)h(lev)o(el,)e(but)h(also)f(do)q(es)i(some)e(ligh)o(t)o(w)o(eigh)o(t)
+f(seman)o(tic)h(c)o(hec)o(king)h(to)q(o.)177 863 y Fo(Pragma:)j
+Fr(Single-line)11 b(directiv)o(es)j(that)e(app)q(ears)h(in)f(F)m(unnelW)m(eb)
+f(\014les.)18 b(Pragmas)11 b(con)o(trol)h(ev)o(erything)h(from)177
+913 y(maxim)n(um)d(input)k(line)f(length)h(to)g(t)o(yp)q(esetter)i(dep)q
+(endence.)k(A)14 b(pragma)e(line)i(starts)h(with)e(\\)p Fl(@p)p
+Fr(".)177 988 y Fo(Prin)o(ted)18 b(do)q(cumen)o(tation:)25
+b Fr(Sheets)c(of)d(pap)q(er)i(resulting)e(from)g(actually)g(t)o(yp)q
+(esetting)h(and)g(prin)o(ting)f(a)177 1038 y(do)q(cumen)o(tation)13
+b(\014le.)177 1112 y Fo(Pro)q(duct)e(\014le:)k Fr(An)c(output)g(\014le,)g
+(generated)h(b)o(y)e(the)i(T)m(angle)d(comp)q(onen)o(t)h(of)g(F)m(unnelW)m
+(eb,)h(that)g(con)o(tains)f(the)177 1162 y(expansion)k(of)g(the)h(macros)e
+(in)h(the)h(input)f(\014le.)19 b(Note:)g(Other)d(names)d(considered)j(for)d
+(this)i(w)o(ere:)k(generated)177 1212 y(\014le,)14 b(expanded)g(\014le,)g
+(result)g(\014le,)g(program)e(\014le,)h(and)h(tangle)g(\014le.)177
+1287 y Fo(Scanner:)j Fr(A)d(comp)q(onen)o(t)e(of)h(the)h(F)m(unnelW)m(eb)f
+(program)f(that)i(scans)g(a)f(cop)o(y)h(of)e(the)j(input)e(\014le)g(in)g
+(memory)177 1337 y(and)h(generates)i(a)e(line)g(list)f(and)h(a)g(tok)o(en)g
+(list)g(to)g(b)q(e)h(fed)f(to)g(the)h(parser.)20 b(The)15 b(scanner)g(pro)q
+(cesses)i(the)e(input)177 1386 y(at)f(the)g(lexical)f(lev)o(el.)177
+1461 y Fo(Script:)k Fr(A)d(\014le)f(con)o(taining)g(F)m(unnelW)m(eb)h(shell)f
+(commands.)177 1536 y Fo(Shell:)i Fr(A)c(command)d(language)i(in)o(terpreter)
+j(built)d(in)o(to)g(the)i(F)m(unnelW)m(eb)e(program.)16 b(The)11
+b(in)o(terpreter)i(allo)o(ws)177 1586 y(the)19 b(user)f(to)g(in)o(v)o(ok)o(e)
+f(F)m(unnelW)m(eb)g(prop)q(er)i(man)o(y)d(times)h(during)g(a)h(single)f(in)o
+(v)o(o)q(cation)g(of)g(the)h(F)m(unnelW)m(eb)177 1636 y(program.)177
+1710 y Fo(Sp)q(ecial)12 b(c)o(haracter:)17 b Fr(A)c(distinguished)f(c)o
+(haracter)i(in)d(a)h(F)m(unnelW)m(eb)g(input)g(\014le)h(that)f(in)o(tro)q
+(duces)h(a)g(sp)q(ecial)177 1760 y(sequence.)32 b(By)19 b(default)e(the)i(sp)
+q(ecial)f(c)o(haracter)h(is)f(\\)p Fl(@)p Fr(".)29 b(Ho)o(w)o(ev)o(er,)19
+b(it)f(can)g(b)q(e)g(c)o(hanged)h(using)e(the)i(\\)p Fl(@=)p
+Fr(")177 1810 y(sp)q(ecial)14 b(sequence.)177 1885 y Fo(Sp)q(ecial)f
+(sequence:)k Fr(A)12 b(sp)q(ecial)h(sequence)i(is)e(a)f(construct)i(in)o(tro)
+q(duced)f(b)o(y)g(the)g(sp)q(ecial)g(c)o(haracter.)19 b(Sp)q(ecial)177
+1934 y(sequences)e(are)e(used)g(to)g(de\014ne)g(a)f(structure)j(in)d(a)g(F)m
+(unnelW)m(eb)g(input)g(\014le)g(that)h(exists)g(at)f(a)g(higher)h(lev)o(el)f
+(to)177 1984 y(the)k(surrounding)g(text.)29 b(A)17 b(F)m(unnelW)m(eb)g(input)
+g(\014le)g(ma)o(y)f(b)q(e)i(considered)h(to)e(b)q(e)h(a)f(sequence)i(of)e
+(text)h(and)177 2034 y(sp)q(ecial)c(sequences.)177 2109 y Fo(T)l(angle:)21
+b Fr(This)16 b(is)f(the)h(name)e(for)i(the)g(comp)q(onen)o(t)e(of)h(F)m
+(unnelW)m(eb)g(that)h(generates)h(one)f(or)f(more)g(pro)q(duct)177
+2159 y(\014les)f(con)o(taining)f(the)i(expansion)e(of)h(macros)f(in)g(the)i
+(input)e(\014le.)177 2233 y Fo(T)o(yp)q(esetting)h(directiv)o(e:)j
+Fr(A)e(F)m(unnelW)m(eb)f(directiv)o(e)h(whose)h(sole)e(e\013ect)i(is)f(to)f
+(mo)q(dify)f(the)i(w)o(a)o(y)f(in)g(whic)o(h)177 2283 y(the)h(input)e(\014le)
+h(is)g(represen)o(ted)j(in)c(the)i(do)q(cumen)o(tation)d(\014le.)177
+2358 y Fo(W)l(ea)o(v)o(e:)23 b Fr(This)16 b(is)f(the)i(name)e(for)g(the)i
+(comp)q(onen)o(t)e(of)g(F)m(unnelW)m(eb)h(that)g(generates)h(a)f(do)q(cumen)o
+(tation)f(\014le)177 2408 y(con)o(taining)e(t)o(yp)q(esetting)i(commands)c
+(represen)o(ting)16 b(the)e(input)g(\014le.)1032 2940 y(116)p
+eop
+%%Page: 117 118
+117 117 bop 177 378 a Fj(App)s(endix)34 b(B)177 610 y Fp(References)177
+851 y Fo([ANSI])21 b Fr(Australian)f(Standard)h(AS)f(3955-1991,)f
+(\\Programming)e(Languages)j(|)g(C",)g(\(ISBN:)g(0-7262-)177
+901 y(6970-0\),)c(12)h(July)g(1991.)27 b(Iden)o(tical)17 b(to:)24
+b(In)o(ternational)17 b(Standard)g(ISO/IEC)h(9899:)23 b(1990)16
+b(Programming)177 951 y(Languages)e(|)f(C.)177 1025 y Fo([ANZE])k
+Fr(\\Australia,)f(New)g(Zealand)g(Encyclop)q(edia",)g(En)o(try:)22
+b(\\F)m(unnel-w)o(eb)15 b(spiders",)i(V)m(ol)e(7,)g(pp.)h(564{)177
+1075 y(565,)d(Ba)o(y)h(Bo)q(oks,)f(Sydney)m(,)h(\(ISBN:)g(85835{127{7\),)d
+(1975.)177 1150 y Fo([BSI82])f Fr(British)h(Standards)g(Institute,)g(\\Sp)q
+(eci\014cation)g(for)f(Computer)g(Programmi)o(ng)e(Language)i(P)o(ascal",)177
+1200 y(Publication)15 b(BS6192:1982,)e(British)j(Standards)g(Institute,)h(P)m
+(.O.)e(Bo)o(x)g(372,)g(Milton)f(Keynes,)j(MK146LO,)177 1249
+y(1982.)177 1324 y Fo([Gries81])8 b Fr(Gries)i(D.,)f(\\The)h(Science)h(of)e
+(Programming)o(",)e(Springer-V)m(erlag,)j(\(ISBN:)g(0-387-90641-X\),)c(1981.)
+177 1399 y Fo([Humphries91])13 b Fr(Humphries)i(B,)g(\\Neglected)h(P)o(o)q
+(ems)f(and)g(Other)h(Creatures",)h(Angus)f(and)f(Rob)q(ertson,)177
+1449 y(Sydney)m(,)f(\(ISBN:)g(0-207-17212-9\),)c(1991.)177
+1523 y Fo([Kernighan88])15 b Fr(Kernighan)i(B.W.,)g(Ritc)o(hie)f(D.M.,)g
+(\\The)h(C)g(Programming)c(Language",)k(\(second)h(edi-)177
+1573 y(tion,\\ANSI)13 b(C"\),)g(Pren)o(tice)j(Hall,)c(\(ISBN:)i
+(0-13-110362-8\),)d(1988.)177 1648 y Fo([Kn)o(uth83])j Fr(Kn)o(uth)h(D.E.,)f
+(\\The)h(WEB)g(System)f(of)h(Structured)h(Do)q(cumen)o(tation",)d(\(W)m(eb)i
+(User)h(Man)o(ual,)177 1698 y(V)m(ersion)e(2.5,)f(No)o(v)o(em)o(b)q(er,)f
+(1983\),)h(Stanford)g(Univ)o(ersit)o(y)m(,)g(1983.)177 1773
+y Fo([Kn)o(uth84])f Fr(Kn)o(uth)j(D.E.,)d(\\The)i(T)767 1781
+y(E)790 1773 y(Xb)q(o)q(ok",)f(Addison-W)m(esley)m(,)g(\(ISBN:)h
+(0-201-13448-9\),)d(1984.)177 1847 y Fo([Kn)o(uth84])h Fr(Kn)o(uth)i(D.E.,)e
+(\\Literate)i(Programmi)o(ng",)c Fm(The)k(Computer)h(Journal)p
+Fr(,)e(V)m(ol.)e(27,)i(No.)g(2,)f(pp.)h(97-)177 1897 y(111,)g(1984.)k(Note:)h
+(The)d(author)e(of)h(this)g(man)o(ual)d(has)j(not)g(y)o(et)g(obtained)g(this)
+g(pap)q(er.)177 1972 y Fo([Lamp)q(ort86])h Fr(Lamp)q(ort)h(L.,)g(\\L)723
+1967 y Fk(a)742 1972 y Fr(T)765 1984 y(E)788 1972 y(X:)g(A)g(Do)q(cumen)o(t)g
+(Preparation)h(System",)f(Addison-W)m(esley)m(,)g(\(ISBN:)177
+2022 y(0-201-15790-X\),)11 b(1986.)177 2096 y Fo([Roso)o(vsky90])16
+b Fr(Roso)o(vsky)f(H.,)h(\\The)g(Univ)o(ersit)o(y:)23 b(An)16
+b(Owner's)h(Man)o(ual",)e(W.W.Norton)f(&)j(Compan)o(y)m(,)177
+2146 y(Inc.,)d(\(ISBN:)g(0-393-02782-1\),)c(1990.)177 2221
+y Fo([Smith91])16 b Fr(Smith)h(L.M.C.,)g(\\An)i(Annotated)f(Bibliograph)o(y)f
+(of)h(Literate)h(Programming)o(",)d(A)o(CM)i(SIG-)177 2271
+y(PLAN)c(Notices,)h(V)m(ol.)d(26,)h(No.)g(1,)g(Jan)o(uary)h(1991.)177
+2345 y Fo([Strunk79])d Fr(Strunk)i(W.,)f(White)g(E.B.,)h(\\The)g(Elemen)o(ts)
+f(of)g(St)o(yle",)g(Third)h(Edition,)f(MacMillan)f(Publish-)177
+2395 y(ing)i(Compan)o(y)m(,)e(New)k(Y)m(ork,)e(\(ISBN:)h(0-02-418200-1\),)c
+(1979.)177 2470 y Fo([USDOD83])17 b Fr(\\The)i(Programming)c(Language)j(Ada)g
+(Reference)i(Man)o(ual",)e(American)g(National)f(Stan-)177
+2520 y(dards)e(Institute)f(Inc,)g(ANSI/MIL-STD-1815A-1983,)d(1983.)1032
+2940 y(117)p eop
+%%Page: 118 119
+118 118 bop 177 279 a Fp(Index)177 487 y Fr(+=)15 b(tutorial)e(26)177
+537 y(+=)i(85)177 587 y(2167A)e(51)177 637 y(==)i(tutorial)e(26)177
+687 y(==)i(85)177 737 y(@!)f(37)177 787 y(@!)g(75)177 837 y(@")g(29)177
+886 y(@\()g(29)177 936 y(@\))g(29)177 986 y(@+)h(20)177 1036
+y(@+)g(76)177 1086 y(@,)f(29)177 1136 y(@-)g(23)177 1186 y(@-)g(77)177
+1236 y(@1...)f(28)177 1286 y(@1...)g(86)177 1336 y(@<)h(20)177
+1386 y(@=)h(20)177 1436 y(@>)f(20)177 1486 y(@A...)f(34)177
+1536 y(@braces)j(20)177 1586 y(@braces)g(37)177 1636 y(@circum\015ex)e(74)177
+1686 y(@dollar)f(22)177 1736 y(@hash)i(76)177 1786 y(@i)f(30)177
+1836 y(@i)g(77)177 1886 y(@M)g(tutorial)f(24)177 1935 y(@M)h(85)177
+1985 y(@O)h(20)177 2035 y(@O)g(22)177 2085 y(@slash)f(37)177
+2135 y(@Z)h(tutorial)e(24)177 2185 y(@Z)i(85)177 2235 y(absen)o(t)g(command)c
+(93)177 2285 y(abstract)k(data)e(t)o(yp)q(e)i(55)177 2335 y(abstraction)f(co)
+q(de)h(56)177 2385 y(abstraction)f(data)g(26)177 2435 y(abstraction)g(set)h
+(59)177 2485 y(abuse)g(commen)o(ts)d(57)177 2535 y(access)k(random)c(50)177
+2585 y(ac)o(kno)o(wledgemen)o(ts)h(11)177 2635 y(action)h(execution)g(order)h
+(71)177 2685 y(Action)f(options)g(70)177 2735 y(actual)g(parameters)g(29)177
+2785 y(Ada)g(11)177 2835 y(Ada)g(44)1136 487 y(Ada)f(49)1136
+537 y(Ada)g(51)1136 587 y(Ada)g(55)1136 637 y(additiv)o(e)g(macros)g(26)1136
+687 y(additiv)o(e)g(macro)f(26)1136 737 y(additiv)o(ely)g(de\014ned)j(85)1136
+787 y(Adelaide)e(Univ)o(ersit)o(y)h(59)1136 837 y(admin)d(directory)k(102)
+1136 886 y(administration)c(F)m(unnelW)m(eb)i(109)1136 936
+y(ADT)g(55)1136 986 y(alias)f(49)1136 1036 y(Analyser)i(115)1136
+1086 y(analyser)g(65)1136 1136 y(analyser)g(88)1136 1186 y(analysis)f(static)
+h(88)1136 1236 y(Andrew)g(T)m(rev)o(orro)o(w)g(13)1136 1286
+y(animal)d(p)q(o)q(em)i(30)1136 1336 y(ann)o(ual)g(rep)q(ort)h(58)1136
+1386 y(anon)o(ymous)e(ftp)h(101)1136 1436 y(ANSI)h(109)1136
+1486 y(ANSI)g(117)1136 1536 y(answ)o(ers)h(correct)g(102)1136
+1586 y(answ)o(ers)g(directory)f(102)1136 1636 y(ANZE)g(117)1136
+1686 y(ANZE)g(19)1136 1736 y(applications)e(F)m(unnelW)m(eb)i(53)1136
+1786 y(arbitrary)f(c)o(haracters)j(inserting)e(in)o(to)f(text)i(74)1136
+1836 y(arc)o(hitecture)g(seman)o(tic)e(64)1136 1886 y(arc)o(hiv)o(e)h(ftp)f
+(114)1136 1935 y(arc)o(hiv)o(e)h(F)m(unnelW)m(eb)f(114)1136
+1985 y(argumen)o(t)f(command)g(line)h(67)1136 2035 y(argumen)o(ts)g(67)1136
+2085 y(Argumen)o(t)g(115)1136 2135 y(assertion)h(sev)o(erit)o(y)h(65)1136
+2185 y(assertion)f(status)h(90)1136 2235 y(A)o(trax)f(robustus)g(19)1136
+2285 y(attributes)g(macro)f(85)1136 2335 y(author)h(con)o(tacting)f(114)1136
+2385 y(B)h(option)f(68)1136 2435 y(Barry)h(Dwy)o(er)g(11)1136
+2485 y(Barry)g(Dwy)o(er)g(59)1136 2535 y(Barry)g(Humphries)f(19)1136
+2585 y(BASIC)h(57)1136 2635 y(Begg)g(Jerem)o(y)g(11)1136 2685
+y(binding)f(problems)f(57)1136 2735 y(bindings)h(macro)g(22)1136
+2785 y(blank)g(inden)o(tation)g(78)1136 2835 y(blank)g(inden)o(tation)g(78)
+1032 2940 y(118)p eop
+%%Page: 119 120
+119 119 bop 177 42 a Fr(blanks)14 b(trailing)e(42)177 91 y(b)q(oring)i
+(organization)e(50)177 141 y(Brissenden)k(Roger)e(11)177 191
+y(BSI82)g(117)177 241 y(BSI82)g(15)177 291 y(BSI82)g(18)177
+341 y(C)g(header)h(57)177 391 y(C)f(option)f(68)177 441 y(C)h(prepro)q
+(cessor)i(20)177 490 y(C)e(prepro)q(cessor)i(57)177 540 y(calls)e(macro)e(86)
+177 590 y(calls)i(n)o(um)o(b)q(er)f(23)177 640 y(camera)g(p)q(o)q(em)g(30)177
+690 y(case)i(dep)q(endence)i(67)177 740 y(c)o(hanging)c(sp)q(ecial)h(c)o
+(haracter)i(31)177 790 y(c)o(haracters)g(con)o(trol)d(42)177
+840 y(c)o(haracters)j(non-prin)o(table)d(96)177 889 y(c)o(haracters)j(unprin)
+o(table)d(71)177 939 y(c)o(hec)o(ks)i(macro)e(88)177 989 y(c)o(heer)j(hac)o
+(k)o(er's)e(35)177 1039 y(c)o(heer)i(programmer's)11 b(35)177
+1089 y(co)q(de)k(abstraction)f(56)177 1139 y(co)q(de)h(explaining)d(17)177
+1189 y(co)q(de)j(gardening)e(53)177 1239 y(co)q(de)i(vs)f(do)q(cumen)o
+(tation)f(32)177 1288 y(co)q(dify)h(command)d(93)177 1338 y(command)g(absen)o
+(t)k(93)177 1388 y(command)c(co)q(dify)j(93)177 1438 y(command)d(compare)i
+(93)177 1488 y(command)e(de\014ne)k(91)177 1538 y(command)c(de\014ne)k(94)177
+1588 y(command)c(di\013summary)g(95)177 1638 y(command)g(di\013zero)k(95)177
+1687 y(command)c(di\013)j(94)177 1737 y(command)d(eneo)k(95)177
+1787 y(command)c(execute)16 b(96)177 1837 y(command)11 b(exists)k(96)177
+1887 y(command)c(\014xeols)j(96)177 1937 y(command)d(fw)j(97)177
+1987 y(command)d(help)j(97)177 2037 y(command)d(here)k(98)177
+2086 y(command)c(in)o(terpreter)16 b(47)177 2136 y(command)11
+b(length)j(91)177 2186 y(command)d(line)j(argumen)o(t)e(67)177
+2236 y(command)f(line)j(in)o(terface)g(66)177 2286 y(command)d(line)j
+(options)f(syn)o(tax)h(67)177 2336 y(command)d(line)j(parsing)f(66)177
+2386 y(command)e(line)j(pro)q(cessing)h(66)177 2436 y(command)c(line)j(pro)q
+(cessing)h(92)177 2486 y(command)c(line)j(syn)o(tax)g(67)177
+2535 y(command)d(options)j(92)177 2585 y(command)d(quit)j(98)177
+2635 y(command)d(set)k(48)177 2685 y(command)c(set)k(98)177
+2735 y(command)c(shell)j(F)m(unnelW)m(eb)f(90)177 2785 y(command)e(sho)o(w)j
+(48)177 2835 y(command)d(sho)o(w)j(98)1136 42 y(command)d(skipto)i(98)1136
+91 y(command)e(status)j(99)1136 141 y(command)d(tolerate)j(100)1136
+191 y(command)d(trace)k(on)e(48)1136 241 y(command)e(trace)k(100)1136
+291 y(command)c(v)o(erb)j(fw)g(66)1136 341 y(command)d(writeu)j(100)1136
+391 y(command)d(write)j(100)1136 441 y(commands)d(F)m(unnelW)m(eb)i(90)1136
+490 y(commands)e(shell)j(93)1136 540 y(commands)d(useful)j(47)1136
+590 y(commen)o(ts)e(abuse)i(57)1136 640 y(commen)o(ts)e(eliminating)f(57)1136
+690 y(commen)o(ts)h(F)m(unnelW)m(eb)h(75)1136 740 y(commen)o(ts)f(37)1136
+790 y(commitm)n(en)o(t)g(F)m(unnelW)m(eb)h(109)1136 840 y(compare)g(command)e
+(93)1136 889 y(compilers)h(F)m(ortran)i(42)1136 939 y(compiling)d(F)m(unnelW)
+m(eb)i(105)1136 989 y(complete)g(example)f(38)1136 1039 y(conditionals)g
+(fudging)h(44)1136 1089 y(console)h(output)g(suppress)i(69)1136
+1139 y(constructs)g(section)e(83)1136 1189 y(con)o(tacting)f(author)h(114)
+1136 1239 y(con)o(ten)o(ts)h(table)e(of)h(81)1136 1288 y(con)o(text)g
+(in\014nite)g(68)1136 1338 y(con)o(text)g(listing)f(\014le)h(68)1136
+1388 y(con)o(text)g(69)1136 1438 y(con)o(trol)f(c)o(haracters)j(inserting)e
+(in)o(to)f(text)i(74)1136 1488 y(con)o(trol)e(c)o(haracters)j(42)1136
+1538 y(con)o(trollabilit)o(y)11 b(18)1136 1588 y(cop)o(yrigh)o(t)i(F)m
+(unnelW)m(eb)g(112)1136 1638 y(cop)o(yrigh)o(t)g(notice)h(1)1136
+1687 y(correct)h(answ)o(ers)g(102)1136 1737 y(cross)g(reference)h(n)o(um)o(b)
+q(ering)d(89)1136 1787 y(cross)i(referencing)g(17)1136 1837
+y(cross)g(referencing)g(89)1136 1887 y(cryptic)f(text)h(\014les)f(55)1136
+1937 y(D)f(option)g(49)1136 1987 y(D)g(option)g(68)1136 2037
+y(dangers)h(F)m(unnelW)m(eb)g(50)1136 2086 y(data)f(abstraction)h(26)1136
+2136 y(Da)o(vid)e(Hulse)j(11)1136 2186 y(debugger)f(53)1136
+2236 y(debugging)f(wholistic)g(53)1136 2286 y(default)g(options)h(49)1136
+2336 y(default)f(options)h(92)1136 2386 y(default)f(sp)q(ecial)h(c)o
+(haracter)i(72)1136 2436 y(de\014ne)f(command)c(91)1136 2486
+y(de\014ne)k(command)c(94)1136 2535 y(de\014nition)i(F)m(unnelW)m(eb)g(63)
+1136 2585 y(de\014nition)g(macro)g(85)1136 2635 y(de\014nition)g(macro)g(87)
+1136 2685 y(delete)i(output)f(\014les)g(49)1136 2735 y(delete)h(output)f
+(option)f(68)1136 2785 y(delimiting)e(macro)h(parameter)i(87)1136
+2835 y(dep)q(endence)i(case)f(67)1032 2940 y(119)p eop
+%%Page: 120 121
+120 120 bop 177 42 a Fr(dep)q(endencies)17 b(\014le)c(49)177
+91 y(dev)o(elopmen)o(t)g(time)g(17)177 141 y(diagnostics)h(lev)o(els)g(of)f
+(65)177 191 y(diagnostics)h(65)177 241 y(dictionary)f(hac)o(k)o(er's)i(35)177
+291 y(di\013)f(command)d(94)177 341 y(di\013erences)16 b(\014le)e(94)177
+391 y(di\013summary)d(command)g(95)177 441 y(di\013zero)k(command)c(95)177
+490 y(directiv)o(e)k(emphasis)e(85)177 540 y(directiv)o(e)i(literal)e(84)177
+590 y(directiv)o(e)i(newpage)f(37)177 640 y(directiv)o(e)h(table)e(of)h(con)o
+(ten)o(ts)h(37)177 690 y(directiv)o(e)g(title)e(37)177 740
+y(directiv)o(e)i(vskip)e(37)177 790 y(directiv)o(es)i(t)o(yp)q(esetter)h(81)
+177 840 y(directiv)o(es)f(32)177 889 y(directiv)o(es)g(83)177
+939 y(Directiv)o(e)f(115)177 989 y(directory)h(admin)d(102)177
+1039 y(directory)j(answ)o(ers)g(102)177 1089 y(directory)g(hac)o(kman)d(103)
+177 1139 y(directory)j(results)g(103)177 1189 y(directory)g(scripts)g(103)177
+1239 y(directory)g(sources)g(103)177 1288 y(directory)g(tests)g(104)177
+1338 y(directory)g(tree)g(102)177 1388 y(directory)g(userman)e(105)177
+1438 y(directory)i(70)177 1488 y(Distribution)e(F)m(unnelW)m(eb)h(113)177
+1538 y(do)q(cumen)o(t)g(list)f(dump)g(68)177 1588 y(do)q(cumen)o(t)h(list)f
+(64)177 1638 y(do)q(cumen)o(tation)g(duplicate)h(51)177 1687
+y(do)q(cumen)o(tation)f(examples)g(58)177 1737 y(Do)q(cumen)o(tation)f
+(\014le)i(115)177 1787 y(do)q(cumen)o(tation)f(\014le)h(18)177
+1837 y(do)q(cumen)o(tation)f(F)m(unnelW)m(eb)g(110)177 1887
+y(do)q(cumen)o(tation)g(in)o(terdep)q(enden)o(t)j(50)177 1937
+y(do)q(cumen)o(tation)d(o)o(v)o(er)h(51)177 1987 y(do)q(cumen)o(tation)f(pa)o
+(vlo)o(v)f(51)177 2037 y(do)q(cumen)o(tation)h(vs)h(co)q(de)h(32)177
+2086 y(Do)q(cumen)o(tation)d(115)177 2136 y(do)q(cumen)o(tation)h(64)177
+2186 y(DOD83)g(55)177 2236 y(Donald)g(Kn)o(uth)h(11)177 2286
+y(Donald)f(Kn)o(uth)h(50)177 2336 y(Donald)f(Kn)o(uth)h(9)177
+2386 y(dump)f(do)q(cumen)o(t)g(list)h(68)177 2436 y(dump)f(global)f(line)h
+(list)h(68)177 2486 y(dump)f(macro)f(table)i(68)177 2535 y(dump)f(mapp)q(ed)g
+(\014le)h(68)177 2585 y(dump)f(option)g(68)177 2635 y(dump)g(times)g(68)177
+2685 y(dump)g(tok)o(en)h(list)f(68)177 2735 y(duplicate)h(do)q(cumen)o
+(tation)f(51)177 2785 y(Dwy)o(er)h(Barry)h(11)177 2835 y(Dwy)o(er)f(Barry)h
+(59)1136 42 y(EBNF)f(syn)o(tax)g(63)1136 91 y(editors)g(text)h(42)1136
+141 y(Edna)f(Ev)o(erage)g(19)1136 191 y(e\016ciency)g(F)m(unnelW)m(eb)g(47)
+1136 241 y(e\016ciency)g(notes)h(47)1136 291 y(eliminating)10
+b(commen)o(ts)j(57)1136 341 y(emphasis)g(construct)i(37)1136
+391 y(emphasis)e(directiv)o(e)h(85)1136 441 y(empt)o(y)e(name)h(42)1136
+490 y(end-of-line)g(\014ddling)g(with)g(43)1136 540 y(eneo)h(command)d(95)
+1136 590 y(EOL)j(\014ddling)f(with)g(43)1136 640 y(EOL)h(mark)o(ers)f
+(inserting)h(76)1136 690 y(EOL)g(mark)o(ers)f(suppressing)i(77)1136
+740 y(EOL)f(suppression)h(23)1136 790 y(error)f(sev)o(erit)o(y)h(65)1136
+840 y(error)f(status)h(90)1136 889 y(errors)g(shell)f(90)1136
+939 y(Ev)o(erage)g(Edna)g(19)1136 989 y(example)e(applications)h(F)m(unnelW)m
+(eb)g(53)1136 1039 y(example)f(complete)h(38)1136 1089 y(example)f
+(\014lename)h(inheritance)i(70)1136 1139 y(Example)d(F)m(unnelW)m(eb)h(38)
+1136 1189 y(examples)g(do)q(cumen)o(tation)f(58)1136 1239 y(executable)j(F)m
+(unnelW)m(eb)e(106)1136 1288 y(execute)i(command)c(96)1136
+1338 y(execute)k(script)g(option)e(69)1136 1388 y(execution)h(phases)h(64)
+1136 1438 y(exists)f(command)d(96)1136 1488 y(expansion)i(macro)g(30)1136
+1538 y(expansion)g(macro)g(47)1136 1588 y(expansion)g(macro)g(87)1136
+1638 y(explaining)f(co)q(de)j(17)1136 1687 y(expressions)g(macro)e(86)1136
+1737 y(expression)i(85)1136 1787 y(extension)f(70)1136 1837
+y(F)g(option)f(68)1136 1887 y(fatal)f(sev)o(erit)o(y)j(65)1136
+1937 y(fatal)d(status)j(90)1136 1987 y(\014ddling)e(with)g(end-of-line)g(43)
+1136 2037 y(\014ddling)g(with)g(EOL)h(43)1136 2086 y(\014elds)g(\014lename)f
+(70)1136 2136 y(\014le)h(dep)q(endencies)i(49)1136 2186 y(\014le)e
+(di\013erences)i(94)1136 2236 y(\014le)e(include)f(69)1136
+2286 y(\014le)h(journal)e(69)1136 2336 y(\014le)i(listing)e(69)1136
+2386 y(\014le)i(suppression)h(49)1136 2436 y(\014le)f(termination)e(71)1136
+2486 y(\014le)i(t)o(yp)q(eset)h(69)1136 2535 y(\014lename)d(\014elds)j(70)
+1136 2585 y(\014lename)d(inheritance)j(example)e(70)1136 2635
+y(\014lename)f(inheritance)j(70)1136 2685 y(\014les)f(header)h(57)1136
+2735 y(\014les)f(include)g(30)1136 2785 y(\014les)g(include)g(77)1136
+2835 y(\014les)g(input)g(47)1032 2940 y(120)p eop
+%%Page: 121 122
+121 121 bop 177 42 a Fr(\014xeols)14 b(command)d(96)177 91
+y(fon)o(t)i(size)i(46)177 141 y(formal)d(parameter)h(lists)h(86)177
+191 y(formal)e(parameters)i(28)177 241 y(formal)e(parameters)i(28)177
+291 y(formal)e(parameters)i(87)177 341 y(F)m(ortran)g(compilers)f(42)177
+391 y(F)m(ree)i(text)f(115)177 441 y(free)h(text)f(32)177 490
+y(F)m(ree)h(text)f(83)177 540 y(free)h(text)f(83)177 590 y(freestanding)h(t)o
+(yp)q(esetter)h(directiv)o(es)f(83)177 640 y(freestanding)g(81)177
+690 y(ftp)f(anon)o(ymous)e(101)177 740 y(ftp)i(arc)o(hiv)o(e)g(114)177
+790 y(fudging)f(conditionals)g(44)177 840 y(fudging)g(generics)i(59)177
+889 y(functions)f(small)e(56)177 939 y(F)m(unnel-w)o(eb)i(spider)h(19)177
+989 y(F)m(unnelW)m(eb)f(administration)d(109)177 1039 y(F)m(unnelW)m(eb)j
+(applications)e(53)177 1089 y(F)m(unnelW)m(eb)i(arc)o(hiv)o(e)f(114)177
+1139 y(F)m(unnelW)m(eb)h(command)d(shell)i(90)177 1189 y(F)m(unnelW)m(eb)h
+(command)d(shell)i(90)177 1239 y(F)m(unnelW)m(eb)h(commands)d(90)177
+1288 y(F)m(unnelW)m(eb)j(commen)o(ts)e(75)177 1338 y(F)m(unnelW)m(eb)i(commi)
+o(tm)o(en)o(t)e(109)177 1388 y(F)m(unnelW)m(eb)i(compiling)d(105)177
+1438 y(F)m(unnelW)m(eb)j(cop)o(yrigh)o(t)f(112)177 1488 y(F)m(unnelW)m(eb)h
+(dangers)g(50)177 1538 y(F)m(unnelW)m(eb)g(de\014nition)f(63)177
+1588 y(F)m(unnelW)m(eb)h(Distribution)f(113)177 1638 y(F)m(unnelW)m(eb)h(do)q
+(cumen)o(tation)e(110)177 1687 y(F)m(unnelW)m(eb)i(e\016ciency)g(47)177
+1737 y(F)m(unnelW)m(eb)g(example)e(applications)h(53)177 1787
+y(F)m(unnelW)m(eb)h(Example)e(38)177 1837 y(F)m(unnelW)m(eb)i(executable)h
+(106)177 1887 y(F)m(unnelW)m(eb)f(\014le)f(115)177 1937 y(F)m(unnelW)m(eb)h
+(\014le)f(64)177 1987 y(F)m(unnelW)m(eb)h(hin)o(ts)f(41)177
+2037 y(F)m(unnelW)m(eb)h(initialization)d(70)177 2086 y(F)m(unnelW)m(eb)j
+(installation)e(101)177 2136 y(F)m(unnelW)m(eb)i(installing)e(106)177
+2186 y(F)m(unnelW)m(eb)i(in)o(v)o(oking)e(66)177 2236 y(F)m(unnelW)m(eb)i
+(language)e(115)177 2286 y(F)m(unnelW)m(eb)i(license)g(112)177
+2336 y(F)m(unnelW)m(eb)g(martinet)e(42)177 2386 y(F)m(unnelW)m(eb)i(name)e
+(19)177 2436 y(F)m(unnelW)m(eb)i(obtaining)e(101)177 2486 y(F)m(unnelW)m(eb)i
+(o)o(v)o(erview)f(18)177 2535 y(F)m(unnelW)m(eb)h(o)o(v)o(erview)f(64)177
+2585 y(F)m(unnelW)m(eb)h(pitfalls)e(50)177 2635 y(F)m(unnelW)m(eb)i(program)e
+(65)177 2685 y(F)m(unnelW)m(eb)i(prop)q(er)g(115)177 2735 y(F)m(unnelW)m(eb)g
+(prop)q(er)g(48)177 2785 y(F)m(unnelW)m(eb)g(prop)q(er)g(65)177
+2835 y(F)m(unnelW)m(eb)g(registration)f(110)1136 42 y(F)m(unnelW)m(eb)g
+(rules)i(42)1136 91 y(F)m(unnelW)m(eb)e(running)h(66)1136 141
+y(F)m(unnelW)m(eb)f(shell)h(90)1136 191 y(F)m(unnelW)m(eb)f(startup)i(70)1136
+241 y(F)m(unnelW)m(eb)e(supp)q(ort)i(110)1136 291 y(F)m(unnelW)m(eb)e
+(testing)h(105)1136 341 y(F)m(unnelW)m(eb)f(t)o(w)o(o)g(main)f(asp)q(ects)k
+(21)1136 391 y(F)m(unnelW)m(eb)d(v)o(ersions)h(114)1136 441
+y(F)m(unnelW)m(eb)f(115)1136 490 y(fw)g(command)e(v)o(erb)k(66)1136
+540 y(fw)e(command)e(97)1136 590 y(fwinit.fws)h(49)1136 640
+y(fwinit.fws)g(71)1136 690 y(FW)h(115)1136 740 y(gardening)g(co)q(de)i(53)
+1136 790 y(generics)g(fudging)e(59)1136 840 y(generics)i(t)o(yp)q(esafe)f(61)
+1136 889 y(global)e(line)h(list)h(dump)e(68)1136 939 y(glossary)h(115)1136
+989 y(GNU)g(license)i(112)1136 1039 y(GNU)e(license)i(18)1136
+1089 y(GNU)e(license)i(9)1136 1139 y(go)q(o)q(d)e(old)g(da)o(ys)h(57)1136
+1189 y(Gries81)f(117)1136 1239 y(Gries81)g(51)1136 1288 y(H)h(option)f(68)
+1136 1338 y(hac)o(k)o(er's)h(c)o(heer)h(35)1136 1388 y(hac)o(k)o(er's)f
+(dictionary)f(35)1136 1438 y(Hac)o(k)o(ett)h(Simon)e(11)1136
+1488 y(hac)o(kman)g(directory)j(103)1136 1538 y(header)g(C)e(57)1136
+1588 y(header)i(\014le)e(p)q(ostscript)j(54)1136 1638 y(header)f(\014les)f
+(57)1136 1687 y(header)h(page)e(37)1136 1737 y(headings)h(section)g(34)1136
+1787 y(headings)g(strength)h(46)1136 1837 y(Hello)e(Northern)i(Hemisphere)f
+(Program)e(21)1136 1887 y(hello)h(w)o(orld)g(do)q(cumen)o(t)g(20)1136
+1937 y(help)h(command)d(97)1136 1987 y(help)j(option)f(68)1136
+2037 y(here)i(command)c(98)1136 2086 y(hierarc)o(hical)i(structure)j(34)1136
+2136 y(high)d(lev)o(el)g(syn)o(tax)h(82)1136 2186 y(hin)o(ts)f(F)m(unnelW)m
+(eb)h(41)1136 2236 y(Hulse)g(Da)o(vid)f(11)1136 2286 y(Humphries)g(Barry)h
+(19)1136 2336 y(Humphries91)f(117)1136 2386 y(Humphries91)g(19)1136
+2436 y(h)o(yp)q(ertext)i(15)1136 2486 y(I)e(option)h(69)1136
+2535 y(iden)o(ti\014ers)g(macro)f(41)1136 2585 y(include)h(\014le)f(option)h
+(69)1136 2635 y(include)g(\014les)g(recursiv)o(e)h(31)1136
+2685 y(include)f(\014les)g(30)1136 2735 y(include)g(\014les)g(77)1136
+2785 y(include)g(\014les)g(77)1136 2835 y(Include)g(\014le)g(115)1032
+2940 y(121)p eop
+%%Page: 122 123
+122 122 bop 177 42 a Fr(include)14 b(\014le)g(69)177 91 y(inden)o(tation)f
+(blank)h(78)177 141 y(inden)o(tation)f(macro)g(calls)h(25)177
+191 y(inden)o(tation)f(macro)g(expansion)h(78)177 241 y(inden)o(tation)f
+(none)i(78)177 291 y(indep)q(endence)h(language)d(18)177 341
+y(indep)q(endence)j(t)o(yp)q(esetter)h(18)177 391 y(indep)q(endence)f(t)o(yp)
+q(esetter)h(34)177 441 y(indep)q(endence)f(t)o(yp)q(esetter)h(65)177
+490 y(indep)q(endence)f(t)o(yp)q(esetter)h(80)177 540 y(in\014nite)d(con)o
+(text)g(68)177 590 y(inheritance)h(\014lename)d(70)177 640
+y(inheritance)j(section)f(name)f(35)177 690 y(initialization)e(F)m(unnelW)m
+(eb)j(70)177 740 y(initialization)d(script)k(49)177 790 y(initialization)c
+(script)k(71)177 840 y(inline)e(t)o(yp)q(esetter)j(directiv)o(es)f(83)177
+889 y(inline)e(81)177 939 y(input)h(\014le)g(option)f(68)177
+989 y(input)h(\014les)g(47)177 1039 y(Input)g(\014le)g(115)177
+1089 y(input)g(\014le)g(18)177 1139 y(input)g(\014le)g(64)177
+1189 y(input)g(\014le)g(77)177 1239 y(input)g(line)f(length)h(maxim)n(um)c
+(79)177 1288 y(input)k(line)f(length)h(pragma)e(79)177 1338
+y(input)i(line)f(length)h(42)177 1388 y(input)g(line)f(length)h(79)177
+1438 y(inserting)g(EOL)g(mark)o(ers)g(76)177 1488 y(inserting)g(in)o(to)f
+(text)i(arbitrary)f(c)o(haracters)h(74)177 1538 y(inserting)f(in)o(to)f(text)
+i(con)o(trol)e(c)o(haracters)j(74)177 1588 y(inserting)e(in)o(to)f(text)i(sp)
+q(ecial)f(c)o(haracter)h(74)177 1638 y(installation)d(F)m(unnelW)m(eb)i(101)
+177 1687 y(installation)e(problems)h(107)177 1737 y(installing)f(F)m(unnelW)m
+(eb)i(106)177 1787 y(in)o(teractiv)o(e)g(mo)q(de)f(47)177 1837
+y(in)o(teractiv)o(e)h(option)g(69)177 1887 y(in)o(terdep)q(enden)o(t)i(do)q
+(cumen)o(tation)d(50)177 1937 y(in)o(terface)i(command)c(line)i(66)177
+1987 y(in)o(terpreter)j(command)11 b(47)177 2037 y(in)o(tro)q(duction)j
+(tutorial)f(19)177 2086 y(in)o(visible)g(pragmas)f(78)177 2136
+y(in)o(v)o(o)q(cation)h(n)o(um)o(b)q(er)g(23)177 2186 y(in)o(v)o(o)q(cations)
+g(n)o(um)o(b)q(er)g(42)177 2236 y(in)o(v)o(oking)f(F)m(unnelW)m(eb)i(20)177
+2286 y(in)o(v)o(oking)e(F)m(unnelW)m(eb)i(66)177 2336 y(J)g(option)f(69)177
+2386 y(Jerem)o(y)h(Begg)g(11)177 2436 y(journal)f(\014le)h(option)f(69)177
+2486 y(Journal)h(\014le)g(115)177 2535 y(journal)f(\014le)h(64)177
+2585 y(journal)f(\014le)h(69)177 2635 y(K)g(option)f(69)177
+2685 y(Kernighan88)h(117)177 2735 y(Kernighan88)g(65)177 2785
+y(k)o(eyb)q(oard)g(mo)q(de)f(47)177 2835 y(k)o(eyb)q(oard)h(option)f(69)1136
+42 y(Kn)o(uth)h(Donald)f(11)1136 91 y(Kn)o(uth)h(Donald)f(50)1136
+141 y(Kn)o(uth)h(Donald)f(9)1136 191 y(Kn)o(uth83)g(117)1136
+241 y(Kn)o(uth83)g(17)1136 291 y(Kn)o(uth83)g(25)1136 341 y(Kn)o(uth83)g(25)
+1136 391 y(Kn)o(uth83)g(9)1136 441 y(Kn)o(uth84)g(117)1136
+490 y(Kn)o(uth84)g(117)1136 540 y(Kn)o(uth84)g(13)1136 590
+y(Kn)o(uth84)g(17)1136 640 y(Kn)o(uth84)g(18)1136 690 y(L)g(option)h(69)1136
+740 y(Lamp)q(ort86)e(117)1136 790 y(Lamp)q(ort86)g(13)1136
+840 y(language)h(indep)q(endence)j(18)1136 889 y(languages)d(m)o(ultiple)f
+(55)1136 939 y(laser)i(prin)o(ter)g(55)1136 989 y(LaT)m(eX)f(13)1136
+1039 y(LaT)m(eX)g(84)1136 1089 y(la)o(y)o(out)f(program)h(22)1136
+1139 y(la)o(y)o(out)f(program)h(28)1136 1189 y(length)g(command)f(91)1136
+1239 y(length)h(input)h(line)g(42)1136 1288 y(length)f(line)h(71)1136
+1338 y(length)f(output)i(line)e(42)1136 1388 y(letter)h(67)1136
+1438 y(lev)o(els)g(of)f(diagnostics)g(65)1136 1488 y(libraries)g(macro)g(31)
+1136 1538 y(license)h(F)m(unnelW)m(eb)g(112)1136 1588 y(license)g(GNU)g(112)
+1136 1638 y(license)g(GNU)g(18)1136 1688 y(license)g(GNU)g(9)1136
+1737 y(line)f(length)h(input)g(79)1136 1787 y(line)f(length)h(71)1136
+1837 y(line)f(termination)f(71)1136 1887 y(list)h(do)q(cumen)o(t)g(64)1136
+1937 y(list)g(options)h(68)1136 1987 y(list)f(shell)h(commands)d(93)1136
+2037 y(listing)h(\014le)i(con)o(text)h(68)1136 2087 y(listing)d(\014le)i
+(option)f(69)1136 2136 y(Listing)g(\014le)h(115)1136 2186 y(listing)e(\014le)
+i(64)1136 2236 y(listing)e(\014le)i(69)1136 2286 y(literal)f(construct)i(37)
+1136 2336 y(literal)e(directiv)o(e)h(84)1136 2386 y(literate)g(programmi)o
+(ng)d(to)q(ols)i(15)1136 2436 y(literate)h(programmi)o(ng,)c(facilities)j(15)
+1136 2486 y(literate)i(programming)o(,)d(most)i(signi\014can)o(t)h(b)q(ene-)
+1302 2535 y(\014t)f(17)1136 2585 y(literate)g(programmi)o(ng)d(15)1136
+2635 y(literate)j(programmi)o(ng)d(15)1136 2685 y(literate)j(programmi)o(ng)d
+(50)1136 2735 y(MacDra)o(w)i(54)1136 2785 y(Macin)o(tosh)h(13)1136
+2835 y(Macin)o(tosh)g(54)1032 2940 y(122)p eop
+%%Page: 123 124
+123 123 bop 177 42 a Fr(macro)13 b(attributes)i(85)177 91 y(macro)e(bindings)
+g(22)177 141 y(macro)g(b)q(o)q(dy)h(85)177 191 y(macro)f(calls)g(inden)o
+(tation)h(25)177 241 y(macro)f(calls)g(86)177 291 y(macro)g(c)o(hec)o(ks)i
+(88)177 341 y(macro)e(de\014nitions)h(32)177 391 y(Macro)g(de\014nition)g
+(116)177 441 y(macro)f(de\014nition)g(85)177 490 y(macro)g(de\014nition)g(87)
+177 540 y(macro)g(expansion)h(inden)o(tation)f(78)177 590 y(macro)g
+(expansion)h(30)177 640 y(macro)f(expansion)h(47)177 690 y(macro)f(expansion)
+h(87)177 740 y(macro)f(expressions)i(86)177 790 y(macro)e(facilities)g
+(tutorial)g(22)177 840 y(macro)g(iden)o(ti\014ers)h(41)177
+889 y(macro)f(libraries)g(31)177 939 y(macro)g(names)g(41)177
+989 y(macro)g(names)g(86)177 1039 y(macro)g(name)g(85)177 1089
+y(macro)g(parameter)g(delimiting)e(87)177 1139 y(macro)i(recursion)i(43)177
+1189 y(macro)e(recursion)i(88)177 1239 y(macro)e(table)h(dump)e(68)177
+1288 y(macro)h(table)h(64)177 1338 y(macros)f(additiv)o(e)g(26)177
+1388 y(macros)g(parameterized)h(28)177 1438 y(macros)f(simple)g(tutorial)g
+(22)177 1488 y(macros)g(static)h(87)177 1538 y(Macro)g(115)177
+1588 y(magic)e(tric)o(k)i(15)177 1638 y(main)o(tenance)f(programmer)f(50)177
+1687 y(mak)o(e)h(utilit)o(y)f(49)177 1737 y(man)o(uals)g(prin)o(ting)h(107)
+177 1787 y(mapp)q(ed)g(\014le)h(dump)f(68)177 1837 y(Mapp)q(er)i(116)177
+1887 y(mapp)q(er)e(71)177 1937 y(martinet)g(F)m(unnelW)m(eb)g(42)177
+1987 y(maxim)n(um)d(input)k(line)f(length)h(79)177 2037 y(maxim)n(um)c
+(output)k(\014le)g(line)f(length)h(pragma)e(79)177 2086 y(maxim)n(um)e
+(output)k(\014le)g(line)f(length)h(79)177 2136 y(maxim)n(um)c(pro)q(duct)15
+b(\014le)f(line)f(length)h(pragma)e(79)177 2186 y(maxim)n(um)e(pro)q(duct)15
+b(\014le)f(line)f(length)h(79)177 2236 y(medicine)f(wholistic)g(53)177
+2286 y(memory)f(use)i(of)g(30)177 2336 y(memory)e(47)177 2386
+y(MIL-STD-2167A)h(51)177 2436 y(monster)h(\014le)g(p)q(ostscript)h(54)177
+2486 y(m)o(ultiple)d(languages)h(55)177 2535 y(name)g(empt)o(y)g(42)177
+2585 y(name)g(F)m(unnelW)m(eb)g(19)177 2635 y(name)g(section)h(34)177
+2685 y(name)f(section)h(84)177 2735 y(names)f(macro)g(41)177
+2785 y(names)g(macro)g(86)177 2835 y(names)g(quic)o(k)h(42)1136
+42 y(names)f(quic)o(k)g(76)1136 91 y(names)g(section)h(86)1136
+141 y(names)f(86)1136 191 y(name)f(70)1136 241 y(new)i(page)g(pragma)e(81)
+1136 291 y(new)i(page)g(81)1136 341 y(newpage)g(directiv)o(e)g(37)1136
+391 y(no)f(inden)o(tation)h(78)1136 441 y(non-determinism)d(68)1136
+490 y(non-prin)o(table)i(c)o(haracters)j(96)1136 540 y(none)e(inden)o(tation)
+f(78)1136 590 y(notation)g(63)1136 640 y(notes)h(e\016ciency)h(47)1136
+690 y(notice)f(cop)o(yrigh)o(t)f(1)1136 740 y(no)o(v)o(els)g(50)1136
+790 y(n)o(um)o(b)q(er)g(calls)g(23)1136 840 y(n)o(um)o(b)q(er)g(in)o(v)o(o)q
+(cations)g(42)1136 889 y(n)o(um)o(b)q(er)g(in)o(v)o(o)q(cation)f(23)1136
+939 y(n)o(um)o(b)q(er)h(of)g(times)g(called)h(23)1136 989 y(n)o(um)o(b)q
+(ering)e(cross)j(reference)i(89)1136 1039 y(n)o(um)o(b)q(ering)12
+b(section)j(89)1136 1089 y(ob)r(ject)f(co)q(de)h(26)1136 1139
+y(obtaining)d(F)m(unnelW)m(eb)h(101)1136 1189 y(op)q(en)h(systems)g(55)1136
+1239 y(option)f(B)h(68)1136 1288 y(option)f(C)h(68)1136 1338
+y(option)f(delete)i(output)f(68)1136 1388 y(option)f(dump)f(68)1136
+1438 y(option)h(D)g(49)1136 1488 y(option)g(D)g(68)1136 1538
+y(option)g(execute)j(script)e(69)1136 1588 y(option)f(F)h(68)1136
+1638 y(option)f(help)h(68)1136 1687 y(option)f(H)h(68)1136
+1737 y(option)f(include)h(\014le)g(69)1136 1787 y(option)f(input)g(\014le)h
+(68)1136 1837 y(option)f(in)o(teractiv)o(e)h(69)1136 1887 y(option)f(I)h(69)
+1136 1937 y(option)f(journal)g(\014le)h(69)1136 1987 y(option)f(J)h(69)1136
+2037 y(option)f(k)o(eyb)q(oard)h(69)1136 2086 y(option)f(K)h(69)1136
+2136 y(option)f(listing)g(\014le)g(69)1136 2186 y(option)g(L)h(69)1136
+2236 y(option)f(quiet)h(69)1136 2286 y(option)f(Q)h(69)1136
+2336 y(option)f(screen)j(69)1136 2386 y(option)d(S)h(69)1136
+2436 y(option)f(t)o(yp)q(eset)i(69)1136 2486 y(option)e(T)h(69)1136
+2535 y(option)f(width)g(69)1136 2585 y(option)g(W)g(69)1136
+2635 y(option)g(X)h(69)1136 2685 y(options)f(command)e(92)1136
+2735 y(options)i(default)h(49)1136 2785 y(options)f(default)h(92)1136
+2835 y(options)f(list)h(68)1032 2940 y(123)p eop
+%%Page: 124 125
+124 124 bop 177 42 a Fr(options)14 b(setting)g(defaults)g(49)177
+91 y(options)g(syn)o(tax)g(67)177 141 y(options)g(tracedump)f(68)177
+191 y(options)h(67)177 241 y(options)g(68)177 291 y(Option)g(116)177
+341 y(order)h(action)e(execution)i(71)177 391 y(order)g(program)d(22)177
+441 y(ordering)i(program)e(15)177 490 y(Ordinary)i(options)g(70)177
+540 y(organization)f(b)q(oring)g(50)177 590 y(organization)g(spaghetti)h(50)
+177 640 y(output)g(\014le)g(line)g(length)f(maxim)o(um)c(79)177
+690 y(output)14 b(\014les)g(delete)h(49)177 740 y(output)f(\014les)g(18)177
+790 y(output)g(\014les)g(64)177 840 y(Output)h(\014le)f(116)177
+889 y(output)g(line)g(length)f(42)177 939 y(output)h(WEB)g(25)177
+989 y(o)o(v)o(er)g(do)q(cumen)o(tation)f(51)177 1039 y(o)o(v)o(erhead)h(pro)q
+(cedure)i(call)d(57)177 1089 y(o)o(v)o(erview)h(F)m(unnelW)m(eb)f(18)177
+1139 y(o)o(v)o(erview)h(F)m(unnelW)m(eb)f(64)177 1189 y(o)o(v)o(erview)h(t)o
+(yp)q(esetting)h(32)177 1239 y(OzT)m(eX)g(13)177 1288 y(pac)o(k)n(age)f(55)
+177 1338 y(parameter)g(list,)f(absen)o(t)h(29)177 1388 y(parameter)g(lists)g
+(formal)d(86)177 1438 y(parameterized)j(macros)f(28)177 1488
+y(parameters)h(actual)g(29)177 1538 y(parameters)g(formal)e(28)177
+1588 y(parameters)i(formal)e(28)177 1638 y(parameters)i(formal)e(87)177
+1687 y(P)o(arser)j(116)177 1737 y(parser)g(64)177 1787 y(parser)g(82)177
+1837 y(parsing)f(command)d(line)i(66)177 1887 y(P)o(ascal)h(15)177
+1937 y(P)o(ascal)g(25)177 1987 y(P)o(ascal)g(26)177 2037 y(P)o(ascal)g(57)177
+2086 y(P)o(ascal)g(59)177 2136 y(P)o(at)g(Scannel)g(29)177
+2186 y(pa)o(vlo)o(v)f(do)q(cumen)o(tation)f(51)177 2236 y(phases)j(execution)
+g(64)177 2286 y(phases)g(64)177 2336 y(PhD)f(thesis)h(54)177
+2386 y(pitfalls)e(F)m(unnelW)m(eb)g(50)177 2436 y(p)q(o)q(em)g(animal)e(30)
+177 2486 y(p)q(o)q(em)i(camera)g(30)177 2535 y(p)q(ortabilit)o(y)g(18)177
+2585 y(p)q(ostscript)i(header)g(\014le)f(54)177 2635 y(p)q(ostscript)h
+(monster)f(\014le)g(54)177 2685 y(P)o(ostScript)h(54)177 2735
+y(p)q(ostscript)g(57)177 2785 y(pragma)d(input)i(line)f(length)h(79)177
+2835 y(pragma)e(maxim)n(um)e(output)k(\014le)g(line)f(length)h(79)1136
+42 y(pragma)e(maxim)n(um)d(pro)q(duct)15 b(\014le)f(line)f(length)h(79)1136
+91 y(pragma)e(new)i(page)g(81)1136 141 y(pragma)e(table)h(of)h(con)o(ten)o
+(ts)h(81)1136 191 y(pragma)d(title)h(82)1136 241 y(pragma)f(t)o(yp)q(esetter)
+k(80)1136 291 y(pragma)c(vskip)h(81)1136 341 y(pragmas)f(in)o(visible)h(78)
+1136 391 y(pragmas)f(visible)h(78)1136 441 y(pragmas)f(78)1136
+490 y(Pragma)g(116)1136 540 y(pragma)g(25)1136 590 y(pragma)g(78)1136
+640 y(preface)j(9)1136 690 y(prepro)q(cessor)h(C)e(20)1136
+740 y(prepro)q(cessor)i(C)e(57)1136 790 y(presen)o(tation)g(notes)h(13)1136
+840 y(Prin)o(ted)f(do)q(cumen)o(tation)f(116)1136 889 y(prin)o(ter)h(laser)g
+(55)1136 939 y(prin)o(ting)f(man)o(uals)f(107)1136 989 y(prin)o(ting)h
+(system)g(55)1136 1039 y(problems)g(binding)f(57)1136 1089
+y(problems)h(installation)f(107)1136 1139 y(pro)q(cedure)j(call)f(o)o(v)o
+(erhead)g(57)1136 1189 y(pro)q(cessing)h(command)c(line)i(66)1136
+1239 y(pro)q(cessing)i(command)c(line)i(92)1136 1288 y(pro)q(duct)h(\014le)g
+(line)g(length)g(maxim)n(um)9 b(79)1136 1338 y(pro)q(duct)14
+b(\014le)g(width)g(69)1136 1388 y(pro)q(duct)g(\014les)h(18)1136
+1438 y(pro)q(duct)f(\014les)h(64)1136 1488 y(Pro)q(duct)g(\014le)e(116)1136
+1538 y(pro)q(duction)h(to)q(ol)f(19)1136 1588 y(program)f(la)o(y)o(out)h(22)
+1136 1638 y(program)f(la)o(y)o(out)h(28)1136 1687 y(program)f(ordering)i(15)
+1136 1737 y(program)e(order)j(22)1136 1787 y(programmer)c(main)o(tenance)i
+(50)1136 1837 y(programmer's)e(c)o(heer)k(35)1136 1887 y(programmi)o(ng)c
+(literate)j(50)1136 1937 y(Q)g(option)f(69)1136 1987 y(quic)o(k)g(names)g(42)
+1136 2037 y(quic)o(k)g(names)g(76)1136 2086 y(quic)o(k)g(name)g(42)1136
+2136 y(quic)o(k)g(name)g(76)1136 2186 y(quiet)h(option)f(69)1136
+2236 y(quit)g(command)e(98)1136 2286 y(random)h(access)k(50)1136
+2336 y(rec.h)o(umor.funn)o(y)c(29)1136 2386 y(recursion)j(macro)d(43)1136
+2436 y(recursion)j(macro)d(88)1136 2486 y(recursiv)o(e)j(include)f(\014les)g
+(31)1136 2535 y(references)i(117)1136 2585 y(referencing)f(cross)g(89)1136
+2635 y(registration)e(F)m(unnelW)m(eb)h(110)1136 2685 y(regression)h(testing)
+f(103)1136 2735 y(regression)h(testing)f(47)1136 2785 y(reliabilit)o(y)e(18)
+1136 2835 y(REM)h(statemen)o(t)h(57)1032 2940 y(124)p eop
+%%Page: 125 126
+125 125 bop 177 42 a Fr(rep)q(ort)15 b(ann)o(ual)e(58)177 91
+y(results)i(directory)g(103)177 141 y(return)g(status)g(65)177
+191 y(Roger)f(Brissenden)i(11)177 241 y(Roso)o(vsky90)d(117)177
+291 y(Roso)o(vsky90)g(17)177 341 y(Ross)h(William)o(s)d(1)177
+391 y(rule)j(simple)f(20)177 441 y(rules)i(F)m(unnelW)m(eb)e(42)177
+490 y(running)h(F)m(unnelW)m(eb)f(66)177 540 y(S)h(option)f(69)177
+590 y(Scannel)h(P)o(at)g(29)177 640 y(Scanner)h(116)177 690
+y(scanner)g(64)177 740 y(scanner)g(71)177 790 y(screen)h(option)d(69)177
+840 y(script)i(initialization)c(49)177 889 y(script)k(initialization)c(71)177
+939 y(script)k(startup)f(49)177 989 y(scripts)h(directory)g(103)177
+1039 y(Script)g(116)177 1089 y(section)g(constructs)h(83)177
+1139 y(section)f(headings)f(34)177 1189 y(section)h(name)d(inheritance)j(35)
+177 1239 y(section)g(names)e(86)177 1288 y(section)i(name)d(34)177
+1338 y(section)j(name)d(84)177 1388 y(section)j(n)o(um)o(b)q(ering)d(89)177
+1438 y(section)j(strength)g(46)177 1488 y(seman)o(tic)e(arc)o(hitecture)j(64)
+177 1538 y(sequences)h(sp)q(ecial)d(72)177 1588 y(set)h(abstraction)f(59)177
+1638 y(set)h(command)c(48)177 1687 y(set)k(command)c(98)177
+1737 y(setting)j(defaults)g(options)g(49)177 1787 y(setting)g(sp)q(ecial)h(c)
+o(haracter)g(74)177 1837 y(sev)o(ere)h(sev)o(erit)o(y)e(65)177
+1887 y(sev)o(ere)i(status)e(90)177 1937 y(sev)o(erit)o(y)h(assertion)f(65)177
+1987 y(sev)o(erit)o(y)h(error)g(65)177 2037 y(sev)o(erit)o(y)g(fatal)d(65)177
+2086 y(sev)o(erit)o(y)j(sev)o(ere)g(65)177 2136 y(sev)o(erit)o(y)g(w)o
+(arning)e(65)177 2186 y(sev)o(erit)o(y)i(65)177 2236 y(sharing)f(information)
+d(56)177 2286 y(sharing)j(text)g(58)177 2336 y(shark)g(white)g(p)q(oin)o(ter)
+g(19)177 2386 y(shell)g(commands)d(list)j(93)177 2436 y(shell)g(commands)d
+(93)177 2486 y(shell)j(errors)h(90)177 2535 y(shell)f(F)m(unnelW)m(eb)f(90)
+177 2585 y(shell)h(uses)h(90)177 2635 y(Shell)f(116)177 2685
+y(sho)q(oting)g(31)177 2735 y(sho)o(w)g(command)d(48)177 2785
+y(sho)o(w)j(command)d(98)177 2835 y(sign)j(67)1136 42 y(Simon)d(Hac)o(k)o
+(ett)k(11)1136 91 y(simple)d(macros)h(tutorial)g(22)1136 141
+y(simple)f(rule)i(20)1136 191 y(simple)e(sequence)k(72)1136
+241 y(simplicit)o(y)11 b(18)1136 291 y(size)j(fon)o(t)g(46)1136
+341 y(skip)f(v)o(ertical)h(81)1136 391 y(skipto)f(command)e(98)1136
+441 y(small)g(functions)j(56)1136 490 y(Smith91)d(117)1136
+540 y(Smith91)g(17)1136 590 y(snak)o(e)j(tiger)g(19)1136 640
+y(song)f(29)1136 690 y(sources)i(directory)g(103)1136 740 y(spacing)e(43)1136
+790 y(spaghetti)h(organization)e(50)1136 840 y(sp)q(ecial)i(c)o(haracter)h(c)
+o(hanging)e(31)1136 889 y(sp)q(ecial)h(c)o(haracter)h(default)f(72)1136
+939 y(sp)q(ecial)g(c)o(haracter)h(inserting)f(in)o(to)f(text)i(74)1136
+989 y(sp)q(ecial)f(c)o(haracter)h(setting)f(74)1136 1039 y(Sp)q(ecial)f(c)o
+(haracter)j(116)1136 1089 y(sp)q(ecial)e(c)o(haracter)h(20)1136
+1139 y(sp)q(ecial)f(c)o(haracter)h(72)1136 1189 y(sp)q(ecial)f(sequences)i
+(72)1136 1239 y(Sp)q(ecial)d(sequence)k(116)1136 1288 y(sp)q(ecial)d
+(sequence)i(20)1136 1338 y(sp)q(ecial)e(sequence)i(72)1136
+1388 y(sp)q(ecial)e(tok)o(ens)g(82)1136 1438 y(sp)q(eed)h(47)1136
+1488 y(spider)f(F)m(unnel-w)o(eb)g(19)1136 1538 y(startup)g(F)m(unnelW)m(eb)g
+(70)1136 1588 y(startup)g(script)h(49)1136 1638 y(statemen)o(t)e(REM)h(57)
+1136 1687 y(static)g(analysis)f(88)1136 1737 y(static)h(macros)f(87)1136
+1787 y(status)h(assertion)h(90)1136 1837 y(status)f(command)d(99)1136
+1887 y(status)j(error)h(90)1136 1937 y(status)f(fatal)f(90)1136
+1987 y(status)h(return)h(65)1136 2037 y(status)f(sev)o(ere)i(90)1136
+2086 y(status)e(success)j(90)1136 2136 y(status)d(w)o(arning)f(90)1136
+2186 y(stream)g(of)g(consciousness)j(50)1136 2236 y(strength)f(headings)f(46)
+1136 2286 y(strength)h(section)f(46)1136 2336 y(strength)h(t)o(yp)q(esetting)
+g(46)1136 2386 y(string)f(substitution)g(91)1136 2436 y(string)g
+(substitution)g(94)1136 2486 y(string)g(67)1136 2535 y(structure)i(hierarc)o
+(hical)d(34)1136 2585 y(structure)j(tree)f(83)1136 2635 y(Strunk79)e(117)1136
+2685 y(Strunk79)g(51)1136 2735 y(substitution)h(string)g(91)1136
+2785 y(substitution)g(string)g(94)1136 2835 y(success)i(status)f(90)1032
+2940 y(125)p eop
+%%Page: 126 127
+126 126 bop 177 42 a Fr(supp)q(ort)15 b(F)m(unnelW)m(eb)e(110)177
+91 y(suppress)j(console)e(output)g(69)177 141 y(suppressing)h(EOL)g(mark)o
+(ers)e(77)177 191 y(suppression)i(EOL)g(23)177 241 y(suppression)g(\014le)f
+(49)177 291 y(Sydney)g(19)177 341 y(syn)o(tax)g(command)d(line)j(options)f
+(67)177 391 y(syn)o(tax)h(command)d(line)j(67)177 441 y(syn)o(tax)g(EBNF)h
+(63)177 490 y(syn)o(tax)f(high)f(lev)o(el)h(82)177 540 y(syn)o(tax)g(options)
+g(67)177 590 y(system)g(prin)o(ting)f(55)177 640 y(T)h(option)f(69)177
+690 y(table)h(macro)f(64)177 740 y(table)h(of)f(con)o(ten)o(ts)i(directiv)o
+(e)g(37)177 790 y(table)f(of)f(con)o(ten)o(ts)i(pragma)d(81)177
+840 y(table)i(of)f(con)o(ten)o(ts)i(81)177 889 y(tabs)f(42)177
+939 y(T)m(angle)f(116)177 989 y(tangle)h(65)177 1039 y(tangle)g(88)177
+1089 y(T)m(angling)e(21)177 1139 y(target)j(t)o(yp)q(esetter)h(89)177
+1189 y(termination)c(\014le)i(71)177 1239 y(termination)e(line)i(71)177
+1288 y(terminology)e(63)177 1338 y(testing)i(F)m(unnelW)m(eb)g(105)177
+1388 y(testing)g(regression)i(103)177 1438 y(testing)e(regression)i(47)177
+1488 y(tests)f(directory)g(104)177 1538 y(text)g(editors)f(42)177
+1588 y(text)h(\014les)f(cryptic)h(55)177 1638 y(text)g(free)f(83)177
+1687 y(text)h(sharing)e(58)177 1737 y(text)i(tok)o(ens)f(82)177
+1787 y(T)m(eX)g(13)177 1837 y(T)m(eX)g(18)177 1887 y(T)m(eX)g(22)177
+1937 y(T)m(eX)g(54)177 1987 y(thesis)h(PhD)f(54)177 2037 y(tiger)g(snak)o(e)g
+(19)177 2086 y(time)f(dev)o(elopmen)o(t)g(17)177 2136 y(times)g(dump)g(68)177
+2186 y(title)h(directiv)o(e)g(37)177 2236 y(title)g(pragma)e(82)177
+2286 y(title)i(82)177 2336 y(tok)o(en)g(list)g(dump)e(68)177
+2386 y(tolerate)i(command)e(100)177 2436 y(to)q(ols)i(literate)g(programmi)o
+(ng)d(15)177 2486 y(trace)k(command)c(100)177 2535 y(trace)k(on)f(command)d
+(48)177 2585 y(tracedump)j(options)f(68)177 2635 y(trailing)g(blanks)g(42)177
+2685 y(tree)i(directory)g(102)177 2735 y(tree)g(structure)h(83)177
+2785 y(T)m(rev)o(orro)o(w)e(Andrew)h(13)177 2835 y(tutorial)e(+=)i(26)1136
+42 y(tutorial)e(==)h(26)1136 91 y(tutorial)f(@M)h(24)1136 141
+y(tutorial)f(@Z)h(24)1136 191 y(tutorial)f(in)o(tro)q(duction)g(19)1136
+241 y(tutorial)g(macro)f(facilities)h(22)1136 291 y(tutorial)g(macros)g
+(simple)f(22)1136 341 y(tutorial)h(simple)f(macros)h(22)1136
+391 y(tutorial)g(t)o(yp)q(esetting)i(32)1136 441 y(tutorial)e(15)1136
+490 y(tutorial)g(19)1136 540 y(t)o(w)o(elv)o(e)g(bugs)i(of)e(c)o(hristmas)g
+(29)1136 590 y(t)o(w)o(o)g(main)f(asp)q(ects)j(F)m(unnelW)m(eb)f(21)1136
+640 y(t)o(yp)q(esafe)g(generics)h(61)1136 690 y(t)o(yp)q(eset)g(\014le)f(69)
+1136 740 y(t)o(yp)q(eset)h(option)e(69)1136 790 y(t)o(yp)q(esetter)j
+(directiv)o(e)e(tok)o(ens)h(82)1136 840 y(t)o(yp)q(esetter)h(directiv)o(es)f
+(66)1136 889 y(t)o(yp)q(esetter)h(directiv)o(es)f(81)1136 939
+y(t)o(yp)q(esetter)h(indep)q(endence)g(18)1136 989 y(t)o(yp)q(esetter)g
+(indep)q(endence)g(34)1136 1039 y(t)o(yp)q(esetter)g(indep)q(endence)g(65)
+1136 1089 y(t)o(yp)q(esetter)g(indep)q(endence)g(80)1136 1139
+y(t)o(yp)q(esetter)g(indep)q(enden)o(t)f(34)1136 1189 y(t)o(yp)q(esetter)h
+(pragma)c(80)1136 1239 y(t)o(yp)q(esetter)k(target)e(89)1136
+1288 y(T)o(yp)q(esetting)g(directiv)o(e)h(116)1136 1338 y(t)o(yp)q(esetting)f
+(o)o(v)o(erview)g(32)1136 1388 y(t)o(yp)q(esetting)g(strength)i(46)1136
+1438 y(t)o(yp)q(esetting)e(tutorial)g(32)1136 1488 y(t)o(yp)q(esetting)g(13)
+1136 1538 y(t)o(yp)q(esetting)g(89)1136 1588 y(univ)o(ersities)g(17)1136
+1638 y(Univ)o(ersit)o(y)f(Adelaide)h(59)1136 1687 y(Unix)f(newline)h(75)1136
+1737 y(Unix)f(67)1136 1787 y(unprin)o(table)g(c)o(haracters)j(71)1136
+1837 y(USDOD83)d(117)1136 1887 y(use)h(of)g(memory)d(30)1136
+1937 y(useful)j(commands)d(47)1136 1987 y(userman)i(directory)i(105)1136
+2037 y(uses)g(shell)f(90)1136 2086 y(v)o(ersions)g(F)m(unnelW)m(eb)f(114)1136
+2136 y(v)o(ertical)g(skip)h(81)1136 2186 y(visible)f(pragmas)f(78)1136
+2236 y(vskip)h(directiv)o(e)i(37)1136 2286 y(vskip)e(pragma)f(81)1136
+2336 y(W)h(option)g(69)1136 2386 y(w)o(arning)g(sev)o(erit)o(y)h(65)1136
+2436 y(w)o(arning)f(status)h(90)1136 2486 y(w)o(arran)o(t)o(y)f(112)1136
+2535 y(W)m(ea)o(v)o(e)g(116)1136 2585 y(w)o(ea)o(v)o(e)h(65)1136
+2635 y(w)o(ea)o(v)o(e)g(89)1136 2685 y(W)m(ea)o(ving)e(21)1136
+2735 y(WEB)i(output)g(25)1136 2785 y(WEB)g(21)1136 2835 y(WEB)g(25)1032
+2940 y(126)p eop
+%%Page: 127 128
+127 127 bop 177 42 a Fr(W)m(eb)14 b(9)177 91 y(white)g(p)q(oin)o(ter)g(shark)
+g(19)177 141 y(wholistic)f(debugging)h(53)177 191 y(wholistic)f(debugging)h
+(53)177 241 y(wholistic)f(medicine)g(53)177 291 y(width)h(option)f(69)177
+340 y(width)h(pro)q(duct)h(\014le)e(69)177 390 y(William)o(s)f(Ross)h(1)177
+440 y(w)o(orkstations)h(48)177 490 y(w)o(orkstation)g(90)177
+540 y(write)g(command)d(100)177 589 y(writeu)j(command)e(100)177
+639 y(X)i(option)f(69)1032 2940 y(127)p eop
+%%Trailer
+end
+userdict /end-hook known{end-hook}if
+%%EOF
diff --git a/web/funnelAC/userman/u_manual.sin b/web/funnelAC/userman/u_manual.sin
new file mode 100644
index 0000000000..abee6744ad
--- /dev/null
+++ b/web/funnelAC/userman/u_manual.sin
@@ -0,0 +1,1020 @@
+\indexentry{+= tutorial}{26}
+\indexentry{+=}{85}
+\indexentry{2167A}{51}
+\indexentry{== tutorial}{26}
+\indexentry{==}{85}
+\indexentry{@!}{37}
+\indexentry{@!}{75}
+\indexentry{@"}{29}
+\indexentry{@(}{29}
+\indexentry{@)}{29}
+\indexentry{@+}{20}
+\indexentry{@+}{76}
+\indexentry{@,}{29}
+\indexentry{@-}{23}
+\indexentry{@-}{77}
+\indexentry{@1...}{28}
+\indexentry{@1...}{86}
+\indexentry{@<}{20}
+\indexentry{@=}{20}
+\indexentry{@>}{20}
+\indexentry{@A...}{34}
+\indexentry{@braces}{20}
+\indexentry{@braces}{37}
+\indexentry{@circumflex}{74}
+\indexentry{@dollar}{22}
+\indexentry{@hash}{76}
+\indexentry{@i}{30}
+\indexentry{@i}{77}
+\indexentry{@M tutorial}{24}
+\indexentry{@M}{85}
+\indexentry{@O}{20}
+\indexentry{@O}{22}
+\indexentry{@slash}{37}
+\indexentry{@Z tutorial}{24}
+\indexentry{@Z}{85}
+\indexentry{absent command}{93}
+\indexentry{abstract data type}{55}
+\indexentry{abstraction code}{56}
+\indexentry{abstraction data}{26}
+\indexentry{abstraction set}{59}
+\indexentry{abuse comments}{57}
+\indexentry{access random}{50}
+\indexentry{acknowledgements}{11}
+\indexentry{action execution order}{71}
+\indexentry{Action options}{70}
+\indexentry{actual parameters}{29}
+\indexentry{Ada}{11}
+\indexentry{Ada}{44}
+\indexentry{Ada}{49}
+\indexentry{Ada}{51}
+\indexentry{Ada}{55}
+\indexentry{additive macros}{26}
+\indexentry{additive macro}{26}
+\indexentry{additively defined}{85}
+\indexentry{Adelaide University}{59}
+\indexentry{admin directory}{102}
+\indexentry{administration FunnelWeb}{109}
+\indexentry{ADT}{55}
+\indexentry{alias}{49}
+\indexentry{Analyser}{115}
+\indexentry{analyser}{65}
+\indexentry{analyser}{88}
+\indexentry{analysis static}{88}
+\indexentry{Andrew Trevorrow}{13}
+\indexentry{animal poem}{30}
+\indexentry{annual report}{58}
+\indexentry{anonymous ftp}{101}
+\indexentry{ANSI}{109}
+\indexentry{ANSI}{117}
+\indexentry{answers correct}{102}
+\indexentry{answers directory}{102}
+\indexentry{ANZE}{117}
+\indexentry{ANZE}{19}
+\indexentry{applications FunnelWeb}{53}
+\indexentry{arbitrary characters inserting into text}{74}
+\indexentry{architecture semantic}{64}
+\indexentry{archive ftp}{114}
+\indexentry{archive FunnelWeb}{114}
+\indexentry{argument command line}{67}
+\indexentry{arguments}{67}
+\indexentry{Argument}{115}
+\indexentry{assertion severity}{65}
+\indexentry{assertion status}{90}
+\indexentry{Atrax robustus}{19}
+\indexentry{attributes macro}{85}
+\indexentry{author contacting}{114}
+\indexentry{B option}{68}
+\indexentry{Barry Dwyer}{11}
+\indexentry{Barry Dwyer}{59}
+\indexentry{Barry Humphries}{19}
+\indexentry{BASIC}{57}
+\indexentry{Begg Jeremy}{11}
+\indexentry{binding problems}{57}
+\indexentry{bindings macro}{22}
+\indexentry{blank indentation}{78}
+\indexentry{blank indentation}{78}
+\indexentry{blanks trailing}{42}
+\indexentry{boring organization}{50}
+\indexentry{Brissenden Roger}{11}
+\indexentry{BSI82}{117}
+\indexentry{BSI82}{15}
+\indexentry{BSI82}{18}
+\indexentry{C header}{57}
+\indexentry{C option}{68}
+\indexentry{C preprocessor}{20}
+\indexentry{C preprocessor}{57}
+\indexentry{calls macro}{86}
+\indexentry{calls number}{23}
+\indexentry{camera poem}{30}
+\indexentry{case dependence}{67}
+\indexentry{changing special character}{31}
+\indexentry{characters control}{42}
+\indexentry{characters non-printable}{96}
+\indexentry{characters unprintable}{71}
+\indexentry{checks macro}{88}
+\indexentry{cheer hacker's}{35}
+\indexentry{cheer programmer's}{35}
+\indexentry{code abstraction}{56}
+\indexentry{code explaining}{17}
+\indexentry{code gardening}{53}
+\indexentry{code vs documentation}{32}
+\indexentry{codify command}{93}
+\indexentry{command absent}{93}
+\indexentry{command codify}{93}
+\indexentry{command compare}{93}
+\indexentry{command define}{91}
+\indexentry{command define}{94}
+\indexentry{command diffsummary}{95}
+\indexentry{command diffzero}{95}
+\indexentry{command diff}{94}
+\indexentry{command eneo}{95}
+\indexentry{command execute}{96}
+\indexentry{command exists}{96}
+\indexentry{command fixeols}{96}
+\indexentry{command fw}{97}
+\indexentry{command help}{97}
+\indexentry{command here}{98}
+\indexentry{command interpreter}{47}
+\indexentry{command length}{91}
+\indexentry{command line argument}{67}
+\indexentry{command line interface}{66}
+\indexentry{command line options syntax}{67}
+\indexentry{command line parsing}{66}
+\indexentry{command line processing}{66}
+\indexentry{command line processing}{92}
+\indexentry{command line syntax}{67}
+\indexentry{command options}{92}
+\indexentry{command quit}{98}
+\indexentry{command set}{48}
+\indexentry{command set}{98}
+\indexentry{command shell FunnelWeb}{90}
+\indexentry{command show}{48}
+\indexentry{command show}{98}
+\indexentry{command skipto}{98}
+\indexentry{command status}{99}
+\indexentry{command tolerate}{100}
+\indexentry{command trace on}{48}
+\indexentry{command trace}{100}
+\indexentry{command verb fw}{66}
+\indexentry{command writeu}{100}
+\indexentry{command write}{100}
+\indexentry{commands FunnelWeb}{90}
+\indexentry{commands shell}{93}
+\indexentry{commands useful}{47}
+\indexentry{comments abuse}{57}
+\indexentry{comments eliminating}{57}
+\indexentry{comments FunnelWeb}{75}
+\indexentry{comments}{37}
+\indexentry{commitment FunnelWeb}{109}
+\indexentry{compare command}{93}
+\indexentry{compilers Fortran}{42}
+\indexentry{compiling FunnelWeb}{105}
+\indexentry{complete example}{38}
+\indexentry{conditionals fudging}{44}
+\indexentry{console output suppress}{69}
+\indexentry{constructs section}{83}
+\indexentry{contacting author}{114}
+\indexentry{contents table of}{81}
+\indexentry{context infinite}{68}
+\indexentry{context listing file}{68}
+\indexentry{context}{69}
+\indexentry{control characters inserting into text}{74}
+\indexentry{control characters}{42}
+\indexentry{controllability}{18}
+\indexentry{copyright FunnelWeb}{112}
+\indexentry{copyright notice}{1}
+\indexentry{correct answers}{102}
+\indexentry{cross reference numbering}{89}
+\indexentry{cross referencing}{17}
+\indexentry{cross referencing}{89}
+\indexentry{cryptic text files}{55}
+\indexentry{D option}{49}
+\indexentry{D option}{68}
+\indexentry{dangers FunnelWeb}{50}
+\indexentry{data abstraction}{26}
+\indexentry{David Hulse}{11}
+\indexentry{debugger}{53}
+\indexentry{debugging wholistic}{53}
+\indexentry{default options}{49}
+\indexentry{default options}{92}
+\indexentry{default special character}{72}
+\indexentry{define command}{91}
+\indexentry{define command}{94}
+\indexentry{definition FunnelWeb}{63}
+\indexentry{definition macro}{85}
+\indexentry{definition macro}{87}
+\indexentry{delete output files}{49}
+\indexentry{delete output option}{68}
+\indexentry{delimiting macro parameter}{87}
+\indexentry{dependence case}{67}
+\indexentry{dependencies file}{49}
+\indexentry{development time}{17}
+\indexentry{diagnostics levels of}{65}
+\indexentry{diagnostics}{65}
+\indexentry{dictionary hacker's}{35}
+\indexentry{diff command}{94}
+\indexentry{differences file}{94}
+\indexentry{diffsummary command}{95}
+\indexentry{diffzero command}{95}
+\indexentry{directive emphasis}{85}
+\indexentry{directive literal}{84}
+\indexentry{directive newpage}{37}
+\indexentry{directive table of contents}{37}
+\indexentry{directive title}{37}
+\indexentry{directive vskip}{37}
+\indexentry{directives typesetter}{81}
+\indexentry{directives}{32}
+\indexentry{directives}{83}
+\indexentry{Directive}{115}
+\indexentry{directory admin}{102}
+\indexentry{directory answers}{102}
+\indexentry{directory hackman}{103}
+\indexentry{directory results}{103}
+\indexentry{directory scripts}{103}
+\indexentry{directory sources}{103}
+\indexentry{directory tests}{104}
+\indexentry{directory tree}{102}
+\indexentry{directory userman}{105}
+\indexentry{directory}{70}
+\indexentry{Distribution FunnelWeb}{113}
+\indexentry{document list dump}{68}
+\indexentry{document list}{64}
+\indexentry{documentation duplicate}{51}
+\indexentry{documentation examples}{58}
+\indexentry{Documentation file}{115}
+\indexentry{documentation file}{18}
+\indexentry{documentation FunnelWeb}{110}
+\indexentry{documentation interdependent}{50}
+\indexentry{documentation over}{51}
+\indexentry{documentation pavlov}{51}
+\indexentry{documentation vs code}{32}
+\indexentry{Documentation}{115}
+\indexentry{documentation}{64}
+\indexentry{DOD83}{55}
+\indexentry{Donald Knuth}{11}
+\indexentry{Donald Knuth}{50}
+\indexentry{Donald Knuth}{9}
+\indexentry{dump document list}{68}
+\indexentry{dump global line list}{68}
+\indexentry{dump macro table}{68}
+\indexentry{dump mapped file}{68}
+\indexentry{dump option}{68}
+\indexentry{dump times}{68}
+\indexentry{dump token list}{68}
+\indexentry{duplicate documentation}{51}
+\indexentry{Dwyer Barry}{11}
+\indexentry{Dwyer Barry}{59}
+\indexentry{EBNF syntax}{63}
+\indexentry{editors text}{42}
+\indexentry{Edna Everage}{19}
+\indexentry{efficiency FunnelWeb}{47}
+\indexentry{efficiency notes}{47}
+\indexentry{eliminating comments}{57}
+\indexentry{emphasis construct}{37}
+\indexentry{emphasis directive}{85}
+\indexentry{empty name}{42}
+\indexentry{end-of-line fiddling with}{43}
+\indexentry{eneo command}{95}
+\indexentry{EOL fiddling with}{43}
+\indexentry{EOL markers inserting}{76}
+\indexentry{EOL markers suppressing}{77}
+\indexentry{EOL suppression}{23}
+\indexentry{error severity}{65}
+\indexentry{error status}{90}
+\indexentry{errors shell}{90}
+\indexentry{Everage Edna}{19}
+\indexentry{example applications FunnelWeb}{53}
+\indexentry{example complete}{38}
+\indexentry{example filename inheritance}{70}
+\indexentry{Example FunnelWeb}{38}
+\indexentry{examples documentation}{58}
+\indexentry{executable FunnelWeb}{106}
+\indexentry{execute command}{96}
+\indexentry{execute script option}{69}
+\indexentry{execution phases}{64}
+\indexentry{exists command}{96}
+\indexentry{expansion macro}{30}
+\indexentry{expansion macro}{47}
+\indexentry{expansion macro}{87}
+\indexentry{explaining code}{17}
+\indexentry{expressions macro}{86}
+\indexentry{expression}{85}
+\indexentry{extension}{70}
+\indexentry{F option}{68}
+\indexentry{fatal severity}{65}
+\indexentry{fatal status}{90}
+\indexentry{fiddling with end-of-line}{43}
+\indexentry{fiddling with EOL}{43}
+\indexentry{fields filename}{70}
+\indexentry{file dependencies}{49}
+\indexentry{file differences}{94}
+\indexentry{file include}{69}
+\indexentry{file journal}{69}
+\indexentry{file listing}{69}
+\indexentry{file suppression}{49}
+\indexentry{file termination}{71}
+\indexentry{file typeset}{69}
+\indexentry{filename fields}{70}
+\indexentry{filename inheritance example}{70}
+\indexentry{filename inheritance}{70}
+\indexentry{files header}{57}
+\indexentry{files include}{30}
+\indexentry{files include}{77}
+\indexentry{files input}{47}
+\indexentry{fixeols command}{96}
+\indexentry{font size}{46}
+\indexentry{formal parameter lists}{86}
+\indexentry{formal parameters}{28}
+\indexentry{formal parameters}{28}
+\indexentry{formal parameters}{87}
+\indexentry{Fortran compilers}{42}
+\indexentry{Free text}{115}
+\indexentry{free text}{32}
+\indexentry{Free text}{83}
+\indexentry{free text}{83}
+\indexentry{freestanding typesetter directives}{83}
+\indexentry{freestanding}{81}
+\indexentry{ftp anonymous}{101}
+\indexentry{ftp archive}{114}
+\indexentry{fudging conditionals}{44}
+\indexentry{fudging generics}{59}
+\indexentry{functions small}{56}
+\indexentry{Funnel-web spider}{19}
+\indexentry{FunnelWeb administration}{109}
+\indexentry{FunnelWeb applications}{53}
+\indexentry{FunnelWeb archive}{114}
+\indexentry{FunnelWeb command shell}{90}
+\indexentry{FunnelWeb command shell}{90}
+\indexentry{FunnelWeb commands}{90}
+\indexentry{FunnelWeb comments}{75}
+\indexentry{FunnelWeb commitment}{109}
+\indexentry{FunnelWeb compiling}{105}
+\indexentry{FunnelWeb copyright}{112}
+\indexentry{FunnelWeb dangers}{50}
+\indexentry{FunnelWeb definition}{63}
+\indexentry{FunnelWeb Distribution}{113}
+\indexentry{FunnelWeb documentation}{110}
+\indexentry{FunnelWeb efficiency}{47}
+\indexentry{FunnelWeb example applications}{53}
+\indexentry{FunnelWeb Example}{38}
+\indexentry{FunnelWeb executable}{106}
+\indexentry{FunnelWeb file}{115}
+\indexentry{FunnelWeb file}{64}
+\indexentry{FunnelWeb hints}{41}
+\indexentry{FunnelWeb initialization}{70}
+\indexentry{FunnelWeb installation}{101}
+\indexentry{FunnelWeb installing}{106}
+\indexentry{FunnelWeb invoking}{66}
+\indexentry{FunnelWeb language}{115}
+\indexentry{FunnelWeb license}{112}
+\indexentry{FunnelWeb martinet}{42}
+\indexentry{FunnelWeb name}{19}
+\indexentry{FunnelWeb obtaining}{101}
+\indexentry{FunnelWeb overview}{18}
+\indexentry{FunnelWeb overview}{64}
+\indexentry{FunnelWeb pitfalls}{50}
+\indexentry{FunnelWeb program}{65}
+\indexentry{FunnelWeb proper}{115}
+\indexentry{FunnelWeb proper}{48}
+\indexentry{FunnelWeb proper}{65}
+\indexentry{FunnelWeb registration}{110}
+\indexentry{FunnelWeb rules}{42}
+\indexentry{FunnelWeb running}{66}
+\indexentry{FunnelWeb shell}{90}
+\indexentry{FunnelWeb startup}{70}
+\indexentry{FunnelWeb support}{110}
+\indexentry{FunnelWeb testing}{105}
+\indexentry{FunnelWeb two main aspects}{21}
+\indexentry{FunnelWeb versions}{114}
+\indexentry{FunnelWeb}{115}
+\indexentry{fw command verb}{66}
+\indexentry{fw command}{97}
+\indexentry{fwinit.fws}{49}
+\indexentry{fwinit.fws}{71}
+\indexentry{FW}{115}
+\indexentry{gardening code}{53}
+\indexentry{generics fudging}{59}
+\indexentry{generics typesafe}{61}
+\indexentry{global line list dump}{68}
+\indexentry{glossary}{115}
+\indexentry{GNU license}{112}
+\indexentry{GNU license}{18}
+\indexentry{GNU license}{9}
+\indexentry{good old days}{57}
+\indexentry{Gries81}{117}
+\indexentry{Gries81}{51}
+\indexentry{H option}{68}
+\indexentry{hacker's cheer}{35}
+\indexentry{hacker's dictionary}{35}
+\indexentry{Hackett Simon}{11}
+\indexentry{hackman directory}{103}
+\indexentry{header C}{57}
+\indexentry{header file postscript}{54}
+\indexentry{header files}{57}
+\indexentry{header page}{37}
+\indexentry{headings section}{34}
+\indexentry{headings strength}{46}
+\indexentry{Hello Northern Hemisphere Program}{21}
+\indexentry{hello world document}{20}
+\indexentry{help command}{97}
+\indexentry{help option}{68}
+\indexentry{here command}{98}
+\indexentry{hierarchical structure}{34}
+\indexentry{high level syntax}{82}
+\indexentry{hints FunnelWeb}{41}
+\indexentry{Hulse David}{11}
+\indexentry{Humphries Barry}{19}
+\indexentry{Humphries91}{117}
+\indexentry{Humphries91}{19}
+\indexentry{hypertext}{15}
+\indexentry{I option}{69}
+\indexentry{identifiers macro}{41}
+\indexentry{include file option}{69}
+\indexentry{include files recursive}{31}
+\indexentry{include files}{30}
+\indexentry{include files}{77}
+\indexentry{include files}{77}
+\indexentry{Include file}{115}
+\indexentry{include file}{69}
+\indexentry{indentation blank}{78}
+\indexentry{indentation macro calls}{25}
+\indexentry{indentation macro expansion}{78}
+\indexentry{indentation none}{78}
+\indexentry{independence language}{18}
+\indexentry{independence typesetter}{18}
+\indexentry{independence typesetter}{34}
+\indexentry{independence typesetter}{65}
+\indexentry{independence typesetter}{80}
+\indexentry{infinite context}{68}
+\indexentry{inheritance filename}{70}
+\indexentry{inheritance section name}{35}
+\indexentry{initialization FunnelWeb}{70}
+\indexentry{initialization script}{49}
+\indexentry{initialization script}{71}
+\indexentry{inline typesetter directives}{83}
+\indexentry{inline}{81}
+\indexentry{input file option}{68}
+\indexentry{input files}{47}
+\indexentry{Input file}{115}
+\indexentry{input file}{18}
+\indexentry{input file}{64}
+\indexentry{input file}{77}
+\indexentry{input line length maximum}{79}
+\indexentry{input line length pragma}{79}
+\indexentry{input line length}{42}
+\indexentry{input line length}{79}
+\indexentry{inserting EOL markers}{76}
+\indexentry{inserting into text arbitrary characters}{74}
+\indexentry{inserting into text control characters}{74}
+\indexentry{inserting into text special character}{74}
+\indexentry{installation FunnelWeb}{101}
+\indexentry{installation problems}{107}
+\indexentry{installing FunnelWeb}{106}
+\indexentry{interactive mode}{47}
+\indexentry{interactive option}{69}
+\indexentry{interdependent documentation}{50}
+\indexentry{interface command line}{66}
+\indexentry{interpreter command}{47}
+\indexentry{introduction tutorial}{19}
+\indexentry{invisible pragmas}{78}
+\indexentry{invocation number}{23}
+\indexentry{invocations number}{42}
+\indexentry{invoking FunnelWeb}{20}
+\indexentry{invoking FunnelWeb}{66}
+\indexentry{J option}{69}
+\indexentry{Jeremy Begg}{11}
+\indexentry{journal file option}{69}
+\indexentry{Journal file}{115}
+\indexentry{journal file}{64}
+\indexentry{journal file}{69}
+\indexentry{K option}{69}
+\indexentry{Kernighan88}{117}
+\indexentry{Kernighan88}{65}
+\indexentry{keyboard mode}{47}
+\indexentry{keyboard option}{69}
+\indexentry{Knuth Donald}{11}
+\indexentry{Knuth Donald}{50}
+\indexentry{Knuth Donald}{9}
+\indexentry{Knuth83}{117}
+\indexentry{Knuth83}{17}
+\indexentry{Knuth83}{25}
+\indexentry{Knuth83}{25}
+\indexentry{Knuth83}{9}
+\indexentry{Knuth84}{117}
+\indexentry{Knuth84}{117}
+\indexentry{Knuth84}{13}
+\indexentry{Knuth84}{17}
+\indexentry{Knuth84}{18}
+\indexentry{L option}{69}
+\indexentry{Lamport86}{117}
+\indexentry{Lamport86}{13}
+\indexentry{language independence}{18}
+\indexentry{languages multiple}{55}
+\indexentry{laser printer}{55}
+\indexentry{LaTeX}{13}
+\indexentry{LaTeX}{84}
+\indexentry{layout program}{22}
+\indexentry{layout program}{28}
+\indexentry{length command}{91}
+\indexentry{length input line}{42}
+\indexentry{length line}{71}
+\indexentry{length output line}{42}
+\indexentry{letter}{67}
+\indexentry{levels of diagnostics}{65}
+\indexentry{libraries macro}{31}
+\indexentry{license FunnelWeb}{112}
+\indexentry{license GNU}{112}
+\indexentry{license GNU}{18}
+\indexentry{license GNU}{9}
+\indexentry{line length input}{79}
+\indexentry{line length}{71}
+\indexentry{line termination}{71}
+\indexentry{list document}{64}
+\indexentry{list options}{68}
+\indexentry{list shell commands}{93}
+\indexentry{listing file context}{68}
+\indexentry{listing file option}{69}
+\indexentry{Listing file}{115}
+\indexentry{listing file}{64}
+\indexentry{listing file}{69}
+\indexentry{literal construct}{37}
+\indexentry{literal directive}{84}
+\indexentry{literate programming tools}{15}
+\indexentry{literate programming, facilities}{15}
+\indexentry{literate programming, most significant benefit}{17}
+\indexentry{literate programming}{15}
+\indexentry{literate programming}{15}
+\indexentry{literate programming}{50}
+\indexentry{MacDraw}{54}
+\indexentry{Macintosh}{13}
+\indexentry{Macintosh}{54}
+\indexentry{macro attributes}{85}
+\indexentry{macro bindings}{22}
+\indexentry{macro body}{85}
+\indexentry{macro calls indentation}{25}
+\indexentry{macro calls}{86}
+\indexentry{macro checks}{88}
+\indexentry{macro definitions}{32}
+\indexentry{Macro definition}{116}
+\indexentry{macro definition}{85}
+\indexentry{macro definition}{87}
+\indexentry{macro expansion indentation}{78}
+\indexentry{macro expansion}{30}
+\indexentry{macro expansion}{47}
+\indexentry{macro expansion}{87}
+\indexentry{macro expressions}{86}
+\indexentry{macro facilities tutorial}{22}
+\indexentry{macro identifiers}{41}
+\indexentry{macro libraries}{31}
+\indexentry{macro names}{41}
+\indexentry{macro names}{86}
+\indexentry{macro name}{85}
+\indexentry{macro parameter delimiting}{87}
+\indexentry{macro recursion}{43}
+\indexentry{macro recursion}{88}
+\indexentry{macro table dump}{68}
+\indexentry{macro table}{64}
+\indexentry{macros additive}{26}
+\indexentry{macros parameterized}{28}
+\indexentry{macros simple tutorial}{22}
+\indexentry{macros static}{87}
+\indexentry{Macro}{115}
+\indexentry{magic trick}{15}
+\indexentry{maintenance programmer}{50}
+\indexentry{make utility}{49}
+\indexentry{manuals printing}{107}
+\indexentry{mapped file dump}{68}
+\indexentry{Mapper}{116}
+\indexentry{mapper}{71}
+\indexentry{martinet FunnelWeb}{42}
+\indexentry{maximum input line length}{79}
+\indexentry{maximum output file line length pragma}{79}
+\indexentry{maximum output file line length}{79}
+\indexentry{maximum product file line length pragma}{79}
+\indexentry{maximum product file line length}{79}
+\indexentry{medicine wholistic}{53}
+\indexentry{memory use of}{30}
+\indexentry{memory}{47}
+\indexentry{MIL-STD-2167A}{51}
+\indexentry{monster file postscript}{54}
+\indexentry{multiple languages}{55}
+\indexentry{name empty}{42}
+\indexentry{name FunnelWeb}{19}
+\indexentry{name section}{34}
+\indexentry{name section}{84}
+\indexentry{names macro}{41}
+\indexentry{names macro}{86}
+\indexentry{names quick}{42}
+\indexentry{names quick}{76}
+\indexentry{names section}{86}
+\indexentry{names}{86}
+\indexentry{name}{70}
+\indexentry{new page pragma}{81}
+\indexentry{new page}{81}
+\indexentry{newpage directive}{37}
+\indexentry{no indentation}{78}
+\indexentry{non-determinism}{68}
+\indexentry{non-printable characters}{96}
+\indexentry{none indentation}{78}
+\indexentry{notation}{63}
+\indexentry{notes efficiency}{47}
+\indexentry{notice copyright}{1}
+\indexentry{novels}{50}
+\indexentry{number calls}{23}
+\indexentry{number invocations}{42}
+\indexentry{number invocation}{23}
+\indexentry{number of times called}{23}
+\indexentry{numbering cross reference}{89}
+\indexentry{numbering section}{89}
+\indexentry{object code}{26}
+\indexentry{obtaining FunnelWeb}{101}
+\indexentry{open systems}{55}
+\indexentry{option B}{68}
+\indexentry{option C}{68}
+\indexentry{option delete output}{68}
+\indexentry{option dump}{68}
+\indexentry{option D}{49}
+\indexentry{option D}{68}
+\indexentry{option execute script}{69}
+\indexentry{option F}{68}
+\indexentry{option help}{68}
+\indexentry{option H}{68}
+\indexentry{option include file}{69}
+\indexentry{option input file}{68}
+\indexentry{option interactive}{69}
+\indexentry{option I}{69}
+\indexentry{option journal file}{69}
+\indexentry{option J}{69}
+\indexentry{option keyboard}{69}
+\indexentry{option K}{69}
+\indexentry{option listing file}{69}
+\indexentry{option L}{69}
+\indexentry{option quiet}{69}
+\indexentry{option Q}{69}
+\indexentry{option screen}{69}
+\indexentry{option S}{69}
+\indexentry{option typeset}{69}
+\indexentry{option T}{69}
+\indexentry{option width}{69}
+\indexentry{option W}{69}
+\indexentry{option X}{69}
+\indexentry{options command}{92}
+\indexentry{options default}{49}
+\indexentry{options default}{92}
+\indexentry{options list}{68}
+\indexentry{options setting defaults}{49}
+\indexentry{options syntax}{67}
+\indexentry{options tracedump}{68}
+\indexentry{options}{67}
+\indexentry{options}{68}
+\indexentry{Option}{116}
+\indexentry{order action execution}{71}
+\indexentry{order program}{22}
+\indexentry{ordering program}{15}
+\indexentry{Ordinary options}{70}
+\indexentry{organization boring}{50}
+\indexentry{organization spaghetti}{50}
+\indexentry{output file line length maximum}{79}
+\indexentry{output files delete}{49}
+\indexentry{output files}{18}
+\indexentry{output files}{64}
+\indexentry{Output file}{116}
+\indexentry{output line length}{42}
+\indexentry{output WEB}{25}
+\indexentry{over documentation}{51}
+\indexentry{overhead procedure call}{57}
+\indexentry{overview FunnelWeb}{18}
+\indexentry{overview FunnelWeb}{64}
+\indexentry{overview typesetting}{32}
+\indexentry{OzTeX}{13}
+\indexentry{package}{55}
+\indexentry{parameter list, absent}{29}
+\indexentry{parameter lists formal}{86}
+\indexentry{parameterized macros}{28}
+\indexentry{parameters actual}{29}
+\indexentry{parameters formal}{28}
+\indexentry{parameters formal}{28}
+\indexentry{parameters formal}{87}
+\indexentry{Parser}{116}
+\indexentry{parser}{64}
+\indexentry{parser}{82}
+\indexentry{parsing command line}{66}
+\indexentry{Pascal}{15}
+\indexentry{Pascal}{25}
+\indexentry{Pascal}{26}
+\indexentry{Pascal}{57}
+\indexentry{Pascal}{59}
+\indexentry{Pat Scannel}{29}
+\indexentry{pavlov documentation}{51}
+\indexentry{phases execution}{64}
+\indexentry{phases}{64}
+\indexentry{PhD thesis}{54}
+\indexentry{pitfalls FunnelWeb}{50}
+\indexentry{poem animal}{30}
+\indexentry{poem camera}{30}
+\indexentry{portability}{18}
+\indexentry{postscript header file}{54}
+\indexentry{postscript monster file}{54}
+\indexentry{PostScript}{54}
+\indexentry{postscript}{57}
+\indexentry{pragma input line length}{79}
+\indexentry{pragma maximum output file line length}{79}
+\indexentry{pragma maximum product file line length}{79}
+\indexentry{pragma new page}{81}
+\indexentry{pragma table of contents}{81}
+\indexentry{pragma title}{82}
+\indexentry{pragma typesetter}{80}
+\indexentry{pragma vskip}{81}
+\indexentry{pragmas invisible}{78}
+\indexentry{pragmas visible}{78}
+\indexentry{pragmas}{78}
+\indexentry{Pragma}{116}
+\indexentry{pragma}{25}
+\indexentry{pragma}{78}
+\indexentry{preface}{9}
+\indexentry{preprocessor C}{20}
+\indexentry{preprocessor C}{57}
+\indexentry{presentation notes}{13}
+\indexentry{Printed documentation}{116}
+\indexentry{printer laser}{55}
+\indexentry{printing manuals}{107}
+\indexentry{printing system}{55}
+\indexentry{problems binding}{57}
+\indexentry{problems installation}{107}
+\indexentry{procedure call overhead}{57}
+\indexentry{processing command line}{66}
+\indexentry{processing command line}{92}
+\indexentry{product file line length maximum}{79}
+\indexentry{product file width}{69}
+\indexentry{product files}{18}
+\indexentry{product files}{64}
+\indexentry{Product file}{116}
+\indexentry{production tool}{19}
+\indexentry{program layout}{22}
+\indexentry{program layout}{28}
+\indexentry{program ordering}{15}
+\indexentry{program order}{22}
+\indexentry{programmer maintenance}{50}
+\indexentry{programmer's cheer}{35}
+\indexentry{programming literate}{50}
+\indexentry{Q option}{69}
+\indexentry{quick names}{42}
+\indexentry{quick names}{76}
+\indexentry{quick name}{42}
+\indexentry{quick name}{76}
+\indexentry{quiet option}{69}
+\indexentry{quit command}{98}
+\indexentry{random access}{50}
+\indexentry{rec.humor.funny}{29}
+\indexentry{recursion macro}{43}
+\indexentry{recursion macro}{88}
+\indexentry{recursive include files}{31}
+\indexentry{references}{117}
+\indexentry{referencing cross}{89}
+\indexentry{registration FunnelWeb}{110}
+\indexentry{regression testing}{103}
+\indexentry{regression testing}{47}
+\indexentry{reliability}{18}
+\indexentry{REM statement}{57}
+\indexentry{report annual}{58}
+\indexentry{results directory}{103}
+\indexentry{return status}{65}
+\indexentry{Roger Brissenden}{11}
+\indexentry{Rosovsky90}{117}
+\indexentry{Rosovsky90}{17}
+\indexentry{Ross Williams}{1}
+\indexentry{rule simple}{20}
+\indexentry{rules FunnelWeb}{42}
+\indexentry{running FunnelWeb}{66}
+\indexentry{S option}{69}
+\indexentry{Scannel Pat}{29}
+\indexentry{Scanner}{116}
+\indexentry{scanner}{64}
+\indexentry{scanner}{71}
+\indexentry{screen option}{69}
+\indexentry{script initialization}{49}
+\indexentry{script initialization}{71}
+\indexentry{script startup}{49}
+\indexentry{scripts directory}{103}
+\indexentry{Script}{116}
+\indexentry{section constructs}{83}
+\indexentry{section headings}{34}
+\indexentry{section name inheritance}{35}
+\indexentry{section names}{86}
+\indexentry{section name}{34}
+\indexentry{section name}{84}
+\indexentry{section numbering}{89}
+\indexentry{section strength}{46}
+\indexentry{semantic architecture}{64}
+\indexentry{sequences special}{72}
+\indexentry{set abstraction}{59}
+\indexentry{set command}{48}
+\indexentry{set command}{98}
+\indexentry{setting defaults options}{49}
+\indexentry{setting special character}{74}
+\indexentry{severe severity}{65}
+\indexentry{severe status}{90}
+\indexentry{severity assertion}{65}
+\indexentry{severity error}{65}
+\indexentry{severity fatal}{65}
+\indexentry{severity severe}{65}
+\indexentry{severity warning}{65}
+\indexentry{severity}{65}
+\indexentry{sharing information}{56}
+\indexentry{sharing text}{58}
+\indexentry{shark white pointer}{19}
+\indexentry{shell commands list}{93}
+\indexentry{shell commands}{93}
+\indexentry{shell errors}{90}
+\indexentry{shell FunnelWeb}{90}
+\indexentry{shell uses}{90}
+\indexentry{Shell}{116}
+\indexentry{shooting}{31}
+\indexentry{show command}{48}
+\indexentry{show command}{98}
+\indexentry{sign}{67}
+\indexentry{Simon Hackett}{11}
+\indexentry{simple macros tutorial}{22}
+\indexentry{simple rule}{20}
+\indexentry{simple sequence}{72}
+\indexentry{simplicity}{18}
+\indexentry{size font}{46}
+\indexentry{skip vertical}{81}
+\indexentry{skipto command}{98}
+\indexentry{small functions}{56}
+\indexentry{Smith91}{117}
+\indexentry{Smith91}{17}
+\indexentry{snake tiger}{19}
+\indexentry{song}{29}
+\indexentry{sources directory}{103}
+\indexentry{spacing}{43}
+\indexentry{spaghetti organization}{50}
+\indexentry{special character changing}{31}
+\indexentry{special character default}{72}
+\indexentry{special character inserting into text}{74}
+\indexentry{special character setting}{74}
+\indexentry{Special character}{116}
+\indexentry{special character}{20}
+\indexentry{special character}{72}
+\indexentry{special sequences}{72}
+\indexentry{Special sequence}{116}
+\indexentry{special sequence}{20}
+\indexentry{special sequence}{72}
+\indexentry{special tokens}{82}
+\indexentry{speed}{47}
+\indexentry{spider Funnel-web}{19}
+\indexentry{startup FunnelWeb}{70}
+\indexentry{startup script}{49}
+\indexentry{statement REM}{57}
+\indexentry{static analysis}{88}
+\indexentry{static macros}{87}
+\indexentry{status assertion}{90}
+\indexentry{status command}{99}
+\indexentry{status error}{90}
+\indexentry{status fatal}{90}
+\indexentry{status return}{65}
+\indexentry{status severe}{90}
+\indexentry{status success}{90}
+\indexentry{status warning}{90}
+\indexentry{stream of consciousness}{50}
+\indexentry{strength headings}{46}
+\indexentry{strength section}{46}
+\indexentry{strength typesetting}{46}
+\indexentry{string substitution}{91}
+\indexentry{string substitution}{94}
+\indexentry{string}{67}
+\indexentry{structure hierarchical}{34}
+\indexentry{structure tree}{83}
+\indexentry{Strunk79}{117}
+\indexentry{Strunk79}{51}
+\indexentry{substitution string}{91}
+\indexentry{substitution string}{94}
+\indexentry{success status}{90}
+\indexentry{support FunnelWeb}{110}
+\indexentry{suppress console output}{69}
+\indexentry{suppressing EOL markers}{77}
+\indexentry{suppression EOL}{23}
+\indexentry{suppression file}{49}
+\indexentry{Sydney}{19}
+\indexentry{syntax command line options}{67}
+\indexentry{syntax command line}{67}
+\indexentry{syntax EBNF}{63}
+\indexentry{syntax high level}{82}
+\indexentry{syntax options}{67}
+\indexentry{system printing}{55}
+\indexentry{T option}{69}
+\indexentry{table macro}{64}
+\indexentry{table of contents directive}{37}
+\indexentry{table of contents pragma}{81}
+\indexentry{table of contents}{81}
+\indexentry{tabs}{42}
+\indexentry{Tangle}{116}
+\indexentry{tangle}{65}
+\indexentry{tangle}{88}
+\indexentry{Tangling}{21}
+\indexentry{target typesetter}{89}
+\indexentry{termination file}{71}
+\indexentry{termination line}{71}
+\indexentry{terminology}{63}
+\indexentry{testing FunnelWeb}{105}
+\indexentry{testing regression}{103}
+\indexentry{testing regression}{47}
+\indexentry{tests directory}{104}
+\indexentry{text editors}{42}
+\indexentry{text files cryptic}{55}
+\indexentry{text free}{83}
+\indexentry{text sharing}{58}
+\indexentry{text tokens}{82}
+\indexentry{TeX}{13}
+\indexentry{TeX}{18}
+\indexentry{TeX}{22}
+\indexentry{TeX}{54}
+\indexentry{thesis PhD}{54}
+\indexentry{tiger snake}{19}
+\indexentry{time development}{17}
+\indexentry{times dump}{68}
+\indexentry{title directive}{37}
+\indexentry{title pragma}{82}
+\indexentry{title}{82}
+\indexentry{token list dump}{68}
+\indexentry{tolerate command}{100}
+\indexentry{tools literate programming}{15}
+\indexentry{trace command}{100}
+\indexentry{trace on command}{48}
+\indexentry{tracedump options}{68}
+\indexentry{trailing blanks}{42}
+\indexentry{tree directory}{102}
+\indexentry{tree structure}{83}
+\indexentry{Trevorrow Andrew}{13}
+\indexentry{tutorial +=}{26}
+\indexentry{tutorial ==}{26}
+\indexentry{tutorial @M}{24}
+\indexentry{tutorial @Z}{24}
+\indexentry{tutorial introduction}{19}
+\indexentry{tutorial macro facilities}{22}
+\indexentry{tutorial macros simple}{22}
+\indexentry{tutorial simple macros}{22}
+\indexentry{tutorial typesetting}{32}
+\indexentry{tutorial}{15}
+\indexentry{tutorial}{19}
+\indexentry{twelve bugs of christmas}{29}
+\indexentry{two main aspects FunnelWeb}{21}
+\indexentry{typesafe generics}{61}
+\indexentry{typeset file}{69}
+\indexentry{typeset option}{69}
+\indexentry{typesetter directive tokens}{82}
+\indexentry{typesetter directives}{66}
+\indexentry{typesetter directives}{81}
+\indexentry{typesetter independence}{18}
+\indexentry{typesetter independence}{34}
+\indexentry{typesetter independence}{65}
+\indexentry{typesetter independence}{80}
+\indexentry{typesetter independent}{34}
+\indexentry{typesetter pragma}{80}
+\indexentry{typesetter target}{89}
+\indexentry{Typesetting directive}{116}
+\indexentry{typesetting overview}{32}
+\indexentry{typesetting strength}{46}
+\indexentry{typesetting tutorial}{32}
+\indexentry{typesetting}{13}
+\indexentry{typesetting}{89}
+\indexentry{universities}{17}
+\indexentry{University Adelaide}{59}
+\indexentry{Unix newline}{75}
+\indexentry{Unix}{67}
+\indexentry{unprintable characters}{71}
+\indexentry{USDOD83}{117}
+\indexentry{use of memory}{30}
+\indexentry{useful commands}{47}
+\indexentry{userman directory}{105}
+\indexentry{uses shell}{90}
+\indexentry{versions FunnelWeb}{114}
+\indexentry{vertical skip}{81}
+\indexentry{visible pragmas}{78}
+\indexentry{vskip directive}{37}
+\indexentry{vskip pragma}{81}
+\indexentry{W option}{69}
+\indexentry{warning severity}{65}
+\indexentry{warning status}{90}
+\indexentry{warranty}{112}
+\indexentry{Weave}{116}
+\indexentry{weave}{65}
+\indexentry{weave}{89}
+\indexentry{Weaving}{21}
+\indexentry{WEB output}{25}
+\indexentry{WEB}{21}
+\indexentry{WEB}{25}
+\indexentry{Web}{9}
+\indexentry{white pointer shark}{19}
+\indexentry{wholistic debugging}{53}
+\indexentry{wholistic debugging}{53}
+\indexentry{wholistic medicine}{53}
+\indexentry{width option}{69}
+\indexentry{width product file}{69}
+\indexentry{Williams Ross}{1}
+\indexentry{workstations}{48}
+\indexentry{workstation}{90}
+\indexentry{write command}{100}
+\indexentry{writeu command}{100}
+\indexentry{X option}{69}
diff --git a/web/funnelAC/userman/u_manual.tex b/web/funnelAC/userman/u_manual.tex
new file mode 100644
index 0000000000..41d06b00dc
--- /dev/null
+++ b/web/funnelAC/userman/u_manual.tex
@@ -0,0 +1,290 @@
+%==============================================================================%
+% FUNNELWEB USER'S MANUAL %
+%==============================================================================%
+%
+% Summary
+% -------
+% This is the main .tex file of the FunnelWeb User's Manual.
+%
+% For a list of the other files that contribute to this document,
+% see the list of files given in \input lines at the end of this file.
+%
+% See the TeX comments below to find out how to typeset this document.
+%
+%
+% Copyright
+% ---------
+% Copyright (C) 1992 Ross N. Williams.
+%
+% Permission is granted to make and distribute verbatim copies of this manual
+% provided that the copyright notice and this permission notice are preserved
+% on all copies.
+%
+%
+% Version
+% -------
+% Date : May 1992.
+% Version : 1.0.
+%
+%
+% Author
+% ------
+% Name : Ross Williams.
+% Email : ross@spam.adelaide.edu.au
+% Snail : 16 Lerwick Avenue, Hazelwood Park 5066, Australia.
+%
+%
+% How to Typeset This Document
+% ----------------------------
+% This document is written in a format suitable for processing by the LaTeX
+% typesetting system which can be found on many machines around the world.
+% The document is an entirely self contained LaTeX document. To assist in
+% the electronic distribution of this document, all diagrams have been
+% constructing using ASCII text from within LaTeX. This means that all you
+% need to print this document is a LaTeX typesetting system.
+%
+% To print this document using LaTeX, give a command sequence that looks
+% something like this:
+%
+% latex manual
+% latex manual
+% sort -f <manual.idx >manual.sin
+% % Start here if manual.aux, manual.toc, and manual.sin already exist.
+% latex manual
+% print manual
+%
+% The commands must be given three times so as to allow the cross
+% referencing information to be correctly assembled.
+% The "sort" command should perform a case insensitive sort of the lines of
+% its input, but should not alter the lines it is sorting. In the example
+% about, the "-f" option specifies that the sort should be case insensitive.
+% The "print" command should print the .dvi file generated by LaTeX.
+% The details of the typesetting sequence above may vary on your computer
+% system.
+%
+%=============================================================================%
+
+
+% Basic Document Style
+% --------------------
+% The default font size is 10pt which is what I want.
+% titlepage - Instructs LaTeX to produce a title page at the front.
+% book - Use the "book" built in format.
+\documentstyle[titlepage]{book}
+
+% The following pagestyle command instructs LaTeX to set each page with just
+% a page number at the middle of the bottom of each page.
+\pagestyle{plain}
+
+% By default, the "book" style sets even and odd pages differently on the
+% assumption that the result is to be used in a two-sided printing process.
+% However, most people printing this will print it single sided.
+% To suppress double sided mode, we need to give the \onecolumn command.
+\onecolumn
+
+
+% Page Size and Position
+% ----------------------
+% The following sets the size of the text box and its position on the page.
+% It works OK on A4 paper. I suppose I should test it on American paper too.
+\textwidth 15cm
+\textheight 24cm
+\topmargin 0cm
+\oddsidemargin 1.5cm
+\evensidemargin 1.5cm
+\headheight 0cm
+\headsep 0cm
+
+
+% Table of Contents
+% -----------------
+% Specify that all headings be numbered and appear in the Table of Contents.
+\setcounter{secnumdepth}{100}
+\setcounter{tocdepth}{100}
+
+% LaTeX lets you create an unnumbered chapter, but it doesn't put it in
+% the table of contents. So we have to do it manually.
+\def\pseudochapter#1{%
+\chapter*{#1}
+\addcontentsline{toc}{chapter}{#1}
+}
+
+% Paragraph Separation and Indentation
+% ------------------------------------
+% The default LaTeX format is to have paragraphs jammed up against each other
+% with indentation of text on the first line of each paragraph used to
+% highlight the start of each paragraph. I prefer to identify paragraphs
+% by separating them with space and eliminating the indentation.
+\parskip \medskipamount
+\parindent 0pt
+
+
+% Quick Style Macros
+% ------------------
+% Use of the following macros is much neater and safer than opening a group
+% and setting a mode (e.g. {\bf sloth}) as these macros will cause TeX to
+% scream if they span more than one paragraph whereas the group method
+% can cause half the document to be set in a funny mode.
+% Other little macros here serve the same neatening normalizing purposes.
+\def\i#1{{\it #1}} % Italics.
+\def\b#1{{\bf #1}} % Bold.
+\def\p#1{{\tt #1}} % Program text.
+\def\sq#1{`#1'} % Single quotes.
+\def\dq#1{``#1''} % Double quotes.
+\def\dqp#1{\dq{\p{#1}}} % Double quoted program text.
+\def\fix#1{\footnote{$\bullet$ #1}} % Fix it up footnote.
+\def\softfix#1{} % Marks opportunity for improvement.
+\def\eg{e.g.~} % Spacing regulated "e.g.".
+\def\ie{i.e.~} % Spacing regulated "i.e.".
+\def\til{\char`\~} % For tilde ("~") character.
+\def\circumflex{\char`\^} % Circumflex.
+\def\bs{{\tt\char`\\}} % Backslash.
+
+% Point Making
+% ------------
+% LaTeX provides some useful environment for listing points. However, it does
+% not seem to provide what I want which is a paragraph of text led in by
+% a label set in bold.
+\def\thing#1{{\bf #1}}
+\def\firstthing#1{\thing{#1}}
+\def\narrowthing#1#2{{%From defintion of \narrower
+\advance\leftskip1cm%
+\advance\rightskip1cm%
+{\bf #1} #2\vskip0pt}}
+\def\narrowtext#1{{%From defintion of \narrower
+\advance\leftskip1cm%
+\advance\rightskip1cm%
+#1\vskip0pt}}
+\def\summary{\b{Summary:}\ }
+
+% Invisible Annotations
+% ---------------------
+% Sometimes it is convenient to be able to annotate the LaTeX code without
+% causing text to appear in the document.
+% Here, the \checked{} macro can be placed next to any quotation or
+% fact, or other externally dependent material that has to be checked
+% before publication. The \note{} macro can be used to add a note.
+% Both macros are safer than "%" in a paragraph where the text may be
+% continually being rearranged across lines.
+\def\checked#1{}
+\def\note#1{}
+
+
+% Wide Verbatim Text
+% ------------------
+% This document was originally set in 12pt and the result was that many of
+% the verbatim examples wouldn't fit. To solve this, I created two macros
+% to reduce and increase the size of the text, and wrapped the longer
+% verbatim texts in calls to the macros. Later, the document was reset in
+% 10pt eliminating the original problem, so I redefined the macros to empty.
+%\def\beginsmall{\scriptsize}
+%\def\endsmall{\normalsize}
+\def\beginsmall{}
+\def\endsmall{}
+
+
+% The Index
+% ---------
+% LaTeX provides a single command (\index) for adding index entries to the
+% index. We shorten it and refine it a little with a few definitions.
+\def\newterm#1{{\bf #1}\x{#1}} % Special terminology.
+\def\x#1{\index{#1}} % Normal index entry.
+\def\xx#1#2{\index{#1 #2}\index{#2 #1}} % Symmetric index entry.
+\def\xn#1#2{\xx{#1}{#2}} % For a person's name.
+\def\xs#1#2{\index{#1, #2}} % For an entry with a subclause.
+
+
+% References
+% ----------
+\def\paper#1{{\bf [#1]}\x{#1}\linebreak[1]{}}
+
+
+% Figures and Tables
+% ------------------
+% LaTeX numbers figures by chapter and doesn't position captions where I
+% want them and so I have decided to do it all manually. I haven't got
+% time for fancy stuff so I am using manual macros.
+\def\mylabel#1#2{%
+\begin{quotation}
+\footnotesize\baselineskip=12pt #2
+\end{quotation}
+\centerline{#1}
+\smallskip}
+
+\def\figfor#1{{\bf Figure~#1}}
+\def\tabfor#1{{\bf Table~#1}}
+
+\def\figarchitecture{\figfor{1}}
+\def\figfunarch{\figfor{2}}
+\def\figphases{\figfor{3}}
+\def\figregform{\figfor{4}}
+
+%\def\tabone{\tabfor{1}}
+%\def\tabtwo{\tabfor{2}}
+
+
+% Glossary
+% --------
+\def\gloss#1{\thing{#1:}\x{#1}}
+
+
+% Random Leftover Stuff
+% ---------------------
+\def\topicbreak{\bigskip\centerline{--- $\S$ ---}\bigskip}
+
+
+
+%------------------------------------------------------------------------------
+
+\makeindex
+
+\begin{document}
+
+% Title Page
+% ----------
+% Although the title should really be in the ch0.tex file, LaTeX forces us to
+% put it here.
+\begin{titlepage}
+\vspace*{3cm}
+\begin{center}
+\Huge
+\vspace{2cm}
+FunnelWeb User's Manual\\
+\vspace{2cm}
+\LARGE
+Ross~N.~Williams\\
+\vspace{1cm}
+\Large
+V1.0 for FunnelWeb V3.0\\
+\vspace{1cm}
+May 1992\\
+\normalsize
+\end{center}
+\end{titlepage}
+
+% Note: LaTeX sometimes puts a blank page before chapters so as to
+% start each chapter on an odd-numbered page. There is nothing that I
+% can do about this. This is part of the cost of using LaTeX instead
+% of TeX.
+
+%\makeindex % original position
+
+%-------------------------------------------------------------------------------
+
+%\begin{document} % original position
+\sloppy
+\nonstopmode
+
+\input u_ch0 % Table of contents etc.
+\input u_ch1 % A Tutorial Introduction
+\input u_ch2 % FunnelWeb Hints
+\input u_ch3 % FunnelWeb Definition
+\input u_ch4 % FunnelWeb Installation.
+\input u_ch5 % FunnelWeb Administration.
+\input u_cha % Appendices
+
+\end{document}
+
+%==============================================================================%
+% End of Main .TeX File of FunnelWeb User's Manual %
+%==============================================================================%
diff --git a/web/funnelAC/userman/u_manual.toc b/web/funnelAC/userman/u_manual.toc
new file mode 100644
index 0000000000..b359e8fa3e
--- /dev/null
+++ b/web/funnelAC/userman/u_manual.toc
@@ -0,0 +1,166 @@
+\contentsline {chapter}{Preface}{9}
+\contentsline {chapter}{Acknowledgements}{11}
+\contentsline {chapter}{Presentation Notes}{13}
+\contentsline {chapter}{\numberline {1}A Tutorial Introduction}{15}
+\contentsline {section}{\numberline {1.1}What is Literate Programming?}{15}
+\contentsline {section}{\numberline {1.2}What is FunnelWeb?}{18}
+\contentsline {section}{\numberline {1.3}The Name FunnelWeb}{19}
+\contentsline {section}{\numberline {1.4}A FunnelWeb Tutorial}{19}
+\contentsline {section}{\numberline {1.5}A Hello World Document}{20}
+\contentsline {section}{\numberline {1.6}Macro Facilities}{22}
+\contentsline {subsection}{\numberline {1.6.1}Simple Macros}{22}
+\contentsline {subsection}{\numberline {1.6.2}Number of Times Called}{23}
+\contentsline {subsection}{\numberline {1.6.3}Indentation}{25}
+\contentsline {subsection}{\numberline {1.6.4}Additive Macros}{26}
+\contentsline {subsection}{\numberline {1.6.5}Parameterized Macros}{28}
+\contentsline {subsection}{\numberline {1.6.6}Macro Expansion}{30}
+\contentsline {subsection}{\numberline {1.6.7}Include Files}{30}
+\contentsline {section}{\numberline {1.7}Typesetting Facilities}{32}
+\contentsline {subsection}{\numberline {1.7.1}Overview}{32}
+\contentsline {subsection}{\numberline {1.7.2}Typesetter Independence}{34}
+\contentsline {subsection}{\numberline {1.7.3}Hierarchical Structure}{34}
+\contentsline {subsection}{\numberline {1.7.4}Understanding the Printed Documentation}{35}
+\contentsline {subsection}{\numberline {1.7.5}Literals and Emphasis}{37}
+\contentsline {subsection}{\numberline {1.7.6}Adding a Header Page}{37}
+\contentsline {subsection}{\numberline {1.7.7}Comments}{37}
+\contentsline {section}{\numberline {1.8}A Complete Example}{38}
+\contentsline {section}{\numberline {1.9}Summary}{39}
+\contentsline {chapter}{\numberline {2}FunnelWeb Hints}{41}
+\contentsline {section}{\numberline {2.1}Macro Names}{41}
+\contentsline {section}{\numberline {2.2}Quick Names}{42}
+\contentsline {section}{\numberline {2.3}FunnelWeb the Martinet}{42}
+\contentsline {section}{\numberline {2.4}Fiddling With End of Lines}{43}
+\contentsline {section}{\numberline {2.5}Fudging Conditionals}{44}
+\contentsline {section}{\numberline {2.6}Changing the Strength of Headings}{46}
+\contentsline {section}{\numberline {2.7}Efficiency Notes}{47}
+\contentsline {section}{\numberline {2.8}Interactive Mode}{47}
+\contentsline {section}{\numberline {2.9}Setting Up Default Options}{49}
+\contentsline {section}{\numberline {2.10}FunnelWeb and Make}{49}
+\contentsline {section}{\numberline {2.11}The Dangers of FunnelWeb}{50}
+\contentsline {section}{\numberline {2.12}Wholistic Debugging}{53}
+\contentsline {section}{\numberline {2.13}Examples of FunnelWeb Applications}{53}
+\contentsline {subsection}{\numberline {2.13.1}Analyzing the Monster Postscript Header File}{54}
+\contentsline {subsection}{\numberline {2.13.2}Making Ada ADTs more A}{55}
+\contentsline {subsection}{\numberline {2.13.3}Multiple Language Systems}{55}
+\contentsline {subsection}{\numberline {2.13.4}The Case of the Small Function}{56}
+\contentsline {subsection}{\numberline {2.13.5}When Comments are Bad}{57}
+\contentsline {subsection}{\numberline {2.13.6}Documents That Share Text}{58}
+\contentsline {subsection}{\numberline {2.13.7}Generics}{59}
+\contentsline {section}{\numberline {2.14}Summary}{62}
+\contentsline {chapter}{\numberline {3}FunnelWeb Definition}{63}
+\contentsline {section}{\numberline {3.1}Introduction}{63}
+\contentsline {section}{\numberline {3.2}Notation}{63}
+\contentsline {section}{\numberline {3.3}Terminology}{63}
+\contentsline {section}{\numberline {3.4}An Architectural Overview}{64}
+\contentsline {section}{\numberline {3.5}Diagnostics}{65}
+\contentsline {section}{\numberline {3.6}Typesetter Independence}{65}
+\contentsline {section}{\numberline {3.7}Command Line Interface}{66}
+\contentsline {subsection}{\numberline {3.7.1}Invoking FunnelWeb}{66}
+\contentsline {subsection}{\numberline {3.7.2}Command Line Arguments}{67}
+\contentsline {subsection}{\numberline {3.7.3}Options}{68}
+\contentsline {section}{\numberline {3.8}File Name Inheritance}{70}
+\contentsline {section}{\numberline {3.9}FunnelWeb Startup}{70}
+\contentsline {section}{\numberline {3.10}Scanner}{71}
+\contentsline {subsection}{\numberline {3.10.1}Basic Input File Processing}{71}
+\contentsline {subsection}{\numberline {3.10.2}Special Sequences}{72}
+\contentsline {subsection}{\numberline {3.10.3}Setting the Special Character}{74}
+\contentsline {subsection}{\numberline {3.10.4}Inserting the Special Character into the Text}{74}
+\contentsline {subsection}{\numberline {3.10.5}Inserting Arbitrary Characters into the Text}{74}
+\contentsline {subsection}{\numberline {3.10.6}Comments}{75}
+\contentsline {subsection}{\numberline {3.10.7}Quick Names}{76}
+\contentsline {subsection}{\numberline {3.10.8}Inserting End of Line Markers}{76}
+\contentsline {subsection}{\numberline {3.10.9}Suppressing End of Line Markers}{77}
+\contentsline {subsection}{\numberline {3.10.10}Include Files}{77}
+\contentsline {subsection}{\numberline {3.10.11}Pragmas}{78}
+\contentsline {subsubsection}{\numberline {3.10.11.1}Indentation}{78}
+\contentsline {subsubsection}{\numberline {3.10.11.2}Maximum Input Line Length}{79}
+\contentsline {subsubsection}{\numberline {3.10.11.3}Maximum Output File Line Length}{79}
+\contentsline {subsubsection}{\numberline {3.10.11.4}Typesetter}{80}
+\contentsline {subsection}{\numberline {3.10.12}Freestanding Typesetter Directives}{81}
+\contentsline {subsubsection}{\numberline {3.10.12.1}New Page}{81}
+\contentsline {subsubsection}{\numberline {3.10.12.2}Table of Contents}{81}
+\contentsline {subsubsection}{\numberline {3.10.12.3}Vertical Skip}{81}
+\contentsline {subsubsection}{\numberline {3.10.12.4}Title}{82}
+\contentsline {subsection}{\numberline {3.10.13}Scanner/Parser Interface}{82}
+\contentsline {section}{\numberline {3.11}Parser}{82}
+\contentsline {subsection}{\numberline {3.11.1}High Level Structure}{82}
+\contentsline {subsection}{\numberline {3.11.2}Free Text}{83}
+\contentsline {subsection}{\numberline {3.11.3}Typesetter Directives}{83}
+\contentsline {subsubsection}{\numberline {3.11.3.1}Section}{83}
+\contentsline {subsubsection}{\numberline {3.11.3.2}Literal Directive}{84}
+\contentsline {subsubsection}{\numberline {3.11.3.3}Emphasis Directive}{85}
+\contentsline {subsection}{\numberline {3.11.4}Macros}{85}
+\contentsline {subsubsection}{\numberline {3.11.4.1}Names}{86}
+\contentsline {subsubsection}{\numberline {3.11.4.2}Formal Parameter Lists}{86}
+\contentsline {subsection}{\numberline {3.11.5}Expressions}{86}
+\contentsline {subsection}{\numberline {3.11.6}Macro Calls}{86}
+\contentsline {subsection}{\numberline {3.11.7}Formal Parameters}{87}
+\contentsline {subsection}{\numberline {3.11.8}Macros are Static}{87}
+\contentsline {section}{\numberline {3.12}Analyser}{88}
+\contentsline {section}{\numberline {3.13}Tangle}{88}
+\contentsline {section}{\numberline {3.14}Weave}{89}
+\contentsline {subsection}{\numberline {3.14.1}Target Typesetter}{89}
+\contentsline {subsection}{\numberline {3.14.2}Cross Reference Numbering}{89}
+\contentsline {section}{\numberline {3.15}FunnelWeb Shell}{90}
+\contentsline {subsection}{\numberline {3.15.1}Introduction}{90}
+\contentsline {subsection}{\numberline {3.15.2}Return Statuses}{90}
+\contentsline {subsection}{\numberline {3.15.3}Command Line Length}{91}
+\contentsline {subsection}{\numberline {3.15.4}String Substitution}{91}
+\contentsline {subsection}{\numberline {3.15.5}How a Command Line is Processed}{92}
+\contentsline {subsection}{\numberline {3.15.6}Options}{92}
+\contentsline {subsection}{\numberline {3.15.7}Shell Commands}{93}
+\contentsline {subsubsection}{\numberline {3.15.7.1}Absent}{93}
+\contentsline {subsubsection}{\numberline {3.15.7.2}Codify}{93}
+\contentsline {subsubsection}{\numberline {3.15.7.3}Compare}{93}
+\contentsline {subsubsection}{\numberline {3.15.7.4}Define}{94}
+\contentsline {subsubsection}{\numberline {3.15.7.5}Diff}{94}
+\contentsline {subsubsection}{\numberline {3.15.7.6}Diffsummary}{95}
+\contentsline {subsubsection}{\numberline {3.15.7.7}Diffzero}{95}
+\contentsline {subsubsection}{\numberline {3.15.7.8}Eneo}{95}
+\contentsline {subsubsection}{\numberline {3.15.7.9}Execute}{96}
+\contentsline {subsubsection}{\numberline {3.15.7.10}Exists}{96}
+\contentsline {subsubsection}{\numberline {3.15.7.11}Fixeols}{96}
+\contentsline {subsubsection}{\numberline {3.15.7.12}Fw}{97}
+\contentsline {subsubsection}{\numberline {3.15.7.13}Help}{97}
+\contentsline {subsubsection}{\numberline {3.15.7.14}Here}{98}
+\contentsline {subsubsection}{\numberline {3.15.7.15}Quit}{98}
+\contentsline {subsubsection}{\numberline {3.15.7.16}Set}{98}
+\contentsline {subsubsection}{\numberline {3.15.7.17}Show}{98}
+\contentsline {subsubsection}{\numberline {3.15.7.18}Skipto}{98}
+\contentsline {subsubsection}{\numberline {3.15.7.19}Status}{99}
+\contentsline {subsubsection}{\numberline {3.15.7.20}Tolerate}{100}
+\contentsline {subsubsection}{\numberline {3.15.7.21}Trace}{100}
+\contentsline {subsubsection}{\numberline {3.15.7.22}Write}{100}
+\contentsline {subsubsection}{\numberline {3.15.7.23}Writeu}{100}
+\contentsline {section}{\numberline {3.16}Concluding Remarks}{100}
+\contentsline {chapter}{\numberline {4}FunnelWeb Installation}{101}
+\contentsline {section}{\numberline {4.1}Obtaining a Copy of FunnelWeb}{101}
+\contentsline {section}{\numberline {4.2}Establishing The Directory Tree}{102}
+\contentsline {subsection}{\numberline {4.2.1}Admin Directory}{102}
+\contentsline {subsection}{\numberline {4.2.2}Answers Directory}{102}
+\contentsline {subsection}{\numberline {4.2.3}Hackman Directory}{103}
+\contentsline {subsection}{\numberline {4.2.4}Results Directory}{103}
+\contentsline {subsection}{\numberline {4.2.5}Scripts Directory}{103}
+\contentsline {subsection}{\numberline {4.2.6}Sources Directory}{103}
+\contentsline {subsection}{\numberline {4.2.7}Tests Directory}{104}
+\contentsline {subsection}{\numberline {4.2.8}Userman Directory}{105}
+\contentsline {section}{\numberline {4.3}Compiling FunnelWeb}{105}
+\contentsline {section}{\numberline {4.4}Testing FunnelWeb}{105}
+\contentsline {section}{\numberline {4.5}Installing FunnelWeb}{106}
+\contentsline {section}{\numberline {4.6}Printing Manuals}{107}
+\contentsline {section}{\numberline {4.7}Installation Problems?}{107}
+\contentsline {chapter}{\numberline {5}FunnelWeb Administration}{109}
+\contentsline {section}{\numberline {5.1}Introduction}{109}
+\contentsline {section}{\numberline {5.2}The User's Commitment To FunnelWeb}{109}
+\contentsline {section}{\numberline {5.3}Documentation}{110}
+\contentsline {section}{\numberline {5.4}Registration}{110}
+\contentsline {section}{\numberline {5.5}Support}{110}
+\contentsline {section}{\numberline {5.6}Copyright}{112}
+\contentsline {section}{\numberline {5.7}Nowarranty}{112}
+\contentsline {section}{\numberline {5.8}Distribution}{113}
+\contentsline {section}{\numberline {5.9}Modification}{113}
+\contentsline {section}{\numberline {5.10}Versions}{114}
+\contentsline {section}{\numberline {5.11}FTP Archive and Author}{114}
+\contentsline {chapter}{\numberline {A}Glossary}{115}
+\contentsline {chapter}{\numberline {B}References}{117}
+\contentsline {chapter}{Index}{117}