Browse Source

Plan 9 from Bell Labs 2009-06-11

David du Colombier 15 years ago
parent
commit
984454ef23

BIN
sys/doc/acme/acme.fig1.gif


BIN
sys/doc/acme/acme.fig2.gif


+ 1466 - 0
sys/doc/acme/acme.html

@@ -0,0 +1,1466 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+"http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=utf8">
+<title>Acme: A User Interface for Programmers</title>
+</meta>
+</head>
+<body>
+<p style="margin-top: 0; margin-bottom: 0.50in"></p>
+<p style="margin-top: 0; margin-bottom: 0.21in"></p>
+
+<p style="line-height: 1.4em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: center;">
+<span style="font-size: 12pt"><b>Acme: A User Interface for Programmers</b></span></p>
+<p style="margin-top: 0; margin-bottom: 0.21in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<p style="line-height: 1.4em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: center;">
+<span style="font-size: 10pt"><i></i></span><span style="font-size: 10pt"><i>Rob Pike</i></span><span style="font-size: 10pt"><i></i></span></p>
+<p style="line-height: 1.4em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: center;">
+<span style="font-size: 10pt"><i></i></span><span style="font-size: 10pt"><i>rob@plan9.bell-labs.com</i></span><span style="font-size: 10pt"><i></i></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="margin-top: 0; margin-bottom: 0.33in"></p>
+<p style="line-height: 1.4em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: center;">
+<span style="font-size: 10pt"><i>ABSTRACT</i></span></p>
+<p style="margin-top: 0; margin-bottom: 0.19in"></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="line-height: 1.2em; margin-left: 1.50in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">A hybrid of window system, shell, and editor, Acme gives text-oriented
+applications a clean, expressive, and consistent style of interaction.
+Traditional window systems support interactive client programs and offer libraries of
+pre-defined operations such as pop-up menus
+and buttons to promote a consistent
+user interface among the clients.
+Acme instead provides its clients with a fixed user interface and
+simple conventions to encourage its uniform use.
+Clients access the facilities of Acme through a file system interface;
+Acme is in part a file server that exports device-like files that may be
+manipulated to access and control the contents of its windows.
+Written in a concurrent programming language,
+Acme is structured as a set of communicating processes that neatly subdivide
+the various aspects of its tasks: display management, input, file server, and so on.
+</span><span style="font-size: 10pt"></span><span style="font-size: 10pt"></span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.50in; text-indent: 0.35in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Acme attaches distinct functions to the three mouse buttons:
+the left selects text;
+the middle executes textual commands;
+and the right combines context search and file opening
+functions to integrate the various applications and files in
+the system.
+</span><span style="font-size: 10pt"></span><span style="font-size: 10pt"></span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.50in; text-indent: 0.35in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Acme works well enough to have developed
+a community that uses it exclusively.
+Although Acme discourages the traditional style of interaction
+based on typescript windows&mdash;teletypes&mdash;its
+users find Acme&rsquo;s other services render
+typescripts obsolete. 
+</span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<p style="margin-top: 0; margin-bottom: 0.50in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"><b>History and motivation
+</b></span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The usual typescript style of interaction with
+Unix and its relatives is an old one.
+The typescript&mdash;an intermingling of textual commands and their
+output&mdash;originates with the scrolls of paper on teletypes.
+The advent of windowed terminals has given each user what
+amounts to an array of teletypes, a limited and unimaginative
+use of the powers of bitmap displays and mice.
+Systems like the Macintosh
+that do involve the mouse as an integral part of the interaction
+are geared towards general users, not experts, and certainly
+not programmers.
+Software developers, at least on time-sharing systems, have been left behind.
+</span></p><center><table width=60% cellspacing=0 cellpadding=0 border=0><tr height=1>	<td width=1 bgcolor=#000000 />	<td width=10 bgcolor=#000000 />	<td bgcolor=#000000 />	<td width=10 bgcolor=#000000 />	<td width=1 bgcolor=#000000 /></tr><tr height=10>	<td width=1 bgcolor=#000000 />	<td width=10 />	<td />	<td width=10 />	<td width=1 bgcolor=#000000 /></tr>
+<tr>
+<td width=1 bgcolor=#000000 /><td width=10 /><td>
+<center><a href="acme.fig1.gif"><img src="acme.fig1.gif" /></a></center>
+<p style="line-height: 1.2em; text-indent: 0.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Figure 1.  A small Acme screen&mdash;normally it runs on a larger display&mdash;demonstrating
+some of the details discussed in the text.
+The right column contains some guide files,
+a mailbox presented by Acme&rsquo;s mail program,
+the columnated display of files in Acme&rsquo;s own source directory,
+a couple of windows from the OED browser,
+a debugger window,
+and an error window showing diagnostics from a compilation.
+The left column holds a couple of source files
+(</span><span style="font-size: 10pt"><tt>dat.h</tt></span><span style="font-size: 10pt">
+and
+</span><span style="font-size: 10pt"><tt>acme.l</tt></span><span style="font-size: 10pt">),
+another debugger window displaying a stack trace,
+and a third source file
+(</span><span style="font-size: 10pt"><tt>time.l</tt></span><span style="font-size: 10pt">).
+</span><span style="font-size: 10pt"><tt>Time.l</tt></span><span style="font-size: 10pt">
+was opened from the debugger by clicking the right mouse button
+on a line in the stack window;
+the mouse cursor landed on the offending line of
+</span><span style="font-size: 10pt"><tt>acme.l</tt></span><span style="font-size: 10pt">
+after a click on the compiler message.
+</span></p></td>
+<td width=10 /><td width=1 bgcolor=#000000 />
+</tr>
+<tr height=10><td width=1 bgcolor=#000000 />	<td width=10 /><td /><td width=10 />	<td width=1 bgcolor=#000000 /></tr><tr height=1>	<td width=1 bgcolor=#000000 />	<td width=10 bgcolor=#000000 />	<td bgcolor=#000000 />	<td width=10 bgcolor=#000000 />	<td width=1 bgcolor=#000000 /></tr>
+</table></center>
+<p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Some programs have mouse-based editing of
+text files and typescripts;
+ones I have built include
+the window systems
+</span><span style="font-size: 10pt"><tt>mux</tt></span><span style="font-size: 10pt">
+[Pike88]
+and
+</span><span style="font-size: 10pt"><tt>8&frac12;</tt></span><span style="font-size: 10pt">
+[Pike91]
+and the text editor
+Sam [Pike87].
+These have put the programmer&rsquo;s mouse to some productive work,
+but not wholeheartedly.  Even experienced users of these programs
+often retype text that could be grabbed with the mouse,
+partly because the menu-driven interface is imperfect
+and partly because the various pieces are not well enough integrated.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Other programs&mdash;EMACS [Stal93] is the prime example&mdash;offer a high
+degree of integration but with a user interface built around the
+ideas of cursor-addressed terminals that date from the 1970&rsquo;s.
+They are still keyboard-intensive and
+dauntingly complex.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The most ambitious attempt to face these issues was the Cedar
+system, developed at Xerox [Swei86].
+It combined a new programming language, compilers,
+window system, even microcode&mdash;a complete system&mdash;to
+construct a productive, highly
+integrated and interactive environment
+for experienced users of compiled languages.
+Although successful internally, the system was so large
+and so tied to specific hardware that it never fledged.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Cedar was, however, the major inspiration for Oberon [Wirt89],
+a system of similar scope but much smaller scale.
+Through careful selection of Cedar&rsquo;s ideas, Oberon shows
+that its lessons can be applied to a small, coherent system
+that can run efficiently on modest hardware.
+In fact, Oberon probably
+errs too far towards simplicity: a single-process system
+with weak networking, it seems an architectural throwback.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Acme is a new program,
+a combined window system, editor, and shell,
+that applies
+some of the ideas distilled by Oberon.
+Where Oberon uses objects and modules within a programming language (also called Oberon),
+Acme uses files and commands within an existing operating system (Plan 9).
+Unlike Oberon, Acme does not yet have support for graphical output, just text.
+At least for now, the work on Acme has concentrated on
+producing the smoothest user interface possible for a programmer
+at work.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The rest of this paper describes Acme&rsquo;s interface,
+explains how programs can access it,
+compares it to existing systems,
+and finally presents some unusual aspects of its implementation.
+</span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"><b>User interface
+</b></span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<center><table width=60% cellspacing=0 cellpadding=0 border=0><tr height=1>	<td width=1 bgcolor=#000000 />	<td width=10 bgcolor=#000000 />	<td bgcolor=#000000 />	<td width=10 bgcolor=#000000 />	<td width=1 bgcolor=#000000 /></tr><tr height=10>	<td width=1 bgcolor=#000000 />	<td width=10 />	<td />	<td width=10 />	<td width=1 bgcolor=#000000 /></tr>
+<tr>
+<td width=1 bgcolor=#000000 /><td width=10 /><td>
+<center><a href="acme.fig2.gif"><img src="acme.fig2.gif" /></a></center>
+<p style="line-height: 1.2em; text-indent: 0.35in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Figure 2.  An Acme window showing a section of code.
+The upper line of text is the tag containing the file name,
+relevant commands, and a scratch area (right of the vertical bar);
+the lower portion of the window is the
+body, or contents, of the file.
+Here the scratch area contains a command for the middle button
+(</span><span style="font-size: 10pt"><tt>mk</tt></span><span style="font-size: 10pt">)
+and a word to search for with the right button
+(</span><span style="font-size: 10pt"><tt>cxfidalloc</tt></span><span style="font-size: 10pt">).
+The user has just
+clicked the right button on
+</span><span style="font-size: 10pt"><tt>cxfidalloc</tt></span><span style="font-size: 10pt">
+and Acme has searched for the word, highlighted it,
+and moved the mouse cursor there.  The file has been modified:
+the center of the layout box is black and the command
+</span><span style="font-size: 10pt"><tt>Put</tt></span><span style="font-size: 10pt">
+appears in the tag.
+</span></p></td>
+<td width=10 /><td width=1 bgcolor=#000000 />
+</tr>
+<tr height=10><td width=1 bgcolor=#000000 />	<td width=10 /><td /><td width=10 />	<td width=1 bgcolor=#000000 /></tr><tr height=1>	<td width=1 bgcolor=#000000 />	<td width=10 bgcolor=#000000 />	<td bgcolor=#000000 />	<td width=10 bgcolor=#000000 />	<td width=1 bgcolor=#000000 /></tr>
+</table></center>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Acme windows are arrayed in columns (Figure 1) and are used more
+dynamically than in an environment like X Windows or
+</span><span style="font-size: 10pt"><tt>8&frac12;</tt></span><span style="font-size: 10pt">
+[Sche86, Pike91].
+The system frequently creates them automatically and the user
+can order a new one with a single mouse button click.
+The initial placement of a new window is determined
+automatically, but the user may move an existing window anywhere
+by clicking or dragging a
+</span><span style="font-size: 10pt"><i>layout box</i></span><span style="font-size: 10pt">
+in the upper left corner of
+the window.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Acme windows have two parts: a
+</span><span style="font-size: 10pt"><i>tag</i></span><span style="font-size: 10pt">
+holding a single line of text,
+above a
+</span><span style="font-size: 10pt"><i>body</i></span><span style="font-size: 10pt">
+holding zero or more lines (Figure 2).
+The body typically contains an image of a file being edited
+or the editable output of a
+program, analogous to an
+EMACS shell
+window.  The tag contains
+the name of the window
+(usually the name of the associated
+file or directory), some built-in commands, and a scratch area to hold arbitrary text.
+If a window represents a directory, the name in the tag ends with
+a slash and the body contains a list of the names of the files
+in the directory.
+Finally, each non-empty body holds a scroll bar at the left of the text.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Each column of windows also has a layout box and a tag.
+The tag has no special meaning, although Acme pre-loads it with a few
+built-in commands.
+There is also a tag across the whole display, also loaded with
+helpful commands and a list of active processes started
+by Acme.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Typing with the keyboard and selecting with the left button are as in
+many other systems, including the Macintosh,
+</span><span style="font-size: 10pt"><tt>8&frac12;</tt></span><span style="font-size: 10pt">,
+and Sam.
+The middle and right buttons are used, somewhat like the left button,
+to &lsquo;sweep&rsquo; text, but the indicated text is treated in a way
+that depends on the text&rsquo;s location&mdash;</span><span style="font-size: 10pt"><i>context</i></span><span style="font-size: 10pt">&mdash;as well as its content.
+This context, based on the directory of the file containing the text,
+is a central component of Acme&rsquo;s style of interaction.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Acme has no single notion of &lsquo;current directory&rsquo;.
+Instead, every command, file name,
+action, and so on is interpreted or executed in the directory named by the
+tag of the window containing the command.  For example, the string
+</span><span style="font-size: 10pt"><tt>mammals</tt></span><span style="font-size: 10pt">
+in a window labeled
+</span><span style="font-size: 10pt"><tt>/lib/</tt></span><span style="font-size: 10pt">
+or
+</span><span style="font-size: 10pt"><tt>/lib/insects</tt></span><span style="font-size: 10pt">
+will be interpreted as the file name
+</span><span style="font-size: 10pt"><tt>/lib/mammals</tt></span><span style="font-size: 10pt">
+if such a file exists.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Throughout Acme, the middle mouse button is used to execute commands
+and the right mouse button is used to locate and select files and text.
+Even when there are no true files on which to operate&mdash;for example
+when editing mail messages&mdash;Acme and its applications use
+consistent extensions of these basic functions.
+This idea is as vital to Acme as icons are to the Macintosh.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The middle button executes commands: text swept with the button
+pressed is underlined; when the button is released, the underline is
+removed and the indicated text is executed.
+A modest number of commands are recognized as built-ins: words like
+</span><span style="font-size: 10pt"><tt>Cut</tt></span><span style="font-size: 10pt">,
+</span><span style="font-size: 10pt"><tt>Paste</tt></span><span style="font-size: 10pt">,
+and
+</span><span style="font-size: 10pt"><tt>New</tt></span><span style="font-size: 10pt">
+name
+functions performed directly by Acme.
+These words often appear in tags to make them always available,
+but the tags are not menus: any text anywhere in Acme may be a command.
+For example, in the tag or body of any window one may type
+</span><span style="font-size: 10pt"><tt>Cut</tt></span><span style="font-size: 10pt">,
+select it with the left button, use the middle button to execute it,
+and watch it disappear again.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">If the middle button indicates a command that is not recognized as a built-in,
+it is executed in the directory
+named by the tag of the window holding the text.
+Also, the file to be executed is searched for first in that directory.
+Standard input is connected to
+</span><span style="font-size: 10pt"><tt>/dev/null</tt></span><span style="font-size: 10pt">,
+but standard and error outputs are connected to an Acme window,
+created if needed, called
+</span><span style="font-size: 10pt"><i>dir</i></span><span style="font-size: 10pt"><tt>/+Errors</tt></span><span style="font-size: 10pt"> where
+</span><span style="font-size: 10pt"><i>dir</i></span><span style="font-size: 10pt">
+is the directory of the window.
+(Programs that need interactive input use a different interface, described below.)
+A typical use of this is to type
+</span><span style="font-size: 10pt"><tt>mk</tt></span><span style="font-size: 10pt">
+(Plan 9&rsquo;s
+</span><span style="font-size: 10pt"><tt>make</tt></span><span style="font-size: 10pt">)
+in the scratch area in the tag of a C source window, say
+</span><span style="font-size: 10pt"><tt>/sys/src/cmd/sam/regexp.c</tt></span><span style="font-size: 10pt">,
+and execute it.
+Output, including compiler errors, appears in the window labeled
+</span><span style="font-size: 10pt"><tt>/sys/src/cmd/sam/+Errors</tt></span><span style="font-size: 10pt">,
+so file names in the output are associated with the windows and directory
+holding the source.
+The
+</span><span style="font-size: 10pt"><tt>mk</tt></span><span style="font-size: 10pt">
+command remains in the tag, serving as a sort of menu item for the associated
+window.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Like the middle button, the right button is used to indicate text by sweeping it out.
+The indicated text is not a command, however, but the argument of a generalized
+search operator.
+If the text, perhaps after appending it to the directory of the window containing it,
+is the name of an existing file, Acme creates a new window to hold the file
+and reads it in.  It then moves the mouse cursor to that window.  If the file is
+already loaded into Acme, the mouse motion happens but no new window is made.
+For example, indicating the string
+</span><span style="font-size: 10pt"><tt>sam.h</tt></span><span style="font-size: 10pt">
+in
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>#include "sam.h"</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">in a window on the file
+</span><span style="font-size: 10pt"><tt>/sys/src/cmd/sam/regexp.c</tt></span><span style="font-size: 10pt">
+will open the file
+</span><span style="font-size: 10pt"><tt>/sys/src/cmd/sam/sam.h</tt></span><span style="font-size: 10pt">.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">If the file name is followed immediately by a colon and a legal address in
+Sam notation (for example a line number or a regular expression delimited in
+slashes or a comma-separated compound of such addresses), Acme highlights
+the target of that address in the file and places the mouse there.  One may jump to
+line 27 of
+</span><span style="font-size: 10pt"><tt>dat.h</tt></span><span style="font-size: 10pt">
+by indicating with the right button the text
+</span><span style="font-size: 10pt"><tt>dat.h:27</tt></span><span style="font-size: 10pt">.
+If the file is not already open, Acme loads it.
+If the file name is null, for example if the indicated string is
+</span><span style="font-size: 10pt"><tt>:/^main/</tt></span><span style="font-size: 10pt">,
+the file is assumed to be that of the window containing the string.
+Such strings, when typed and evaluated in the tag of a window, amount to
+context searches.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">If the indicated text is not the name of an existing file, it is taken to be literal
+text and is searched for in the body of the window containing the text, highlighting
+the result as if it were the result of a context search.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">For the rare occasion when a file name
+</span><span style="font-size: 10pt"><i>is</i></span><span style="font-size: 10pt">
+just text to search for, it can be selected with the left button and used as the
+argument to a built-in
+</span><span style="font-size: 10pt"><tt>Look</tt></span><span style="font-size: 10pt">
+command that always searches for literal text.
+</span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"><b>Nuances and heuristics
+</b></span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">A user interface should not only provide the necessary functions, it should also
+</span><span style="font-size: 10pt"><i>feel</i></span><span style="font-size: 10pt">
+right.
+In fact, it should almost not be felt at all; when one notices a
+user interface, one is distracted from the job at hand [Pike88].
+To approach this invisibility, some of Acme&rsquo;s properties and features
+are there just to make the others easy to use.
+Many are based on a fundamental principle of good design:
+let the machine do the work.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Acme tries to avoid needless clicking and typing.
+There is no &lsquo;click-to-type&rsquo;, eliminating a button click.
+There are no pop-up or pull-down menus, eliminating the mouse action needed to
+make a menu appear.
+The overall design is intended to make text on the screen useful without
+copying or retyping; the ways in which this happens involve
+the combination of many aspects of the interface.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Acme tiles its windows and places them automatically
+to avoid asking the user to place and arrange them.
+For this policy to succeed, the automatic placement must behave well enough
+that the user is usually content with the location of a new window.
+The system will never get it right all the time, but in practice most
+windows are used at least for a while where Acme first places them.
+There have been several complete rewrites of the
+heuristics for placing a new window,
+and with each rewrite the system became
+noticeably more comfortable.  The rules are as follows, although
+they are still subject to improvement.
+The window appears in the &lsquo;active&rsquo; column, that most recently used for typing or
+selecting.
+Executing and searching do not affect the choice of active column,
+so windows of commands and such do not draw new windows towards them,
+but rather let them form near the targets of their actions.
+Output (error) windows always appear towards the right, away from
+edited text, which is typically kept towards the left.
+Within the column, several competing desires are balanced to decide where
+and how large the window should be:
+large blank spaces should be consumed;
+existing text should remain visible;
+existing large windows should be divided before small ones;
+and the window should appear near the one containing the action that caused
+its creation.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Acme binds some actions to chords of mouse buttons.
+These include
+</span><span style="font-size: 10pt"><tt>Cut</tt></span><span style="font-size: 10pt">
+and
+</span><span style="font-size: 10pt"><tt>Paste</tt></span><span style="font-size: 10pt">
+so these common operations can be done without
+moving the mouse.
+Another is a way to apply a command in one window to text (often a file name)
+in another, avoiding the actions needed to assemble the command textually.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Another way Acme avoids the need to move the mouse is instead to move the cursor
+to where it is likely to be used next.  When a new window is made, Acme
+moves the cursor to the new window; in fact, to the selected text in that window.
+When the user deletes a newly made window, the cursor is
+returned to the point it was before the window was made,
+reducing the irritation of windows that pop up to report annoying errors.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">When a window is moved, Acme moves the cursor to the layout box in
+its new place, to permit further adjustment without moving the mouse.
+For example, when a click of the left mouse button on the layout box grows
+the window, the cursor moves to the new location of the box so repeated clicks,
+without moving the mouse, continue to grow it.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Another form of assistance the system can offer is to supply precision in
+pointing the mouse.  The best-known form of this is &lsquo;double-clicking&rsquo; to
+select a word rather than carefully sweeping out the entire word.
+Acme provides this feature, using context to decide whether to select
+a word, line, quoted string, parenthesized expression, and so on.
+But Acme takes the idea much further by applying it to execution
+and searching.
+A
+</span><span style="font-size: 10pt"><i>single</i></span><span style="font-size: 10pt">
+click, that is, a null selection, with either the middle or right buttons,
+is expanded automatically to indicate the appropriate text containing
+the click.  What is appropriate depends on the context.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">For example, to execute a single-word command
+such as
+</span><span style="font-size: 10pt"><tt>Cut</tt></span><span style="font-size: 10pt">,
+it is not necessary to sweep the entire word; just clicking the button once with
+the mouse pointing at the word is sufficient.  &lsquo;Word&rsquo;
+means the largest string of likely file name characters surrounding the location
+of the click: click on a file name, run that program.
+On the right button, the rules are more complicated because
+the target of the click might be a file name, file name with address,
+or just plain text.  Acme examines the text near the click to find
+a likely file name;
+if it finds one, it checks that it names an existing file (in the directory named in the tag, if the name is relative)
+and if so, takes that as the result, after extending it with any address
+that may be present.  If there is no file with that name, Acme
+just takes the largest alphanumeric string under the click.
+The effect is a natural overloading of the button to refer to plain text as
+well as file names.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">First, though, if the click occurs over the left-button-selected text in the window,
+that text is taken to be what is selected.
+This makes it easy to skip through the occurrences of a string in a file: just click
+the right button
+on some occurrence of the text in the window (perhaps after typing it in the tag)
+and click once for each subsequent occurrence.  It isn&rsquo;t even necessary to move
+the mouse between clicks; Acme does that.
+To turn a complicated command into a sort of menu item, select it:
+thereafter, clicking the middle button on it will execute the full command.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">As an extra feature, Acme recognizes file names in angle brackets
+</span><span style="font-size: 10pt"><tt>&lt;&gt;</tt></span><span style="font-size: 10pt">
+as names of files in standard directories of include files,
+making it possible for instance to look at
+</span><span style="font-size: 10pt"><tt>&lt;stdio.h&gt;</tt></span><span style="font-size: 10pt">
+with a single click.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Here&rsquo;s an example to demonstrate how the actions and defaults work together.
+Assume
+</span><span style="font-size: 10pt"><tt>/sys/src/cmd/sam/regexp.c</tt></span><span style="font-size: 10pt">
+is
+open and has been edited.  We write it (execute
+</span><span style="font-size: 10pt"><tt>Put</tt></span><span style="font-size: 10pt">
+in the tag; once the file is written, Acme removes the word from the tag)
+and type
+</span><span style="font-size: 10pt"><tt>mk</tt></span><span style="font-size: 10pt">
+in the tag.  We execute
+</span><span style="font-size: 10pt"><tt>mk</tt></span><span style="font-size: 10pt">
+and get some errors, which appear in a new window labeled
+</span><span style="font-size: 10pt"><tt>/sys/src/cmd/sam/+Errors</tt></span><span style="font-size: 10pt">.
+The cursor moves automatically to that window.
+Say the error is
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>main.c:112: incompatible types on assignment to &lsquo;pattern&rsquo;</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">We move the mouse slightly and click the right button
+at the left of the error message; Acme
+makes a new window, reads
+</span><span style="font-size: 10pt"><tt>/sys/src/cmd/main.c</tt></span><span style="font-size: 10pt">
+into it, selects line 112
+and places the mouse there, right on the offending line.
+</span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"><b>Coupling to existing programs
+</b></span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Acme&rsquo;s syntax for file names and addresses makes it easy for other programs
+to connect automatically to Acme&rsquo;s capabilities.  For example, the output of
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>grep -n variable *.[ch]</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">can be used to help Acme step through the occurrences of a variable in a program;
+every line of output is potentially a command to open a file.
+The file names need not be absolute, either: the output
+appears in a window labeled with the directory in which
+</span><span style="font-size: 10pt"><tt>grep</tt></span><span style="font-size: 10pt">
+was run, from which Acme can derive the full path names.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">When necessary, we have changed the output of some programs,
+such as compiler error messages, to match
+Acme&rsquo;s syntax.
+Some might argue that it shouldn&rsquo;t be necessary to change old programs,
+but sometimes programs need to be updated when systems change,
+and consistent output benefits people as well as programs.
+A historical example is the retrofitting of standard error output to the
+early Unix programs when pipes were invented.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Another change was to record full path names in
+the symbol table of executables, so line numbers reported by the debugger
+are absolute names that may be used directly by Acme; it&rsquo;s not necessary
+to run the debugger in the source directory.  (This aids debugging
+even without Acme.)
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">A related change was to add lines of the form
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>#pragma src "/sys/src/libregexp"</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">to header files; coupled with Acme&rsquo;s ability to locate a header file,
+this provides a fast, keyboardless way to get the source associated with a library.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Finally, Acme directs the standard output of programs it runs to
+windows labeled by the directory in which the program is run.
+Acme&rsquo;s splitting of the
+output into directory-labeled windows is a small feature that has a major effect:
+local file names printed by programs can be interpreted directly by Acme.
+By indirectly coupling the output of programs to the input,
+it also simplifies the management of software that occupies multiple
+directories.
+</span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"><b>Coupling to new programs
+</b></span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Like many Plan 9 programs,
+Acme offers a programmable interface to
+other programs by acting as a file server.
+The best example of such a file server is the window system
+</span><span style="font-size: 10pt"><tt>8&frac12;</tt></span><span style="font-size: 10pt">
+[Pike91],
+which exports files with names such as
+</span><span style="font-size: 10pt"><tt>screen</tt></span><span style="font-size: 10pt">,
+</span><span style="font-size: 10pt"><tt>cons</tt></span><span style="font-size: 10pt">,
+and
+</span><span style="font-size: 10pt"><tt>mouse</tt></span><span style="font-size: 10pt">
+through which applications may access the I/O capabilities of the windows.
+</span><span style="font-size: 10pt"><tt>8&frac12;</tt></span><span style="font-size: 10pt">
+provides a
+</span><span style="font-size: 10pt"><i>distinct</i></span><span style="font-size: 10pt">
+set of files for each window and builds a private file name space
+for the clients running &lsquo;in&rsquo; each window;
+clients in separate windows see distinct files with the same names
+(for example
+</span><span style="font-size: 10pt"><tt>/dev/mouse</tt></span><span style="font-size: 10pt">).
+Acme, like the process file system [PPTTW93], instead associates each
+window with a directory of files; the files of each window are visible
+to any application.
+This difference reflects a difference in how the systems are used:
+</span><span style="font-size: 10pt"><tt>8&frac12;</tt></span><span style="font-size: 10pt">
+tells a client what keyboard and mouse activity has happened in its window;
+Acme tells a client what changes that activity wrought on any window it asks about.
+Putting it another way,
+</span><span style="font-size: 10pt"><tt>8&frac12;</tt></span><span style="font-size: 10pt">
+enables the construction of interactive applications;
+Acme provides the interaction for applications.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The root of
+Acme&rsquo;s file system is mounted using Plan 9 operations on the directory
+</span><span style="font-size: 10pt"><tt>/mnt/acme</tt></span><span style="font-size: 10pt">.
+In
+that root directory appears a directory for each window, numbered with the window&rsquo;s identifier,
+analogous to a process identifier, for example
+</span><span style="font-size: 10pt"><tt>/mnt/acme/27</tt></span><span style="font-size: 10pt">.
+The window&rsquo;s directory
+contains 6 files:
+</span><span style="font-size: 10pt"><tt>/mnt/acme/27/addr</tt></span><span style="font-size: 10pt">,
+</span><span style="font-size: 10pt"><tt>body</tt></span><span style="font-size: 10pt">,
+</span><span style="font-size: 10pt"><tt>ctl</tt></span><span style="font-size: 10pt">,
+</span><span style="font-size: 10pt"><tt>data</tt></span><span style="font-size: 10pt">,
+</span><span style="font-size: 10pt"><tt>event</tt></span><span style="font-size: 10pt">,
+and
+</span><span style="font-size: 10pt"><tt>tag</tt></span><span style="font-size: 10pt">.
+The
+</span><span style="font-size: 10pt"><tt>body</tt></span><span style="font-size: 10pt">
+and
+</span><span style="font-size: 10pt"><tt>tag</tt></span><span style="font-size: 10pt">
+files contain the text of the respective parts of the window; they may be
+read to recover the contents.  Data written to these files is appended to the text;
+</span><span style="font-size: 10pt"><tt>seeks</tt></span><span style="font-size: 10pt">
+are ignored.
+The
+</span><span style="font-size: 10pt"><tt>addr</tt></span><span style="font-size: 10pt">
+and
+</span><span style="font-size: 10pt"><tt>data</tt></span><span style="font-size: 10pt">
+files provide random access to the contents of the body.
+The
+</span><span style="font-size: 10pt"><tt>addr</tt></span><span style="font-size: 10pt">
+file is written to set a character position within the body; the
+</span><span style="font-size: 10pt"><tt>data</tt></span><span style="font-size: 10pt">
+file may then be read to recover the contents at that position,
+or written to change them.
+(The tag is assumed
+small and special-purpose enough not to need special treatment.
+Also,
+</span><span style="font-size: 10pt"><tt>addr</tt></span><span style="font-size: 10pt">
+indexes by character position, which is not the same as byte offset
+in Plan 9&rsquo;s multi-byte character set [Pike93]).
+The format accepted by the
+</span><span style="font-size: 10pt"><tt>addr</tt></span><span style="font-size: 10pt">
+file is exactly the syntax of addresses within the user interface,
+permitting regular expressions, line numbers, and compound addresses
+to be specified.  For example, to replace the contents of lines 3 through 7,
+write the text
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>3,7</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">to the
+</span><span style="font-size: 10pt"><tt>addr</tt></span><span style="font-size: 10pt">
+file, then write the replacement text to the
+</span><span style="font-size: 10pt"><tt>data</tt></span><span style="font-size: 10pt">
+file.  A zero-length write deletes the addressed text; further writes extend the replacement.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The control file,
+</span><span style="font-size: 10pt"><tt>ctl</tt></span><span style="font-size: 10pt">,
+may be written with commands to effect actions on the window; for example
+the command
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>name /adm/users</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">sets the name in the tag of the window to
+</span><span style="font-size: 10pt"><tt>/adm/users</tt></span><span style="font-size: 10pt">.
+Other commands allow deleting the window, writing it to a file, and so on.
+Reading the
+</span><span style="font-size: 10pt"><tt>ctl</tt></span><span style="font-size: 10pt">
+file recovers a fixed-format string containing 5 textual numbers&mdash;the window
+identifier, the number of characters in the tag, the number in the body,
+and some status information&mdash;followed by the text of the tag, up to a newline.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The last file,
+</span><span style="font-size: 10pt"><tt>event</tt></span><span style="font-size: 10pt">,
+is the most unusual.
+A program reading a window&rsquo;s
+</span><span style="font-size: 10pt"><tt>event</tt></span><span style="font-size: 10pt">
+file is notified of all changes to the text of the window, and
+is asked to interpret all middle- and right-button actions.
+The data passed to the program is fixed-format and reports
+the source of the action (keyboard, mouse, external program, etc.),
+its location (what was pointed at or modified), and its nature (change,
+search, execution, etc.).
+This message, for example,
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>MI15 19 0 4 time</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">reports that actions of the mouse
+(</span><span style="font-size: 10pt"><tt>M</tt></span><span style="font-size: 10pt">)
+inserted in the body (capital
+</span><span style="font-size: 10pt"><tt>I</tt></span><span style="font-size: 10pt">)
+the 4 characters of
+</span><span style="font-size: 10pt"><tt>time</tt></span><span style="font-size: 10pt">
+at character positions 15 through 19; the zero is a flag word.
+Programs may apply their own interpretations of searching and
+execution, or may simply reflect the events back to Acme,
+by writing them back to the
+</span><span style="font-size: 10pt"><tt>event</tt></span><span style="font-size: 10pt">
+file, to have the default interpretation applied.
+Some examples of these ideas in action are presented below.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Notice that changes to the window are reported
+after the fact; the program is told about them but is not required to act
+on them.  Compare this to a more traditional interface in which a program
+is told, for example, that a character has been typed on the keyboard and
+must then display and interpret it.
+Acme&rsquo;s style stems from the basic model of the system, in which any
+number of agents&mdash;the keyboard, mouse, external programs
+writing to
+</span><span style="font-size: 10pt"><tt>data</tt></span><span style="font-size: 10pt">
+or
+</span><span style="font-size: 10pt"><tt>body</tt></span><span style="font-size: 10pt">,
+and so on&mdash;may
+change the contents of a window.
+The style is efficient: many programs are content
+to have Acme do most of the work and act only when the editing is completed.
+An example is the Acme mail program, which can ignore the changes
+made to a message being composed
+and just read its body when asked to send it.
+A disadvantage is that some traditional ways of working are impossible.
+For example, there is no way &lsquo;to turn off echo&rsquo;: characters appear on the
+screen and are read from there; no agent or buffer stands between
+the keyboard and the display.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">There are a couple of other files made available by Acme in its root directory
+rather than in the directory of each window.
+The text file
+</span><span style="font-size: 10pt"><tt>/mnt/acme/index</tt></span><span style="font-size: 10pt">
+holds a list of all window names and numerical identifiers,
+somewhat analogous to the output of the
+</span><span style="font-size: 10pt"><tt>ps</tt></span><span style="font-size: 10pt">
+command for processes.
+The most important, though, is
+</span><span style="font-size: 10pt"><tt>/mnt/acme/new</tt></span><span style="font-size: 10pt">,
+a directory that makes new windows, similar to the
+</span><span style="font-size: 10pt"><tt>clone</tt></span><span style="font-size: 10pt">
+directory in the Plan 9 network devices [Pres93].
+The act of opening any file in
+</span><span style="font-size: 10pt"><tt>new</tt></span><span style="font-size: 10pt">
+creates a new Acme window; thus the shell command
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>grep -n var *.c &gt; /mnt/acme/new/body</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">places its output in the body of a fresh window.
+More sophisticated applications may open
+</span><span style="font-size: 10pt"><tt>new/ctl</tt></span><span style="font-size: 10pt">,
+read it to discover the new window&rsquo;s identifier, and then
+open the window&rsquo;s other files in the numbered directory.
+</span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"><b>Acme-specific programs
+</b></span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Although Acme is in part an attempt to move beyond typescripts,
+they will probably always have utility.
+The first program written for Acme was therefore one
+to run a shell or other traditional interactive application
+in a window, the Acme analog of
+</span><span style="font-size: 10pt"><tt>xterm</tt></span><span style="font-size: 10pt">.
+This program,
+</span><span style="font-size: 10pt"><tt>win</tt></span><span style="font-size: 10pt">,
+has a simple structure:
+it acts as a two-way intermediary between Acme and the shell,
+cross-connecting the standard input and output of the shell to the
+text of the window.
+The style of interaction is modeled after
+</span><span style="font-size: 10pt"><tt>mux</tt></span><span style="font-size: 10pt">
+[Pike88]: standard output is added to the window at the
+</span><span style="font-size: 10pt"><i>output point;</i></span><span style="font-size: 10pt">
+text typed after the output point
+is made available on standard input when a newline is typed.
+After either of these actions, the output point is advanced.
+This is different from the working of a regular terminal,
+permitting cut-and-paste editing of an input line until the newline is typed.
+Arbitrary editing may be done to any text in the window.
+The implementation of
+</span><span style="font-size: 10pt"><tt>win</tt></span><span style="font-size: 10pt">,
+using the
+</span><span style="font-size: 10pt"><tt>event</tt></span><span style="font-size: 10pt">,
+</span><span style="font-size: 10pt"><tt>addr</tt></span><span style="font-size: 10pt">,
+and
+</span><span style="font-size: 10pt"><tt>data</tt></span><span style="font-size: 10pt">
+files, is straightforward.
+</span><span style="font-size: 10pt"><tt>Win</tt></span><span style="font-size: 10pt">
+needs no code for handling the keyboard and mouse; it just monitors the
+contents of the window.  Nonetheless, it allows Acme&rsquo;s full editing to be
+applied to shell commands.
+The division of labor between
+</span><span style="font-size: 10pt"><tt>win</tt></span><span style="font-size: 10pt">
+and
+</span><span style="font-size: 10pt"><tt>Acme</tt></span><span style="font-size: 10pt">
+contrasted with
+</span><span style="font-size: 10pt"><tt>xterm</tt></span><span style="font-size: 10pt">
+and the X server demonstrates how much work Acme handles automatically.
+</span><span style="font-size: 10pt"><tt>Win</tt></span><span style="font-size: 10pt">
+is implemented by a single source file 560 lines long and has no graphics code.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"></span><span style="font-size: 10pt"><tt>Win</tt></span><span style="font-size: 10pt">
+uses the middle and right buttons to connect itself in a consistent way
+with the rest of Acme.
+The middle button still executes commands, but in a style more suited
+to typescripts.  Text selected with the middle button is treated as if
+it had been typed after the output point, much as a similar feature in
+</span><span style="font-size: 10pt"><tt>xterm</tt></span><span style="font-size: 10pt">
+or
+</span><span style="font-size: 10pt"><tt>8&frac12;</tt></span><span style="font-size: 10pt">,
+and therefore causes it to be &lsquo;executed&rsquo; by the application running in the window.
+Right button actions are reflected back to Acme but refer to the appropriate
+files because
+</span><span style="font-size: 10pt"><tt>win</tt></span><span style="font-size: 10pt">
+places the name of the current directory in the tag of the window.
+If the shell is running, a simple shell function replacing the
+</span><span style="font-size: 10pt"><tt>cd</tt></span><span style="font-size: 10pt">
+command can maintain the tag as the shell navigates the file system.
+This means, for example, that a right button click on a file mentioned in an
+</span><span style="font-size: 10pt"><tt>ls</tt></span><span style="font-size: 10pt">
+listing opens the file within Acme.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Another Acme-specific program is a mail reader that begins by presenting,
+in a window, a listing of the messages in the user&rsquo;s mailbox, one per line.
+Here the middle and right button actions are modified to refer to
+mail commands
+and messages, but the change feels natural.
+Clicking the right button on a line creates a new window and displays the
+message there, or, if it&rsquo;s already displayed, moves the mouse to that window.
+The metaphor is that the mailbox is a directory whose constituent files are messages.
+The mail program also places some relevant commands in the tag lines of
+the windows; for example, executing the word
+</span><span style="font-size: 10pt"><tt>Reply</tt></span><span style="font-size: 10pt">
+in a message&rsquo;s tag creates a new window
+in which to compose a message to the sender of the original;
+</span><span style="font-size: 10pt"><tt>Post</tt></span><span style="font-size: 10pt">
+then dispatches it.
+In such windows, the addressee is just a list of names
+on the first line of the body, which may be edited to add or change recipients.
+The program also monitors the mailbox, updating the &lsquo;directory&rsquo; as new messages
+arrive.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The mail program is as simple as it sounds; all the work of interaction,
+editing, and management of the display is done by Acme.
+The only
+difficult sections of the 1200
+lines of code concern honoring the external protocols for managing
+the mailbox and connecting to
+</span><span style="font-size: 10pt"><tt>sendmail</tt></span><span style="font-size: 10pt">.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">One of the things Acme does not provide directly is a facility like
+Sam&rsquo;s command language to enable actions such as global substitution;
+within Acme, all editing is done manually.
+It is easy, though, to write external programs for such tasks.
+In this, Acme comes closer to the original intent of Oberon:
+a directory,
+</span><span style="font-size: 10pt"><tt>/acme/edit</tt></span><span style="font-size: 10pt">,
+contains a set of tools for repetitive editing and a template
+or &lsquo;guide&rsquo; file that gives examples
+of its use.  
+Acme&rsquo;s editing guide,
+</span><span style="font-size: 10pt"><tt>/acme/edit/guide</tt></span><span style="font-size: 10pt">,
+looks like this:
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>e file | x &rsquo;/regexp/&rsquo; | c &rsquo;replacement&rsquo;</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>e file:&rsquo;0,$&rsquo; | x &rsquo;/.*word.*\n/&rsquo; | p -n</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>e file | pipe command args ...</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The syntax is reminiscent of Sam&rsquo;s command language, but here the individual
+one-letter commands are all stand-alone programs connected by pipes.
+Passed along the pipes are addresses, analogous to structural expressions
+in Sam terminology.
+The
+</span><span style="font-size: 10pt"><tt>e</tt></span><span style="font-size: 10pt">
+command, unlike that of Sam, starts the process by generating the address
+(default dot, the highlighted selection) in the named files.
+The other commands are as in Sam:
+</span><span style="font-size: 10pt"><tt>p</tt></span><span style="font-size: 10pt">
+prints the addressed text on standard output (the
+</span><span style="font-size: 10pt"><tt>-n</tt></span><span style="font-size: 10pt">
+option is analogous to that of
+</span><span style="font-size: 10pt"><tt>grep</tt></span><span style="font-size: 10pt">,
+useful in combination with the right mouse button);
+</span><span style="font-size: 10pt"><tt>x</tt></span><span style="font-size: 10pt">
+matches a regular expression to the addressed (incoming) text,
+subdividing the text;
+</span><span style="font-size: 10pt"><tt>c</tt></span><span style="font-size: 10pt">
+replaces the text; and so on.  Thus, global substitution throughout a file,
+which would be expressed in Sam as
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>0,$ x/regexp/ c/replacement/</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">in Acme&rsquo;s editor becomes
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>e &rsquo;file:0,$&rsquo; | x &rsquo;/regexp/&rsquo; | c &rsquo;replacement&rsquo;</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">To use the Acme editing commands, open
+</span><span style="font-size: 10pt"><tt>/acme/edit/guide</tt></span><span style="font-size: 10pt">,
+use the mouse and keyboard to edit one of the commands to the right form,
+and execute it with the middle button.
+Acme&rsquo;s context rules find the appropriate binaries in
+</span><span style="font-size: 10pt"><tt>/acme/edit</tt></span><span style="font-size: 10pt">
+rather than
+</span><span style="font-size: 10pt"><tt>/bin</tt></span><span style="font-size: 10pt">;
+the effect is to turn
+</span><span style="font-size: 10pt"><tt>/acme/edit</tt></span><span style="font-size: 10pt">
+into a toolbox containing tools and instructions (the guide file) for their use.
+In fact, the source for these tools is also there, in the directory
+</span><span style="font-size: 10pt"><tt>/acme/edit/src</tt></span><span style="font-size: 10pt">.
+This setup allows some control of the file name space for binary programs;
+not only does it group related programs, it permits the use of common
+names for uncommon jobs.  For example, the single-letter names would
+be unwise in a directory in everyone&rsquo;s search path; here they are only
+visible when running editing commands.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">In Oberon,
+such a collection would be called a
+</span><span style="font-size: 10pt"><i>tool</i></span><span style="font-size: 10pt">
+and would consist
+of a set of entry points in a module and a menu-like piece of text containing
+representative commands that may be edited to suit and executed.
+There is, in fact, a tool called
+</span><span style="font-size: 10pt"><tt>Edit</tt></span><span style="font-size: 10pt">
+in Oberon.
+To provide related functionality,
+Acme exploits the directory and file structure of the underlying
+system, rather than the module structure of the language;
+this fits well with Plan 9&rsquo;s
+file-oriented philosophy.
+Such tools are central to the working of Oberon but they are
+less used in Acme, at least so far.
+The main reason is probably that Acme&rsquo;s program interface permits
+an external program to remain executing in the background, providing
+its own commands as needed (for example, the
+</span><span style="font-size: 10pt"><tt>Reply</tt></span><span style="font-size: 10pt">
+command in the mail program); Oberon uses tools to
+implement such services because its must invoke
+a fresh program for each command.
+Also,
+Acme&rsquo;s better integration allows more
+basic functions to be handled internally; the right mouse button
+covers a lot of the basic utility of the editing tools in Oberon.
+Nonetheless, as more applications are written for Acme,
+many are sure to take this Oberon tool-like form.
+</span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"><b>Comparison with other systems
+</b></span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Acme&rsquo;s immediate ancestor is Help [Pike92], an experimental system written
+a few years ago as a first try at exploring some of Oberon&rsquo;s ideas
+in an existing operating system.
+Besides much better engineering, Acme&rsquo;s advances over Help
+include the actions of the right button (Help had nothing comparable),
+the ability to connect long-running programs to the user interface
+(Help had no analog of the
+</span><span style="font-size: 10pt"><tt>event</tt></span><span style="font-size: 10pt">
+file),
+and the small but important change to split command output into
+windows labeled with the directory in which the commands run.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Most of Acme&rsquo;s style, however, derives from the user interface and window
+system of Oberon [Wirt89, Reis91].
+Oberon includes a programming language and operating system,
+which Acme instead borrows from an existing system, Plan 9.
+When I first saw Oberon, in 1988, I was struck by the
+simplicity of its user interface, particularly its lack of menus
+and its elegant use of multiple mouse buttons.
+The system seemed restrictive, though&mdash;single process,
+single language, no networking, event-driven programming&mdash;and
+failed to follow through on some of its own ideas.
+For example, the middle mouse button had to be pointed accurately and
+the right button was essentially unused.
+Acme does follow through:
+to the basic idea planted by Oberon, it adds
+the ability to run on different operating systems and hardware,
+connection to existing applications including
+interactive ones such as shells and debuggers,
+support for multiple processes,
+the right mouse button&rsquo;s features,
+the default actions and context-dependent properties
+of execution and searching,
+and a host of little touches such as moving the mouse cursor that make the system 
+more pleasant.
+At the moment, though, Oberon does have one distinct advantage: it incorporates
+graphical programs well into its model, an issue Acme has not yet faced.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Acme shares with the Macintosh a desire to use the mouse well and it is
+worth comparing the results.
+The mouse on the Macintosh has a single button, so menus are essential
+and the mouse must frequently move a long way
+to reach the appropriate function.
+An indication that this style has trouble is that applications provide
+keyboard sequences to invoke menu selections and users often prefer them.
+A deeper comparison is that the Macintosh uses pictures where Acme uses text.
+In contrast to pictures, text can be edited quickly, created on demand,
+and fine-tuned to the job at hand; consider adding an option to a command.
+It is also self-referential; Acme doesn&rsquo;t need menus because any text can be
+in effect a menu item.
+The result is that, although a Macintosh screen is certainly prettier and probably
+more attractive, especially to beginners, an Acme screen is more dynamic
+and expressive, at least for programmers and experienced users.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">For its role in the overall system,
+Acme most resembles EMACS [Stal93].
+It is tricky to compare Acme to EMACS, though, because there are
+many versions of EMACS and, since it is fully programmable, EMACS
+can in principle do anything Acme does.
+Also, Acme is much younger and therefore has not
+had the time to acquire as many features.
+The issue therefore is less what the systems can be programmed to do than
+how they are used.
+The EMACS versions that come closest to Acme&rsquo;s style are those that
+have been extended to provide a programming environment, usually
+for a language such as LISP [Alle92, Lucid92].
+For richness of the existing interface, these EMACS versions are certainly superior to Acme.
+On the other hand, Acme&rsquo;s interface works equally well already for a variety
+of languages; for example, one of its most enthusiastic users works almost
+exclusively in Standard ML, a language nothing like C.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Where Acme excels is in the smoothness of its interface.
+Until recently, EMACS did not support the mouse especially well,
+and even with the latest version providing features such as &lsquo;extents&rsquo;
+that can be programmed to behave much like Acme commands,
+many users don&rsquo;t bother to upgrade.
+Moreover, in the versions that provide extents, 
+most EMACS packages don&rsquo;t take advantage of them.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The most important distinction is just that
+EMACS is fundamentally keyboard-based, while
+Acme is mouse-based.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">People who try Acme find it hard to go back to their previous environment.
+Acme automates so much that to return to a traditional interface
+is to draw attention to the extra work it requires.
+</span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"><b>Concurrency in the implementation
+</b></span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Acme is about 8,000 lines of code in Alef, a concurrent object-oriented language syntactically similar to C [Alef].
+Acme&rsquo;s structure is a set of communicating
+processes in a single address space.
+One subset of the processes drives the display and user interface,
+maintaining the windows; other processes forward mouse and keyboard
+activity and implement the file server interface for external programs.
+The language and design worked out well;
+as explained elsewhere [Pike89, Gans93, Reppy93],
+user interfaces built with concurrent systems
+can avoid the clumsy
+top-level event loop typical of traditional interactive systems.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">An example of the benefits of the multi-process style
+is the management of the state of open
+files held by clients of the file system interface.
+The problem is that some I/O requests,
+such as reading the
+</span><span style="font-size: 10pt"><tt>event</tt></span><span style="font-size: 10pt">
+file, may block if no data is available, and the server must
+maintain the state of (possibly many) requests until data appears.
+For example,
+in
+</span><span style="font-size: 10pt"><tt>8&frac12;</tt></span><span style="font-size: 10pt">,
+a single-process window system written in C, pending requests were queued in
+a data structure associated with each window.
+After activity in the window that might complete pending I/O,
+the data structure was scanned for requests that could now finish.
+This structure did not fit well with the rest of the program and, worse,
+required meticulous effort
+to guarantee correct behavior under all conditions
+(consider raw mode, reads of partial lines, deleting a window,
+multibyte characters, etc.).
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Acme instead creates a new dedicated process
+for each I/O request.
+This process coordinates with the rest of the system
+using Alef&rsquo;s synchronous communication;
+its state implicitly encodes the state of
+the I/O request and obviates the need for queuing.
+The passage of the request through Acme proceeds as follows.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Acme contains a file server process, F, that executes a
+</span><span style="font-size: 10pt"><tt>read</tt></span><span style="font-size: 10pt">
+system call to receive a Plan 9 file protocol (9P) message from the client [AT&amp;T92].
+The client blocks until Acme answers the request.
+F communicates with an allocation process, M,
+to acquire an object of type
+</span><span style="font-size: 10pt"><tt>Xfid</tt></span><span style="font-size: 10pt">
+(&lsquo;executing fid&rsquo;; fid is a 9P term)
+to hold the request.
+M sits in a loop (reproduced in Figure 2) waiting for either a request for
+a new
+</span><span style="font-size: 10pt"><tt>Xfid</tt></span><span style="font-size: 10pt">
+or notification that an existing one has finished its task.
+When an
+</span><span style="font-size: 10pt"><tt>Xfid</tt></span><span style="font-size: 10pt">
+is created, an associated process, X,
+is also made.
+M queues idle
+</span><span style="font-size: 10pt"><tt>Xfids</tt></span><span style="font-size: 10pt">,
+allocating new ones only when the list is empty.
+Thus, there is always a pool of
+</span><span style="font-size: 10pt"><tt>Xfids</tt></span><span style="font-size: 10pt">,
+some executing, some idle.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The
+</span><span style="font-size: 10pt"><tt>Xfid</tt></span><span style="font-size: 10pt">
+object contains a channel,
+</span><span style="font-size: 10pt"><tt>Xfid.c</tt></span><span style="font-size: 10pt">,
+for communication with its process;
+the unpacked message; and some associated functions,
+mostly corresponding to 9P messages such as
+</span><span style="font-size: 10pt"><tt>Xfid.write</tt></span><span style="font-size: 10pt">
+to handle a 9P write request.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The file server process F parses the message to see its nature&mdash;open,
+close, read, write, etc.  Many messages, such as directory
+lookups, can be handled immediately; these are responded to directly
+and efficiently
+by F without invoking the
+</span><span style="font-size: 10pt"><tt>Xfid</tt></span><span style="font-size: 10pt">,
+which is therefore maintained until the next message.
+When a message, such as a write to the display, requires the attention
+of the main display process and interlocked access to its data structures,
+F enables X
+by sending a function pointer on
+</span><span style="font-size: 10pt"><tt>Xfid.c</tt></span><span style="font-size: 10pt">.
+For example, if the message is a write, F executes
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>x-&gt;c &lt;-= Xfid.write;</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">which sends
+the address of
+</span><span style="font-size: 10pt"><tt>Xfid.write</tt></span><span style="font-size: 10pt">
+on
+</span><span style="font-size: 10pt"><tt>Xfid.c</tt></span><span style="font-size: 10pt">,
+waking up X.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The
+</span><span style="font-size: 10pt"><tt>Xfid</tt></span><span style="font-size: 10pt">
+process, X, executes a simple loop:
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>void</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>Xfid.ctl(Xfid *x)</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>{</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>    for(;;){</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>        (*&lt;-x-&gt;c)(x);      /* receive and execute message */</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>        bflush();          /* synchronize bitmap display */</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>        cxfidfree &lt;-= x;   /* return to free list */</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>    }</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>}</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Thus X
+will wake up with the address of a function to call (here
+</span><span style="font-size: 10pt"><tt>Xfid.write</tt></span><span style="font-size: 10pt">)
+and execute it; once that completes, it returns itself to the pool of
+free processes by sending its address back to the allocator.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Although this sequence may seem complicated, it is just a few lines
+of code and is in fact far simpler
+than the management of the I/O queues in
+</span><span style="font-size: 10pt"><tt>8&frac12;</tt></span><span style="font-size: 10pt">.
+The hard work of synchronization is done by the Alef run time system.
+Moreover, the code worked the first time, which cannot be said for the code in
+</span><span style="font-size: 10pt"><tt>8&frac12;</tt></span><span style="font-size: 10pt">.
+</span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"><b>Undo
+</b></span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Acme provides a general undo facility like that of Sam, permitting
+textual changes to be unwound arbitrarily.
+The implementation is superior to Sam&rsquo;s, though,
+with much higher performance and the ability to &lsquo;redo&rsquo; changes.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Sam uses
+a multi-pass algorithm that builds
+a transcript of changes to be made simultaneously
+and then executes them atomically.
+This was thought necessary because the elements of a repetitive
+command such as a global substitution should all be applied to the same
+initial file and implemented simultaneously; forming the complete
+transcript before executing any of the changes avoids the
+cumbersome management of addresses in a changing file.
+Acme, however, doesn&rsquo;t have this problem; global substitution
+is controlled externally and may be made incrementally by exploiting
+an observation: if the changes are sorted in address order and
+executed in reverse, changes will not invalidate the addresses of
+pending changes.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Acme therefore avoids the initial transcript.  Instead, changes are applied
+directly to the file, with an undo transcript recorded in a separate list.
+For example, when text is added to a window, it is added directly and a record
+of what to delete to restore the state is appended to the undo list.
+Each undo action and the file are marked with a sequence number;
+actions with the same sequence number are considered a unit
+to be undone together.
+The invariant state of the structure
+is that the last action in the undo list applies to the current state of the file,
+even if that action is one of a related set from, for example, a global substitute.
+(In Sam, a related set of actions needed to be undone simultaneously.)
+To undo an action, pop the last item on the undo list, apply it to the file,
+revert it, and append it to a second, redo list.
+To redo an action, do the identical operation with the lists interchanged.
+The expensive operations occur
+only when actually undoing; in normal editing the overhead is minor.
+For example, Acme reads files about seven times faster than Sam, partly
+because of this improvement and partly because of a cleaner implementation.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Acme uses a temporary file to hold the text, keeping in memory only the
+visible portion, and therefore can edit large files comfortably
+even on small-memory machines such as laptops.
+</span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"><b>Future
+</b></span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Acme is still under development.
+Some things are simply missing.
+For example, Acme should support non-textual graphics, but this is being
+deferred until it can be done using a new graphics model being developed
+for Plan 9.  Also, it is undecided how Acme&rsquo;s style of interaction should best be
+extended to graphical applications.
+On a smaller scale, although the system feels smooth and comfortable,
+work continues to tune the heuristics and
+try new ideas for the user interface.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">There need to be more programs that use Acme.  Browsers for
+Usenet and AP News articles, the Oxford English Dictionary, and other
+such text sources exist, but more imaginative applications will
+be necessary to prove that Acme&rsquo;s approach is viable.
+One that has recently been started is an interface to the debugger Acid [Wint94],
+although it is still
+unclear what form it will ultimately take.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Acme shows that it is possible to make a user interface a stand-alone component
+of an interactive environment.  By absorbing more of the interactive
+functionality than a simple window system, Acme off-loads much of the
+computation from its applications, which helps keep them small and
+consistent in their interface.  Acme can afford to dedicate
+considerable effort to making that interface as good as possible; the result
+will benefit the entire system.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Acme is complete and useful enough to attract users.
+Its comfortable user interface,
+the ease with which it handles multiple tasks and
+programs in multiple directories,
+and its high level of integration
+make it addictive.
+Perhaps most telling,
+Acme shows that typescripts may not be the most
+productive interface to a time-sharing system.
+</span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"><b>Acknowledgements
+</b></span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Howard Trickey, Acme&rsquo;s first user, suffered buggy versions gracefully and made
+many helpful suggestions.  Chris Fraser provided the necessary insight for the Acme editing
+commands.
+</span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"><b>References
+</b></span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">[Alef] P. Winterbottom,
+&lsquo;&lsquo;Alef Language Reference Manual&rsquo;&rsquo;,
+</span><span style="font-size: 10pt"><i>Plan 9 Programmer&rsquo;s Manual,
+</i></span><span style="font-size: 10pt">AT&amp;T Bell Laboratories,
+Murray Hill, NJ,
+1992;
+revised in this volume.
+</span></p><p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">[Alle92]
+</span><span style="font-size: 10pt"><i>Allegro Common Lisp user Guide, Vol 2, 
+</i></span><span style="font-size: 10pt">Chapter 14, "The Emacs-Lisp Interface". 
+March 1992.
+</span></p><p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">[AT&amp;T92] Plan 9 Programmer&rsquo;s manual, Murray Hill, New Jersey, 1992.
+</span></p><p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">[Far89] Far too many people, XTERM(1), Massachusetts Institute of Technology, 1989.
+</span></p><p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">[Gans93] Emden R. Gansner and John H. Reppy,  &lsquo;&lsquo;A Multi-threaded Higher-order User Interface Toolkit&rsquo;&rsquo;, in
+</span><span style="font-size: 10pt"><i>Software Trends, Volume 1,
+User Interface Software,
+</i></span><span style="font-size: 10pt">Bass and Dewan (Eds.),
+John Wiley &amp; Sons 1993,
+pp. 61-80.
+</span></p><p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">[Lucid92] Richard Stallman and Lucid, Inc.,
+</span><span style="font-size: 10pt"><i>Lucid GNU EMACS Manual,
+</i></span><span style="font-size: 10pt">March 1992.
+</span></p><p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">[Pike87] Rob Pike, &lsquo;&lsquo;The Text Editor </span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">&rsquo;&rsquo;, Softw. - Pract. and Exp., Nov 1987, Vol 17 #11, pp. 813-845; reprinted in this volume.
+</span></p><p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">[Pike88] Rob Pike, &lsquo;&lsquo;Window Systems Should Be Transparent&rsquo;&rsquo;, Comp. Sys., Summer 1988, Vol 1 #3, pp. 279-296.
+</span></p><p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">[Pike89] Rob Pike, &lsquo;&lsquo;A Concurrent Window System&rsquo;&rsquo;, Comp. Sys., Spring 1989, Vol 2 #2, pp. 133-153.
+</span></p><p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">[PPTTW93] Rob Pike, Dave Presotto, Ken Thompson, Howard Trickey, and Phil Winterbottom, &lsquo;&lsquo;The Use of Name Spaces in Plan 9&rsquo;&rsquo;,
+Op. Sys. Rev.,  Vol. 27, No. 2, April 1993, pp. 72-76,
+reprinted in this volume.
+</span></p><p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">[Pike91] Rob Pike, &lsquo;&lsquo;8&frac12;, the Plan 9 Window System&rsquo;&rsquo;, USENIX Summer Conf. Proc., Nashville, June, 1991, pp. 257-265,
+reprinted in this volume.
+</span></p><p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">[Pike92] Rob Pike, &lsquo;&lsquo;A Minimalist Global User Interface&rsquo;&rsquo;, Graphics Interface &rsquo;92 Proc., Vancouver, 1992, pp. 282-293.  An earlier version appeared under the same title in USENIX Summer Conf. Proc., Nashville, June, 1991, pp. 267-279.
+</span></p><p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">[Pike93] Rob Pike and Ken Thompson, &lsquo;&lsquo;Hello World or &Kappa;&alpha;&lambda;&eta;&mu;&#941;&rho;&alpha; &kappa;&#972;&sigma;&mu;&epsilon; or
+</span><span style="font-size: 10pt">&#12371;&#12435;&#12395;&#12385;&#12399; &#19990;&#30028;</span><span style="font-size: 10pt">&rsquo;&rsquo;, USENIX Winter Conf. Proc., San Diego, 1993, pp. 43-50,
+reprinted in this volume.
+</span></p><p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">[Pres93] Dave Presotto and Phil Winterbottom, &lsquo;&lsquo;The Organization of Networks in Plan 9&rsquo;&rsquo;, Proc. Usenix Winter 1993, pp. 271-287, San Diego, CA,
+reprinted in this volume.
+</span></p><p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">[Reis91] Martin Reiser, </span><span style="font-size: 10pt"><i>The Oberon System,</i></span><span style="font-size: 10pt"> Addison Wesley, New York, 1991.
+</span></p><p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">[Reppy93] John H. Reppy,
+&lsquo;&lsquo;CML: A higher-order concurrent language&rsquo;&rsquo;, Proc. SIGPLAN&rsquo;91 Conf. on Programming, Lang. Design and Impl., June, 1991, pp. 293-305.
+</span></p><p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">[Sche86] Robert W. Scheifler and Jim Gettys,
+&lsquo;&lsquo;The X Window System&rsquo;&rsquo;,
+ACM Trans. on Graph., Vol 5 #2, pp. 79-109.
+</span></p><p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">[Stal93] Richard Stallman,
+</span><span style="font-size: 10pt"><i>Gnu Emacs Manual, 9th edition, Emacs version 19.19,
+</i></span><span style="font-size: 10pt">MIT.
+</span></p><p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">[Swei86] Daniel Sweinhart, Polle Zellweger, Richard Beach, and Robert Hagmann,
+&lsquo;&lsquo;A Structural View of the Cedar Programming Environment&rsquo;&rsquo;,
+ACM Trans. Prog. Lang. and Sys., Vol. 8, No. 4, pp. 419-490, Oct. 1986.
+</span></p><p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">[Wint94], Philip Winterbottom, &lsquo;&lsquo;Acid: A Debugger based on a Language&rsquo;&rsquo;, USENIX Winter Conf. Proc., San Francisco, CA, 1993,
+reprinted in this volume.
+</span></p><p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">[Wirt89] N. Wirth and J. Gutknecht, &lsquo;&lsquo;The Oberon System&rsquo;&rsquo;, Softw. - Prac. and Exp., Sep 1989, Vol 19 #9, pp 857-894.
+</span></p><p style="margin-top: 0; margin-bottom: 0.50in"></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<p style="line-height: 1.2em; margin-left: 1.50in; text-indent: 0.35in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"></span><span style="font-size: 10pt"><b>Notes</b></span><span style="font-size: 10pt">
+</span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="line-height: 1.2em; margin-left: 1.50in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Originally appeared in
+</span><span style="font-size: 10pt"><i>Proc. of the Winter 1994 USENIX Conf.,
+</i></span><span style="font-size: 10pt">pp. 223-234,
+San Francisco, CA
+</span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+</body>
+</html>
+

+ 1 - 1
sys/doc/acme/acme.ms

@@ -21,7 +21,7 @@
 .if h \{\
 .de FG
 .B1 10 60
-.html - <center><a href="\\$1.png"><img src="\\$1s.png" /></a></center>
+.html - <center><a href="\\$1.gif"><img src="\\$1.gif" /></a></center>
 .\" .sp .5v
 ..
 .de fg

+ 2 - 0
sys/doc/acme/mkfile

@@ -10,3 +10,5 @@ acme.ps:D:	acme.ms
 acme.html:D:	acme.ms
 	htmlroff -ms -mhtml acme.ms >acme.html
 
+clean:V:
+	# nothing

+ 332 - 0
sys/doc/contents.html

@@ -0,0 +1,332 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+"http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=utf8">
+<title>Plan 9 — The Documents (Volume 2)</title>
+</meta>
+</head>
+<body>
+<p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="margin-top: 0; margin-bottom: 0.50in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: center;">
+<span style="font-size: 12pt"></span><span style="font-size: 12pt"><b>Plan 9 — The Documents (Volume 2)</b></span><span style="font-size: 12pt"></span></p>
+<p style="margin-top: 0; margin-bottom: 0.50in"></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt"><b>Introduction
+</b></span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt">Plan 9 From Bell Labs 
+(<a href="9.html">html</a> |
+<a href="9.ps">ps</a> |
+<a href="9.pdf">pdf</a>)
+</span></p><p style="line-height: 1.2em; margin-left: 2.00in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt"><i>Rob Pike, Dave Presotto, Sean Dorward, Bob Flandrena, Ken Thompson, Howard Trickey, and Phil Winterbottom
+</i></span></p><p style="line-height: 1.2em; margin-left: 1.50in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt">An overview of the system; read at least this paper before you install.
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt">The Use of Name Spaces in Plan 9 
+(<a href="names.html">html</a> |
+<a href="names.ps">ps</a> |
+<a href="names.pdf">pdf</a>)
+</span></p><p style="line-height: 1.2em; margin-left: 2.00in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt"><i>Rob Pike, Dave Presotto, Ken Thompson, Howard Trickey, and Phil Winterbottom
+</i></span></p><p style="line-height: 1.2em; margin-left: 1.50in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt">What&rsquo;s in a name?
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt">The Organization of Networks in Plan 9 
+(<a href="net/net.html">html</a> |
+<a href="net/net.ps">ps</a> |
+<a href="net/net.pdf">pdf</a>)
+</span></p><p style="line-height: 1.2em; margin-left: 2.00in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt"><i>Dave Presotto and Phil Winterbottom
+</i></span></p><p style="line-height: 1.2em; margin-left: 1.50in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt">Connecting the pieces.  The details in the paper are outdated but the ideas still apply.
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt">Security in Plan 9 
+(<a href="auth.html">html</a> |
+<a href="auth.ps">ps</a> |
+<a href="auth.pdf">pdf</a>)
+</span></p><p style="line-height: 1.2em; margin-left: 2.00in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt"><i>Russ Cox, Eric Grosse, Rob Pike, Dave Presotto, and Sean Quinlan
+</i></span></p><p style="line-height: 1.2em; margin-left: 1.50in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt">An overview of the security architecture.
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt"><b>Programming
+</b></span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt">How to Use the Plan 9 C Compiler 
+(<a href="comp.html">html</a> |
+<a href="comp.ps">ps</a> |
+<a href="comp.pdf">pdf</a>)
+</span></p><p style="line-height: 1.2em; margin-left: 2.00in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt"><i>Rob Pike
+</i></span></p><p style="line-height: 1.2em; margin-left: 1.50in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt">The starting point for C programming under Plan 9.
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt">Changes to the Programming Environment in the Fourth Release of Plan 9 
+(<a href="prog4.html">html</a> |
+<a href="prog4.ps">ps</a> |
+<a href="prog4.pdf">pdf</a>)
+</span></p><p style="line-height: 1.2em; margin-left: 2.00in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt"><i>Rob Pike
+</i></span></p><p style="line-height: 1.2em; margin-left: 1.50in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt">An overview of the changes to the C library since the Third Release.
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt">APE — The ANSI/POSIX Environment 
+(<a href="ape.html">html</a> |
+<a href="ape.ps">ps</a> |
+<a href="ape.pdf">pdf</a>)
+</span></p><p style="line-height: 1.2em; margin-left: 2.00in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt"><i>Howard Trickey
+</i></span></p><p style="line-height: 1.2em; margin-left: 1.50in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt">Moving C code between UNIX and Plan 9.
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt">Acid: A Debugger Built From A Language 
+(<a href="acidpaper.html">html</a> |
+<a href="acidpaper.ps">ps</a> |
+<a href="acidpaper.pdf">pdf</a>)
+</span></p><p style="line-height: 1.2em; margin-left: 2.00in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt"><i>Phil Winterbottom
+</i></span></p><p style="line-height: 1.2em; margin-left: 1.50in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt">An overview paper about the Acid debugger.
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt">Acid Manual 
+(<a href="acid.html">html</a> |
+<a href="acid.ps">ps</a> |
+<a href="acid.pdf">pdf</a>)
+</span></p><p style="line-height: 1.2em; margin-left: 2.00in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt"><i>Phil Winterbottom
+</i></span></p><p style="line-height: 1.2em; margin-left: 1.50in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt">The reference manual for the language and its libraries.
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt">Maintaining Files on Plan 9 with Mk 
+(<a href="mk.html">html</a> |
+<a href="mk.ps">ps</a> |
+<a href="mk.pdf">pdf</a>)
+</span></p><p style="line-height: 1.2em; margin-left: 2.00in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt"><i>Andrew G. Hume and Bob Flandrena
+</i></span></p><p style="line-height: 1.2em; margin-left: 1.50in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt">An introduction to Plan 9&rsquo;s replacement for </span><span style="font-size: 10pt"><tt>make</tt></span><span style="font-size: 10pt">.
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt">Plan 9 Mkfiles 
+(<a href="mkfiles.html">html</a> |
+<a href="mkfiles.ps">ps</a> |
+<a href="mkfiles.pdf">pdf</a>)
+</span></p><p style="line-height: 1.2em; margin-left: 2.00in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt"><i>Bob Flandrena
+</i></span></p><p style="line-height: 1.2em; margin-left: 1.50in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt">The conventions for using </span><span style="font-size: 10pt"><tt>mk</tt></span><span style="font-size: 10pt"> in Plan 9.
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt">A Manual for the Plan 9 assembler 
+(<a href="asm.html">html</a> |
+<a href="asm.ps">ps</a> |
+<a href="asm.pdf">pdf</a>)
+</span></p><p style="line-height: 1.2em; margin-left: 2.00in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt"><i>Rob Pike
+</i></span></p><p style="line-height: 1.2em; margin-left: 1.50in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt">Things you&rsquo;d rather not know.
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt"><b>User Interfaces
+</b></span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt">8&frac12;, the Plan 9 Window System 
+(<a href="8&frac12;/8&frac12;.html">html</a> |
+<a href="8&frac12;/8&frac12;.ps">ps</a> |
+<a href="8&frac12;/8&frac12;.pdf">pdf</a>)
+</span></p><p style="line-height: 1.2em; margin-left: 2.00in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt"><i>Rob Pike
+</i></span></p><p style="line-height: 1.2em; margin-left: 1.50in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt">An introduction to the (previous) window system and its unusual implementation.
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt">Rc — The Plan 9 Shell 
+(<a href="rc.html">html</a> |
+<a href="rc.ps">ps</a> |
+<a href="rc.pdf">pdf</a>)
+</span></p><p style="line-height: 1.2em; margin-left: 2.00in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt"><i>Tom Duff
+</i></span></p><p style="line-height: 1.2em; margin-left: 1.50in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt">An introduction to the new shell, complete with examples.
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt">The Text Editor </span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"> 
+(<a href="sam/sam.html">html</a> |
+<a href="sam/sam.ps">ps</a> |
+<a href="sam/sam.pdf">pdf</a>)
+</span></p><p style="line-height: 1.2em; margin-left: 2.00in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt"><i>Rob Pike
+</i></span></p><p style="line-height: 1.2em; margin-left: 1.50in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt"> is the standard editor on Plan 9.
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt">Acme: A User Interface for Programmers 
+(<a href="acme/acme.html">html</a> |
+<a href="acme/acme.ps">ps</a> |
+<a href="acme/acme.pdf">pdf</a>)
+</span></p><p style="line-height: 1.2em; margin-left: 2.00in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt"><i>Rob Pike
+</i></span></p><p style="line-height: 1.2em; margin-left: 1.50in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt">A system with a more radical approach to programming and editing.
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt">Plumbing and Other Utilities 
+(<a href="plumb.html">html</a> |
+<a href="plumb.ps">ps</a> |
+<a href="plumb.pdf">pdf</a>)
+</span></p><p style="line-height: 1.2em; margin-left: 2.00in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt"><i>Rob Pike
+</i></span></p><p style="line-height: 1.2em; margin-left: 1.50in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt">Inter-process communication that enlivens the interactive user interface.
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt"><b>Implementation
+</b></span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt">Hello World, or &Kappa;&alpha;&lambda;&eta;&mu;&#941;&rho;&alpha; &kappa;&#972;&sigma;&mu;&epsilon;, or </span><span style="font-size: 10pt">&#12371;&#12435;&#12395;&#12385;&#12399; &#19990;&#30028;</span><span style="font-size: 10pt"> 
+(<a href="utf.html">html</a> |
+<a href="utf.ps">ps</a> |
+<a href="utf.pdf">pdf</a>)
+</span></p><p style="line-height: 1.2em; margin-left: 2.00in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt"><i>Rob Pike and Ken Thompson
+</i></span></p><p style="line-height: 1.2em; margin-left: 1.50in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt">The details about Plan 9&rsquo;s character set: the Unicode Standard plus an ASCII-compatible encoding.
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt">Plan 9 C Compilers 
+(<a href="compiler.html">html</a> |
+<a href="compiler.ps">ps</a> |
+<a href="compiler.pdf">pdf</a>)
+</span></p><p style="line-height: 1.2em; margin-left: 2.00in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt"><i>Ken Thompson
+</i></span></p><p style="line-height: 1.2em; margin-left: 1.50in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt">The design and some internals of the compiler suite.
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt">Adding Application Support for a New Architecture in Plan 9 
+(<a href="libmach.html">html</a> |
+<a href="libmach.ps">ps</a> |
+<a href="libmach.pdf">pdf</a>)
+</span></p><p style="line-height: 1.2em; margin-left: 2.00in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt"><i>Bob Flandrena
+</i></span></p><p style="line-height: 1.2em; margin-left: 1.50in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt">The procedures necessary to add a new instruction set to Plan 9&rsquo;s programming environment.
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt">The Plan 9 File Server 
+(<a href="fs/fs.html">html</a> |
+<a href="fs/fs.ps">ps</a> |
+<a href="fs/fs.pdf">pdf</a>)
+</span></p><p style="line-height: 1.2em; margin-left: 2.00in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt"><i>Ken Thompson
+</i></span></p><p style="line-height: 1.2em; margin-left: 1.50in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt">The design of the central file server and its novel backup system.
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt">Venti: A new approach to archival storage 
+(<a href="venti/venti.html">html</a> |
+<a href="venti/venti.ps">ps</a> |
+<a href="venti/venti.pdf">pdf</a>)
+</span></p><p style="line-height: 1.2em; margin-left: 2.00in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt"><i>Sean Quinlan and Sean Dorward
+</i></span></p><p style="line-height: 1.2em; margin-left: 1.50in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt">Archival block-level storage using secure hashes as block identifiers.
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt">The IL protocol 
+(<a href="il/il.html">html</a> |
+<a href="il/il.ps">ps</a> |
+<a href="il/il.pdf">pdf</a>)
+</span></p><p style="line-height: 1.2em; margin-left: 2.00in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt"><i>Dave Presotto and Phil Winterbottom
+</i></span></p><p style="line-height: 1.2em; margin-left: 1.50in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt">A description of the Internet protocol Plan 9 uses for internal communication.
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt">Lexical File Names in Plan 9, or, Getting Dot-Dot Right 
+(<a href="lexnames.html">html</a> |
+<a href="lexnames.ps">ps</a> |
+<a href="lexnames.pdf">pdf</a>)
+</span></p><p style="line-height: 1.2em; margin-left: 2.00in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt"><i>Rob Pike
+</i></span></p><p style="line-height: 1.2em; margin-left: 1.50in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt">A vexing old problem solved: how to make </span><span style="font-size: 10pt"><tt>pwd</tt></span><span style="font-size: 10pt"> get the right answer in the face of multiply-bound directories.
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt">Process Sleep and Wakeup on a Shared-memory Multiprocessor 
+(<a href="sleep.html">html</a> |
+<a href="sleep.ps">ps</a> |
+<a href="sleep.pdf">pdf</a>)
+</span></p><p style="line-height: 1.2em; margin-left: 2.00in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt"><i>Rob Pike, Dave Presotto, Ken Thompson, and Gerard Holzmann
+</i></span></p><p style="line-height: 1.2em; margin-left: 1.50in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt">A detailed study of a central issue in the Plan 9 kernel.
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt"><b>Miscellany
+</b></span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt">A Guide to the Lp Printer Spooler 
+(<a href="lp.html">html</a> |
+<a href="lp.ps">ps</a> |
+<a href="lp.pdf">pdf</a>)
+</span></p><p style="line-height: 1.2em; margin-left: 2.00in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt"><i>Paul Glick
+</i></span></p><p style="line-height: 1.2em; margin-left: 1.50in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt">Adminstering the suite of tools to drive PostScript printers.
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt">Troff User&rsquo;s Manual 
+(<a href="troff.ps">ps</a> |
+<a href="troff.pdf">pdf</a>)
+</span></p><p style="line-height: 1.2em; margin-left: 2.00in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt"><i>Joseph F. Ossanna and Brian W. Kernighan
+</i></span></p><p style="line-height: 1.2em; margin-left: 1.50in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt">The old warhorse, updated for Unicode characters.
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt">Using SPIN 
+(<a href="spin.html">html</a> |
+<a href="spin.ps">ps</a> |
+<a href="spin.pdf">pdf</a>)
+</span></p><p style="line-height: 1.2em; margin-left: 2.00in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt"><i>Gerard Holzmann
+</i></span></p><p style="line-height: 1.2em; margin-left: 1.50in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt">An introduction to a tool for analyzing parallel and distributed programs.
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt"><b>Installation
+</b></span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt">The Various Ports 
+(<a href="port.html">html</a> |
+<a href="port.ps">ps</a> |
+<a href="port.pdf">pdf</a>)
+</span></p><p style="line-height: 1.2em; margin-left: 1.50in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
+<span style="font-size: 10pt">The hardware requirements for the Plan 9 compilers and kernels.
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<center><a href="/plan9/">Plan 9 Home Page</a></center>
+<p style="margin-top: 0; margin-bottom: 0.50in"></p>
+</body>
+</html>
+

+ 33 - 26
sys/doc/contents.ms

@@ -2,6 +2,7 @@
 .FP lucidasans
 .na
 .ds CH
+.
 .de He
 .sp
 .ft B
@@ -11,22 +12,26 @@
 .ft
 .br
 ..
-.de Ti
-.ft R
-.ie h \{\
-\\$3 
-(\c
-.if !'\\$2'troff' \! \<a href="\\$2.html"\>html\</a\> |
-\! \<a href="\\$2.ps"\>ps\</a\>
-|
-\! \<a href="\\$2.pdf"\>pdf\</a\>)
-.\}
-.el \{\
-.ta \\n(LLuR
-\\$3 \a\|\|\\$1
-.\}
-.br
-..
+.
+.\" BUG: \! transparency always emits the rest of the line, even in
+.\" an `unexecuted' if-else branch, so this doesn't work as desired.
+.\" .de Ti
+.\" .ft R
+.\" .ie h \{\
+.\" \\$3 
+.\" (\c
+.\" .if !'\\$2'troff' \! \<a href="\\$2.html"\>html\</a\> |
+.\" \! \<a href="\\$2.ps"\>ps\</a\>
+.\" |
+.\" \! \<a href="\\$2.pdf"\>pdf\</a\>)
+.\" ...\}
+.\" .el \{\
+.\" .ta \\n(LLuR
+.\" \\$3 \a\|\|\\$1
+.\" ...\}
+.\" .br
+.\" ..
+.
 .de Au
 .ft I
 .in 1i
@@ -47,9 +52,11 @@
 ..
 .de Co
 ..
+.
 .nr PS 9
 .nr VS 11
 .nf
+.
 .LP
 .ps 12
 .ce
@@ -58,6 +65,7 @@
 .ps
 .sp .5i
 .He "Introduction
+.
 .Ti 1 9 "Plan 9 From Bell Labs
 .Au "Rob Pike, Dave Presotto, Sean Dorward, Bob Flandrena, Ken Thompson, Howard Trickey, and Phil \%Winterbottom
 .De "An overview of the system; read at least this paper before you install.
@@ -66,7 +74,7 @@
 .Au "Rob Pike, Dave Presotto, Ken Thompson, Howard Trickey, and Phil \%Winterbottom
 .Co updated only to mention appearance in SIGOPS
 .De "What's in a name?
-.Ti 29 net "The Organization of Networks in Plan 9
+.Ti 29 net/net "The Organization of Networks in Plan 9
 .Au "Dave Presotto and Phil Winterbottom
 .De "Connecting the pieces.  The details in the paper are outdated but the ideas still apply.
 .Ti 43 auth "Security in Plan 9
@@ -106,7 +114,7 @@
 .De "Things you'd rather not know.
 .bp
 .He "User Interfaces
-.Ti 159 8½ "8½, the Plan 9 Window System
+.Ti 159 8½/8½ "8½, the Plan 9 Window System
 .Au "Rob Pike
 .Co fine - introductory footnote tweaked
 .De "An introduction to the (previous) window system and its unusual implementation.
@@ -114,11 +122,11 @@
 .Au "Tom Duff
 .Co updated
 .De "An introduction to the new shell, complete with examples.
-.Ti 185 sam "The Text Editor \&\f(CWsam\fP
+.Ti 185 sam/sam "The Text Editor \&\f(CWsam\fP
 .Au "Rob Pike
 .Co fine
 .De "\f(CWSam\fP is the standard editor on Plan 9.
-.Ti 215 acme "Acme: A User Interface for Programmers
+.Ti 215 acme/acme "Acme: A User Interface for Programmers
 .Au "Rob Pike
 .Co fine
 .De "A system with a more radical approach to programming and editing.
@@ -139,14 +147,14 @@
 .Au "Bob Flandrena
 .Co updated
 .De "The procedures necessary to add a new instruction set to Plan 9's programming environment.
-.Ti 279 fs "The Plan 9 File Server
+.Ti 279 fs/fs "The Plan 9 File Server
 .Au "Ken Thompson
 .Co updated
 .De "The design of the central file server and its novel backup system.
-.Ti 287 venti "Venti: A new approach to archival storage
+.Ti 287 venti/venti "Venti: A new approach to archival storage
 .Au "Sean Quinlan and Sean Dorward
 .De "Archival block-level storage using secure hashes as block identifiers.
-.Ti 301 il "The IL protocol
+.Ti 301 il/il "The IL protocol
 .Au "Dave Presotto and Phil Winterbottom
 .De "A description of the Internet protocol Plan 9 uses for internal communication.
 .Ti 307 lexnames "Lexical File Names in Plan 9, or, Getting Dot-Dot Right
@@ -173,6 +181,5 @@
 .He "Installation
 .Ti 400 port "The Various Ports
 .De "The hardware requirements for the Plan 9 compilers and kernels.
-.if h \{\
-.sp 1
-\! \<center\>\<a href="/plan9/"\>Plan 9 Home Page\</a\>\</center\>
+.
+.Hp

+ 43 - 70
sys/doc/index.html

@@ -3,7 +3,9 @@
 "http://www.w3.org/TR/html4/loose.dtd">
 <html>
 <head>
+<meta http-equiv=Content-Type content="text/html; charset=utf8">
 <title>Plan 9 — The Documents (Volume 2)</title>
+</meta>
 </head>
 <body>
 <p style="margin-top: 0; margin-bottom: 0.05in"></p>
@@ -18,8 +20,7 @@
 <p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: left;">
 <span style="font-size: 10pt">Plan 9 From Bell Labs 
 (<a href="9.html">html</a> |
-<a href="9.ps">ps</a>
-|
+<a href="9.ps">ps</a> |
 <a href="9.pdf">pdf</a>)
 </span></p><p style="line-height: 1.2em; margin-left: 2.00in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
 <span style="font-size: 10pt"><i>Rob Pike, Dave Presotto, Sean Dorward, Bob Flandrena, Ken Thompson, Howard Trickey, and Phil Winterbottom
@@ -29,8 +30,7 @@
 <p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: left;">
 <span style="font-size: 10pt">The Use of Name Spaces in Plan 9 
 (<a href="names.html">html</a> |
-<a href="names.ps">ps</a>
-|
+<a href="names.ps">ps</a> |
 <a href="names.pdf">pdf</a>)
 </span></p><p style="line-height: 1.2em; margin-left: 2.00in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
 <span style="font-size: 10pt"><i>Rob Pike, Dave Presotto, Ken Thompson, Howard Trickey, and Phil Winterbottom
@@ -39,10 +39,9 @@
 </span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
 <p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: left;">
 <span style="font-size: 10pt">The Organization of Networks in Plan 9 
-(<a href="net.html">html</a> |
-<a href="net.ps">ps</a>
-|
-<a href="net.pdf">pdf</a>)
+(<a href="net/net.html">html</a> |
+<a href="net/net.ps">ps</a> |
+<a href="net/net.pdf">pdf</a>)
 </span></p><p style="line-height: 1.2em; margin-left: 2.00in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
 <span style="font-size: 10pt"><i>Dave Presotto and Phil Winterbottom
 </i></span></p><p style="line-height: 1.2em; margin-left: 1.50in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
@@ -51,8 +50,7 @@
 <p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: left;">
 <span style="font-size: 10pt">Security in Plan 9 
 (<a href="auth.html">html</a> |
-<a href="auth.ps">ps</a>
-|
+<a href="auth.ps">ps</a> |
 <a href="auth.pdf">pdf</a>)
 </span></p><p style="line-height: 1.2em; margin-left: 2.00in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
 <span style="font-size: 10pt"><i>Russ Cox, Eric Grosse, Rob Pike, Dave Presotto, and Sean Quinlan
@@ -66,8 +64,7 @@
 <p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: left;">
 <span style="font-size: 10pt">How to Use the Plan 9 C Compiler 
 (<a href="comp.html">html</a> |
-<a href="comp.ps">ps</a>
-|
+<a href="comp.ps">ps</a> |
 <a href="comp.pdf">pdf</a>)
 </span></p><p style="line-height: 1.2em; margin-left: 2.00in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
 <span style="font-size: 10pt"><i>Rob Pike
@@ -77,8 +74,7 @@
 <p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: left;">
 <span style="font-size: 10pt">Changes to the Programming Environment in the Fourth Release of Plan 9 
 (<a href="prog4.html">html</a> |
-<a href="prog4.ps">ps</a>
-|
+<a href="prog4.ps">ps</a> |
 <a href="prog4.pdf">pdf</a>)
 </span></p><p style="line-height: 1.2em; margin-left: 2.00in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
 <span style="font-size: 10pt"><i>Rob Pike
@@ -88,8 +84,7 @@
 <p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: left;">
 <span style="font-size: 10pt">APE — The ANSI/POSIX Environment 
 (<a href="ape.html">html</a> |
-<a href="ape.ps">ps</a>
-|
+<a href="ape.ps">ps</a> |
 <a href="ape.pdf">pdf</a>)
 </span></p><p style="line-height: 1.2em; margin-left: 2.00in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
 <span style="font-size: 10pt"><i>Howard Trickey
@@ -99,8 +94,7 @@
 <p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: left;">
 <span style="font-size: 10pt">Acid: A Debugger Built From A Language 
 (<a href="acidpaper.html">html</a> |
-<a href="acidpaper.ps">ps</a>
-|
+<a href="acidpaper.ps">ps</a> |
 <a href="acidpaper.pdf">pdf</a>)
 </span></p><p style="line-height: 1.2em; margin-left: 2.00in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
 <span style="font-size: 10pt"><i>Phil Winterbottom
@@ -110,8 +104,7 @@
 <p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: left;">
 <span style="font-size: 10pt">Acid Manual 
 (<a href="acid.html">html</a> |
-<a href="acid.ps">ps</a>
-|
+<a href="acid.ps">ps</a> |
 <a href="acid.pdf">pdf</a>)
 </span></p><p style="line-height: 1.2em; margin-left: 2.00in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
 <span style="font-size: 10pt"><i>Phil Winterbottom
@@ -121,8 +114,7 @@
 <p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: left;">
 <span style="font-size: 10pt">Maintaining Files on Plan 9 with Mk 
 (<a href="mk.html">html</a> |
-<a href="mk.ps">ps</a>
-|
+<a href="mk.ps">ps</a> |
 <a href="mk.pdf">pdf</a>)
 </span></p><p style="line-height: 1.2em; margin-left: 2.00in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
 <span style="font-size: 10pt"><i>Andrew G. Hume and Bob Flandrena
@@ -132,8 +124,7 @@
 <p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: left;">
 <span style="font-size: 10pt">Plan 9 Mkfiles 
 (<a href="mkfiles.html">html</a> |
-<a href="mkfiles.ps">ps</a>
-|
+<a href="mkfiles.ps">ps</a> |
 <a href="mkfiles.pdf">pdf</a>)
 </span></p><p style="line-height: 1.2em; margin-left: 2.00in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
 <span style="font-size: 10pt"><i>Bob Flandrena
@@ -143,8 +134,7 @@
 <p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: left;">
 <span style="font-size: 10pt">A Manual for the Plan 9 assembler 
 (<a href="asm.html">html</a> |
-<a href="asm.ps">ps</a>
-|
+<a href="asm.ps">ps</a> |
 <a href="asm.pdf">pdf</a>)
 </span></p><p style="line-height: 1.2em; margin-left: 2.00in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
 <span style="font-size: 10pt"><i>Rob Pike
@@ -157,10 +147,9 @@
 </b></span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
 <p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: left;">
 <span style="font-size: 10pt">8&frac12;, the Plan 9 Window System 
-(<a href="8&frac12;.html">html</a> |
-<a href="8&frac12;.ps">ps</a>
-|
-<a href="8&frac12;.pdf">pdf</a>)
+(<a href="8&frac12;/8&frac12;.html">html</a> |
+<a href="8&frac12;/8&frac12;.ps">ps</a> |
+<a href="8&frac12;/8&frac12;.pdf">pdf</a>)
 </span></p><p style="line-height: 1.2em; margin-left: 2.00in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
 <span style="font-size: 10pt"><i>Rob Pike
 </i></span></p><p style="line-height: 1.2em; margin-left: 1.50in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
@@ -169,8 +158,7 @@
 <p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: left;">
 <span style="font-size: 10pt">Rc — The Plan 9 Shell 
 (<a href="rc.html">html</a> |
-<a href="rc.ps">ps</a>
-|
+<a href="rc.ps">ps</a> |
 <a href="rc.pdf">pdf</a>)
 </span></p><p style="line-height: 1.2em; margin-left: 2.00in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
 <span style="font-size: 10pt"><i>Tom Duff
@@ -179,10 +167,9 @@
 </span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
 <p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: left;">
 <span style="font-size: 10pt">The Text Editor </span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"> 
-(<a href="sam.html">html</a> |
-<a href="sam.ps">ps</a>
-|
-<a href="sam.pdf">pdf</a>)
+(<a href="sam/sam.html">html</a> |
+<a href="sam/sam.ps">ps</a> |
+<a href="sam/sam.pdf">pdf</a>)
 </span></p><p style="line-height: 1.2em; margin-left: 2.00in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
 <span style="font-size: 10pt"><i>Rob Pike
 </i></span></p><p style="line-height: 1.2em; margin-left: 1.50in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
@@ -190,10 +177,9 @@
 </span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
 <p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: left;">
 <span style="font-size: 10pt">Acme: A User Interface for Programmers 
-(<a href="acme.html">html</a> |
-<a href="acme.ps">ps</a>
-|
-<a href="acme.pdf">pdf</a>)
+(<a href="acme/acme.html">html</a> |
+<a href="acme/acme.ps">ps</a> |
+<a href="acme/acme.pdf">pdf</a>)
 </span></p><p style="line-height: 1.2em; margin-left: 2.00in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
 <span style="font-size: 10pt"><i>Rob Pike
 </i></span></p><p style="line-height: 1.2em; margin-left: 1.50in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
@@ -202,8 +188,7 @@
 <p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: left;">
 <span style="font-size: 10pt">Plumbing and Other Utilities 
 (<a href="plumb.html">html</a> |
-<a href="plumb.ps">ps</a>
-|
+<a href="plumb.ps">ps</a> |
 <a href="plumb.pdf">pdf</a>)
 </span></p><p style="line-height: 1.2em; margin-left: 2.00in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
 <span style="font-size: 10pt"><i>Rob Pike
@@ -217,8 +202,7 @@
 <p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: left;">
 <span style="font-size: 10pt">Hello World, or &Kappa;&alpha;&lambda;&eta;&mu;&#941;&rho;&alpha; &kappa;&#972;&sigma;&mu;&epsilon;, or </span><span style="font-size: 10pt">&#12371;&#12435;&#12395;&#12385;&#12399; &#19990;&#30028;</span><span style="font-size: 10pt"> 
 (<a href="utf.html">html</a> |
-<a href="utf.ps">ps</a>
-|
+<a href="utf.ps">ps</a> |
 <a href="utf.pdf">pdf</a>)
 </span></p><p style="line-height: 1.2em; margin-left: 2.00in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
 <span style="font-size: 10pt"><i>Rob Pike and Ken Thompson
@@ -228,8 +212,7 @@
 <p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: left;">
 <span style="font-size: 10pt">Plan 9 C Compilers 
 (<a href="compiler.html">html</a> |
-<a href="compiler.ps">ps</a>
-|
+<a href="compiler.ps">ps</a> |
 <a href="compiler.pdf">pdf</a>)
 </span></p><p style="line-height: 1.2em; margin-left: 2.00in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
 <span style="font-size: 10pt"><i>Ken Thompson
@@ -239,8 +222,7 @@
 <p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: left;">
 <span style="font-size: 10pt">Adding Application Support for a New Architecture in Plan 9 
 (<a href="libmach.html">html</a> |
-<a href="libmach.ps">ps</a>
-|
+<a href="libmach.ps">ps</a> |
 <a href="libmach.pdf">pdf</a>)
 </span></p><p style="line-height: 1.2em; margin-left: 2.00in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
 <span style="font-size: 10pt"><i>Bob Flandrena
@@ -249,10 +231,9 @@
 </span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
 <p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: left;">
 <span style="font-size: 10pt">The Plan 9 File Server 
-(<a href="fs.html">html</a> |
-<a href="fs.ps">ps</a>
-|
-<a href="fs.pdf">pdf</a>)
+(<a href="fs/fs.html">html</a> |
+<a href="fs/fs.ps">ps</a> |
+<a href="fs/fs.pdf">pdf</a>)
 </span></p><p style="line-height: 1.2em; margin-left: 2.00in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
 <span style="font-size: 10pt"><i>Ken Thompson
 </i></span></p><p style="line-height: 1.2em; margin-left: 1.50in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
@@ -261,8 +242,7 @@
 <p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: left;">
 <span style="font-size: 10pt">Venti: A new approach to archival storage 
 (<a href="venti/venti.html">html</a> |
-<a href="venti/venti.ps">ps</a>
-|
+<a href="venti/venti.ps">ps</a> |
 <a href="venti/venti.pdf">pdf</a>)
 </span></p><p style="line-height: 1.2em; margin-left: 2.00in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
 <span style="font-size: 10pt"><i>Sean Quinlan and Sean Dorward
@@ -271,10 +251,9 @@
 </span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
 <p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: left;">
 <span style="font-size: 10pt">The IL protocol 
-(<a href="il.html">html</a> |
-<a href="il.ps">ps</a>
-|
-<a href="il.pdf">pdf</a>)
+(<a href="il/il.html">html</a> |
+<a href="il/il.ps">ps</a> |
+<a href="il/il.pdf">pdf</a>)
 </span></p><p style="line-height: 1.2em; margin-left: 2.00in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
 <span style="font-size: 10pt"><i>Dave Presotto and Phil Winterbottom
 </i></span></p><p style="line-height: 1.2em; margin-left: 1.50in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
@@ -283,8 +262,7 @@
 <p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: left;">
 <span style="font-size: 10pt">Lexical File Names in Plan 9, or, Getting Dot-Dot Right 
 (<a href="lexnames.html">html</a> |
-<a href="lexnames.ps">ps</a>
-|
+<a href="lexnames.ps">ps</a> |
 <a href="lexnames.pdf">pdf</a>)
 </span></p><p style="line-height: 1.2em; margin-left: 2.00in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
 <span style="font-size: 10pt"><i>Rob Pike
@@ -294,8 +272,7 @@
 <p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: left;">
 <span style="font-size: 10pt">Process Sleep and Wakeup on a Shared-memory Multiprocessor 
 (<a href="sleep.html">html</a> |
-<a href="sleep.ps">ps</a>
-|
+<a href="sleep.ps">ps</a> |
 <a href="sleep.pdf">pdf</a>)
 </span></p><p style="line-height: 1.2em; margin-left: 2.00in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
 <span style="font-size: 10pt"><i>Rob Pike, Dave Presotto, Ken Thompson, and Gerard Holzmann
@@ -309,8 +286,7 @@
 <p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: left;">
 <span style="font-size: 10pt">A Guide to the Lp Printer Spooler 
 (<a href="lp.html">html</a> |
-<a href="lp.ps">ps</a>
-|
+<a href="lp.ps">ps</a> |
 <a href="lp.pdf">pdf</a>)
 </span></p><p style="line-height: 1.2em; margin-left: 2.00in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
 <span style="font-size: 10pt"><i>Paul Glick
@@ -319,8 +295,7 @@
 </span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
 <p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: left;">
 <span style="font-size: 10pt">Troff User&rsquo;s Manual 
-(<a href="troff.ps">ps</a>
-|
+(<a href="troff.ps">ps</a> |
 <a href="troff.pdf">pdf</a>)
 </span></p><p style="line-height: 1.2em; margin-left: 2.00in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
 <span style="font-size: 10pt"><i>Joseph F. Ossanna and Brian W. Kernighan
@@ -330,8 +305,7 @@
 <p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: left;">
 <span style="font-size: 10pt">Using SPIN 
 (<a href="spin.html">html</a> |
-<a href="spin.ps">ps</a>
-|
+<a href="spin.ps">ps</a> |
 <a href="spin.pdf">pdf</a>)
 </span></p><p style="line-height: 1.2em; margin-left: 2.00in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
 <span style="font-size: 10pt"><i>Gerard Holzmann
@@ -345,8 +319,7 @@
 <p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: left;">
 <span style="font-size: 10pt">The Various Ports 
 (<a href="port.html">html</a> |
-<a href="port.ps">ps</a>
-|
+<a href="port.ps">ps</a> |
 <a href="port.pdf">pdf</a>)
 </span></p><p style="line-height: 1.2em; margin-left: 1.50in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: left;">
 <span style="font-size: 10pt">The hardware requirements for the Plan 9 compilers and kernels.

BIN
sys/doc/sam/fig1.gif


BIN
sys/doc/sam/fig1.png


BIN
sys/doc/sam/fig2.gif


BIN
sys/doc/sam/fig2.png


BIN
sys/doc/sam/fig3.gif


BIN
sys/doc/sam/fig3.png


BIN
sys/doc/sam/fig4.gif


BIN
sys/doc/sam/fig4.png


+ 7 - 3
sys/doc/sam/mkfile

@@ -1,5 +1,7 @@
 </sys/doc/fonts
 
+default:V: sam.ps sam.tut.out
+
 sam.ps:D:	sam.ms fig1.ps fig2.ps fig3.ps fig4.ps fig5.pic fig6.pic fig7.pic refs
 	{echo $FONTS; cat sam.ms refs} | pic | tbl | troff -ms -mpictures | lp -dstdout >sam.ps
 	../cleanps sam.ps
@@ -7,9 +9,11 @@ sam.ps:D:	sam.ms fig1.ps fig2.ps fig3.ps fig4.ps fig5.pic fig6.pic fig7.pic refs
 sam.trout:D:	sam.ms fig1.ps fig2.ps fig3.ps fig4.ps fig5.pic fig6.pic fig7.pic refs
 	{echo $FONTS; cat sam.ms refs} | pic | tbl | troff -ms -mpictures >sam.trout
 
-sam.tut.out:D:	sam.tut
-	troff -ms sam.tut > sam.tut.out
-
 sam.html:D:	sam.ms fig1.ps fig2.ps fig3.ps fig4.ps fig5.pic fig6.pic fig7.pic refs
 	pic sam.ms refs | tbl | htmlroff -ms -mhtml >sam.html
 
+sam.tut.out:D:	sam.tut
+	troff -ms sam.tut > sam.tut.out
+
+clean:V:
+	rm -f sam.ps

+ 3705 - 0
sys/doc/sam/sam.html

@@ -0,0 +1,3705 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+"http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=utf8">
+<title>The Text Editor sam</title>
+</meta>
+</head>
+<body>
+<p style="margin-top: 0; margin-bottom: 0.50in"></p>
+<p style="margin-top: 0; margin-bottom: 0.21in"></p>
+
+<p style="line-height: 1.4em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: center;">
+<span style="font-size: 12pt"><b>The Text Editor </b></span><span style="font-size: 12pt"><tt>sam</tt></span><span style="font-size: 12pt"><b></b></span></p>
+<p style="margin-top: 0; margin-bottom: 0.21in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<p style="line-height: 1.4em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: center;">
+<span style="font-size: 10pt"><i>Rob Pike</i></span></p>
+<p style="line-height: 1.4em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: center;">
+<span style="font-size: 10pt"><i>rob@plan9.bell-labs.com</i></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="margin-top: 0; margin-bottom: 0.33in"></p>
+<p style="line-height: 1.4em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: center;">
+<span style="font-size: 10pt"><i>ABSTRACT</i></span></p>
+<p style="margin-top: 0; margin-bottom: 0.19in"></p>
+<p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.50in; text-indent: 0.50in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"></span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt">
+is an interactive multi-file text editor intended for
+bitmap displays.
+A textual command language
+supplements the mouse-driven, cut-and-paste interface
+to make complex or
+repetitive editing tasks easy to specify.
+The language is characterized by the composition of regular expressions
+to describe the structure of the text being modified.
+The treatment of files as a database, with changes logged
+as atomic transactions, guides the implementation and
+makes a general &lsquo;undo&rsquo; mechanism straightforward.
+</span><span style="font-size: 10pt"></span><span style="font-size: 10pt"></span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.50in; text-indent: 0.35in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"></span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt">
+is implemented as two processes connected by a low-bandwidth stream,
+one process handling the display and the other the editing
+algorithms.  Therefore it can run with the display process
+in a bitmap terminal and the editor on a local host,
+with both processes on a bitmap-equipped host, or with
+the display process in the terminal and the editor in a
+remote host.
+By suppressing the display process,
+it can even run without a bitmap terminal.
+</span><span style="font-size: 10pt"></span><span style="font-size: 10pt"></span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.50in; text-indent: 0.35in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">This paper is reprinted from Software&mdash;Practice and Experience,
+Vol 17, number 11, pp. 813-845, November 1987.
+The paper has not been updated for the Plan 9 manuals.  Although
+</span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt">
+has not changed much since the paper was written, the system around it certainly has.
+Nonetheless, the description here still stands as the best introduction to the editor.
+</span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<p style="margin-top: 0; margin-bottom: 0.50in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"><b>Introduction
+</b></span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"></span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt">
+is an interactive text editor that combines cut-and-paste interactive editing with
+an unusual command language based on the composition of regular expressions.
+It is written as two programs: one, the &lsquo;host part,&rsquo; runs on a UNIX system
+and implements the command language and provides file access; the other, the
+&lsquo;terminal part,&rsquo; runs asynchronously
+on a machine with a mouse and bitmap display
+and supports the display and interactive editing.
+The host part may be even run in isolation on an ordinary terminal
+to edit text using the command
+language, much like a traditional line editor,
+without assistance from a mouse or display.
+Most often,
+the terminal part runs on a Blit<sup></sup></span><sup><span style="font-size: 6pt">1</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt"> terminal
+(actually on a Teletype DMD 5620, the production version of the Blit), whose
+host connection is an ordinary 9600 bps RS232 link;
+on the SUN computer the host and display processes run on a single machine,
+connected by a pipe.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"></span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt">
+edits uninterpreted
+ASCII text.
+It has no facilities for multiple fonts, graphics or tables,
+unlike MacWrite,<sup></sup></span><sup><span style="font-size: 6pt">2</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt"> Bravo,<sup></sup></span><sup><span style="font-size: 6pt">3</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt"> Tioga<sup></sup></span><sup><span style="font-size: 6pt">4</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt">
+or Lara.<sup></sup></span><sup><span style="font-size: 6pt">5</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt">
+Also unlike them, it has a rich command language.
+(Throughout this paper, the phrase
+</span><span style="font-size: 10pt"><i>command language
+</i></span><span style="font-size: 10pt">refers to
+textual commands; commands activated from the mouse form the
+</span><span style="font-size: 10pt"><i>mouse</i></span><span style="font-size: 10pt">
+</span><span style="font-size: 10pt"><i>language.</i></span><span style="font-size: 10pt">)
+</span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt">
+developed as an editor for use by programmers, and tries to join
+the styles of the UNIX text editor
+</span><span style="font-size: 10pt"><tt>ed</tt></span><span style="font-size: 10pt"><sup></sup></span><sup><span style="font-size: 6pt">6,7</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt">
+with that of interactive cut-and-paste editors by
+providing a comfortable mouse-driven interface
+to a program with a solid command language driven by regular expressions.
+The command language developed more than the mouse language, and
+acquired a notation for describing the structure of files
+more richly than as a sequence of lines,
+using a dataflow-like syntax for specifying changes.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The interactive style was influenced by
+</span><span style="font-size: 10pt"><tt>jim</tt></span><span style="font-size: 10pt">,<sup></sup></span><sup><span style="font-size: 6pt">1</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt">
+an early cut-and-paste editor for the Blit, and by
+</span><span style="font-size: 10pt"><tt>mux</tt></span><span style="font-size: 10pt">,<sup></sup></span><sup><span style="font-size: 6pt">8</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt">
+the Blit window system.
+</span><span style="font-size: 10pt"><tt>Mux</tt></span><span style="font-size: 10pt">
+merges the original Blit window system,
+</span><span style="font-size: 10pt"><tt>mpx</tt></span><span style="font-size: 10pt">,<sup></sup></span><sup><span style="font-size: 6pt">1</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt">
+with cut-and-paste editing, forming something like a
+multiplexed version of
+</span><span style="font-size: 10pt"><tt>jim</tt></span><span style="font-size: 10pt">
+that edits the output of (and input to) command sessions rather than files.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The first part of this paper describes the command language, then the mouse
+language, and explains how they interact.
+That is followed by a description of the implementation,
+first of the host part, then of the terminal part.
+A principle that influenced the design of
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+is that it should have no explicit limits, such as upper limits on
+file size or line length.
+A secondary consideration is that it be efficient.
+To honor these two goals together requires a method for efficiently
+manipulating
+huge strings (files) without breaking them into lines,
+perhaps while making thousands of changes
+under control of the command language.
+</span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt">&rsquo;s
+method is to
+treat the file as a transaction database, implementing changes as atomic
+updates.  These updates may be unwound easily to &lsquo;undo&rsquo; changes.
+Efficiency is achieved through a collection of caches that minimizes
+disc traffic and data motion, both within the two parts of the program
+and between them.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The terminal part of
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+is fairly straightforward.
+More interesting is how the two halves of the editor stay
+synchronized when either half may initiate a change.
+This is achieved through a data structure that organizes the
+communications and is maintained in parallel by both halves.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The last part of the paper chronicles the writing of
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+and discusses the lessons that were learned through its development and use.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The paper is long, but is composed largely of two papers of reasonable length:
+a description of the user interface of
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+and a discussion of its implementation.
+They are combined because the implementation is strongly influenced by
+the user interface, and vice versa.
+</span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"><b>The Interface
+</b></span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"></span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt">
+is a text editor for multiple files.
+File names may be provided when it is invoked:
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>sam file1 file2 ...</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">and there are commands
+to add new files and discard unneeded ones.
+Files are not read until necessary
+to complete some command.
+Editing operations apply to an internal copy
+made when the file is read; the UNIX file associated with the copy
+is changed only by an explicit command.
+To simplify the discussion, the internal copy is here called a
+</span><span style="font-size: 10pt"><i>file</i></span><span style="font-size: 10pt">,
+while the disc-resident original is called a
+</span><span style="font-size: 10pt"><i>disc file.
+</i></span><span style="font-size: 10pt"></span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"></span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt">
+is usually connected to a bitmap display that presents a cut-and-paste
+editor driven by the mouse.
+In this mode, the command language is still available:
+text typed in a special window, called the
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+</span><span style="font-size: 10pt"><i>window,</i></span><span style="font-size: 10pt">
+is interpreted
+as commands to be executed in the current file.
+Cut-and-paste editing may be used in any window &mdash; even in the
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+window to construct commands.
+The other mode of operation, invoked by starting
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+with the option
+</span><span style="font-size: 10pt"><tt>-d</tt></span><span style="font-size: 10pt">
+(for &lsquo;no download&rsquo;),
+does not use the mouse or bitmap display, but still permits
+editing using the textual command language, even on an ordinary terminal,
+interactively or from a script.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The following sections describe first the command language (under
+</span><span style="font-size: 10pt"><tt>sam\fP-d
+and in the
+</tt></span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"><tt>
+window), and then the mouse interface.
+These two languages are nearly independent, but connect through the
+</tt></span><span style="font-size: 10pt"><i>current</i></span><span style="font-size: 10pt"><tt>
+</tt></span><span style="font-size: 10pt"><i>text,</i></span><span style="font-size: 10pt"><tt>
+described below.
+</tt></span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"><b>The Command Language
+</b></span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">A file consists of its contents, which are an array of characters
+(that is, a string); the
+</span><span style="font-size: 10pt"><i>name</i></span><span style="font-size: 10pt">
+of the associated disc file; the
+</span><span style="font-size: 10pt"><i>modified bit
+</i></span><span style="font-size: 10pt">that states whether the contents match those of
+the disc file;
+and a substring of the contents, called the
+</span><span style="font-size: 10pt"><i>current text
+</i></span><span style="font-size: 10pt">or
+</span><span style="font-size: 10pt"><i>dot</i></span><span style="font-size: 10pt">
+(see Figures 1 and 2).
+If the current text is a null string, dot falls between characters.
+The
+</span><span style="font-size: 10pt"><i>value</i></span><span style="font-size: 10pt">
+of dot is the location of the current text; the
+</span><span style="font-size: 10pt"><i>contents</i></span><span style="font-size: 10pt">
+of dot are the characters it contains.
+</span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt">
+imparts to the text no two-dimensional interpretation such as columns
+or fields; text is always one-dimensional.
+Even the idea of a &lsquo;line&rsquo; of text as understood by most UNIX programs
+&mdash; a sequence of characters terminated by a newline character &mdash;
+is only weakly supported.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The
+</span><span style="font-size: 10pt"><i>current file
+</i></span><span style="font-size: 10pt">is the file to which editing commands refer.
+The current text is therefore dot in the current file.
+If a command doesn&rsquo;t explicitly name a particular file or piece of text,
+the command is assumed to apply to the current text.
+For the moment, ignore the presence of multiple files and consider
+editing a single file.
+</span><span style="font-size: 10pt"></span></p><center><img src="fig1.gif" /></center>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 8pt"><i>Figure 1. A typical
+</i></span><span style="font-size: 8pt"><tt>sam</tt></span><span style="font-size: 8pt"><i>
+screen, with the editing menu presented.
+The
+</i></span><span style="font-size: 8pt"><tt>sam</tt></span><span style="font-size: 8pt"><i>
+(command language) window is in the middle, with file windows above and below.
+(The user interface makes it easy to create these abutting windows.)
+The partially obscured window is a third file window.
+The uppermost window is that to which typing and mouse operations apply,
+as indicated by its heavy border.
+Each window has its current text highlighted in reverse video.
+The
+</i></span><span style="font-size: 8pt"><tt>sam</tt></span><span style="font-size: 8pt"><i>
+window&rsquo;s current text is the null string on the last visible line,
+indicated by a vertical bar.
+See also Figure 2.
+</i></span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<p style="margin-top: 0; margin-bottom: 0.02in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Commands have one-letter names.
+Except for non-editing commands such as writing
+the file to disc, most commands make some change
+to the text in dot and leave dot set to the text resulting from the change.
+For example, the delete command,
+</span><span style="font-size: 10pt"><tt>d</tt></span><span style="font-size: 10pt">,
+deletes the text in dot, replacing it by the null string and setting dot
+to the result.
+The change command,
+</span><span style="font-size: 10pt"><tt>c</tt></span><span style="font-size: 10pt">,
+replaces dot by text delimited by an arbitrary punctuation character,
+conventionally
+a slash.  Thus,
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>c/Peter/</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">replaces the text in dot by the string
+</span><span style="font-size: 10pt"><tt>Peter</tt></span><span style="font-size: 10pt">.
+Similarly,
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>a/Peter/</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">(append) adds the string after dot, and
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>i/Peter/</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">(insert) inserts before dot.
+All three leave dot set to the new text,
+</span><span style="font-size: 10pt"><tt>Peter</tt></span><span style="font-size: 10pt">.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Newlines are part of the syntax of commands:
+the newline character lexically terminates a command.
+Within the inserted text, however, newlines are never implicit.
+But since it is often convenient to insert multiple lines of text,
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+has a special
+syntax for that case:
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>a</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>some lines of text</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>to be inserted in the file,</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>terminated by a period</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>on a line by itself</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>.</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">In the one-line syntax, a newline character may be specified by a C-like
+escape, so
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>c/\n/</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">replaces dot by a single newline character.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"></span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt">
+also has a substitute command,
+</span><span style="font-size: 10pt"><tt>s</tt></span><span style="font-size: 10pt">:
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>s/</tt></span><span style="font-size: 9pt"><i>expression</i></span><span style="font-size: 9pt"><tt>/</tt></span><span style="font-size: 9pt"><i>replacement</i></span><span style="font-size: 9pt"><tt>/</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">substitutes the replacement text for the first match, in dot,
+of the regular expression.
+Thus, if dot is the string
+</span><span style="font-size: 10pt"><tt>Peter</tt></span><span style="font-size: 10pt">,
+the command
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>s/t/st/</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">changes it to
+</span><span style="font-size: 10pt"><tt>Pester</tt></span><span style="font-size: 10pt">.
+In general,
+</span><span style="font-size: 10pt"><tt>s</tt></span><span style="font-size: 10pt">
+is unnecessary, but it was inherited from
+</span><span style="font-size: 10pt"><tt>ed</tt></span><span style="font-size: 10pt">
+and it has some convenient variations.
+For instance, the replacement text may include the matched text,
+specified by
+</span><span style="font-size: 10pt"><tt>&amp;</tt></span><span style="font-size: 10pt">:
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>s/Peter/Oh, &amp;, &amp;, &amp;, &amp;!/</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">There are also three commands that apply programs
+to text:
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>&lt; </tt></span><span style="font-size: 9pt"><i>UNIX program</i></span><span style="font-size: 9pt"><tt></tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">replaces dot by the output of the UNIX program.
+Similarly, the
+</span><span style="font-size: 10pt"><tt>&gt;</tt></span><span style="font-size: 10pt">
+command
+runs the program with dot as its standard input, and
+</span><span style="font-size: 10pt"><tt>|</tt></span><span style="font-size: 10pt">
+does both.  For example,
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>| sort</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">replaces dot by the result of applying the standard sorting utility to it.
+Again, newlines have no special significance for these
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+commands.
+The text acted upon and resulting from these commands is not necessarily
+bounded by newlines, although for connection with UNIX programs,
+newlines may be necessary to obey conventions.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">One more command:
+</span><span style="font-size: 10pt"><tt>p</tt></span><span style="font-size: 10pt">
+prints the contents of dot.
+Table I summarizes
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">&rsquo;s
+commands.
+</span><span style="font-size: 10pt"></span></p><center><img src="sam0.png"></center>
+</center>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<p style="margin-top: 0; margin-bottom: 0.02in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The value of dot may be changed by
+specifying an
+</span><span style="font-size: 10pt"><i>address</i></span><span style="font-size: 10pt">
+for the command.
+The simplest address is a line number:
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>3</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">refers to the third line of the file, so
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>3d</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">deletes the third line of the file, and implicitly renumbers
+the lines so the old line 4 is now numbered 3.
+(This is one of the few places where
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+deals with lines directly.)
+Line
+</span><span style="font-size: 10pt"><tt>0</tt></span><span style="font-size: 10pt">
+is the null string at the beginning of the file.
+If a command consists of only an address, a
+</span><span style="font-size: 10pt"><tt>p</tt></span><span style="font-size: 10pt">
+command is assumed, so typing an unadorned
+</span><span style="font-size: 10pt"><tt>3</tt></span><span style="font-size: 10pt">
+prints line 3 on the terminal.
+There are a couple of other basic addresses:
+a period addresses dot itself; and
+a dollar sign
+(</span><span style="font-size: 10pt"><tt>$</tt></span><span style="font-size: 10pt">)
+addresses the null string at the end of the file.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">An address is always a single substring of the file.
+Thus, the address
+</span><span style="font-size: 10pt"><tt>3</tt></span><span style="font-size: 10pt">
+addresses the characters
+after the second newline of
+the file through the third newline of the file.
+A
+</span><span style="font-size: 10pt"><i>compound address
+</i></span><span style="font-size: 10pt">is constructed by the comma operator
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><i>address1</i></span><span style="font-size: 9pt"><tt>,</tt></span><span style="font-size: 9pt"><i>address2</i></span><span style="font-size: 9pt"><tt></tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">and addresses the substring of the file from the beginning of
+</span><span style="font-size: 10pt"><i>address1</i></span><span style="font-size: 10pt">
+to the end of
+</span><span style="font-size: 10pt"><i>address2</i></span><span style="font-size: 10pt">.
+For example, the command
+</span><span style="font-size: 10pt"><tt>3,5p</tt></span><span style="font-size: 10pt">
+prints the third through fifth lines of the file and
+</span><span style="font-size: 10pt"><tt>.,$d</tt></span><span style="font-size: 10pt">
+deletes the text from the beginning of dot to the end of the file.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">These addresses are all absolute positions in the file, but
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+also has relative addresses, indicated by
+</span><span style="font-size: 10pt"><tt>+</tt></span><span style="font-size: 10pt">
+or
+</span><span style="font-size: 10pt"><tt>-</tt></span><span style="font-size: 10pt">.
+For example,
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>$-3</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">is the third line before the end of the file and
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>.+1</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">is the line after dot.
+If no address appears to the left of the
+</span><span style="font-size: 10pt"><tt>+</tt></span><span style="font-size: 10pt">
+or
+</span><span style="font-size: 10pt"><tt>-</tt></span><span style="font-size: 10pt">,
+dot is assumed;
+if nothing appears to the right,
+</span><span style="font-size: 10pt"><tt>1</tt></span><span style="font-size: 10pt">
+is assumed.
+Therefore,
+</span><span style="font-size: 10pt"><tt>.+1</tt></span><span style="font-size: 10pt">
+may be abbreviated to just a plus sign.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The
+</span><span style="font-size: 10pt"><tt>+</tt></span><span style="font-size: 10pt">
+operator acts relative to the end of its first argument, while the
+</span><span style="font-size: 10pt"><tt>-</tt></span><span style="font-size: 10pt">
+operator acts relative to the beginning.  Thus
+</span><span style="font-size: 10pt"><tt>.+1</tt></span><span style="font-size: 10pt">
+addresses the first line after dot,
+</span><span style="font-size: 10pt"><tt>.-</tt></span><span style="font-size: 10pt">
+addresses the first line before dot, and
+</span><span style="font-size: 10pt"><tt>+-</tt></span><span style="font-size: 10pt">
+refers to the line containing the end of dot.  (Dot may span multiple lines, and
+</span><span style="font-size: 10pt"><tt>+</tt></span><span style="font-size: 10pt">
+selects the line after the end of dot, then
+</span><span style="font-size: 10pt"><tt>-</tt></span><span style="font-size: 10pt">
+backs up one line.)
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The final type of address is a regular expression, which addresses the
+text matched by the expression.  The expression is enclosed in slashes, as in
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>/</tt></span><span style="font-size: 9pt"><i>expression</i></span><span style="font-size: 9pt"><tt>/</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The expressions are the same as those in the UNIX program
+</span><span style="font-size: 10pt"><tt>egrep</tt></span><span style="font-size: 10pt">,<sup></sup></span><sup><span style="font-size: 6pt">6,7</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt">
+and include closures, alternations, and so on.
+They find the
+</span><span style="font-size: 10pt"><i>leftmost longest
+</i></span><span style="font-size: 10pt">string that matches the expression, that is,
+the first match after the point where the search is started,
+and if more than one match begins at the same spot, the longest such match.
+(I assume familiarity with the syntax for regular expressions in UNIX programs.<sup></sup></span><sup><span style="font-size: 6pt">9</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt">)
+For example,
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>/x/</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">matches the next
+</span><span style="font-size: 10pt"><tt>x</tt></span><span style="font-size: 10pt">
+character in the file,
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>/xx*/</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">matches the next run of one or more
+</span><span style="font-size: 10pt"><tt>x</tt></span><span style="font-size: 10pt">&rsquo;s,
+and
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>/x|Peter/</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">matches the next
+</span><span style="font-size: 10pt"><tt>x</tt></span><span style="font-size: 10pt">
+or
+</span><span style="font-size: 10pt"><tt>Peter</tt></span><span style="font-size: 10pt">.
+For compatibility with other UNIX programs, the &lsquo;any character&rsquo; operator,
+a period,
+does not match a newline, so
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>/.*/</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">matches the text from dot to the end of the line, but excludes the newline
+and so will not match across
+the line boundary.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Regular expressions are always relative addresses.
+The direction is forwards by default,
+so
+</span><span style="font-size: 10pt"><tt>/Peter/</tt></span><span style="font-size: 10pt">
+is really an abbreviation for
+</span><span style="font-size: 10pt"><tt>+/Peter/</tt></span><span style="font-size: 10pt">.
+The search can be reversed with a minus sign, so
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt></tt></span><span style="font-size: 9pt"><tt>-/Peter/</tt></span><span style="font-size: 9pt"><tt></tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">finds the first
+</span><span style="font-size: 10pt"><tt>Peter</tt></span><span style="font-size: 10pt">
+before dot.
+Regular expressions may be used with other address forms, so
+</span><span style="font-size: 10pt"><tt>0+/Peter/</tt></span><span style="font-size: 10pt">
+finds the first
+</span><span style="font-size: 10pt"><tt>Peter</tt></span><span style="font-size: 10pt">
+in the file and
+</span><span style="font-size: 10pt"><tt>$-/Peter/</tt></span><span style="font-size: 10pt">
+finds the last.
+Table II summarizes
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">&rsquo;s
+addresses.
+</span><span style="font-size: 10pt"></span></p><center><img src="sam1.png"></center>
+</center>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<p style="margin-top: 0; margin-bottom: 0.02in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The language discussed so far will not seem novel
+to people who use UNIX text editors
+such as
+</span><span style="font-size: 10pt"><tt>ed</tt></span><span style="font-size: 10pt">
+or
+</span><span style="font-size: 10pt"><tt>vi</tt></span><span style="font-size: 10pt">.<sup></sup></span><sup><span style="font-size: 6pt">9</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt">
+Moreover, the kinds of editing operations these commands allow, with the exception
+of regular expressions and line numbers,
+are clearly more conveniently handled by a mouse-based interface.
+Indeed,
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">&rsquo;s
+mouse language (discussed at length below) is the means by which
+simple changes are usually made.
+For large or repetitive changes, however, a textual language
+outperforms a manual interface.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Imagine that, instead of deleting just one occurrence of the string
+</span><span style="font-size: 10pt"><tt>Peter</tt></span><span style="font-size: 10pt">,
+we wanted to eliminate every
+</span><span style="font-size: 10pt"><tt>Peter</tt></span><span style="font-size: 10pt">.
+What&rsquo;s needed is an iterator that runs a command for each occurrence of some
+text.
+</span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt">&rsquo;s
+iterator is called
+</span><span style="font-size: 10pt"><tt>x</tt></span><span style="font-size: 10pt">,
+for extract:
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>x/</tt></span><span style="font-size: 9pt"><i>expression</i></span><span style="font-size: 9pt"><tt>/ </tt></span><span style="font-size: 9pt"><i>command</i></span><span style="font-size: 9pt"><tt></tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">finds all matches in dot of the specified expression, and for each
+such match, sets dot to the text matched and runs the command.
+So to delete all the
+</span><span style="font-size: 10pt"><tt>Peters:</tt></span><span style="font-size: 10pt">
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>0,$ x/Peter/ d</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">(Blanks in these examples are to improve readability;
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+neither requires nor interprets them.)
+This searches the entire file
+(</span><span style="font-size: 10pt"><tt>0,$</tt></span><span style="font-size: 10pt">)
+for occurrences of the string
+</span><span style="font-size: 10pt"><tt>Peter</tt></span><span style="font-size: 10pt">,
+and runs the
+</span><span style="font-size: 10pt"><tt>d</tt></span><span style="font-size: 10pt">
+command with dot set to each such occurrence.
+(By contrast, the comparable
+</span><span style="font-size: 10pt"><tt>ed</tt></span><span style="font-size: 10pt">
+command would delete all
+</span><span style="font-size: 10pt"><i>lines</i></span><span style="font-size: 10pt">
+containing
+</span><span style="font-size: 10pt"><tt>Peter</tt></span><span style="font-size: 10pt">;
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+deletes only the
+</span><span style="font-size: 10pt"><tt>Peters</tt></span><span style="font-size: 10pt">.)
+The address
+</span><span style="font-size: 10pt"><tt>0,$</tt></span><span style="font-size: 10pt">
+is commonly used, and may be abbreviated to just a comma.
+As another example,
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>, x/Peter/ p</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">prints a list of
+</span><span style="font-size: 10pt"><tt>Peters,</tt></span><span style="font-size: 10pt">
+one for each appearance in the file, with no intervening text (not even newlines
+to separate the instances).
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Of course, the text extracted by
+</span><span style="font-size: 10pt"><tt>x</tt></span><span style="font-size: 10pt">
+may be selected by a regular expression,
+which complicates deciding what set of matches is chosen &mdash;
+matches may overlap.  This is resolved by generating the matches
+starting from the beginning of dot using the leftmost-longest rule,
+and searching for each match starting from the end of the previous one.
+Regular expressions may also match null strings, but a null match
+adjacent to a non-null match is never selected; at least one character
+must intervene.
+For example,
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>, c/AAA/</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>x/B*/ c/-/</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>, p</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">produces as output
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>-A-A-A-</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">because the pattern
+</span><span style="font-size: 10pt"><tt>B*</tt></span><span style="font-size: 10pt">
+matches the null strings separating the
+</span><span style="font-size: 10pt"><tt>A</tt></span><span style="font-size: 10pt">&rsquo;s.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The
+</span><span style="font-size: 10pt"><tt>x</tt></span><span style="font-size: 10pt">
+command has a complement,
+</span><span style="font-size: 10pt"><tt>y</tt></span><span style="font-size: 10pt">,
+with similar syntax, that executes the command with dot set to the text
+</span><span style="font-size: 10pt"><i>between</i></span><span style="font-size: 10pt">
+the matches of the expression.
+For example,
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>, c/AAA/</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>y/A/ c/-/</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>, p</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">produces the same result as the example above.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The
+</span><span style="font-size: 10pt"><tt>x</tt></span><span style="font-size: 10pt">
+and
+</span><span style="font-size: 10pt"><tt>y</tt></span><span style="font-size: 10pt">
+commands are looping constructs, and
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+has a pair of conditional commands to go with them.
+They have similar syntax:
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>g/</tt></span><span style="font-size: 9pt"><i>expression</i></span><span style="font-size: 9pt"><tt>/ </tt></span><span style="font-size: 9pt"><i>command</i></span><span style="font-size: 9pt"><tt></tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">(guard)
+runs the command exactly once if dot contains a match of the expression.
+This is different from
+</span><span style="font-size: 10pt"><tt>x</tt></span><span style="font-size: 10pt">,
+which runs the command for
+</span><span style="font-size: 10pt"><i>each</i></span><span style="font-size: 10pt">
+match:
+</span><span style="font-size: 10pt"><tt>x</tt></span><span style="font-size: 10pt">
+loops;
+</span><span style="font-size: 10pt"><tt>g</tt></span><span style="font-size: 10pt">
+merely tests, without changing the value of dot.
+Thus,
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>, x/Peter/ d</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">deletes all occurrences of
+</span><span style="font-size: 10pt"><tt>Peter</tt></span><span style="font-size: 10pt">,
+but
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>, g/Peter/ d</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">deletes the whole file (reduces it to a null string) if
+</span><span style="font-size: 10pt"><tt>Peter</tt></span><span style="font-size: 10pt">
+occurs anywhere in the text.
+The complementary conditional is
+</span><span style="font-size: 10pt"><tt>v</tt></span><span style="font-size: 10pt">,
+which runs the command if there is
+</span><span style="font-size: 10pt"><i>no</i></span><span style="font-size: 10pt">
+match of the expression.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">These control-structure-like commands may be composed to construct more
+involved operations.  For example, to print those lines of text that
+contain the string
+</span><span style="font-size: 10pt"><tt>Peter</tt></span><span style="font-size: 10pt">:
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>, x/.*\n/ g/Peter/ p</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The
+</span><span style="font-size: 10pt"><tt>x</tt></span><span style="font-size: 10pt">
+breaks the file into lines, the
+</span><span style="font-size: 10pt"><tt>g</tt></span><span style="font-size: 10pt">
+selects those lines containing
+</span><span style="font-size: 10pt"><tt>Peter</tt></span><span style="font-size: 10pt">,
+and the
+</span><span style="font-size: 10pt"><tt>p</tt></span><span style="font-size: 10pt">
+prints them.
+This command gives an address for the
+</span><span style="font-size: 10pt"><tt>x</tt></span><span style="font-size: 10pt">
+command (the whole file), but because
+</span><span style="font-size: 10pt"><tt>g</tt></span><span style="font-size: 10pt">
+does not have an explicit address, it applies to the value of
+dot produced by the
+</span><span style="font-size: 10pt"><tt>x</tt></span><span style="font-size: 10pt">
+command, that is, to each line.
+All commands in
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+except for the command to write a file to disc use dot for the
+default address.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Composition may be continued indefinitely.
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>, x/.*\n/ g/Peter/ v/SaltPeter/ p</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">prints those lines containing
+</span><span style="font-size: 10pt"><tt>Peter</tt></span><span style="font-size: 10pt">
+but
+</span><span style="font-size: 10pt"><i>not</i></span><span style="font-size: 10pt">
+those containing
+</span><span style="font-size: 10pt"><tt>SaltPeter</tt></span><span style="font-size: 10pt">.
+</span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"><b>Structural Regular Expressions
+</b></span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Unlike other UNIX text editors,
+including the non-interactive ones such as
+</span><span style="font-size: 10pt"><tt>sed</tt></span><span style="font-size: 10pt">
+and
+</span><span style="font-size: 10pt"><tt>awk</tt></span><span style="font-size: 10pt">,<sup></sup></span><sup><span style="font-size: 6pt">7</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt">
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+is good for manipulating files with multi-line &lsquo;records.&rsquo;
+An example is an on-line phone book composed of records,
+separated by blank lines, of the form
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>Herbert Tic</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>44 Turnip Ave., Endive, NJ</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>201-5555642</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.15in"></p>
+
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>Norbert Twinge</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>16 Potato St., Cabbagetown, NJ</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>201-5553145</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.15in"></p>
+
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>...</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The format may be encoded as a regular expression:
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>(.+\n)+</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">that is, a sequence of one or more non-blank lines.
+The command to print Mr. Tic&rsquo;s entire record is then
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>, x/(.+\n)+/ g/^Herbert Tic$/ p</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">and that to extract just the phone number is
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>, x/(.+\n)+/ g/^Herbert Tic$/ x/^[0-9]*-[0-9]*\n/ p</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The latter command breaks the file into records,
+chooses Mr. Tic&rsquo;s record,
+extracts the phone number from the record,
+and finally prints the number.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">A more involved problem is that of
+renaming a particular variable, say
+</span><span style="font-size: 10pt"><tt>n</tt></span><span style="font-size: 10pt">,
+to
+</span><span style="font-size: 10pt"><tt>num</tt></span><span style="font-size: 10pt">
+in a C program.
+The obvious first attempt,
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>, x/n/ c/num/</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">is badly flawed: it changes not only the variable
+</span><span style="font-size: 10pt"><tt>n</tt></span><span style="font-size: 10pt">
+but any letter
+</span><span style="font-size: 10pt"><tt>n</tt></span><span style="font-size: 10pt">
+that appears.
+We need to extract all the variables, and select those that match
+</span><span style="font-size: 10pt"><tt>n</tt></span><span style="font-size: 10pt">
+and only
+</span><span style="font-size: 10pt"><tt>n</tt></span><span style="font-size: 10pt">:
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>, x/[A-Za-z_][A-Za-z_0-9]*/ g/n/ v/../ c/num/</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The pattern
+</span><span style="font-size: 10pt"><tt>[A-Za-z_][A-Za-z_0-9]*</tt></span><span style="font-size: 10pt">
+matches C identifiers.
+Next
+</span><span style="font-size: 10pt"><tt>g/n/</tt></span><span style="font-size: 10pt">
+selects those containing an
+</span><span style="font-size: 10pt"><tt>n</tt></span><span style="font-size: 10pt">.
+Then
+</span><span style="font-size: 10pt"><tt>v/../</tt></span><span style="font-size: 10pt">
+rejects those containing two (or more) characters, and finally
+</span><span style="font-size: 10pt"><tt>c/num/</tt></span><span style="font-size: 10pt">
+changes the remainder (identifiers
+</span><span style="font-size: 10pt"><tt>n</tt></span><span style="font-size: 10pt">)
+to
+</span><span style="font-size: 10pt"><tt>num</tt></span><span style="font-size: 10pt">.
+This version clearly works much better, but there may still be problems.
+For example, in C character and string constants, the sequence
+</span><span style="font-size: 10pt"><tt>\n</tt></span><span style="font-size: 10pt">
+is interpreted as a newline character, and we don&rsquo;t want to change it to
+</span><span style="font-size: 10pt"><tt>\num.</tt></span><span style="font-size: 10pt">
+This problem can be forestalled with a
+</span><span style="font-size: 10pt"><tt>y</tt></span><span style="font-size: 10pt">
+command:
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>, y/\\n/ x/[A-Za-z_][A-Za-z_0-9]*/ g/n/ v/../ c/num/</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">(the second
+</span><span style="font-size: 10pt"><tt>\</tt></span><span style="font-size: 10pt">
+is necessary because of lexical conventions in regular expressions),
+or we could even reject character constants and strings outright:
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>,y/&rsquo;[^&rsquo;]*&rsquo;/ y/"[^"]*"/ x/[A-Za-z_][A-Za-z_0-9]*/ g/n/ v/../ c/num/</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The
+</span><span style="font-size: 10pt"><tt>y</tt></span><span style="font-size: 10pt">
+commands in this version exclude from consideration all character constants
+and strings.
+The only remaining problem is to deal with the possible occurrence of
+</span><span style="font-size: 10pt"><tt>\&rsquo;</tt></span><span style="font-size: 10pt">
+or
+</span><span style="font-size: 10pt"><tt>\"</tt></span><span style="font-size: 10pt">
+within these sequences, but it&rsquo;s easy to see how to resolve this difficulty.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The point of these composed commands is successive refinement.
+A simple version of the command is tried, and if it&rsquo;s not good enough,
+it can be honed by adding a clause or two.
+(Mistakes can be undone; see below.
+Also, the mouse language makes it unnecessary to retype the command each time.)
+The resulting chains of commands are somewhat reminiscent of
+shell pipelines.<sup></sup></span><sup><span style="font-size: 6pt">7</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt">
+Unlike pipelines, though, which pass along modified
+</span><span style="font-size: 10pt"><i>data</i></span><span style="font-size: 10pt">,
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+commands pass a
+</span><span style="font-size: 10pt"><i>view</i></span><span style="font-size: 10pt">
+of the data.
+The text at each step of the command is the same, but which pieces
+are selected is refined step by step until the correct piece is
+available to the final step of the command line, which ultimately makes the change.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">In other UNIX programs, regular expressions are used only for selection,
+as in the
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+</span><span style="font-size: 10pt"><tt>g</tt></span><span style="font-size: 10pt">
+command, never for extraction as in the
+</span><span style="font-size: 10pt"><tt>x</tt></span><span style="font-size: 10pt">
+or
+</span><span style="font-size: 10pt"><tt>y</tt></span><span style="font-size: 10pt">
+command.
+For example, patterns in
+</span><span style="font-size: 10pt"><tt>awk</tt></span><span style="font-size: 10pt"><sup></sup></span><sup><span style="font-size: 6pt">7</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt">
+are used to select lines to be operated on, but cannot be used
+to describe the format of the input text, or to handle newline-free text.
+The use of regular expressions to describe the structure of a piece
+of text rather than its contents, as in the
+</span><span style="font-size: 10pt"><tt>x</tt></span><span style="font-size: 10pt">
+command, 
+has been given a name:
+</span><span style="font-size: 10pt"><i>structural regular expressions.
+</i></span><span style="font-size: 10pt">When they are composed, as in the above example,
+they are pleasantly expressive.
+Their use is discussed at greater length elsewhere.<sup></sup></span><sup><span style="font-size: 6pt">10</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt">
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"><b>Multiple files
+</b></span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"></span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt">
+has a few other commands, mostly relating to input and output.
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>e discfilename</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">replaces the contents and name of the current file with those of the named
+disc file;
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>w discfilename</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">writes the contents to the named disc file; and
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>r discfilename</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">replaces dot with the contents of the named disc file.
+All these commands use the current file&rsquo;s name if none is specified.
+Finally,
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>f discfilename</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">changes the name associated with the file and displays the result:
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>&rsquo;-. discfilename</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">This output is called the file&rsquo;s
+</span><span style="font-size: 10pt"><i>menu line,
+</i></span><span style="font-size: 10pt">because it is the contents of the file&rsquo;s line in the button 3 menu (described
+in the
+next section).
+The first three characters are a concise notation for the state of the file.
+The apostrophe signifies that the file is modified.
+The minus sign indicates the number of windows
+open on the file (see the next section):
+</span><span style="font-size: 10pt"><tt>-</tt></span><span style="font-size: 10pt">
+means none,
+</span><span style="font-size: 10pt"><tt>+</tt></span><span style="font-size: 10pt">
+means one, and
+</span><span style="font-size: 10pt"><tt>*</tt></span><span style="font-size: 10pt">
+means more than one.
+Finally, the period indicates that this is the current file.
+These characters are useful for controlling the
+</span><span style="font-size: 10pt"><tt>X</tt></span><span style="font-size: 10pt">
+command, described shortly.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"></span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt">
+may be started with a set of disc files (such as all the source for
+a program) by invoking it with a list of file names as arguments, and
+more may be added or deleted on demand.
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>B discfile1 discfile2 ...</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">adds the named files to
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">&rsquo;s
+list, and
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>D discfile1 discfile2 ...</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">removes them from
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">&rsquo;s
+memory (without effect on associated disc files).
+Both these commands have a syntax for using the shell<sup></sup></span><sup><span style="font-size: 6pt">7</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt">
+(the UNIX command interpreter) to generate the lists:
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>B &lt;echo *.c</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">will add all C source files, and
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>B &lt;grep -l variable *.c</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">will add all C source files referencing a particular variable
+(the UNIX command
+</span><span style="font-size: 10pt"><tt>grep\fP-l
+lists all files in its arguments that contain matches of
+the specified regular expression).
+Finally,
+</tt></span><span style="font-size: 10pt"><tt>D</tt></span><span style="font-size: 10pt"><tt>
+without arguments deletes the current file.
+</tt></span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">There are two ways to change which file is current:
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>b filename</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">makes the named file current.
+The
+</span><span style="font-size: 10pt"><tt>B</tt></span><span style="font-size: 10pt">
+command
+does the same, but also adds any new files to
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">&rsquo;s
+list.
+(In practice, of course, the current file
+is usually chosen by mouse actions, not by textual commands.)
+The other way is to use a form of address that refers to files:
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>"</tt></span><span style="font-size: 9pt"><i>expression</i></span><span style="font-size: 9pt"><tt>" </tt></span><span style="font-size: 9pt"><i>address</i></span><span style="font-size: 9pt"><tt></tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">refers to the address evaluated in the file whose menu line
+matches the expression (there must be exactly one match).
+For example,
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>"peter.c" 3</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">refers to the third line of the file whose name matches
+</span><span style="font-size: 10pt"><tt>peter.c</tt></span><span style="font-size: 10pt">.
+This is most useful in the move
+(</span><span style="font-size: 10pt"><tt>m</tt></span><span style="font-size: 10pt">)
+and copy
+(</span><span style="font-size: 10pt"><tt>t</tt></span><span style="font-size: 10pt">)
+commands:
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>0,$ t "peter.c" 0</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">makes a copy of the current file at the beginning of
+</span><span style="font-size: 10pt"><tt>peter.c</tt></span><span style="font-size: 10pt">.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The
+</span><span style="font-size: 10pt"><tt>X</tt></span><span style="font-size: 10pt">
+command
+is a looping construct, like
+</span><span style="font-size: 10pt"><tt>x</tt></span><span style="font-size: 10pt">,
+that refers to files instead of strings:
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>X/</tt></span><span style="font-size: 9pt"><i>expression</i></span><span style="font-size: 9pt"><tt>/ </tt></span><span style="font-size: 9pt"><i>command</i></span><span style="font-size: 9pt"><tt></tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">runs the command in all
+files whose menu lines match the expression.  The best example is
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>X/&rsquo;/ w</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">which writes to disc all modified files.
+</span><span style="font-size: 10pt"><tt>Y</tt></span><span style="font-size: 10pt">
+is the complement of
+</span><span style="font-size: 10pt"><tt>X</tt></span><span style="font-size: 10pt">:
+it runs the command on all files whose menu lines don&rsquo;t match the expression:
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>Y/\.c/ D</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">deletes all files that don&rsquo;t have
+</span><span style="font-size: 10pt"><tt>.c</tt></span><span style="font-size: 10pt">
+in their names, that is, it keeps all C source files and deletes the rest.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Braces allow commands to be grouped, so
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>{</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>    </tt></span><span style="font-size: 9pt"><i>command1</i></span><span style="font-size: 9pt"><tt></tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>    </tt></span><span style="font-size: 9pt"><i>command2</i></span><span style="font-size: 9pt"><tt></tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>}</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">is syntactically a single command that runs two commands.
+Thus,
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>X/\.c/ ,g/variable/ {</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>    f</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>    , x/.*\n/ g/variable/ p</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>}</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">finds all occurrences of
+</span><span style="font-size: 10pt"><tt>variable</tt></span><span style="font-size: 10pt">
+in C source files, and prints
+out the file names and lines of each match.
+The precise semantics of compound operations is discussed in the implementation
+sections below.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Finally,
+the undo command,
+</span><span style="font-size: 10pt"><tt>u</tt></span><span style="font-size: 10pt">,
+undoes the last command,
+no matter how many files were affected.
+Multiple undo operations move further back in time, so
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>u</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>u</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">(which may be abbreviated
+</span><span style="font-size: 10pt"><tt>u2</tt></span><span style="font-size: 10pt">)
+undoes the last two commands.  An undo may not be undone, however, nor
+may any command that adds or deletes files.
+Everything else is undoable, though, including for example
+</span><span style="font-size: 10pt"><tt>e</tt></span><span style="font-size: 10pt">
+commands:
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>e filename</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>u</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">restores the state of the file completely, including its name, dot,
+and modified bit.  Because of the undo, potentially dangerous commands
+are not guarded by confirmations.  Only
+</span><span style="font-size: 10pt"><tt>D</tt></span><span style="font-size: 10pt">,
+which destroys the information necessary to restore itself, is protected.
+It will not delete a modified file, but a second
+</span><span style="font-size: 10pt"><tt>D</tt></span><span style="font-size: 10pt">
+of the same file will succeed regardless.
+The
+</span><span style="font-size: 10pt"><tt>q</tt></span><span style="font-size: 10pt">
+command, which exits
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">,
+is similarly guarded.
+</span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"><b>Mouse Interface
+</b></span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"></span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt">
+is most commonly run
+connected to a bitmap display and mouse for interactive editing.
+The only difference in the command language
+between regular, mouse-driven
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+and
+</span><span style="font-size: 10pt"><tt>sam\fP-d
+is that if an address
+is provided without a command,
+</tt></span><span style="font-size: 10pt"><tt>sam\fP-d
+will print the text referenced by the address, but
+regular
+</tt></span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"><tt>
+will highlight it on the screen &mdash; in fact,
+dot is always highlighted (see Figure 2).
+</tt></span><span style="font-size: 10pt"></span></p><center><img src="fig3.gif" /></center>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 8pt"><i>Figure 2. A
+</i></span><span style="font-size: 8pt"><tt>sam</tt></span><span style="font-size: 8pt"><i>
+window.  The scroll bar down the left
+represents the file, with the bubble showing the fraction
+visible in the window.
+The scroll bar may be manipulated by the mouse for convenient browsing.
+The current text,
+which is highlighted, need not fit on a line.  Here it consists of one partial
+line, one complete line, and final partial line.
+</i></span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<p style="margin-top: 0; margin-bottom: 0.02in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Each file may have zero or more windows open on the display.
+At any time, only one window in all of
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+is the
+</span><span style="font-size: 10pt"><i>current window,
+</i></span><span style="font-size: 10pt">that is, the window to which typing and mouse actions refer;
+this may be the
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+window (that in which commands may be typed)
+or one of the file windows.
+When a file has multiple windows, the image of the file in each window
+is always kept up to date.
+The current file is the last file affected by a command,
+so if the
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+window is current,
+the current window is not a window on the current file.
+However, each window on a file has its own value of dot,
+and when switching between windows on a single file,
+the file&rsquo;s value of dot is changed to that of the window.
+Thus, flipping between windows behaves in the obvious, convenient way.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The mouse on the Blit has three buttons, numbered left to right.
+Button 3 has a list of commands to manipulate windows,
+followed by a list of &lsquo;menu lines&rsquo; exactly as printed by the
+</span><span style="font-size: 10pt"><tt>f</tt></span><span style="font-size: 10pt">
+command, one per file (not one per window).
+These menu lines are sorted by file name.
+If the list is long, the Blit menu software will make it more manageable
+by generating a scrolling menu instead of an unwieldy long list.
+Using the menu to select a file from the list makes that file the current
+file, and the most recently current window in that file the current window.
+But if that file is already current, selecting it in the menu cycles through
+the windows on the file; this simple trick avoids a special menu to
+choose windows on a file.
+If there is no window open on the file,
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+changes the mouse cursor to prompt the user to create one.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The commands on the button 3 menu are straightforward (see Figure 3), and
+are like the commands to manipulate windows in
+</span><span style="font-size: 10pt"><tt>mux</tt></span><span style="font-size: 10pt">,<sup></sup></span><sup><span style="font-size: 6pt">8</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt">
+the Blit&rsquo;s window system.
+</span><span style="font-size: 10pt"><tt>New</tt></span><span style="font-size: 10pt">
+makes a new file, and gives it one empty window, whose size is determined
+by a rectangle swept by the mouse.
+</span><span style="font-size: 10pt"><tt>Zerox</tt></span><span style="font-size: 10pt">
+prompts for a window to be selected, and
+makes a clone of that window; this is how multiple windows are created on one file.
+</span><span style="font-size: 10pt"><tt>Reshape</tt></span><span style="font-size: 10pt">
+changes the size of the indicated window, and
+</span><span style="font-size: 10pt"><tt>close</tt></span><span style="font-size: 10pt">
+deletes it.  If that is the last window open on the file,
+</span><span style="font-size: 10pt"><tt>close</tt></span><span style="font-size: 10pt">
+first does a
+</span><span style="font-size: 10pt"><tt>D</tt></span><span style="font-size: 10pt">
+command on the file.
+</span><span style="font-size: 10pt"><tt>Write</tt></span><span style="font-size: 10pt">
+is identical to a
+</span><span style="font-size: 10pt"><tt>w</tt></span><span style="font-size: 10pt">
+command on the file; it is in the menu purely for convenience.
+Finally,
+</span><span style="font-size: 10pt"><tt>~~sam~~</tt></span><span style="font-size: 10pt">
+is a menu item that appears between the commands and the file names.
+Selecting it makes the
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+window the current window,
+causing subsequent typing to be interpreted as commands.
+</span><span style="font-size: 10pt"></span></p><center><img src="fig2.gif" /></center>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 8pt"><i>Figure 3. The menu on button 3.
+The black rectangle on the left is a scroll bar; the menu is limited to
+the length shown to prevent its becoming unwieldy.
+Above the
+</i></span><span style="font-size: 8pt"><tt>~~sam~~</tt></span><span style="font-size: 8pt"><i>
+line is a list of commands;
+beneath it is a list of files, presented exactly as with the
+</i></span><span style="font-size: 8pt"><tt>f</tt></span><span style="font-size: 8pt"><i>
+command.
+</i></span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<p style="margin-top: 0; margin-bottom: 0.02in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">When
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+requests that a window be swept, in response to
+</span><span style="font-size: 10pt"><tt>new</tt></span><span style="font-size: 10pt">,
+</span><span style="font-size: 10pt"><tt>zerox</tt></span><span style="font-size: 10pt">
+or
+</span><span style="font-size: 10pt"><tt>reshape</tt></span><span style="font-size: 10pt">,
+it changes the mouse cursor from the usual arrow to a box with
+a small arrow.
+In this state, the mouse may be used to indicate an arbitrary rectangle by
+pressing button 3 at one corner and releasing it at the opposite corner.
+More conveniently,
+button 3 may simply be clicked,
+whereupon
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+creates the maximal rectangle that contains the cursor
+and abuts the
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+window.
+By placing the
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+window in the middle of the screen, the user can define two regions (one above,
+one below) in which stacked fully-overlapping
+windows can be created with minimal fuss (see Figure 1).
+This simple user interface trick makes window creation noticeably easier.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The cut-and-paste editor is essentially the same as that in Smalltalk-80.<sup></sup></span><sup><span style="font-size: 6pt">11</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt">
+The text in dot is always highlighted on the screen.
+When a character is typed it replaces dot, and sets dot to the null
+string after the character.  Thus, ordinary typing inserts text.
+Button 1 is used for selection:
+pressing the button, moving the mouse, and lifting the button
+selects (sets dot to) the text between the points where the
+button was pressed and released.
+Pressing and releasing at the same point selects a null string; this
+is called clicking.  Clicking twice quickly, or
+</span><span style="font-size: 10pt"><i>double clicking,
+</i></span><span style="font-size: 10pt">selects larger objects;
+for example, double clicking in a word selects the word,
+double clicking just inside an opening bracket selects the text
+contained in the brackets (handling nested brackets correctly),
+and similarly for
+parentheses, quotes, and so on.
+The double-clicking rules reflect a bias toward
+programmers.
+If
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+were intended more for word processing, double-clicks would probably
+select linguistic structures such as sentences.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">If button 1 is pressed outside the current window, it makes the indicated
+window current.
+This is the easiest way to switch between windows and files.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Pressing button 2 brings up a menu of editing functions (see Figure 4).
+These mostly apply to the selected text:
+</span><span style="font-size: 10pt"><tt>cut</tt></span><span style="font-size: 10pt">
+deletes the selected text, and remembers it in a hidden buffer called the
+</span><span style="font-size: 10pt"><i>snarf buffer,
+</i></span><span style="font-size: 10pt"></span><span style="font-size: 10pt"><tt>paste</tt></span><span style="font-size: 10pt">
+replaces the selected text by the contents of the snarf buffer,
+</span><span style="font-size: 10pt"><tt>snarf</tt></span><span style="font-size: 10pt">
+just copies the selected text to the snarf buffer,
+</span><span style="font-size: 10pt"><tt>look</tt></span><span style="font-size: 10pt">
+searches forward for the next literal occurrence of the selected text, and
+</span><span style="font-size: 10pt"><tt>&lt;mux&gt;</tt></span><span style="font-size: 10pt">
+exchanges snarf buffers with the window system in which
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+is running.
+Finally, the last regular expression used appears as a menu entry
+to search
+forward for the next occurrence of a match for the expression.
+</span><span style="font-size: 10pt"></span></p><center><img src="fig4.gif" /></center>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 8pt"><i>Figure 4. The menu on button 2.
+The bottom entry tracks the most recently used regular expression, which may
+be literal text.
+</i></span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<p style="margin-top: 0; margin-bottom: 0.02in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The relationship between the command language and the mouse language is
+entirely due to the equality of dot and the selected text chosen
+with button 1 on the mouse.
+For example, to make a set of changes in a C subroutine, dot can be
+set by double clicking on the left brace that begins the subroutine,
+which sets dot for the command language.
+An address-free command then typed in the
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+window will apply only to the text between the opening and closing
+braces of the function.
+The idea is to select what you want, and then say what you want
+to do with it, whether invoked by a menu selection or by a typed command.
+And of course, the value of dot is highlighted on
+the display after the command completes.
+This relationship between mouse interface and command language
+is clumsy to explain, but comfortable, even natural, in practice.
+</span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"><b>The Implementation
+</b></span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The next few sections describe how
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+is put together, first the host part,
+then the inter-component communication,
+then the terminal part.
+After explaining how the command language is implemented,
+the discussion follows (roughly) the path of a character
+from the temporary file on disc to the screen.
+The presentation centers on the data structures,
+because that is how the program was designed and because
+the algorithms are easy to provide, given the right data
+structures.
+</span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"><b>Parsing and execution
+</b></span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The command language is interpreted by parsing each command with a
+table-driven recursive
+descent parser, and when a complete command is assembled, invoking a top-down
+executor.
+Most editors instead employ a simple character-at-a-time
+lexical scanner.
+Use of a parser makes it
+easy and unambiguous to detect when a command is complete,
+which has two advantages.
+First, escape conventions such as backslashes to quote
+multiple-line commands are unnecessary;  if the command isn&rsquo;t finished,
+the parser keeps reading.  For example, a multiple-line append driven by an
+</span><span style="font-size: 10pt"><tt>x</tt></span><span style="font-size: 10pt">
+command is straightforward:
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>x/.*\n/ g/Peter/ a</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>one line about Peter</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>another line about Peter</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>.</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Other UNIX editors would require a backslash after all but the last line.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The other advantage is specific to the two-process structure of
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">.
+The host process must decide when a command is completed so the
+command interpreter can be called.  This problem is easily resolved
+by having the lexical analyzer read the single stream of events from the
+terminal, directly executing all typing and mouse commands,
+but passing to the parser characters typed to the
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+command window.
+This scheme is slightly complicated by the availability of cut-and-paste
+editing in the
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+window, but that difficulty is resolved by applying the rules
+used in
+</span><span style="font-size: 10pt"><tt>mux</tt></span><span style="font-size: 10pt">:
+when a newline is typed to the
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+window, all text between the newline and the previously typed newline
+is made available to the parser.
+This permits arbitrary editing to be done to a command before
+typing newline and thereby requesting execution.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The parser is driven by a table because the syntax of addresses
+and commands is regular enough
+to be encoded compactly.  There are few special cases, such as the
+replacement text in a substitution, so the syntax of almost all commands
+can be encoded with a few flags.
+These include whether the command allows an address (for example,
+</span><span style="font-size: 10pt"><tt>e</tt></span><span style="font-size: 10pt">
+does not), whether it takes a regular expression (as in
+</span><span style="font-size: 10pt"><tt>x</tt></span><span style="font-size: 10pt">
+and
+</span><span style="font-size: 10pt"><tt>s</tt></span><span style="font-size: 10pt">),
+whether it takes replacement text (as in
+</span><span style="font-size: 10pt"><tt>c</tt></span><span style="font-size: 10pt">
+or
+</span><span style="font-size: 10pt"><tt>i</tt></span><span style="font-size: 10pt">),
+which may be multi-line, and so on.
+The internal syntax of regular expressions is handled by a separate
+parser; a regular expression is a leaf of the command parse tree.
+Regular expressions are discussed fully in the next section.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The parser table also has information about defaults, so the interpreter
+is always called with a complete tree.  For example, the parser fills in
+the implicit
+</span><span style="font-size: 10pt"><tt>0</tt></span><span style="font-size: 10pt">
+and
+</span><span style="font-size: 10pt"><tt>$</tt></span><span style="font-size: 10pt">
+in the abbreviated address
+</span><span style="font-size: 10pt"><tt>,</tt></span><span style="font-size: 10pt">
+(comma),
+inserts a
+</span><span style="font-size: 10pt"><tt>+</tt></span><span style="font-size: 10pt">
+to the left of an unadorned regular expression in an address,
+and provides the usual default address
+</span><span style="font-size: 10pt"><tt>.</tt></span><span style="font-size: 10pt">
+(dot) for commands that expect an address but are not given one.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Once a complete command is parsed, the evaluation is easy.
+The address is evaluated left-to-right starting from the value of dot,
+with a mostly ordinary expression evaluator.
+Addresses, like many of the data structures in
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">,
+are held in a C structure and passed around by value:
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>typedef long Posn;    /* Position in a file */</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>typedef struct Range{</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>        Posn    p1, p2;</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>}Range;</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>typedef struct Address{</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>        Range   r;</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>        File    *f;</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>}Address;</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">An address is encoded as a substring (character positions
+</span><span style="font-size: 10pt"><tt>p1</tt></span><span style="font-size: 10pt">
+to
+</span><span style="font-size: 10pt"><tt>p2</tt></span><span style="font-size: 10pt">)
+in a file
+</span><span style="font-size: 10pt"><tt>f</tt></span><span style="font-size: 10pt">.
+(The data type
+</span><span style="font-size: 10pt"><tt>File</tt></span><span style="font-size: 10pt">
+is described in detail below.)
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The address interpreter is an
+</span><span style="font-size: 10pt"><tt>Address</tt></span><span style="font-size: 10pt">-valued
+function that traverses the parse tree describing an address (the
+parse tree for the address has type
+</span><span style="font-size: 10pt"><tt>Addrtree</tt></span><span style="font-size: 10pt">):
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>Address</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>address(ap, a, sign)</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>    Addrtree *ap;</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>    Address a;</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>    int sign;</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>{</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>    Address a2;</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>    do</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>        switch(ap-&gt;type){</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>        case &rsquo;.&rsquo;:</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>            a=a.f-&gt;dot;</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>            break;</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>        case &rsquo;$&rsquo;:</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>            a.r.p1=a.r.p2=a.f-&gt;nbytes;</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>            break;</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>        case &rsquo;"&rsquo;:   </tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>            a=matchfile(a, ap-&gt;aregexp)-&gt;dot; </tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>            break;</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>        case &rsquo;,&rsquo;:</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>            a2=address(ap-&gt;right, a, 0);</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>            a=address(ap-&gt;left, a, 0);</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>            if(a.f!=a2.f || a2.r.p2&lt;a.r.p1)</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>                error(Eorder);</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>            a.r.p2=a2.r.p2;</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>            return a;</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>        /* and so on */</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>        }</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>    while((ap=ap-&gt;right)!=0);</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>    return a;</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>}</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Throughout, errors are handled by a non-local
+</span><span style="font-size: 10pt"><tt>goto</tt></span><span style="font-size: 10pt">
+(a
+</span><span style="font-size: 10pt"><tt>setjmp/longjmp</tt></span><span style="font-size: 10pt">
+in C terminology)
+hidden in a routine called
+</span><span style="font-size: 10pt"><tt>error</tt></span><span style="font-size: 10pt">
+that immediately aborts the execution, retracts any
+partially made changes (see the section below on &lsquo;undoing&rsquo;), and
+returns to the top level of the parser.
+The argument to
+</span><span style="font-size: 10pt"><tt>error</tt></span><span style="font-size: 10pt">
+is an enumeration type that
+is translated to a terse but possibly helpful
+message such as &lsquo;?addresses out of order.&rsquo;
+Very common messages are kept short; for example the message for
+a failed regular expression search is &lsquo;?search.&rsquo;
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Character addresses such as
+</span><span style="font-size: 10pt"><tt>#3</tt></span><span style="font-size: 10pt">
+are trivial to implement, as the
+</span><span style="font-size: 10pt"><tt>File</tt></span><span style="font-size: 10pt">
+data structure is accessible by character number.
+However,
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+keeps no information about the position of newlines &mdash; it is too
+expensive to track dynamically &mdash; so line addresses are computed by reading
+the file, counting newlines.  Except in very large files, this has proven
+acceptable: file access is fast enough to make the technique practical,
+and lines are not central to the structure of the command language.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The command interpreter, called
+</span><span style="font-size: 10pt"><tt>cmdexec</tt></span><span style="font-size: 10pt">,
+is also straightforward.  The parse table includes a
+function to call to interpret a particular command.  That function
+receives as arguments
+the calculated address
+for the command
+and the command tree (of type
+</span><span style="font-size: 10pt"><tt>Cmdtree</tt></span><span style="font-size: 10pt">),
+which may contain information such as the subtree for compound commands.
+Here, for example, is the function for the
+</span><span style="font-size: 10pt"><tt>g</tt></span><span style="font-size: 10pt">
+and
+</span><span style="font-size: 10pt"><tt>v</tt></span><span style="font-size: 10pt">
+commands:
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>int</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>g_cmd(a, cp)</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>    Address a;</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>    Cmdtree *cp;</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>{</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>    compile(cp-&gt;regexp);</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>    if(execute(a.f, a.r.p1, a.r.p2)!=(cp-&gt;cmdchar==&rsquo;v&rsquo;)){</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>        a.f-&gt;dot=a;</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>        return cmdexec(a, cp-&gt;subcmd);</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>    }</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>    return TRUE;    /* cause execution to continue */</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>}</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">(</span><span style="font-size: 10pt"><tt>Compile</tt></span><span style="font-size: 10pt">
+and
+</span><span style="font-size: 10pt"><tt>execute</tt></span><span style="font-size: 10pt">
+are part of the regular expression code, described in the next section.)
+Because the parser and the
+</span><span style="font-size: 10pt"><tt>File</tt></span><span style="font-size: 10pt">
+data structure do most of the work, most commands
+are similarly brief.
+</span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"><b>Regular expressions
+</b></span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The regular expression code in
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+is an interpreted, rather than compiled on-the-fly, implementation of Thompson&rsquo;s
+non-deterministic finite automaton algorithm.<sup></sup></span><sup><span style="font-size: 6pt">12</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt">
+The syntax and semantics of the expressions are as in the UNIX program
+</span><span style="font-size: 10pt"><tt>egrep</tt></span><span style="font-size: 10pt">,
+including alternation, closures, character classes, and so on.
+The only changes in the notation are two additions:
+</span><span style="font-size: 10pt"><tt>\n</tt></span><span style="font-size: 10pt">
+is translated to, and matches, a newline character, and
+</span><span style="font-size: 10pt"><tt>@</tt></span><span style="font-size: 10pt">
+matches any character.  In
+</span><span style="font-size: 10pt"><tt>egrep</tt></span><span style="font-size: 10pt">,
+the character
+</span><span style="font-size: 10pt"><tt>.</tt></span><span style="font-size: 10pt">
+matches any character except newline, and in
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+the same rule seemed safest, to prevent idioms like
+</span><span style="font-size: 10pt"><tt>.*</tt></span><span style="font-size: 10pt">
+from spanning newlines.
+</span><span style="font-size: 10pt"><tt>Egrep</tt></span><span style="font-size: 10pt">
+expressions are arguably too complicated for an interactive editor &mdash;
+certainly it would make sense if all the special characters were two-character
+sequences, so that most of the punctuation characters wouldn&rsquo;t have
+peculiar meanings &mdash; but for an interesting command language, full
+regular expressions are necessary, and
+</span><span style="font-size: 10pt"><tt>egrep</tt></span><span style="font-size: 10pt">
+defines the full regular expression syntax for UNIX programs.
+Also, it seemed superfluous to define a new syntax, since various UNIX programs
+(</span><span style="font-size: 10pt"><tt>ed</tt></span><span style="font-size: 10pt">,
+</span><span style="font-size: 10pt"><tt>egrep</tt></span><span style="font-size: 10pt">
+and
+</span><span style="font-size: 10pt"><tt>vi</tt></span><span style="font-size: 10pt">)
+define too many already.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The expressions are compiled by a routine,
+</span><span style="font-size: 10pt"><tt>compile</tt></span><span style="font-size: 10pt">,
+that generates the description of the non-deterministic finite state machine.
+A second routine,
+</span><span style="font-size: 10pt"><tt>execute</tt></span><span style="font-size: 10pt">,
+interprets the machine to generate the leftmost-longest match of the
+expression in a substring of the file.
+The algorithm is described elsewhere.<sup></sup></span><sup><span style="font-size: 6pt">12,13</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt">
+</span><span style="font-size: 10pt"><tt>Execute</tt></span><span style="font-size: 10pt">
+reports
+whether a match was found, and sets a global variable,
+of type
+</span><span style="font-size: 10pt"><tt>Range</tt></span><span style="font-size: 10pt">,
+to the substring matched.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">A trick is required to evaluate the expression in reverse, such as when
+searching backwards for an expression.
+For example,
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>-/P.*r/</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">looks backwards through the file for a match of the expression.
+The expression, however, is defined for a forward search.
+The solution is to construct a machine identical to the machine
+for a forward search except for a reversal of all the concatenation
+operators (the other operators are symmetric under direction reversal),
+to exchange the meaning of the operators
+</span><span style="font-size: 10pt"><tt>^</tt></span><span style="font-size: 10pt">
+and
+</span><span style="font-size: 10pt"><tt>$</tt></span><span style="font-size: 10pt">,
+and then to read the file backwards, looking for the
+usual earliest longest match.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"></span><span style="font-size: 10pt"><tt>Execute</tt></span><span style="font-size: 10pt">
+generates only one match each time it is called.
+To interpret looping constructs such as the
+</span><span style="font-size: 10pt"><tt>x</tt></span><span style="font-size: 10pt">
+command,
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+must therefore synchronize between
+calls of
+</span><span style="font-size: 10pt"><tt>execute</tt></span><span style="font-size: 10pt">
+to avoid
+problems with null matches.
+For example, even given the leftmost-longest rule,
+the expression
+</span><span style="font-size: 10pt"><tt>a*</tt></span><span style="font-size: 10pt">
+matches three times in the string
+</span><span style="font-size: 10pt"><tt>ab</tt></span><span style="font-size: 10pt">
+(the character
+</span><span style="font-size: 10pt"><tt>a</tt></span><span style="font-size: 10pt">,
+the null string between the
+</span><span style="font-size: 10pt"><tt>a</tt></span><span style="font-size: 10pt">
+and
+</span><span style="font-size: 10pt"><tt>b</tt></span><span style="font-size: 10pt">,
+and the final null string).
+After returning a match for the
+</span><span style="font-size: 10pt"><tt>a</tt></span><span style="font-size: 10pt">,
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+must not match the null string before the
+</span><span style="font-size: 10pt"><tt>b</tt></span><span style="font-size: 10pt">.
+The algorithm starts
+</span><span style="font-size: 10pt"><tt>execute</tt></span><span style="font-size: 10pt">
+at the end of its previous match, and
+if the match it returns
+is null and abuts the previous match, rejects the match and advances
+the initial position one character.
+</span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"><b>Memory allocation
+</b></span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The C language has no memory allocation primitives, although a standard
+library routine,
+</span><span style="font-size: 10pt"><tt>malloc</tt></span><span style="font-size: 10pt">,
+provides adequate service for simple programs.
+For specific uses, however,
+it can be better to write a custom allocator.
+The allocator (or rather, pair of allocators) described here
+work in both the terminal and host parts of
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">.
+They are designed for efficient manipulation of strings,
+which are allocated and freed frequently and vary in length from essentially
+zero to 32 Kbytes (very large strings are written to disc).
+More important, strings may be large and change size often,
+so to minimize memory usage it is helpful to reclaim and to coalesce the
+unused portions of strings when they are truncated.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Objects to be allocated in
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+are of two flavors:
+the first is C
+</span><span style="font-size: 10pt"><tt>structs</tt></span><span style="font-size: 10pt">,
+which are small and often addressed by pointer variables;
+the second is variable-sized arrays of characters
+or integers whose
+base pointer is always used to access them.
+The memory allocator in
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+is therefore in two parts:
+first, a traditional first-fit allocator that provides fixed storage for
+</span><span style="font-size: 10pt"><tt>structs</tt></span><span style="font-size: 10pt">;
+and second, a garbage-compacting allocator that reduces storage
+overhead for variable-sized objects, at the cost of some bookkeeping.
+The two types of objects are allocated from adjoining arenas, with
+the garbage-compacting allocator controlling the arena with higher addresses.
+Separating into two arenas simplifies compaction and prevents fragmentation due
+to immovable objects.
+The access rules for garbage-compactable objects
+(discussed in the next paragraph) allow them to be relocated, so when
+the first-fit arena needs space, it moves the garbage-compacted arena
+to higher addresses to make room.  Storage is therefore created only
+at successively higher addresses, either when more garbage-compacted
+space is needed or when the first-fit arena pushes up the other arena.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Objects that may be compacted declare to the
+allocator a cell that is guaranteed to be the sole repository of the
+address of the object whenever a compaction can occur.
+The compactor can then update the address when the object is moved.
+For example, the implementation of type
+</span><span style="font-size: 10pt"><tt>List</tt></span><span style="font-size: 10pt">
+(really a variable-length array)
+is:
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>typedef struct List{</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>        int     nused;</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>        long    *ptr;</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>}List;</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The
+</span><span style="font-size: 10pt"><tt>ptr</tt></span><span style="font-size: 10pt">
+cell must always be used directly, and never copied.  When a
+</span><span style="font-size: 10pt"><tt>List</tt></span><span style="font-size: 10pt">
+is to be created the
+</span><span style="font-size: 10pt"><tt>List</tt></span><span style="font-size: 10pt">
+structure is allocated in the ordinary first-fit arena
+and its
+</span><span style="font-size: 10pt"><tt>ptr</tt></span><span style="font-size: 10pt">
+is allocated in the garbage-compacted arena.
+A similar data type for strings, called
+</span><span style="font-size: 10pt"><tt>String</tt></span><span style="font-size: 10pt">,
+stores variable-length character arrays of up to 32767 elements.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">A related matter of programming style:
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+frequently passes structures by value, which
+simplifies the code.
+Traditionally, C programs have
+passed structures by reference, but implicit allocation on
+the stack is easier to use.
+Structure passing is a relatively new feature of C
+(it is not in the 
+standard reference manual for C<sup></sup></span><sup><span style="font-size: 6pt">14</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt">), and is poorly supported in most
+commercial C compilers.
+It&rsquo;s convenient and expressive, though,
+and simplifies memory management by
+avoiding the allocator altogether
+and eliminating pointer aliases.
+</span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"><b>Data structures for manipulating files
+</b></span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Experience with
+</span><span style="font-size: 10pt"><tt>jim</tt></span><span style="font-size: 10pt">
+showed that the requirements
+of the file data structure were few, but strict.
+First, files need to be read and written quickly;
+adding a fresh file must be painless.
+Second, the implementation must place no arbitrary upper limit on
+the number or sizes of files.  (It should be practical to edit many files,
+and files up to megabytes in length should be handled gracefully.)
+This implies that files be stored on disc, not in main memory.
+(Aficionados of virtual memory may argue otherwise, but the
+implementation of virtual
+memory in our system is not something to depend on
+for good performance.)
+Third, changes to files need be made by only two primitives:
+deletion and insertion.
+These are inverses of each other,
+which simplifies the implementation of the undo operation.
+Finally,
+it must be easy and efficient to access the file, either
+forwards or backwards, a byte at a time.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The
+</span><span style="font-size: 10pt"><tt>File</tt></span><span style="font-size: 10pt">
+data type is constructed from three simpler data structures that hold arrays
+of characters.
+Each of these types has an insertion and deletion operator, and the
+insertion and deletion operators of the
+</span><span style="font-size: 10pt"><tt>File</tt></span><span style="font-size: 10pt">
+type itself are constructed from them.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The simplest type is the
+</span><span style="font-size: 10pt"><tt>String</tt></span><span style="font-size: 10pt">,
+which is used to hold strings in main memory.
+The code that manages
+</span><span style="font-size: 10pt"><tt>Strings</tt></span><span style="font-size: 10pt">
+guarantees that they will never be longer
+than some moderate size, and in practice they are rarely larger than 8 Kbytes.
+</span><span style="font-size: 10pt"><tt>Strings</tt></span><span style="font-size: 10pt">
+have two purposes: they hold short strings like file names with little overhead,
+and because they are deliberately small, they are efficient to modify.
+They are therefore used as the data structure for in-memory caches.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The disc copy of the file is managed by a data structure called a
+</span><span style="font-size: 10pt"><tt>Disc</tt></span><span style="font-size: 10pt">,
+which corresponds to a temporary file.  A
+</span><span style="font-size: 10pt"><tt>Disc</tt></span><span style="font-size: 10pt">
+has no storage in main memory other than bookkeeping information;
+the actual data being held is all on the disc.
+To reduce the number of open files needed,
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+opens a dozen temporary UNIX files and multiplexes the
+</span><span style="font-size: 10pt"><tt>Discs</tt></span><span style="font-size: 10pt">
+upon them.
+This permits many files to
+be edited; the entire
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+source (48 files) may be edited comfortably with a single
+instance of
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">.
+Allocating one temporary file per
+</span><span style="font-size: 10pt"><tt>Disc</tt></span><span style="font-size: 10pt">
+would strain the operating system&rsquo;s limit on the number of open files.
+Also, spreading the traffic among temporary files keeps the files shorter,
+and shorter files are more efficiently implemented by the UNIX
+I/O subsystem.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">A
+</span><span style="font-size: 10pt"><tt>Disc</tt></span><span style="font-size: 10pt">
+is an array of fixed-length blocks, each of which contains
+between 1 and 4096 characters of active data.
+(The block size of our UNIX file system is 4096 bytes.)
+The block addresses within the temporary file and the length of each
+block are stored in a
+</span><span style="font-size: 10pt"><tt>List</tt></span><span style="font-size: 10pt">.
+When changes are made the live part of blocks may change size.
+Blocks are created and coalesced when necessary to try to keep the sizes
+between 2048 and 4096 bytes.
+An actively changing part of the
+</span><span style="font-size: 10pt"><tt>Disc</tt></span><span style="font-size: 10pt">
+therefore typically has about a kilobyte of slop that can be
+inserted or deleted
+without changing more than one block or affecting the block order.
+When an insertion would overflow a block, the block is split, a new one
+is allocated to receive the overflow, and the memory-resident list of blocks
+is rearranged to reflect the insertion of the new block.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Obviously, going to the disc for every modification to the file is
+prohibitively expensive.
+The data type
+</span><span style="font-size: 10pt"><tt>Buffer</tt></span><span style="font-size: 10pt">
+consists of a
+</span><span style="font-size: 10pt"><tt>Disc</tt></span><span style="font-size: 10pt">
+to hold the data and a
+</span><span style="font-size: 10pt"><tt>String</tt></span><span style="font-size: 10pt">
+that acts as a cache.
+This is the first of a series of caches throughout the data structures in
+</span><span style="font-size: 10pt"><tt>sam.</tt></span><span style="font-size: 10pt">
+The caches not only improve performance, they provide a way to organize
+the flow of data, particularly in the communication between the host
+and terminal.
+This idea is developed below, in the section on communications.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">To reduce disc traffic, changes to a
+</span><span style="font-size: 10pt"><tt>Buffer</tt></span><span style="font-size: 10pt">
+are mediated by a variable-length string, in memory, that acts as a cache.
+When an insertion or deletion is made to a
+</span><span style="font-size: 10pt"><tt>Buffer</tt></span><span style="font-size: 10pt">,
+if the change can be accommodated by the cache, it is done there.
+If the cache becomes bigger than a block because of an insertion,
+some of it is written to the
+</span><span style="font-size: 10pt"><tt>Disc</tt></span><span style="font-size: 10pt">
+and deleted from the cache.
+If the change does not intersect the cache, the cache is flushed.
+The cache is only loaded at the new position if the change is smaller than a block;
+otherwise, it is sent directly to the
+</span><span style="font-size: 10pt"><tt>Disc</tt></span><span style="font-size: 10pt">.
+This is because
+large changes are typically sequential,
+whereupon the next change is unlikely to overlap the current one.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">A
+</span><span style="font-size: 10pt"><tt>File</tt></span><span style="font-size: 10pt">
+comprises a
+</span><span style="font-size: 10pt"><tt>String</tt></span><span style="font-size: 10pt">
+to hold the file name and some ancillary data such as dot and the modified bit.
+The most important components, though, are a pair of
+</span><span style="font-size: 10pt"><tt>Buffers</tt></span><span style="font-size: 10pt">,
+one called the transcript and the other the contents.
+Their use is described in the next section.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The overall structure is shown in Figure 5.
+Although it may seem that the data is touched many times on its
+way from the
+</span><span style="font-size: 10pt"><tt>Disc</tt></span><span style="font-size: 10pt">,
+it is read (by one UNIX system call) directly into the cache of the
+associated
+</span><span style="font-size: 10pt"><tt>Buffer</tt></span><span style="font-size: 10pt">;
+no extra copy is done.
+Similarly, when flushing the cache, the text is written
+directly from the cache to disc.
+Most operations act directly on the text in the cache.
+A principle applied throughout
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+is that the fewer times the data is copied, the faster the program will run
+(see also the paper by Waite<sup></sup></span><sup><span style="font-size: 6pt">15</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt">).
+</span><span style="font-size: 10pt"></span></p><center><img src="sam2.png"></center>
+</center>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 8pt"><i>Figure 5. File data structures.
+The temporary files are stored in the standard repository for such files
+on the host system.
+</i></span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<p style="margin-top: 0; margin-bottom: 0.02in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The contents of a
+</span><span style="font-size: 10pt"><tt>File</tt></span><span style="font-size: 10pt">
+are accessed by a routine that
+copies to a buffer a substring of a file starting at a specified offset.
+To read a byte at a time, a
+per-</span><span style="font-size: 10pt"><tt>File</tt></span><span style="font-size: 10pt">
+array is loaded starting from a specified initial position,
+and bytes may then be read from the array.
+The implementation is done by a macro similar to the C standard I/O
+</span><span style="font-size: 10pt"><tt>getc</tt></span><span style="font-size: 10pt">
+macro.<sup></sup></span><sup><span style="font-size: 6pt">14</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt">
+Because the reading may be done at any address, a minor change to the
+macro allows the file to be read backwards.
+This array is read-only; there is no
+</span><span style="font-size: 10pt"><tt>putc</tt></span><span style="font-size: 10pt">.
+</span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"><b>Doing and undoing
+</b></span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"></span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt">
+has an unusual method for managing changes to files.
+The command language makes it easy to specify multiple variable-length changes
+to a file millions of bytes long, and such changes
+must be made efficiently if the editor is to be practical.
+The usual techniques for inserting and deleting strings
+are inadequate under these conditions.
+The
+</span><span style="font-size: 10pt"><tt>Buffer</tt></span><span style="font-size: 10pt">
+and
+</span><span style="font-size: 10pt"><tt>Disc</tt></span><span style="font-size: 10pt">
+data structures are designed for efficient random access to long strings,
+but care must be taken to avoid super-linear behavior when making
+many changes simultaneously.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"></span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt">
+uses a two-pass algorithm for making changes, and treats each file as a database
+against which transactions are registered.
+Changes are not made directly to the contents.
+Instead, when a command is started, a &lsquo;mark&rsquo; containing
+a sequence number is placed in the transcript
+</span><span style="font-size: 10pt"><tt>Buffer</tt></span><span style="font-size: 10pt">,
+and each change made to the file, either an insertion or deletion
+or a change to the file name,
+is appended to the end of the transcript.
+When the command is complete, the transcript is rewound to the
+mark and applied to the contents.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">One reason for separating evaluation from
+application in this way is to simplify tracking the addresses of changes
+made in the middle of a long sequence.
+The two-pass algorithm also allows all changes to apply to the
+</span><span style="font-size: 10pt"><i>original</i></span><span style="font-size: 10pt">
+data: no change can affect another change made in the same command.
+This is particularly important when evaluating an
+</span><span style="font-size: 10pt"><tt>x</tt></span><span style="font-size: 10pt">
+command because it prevents regular expression matches
+from stumbling over changes made earlier in the execution.
+Also, the two-pass
+algorithm is cleaner than the way other UNIX editors allow changes to
+affect each other;
+for example,
+</span><span style="font-size: 10pt"><tt>ed</tt></span><span style="font-size: 10pt">&rsquo;s
+idioms to do things like delete every other line
+depend critically on the implementation.
+Instead,
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">&rsquo;s
+simple model, in which all changes in a command occur effectively
+simultaneously, is easy to explain and to understand.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The records in the transcript are of the form &lsquo;&lsquo;delete substring from
+locations
+123 to 456&rsquo;&rsquo; and &lsquo;&lsquo;insert 11 characters &lsquo;hello there&rsquo; at location 789.&rsquo;&rsquo;
+(It is an error if the changes are not at monotonically greater
+positions through the file.)
+While the update is occurring, these numbers must be
+offset by earlier changes, but that is straightforward and
+local to the update routine;
+moreover, all the numbers have been computed
+before the first is examined.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Treating the file as a transaction system has another advantage:
+undo is trivial.
+All it takes is to invert the transcript after it has been
+implemented, converting insertions
+into deletions and vice versa, and saving them in a holding
+</span><span style="font-size: 10pt"><tt>Buffer</tt></span><span style="font-size: 10pt">.
+The &lsquo;do&rsquo; transcript can then be deleted from
+the transcript
+</span><span style="font-size: 10pt"><tt>Buffer</tt></span><span style="font-size: 10pt">
+and replaced by the &lsquo;undo&rsquo; transcript.
+If an undo is requested, the transcript is rewound and the undo transcript
+executed.
+Because the transcript
+</span><span style="font-size: 10pt"><tt>Buffer</tt></span><span style="font-size: 10pt">
+is not truncated after each command, it accumulates
+successive changes.
+A sequence of undo commands
+can therefore back up the file arbitrarily,
+which is more helpful than the more commonly implemented self-inverse form of undo.
+(</span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt">
+provides no way to undo an undo, but if it were desired,
+it would be easy to provide by re-interpreting the &lsquo;do&rsquo; transcript.)
+Each mark in the transcript contains a sequence number and the offset into
+the transcript of the previous mark, to aid in unwinding the transcript.
+Marks also contain the value of dot and the modified bit so these can be
+restored easily.
+Undoing multiple files is easy; it merely demands undoing all files whose
+latest change has the same sequence number as the current file.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Another benefit of having a transcript is that errors encountered in the middle
+of a complicated command need not leave the files in an intermediate state.
+By rewinding the transcript to the mark beginning the command,
+the partial command can be trivially undone.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">When the update algorithm was first implemented, it was unacceptably slow,
+so a cache was added to coalesce nearby changes,
+replacing multiple small changes by a single larger one.
+This reduced the number
+of insertions into the transaction
+</span><span style="font-size: 10pt"><tt>Buffer</tt></span><span style="font-size: 10pt">,
+and made a dramatic improvement in performance,
+but made it impossible
+to handle changes in non-monotonic order in the file; the caching method
+only works if changes don&rsquo;t overlap.
+Before the cache was added, the transaction could in principle be sorted
+if the changes were out of order, although
+this was never done.
+The current status is therefore acceptable performance with a minor
+restriction on global changes, which is sometimes, but rarely, an annoyance.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The update algorithm obviously paws the data more than simpler
+algorithms, but it is not prohibitively expensive;
+the caches help.
+(The principle of avoiding copying the data is still honored here,
+although not as piously:
+the data is moved from contents&rsquo; cache to
+the transcript&rsquo;s all at once and through only one internal buffer.)
+Performance figures confirm the efficiency.
+To read from a dead start a hundred kilobyte file on a VAX-11/750
+takes 1.4 seconds of user time, 2.5 seconds of system time,
+and 5 seconds of real time.
+Reading the same file in
+</span><span style="font-size: 10pt"><tt>ed</tt></span><span style="font-size: 10pt">
+takes 6.0 seconds of user time, 1.7 seconds of system time,
+and 8 seconds of real time.
+</span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt">
+uses about half the CPU time.
+A more interesting example is the one stated above:
+inserting a character between every pair of characters in the file.
+The
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+command is
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>,y/@/ a/x/</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">and takes 3 CPU seconds per kilobyte of input file, of which
+about a third is spent in the regular expression code.
+This translates to about 500 changes per second.
+</span><span style="font-size: 10pt"><tt>Ed</tt></span><span style="font-size: 10pt">
+takes 1.5 seconds per kilobyte to make a similar change (ignoring newlines),
+but cannot undo it.
+The same example in
+</span><span style="font-size: 10pt"><tt>ex</tt></span><span style="font-size: 10pt">,<sup></sup></span><sup><span style="font-size: 6pt">9</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt">
+a variant of
+</span><span style="font-size: 10pt"><tt>ed</tt></span><span style="font-size: 10pt">
+done at the University of California at Berkeley,
+which allows one level of undoing, again takes 3 seconds.
+In summary,
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">&rsquo;s
+performance is comparable to that of other UNIX editors, although it solves
+a harder problem.
+</span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"><b>Communications
+</b></span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The discussion so far has described the implementation of the host part of
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">;
+the next few sections explain how a machine with mouse and bitmap display
+can be engaged to improve interaction.
+</span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt">
+is not the first editor to be written as two processes,<sup></sup></span><sup><span style="font-size: 6pt">16</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt">
+but its implementation
+has some unusual aspects.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">There are several ways
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">&rsquo;s
+host and terminal parts may be connected.
+The first and simplest is to forgo the terminal part and use the host
+part&rsquo;s command language to edit text on an ordinary terminal.
+This mode is invoked by starting
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+with the
+</span><span style="font-size: 10pt"><tt>-d</tt></span><span style="font-size: 10pt">
+option.
+With no options,
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+runs separate host and terminal programs,
+communicating with a message protocol over the physical
+connection that joins them.
+Typically, the connection is an RS-232 link between a Blit
+(the prototypical display for
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">)
+and a host running
+the Ninth Edition of the UNIX operating system.<sup></sup></span><sup><span style="font-size: 6pt">8</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt">
+(This is the version of the system used in the Computing Sciences Research
+Center at AT&amp;T Bell Laboratories [now Lucent Technologies, Bell Labs], where I work.  Its relevant
+aspects are discussed in the Blit paper.<sup></sup></span><sup><span style="font-size: 6pt">1</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt">)
+The implementation of
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+for the SUN computer runs both processes on the same machine and
+connects them by a pipe.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The low bandwidth of an RS-232 link
+necessitated the split between
+the two programs.
+The division is a mixed blessing:
+a program in two parts is much harder to write and to debug
+than a self-contained one,
+but the split makes several unusual configurations possible.
+The terminal may be physically separated from the host, allowing the conveniences
+of a mouse and bitmap display to be taken home while leaving the files at work.
+It is also possible to run the host part on a remote machine:
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>sam -r host</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">connects to the terminal in the usual way, and then makes a call
+across the network to establish the host part of
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+on the named machine.
+Finally, it cross-connects the I/O to join the two parts.
+This allows
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+to be run on machines that do not support bitmap displays;
+for example,
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+is the editor of choice on our Cray X-MP/24.
+</span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt">
+</span><span style="font-size: 10pt"><tt>-r</tt></span><span style="font-size: 10pt">
+involves
+</span><span style="font-size: 10pt"><i>three</i></span><span style="font-size: 10pt">
+machines: the remote host, the terminal, and the local host.
+The local host&rsquo;s job is simple but vital: it passes the data
+between the remote host and terminal.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The host and terminal exchange messages asynchronously
+(rather than, say, as remote procedure calls) but there is no
+error detection or correction
+because, whatever the configuration, the connection is reliable.
+Because the terminal handles mundane interaction tasks such as
+popping up menus and interpreting the responses, the messages are about
+data, not actions.
+For example, the host knows nothing about what is displayed on the screen,
+and when the user types a character, the message sent to the host says
+&lsquo;&lsquo;insert a one-byte string at location 123 in file 7,&rsquo;&rsquo; not &lsquo;&lsquo;a character
+was typed at the current position in the current file.&rsquo;&rsquo;
+In other words, the messages look very much like the transaction records
+in the transcripts.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Either the host or terminal part of
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+may initiate a change to a file.
+The command language operates on the host, while typing and some
+mouse operations are executed directly in the terminal to optimize response.
+Changes initiated by the host program must be transmitted to the terminal,
+and
+vice versa.
+(A token is exchanged to determine which end is in control,
+which means that characters typed while a time-consuming command runs
+must be buffered and do not appear until the command is complete.)
+To maintain consistent information,
+the host and terminal track changes through a per-file
+data structure that records what portions of the file
+the terminal has received.
+The data structure, called a
+</span><span style="font-size: 10pt"><tt>Rasp</tt></span><span style="font-size: 10pt">
+(a weak pun: it&rsquo;s a file with holes)
+is held and updated by both the host and terminal.
+A
+</span><span style="font-size: 10pt"><tt>Rasp</tt></span><span style="font-size: 10pt">
+is a list of
+</span><span style="font-size: 10pt"><tt>Strings</tt></span><span style="font-size: 10pt">
+holding those parts of the file known to the terminal,
+separated by counts of the number of bytes in the interstices.
+Of course, the host doesn&rsquo;t keep a separate copy of the data (it only needs
+the lengths of the various pieces),
+but the structure is the same on both ends.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The
+</span><span style="font-size: 10pt"><tt>Rasp</tt></span><span style="font-size: 10pt">
+in the terminal doubles as a cache.
+Since the terminal keeps the text for portions of the file it has displayed,
+it need not request data from the host when revisiting old parts of the file
+or redrawing obscured windows, which speeds things up considerably
+over low-speed links.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">It&rsquo;s trivial for the terminal to maintain its
+</span><span style="font-size: 10pt"><tt>Rasp</tt></span><span style="font-size: 10pt">,
+because all changes made on the terminal apply to parts of the file
+already loaded there.
+Changes made by the host are compared against the
+</span><span style="font-size: 10pt"><tt>Rasp</tt></span><span style="font-size: 10pt">
+during the update sequence after each command.
+Small changes to pieces of the file loaded in the terminal
+are sent in their entirety.
+Larger changes, and changes that fall entirely in the holes,
+are transmitted as messages without literal data:
+only the lengths of the deleted and inserted strings are transmitted.
+When a command is completed, the terminal examines its visible
+windows to see if any holes in their
+</span><span style="font-size: 10pt"><tt>Rasps</tt></span><span style="font-size: 10pt">
+intersect the visible portion of the file.
+It then requests the missing data from the host,
+along with up to 512 bytes of surrounding data, to minimize
+the number of messages when visiting a new portion of the file.
+This technique provides a kind of two-level lazy evaluation for the terminal.
+The first level sends a minimum of information about
+parts of the file not being edited interactively;
+the second level waits until a change is displayed before
+transmitting the new data.
+Of course,
+performance is also helped by having the terminal respond immediately to typing
+and simple mouse requests.
+Except for small changes to active pieces of the file, which are
+transmitted to the terminal without negotiation,
+the terminal is wholly responsible for deciding what is displayed;
+the host uses the
+</span><span style="font-size: 10pt"><tt>Rasp</tt></span><span style="font-size: 10pt">
+only to tell the terminal what might be relevant.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">When a change is initiated by the host,
+the messages to the terminal describing the change
+are generated by the routine that applies the transcript of the changes
+to the contents of the
+</span><span style="font-size: 10pt"><tt>File</tt></span><span style="font-size: 10pt">.
+Since changes are undone by the same update routine,
+undoing requires
+no extra code in the communications;
+the usual messages describing changes to the file are sufficient
+to back up the screen image.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The
+</span><span style="font-size: 10pt"><tt>Rasp</tt></span><span style="font-size: 10pt">
+is a particularly good example of the way caches are used in
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">.
+First, it facilitates access to the active portion of the text by placing
+the busy text in main memory.
+In so doing, it provides efficient access
+to a large data structure that does not fit in memory.
+Since the form of data is to be imposed by the user, not by the program,
+and because characters will frequently be scanned sequentially,
+files are stored as flat objects.
+Caches help keep performance good and linear when working with such
+data.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Second, the
+</span><span style="font-size: 10pt"><tt>Rasp</tt></span><span style="font-size: 10pt">
+and several of the other caches have some
+</span><span style="font-size: 10pt"><i>read-ahead;</i></span><span style="font-size: 10pt">
+that is, the cache is loaded with more information than is needed for
+the job immediately at hand.
+When manipulating linear structures, the accesses are usually sequential,
+and read-ahead can significantly reduce the average time to access the
+next element of the object.
+Sequential access is a common mode for people as well as programs;
+consider scrolling through a document while looking for something.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Finally, like any good data structure,
+the cache guides the algorithm, or at least the implementation.
+The
+</span><span style="font-size: 10pt"><tt>Rasp</tt></span><span style="font-size: 10pt">
+was actually invented to control the communications between the host and
+terminal parts, but I realized very early that it was also a form of
+cache.  Other caches were more explicitly intended to serve a double
+purpose: for example, the caches in
+</span><span style="font-size: 10pt"><tt>Files</tt></span><span style="font-size: 10pt">
+that coalesce updates not only reduce traffic to the
+transcript and contents
+</span><span style="font-size: 10pt"><tt>Buffers</tt></span><span style="font-size: 10pt">,
+they also clump screen updates so that complicated changes to the
+screen are achieved in
+just a few messages to the terminal.
+This saved me considerable work: I did not need to write special
+code to optimize the message traffic to the
+terminal.
+Caches pay off in surprising ways.
+Also, they tend to be independent, so their performance improvements
+are multiplicative.
+</span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"><b>Data structures in the terminal
+</b></span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The terminal&rsquo;s job is to display and to maintain a consistent image of
+pieces of the files being edited.
+Because the text is always in memory, the data structures are
+considerably simpler than those in the host part.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"></span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt">
+typically has far more windows than does
+</span><span style="font-size: 10pt"><tt>mux</tt></span><span style="font-size: 10pt">,
+the window system within which its Blit implementation runs.
+</span><span style="font-size: 10pt"><tt>Mux</tt></span><span style="font-size: 10pt">
+has a fairly small number of asynchronously updated windows;
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+needs a large number of synchronously updated windows that are
+usually static and often fully obscured.
+The different tradeoffs guided
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+away from the memory-intensive implementation of windows, called
+</span><span style="font-size: 10pt"><tt>Layers</tt></span><span style="font-size: 10pt">,<sup></sup></span><sup><span style="font-size: 6pt">17</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt">
+used in
+</span><span style="font-size: 10pt"><tt>mux.</tt></span><span style="font-size: 10pt">
+Rather than depending on a complete bitmap image of the display for each window,
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+regenerates the image from its in-memory text
+(stored in the
+</span><span style="font-size: 10pt"><tt>Rasp</tt></span><span style="font-size: 10pt">)
+when necessary, although it will use such an image if it is available.
+Like
+</span><span style="font-size: 10pt"><tt>Layers</tt></span><span style="font-size: 10pt">,
+though,
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+uses the screen bitmap as active storage in which to update the image using
+</span><span style="font-size: 10pt"><tt>bitblt</tt></span><span style="font-size: 10pt">.<sup></sup></span><sup><span style="font-size: 6pt">18,19</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt">
+The resulting organization, pictured in Figure 6,
+has a global array of windows, called
+</span><span style="font-size: 10pt"><tt>Flayers</tt></span><span style="font-size: 10pt">,
+each of which holds an image of a piece of text held in a data structure
+called a
+</span><span style="font-size: 10pt"><tt>Frame</tt></span><span style="font-size: 10pt">,
+which in turn represents
+a rectangular window full of text displayed in some
+</span><span style="font-size: 10pt"><tt>Bitmap</tt></span><span style="font-size: 10pt">.
+Each
+</span><span style="font-size: 10pt"><tt>Flayer</tt></span><span style="font-size: 10pt">
+appears in a global list that orders them all front-to-back
+on the display, and simultaneously as an element of a per-file array
+that holds all the open windows for that file.
+The complement in the terminal of the
+</span><span style="font-size: 10pt"><tt>File</tt></span><span style="font-size: 10pt">
+on the host is called a
+</span><span style="font-size: 10pt"><tt>Text</tt></span><span style="font-size: 10pt">;
+each connects its
+</span><span style="font-size: 10pt"><tt>Flayers</tt></span><span style="font-size: 10pt">
+to the associated
+</span><span style="font-size: 10pt"><tt>Rasp</tt></span><span style="font-size: 10pt">.
+</span><span style="font-size: 10pt"></span></p><center><img src="sam3.png"></center>
+</center>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 8pt"><i>Figure 6. Data structures in the terminal.
+</i></span><span style="font-size: 8pt"><tt>Flayers</tt></span><span style="font-size: 8pt"><i>
+are also linked together into a front-to-back list.
+</i></span><span style="font-size: 8pt"><tt>Boxes</tt></span><span style="font-size: 8pt"><i>
+are discussed in the next section.
+</i></span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<p style="margin-top: 0; margin-bottom: 0.02in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The
+</span><span style="font-size: 10pt"><tt>Bitmap</tt></span><span style="font-size: 10pt">
+for a
+</span><span style="font-size: 10pt"><tt>Frame</tt></span><span style="font-size: 10pt">
+contains the image of the text.
+For a fully visible window, the
+</span><span style="font-size: 10pt"><tt>Bitmap</tt></span><span style="font-size: 10pt">
+will be the screen (or at least the
+</span><span style="font-size: 10pt"><tt>Layer</tt></span><span style="font-size: 10pt">
+in which
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+is being run),
+while for partially obscured windows the
+</span><span style="font-size: 10pt"><tt>Bitmap</tt></span><span style="font-size: 10pt">
+will be off-screen.
+If the window is fully obscured, the
+</span><span style="font-size: 10pt"><tt>Bitmap</tt></span><span style="font-size: 10pt">
+will be null.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The
+</span><span style="font-size: 10pt"><tt>Bitmap</tt></span><span style="font-size: 10pt">
+is a kind of cache.
+When making changes to the display, most of the original image will
+look the same in the final image, and the update algorithms exploit this.
+The
+</span><span style="font-size: 10pt"><tt>Frame</tt></span><span style="font-size: 10pt">
+software updates the image in the
+</span><span style="font-size: 10pt"><tt>Bitmap</tt></span><span style="font-size: 10pt">
+incrementally; the
+</span><span style="font-size: 10pt"><tt>Bitmap</tt></span><span style="font-size: 10pt">
+is not just an image, it is a data structure.<sup></sup></span><sup><span style="font-size: 6pt">18,19</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt">
+The job of the software that updates the display is therefore
+to use as much as possible of the existing image (converting the
+text from ASCII characters to pixels is expensive) in a sort of two-dimensional
+string insertion algorithm.
+The details of this process are described in the next section.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The
+</span><span style="font-size: 10pt"><tt>Frame</tt></span><span style="font-size: 10pt">
+software has no code to support overlapping windows;
+its job is to keep a single
+</span><span style="font-size: 10pt"><tt>Bitmap</tt></span><span style="font-size: 10pt">
+up to date.
+It falls to the
+</span><span style="font-size: 10pt"><tt>Flayer</tt></span><span style="font-size: 10pt">
+software to multiplex the various
+</span><span style="font-size: 10pt"><tt>Bitmaps</tt></span><span style="font-size: 10pt">
+onto the screen.
+The problem of maintaining overlapping
+</span><span style="font-size: 10pt"><tt>Flayers</tt></span><span style="font-size: 10pt">
+is easier than for
+</span><span style="font-size: 10pt"><tt>Layers</tt></span><span style="font-size: 10pt"><sup></sup></span><sup><span style="font-size: 6pt">17</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt">
+because changes are made synchronously and because the contents of the window
+can be reconstructed from the data stored in the
+</span><span style="font-size: 10pt"><tt>Frame</tt></span><span style="font-size: 10pt">;
+the
+</span><span style="font-size: 10pt"><tt>Layers</tt></span><span style="font-size: 10pt">
+software
+makes no such assumptions.
+In
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">,
+the window being changed is almost always fully visible, because the current
+window is always fully visible, by construction.
+However, when multi-file changes are being made, or when
+more than one window is open on a file,
+it may be necessary to update partially obscured windows.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">There are three cases: the window is 
+fully visible, invisible (fully obscured), or partially visible.
+If fully visible, the
+</span><span style="font-size: 10pt"><tt>Bitmap</tt></span><span style="font-size: 10pt">
+is part of the screen, so when the
+</span><span style="font-size: 10pt"><tt>Flayer</tt></span><span style="font-size: 10pt">
+update routine calls the
+</span><span style="font-size: 10pt"><tt>Frame</tt></span><span style="font-size: 10pt">
+update routine, the screen will be updated directly.
+If the window is invisible,
+there is no associated
+</span><span style="font-size: 10pt"><tt>Bitmap</tt></span><span style="font-size: 10pt">,
+and all that is necessary is to update the
+</span><span style="font-size: 10pt"><tt>Frame</tt></span><span style="font-size: 10pt">
+data structure, not the image.
+If the window is partially visible, the
+</span><span style="font-size: 10pt"><tt>Frame</tt></span><span style="font-size: 10pt">
+routine is called to update the image in the off-screen
+</span><span style="font-size: 10pt"><tt>Bitmap</tt></span><span style="font-size: 10pt">,
+which may require regenerating it from the text of the window.
+The
+</span><span style="font-size: 10pt"><tt>Flayer</tt></span><span style="font-size: 10pt">
+code then clips this
+</span><span style="font-size: 10pt"><tt>Bitmap</tt></span><span style="font-size: 10pt">
+against the
+</span><span style="font-size: 10pt"><tt>Bitmaps</tt></span><span style="font-size: 10pt">
+of all
+</span><span style="font-size: 10pt"><tt>Frames</tt></span><span style="font-size: 10pt">
+in front of the
+</span><span style="font-size: 10pt"><tt>Frame</tt></span><span style="font-size: 10pt">
+being modified, and the remainder is copied to the display.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">This is much faster than recreating the image off-screen
+for every change, or clipping all the changes made to the image
+during its update.
+Unfortunately, these caches can also consume prohibitive amounts of
+memory, so they are freed fairly liberally &mdash; after every change to the
+front-to-back order of the
+</span><span style="font-size: 10pt"><tt>Flayers</tt></span><span style="font-size: 10pt">.
+The result is that
+the off-screen
+</span><span style="font-size: 10pt"><tt>Bitmaps</tt></span><span style="font-size: 10pt">
+exist only while multi-window changes are occurring,
+which is the only time the performance improvement they provide is needed.
+Also, the user interface causes fully-obscured windows to be the
+easiest to make &mdash;
+creating a canonically sized and placed window requires only a button click
+&mdash; which reduces the need for caching still further.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"><b>Screen update
+</b></span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Only two low-level primitives are needed for incremental update:
+</span><span style="font-size: 10pt"><tt>bitblt</tt></span><span style="font-size: 10pt">,
+which copies rectangles of pixels, and
+</span><span style="font-size: 10pt"><tt>string</tt></span><span style="font-size: 10pt">
+(which in turn calls
+</span><span style="font-size: 10pt"><tt>bitblt</tt></span><span style="font-size: 10pt">),
+which draws a null-terminated character string in a
+</span><span style="font-size: 10pt"><tt>Bitmap</tt></span><span style="font-size: 10pt">.
+A
+</span><span style="font-size: 10pt"><tt>Frame</tt></span><span style="font-size: 10pt">
+contains a list of
+</span><span style="font-size: 10pt"><tt>Boxes</tt></span><span style="font-size: 10pt">,
+each of which defines a horizontal strip of text in the window
+(see Figure 7).
+A
+</span><span style="font-size: 10pt"><tt>Box</tt></span><span style="font-size: 10pt">
+has a character string
+</span><span style="font-size: 10pt"><tt>str</tt></span><span style="font-size: 10pt">,
+and a
+</span><span style="font-size: 10pt"><tt>Rectangle</tt></span><span style="font-size: 10pt">
+</span><span style="font-size: 10pt"><tt>rect</tt></span><span style="font-size: 10pt">
+that defines the location of the strip in the window.
+(The text in
+</span><span style="font-size: 10pt"><tt>str</tt></span><span style="font-size: 10pt">
+is stored in the
+</span><span style="font-size: 10pt"><tt>Box</tt></span><span style="font-size: 10pt">
+separately from the
+</span><span style="font-size: 10pt"><tt>Rasp</tt></span><span style="font-size: 10pt">
+associated with the window&rsquo;s file, so
+</span><span style="font-size: 10pt"><tt>Boxes</tt></span><span style="font-size: 10pt">
+are self-contained.)
+The invariant is that
+the image of the
+</span><span style="font-size: 10pt"><tt>Box</tt></span><span style="font-size: 10pt">
+can be reproduced by calling
+</span><span style="font-size: 10pt"><tt>string</tt></span><span style="font-size: 10pt">
+with argument
+</span><span style="font-size: 10pt"><tt>str</tt></span><span style="font-size: 10pt">
+to draw the string in
+</span><span style="font-size: 10pt"><tt>rect</tt></span><span style="font-size: 10pt">,
+and the resulting picture fits perfectly within
+</span><span style="font-size: 10pt"><tt>rect</tt></span><span style="font-size: 10pt">.
+In other words, the
+</span><span style="font-size: 10pt"><tt>Boxes</tt></span><span style="font-size: 10pt">
+define the tiling of the window.
+The tiling may be complicated by long lines of text, which
+are folded onto the next line.
+Some editors use horizontal scrolling to avoid this complication,
+but to be comfortable this technique requires that lines not be
+</span><span style="font-size: 10pt"><i>too</i></span><span style="font-size: 10pt">
+long;
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+has no such restriction.
+Also, and perhaps more importantly, UNIX programs and terminals traditionally fold
+long lines to make their contents fully visible.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Two special kinds of
+</span><span style="font-size: 10pt"><tt>Boxes</tt></span><span style="font-size: 10pt">
+contain a single
+character: either a newline or a tab.
+Newlines and tabs are white space.
+A newline
+</span><span style="font-size: 10pt"><tt>Box</tt></span><span style="font-size: 10pt">
+always extends to the right edge of the window,
+forcing the following
+</span><span style="font-size: 10pt"><tt>Box</tt></span><span style="font-size: 10pt">
+to the next line.
+The width of a tab depends on where it is located:
+it forces the next
+</span><span style="font-size: 10pt"><tt>Box</tt></span><span style="font-size: 10pt">
+to begin at a tab location.
+Tabs also
+have a minimum width equivalent to a blank (blanks are
+drawn by
+</span><span style="font-size: 10pt"><tt>string</tt></span><span style="font-size: 10pt">
+and are not treated specially); newlines have a minimum width of zero.
+</span><span style="font-size: 10pt"></span></p><center><img src="sam4.png"></center>
+</center>
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 8pt"><i>Figure 7. A line of text showing its
+</i></span><span style="font-size: 8pt"><tt>Boxes</tt></span><span style="font-size: 8pt"><i>.
+The first two blank
+</i></span><span style="font-size: 8pt"><tt>Boxes</tt></span><span style="font-size: 8pt"><i>
+contain tabs; the last contains a newline.
+Spaces are handled as ordinary characters.
+</i></span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<p style="margin-top: 0; margin-bottom: 0.02in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The update algorithms always use the
+</span><span style="font-size: 10pt"><tt>Bitmap</tt></span><span style="font-size: 10pt">
+image of the text (either the display or cache
+</span><span style="font-size: 10pt"><tt>Bitmap</tt></span><span style="font-size: 10pt">);
+they never examine the characters within a
+</span><span style="font-size: 10pt"><tt>Box</tt></span><span style="font-size: 10pt">
+except when the
+</span><span style="font-size: 10pt"><tt>Box</tt></span><span style="font-size: 10pt">
+needs to be split in two.
+Before a change, the window consists of a tiling of
+</span><span style="font-size: 10pt"><tt>Boxes</tt></span><span style="font-size: 10pt">;
+after the change the window is tiled differently.
+The update algorithms rearrange the tiles in place, without
+backup storage.
+The algorithms are not strictly optimal &mdash; for example, they can
+clear a pixel that is later going to be written upon &mdash;
+but they never move a tile that doesn&rsquo;t need to be moved,
+and they move each tile at most once.
+</span><span style="font-size: 10pt"><tt>Frinsert</tt></span><span style="font-size: 10pt">
+on a Blit can absorb over a thousand characters a second if the strings
+being inserted are a few tens of characters long.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Consider
+</span><span style="font-size: 10pt"><tt>frdelete</tt></span><span style="font-size: 10pt">.
+Its job is to delete a substring from a
+</span><span style="font-size: 10pt"><tt>Frame</tt></span><span style="font-size: 10pt">
+and restore the image of the
+</span><span style="font-size: 10pt"><tt>Frame</tt></span><span style="font-size: 10pt">.
+The image of a substring has a peculiar shape (see Figure 2) comprising
+possibly a partial line,
+zero or more full lines,
+and possibly a final partial line.
+For reference, call this the
+</span><span style="font-size: 10pt"><i>Z-shape.
+</i></span><span style="font-size: 10pt"></span><span style="font-size: 10pt"><tt>Frdelete</tt></span><span style="font-size: 10pt">
+begins by splitting, if necessary, the
+</span><span style="font-size: 10pt"><tt>Boxes</tt></span><span style="font-size: 10pt">
+containing the ends of
+the substring so the substring begins and ends on
+</span><span style="font-size: 10pt"><tt>Box</tt></span><span style="font-size: 10pt">
+boundaries.
+Because the substring is being deleted, its image is not needed,
+so the Z-shape is then cleared.
+Then, tiles (that is, the images of
+</span><span style="font-size: 10pt"><tt>Boxes</tt></span><span style="font-size: 10pt">)
+are copied, using
+</span><span style="font-size: 10pt"><tt>bitblt</tt></span><span style="font-size: 10pt">,
+from immediately after the Z-shape to
+the beginning of the Z-shape,
+resulting in a new Z-shape.
+(</span><span style="font-size: 10pt"><tt>Boxes</tt></span><span style="font-size: 10pt">
+whose contents would span two lines in the new position must first be split.)
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Copying the remainder of the
+</span><span style="font-size: 10pt"><tt>Frame</tt></span><span style="font-size: 10pt">
+tile by tile
+this way will clearly accomplish the deletion but eventually,
+typically when the copying algorithm encounters a tab or newline,
+the old and new
+</span><span style="font-size: 10pt"><tt>x</tt></span><span style="font-size: 10pt">
+coordinates of the tile
+to be copied are the same.
+This correspondence implies
+that the Z-shape has its beginning and ending edges aligned
+vertically, and a sequence of at most two
+</span><span style="font-size: 10pt"><tt>bitblts</tt></span><span style="font-size: 10pt">
+can be used to copy the remaining tiles.
+The last step is to clear out the resulting empty space at the bottom
+of the window;
+the number of lines to be cleared is the number of complete lines in the
+Z-shape closed by the final
+</span><span style="font-size: 10pt"><tt>bitblts.</tt></span><span style="font-size: 10pt">
+The final step is to merge horizontally adjacent
+</span><span style="font-size: 10pt"><tt>Boxes</tt></span><span style="font-size: 10pt">
+of plain text.
+The complete source to
+</span><span style="font-size: 10pt"><tt>frdelete</tt></span><span style="font-size: 10pt">
+is less than 100 lines of C.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"></span><span style="font-size: 10pt"><tt>frinsert</tt></span><span style="font-size: 10pt">
+is more complicated because it must do four passes:
+one to construct the
+</span><span style="font-size: 10pt"><tt>Box</tt></span><span style="font-size: 10pt">
+list for the inserted string,
+one to reconnoitre,
+one to copy (in opposite order to
+</span><span style="font-size: 10pt"><tt>frdelete</tt></span><span style="font-size: 10pt">)
+the
+</span><span style="font-size: 10pt"><tt>Boxes</tt></span><span style="font-size: 10pt">
+to make the hole for the new text,
+and finally one to copy the new text into place.
+Overall, though,
+</span><span style="font-size: 10pt"><tt>frinsert</tt></span><span style="font-size: 10pt">
+has a similar flavor to
+</span><span style="font-size: 10pt"><tt>frdelete</tt></span><span style="font-size: 10pt">,
+and needn&rsquo;t be described further.
+</span><span style="font-size: 10pt"><tt>Frinsert</tt></span><span style="font-size: 10pt">
+and its subsidiary routines comprise 211 lines of C.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The terminal source code is 3024 lines of C,
+and the host source is 5797 lines.
+</span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"><b>Discussion
+</b></span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"><b>History
+</b></span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The immediate ancestor of
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+was the original text editor for the Blit, called
+</span><span style="font-size: 10pt"><tt>jim</tt></span><span style="font-size: 10pt">.
+</span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt">
+inherited
+</span><span style="font-size: 10pt"><tt>jim</tt></span><span style="font-size: 10pt">&rsquo;s
+two-process structure and mouse language almost unchanged, but
+</span><span style="font-size: 10pt"><tt>jim</tt></span><span style="font-size: 10pt">
+suffered from several drawbacks that were addressed in the design of
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">.
+The most important of these was the lack of a command language.
+Although
+</span><span style="font-size: 10pt"><tt>jim</tt></span><span style="font-size: 10pt">
+was easy to use for simple editing, it provided no direct help with
+large or repetitive editing tasks.  Instead, it provided a command to pass
+selected text through a shell pipeline,
+but this was no more satisfactory than could be expected of a stopgap measure.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"></span><span style="font-size: 10pt"><tt>Jim</tt></span><span style="font-size: 10pt">
+was written primarily as a vehicle for experimenting with a mouse-based
+interface to text, and the experiment was successful.
+</span><span style="font-size: 10pt"><tt>Jim</tt></span><span style="font-size: 10pt">
+had some spin-offs:
+</span><span style="font-size: 10pt"><tt>mux</tt></span><span style="font-size: 10pt">,
+the second window system for the Blit, is essentially a multiplexed
+version of the terminal part of
+</span><span style="font-size: 10pt"><tt>jim</tt></span><span style="font-size: 10pt">;
+and the debugger
+</span><span style="font-size: 10pt"><tt>pi</tt></span><span style="font-size: 10pt">&rsquo;s
+user interface<sup></sup></span><sup><span style="font-size: 6pt">20</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt"> was closely modeled on
+</span><span style="font-size: 10pt"><tt>jim</tt></span><span style="font-size: 10pt">&rsquo;s.
+But after a couple of years,
+</span><span style="font-size: 10pt"><tt>jim</tt></span><span style="font-size: 10pt">
+had become difficult to maintain and limiting to use,
+and its replacement was overdue.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">I began the design of
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+by asking
+</span><span style="font-size: 10pt"><tt>jim</tt></span><span style="font-size: 10pt">
+customers what they wanted.
+This was probably a mistake; the answers were essentially a list of features
+to be found in other editors, which did not provide any of the
+guiding principles I was seeking.
+For instance, one common request was for a &lsquo;&lsquo;global substitute,&rsquo;&rsquo;
+but no one suggested how to provide it within a cut-and-paste editor.
+I was looking for a scheme that would
+support such specialized features comfortably in the context of some
+general command language.
+Ideas were not forthcoming, though, particularly given my insistence
+on removing all limits on file sizes, line lengths and so on.
+Even worse, I recognized that, since the mouse could easily
+indicate a region of the screen that was not an integral number of lines,
+the command language would best forget about newlines altogether,
+and that meant the command language had to treat the file as a single
+string, not an array of lines.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Eventually, I decided that thinking was not getting me very far and it was
+time to try building.
+I knew that the terminal part could be built easily &mdash;
+that part of
+</span><span style="font-size: 10pt"><tt>jim</tt></span><span style="font-size: 10pt">
+behaved acceptably well &mdash; and that most of the hard work was going
+to be in the host part: the file interface, command interpreter and so on.
+Moreover, I had some ideas about how the architecture of
+</span><span style="font-size: 10pt"><tt>jim</tt></span><span style="font-size: 10pt">
+could be improved without destroying its basic structure, which I liked
+in principle but which hadn&rsquo;t worked out as well as I had hoped.
+So I began by designing the file data structure,
+starting with the way
+</span><span style="font-size: 10pt"><tt>jim</tt></span><span style="font-size: 10pt">
+worked &mdash; comparable to a single structure merging
+</span><span style="font-size: 10pt"><tt>Disc</tt></span><span style="font-size: 10pt">
+and
+</span><span style="font-size: 10pt"><tt>Buffer</tt></span><span style="font-size: 10pt">,
+which I split to make the cache more general
+&mdash; and thinking about how global substitute could be implemented.
+The answer was clearly that it had to be done in two passes,
+and the transcript-oriented implementation fell out naturally.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"></span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt">
+was written bottom-up,
+starting from the data structures and algorithms for manipulating text,
+through the command language and up to the code for maintaining
+the display.
+In retrospect, it turned out well, but this implementation method is
+not recommended in general.
+There were several times when I had a large body of interesting code
+assembled and no clue how to proceed with it.
+The command language, in particular, took almost a year to figure out,
+but can be implemented (given what was there at the beginning of that year)
+in a day or two.  Similarly, inventing the
+</span><span style="font-size: 10pt"><tt>Rasp</tt></span><span style="font-size: 10pt">
+data structure delayed the
+connection of the host and terminal pieces by another few months.
+</span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt">
+took about two years to write, although only about four months were
+spent actually working on it.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Part of the design process was unusual:
+the subset of the protocol that maintains the
+</span><span style="font-size: 10pt"><tt>Rasp</tt></span><span style="font-size: 10pt">
+was simulated, debugged
+and verified by an automatic protocol analyzer,<sup></sup></span><sup><span style="font-size: 6pt">21</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt"> and was bug-free
+from the start.
+The rest of the protocol, concerned mostly
+with keeping menus up to date,
+was unfortunately too unwieldy for such analysis,
+and was debugged by more traditional methods, primarily
+by logging in a file all messages in and out of the host.
+</span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"><b>Reflections
+</b></span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"></span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt">
+is essentially the only interactive editor used by the sixty or so members of
+the computing science research center in which I work.
+The same could not be said of
+</span><span style="font-size: 10pt"><tt>jim</tt></span><span style="font-size: 10pt">;
+the lack of a command language kept some people from adopting it.
+The union of a user interface as comfortable as
+</span><span style="font-size: 10pt"><tt>jim</tt></span><span style="font-size: 10pt">&rsquo;s
+with a command language as powerful as
+</span><span style="font-size: 10pt"><tt>ed</tt></span><span style="font-size: 10pt">&rsquo;s&dagger;
+</span></p><p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">is essential to
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">&rsquo;s
+success.
+When
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+was first made available to the
+</span><span style="font-size: 10pt"><tt>jim</tt></span><span style="font-size: 10pt">
+community,
+almost everyone switched to it within two or three days.
+In the months that followed, even people who had never adopted
+</span><span style="font-size: 10pt"><tt>jim</tt></span><span style="font-size: 10pt">
+started using
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+exclusively.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">To be honest,
+</span><span style="font-size: 10pt"><tt>ed</tt></span><span style="font-size: 10pt">
+still gets occasional use, but usually when
+something quick needs to be done and the overhead of
+downloading the terminal part of
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+isn&rsquo;t worth the trouble.
+Also, as a &lsquo;line&rsquo; editor,
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+</span><span style="font-size: 10pt"><tt>-d</tt></span><span style="font-size: 10pt">
+is a bit odd;
+when using a good old ASCII terminal, it&rsquo;s comforting to have
+a true line editor.
+But it is fair to say that
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">&rsquo;s
+command language has displaced
+</span><span style="font-size: 10pt"><tt>ed</tt></span><span style="font-size: 10pt">&rsquo;s
+for most of the complicated editing that has kept line editors
+(that is, command-driven editors) with us.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"></span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt">&rsquo;s
+command language is even fancier than
+</span><span style="font-size: 10pt"><tt>ed</tt></span><span style="font-size: 10pt">&rsquo;s,
+and most
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+customers don&rsquo;t come near to using all its capabilities.
+Does it need to be so sophisticated?
+I think the answer is yes, for two reasons.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">First, the
+</span><span style="font-size: 10pt"><i>model</i></span><span style="font-size: 10pt">
+for
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">&rsquo;s
+command language is really relatively simple, and certainly simpler than that of
+</span><span style="font-size: 10pt"><tt>ed</tt></span><span style="font-size: 10pt">.
+For instance, there is only one kind of textual loop in
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+&mdash; the
+</span><span style="font-size: 10pt"><tt>x</tt></span><span style="font-size: 10pt">
+command &mdash;
+while
+</span><span style="font-size: 10pt"><tt>ed</tt></span><span style="font-size: 10pt">
+has three (the
+</span><span style="font-size: 10pt"><tt>g</tt></span><span style="font-size: 10pt">
+command, the global flag on substitutions, and the implicit loop over
+lines in multi-line substitutions).
+Also,
+</span><span style="font-size: 10pt"><tt>ed</tt></span><span style="font-size: 10pt">&rsquo;s
+substitute command is necessary to make changes within lines, but in
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+the
+</span><span style="font-size: 10pt"><tt>s</tt></span><span style="font-size: 10pt">
+command is more of a familiar convenience than a necessity;
+</span><span style="font-size: 10pt"><tt>c</tt></span><span style="font-size: 10pt">
+and
+</span><span style="font-size: 10pt"><tt>t</tt></span><span style="font-size: 10pt">
+can do all the work.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Second,
+given a community that expects an editor to be about as powerful as
+</span><span style="font-size: 10pt"><tt>ed</tt></span><span style="font-size: 10pt">,
+it&rsquo;s hard to see how
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+could really be much simpler and still satisfy that expectation.
+People want to do &lsquo;&lsquo;global substitutes,&rsquo;&rsquo; and most are content
+to have the recipe for that and a few other fancy changes.
+The sophistication of the command language is really just a veneer
+over a design that makes it possible to do global substitutes
+in a screen editor.
+Some people will always want something more, however, and it&rsquo;s gratifying to
+be able to provide it.
+The real power of
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">&rsquo;s
+command language comes from composability of the operators, which is by
+nature orthogonal to the underlying model.
+In other words,
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+is not itself complex, but it makes complex things possible.
+If you don&rsquo;t want to do anything complex, you can ignore the
+complexity altogether, and many people do so.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Sometimes I am asked the opposite question: why didn&rsquo;t I just make
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+a real programmable editor, with macros and variables and so on?
+The main reason is a matter of taste: I like the editor
+to be the same every time I use it.
+There is one technical reason, though:
+programmability in editors is largely a workaround for insufficient
+interactivity.
+Programmable editors are used to make particular, usually short-term,
+things easy to do, such as by providing shorthands for common actions.
+If things are generally easy to do in the first place,
+shorthands are not as helpful.
+</span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt">
+makes common editing operations very easy, and the solutions to
+complex editing problems seem commensurate with the problems themselves.
+Also, the ability to edit the
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+window makes it easy to repeat commands &mdash; it only takes a mouse button click
+to execute a command again.
+</span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"><b>Pros and cons
+</b></span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"></span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt">
+has several other good points,
+and its share of problems.
+Among the good things is the idea of
+structural regular expressions,
+whose usefulness has only begun to be explored.
+They were arrived at serendipitously when I attempted to distill the essence of
+</span><span style="font-size: 10pt"><tt>ed</tt></span><span style="font-size: 10pt">&rsquo;s
+way of doing global substitution and recognized that the looping command in
+</span><span style="font-size: 10pt"><tt>ed</tt></span><span style="font-size: 10pt">
+was implicitly imposing a structure (an array of lines) on the file.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Another of
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">&rsquo;s
+good things is its undo capability.
+I had never before used an editor with a true undo,
+but I would never go back now.
+Undo
+</span><span style="font-size: 10pt"><i>must</i></span><span style="font-size: 10pt">
+be done well, but if it is, it can be relied on.
+For example,
+it&rsquo;s safe to experiment if you&rsquo;re not sure how to write some intricate command,
+because if you make a mistake, it can be fixed simply and reliably.
+I learned two things about undo from writing
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">:
+first, it&rsquo;s easy to provide if you design it in from the beginning, and
+second, it&rsquo;s necessary, particularly if the system has some subtle
+properties that may be unfamiliar or error-prone for users.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"></span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt">&rsquo;s
+lack of internal limits and sizes is a virtue.
+Because it avoids all fixed-size tables and data structures,
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+is able to make global changes to files that some of our other
+tools cannot even read.
+Moreover, the design keeps the performance linear when doing such
+operations, although I must admit
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+does get slow when editing a huge file.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Now, the problems.
+Externally, the most obvious is that it is poorly integrated into the
+surrounding window system.
+By design, the user interface in
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+feels almost identical to that of
+</span><span style="font-size: 10pt"><tt>mux</tt></span><span style="font-size: 10pt">,
+but a thick wall separates text in
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+from the programs running in
+</span><span style="font-size: 10pt"><tt>mux</tt></span><span style="font-size: 10pt">.
+For instance, the &lsquo;snarf buffer&rsquo; in
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+must be maintained separately from that in
+</span><span style="font-size: 10pt"><tt>mux</tt></span><span style="font-size: 10pt">.
+This is regrettable, but probably necessary given the unusual configuration
+of the system, with a programmable terminal on the far end of an RS-232 link.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"></span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt">
+is reliable; otherwise, people wouldn&rsquo;t use it.
+But it was written over such a long time, and has so many new (to me)
+ideas in it, that I would like to see it done over again to clean
+up the code and remove many of the lingering problems in the implementation.
+The worst part is in the interconnection of the host and terminal parts,
+which might even be able to go away in a redesign for a more
+conventional window system.
+The program must be split in two to use the terminal effectively,
+but the low bandwidth of the connection forces the separation to
+occur in an inconvenient part of the design if performance is to be acceptable.
+A simple remote procedure call
+protocol driven by the host, emitting only graphics
+commands, would be easy to write but wouldn&rsquo;t have nearly the
+necessary responsiveness.  On the other hand, if the terminal were in control
+and requested much simpler file services from the host, regular expression
+searches would require that the terminal read the entire file over its RS-232
+link, which would be unreasonably slow.
+A compromise in which either end can take control is necessary.
+In retrospect, the communications protocol should have been
+designed and verified formally, although I do not know of any tool
+that can adequately relate the protocol to
+its implementation.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Not all of
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">&rsquo;s
+users are comfortable with its command language, and few are adept.
+Some (venerable) people use a sort of
+&lsquo;&lsquo;</span><span style="font-size: 10pt"><tt>ed</tt></span><span style="font-size: 10pt">
+subset&rsquo;&rsquo; of
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">&rsquo;s
+command language,
+and even ask why
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">&rsquo;s
+command language is not exactly
+</span><span style="font-size: 10pt"><tt>ed</tt></span><span style="font-size: 10pt">&rsquo;s.
+(The reason, of course, is that
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">&rsquo;s
+model for text does not include newlines, which are central to
+</span><span style="font-size: 10pt"><tt>ed</tt></span><span style="font-size: 10pt">.
+Making the text an array of newlines to the command language would
+be too much of a break from the seamless model provided by the mouse.
+Some editors, such as
+</span><span style="font-size: 10pt"><tt>vi</tt></span><span style="font-size: 10pt">,
+are willing to make this break, though.)
+The difficulty is that
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">&rsquo;s
+syntax is so close to
+</span><span style="font-size: 10pt"><tt>ed</tt></span><span style="font-size: 10pt">&rsquo;s
+that people believe it
+</span><span style="font-size: 10pt"><i>should</i></span><span style="font-size: 10pt">
+be the same.
+I thought, with some justification in hindsight,
+that making
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+similar to
+</span><span style="font-size: 10pt"><tt>ed</tt></span><span style="font-size: 10pt">
+would make it easier to learn and to accept.
+But I may have overstepped and raised the users&rsquo;
+expectations too much.
+It&rsquo;s hard to decide which way to resolve this problem.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Finally, there is a tradeoff in
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+that was decided by the environment in which it runs:
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+is a multi-file editor, although in a different system there might instead be
+multiple single-file editors.
+The decision was made primarily because starting a new program in a Blit is
+time-consuming.
+If the choice could be made freely, however, I would
+still choose the multi-file architecture, because it allows
+groups of files to be handled as a unit;
+the usefulness of the multi-file commands is incontrovertible.
+It is delightful to have the source to an entire program
+available at your fingertips.
+</span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"><b>Acknowledgements
+</b></span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Tom Cargill suggested the idea behind the
+</span><span style="font-size: 10pt"><tt>Rasp</tt></span><span style="font-size: 10pt">
+data structure.
+Norman Wilson and Ken Thompson influenced the command language.
+This paper was improved by comments from
+Al Aho,
+Jon Bentley,
+Chris Fraser,
+Gerard Holzmann,
+Brian Kernighan,
+Ted Kowalski,
+Doug McIlroy
+and
+Dennis Ritchie.
+</span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"><b>REFERENCES
+</b></span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"> 1.    R. Pike,
+&lsquo;The Blit: a multiplexed graphics terminal,&rsquo;
+</span><span style="font-size: 10pt"><i>AT&amp;T Bell Labs. Tech. J.,
+</i></span><span style="font-size: 10pt"></span><span style="font-size: 10pt"><b>63</b></span><span style="font-size: 10pt">,
+(8),
+1607-1631 (1984).
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"> 2.    L. Johnson,
+</span><span style="font-size: 10pt"><i>MacWrite,</i></span><span style="font-size: 10pt">
+Apple Computer Inc., Cupertino, Calif. 1983.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"> 3.    B. Lampson,
+&lsquo;Bravo Manual,&rsquo;
+in
+</span><span style="font-size: 10pt"><i>Alto User&rsquo;s Handbook,
+</i></span><span style="font-size: 10pt">pp. 31-62,
+Xerox Palo Alto Research Center,
+Palo Alto, Calif.
+1979.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"> 4.    W. Teitelman,
+&lsquo;A tour through Cedar,&rsquo;
+</span><span style="font-size: 10pt"><i>IEEE Software,
+</i></span><span style="font-size: 10pt"></span><span style="font-size: 10pt"><b>1</b></span><span style="font-size: 10pt">
+(2), 44-73 (1984).
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"> 5.    J. Gutknecht,
+&lsquo;Concepts of the text editor Lara,&rsquo;
+</span><span style="font-size: 10pt"><i>Comm. ACM,
+</i></span><span style="font-size: 10pt"></span><span style="font-size: 10pt"><b>28</b></span><span style="font-size: 10pt">,
+(9),
+942-960 (1985).
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"> 6.    Bell Telephone Laboratories,
+</span><span style="font-size: 10pt"><i>UNIX Programmer&rsquo;s Manual,
+</i></span><span style="font-size: 10pt">Holt, Rinehart and Winston, New York 1983.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"> 7.    B. W. Kernighan and R. Pike,
+</span><span style="font-size: 10pt"><i>The Unix Programming Environment,
+</i></span><span style="font-size: 10pt">Prentice-Hall, Englewood Cliffs, New Jersey 1984.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"> 8.    </span><span style="font-size: 10pt"><i>Unix Time-Sharing System Programmer&rsquo;s Manual, Research Version, Ninth Edition,
+Volume 1,
+</i></span><span style="font-size: 10pt">AT&amp;T Bell Laboratories, Murray Hill, New Jersey 1986.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"> 9.    </span><span style="font-size: 10pt"><i>Unix Time-Sharing System Programmer&rsquo;s Manual, 4.1 Berkeley Software Distribution,
+Volumes 1 and 2C,
+</i></span><span style="font-size: 10pt">University of California, Berkeley, Calif. 1981.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">10.    R. Pike,
+&lsquo;Structural Regular Expressions,&rsquo;
+</span><span style="font-size: 10pt"><i>Proc. EUUG Spring Conf., Helsinki 1987,
+</i></span><span style="font-size: 10pt">Eur. Unix User&rsquo;s Group, Buntingford, Herts, UK 1987.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">11.    A. Goldberg,
+</span><span style="font-size: 10pt"><i>Smalltalk-80 &ndash; The Interactive Programming Environment,
+</i></span><span style="font-size: 10pt">Addison-Wesley, Reading, Mass. 1984.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">12.    K. Thompson,
+&lsquo;Regular expression search algorithm,&rsquo;
+</span><span style="font-size: 10pt"><i>Comm. ACM,
+</i></span><span style="font-size: 10pt"></span><span style="font-size: 10pt"><b>11</b></span><span style="font-size: 10pt">,
+(6),
+419-422 (1968).
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">13.    A. V. Aho, J. E. Hopcroft and J. D. Ullman,
+</span><span style="font-size: 10pt"><i>The Design and Analysis of Computer Algorithms,
+</i></span><span style="font-size: 10pt">Addison-Wesley, Reading, Mass. 1974.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">14.    B. W. Kernighan and D. M. Ritchie,
+</span><span style="font-size: 10pt"><i>The C Programming Language,
+</i></span><span style="font-size: 10pt">Prentice-Hall, Englewood Cliffs, New Jersey 1978.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">15.    W. M. Waite,
+&lsquo;The cost of lexical analysis,&rsquo;
+</span><span style="font-size: 10pt"><i>Softw. Pract. Exp.,
+</i></span><span style="font-size: 10pt"></span><span style="font-size: 10pt"><b>16</b></span><span style="font-size: 10pt">,
+(5),
+473-488 (1986).
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">16.    C. W. Fraser,
+&lsquo;A generalized text editor,&rsquo;
+</span><span style="font-size: 10pt"><i>Comm. ACM,
+</i></span><span style="font-size: 10pt"></span><span style="font-size: 10pt"><b>23</b></span><span style="font-size: 10pt">,
+(3),
+154-158 (1980).
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">17.    R. Pike,
+&lsquo;Graphics in overlapping bitmap layers,&rsquo;
+</span><span style="font-size: 10pt"><i>ACM Trans. on Graph.,
+</i></span><span style="font-size: 10pt"></span><span style="font-size: 10pt"><b>2</b></span><span style="font-size: 10pt">,
+(2)
+135-160 (1983).
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">18.    L. J. Guibas and J. Stolfi,
+&lsquo;A language for bitmap manipulation,&rsquo;
+</span><span style="font-size: 10pt"><i>ACM Trans. on Graph.,
+</i></span><span style="font-size: 10pt"></span><span style="font-size: 10pt"><b>1</b></span><span style="font-size: 10pt">,
+(3),
+191-214 (1982).
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">19.    R. Pike, B. Locanthi and J. Reiser,
+&lsquo;Hardware/software trade-offs for bitmap graphics on the Blit,&rsquo;
+</span><span style="font-size: 10pt"><i>Softw. Pract. Exp.,
+</i></span><span style="font-size: 10pt"></span><span style="font-size: 10pt"><b>15</b></span><span style="font-size: 10pt">,
+(2),
+131-151 (1985).
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">20.    T. A. Cargill,
+&lsquo;The feel of Pi,&rsquo;
+</span><span style="font-size: 10pt"><i>Winter USENIX Conference Proceedings,
+Denver 1986,
+</i></span><span style="font-size: 10pt">62-71,
+USENIX Assoc., El Cerrito, CA.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">21.    G. J. Holzmann,
+&lsquo;Tracing protocols,&rsquo;
+</span><span style="font-size: 10pt"><i>AT&amp;T Tech. J.,
+</i></span><span style="font-size: 10pt"></span><span style="font-size: 10pt"><b>64</b></span><span style="font-size: 10pt">,
+(10),
+2413-2434 (1985).
+</span></p><p style="margin-top: 0; margin-bottom: 0.50in"></p>
+</body>
+</html>
+

+ 1 - 1
sys/doc/sam/sam.ms

@@ -21,7 +21,7 @@
 .sp
 ..
 .de XP
-.ie h .html - <center><img src="sam.\\$1.png" /></center>
+.ie h .html - <center><img src="\\$1.gif" /></center>
 .el .BP \\$1.ps \\$2
 ..
 .TL

File diff suppressed because it is too large
+ 392 - 391
sys/doc/sam/sam.ps


+ 4863 - 0
sys/doc/sam/sam.tut.out

@@ -0,0 +1,4863 @@
+x T utf
+x res 720 1 1
+x init
+V0
+p1
+x font 1 R
+x font 2 I
+x font 3 B
+x font 4 BI
+x font 5 CW
+x font 6 H
+x font 7 HI
+x font 8 HB
+x font 9 S1
+x font 10 S
+s10
+f1
+H720
+f3
+s12
+V1230
+h1084cA
+wh116ct
+40u67t40o60r53i34a60lw64f40o60rw83t40h67ewf5
+83s72a72mwf3
+h102cc
+53o60mh100cm
+h100ca
+60n67dw97l34a60n67g60u67a60g60en150 0
+H720
+f2
+s10
+V1470
+h1978cR
+61o50bw75P61i28k44en120 0
+H720
+f1
+V1650
+h1812cB
+67e44l28lw53L61a44b50o50r33a44t28o50r33i28e44sn120 0
+H720
+V1770
+h1526cM
+89u50r33r33a44yw75H72i28l28l28,w50N72e44ww97J39e44r33s39e44yw750507509507504n120 0
+H720
+f2
+V2150
+h1923cA
+61B61S50T56R61A61C67Tn140 0
+H720
+f5
+V2410
+h610cs
+60a60mwf1
+86i28sw65a44nw76i28n50t28e44r33a44c44t28i28v50ew70t28e44x50tw54e44d50i28t28o50rw59w72i28t28hw76aw70c44o50m78m78a44n50dw77l28a44n50g50u50a44g50ew71t28h50a44tw55m78a44k50e44sw66h50e44a44v50yw77u50s39ew71o50fn120 0
+H720
+V2530
+h360cr
+33e44g50u50l28a44rw67e44x50p50r33e44s39s39i28o50n50s39.w84A72l28t28h50o50u50g50hw84t28h50ew78l28a44n50g50u50a44g50ew78i28sw73s39y50n50t28a44c44t28i28c44a44l28l28yw84s39i28m78i28l28a44rw66t28owf5
+83e60df1
+60(33150)33,w58t28h50ew77d50e44t28a44i28l28sn120 0
+H720
+V2650
+h360ca
+44r33ew77i28n50t28e44r33e44s39t28i28n50g50l28yw83d50i28f33f33e44r33e44n50t28.w83T61h50i28sw72t28u50t28o50r33i28a44lw61i28n50t28r33o50d50u50c44e44sw72t28h50ew77c44o50m78m78a44n50dw83l28a44n50g50u50a44g50e44,w58b50u50tw61d50o50e44sw72n50o50tn120 0
+H720
+V2770
+h360cd
+50i28s39c44u50s39sw85t28h50ew90s39c44r33e44e44nw96a44n50dw96m78o50u50s39ew89i28n50t28e44r33f33a44c44e44.w95W94i28t28hw95a44p50o50l28o50g50i28e44sw84t28ow95t28h50o50s39ew89u50n50f33a44m78i28l28i28a44rw78w72i28t28hw95t28h50en120 0
+H720
+V2890
+h360cN
+72i28n50t28hw88E61d50i28t28i28o50nw88B67l28i28tw66s39o50f33t28w72a44r33e44,w63i28tw67i28sw78a44s39s39u50m78e44dw89t28h50a44tw67t28h50ew83s39i28m78i28l28a44r33i28t28yw89o50fwf5
+72s60a60mwf1
+99t28owf5
+89m60u60xf1
+60(33950)w72a44tw67t28h50i28sn120 0
+H720
+V3010
+h360cl
+28e44v50e44lw53m78a44k50e44swf5
+64s60a60mf1
+60'33sw64m78o50u50s39ew69l28a44n50g50u50a44g50ew69e44a44s39yw75t28ow75l28e44a44r33n50.n120 0
+H720
+V3166
+h610cT
+61h50ewf5
+81s60a60mwf1
+97c44o50m78m78a44n50dw87l28a44n50g50u50a44g50ew81a44p50p50l28i28e44sw76i28d50e44n50t28i28c44a44l28l28yw87t28ow88t28w72ow88e44n50v50i28r33o50n50m78e44n50t28s39:w66w72h50e44nw88r33u50nh50Chy
+n120 0
+H720
+V3286
+h360cn
+50i28n50gwf5
+95s60a60mwf1
+h104co
+50nw94a44nw94o50r33d50i28n50a44r33yw94t28e44r33m78i28n50a44lw72(f2
+33v44i28awf5
+94s60a60mwh120c-
+60df1
+60)33,w69a44n50dw94i28nw94t28h50ew88c44o50m78m78a44n50dw94w72i28n50d50o50wwh116co
+50fw77an120 0
+H720
+f2
+V3406
+h360cd
+50o50w67n50l28o50a50d50e44dwf5
+75s60a60mf1
+60,w50t28h50a44tw53i28s39,w50o50n50ew69u50s39i28n50gw75t28h50ew69b50i28t28m78a44pw75d50i28s39p50l28a44yw75a44n50dw75m78o50u50s39e44.n120 0
+H720
+f3
+V3766
+cI
+39n56t33r44o50d56u56c44t33i28o50nn120 0
+H720
+f1
+V3922
+h250cT
+61h50i28sw64t28u50t28o50r33i28a44lw53d50e44s39c44r33i28b50e44sw65t28h50ew70c44o50m78m78a44n50dw76l28a44n50g50u50a44g50ew70o50fwf5
+59s60a60mf1
+60,w51a44nw76i28n50t28e44r33a44c44t28i28v50ew70t28e44x50tw54e44d50i28t28o50rw59t28h50a44tw54r33u50n50sw65o50nw76B67l28i28t28sw65a44n50dn120 0
+H720
+V4042
+cs
+39o50m78ew77c44o50m78p50u50t28e44r33sw71w72i28t28hw82b50i28t28m78a44pw82d50i28s39p50l28a44y50s39.w82F56o50rw65m78o50s39tw60e44d50i28t28i28n50gw82t28a44s39k50s39,w57t28h50ew76m78o50u50s39e44-33b50a44s39e44dw82e44d50i28t28i28n50gw82f33e44a44t28u50r33e44sw71a44r33ew76s39u50f33f33ih28Chy
+n120 0
+H720
+V4162
+cc
+44i28e44n50t28,w50a44n50dw75t28h50e44yw75a44r33ew69e44a44s39yw75t28ow75u50s39ew69a44n50dw75t28ow75l28e44a44r33n50.n120 0
+H720
+V4318
+h250cT
+61h50ew75c44o50m78m78a44n50dw82l28a44n50g50u50a44g50ew76i28sw71o50f33t28e44nw82u50s39e44f33u50l28,w57h50o50w72e44v50e44r33,w57p50a44r33t28i28c44u50l28a44r33l28yw82w72h50e44nw82m78a44k50i28n50gw82g50l28o50b50a44lw60c44h50a44n50g50e44s39.w82U72n50l28i28k50en120 0
+H720
+V4438
+ct
+28h50ew73c44o50m78m78a44n50d50sw68i28nwf5
+79e60df1
+60,w54w72h50i28c44hw79a44r33ew73n50e44c44e44s39s39a44r33yw79t28ow78m78a44k50ew72c44h50a44n50g50e44s39,wf5
+53s60a60mwf1
+88c44o50m78m78a44n50d50sw67t28e44n50dw78t28ow78b50ew72u50s39e44dw78o50n50l28yw78f33o50rw61c44o50mh78Chy
+n120 0
+H720
+V4558
+cp
+50l28i28c44a44t28e44dw79o50rw62r33e44p50e44t28i28t28i28v50ew74e44d50i28t28i28n50gw80t28a44s39k50s39.w80I33tw58i28sw69i28nw80t28h50e44s39ew74m78o50r33ew74i28n50v50o50l28v50e44dw80u50s39e44sw69t28h50a44tw58t28h50ew74d50i28f33f33e44r33e44n50c44e44sw69b50e44t28w72e44e44nwf5
+80s60a60mwf1
+90a44n50dn120 0
+H720
+V4678
+co
+50t28h50e44rw58t28e44x50tw53e44d50i28t28o50r33sw64a44r33ew69m78o50s39tw53e44v50i28d50e44n50t28.n120 0
+H720
+f5
+V4834
+h250cs
+60a60mf1
+60'33sw67l28a44n50g50u50a44g50ew72m78a44k50e44sw67i28tw56e44a44s39yw78t28ow78d50ow78s39o50m78ew72t28h50i28n50g50sw67t28h50a44tw57o50t28h50e44rw62e44d50i28t28o50r33s39,w54i28n50c44l28u50d50i28n50gw79p50r33o50g50r33a44m78sw68l28i28k50ewf5
+73s60e60dwf1
+89a44n50dn120 0
+H720
+f5
+V4954
+ca
+60w60kf1
+60,w59d50ow84n50o50tw62h50a44n50d50l28ew78g50r33a44c44e44f33u50l28l28y50,w59s39ow84t28h50i28sw73t28u50t28o50r33i28a44lw62s39e44r33v50e44sw73p50a44r33t28l28yw83a44sw72aw77l28e44s39s39o50nw83i28nwf5
+83s60a60mf1
+60'33sw72m78a44n50n50e44rw66o50fw66m78a44n50i28p50u50l28a44t28i28n50gn120 0
+H720
+V5074
+ct
+28e44x50t28.w85T61h50ew80e44x50a44m78p50l28e44sw75b50e44l28o50wwh108ct
+28h50e44r33e44f33o50r33ew80c44o50n50c44e44n50t28r33a44t28ew80e44n50t28i28r33e44l28yw86o50nw86t28h50ew80l28a44n50g50u50a44g50e44,w61a44s39s39u50m78i28n50gw86t28h50a44tw64f33a44c44i28l28i28t28yw86w72i28t28hw86t28h50en120 0
+H720
+V5194
+cu
+50s39ew74o50fw63t28h50ew74m78o50u50s39ew74i28nwf5
+80s60a60mwf1
+89i28sw68a44tw57w72o50r33s39tw57e44a44s39yw79t28ow79p50i28c44kw79u50p50.w79I33nw79f33a44c44t28,wf5
+54s60a60mwf1
+89c44a44nw79b50ew73r33u50nw79w72i28t28h50o50u50tw57t28h50ew73m78o50u50s39ew73a44tw57a44l28lw57(33n50o50tn120 0
+H720
+f2
+V5314
+cd
+50o50w67n50l28o50a50d50e44df1
+50)33,w55b50yw80s39p50e44c44i28f33y50i28n50gw80t28h50ewf5
+74-60dwf1
+90f33l28a44g50,w55a44n50dw80i28tw58i28sw69t28h50i28sw69d50o50m78a44i28nw80t28h50a44tw58t28h50ew74t28u50t28o50r33i28a44lw59o50c44c44u50p50i28e44s39;w59t28h50ew75c44o50m78m78a44n50dw81l28a44nh50Chy
+n120 0
+H720
+V5434
+cg
+50u50a44g50ew69i28nw75t28h50e44s39ew69m78o50d50e44sw64a44r33ew69i28d50e44n50t28i28c44a44l28.n120 0
+H720
+V5590
+h250cA
+wh102cw
+72o50r33dw80t28ow81t28h50ew75U72n50i28xw81a44d50e44p50t28:w59a44l28t28h50o50u50g50hwf5
+81s60a60mwf1
+91i28sw70s39y50n50t28a44c44t28i28c44a44l28l28yw81v50e44r33yw81s39i28m78i28l28a44rw64t28owf5
+81e60df1
+60,w56i28tw59i28sw70f33u50n50d50a44m78e44n50t28a44l28l28yw81a44n50dn120 0
+H720
+V5710
+cd
+50e44l28i28b50e44r33a44t28e44l28yw78d50i28f33f33e44r33e44n50tw56i28nw77d50e44s39i28g50nw77a44n50dw77d50e44t28a44i28l28e44dw77s39e44m78a44n50t28i28c44s39.w77Y72o50uw77m78i28g50h50tw55u50s39ew71k50n50o50w72l28e44d50g50ew71o50fwf5
+60e60dwf1
+87t28ow77p50r33e44d50i28c44tw55h50o50ww99t28h50en120 0
+H720
+V5830
+cs
+39u50b50s39t28i28t28u50t28ew70c44o50m78m78a44n50dw76w72o50r33k50s39,w51b50u50tw55y50o50u50'33dw77o50n50l28yw77b50ew71r33i28g50h50tw55i28fw60y50o50uw77h50a44dw77u50s39e44dw77s39o50m78ew71u50n50d50e44r33s39t28a44n50d50i28n50gw77o50fwf5
+60s60a60mf1
+60'33sw66w72o50r33k50i28n50g50sn120 0
+H720
+V5950
+ct
+28ow85i28n50f33l28u50e44n50c44ew79y50o50u50rw68p50r33e44d50i28c44t28i28o50n50.w85B67ew79p50a44r33t28i28c44u50l28a44r33l28yw85c44a44r33e44f33u50lw63a44b50o50u50tw63i28d50i28o50m78s39.w85I33d50i28o50m78sw74f33o50r33mwh112ci
+28nw84c44u50r33i28o50u50sw73n50o50o50k50sw73o50fw67l28a44nh50Chy
+n120 0
+H720
+V6070
+cg
+50u50a44g50e44sw78a44n50dw89d50e44p50e44n50dw89o50nw89u50n50d50e44p50e44n50d50a44b50l28ew83p50e44c44u50l28i28a44r33i28t28i28e44s39.wf5
+89e60dwf1
+99i28d50i28o50m78sw78s39i28m78p50l28yw89d50o50n50'33tw68w72o50r33kw90i28nwf5
+90s60a60mf1
+60:wf5
+68160,60$60s60/60a60/60b60/n120 0
+H720
+f1
+V6190
+cm
+78a44k50e44sw65o50n50ew70s39u50b50s39t28i28t28u50t28i28o50nw76i28nw76t28h50ew70w72h50o50l28ew70f33i28l28e44,w51n50o50tw54o50n50ew70p50e44rw59l28i28n50e44.wf5
+76s60a60mwf1
+86h50a44sw64i28t28sw64o50w72nw75i28d50i28o50m78s39.w75M89u50c44hw75o50fw58t28h50ew69p50u50r33p50o50s39ew69o50fn120 0
+H720
+V6310
+ct
+28h50i28sw64t28u50t28o50r33i28a44lw53i28sw64t28ow75p50u50b50l28i28s39hw75t28h50e44mwh103ca
+44n50dw75m78a44k50ew69f33l28u50e44n50c44yw75i28nwf5
+75s60a60mwf1
+85aw69m78a44t28t28e44rw58o50fw58l28e44a44r33n50i28n50g50,w50n50o50tw53c44u50n50n50i28n50g50.n120 0
+H720
+V6466
+h250cT
+61h50ew75t28u50t28o50r33i28a44lw59d50e44p50e44n50d50sw70o50nw81f33a44m78i28l28i28a44r33i28t28yw81w72i28t28hw81r33e44g50u50l28a44rw64e44x50p50r33e44s39s39i28o50n50s39,w56a44l28t28h50o50u50g50hw81s39o50m78ew76e44x50p50e44r33i28e44n50c44ew76w72i28t28hw82aw76m78o50r33en120 0
+H720
+V6586
+ct
+28r33a44d50i28t28i28o50n50a44lw55U72n50i28xw77e44d50i28t28o50rw60m78a44yw77b50ew71h50e44l28p50f33u50l28.w77T61ow77a44i28dw77r33e44a44d50e44r33sw66f33a44m78i28l28i28a44rw59w72i28t28hwf5
+76e60df1
+60,w51Iw59h50a44v50ew70p50o50i28n50t28e44dw76o50u50tw54i28nw76s39q50u50a44r33ew70b50r33a44c44kh50Chy
+n120 0
+H720
+V6706
+ce
+44t28sw75[33]w69s39o50m78ew80o50fw69t28h50ew80r33e44l28e44v50a44n50tw65d50i28f33f33e44r33e44n50c44e44sw76b50e44t28w72e44e44nwf5
+87e60dwf1
+97a44n50dwf5
+87s60a60mf1
+60.w87R67e44a44dw87t28h50e44s39ew81c44o50m78m78e44n50t28sw76o50n50l28yw87i28fw70y50o50uw87w72i28s39hw87t28on120 0
+H720
+V6826
+cu
+50n50d50e44r33s39t28a44n50dw84t28h50ew78d50i28f33f33e44r33e44n50c44e44s39;w62t28h50ew77l28e44s39s39o50nw83i28sw72a44b50o50u50twf5
+61s60a60mf1
+60,w58n50o50twf5
+61s60a60mwf2
+93v44s39.wf5
+83e60df1
+60.w83A72n50o50t28h50e44rw66t28y50p50o50g50r33a44p50h50i28cw77c44o50n50v50e44n50t28i28o50nw83i28sn120 0
+x font 0 CI
+f1
+H720
+V6946
+ct
+28h50a44tw53o50u50t28p50u50tw53a44p50p50e44a44r33sw64i28nwf5
+75t60h60i60swh120cf
+60o60n60t60,wf1
+85w72h50i28l28ew69t28y50p50e44dw75i28n50p50u50tw53a44p50p50e44a44r33sw64a44swx font 0 CI
+f0
+64s60l60a60n60t60ywh120ct
+60e60x60t60.n120 0
+H720
+f1
+V7102
+h250cN
+72o50m78e44n50c44l28a44t28u50r33e44:wf5
+56s60a60mwf1
+88k50e44e44p50sw67aw72c44o50p50yw78o50fw61t28h50ew72t28e44x50tw56i28tw56i28sw67e44d50i28t28i28n50g50.w78T61h50i28sw67c44o50p50yw78i28sw67c44a44l28l28e44dw78awf2
+72f28i28l28ef1
+44.w78T61ow79a44v50o50i28dw79c44o50n50f33uh50Chy
+n120 0
+H720
+V7222
+cs
+39i28o50n50,w50Iw58h50a44v50ew69c44a44l28l28e44dw75t28h50ew69p50e44r33m78a44n50e44n50tw53s39t28o50r33a44g50ew69o50nw75d50i28s39cw69awf2
+69U72n50i28xw69f28i28l28e44.n120 0
+V7920
+p2
+x font 1 R
+x font 2 I
+x font 3 B
+x font 4 BI
+x font 5 CW
+x font 6 H
+x font 7 HI
+x font 8 HB
+x font 9 S1
+x font 10 S
+s10
+f1
+H720
+V480
+h2077Chy
+w33 252w50 h25Chy
+wn120 0
+H720
+f3
+V840
+cT
+67e44x50tn120 0
+H720
+f1
+V996
+h250cT
+61ow98g50e44tw76s39t28a44r33t28e44d50,w74w72ew93n50e44e44dw99s39o50m78ew93t28e44x50tw77t28ow99p50l28a44yw99w72i28t28h50.w99A72n50yw99t28e44x50tw77w72i28l28lw77d50o50;w77t28r33yw99s39o50m78e44t28h50i28n50gw99f33r33o50mwh127cJ
+39a44m78e44sn120 0
+H720
+V1116
+cG
+72o50s39l28i28n50g50'33sw64E61m78a44c44sw64m78a44n50u50a44l28:n120 0
+H720
+f5
+V1296
+h360c$
+wx font 0 CI
+f0
+h120cs
+60a60mwh120c-
+60dn120 0
+H720
+V1416
+h360ca
+n120 0
+H720
+V1536
+h360cT
+60h60i60swh120cm
+60a60n60u60a60lwh120ci
+60swh120co
+60r60g60a60n60i60z60e60dwh120ci
+60nwh120ca
+wh120cr
+60a60t60h60e60rwh120ch
+60a60p60h60a60z60a60r60dwh120cm
+60a60n60n60e60r60.wh180cT
+60h60ewh120cf
+60i60r60s60tn120 0
+H720
+V1656
+h360cs
+60e60v60e60r60a60lwh120cs
+60e60c60t60i60o60n60swh120cw
+60e60r60ewh120cw
+60r60i60t60t60e60nwh120ch
+60a60s60t60i60l60ywh120ci
+60nwh120ca
+60nwh120ca
+60t60t60e60m60p60twh120ct
+60owh120cp
+60r60o60v60i60d60ewh120ca
+n120 0
+H720
+V1776
+h360cg
+60e60n60e60r60a60lwh120ci
+60n60t60r60o60d60u60c60t60i60o60nwh120ct
+60owh120ct
+60h60ewh120cc
+60o60m60m60a60n60d60swh120ci
+60nwh120cE
+60m60a60c60swh120ca
+60n60dwh120ct
+60owh120ct
+60r60ywh120ct
+60owh120cs
+60h60o60wn120 0
+H720
+V1896
+h360ct
+60h60ewh120cm
+60e60t60h60o60dwh120ci
+60nwh120ct
+60h60ewh120cm
+60a60d60n60e60s60swh120ct
+60h60a60twh120ci
+60swh120ct
+60h60ewh120cE
+60m60a60c60swh120cc
+60o60m60m60a60n60dwh120cs
+60t60r60u60c60t60u60r60e60.n120 0
+H720
+V2016
+h360c.
+n120 0
+H720
+V2196
+cs
+60a60mwh126c-
+60dwf1
+91s39t28a44r33t28swf5
+71s60a60mwf1
+92r33u50n50n50i28n50g50.w82T61h50ewf5
+76awf1
+92c44o50m78m78a44n50dw82a44d50d50sw71t28e44x50tw60u50n50t28i28lw60aw76l28i28n50ew76c44o50n50t28a44i28n50i28n50gw82j28u50s39tw60aw76p50e44r33i28o50d50,w57a44n50dw82s39e44t28sw71t28h50en120 0
+H720
+f2
+V2316
+cc
+44u50r39r39e44n50tw63t28e44x44twf1
+63(33a44l28s39ow85c44a44l28l28e44dwf2
+85d50o50tf1
+28)w68t28ow85w72h50a44tw63w72a44sw74t28y50p50e44dwh85Cem
+wh135ce
+44v50e44r33y50t28h50i28n50gw85b50e44t28w72e44e44nw85t28h50ewf5
+79awf1
+94a44n50dw84t28h50ew78p50e44r33i28o50d50.w84[f5
+33e60dwf1
+94w72o50u50l28dn120 0
+H720
+V2436
+cl
+28e44a44v50ew69d50o50tw53s39e44tw53t28ow75o50n50l28yw75t28h50ew69l28a44s39tw53l28i28n50e44.25]w83T61h50ewf5
+69pwf1
+85c44o50m78m78a44n50dw75p50r33i28n50t28sw64t28h50ew69c44u50r33r33e44n50tw53t28e44x50t28:n120 0
+H720
+x font 0 CI
+f0
+V2616
+h360cp
+n120 0
+H720
+f5
+V2736
+h360cT
+60h60i60swh120cm
+60a60n60u60a60lwh120ci
+60swh120co
+60r60g60a60n60i60z60e60dwh120ci
+60nwh120ca
+wh120cr
+60a60t60h60e60rwh120ch
+60a60p60h60a60z60a60r60dwh120cm
+60a60n60n60e60r60.wh180cT
+60h60ewh120cf
+60i60r60s60tn120 0
+H720
+V2856
+h360cs
+60e60v60e60r60a60lwh120cs
+60e60c60t60i60o60n60swh120cw
+60e60r60ewh120cw
+60r60i60t60t60e60nwh120ch
+60a60s60t60i60l60ywh120ci
+60nwh120ca
+60nwh120ca
+60t60t60e60m60p60twh120ct
+60owh120cp
+60r60o60v60i60d60ewh120ca
+n120 0
+H720
+V2976
+h360cg
+60e60n60e60r60a60lwh120ci
+60n60t60r60o60d60u60c60t60i60o60nwh120ct
+60owh120ct
+60h60ewh120cc
+60o60m60m60a60n60d60swh120ci
+60nwh120cE
+60m60a60c60swh120ca
+60n60dwh120ct
+60owh120ct
+60r60ywh120ct
+60owh120cs
+60h60o60wn120 0
+H720
+V3096
+h360ct
+60h60ewh120cm
+60e60t60h60o60dwh120ci
+60nwh120ct
+60h60ewh120cm
+60a60d60n60e60s60swh120ct
+60h60a60twh120ci
+60swh120ct
+60h60ewh120cE
+60m60a60c60swh120cc
+60o60m60m60a60n60dwh120cs
+60t60r60u60c60t60u60r60e60.n120 0
+H720
+f1
+V3276
+c[
+33A72g50a44i28n50,wf5
+55e60dwf1
+90w72o50u50l28dw80p50r33i28n50tw58o50n50l28yw80t28h50ew74l28a44s39tw58l28i28n50e44.25]w88T61h50ewf5
+75awf1
+91c44o50m78m78a44n50dw81a44d50d50sw70i28t28sw70t28e44x50twf2
+59a50f28t28e44rwf1
+70d50o50t28;w59t28h50ewf5
+75iwf1
+91c44o50m78m78a44n50dw81i28sw70l28i28k50en120 0
+H720
+f5
+V3396
+ca
+60,wf1
+85b50u50tw53a44d50d50sw64t28h50ew69t28e44x50twf2
+53b50e44f28o50r39ewf1
+69d50o50t28.n120 0
+H720
+x font 0 CI
+f0
+V3576
+h360ci
+n120 0
+H720
+V3696
+h360cI
+60n60t60r60o60d60u60c60t60i60o60nn120 0
+H720
+V3816
+h360c.
+n120 0
+H720
+V3936
+h360cp
+n120 0
+H720
+f5
+V4056
+h360cI
+60n60t60r60o60d60u60c60t60i60o60nn120 0
+H720
+f1
+V4236
+cT
+61h50e44r33ew69i28sw64a44l28s39ow75awf5
+69cwf1
+85c44o50m78m78a44n50dw75t28h50a44tw53c44h50a44n50g50e44sw64(33r33e44p50l28a44c44e44s39)w58t28h50ew69c44u50r33r33e44n50tw53t28e44x50t28,w50a44n50dwf5
+75dwf1
+85t28h50a44tw53d50e44l28e44t28e44sw65i28t28;w54t28h50e44s39ew70a44r33ew70i28l28l28u50s39t28r33a44t28e44dn120 0
+H720
+V4356
+cb
+50e44l28o50w72.n120 0
+H720
+V4512
+h250cT
+61ow76s39e44ew70a44l28lw54t28h50ew70t28e44x50t28,w51w72ew70c44a44nw76s39p50e44c44i28f33yw76w72h50a44tw54t28e44x50tw54t28ow77p50r33i28n50t28;w55f33o50rw60t28h50ew71m78o50m78e44n50t28,w52s39u50f33f33i28c44ew71i28tw55t28ow77s39a44yw77t28h50a44twx font 0 CI
+f0
+55060,60$wf1
+87s39p50e44c44ih28Chy
+n120 0
+H720
+V4632
+cf
+33i28e44sw64t28h50ew69e44n50t28i28r33ew69f33i28l28e44.w75[f5
+33e60dwf1
+85u50s39e44r33sw64w72o50u50l28dw75p50r33o50b50a44b50l28yw75t28y50p50ewx font 0 CI
+f0
+69160,60$f1
+60,w50w72h50i28c44hw75i28nw75p50r33a44c44t28i28c44ew69i28sw64t28h50ew69s39a44m78ew69t28h50i28n50g50,w50b50u50tw53s39e44ew69b50e44l28o50w72.25]n120 0
+H720
+x font 0 CI
+f0
+V4812
+h360c0
+60,60$60pn120 0
+H720
+f5
+V4932
+h360cI
+60n60t60r60o60d60u60c60t60i60o60nn120 0
+H720
+V5052
+h360cT
+60h60i60swh120cm
+60a60n60u60a60lwh120ci
+60swh120co
+60r60g60a60n60i60z60e60dwh120ci
+60nwh120ca
+wh120cr
+60a60t60h60e60rwh120ch
+60a60p60h60a60z60a60r60dwh120cm
+60a60n60n60e60r60.wh180cT
+60h60ewh120cf
+60i60r60s60tn120 0
+H720
+V5172
+h360cs
+60e60v60e60r60a60lwh120cs
+60e60c60t60i60o60n60swh120cw
+60e60r60ewh120cw
+60r60i60t60t60e60nwh120ch
+60a60s60t60i60l60ywh120ci
+60nwh120ca
+60nwh120ca
+60t60t60e60m60p60twh120ct
+60owh120cp
+60r60o60v60i60d60ewh120ca
+n120 0
+H720
+V5292
+h360cg
+60e60n60e60r60a60lwh120ci
+60n60t60r60o60d60u60c60t60i60o60nwh120ct
+60owh120ct
+60h60ewh120cc
+60o60m60m60a60n60d60swh120ci
+60nwh120cE
+60m60a60c60swh120ca
+60n60dwh120ct
+60owh120ct
+60r60ywh120ct
+60owh120cs
+60h60o60wn120 0
+H720
+V5412
+h360ct
+60h60ewh120cm
+60e60t60h60o60dwh120ci
+60nwh120ct
+60h60ewh120cm
+60a60d60n60e60s60swh120ct
+60h60a60twh120ci
+60swh120ct
+60h60ewh120cE
+60m60a60c60swh120cc
+60o60m60m60a60n60dwh120cs
+60t60r60u60c60t60u60r60e60.n120 0
+H720
+f1
+V5592
+cE
+61x50c44e44p50tw67f33o50rw72t28h50ewf5
+83wwf1
+99c44o50m78m78a44n50dw89d50e44s39c44r33i28b50e44dw89b50e44l28o50w72,wf2
+64a50l28lwf1
+67c44o50m78m78a44n50d50s39,w64i28n50c44l28u50d50i28n50gwf5
+89pf1
+60,w64s39e44tw67d50o50tw67t28ow89t28h50ew83t28e44x50tw68t28h50e44yw90t28o50u50c44h50.n120 0
+H720
+V5712
+cT
+61h50u50s39,wf5
+54awf1
+89a44n50dwf5
+79iwf1
+89s39e44tw57d50o50tw57t28ow79t28h50ew73n50e44wwh101ct
+28e44x50t28,wf5
+54pwf1
+89t28ow79t28h50ew73t28e44x50tw57p50r33i28n50t28e44d50,w54a44n50dw79s39ow79o50n50.w78S56i28m78i28l28a44r33l28y50,w53a44l28lw56c44o50m78m78a44n50d50sw67(33e44x50c44e44p50twf5
+56wf1
+60)n120 0
+H720
+V5832
+cb
+50yw88d50e44f33a44u50l28tw66o50p50e44r33a44t28ew82o50nw88t28h50ew82c44u50r33r33e44n50tw66t28e44x50tw66[33u50n50l28i28k50ewf5
+83e60df1
+60,w64f33o50rw72w72h50i28c44hw89s39o50m78ew83c44o50m78m78a44n50d50sw78(33s39u50c44hw89a44swf5
+78gf1
+60)w72d50e44f33a44u50l28tw67t28ow89t28h50en120 0
+H720
+V5952
+ce
+44n50t28i28r33ew69f33i28l28e44]33.n120 0
+H720
+V6108
+h250cT
+61h50i28n50g50sw89a44r33ew94n50o50tw78g50o50i28n50gwh100ct
+28owh100cg
+50e44tw78v50e44r33ywh100ci
+28n50t28e44r33e44s39t28i28n50gwh100cu
+50n50t28i28lw78w72ew94c44a44nwh100cs
+39e44tw78d50o50tw78a44r33b50i28t28r33a44r33i28l28y50.wh100cT
+61h50i28sw89i28sw89d50o50n50ew95b50yn120 0
+H720
+f2
+V6228
+ca
+50d50d50r39e44s39s39e44sf1
+39,w50w72h50i28c44hw75s39p50e44c44i28f33yw75aw69p50i28e44c44ew69o50fw58t28h50ew69f33i28l28e44.w75T61h50ew69a44d50d50r33e44s39swf5
+641f1
+60,w50f33o50rw58e44x50a44m78p50l28e44,w50s39e44t28sw64d50o50tw53t28ow75t28h50ew69f33i28r33s39tw53l28i28n50ew69o50fw58t28h50ew69f33i28l28e44.n120 0
+H720
+x font 0 CI
+f0
+V6408
+h360c1
+60pn120 0
+H720
+f5
+V6528
+h360cI
+60n60t60r60o60d60u60c60t60i60o60nn120 0
+H720
+x font 0 CI
+f0
+V6648
+h360cc
+n120 0
+H720
+V6768
+h360cP
+60r60e60a60m60b60l60en120 0
+H720
+V6888
+h360c.
+n120 0
+H720
+f1
+V7068
+cT
+61h50ewf5
+76cwf1
+92c44o50m78m78a44n50dw82d50i28d50n50'33tw60n50e44e44dw82t28ow82s39p50e44c44i28f33yw82d50o50t28;w60t28h50ewf5
+76pwf1
+92l28e44f33tw60i28tw60o50nw82l28i28n50ew76o50n50e44.w83I33t28'33sw72t28h50e44r33e44f33o50r33ew77e44a44s39yw83t28ow83d50e44l28e44t28ew77t28h50ew77f33i28r33s39tn120 0
+H720
+V7188
+cl
+28i28n50ew69u50t28t28e44r33l28y50;w53t28h50ew69l28a44s39tw53c44o50m78m78a44n50dw75l28e44f33tw53d50o50tw53s39e44tw53t28ow75l28i28n50ew69o50n50e44:n120 0
+V7920
+p3
+x font 1 R
+x font 2 I
+x font 3 B
+x font 4 BI
+x font 5 CW
+x font 6 H
+x font 7 HI
+x font 8 HB
+x font 9 S1
+x font 10 S
+s10
+f1
+H720
+V480
+h2077Chy
+w33 253w50 h25Chy
+wn120 0
+H720
+x font 0 CI
+f0
+V900
+h360cd
+n120 0
+H720
+V1020
+h360c1
+60pn120 0
+H720
+f5
+V1140
+h360cT
+60h60i60swh120cm
+60a60n60u60a60lwh120ci
+60swh120co
+60r60g60a60n60i60z60e60dwh120ci
+60nwh120ca
+wh120cr
+60a60t60h60e60rwh120ch
+60a60p60h60a60z60a60r60dwh120cm
+60a60n60n60e60r60.wh180cT
+60h60ewh120cf
+60i60r60s60tn120 0
+H720
+f1
+V1320
+c(
+33L61i28n50ew69n50u50m78b50e44r33sw64c44h50a44n50g50ew69t28ow75r33e44f33l28e44c44tw53c44h50a44n50g50e44sw64t28ow75t28h50ew69f33i28l28e44.25)n120 0
+H720
+V1476
+h250cT
+61h50ew75a44d50d50r33e44s39swf5
+70/f2
+60t28e44x44tf5
+28/wf1
+91s39e44t28sw70d50o50tw59t28ow81t28h50ew75f33i28r33s39tw59a44p50p50e44a44r33a44n50c44ew75o50fwf2
+64t28e44x44tf1
+28,w56a44f33t28e44rw64d50o50t28.w82[f5
+33e60dwf1
+92m78a44t28c44h50e44sw71t28h50ew76f33i28r33s39tw60l28i28n50ew76c44o50nh50Chy
+n120 0
+H720
+V1596
+ct
+28a44i28n50i28n50gwf2
+75t28e44x44tf1
+28.25]w83I33fwf2
+58t28e44x44twf1
+53i28sw64n50o50tw53f33o50u50n50d50,w50t28h50ew69s39e44a44r33c44hw75r33e44s39t28a44r33t28sw64a44tw53t28h50ew69b50e44g50i28n50n50i28n50gw75o50fw58t28h50ew69f33i28l28ew69a44n50dw75c44o50n50t28i28n50u50e44sw64u50n50t28i28lw53d50o50t28.n120 0
+H720
+x font 0 CI
+f0
+V1776
+h360c/
+60E60m60a60c60s60/60pn120 0
+H720
+f5
+V1896
+h360cE
+60m60a60c60sn120 0
+H720
+f1
+V2076
+cI
+33t28'33sw65d50i28f33f33i28c44u50l28tw54t28ow76i28n50d50i28c44a44t28ew71t28y50p50o50g50r33a44p50h50i28c44a44l28l28y50,w52b50u50tw55i28nw77t28h50i28sw66e44x50a44m78p50l28ew71n50ow77n50e44w72l28i28n50ew71a44p50p50e44a44r33sw66a44f33t28e44rwf5
+60E60m60a60c60sf1
+60:w55t28h50ew71t28e44x50tw55t28ow77b50en120 0
+H720
+V2196
+cp
+50r33i28n50t28e44dw84i28sw73t28h50ew78s39t28r33i28n50gw84`f5
+33E60m60a60c60sf1
+60'33,w59e44x50a44c44t28l28y50.w84(33T61h50ew78f33i28n50a44lwf5
+62pwf1
+94m78a44yw84b50ew78l28e44f33tw62o50f33fwh67Cem
+wh134ci
+28tw61i28sw72t28h50ew77d50e44f33a44u50l28tw61c44o50m78m78a44n50d50.w83W94h50e44nn120 0
+H720
+V2316
+cd
+50o50w72n50l28o50a44d50e44d50,w51h50o50w72e44v50e44r33,w51t28h50ew70d50e44f33a44u50l28tw54i28sw65i28n50s39t28e44a44dw76t28ow76s39e44l28e44c44tw54t28h50ew70t28e44x50t28,w51t28ow76h50i28g50h50l28i28g50h50tw54i28t28,w51a44n50dw76t28ow76m78a44k50ew70i28tw54v50i28s39i28b50l28ew70b50yw77m78o50vh50Chy
+n120 0
+H720
+V2436
+ci
+28n50gw84t28h50ew78w72i28n50d50o50wwh106co
+50nw84t28h50ew78f33i28l28ew78i28fw67n50e44c44e44s39s39a44r33y50.w84T61h50u50s39,wf5
+59/60E60m60a60c60s60/wf1
+94i28n50d50i28c44a44t28e44sw72o50nw83t28h50ew77d50i28s39p50l28a44yw83t28h50ew77n50e44x50tw61o50c44c44u50r33r33e44n50c44ew77o50fn120 0
+H720
+V2556
+ct
+28h50ew69t28e44x50t28.25)n120 0
+H720
+V2712
+h250cI
+33m78a44g50i28n50ew71w72ew71w72a44n50t28e44dw78t28ow78c44h50a44n50g50ew72t28h50ew72w72o50r33dwf5
+78h60a60p60h60a60z60a60r60dwf1
+88t28owf5
+78t60h60o60u60g60h60t60l60e60s60sf1
+60.w78O72b50v50i28o50u50s39l28y50,w53w72h50a44t28'33sw67n50e44e44d50e44dn120 0
+H720
+V2832
+ci
+28sw68a44n50o50t28h50e44rwf5
+62cwf1
+89c44o50m78m78a44n50d50,w53b50u50tw56t28h50ew72m78e44t28h50o50dw78u50s39e44dw78s39ow78f33a44rw61t28ow78i28n50s39e44r33tw56t28e44x50tw56i28n50c44l28u50d50e44sw67aw72n50e44w72l28i28n50e44.w78T61h50ew72s39y50n50t28a44xw78f33o50rw61i28n50c44l28u50dh50Chy
+n120 0
+H720
+V2952
+ci
+28n50gw89t28e44x50tw67w72i28t28h50o50u50tw67n50e44w72l28i28n50e44sw78i28sw78t28ow89s39u50r33r33o50u50n50dw89t28h50ew83t28e44x50tw67w72i28t28hw89s39l28a44s39h50e44sw78(33w72h50i28c44hw89i28sw78t28h50ew83s39a44m78ew83a44sw79t28h50ew84s39y50n50t28a44xw90f33o50rw73t28e44x50tn120 0
+H720
+V3072
+cs
+39e44a44r33c44h50e44s39,w53b50u50tw55w72h50a44tw55i28sw66g50o50i28n50gw77o50nw77s39h50o50u50l28dw77b50ew71c44l28e44a44rw60f33r33o50mwh105cc
+44o50n50t28e44x50t28)33.w77T61h50ew71t28e44x50tw55m78u50s39tw55a44p50p50e44a44rw60i28m78m78e44d50i28a44t28e44l28yw77a44f33t28e44rw60t28h50ewf5
+71cn120 0
+H720
+f1
+V3192
+c(
+33o50rwf5
+58awf1
+85o50rwf5
+58if1
+60)33.w75G72i28v50e44nw75t28h50i28s39,w50i28tw53i28sw64e44a44s39yw75t28ow75m78a44k50ew69t28h50ew69r33e44q50u50i28r33e44dw75c44h50a44n50g50e44:n120 0
+H720
+x font 0 CI
+f0
+V3372
+h360c/
+60h60a60p60h60a60z60a60r60d60/60c60/60t60h60o60u60g60h60t60l60e60s60s60/n120 0
+H720
+V3492
+h360c1
+60pn120 0
+H720
+f5
+V3612
+h360cT
+60h60i60swh120cm
+60a60n60u60a60lwh120ci
+60swh120co
+60r60g60a60n60i60z60e60dwh120ci
+60nwh120ca
+wh120cr
+60a60t60h60e60rwh120ct
+60h60o60u60g60h60t60l60e60s60swh120cm
+60a60n60n60e60r60.wh180cT
+60h60ewh120cf
+60i60r60s60tn120 0
+H720
+f1
+V3792
+c[
+33C67h50a44n50g50e44sw70c44a44nw81a44l28w72a44y50sw70b50ew75d50o50n50ew76w72i28t28hw82awf5
+76cwf1
+92c44o50m78m78a44n50d50,w57e44v50e44nw82i28fw65t28h50ew76t28e44x50tw60i28sw71s39m78a44l28l28e44rw65t28h50a44nw82aw76l28i28n50e44]33.w82Y72o50u50'33l28lw60f33i28n50dw82t28h50a44tn120 0
+H720
+V3912
+ct
+28h50i28sw74w72a44yw85o50fw68p50r33o50v50i28d50i28n50gw85t28e44x50tw63t28ow85c44o50m78m78a44n50d50sw74i28sw74m78u50c44hw85m78o50r33ew79c44o50m78m78o50nw84t28h50a44nw84i28sw73t28h50ew78m78u50l28t28i28p50l28e44-33l28i28n50e44sw73s39y50n50t28a44x50.w84I33fw67y50o50un120 0
+H720
+V4032
+cw
+72a44n50tw62t28ow84i28n50c44l28u50d50ew78aw78s39l28a44s39hwf5
+84/wf1
+94i28nw84t28h50ew78t28e44x50t28,w60j28u50s39tw63p50r33e44c44e44d50ew79i28tw63w72i28t28hw85aw79b50a44c44k50s39l28a44s39hwf5
+85\f1
+60,w60a44n50dw85u50s39ew79aw79b50a44c44k50s39l28a44s39hw85t28ow85p50r33o50t28e44c44tw63an120 0
+H720
+V4152
+cb
+50a44c44k50s39l28a44s39hw75i28t28s39e44l28f33.n120 0
+H720
+x font 0 CI
+f0
+V4332
+h360c/
+60E60m60a60c60s60/60c60/60E60m60a60c60s60\60\60360660060/n120 0
+H720
+V4452
+h360c4
+60pn120 0
+H720
+f5
+V4572
+h360cg
+60e60n60e60r60a60lwh120ci
+60n60t60r60o60d60u60c60t60i60o60nwh120ct
+60owh120ct
+60h60ewh120cc
+60o60m60m60a60n60d60swh120ci
+60nwh120cE
+60m60a60c60s60\603606600wh120ca
+60n60dwh120ct
+60owh120ct
+60r60ywh120ct
+60owh120cs
+60h60o60wn120 0
+H720
+f1
+V4752
+cW
+94ew69c44o50u50l28dw75a44l28s39ow75m78a44k50ew69t28h50i28sw64p50a44r33t28i28c44u50l28a44rw58c44h50a44n50g50ew69b50yn120 0
+H720
+x font 0 CI
+f0
+V4932
+h360c/
+60E60m60a60c60s60/60a60/60\60\60360660060/n120 0
+H720
+f1
+V5148
+h250cT
+61h50i28sw67i28sw67a44sw67g50o50o50dw78aw72p50l28a44c44ew72a44sw67a44n50yw78t28ow78i28n50t28r33o50d50u50c44ew72t28h50ewf5
+73uwf1
+89c44o50m78m78a44n50d50,w54w72h50i28c44hw79u50n50d50o50e44sw68t28h50ew73l28a44s39tw57c44o50m78m78a44n50d50.w79Awh101cs
+39e44ch44Chy
+n120 0
+H720
+V5268
+co
+50n50dwf5
+75uwf1
+85w72i28l28lw53u50n50d50ow75t28h50ew69p50e44n50u50l28t28i28m78a44t28ew69c44o50m78m78a44n50d50,w50a44n50dw75s39ow75o50n50.n120 0
+H720
+x font 0 CI
+f0
+V5448
+h360cu
+n120 0
+H720
+V5568
+h360c4
+60pn120 0
+H720
+f5
+V5688
+h360cg
+60e60n60e60r60a60lwh120ci
+60n60t60r60o60d60u60c60t60i60o60nwh120ct
+60owh120ct
+60h60ewh120cc
+60o60m60m60a60n60d60swh120ci
+60nwh120cE
+60m60a60c60swh120ca
+60n60dwh120ct
+60owh120ct
+60r60ywh120ct
+60owh120cs
+60h60o60wn120 0
+H720
+x font 0 CI
+f0
+V5808
+h360cu
+n120 0
+H720
+V5928
+h360c3
+60pn120 0
+H720
+f5
+V6048
+h360cT
+60h60i60swh120cm
+60a60n60u60a60lwh120ci
+60swh120co
+60r60g60a60n60i60z60e60dwh120ci
+60nwh120ca
+wh120cr
+60a60t60h60e60rwh120ch
+60a60p60h60a60z60a60r60dwh120cm
+60a60n60n60e60r60.wh180cT
+60h60ewh120cf
+60i60r60s60tn120 0
+H720
+f1
+V6228
+cU
+72n50d50o50i28n50gw75c44a44nw75o50n50l28yw75b50a44c44kw75u50p50;w53t28h50e44r33ew69i28sw64n50ow75w72a44yw75t28ow75u50n50d50ow75aw69p50r33e44v50i28o50u50swf5
+64uf1
+60.n120 0
+H720
+f3
+V6468
+cA
+72d56d56r44e44s39s39e44sn120 0
+H720
+f1
+V6624
+h250cW
+94e44'33v50ew76s39e44e44nw83t28h50ew77s39i28m78p50l28e44s39tw61f33o50r33m78sw72o50fw66a44d50d50r33e44s39s39e44s39,w58b50u50tw61t28h50e44r33ew77i28sw72m78o50r33ew77t28ow83l28e44a44r33nw83b50e44f33o50r33ew77w72ew77c44a44nw83g50e44tw61t28o50ow83m78u50c44hn120 0
+H720
+V6744
+cf
+33u50r33t28h50e44r33.w84A72nw84a44d50d50r33e44s39sw73s39e44l28e44c44t28sw73aw78r33e44g50i28o50nw84i28nw83t28h50ew77f33i28l28ewh77Cem
+wh133ca
+w77s39u50b50s39t28r33i28n50gwh83Cem
+wh133ca
+44n50dw83t28h50e44r33e44f33o50r33ew77m78u50s39tw61d50e44f33i28n50ew77t28h50ew77b50e44g50i28n50n50i28n50gn120 0
+H720
+V6864
+ca
+44n50dw79t28h50ew73e44n50dw79o50fw62aw73r33e44g50i28o50n50.w79T61h50u50s39,w54t28h50ew73a44d50d50r33e44s39swf5
+681603wf1
+89s39e44l28e44c44t28sw68f33r33o50mwh107ct
+28h50ew73b50e44g50i28n50n50i28n50gw79o50fw62l28i28n50ew74t28h50i28r33t28e44e44nw80t28ow80t28h50ew74e44n50dw80o50fw63l28i28n50en120 0
+H720
+V6984
+ct
+28h50i28r33t28e44e44n50,w50a44n50dwf5
+75/60E60m60a60c60s60/wf1
+85s39e44l28e44c44t28sw64f33r33o50mwh103ct
+28h50ew69b50e44g50i28n50n50i28n50gw75o50fw58t28h50ew69w72o50r33dw75`f5
+33E60m60a60c60sf1
+60'w58t28ow75t28h50ew69e44n50d50.n120 0
+H720
+V7140
+h250cA
+72d50d50r33e44s39s39e44sw64m78a44yw75b50ew69c44o50m78b50i28n50e44dw75w72i28t28hw75aw69c44o50m78m78a44:n120 0
+V7920
+p4
+x font 1 R
+x font 2 I
+x font 3 B
+x font 4 BI
+x font 5 CW
+x font 6 H
+x font 7 HI
+x font 8 HB
+x font 9 S1
+x font 10 S
+s10
+f1
+H720
+V480
+h2077Chy
+w33 254w50 h25Chy
+wn120 0
+H720
+f5
+V900
+h360c1
+60360,601605n120 0
+H720
+f1
+V1080
+cs
+39e44l28e44c44t28sw68l28i28n50e44sw68t28h50i28r33t28e44e44nw79t28h50r33o50u50g50hw79f33i28f33t28e44e44n50.w80T61h50ew74d50e44f33i28n50i28t28i28o50nw80o50fw63t28h50ew74c44o50m78m78aw74o50p50e44r33a44t28o50rw63i28sw69t28ow80s39e44l28e44c44tw58f33r33o50mwh108ct
+28h50ew74b50e44g50i28n50n50i28n50gn120 0
+H720
+V1200
+co
+50fw58t28h50ew69l28e44f33tw53h50a44n50dw75a44d50d50r33e44s39sw64(33t28h50ew69b50e44g50i28n50n50i28n50gw75o50fw58l28i28n50ew69150350)w58t28ow75t28h50ew69e44n50dw75o50fw58t28h50ew69r33i28g50h50tw53h50a44n50dw75a44d50d50r33e44s39sw64(33t28h50ew69e44n50dw75o50fw58l28i28n50ew69150550)33.n120 0
+H720
+V1356
+h250cA
+wh104cf
+33e44wwh104cs
+39p50e44c44i28a44lw60s39i28m78p50l28ew76a44d50d50r33e44s39s39e44sw71c44o50m78ew76i28nw82h50a44n50d50y50:wf5
+60.wf1
+93(33aw77p50e44r33i28o50d50)w66r33e44p50r33e44s39e44n50t28sw72d50o50t28,w58t28h50ew77c44u50r33r33e44n50tw61t28e44x50t28,wf5
+580wf1
+93(33l28i28n50en120 0
+H720
+V1476
+cz
+44e44r33o50)w67s39e44l28e44c44t28sw73t28h50ew78n50u50l28lw62s39t28r33i28n50gw84a44tw62t28h50ew78b50e44g50i28n50n50i28n50gw84o50fw67t28h50ew77f33i28l28e44,w58a44n50dwf5
+83$wf1
+93s39e44l28e44c44t28sw72t28h50ew77n50u50l28lw61s39t28r33i28n50gw83a44tw61t28h50ew77e44n50dw83o50fw66t28h50ew77f33i28l28en120 0
+H720
+V1596
+c[
+33n50o50tw53t28h50ew69l28a44s39tw53l28i28n50ew69o50fw58t28h50ew69f33i28l28e44]33.w75T61h50e44r33e44f33o50r33e44,n120 0
+H720
+f5
+V1776
+h360c0
+60,601603n120 0
+H720
+f1
+V1956
+cs
+39e44l28e44c44t28sw64f33r33o50mwh103ct
+28h50ew69b50e44g50i28n50n50i28n50gw75o50fw58t28h50ew69f33i28l28ew69t28ow75t28h50ew69e44n50dw75o50fw58l28i28n50ew69t28h50i28r33t28e44e44n50,n120 0
+H720
+f5
+V2136
+h360c.
+60,60$n120 0
+H720
+f1
+V2316
+cs
+39e44l28e44c44t28sw64f33r33o50mwh103ct
+28h50ew69b50e44g50i28n50n50i28n50gw75o50fw58t28h50ew69c44u50r33r33e44n50tw53t28e44x50tw53t28ow75t28h50ew69e44n50dw75o50fw58t28h50ew69f33i28l28e44,w50a44n50dn120 0
+H720
+f5
+V2496
+h360c0
+60,60$n120 0
+H720
+f1
+V2676
+cs
+39e44l28e44c44t28sw64t28h50ew69w72h50o50l28ew69f33i28l28ew69[33t28h50a44tw53i28s39,w50aw69s39i28n50g50l28ew69s39t28r33i28n50gw75c44o50n50t28a44i28n50i28n50gw75t28h50ew69w72h50o50l28ew69f33i28l28e44,w50n50o50tw53aw69l28i28s39tw53o50fw58a44l28lw53t28h50ew69l28i28n50e44sw64i28nw75t28h50ew69f33i28l28e44]33.n120 0
+H720
+V2832
+h250cT
+61h50e44s39ew88a44r33ew88a44l28lwf2
+72a50b50s39o50l28u50t28ewf1
+88a44d50d50r33e44s39s39e44s39:w72t28h50e44yw94r33e44f33e44rw77t28ow94s39p50e44c44i28f33i28cw88p50l28a44c44e44sw83i28nw95t28h50ew89f33i28l28e44.wf5
+95s60a60mwf1
+h105ca
+44l28s39ow95h50a44sw84r33e44l28a44t28i28v50en120 0
+H720
+V2952
+ca
+44d50d50r33e44s39s39e44s39,w57w72h50i28c44hw82d50e44p50e44n50dw82o50nw82t28h50ew76v50a44l28u50ew76o50fw65d50o50t28,w57a44n50dw82i28nw82f33a44c44tw60w72ew76h50a44v50ew76a44l28r33e44a44d50yw82s39e44e44nw82o50n50ew76f33o50r33m78:wf5
+60/60E60m60a60c60s60/wf1
+92f33i28n50d50sn120 0
+H720
+V3072
+ct
+28h50ew73f33i28r33s39tw57o50c44c44u50r33r33e44n50c44ew73o50fwf5
+62E60m60a60c60swf1
+89s39e44a44r33c44h50i28n50gw79f33o50r33w72a44r33d50sw68f33r33o50mwh107cd
+50o50t28.w80W94h50i28c44hw80o50c44c44u50r33r33e44n50c44ew74o50fwf5
+63E60m60a60c60swf1
+90i28tw58f33i28n50d50sw69d50e44p50e44n50d50sn120 0
+H720
+V3192
+co
+50nw79t28h50ew73v50a44l28u50ew73o50fw62d50o50t28.w79W94h50a44tw57i28fw62y50o50uw79w72a44n50t28e44dw79t28h50ew73f33i28r33s39tw57o50c44c44u50r33r33e44n50c44ewf5
+73b60e60f60o60r60ewf1
+88d50o50t28?w97J39u50s39tw56p50r33e44c44e44d50ew72t28h50ew72p50a44t28t28e44r33nw78w72i28t28hw78an120 0
+H720
+V3312
+cm
+78i28n50u50sw64s39i28g50n50,w50w72h50i28c44hw75r33e44v50e44r33s39e44sw64t28h50ew69d50i28r33e44c44t28i28o50nw75o50fw58t28h50ew69s39e44a44r33c44h50:n120 0
+H720
+f5
+V3492
+h360c-
+60/60E60m60a60c60s60/n120 0
+H720
+f1
+V3672
+cI
+33nw75f33a44c44t28,w50t28h50ew69c44o50m78p50l28e44t28ew69s39y50n50t28a44xw75f33o50rw58f33o50r33w72a44r33dw75s39e44a44r33c44h50i28n50gw75i28sn120 0
+H720
+f5
+V3852
+h360c+
+60/60E60m60a60c60s60/n120 0
+H720
+f1
+V4032
+cb
+50u50tw53t28h50ew69p50l28u50sw64s39i28g50nw75i28sw64t28h50ew69d50e44f33a44u50l28t28,w50a44n50dw75i28nw75p50r33a44c44t28i28c44ew69i28sw64r33a44r33e44l28yw75u50s39e44d50.w75H72e44r33ew69i28sw64a44nw75e44x50a44m78p50l28ew69t28h50a44tw53i28n50c44l28u50d50e44sw64i28tw53f33o50rw58c44l28a44r33i28t28y50:n120 0
+H720
+f5
+V4212
+h360c0
+60+60/60E60m60a60c60s60/n120 0
+H720
+f1
+V4392
+cs
+39e44l28e44c44t28sw65t28h50ew70f33i28r33s39tw54o50c44c44u50r33r33e44n50c44ew70o50fwf5
+59E60m60a60c60swf1
+86i28nw76t28h50ew70f33i28l28e44;w54r33e44a44dw76i28tw54a44sw65`33`33g50ow76t28ow76l28i28n50ew70050,w52t28h50e44nw77s39e44a44r33c44hw77f33o50r33w72a44r33d50sw66f33o50rwf5
+60E60m60a60c60sf1
+60.25'33'n120 0
+H720
+V4512
+cS
+56i28n50c44ew69t28h50ewf5
+69+wf1
+85i28sw64o50p50t28i28o50n50a44l28,w50t28h50i28sw64c44a44nw75b50ew69w72r33i28t28t28e44nwf5
+75060/60E60m60a60c60s60/f1
+60.w75S56i28m78i28l28a44r33l28y50,n120 0
+H720
+f5
+V4692
+h360c$
+60-60/60E60m60a60c60s60/n120 0
+H720
+f1
+V4872
+cf
+33i28n50d50sw64t28h50ew69l28a44s39tw53o50c44c44u50r33r33e44n50c44ew69i28nw75t28h50ew69f33i28l28e44,w50s39on120 0
+H720
+f5
+V5052
+h360c0
+60/60E60m60a60c60s60/60,60$60-60/60E60m60a60c60s60/n120 0
+H720
+f1
+V5232
+cs
+39e44l28e44c44t28sw64t28h50ew69t28e44x50tw53f33r33o50mwh103ct
+28h50ew69f33i28r33s39tw53t28ow75l28a44s39twf5
+53E60m60a60c60sf1
+60,w50i28n50c44l28u50s39i28v50e44.w75S56l28i28g50h50t28l28yw75m78o50r33ew69i28n50t28e44r33e44s39t28i28n50g50:n120 0
+H720
+f5
+V5412
+h360c/
+60E60m60a60c60s60/60+60/60E60m60a60c60s60/n120 0
+H720
+f1
+V5592
+c(
+33t28h50e44r33ew69i28sw64a44nw75i28m78p50l28i28c44i28twf5
+53.60+wf1
+85a44tw53t28h50ew69b50e44g50i28n50n50i28n50g50)w58s39e44l28e44c44t28sw64t28h50ew69s39e44c44o50n50dwf5
+75E60m60a60c60swf1
+85f33o50l28l28o50w72i28n50gw75d50o50t28.n120 0
+H720
+V5748
+h250cL
+61i28n50ew69n50u50m78b50e44r33sw64m78a44yw75a44l28s39ow75b50ew69r33e44l28a44t28i28v50e44.n120 0
+H720
+f5
+V5928
+h360c-
+602n120 0
+H720
+f1
+V6108
+cs
+39e44l28e44c44t28sw64t28h50ew69s39e44c44o50n50dw75p50r33e44v50i28o50u50sw64l28i28n50e44,w50a44n50dn120 0
+H720
+f5
+V6288
+h360c+
+605n120 0
+H720
+f1
+V6468
+cs
+39e44l28e44c44t28sw64t28h50ew69f33i28f33t28hw75f33o50l28l28o50w72i28n50gw75l28i28n50ew69(33h50e44r33ew69t28h50ew69p50l28u50sw64s39i28g50nw75i28sw64o50b50l28i28g50a44t28o50r33y50)33.n120 0
+H720
+V6624
+h250cS
+56i28n50c44ew75a44d50d50r33e44s39s39e44sw70m78a44yw81s39e44l28e44c44tw59(33a44n50dw81d50o50tw59m78a44yw81b50e44)w65m78o50r33ew76t28h50a44nw82o50n50ew76l28i28n50e44,w57w72ew76n50e44e44dw82aw76d50e44f33i28n50i28t28i28o50nw82o50fw65`33p50r33e44v50i28o50u50s39'n120 0
+H720
+V6744
+ca
+44n50dw80`33f33o50l28l28o50w72i28n50g50:28'w63`33p50r33e44v50i28o50u50s39'w63m78e44a44n50swf2
+69b50e44f28o50r39ew74t28h50ew74b50e44g50i28n50n50i28n50gwf1
+79o50fw62d50o50t28,w54a44n50dw79`33f33o50l28l28o50w72i28n50g50'w62m78e44a44n50swf2
+68a50f28t28e44rw68t28h50ew73e44n50dwf1
+79o50fw62d50o50t28.n120 0
+H720
+V6864
+cF
+56o50rw63e44x50a44m78p50l28e44,w55i28fw63t28h50ew74f33i28l28ew75c44o50n50t28a44i28n50swf5
+70Ax font 0 CI
+f0
+60A60Af5
+60Af1
+60,w56w72i28t28hw81d50o50tw59s39e44tw59t28ow81t28h50ew75m78i28d50d50l28ew75t28w72owf5
+81Af1
+60'33sw70(33t28h50ew75s39l28a44n50t28i28n50gw81c44h50a44r33a44c44t28e44r33s39)33,wf5
+56-60/60A60/n120 0
+H720
+f1
+V6984
+cs
+39e44t28sw69d50o50tw58t28ow80t28h50ew74f33i28r33s39twf5
+58Af1
+60,w55a44n50dwf5
+80+60/60A60/wf1
+90s39e44t28sw69d50o50tw58t28ow80t28h50ew74l28a44s39twf5
+58Af1
+60.w80E61x50c44e44p50tw58u50n50d50e44rw63o50d50dw80c44i28r33c44u50m78s39t28a44n50c44e44sw69(33s39u50c44hw80a44sw69w72h50e44nw79t28h50en120 0
+H720
+V7104
+co
+50n50l28yw90o50c44c44u50r33r33e44n50c44ew84o50fw73t28h50ew84t28e44x50tw68i28nw90t28h50ew84f33i28l28ew84i28sw79a44l28r33e44a44d50yw90t28h50ew84c44u50r33r33e44n50tw68t28e44x50t28)33,w65t28h50ew84t28e44x50tw68s39e44l28e44c44t28e44dw91b50yw91aw85s39e44a44r33c44hw91w72i28l28lw69b50en120 0
+H720
+V7224
+cd
+50i28s39j28o50i28n50tw53f33r33o50mwh103cd
+50o50t28.n120 0
+V7920
+p5
+x font 1 R
+x font 2 I
+x font 3 B
+x font 4 BI
+x font 5 CW
+x font 6 H
+x font 7 HI
+x font 8 HB
+x font 9 S1
+x font 10 S
+s10
+f1
+H720
+V480
+h2077Chy
+w33 255w50 h25Chy
+wn120 0
+H720
+V840
+h250cT
+61ow75s39e44l28e44c44tw53t28h50ewf5
+69t60r60o60f60fwh120c-
+60m60swf1
+85p50a44r33a44g50r33a44p50hw75c44o50n50t28a44i28n50i28n50gw75d50o50t28,w50h50o50w72e44v50e44rw58l28o50n50gw75i28tw53i28s39,w50u50s39en120 0
+H720
+f5
+V1020
+h360c-
+60/60.60P60P60/60,60/60.60P60P60/60-601n120 0
+H720
+f1
+V1200
+cw
+72h50i28c44hw75w72i28l28lw53i28n50c44l28u50d50ew69t28h50ewf5
+69.60P60Pwf1
+85t28h50a44tw53b50e44g50i28n50sw64t28h50ew69p50a44r33a44g50r33a44p50h50,w50a44n50dw75e44x50c44l28u50d50ew69t28h50ew69o50n50ew69t28h50a44tw53e44n50d50sw64i28t28.n120 0
+H720
+V1356
+h250cW
+94h50e44nw81t28y50p50i28n50gw82r33e44l28a44t28i28v50ew76l28i28n50ew76n50u50m78b50e44rw65a44d50d50r33e44s39s39e44s39,w57t28h50ew76d50e44f33a44u50l28tw60n50u50m78b50e44rw65i28swf5
+711f1
+60,w57s39ow82t28h50ew76a44b50o50v50ew76c44o50u50l28dw82b50ew76w72r33i28t28t28e44nn120 0
+H720
+V1476
+cs
+39l28i28g50h50t28l28yw75m78o50r33ew69s39i28m78p50l28y50:n120 0
+H720
+f5
+V1656
+h360c-
+60/60.60P60P60/60,60/60.60P60P60/60-n120 0
+H720
+f1
+V1872
+h250cW
+94h50a44tw55d50o50e44sw66t28h50ew71a44d50d50r33e44s39swf5
+66+60160-601wf1
+87o50rw60t28h50ew71e44q50u50i28v50a44l28e44n50twf5
+55+60-wf1
+87m78e44a44n50?w96I33tw55l28o50o50k50sw66l28i28k50ew71i28tw55d50o50e44sw66n50o50t28h50i28n50g50,w52b50u50tw55r33e44c44a44l28lw56t28h50a44tn120 0
+H720
+V1992
+cd
+50o50tw58n50e44e44dw80n50o50tw58b50ew73aw73c44o50m78p50l28e44t28ew73l28i28n50ew73o50fw62t28e44x50t28.wf5
+79+601wf1
+89s39e44l28e44c44t28sw68t28h50ew73l28i28n50ew73a44f33t28e44rw62t28h50ew73e44n50dw79o50fw62t28h50ew73c44u50r33r33e44n50tw57t28e44x50t28,w54a44n50dwf5
+79-601wf1
+89s39e44l28e44c44t28sn120 0
+H720
+V2112
+ct
+28h50ew75l28i28n50ew75b50e44f33o50r33ew75t28h50ew75b50e44g50i28n50n50i28n50g50.w81T61h50e44r33e44f33o50r33ewf5
+75+60160-601wf1
+91s39e44l28e44c44t28sw70t28h50ew76l28i28n50ew76b50e44f33o50r33ew76t28h50ew76l28i28n50ew76a44f33t28e44rw65t28h50ew76e44n50dw82o50fw65d50o50t28,w57t28h50a44tw60i28s39,n120 0
+H720
+V2232
+ct
+28h50ew71c44o50m78p50l28e44t28ew71l28i28n50ew71c44o50n50t28a44i28n50i28n50gw77t28h50ew71e44n50dw77o50fw60d50o50t28.w77W94ew71c44a44nw77u50s39ew70t28h50i28sw65c44o50n50s39t28r33u50c44t28i28o50nw76t28ow76e44x50p50a44n50dw76aw70s39e44l28e44c44t28i28o50nw76t28ow76i28n50c44l28u50d50ew70an120 0
+H720
+V2352
+cc
+44o50m78p50l28e44t28ew69l28i28n50e44,w50s39a44yw75t28h50ew69f33i28r33s39tw53l28i28n50ew69i28nw75t28h50ew69f33i28l28ew69c44o50n50t28a44i28n50i28n50gwf5
+75E60m60a60c60sf1
+60:n120 0
+H720
+x font 0 CI
+f0
+V2532
+h360c0
+60/60E60m60a60c60s60/60+60-60pn120 0
+H720
+f5
+V2652
+h360cg
+60e60n60e60r60a60lwh120ci
+60n60t60r60o60d60u60c60t60i60o60nwh120ct
+60owh120ct
+60h60ewh120cc
+60o60m60m60a60n60d60swh120ci
+60nwh120cE
+60m60a60c60swh120ca
+60n60dwh120ct
+60owh120ct
+60r60ywh120ct
+60owh120cs
+60h60o60wn120 0
+H720
+f1
+V2832
+cT
+61h50ew69a44d50d50r33e44s39swf5
+64+60-wf1
+85i28sw64a44nw75i28d50i28o50m78.n120 0
+H720
+f3
+V3072
+cL
+67o50o50p56sn120 0
+H720
+f1
+V3228
+h250cA
+72b50o50v50e44,w52w72ew71c44h50a44n50g50e44dw77o50n50ew71o50c44c44u50r33r33e44n50c44ew71o50fwf5
+60E60m60a60c60swf1
+87t28owf5
+77E60m60a60c60s60\603606600f1
+60,w52b50u50tw55i28fw61t28h50ew72n50a44m78ew72o50fw61t28h50ew72e44d50i28t28o50rw61i28sw67r33e44a44l28l28yn120 0
+H720
+V3348
+cc
+44h50a44n50g50i28n50g50,w62i28tw65w72o50u50l28dw87b50ew81u50s39e44f33u50lw65t28ow87c44h50a44n50g50ewf2
+81a50l28lwf1
+65i28n50s39t28a44n50c44e44sw76o50fw70t28h50ew81n50a44m78ew80i28nw86aw80s39i28n50g50l28ew80c44o50m78m78a44n50d50.wf5
+86s60a60mwf1
+96p50r33o50v50i28d50e44sw75an120 0
+H720
+V3468
+cc
+44o50m78m78a44n50d50,wf5
+58xwf1
+93(33e44x50t28r33a44c44t28)33,w58f33o50rw66j28u50s39tw61t28h50a44tw61j28o50b50.w83T61h50ew78s39y50n50t28a44xw84i28swf5
+h108cx
+60/f2
+60p50a50t28t28e44r39nf5
+50/f2
+60c44o50m72m72a50n50df1
+50.w84F56o50rw67e44a44c44hw84o50c44c44u50r33r33e44n50c44ew78o50fw67t28h50en120 0
+H720
+V3588
+cp
+50a44t28t28e44r33nw76i28nw75t28h50ew69s39e44l28e44c44t28e44dw75t28e44x50t28,wf5
+50xwf1
+85s39e44t28sw64d50o50tw53t28ow75t28h50ew69o50c44c44u50r33r33e44n50c44ew69a44n50dw75r33u50n50sw64c44o50m78m78a44n50d50.w75F56o50rw58e44x50a44m78p50l28e44,w50t28ow75c44h50a44n50g50ewf5
+69E60m60a60c60sn120 0
+H720
+f1
+V3708
+ct
+28owf5
+75v60i60,n120 0
+H720
+x font 0 CI
+f0
+V3888
+h360c0
+60,60$60x60/60E60m60a60c60s60/60c60/60v60i60/n120 0
+H720
+V4008
+h360c0
+60,60$60pn120 0
+H720
+f5
+V4128
+h360cT
+60h60i60swh120cm
+60a60n60u60a60lwh120ci
+60swh120co
+60r60g60a60n60i60z60e60dwh120ci
+60nwh120ca
+wh120cr
+60a60t60h60e60rwh120ch
+60a60p60h60a60z60a60r60dwh120cm
+60a60n60n60e60r60.wh180cT
+60h60ewh120cf
+60i60r60s60tn120 0
+H720
+V4248
+h360cs
+60e60v60e60r60a60lwh120cs
+60e60c60t60i60o60n60swh120cw
+60e60r60ewh120cw
+60r60i60t60t60e60nwh120ch
+60a60s60t60i60l60ywh120ci
+60nwh120ca
+60nwh120ca
+60t60t60e60m60p60twh120ct
+60owh120cp
+60r60o60v60i60d60ewh120ca
+n120 0
+H720
+V4368
+h360cg
+60e60n60e60r60a60lwh120ci
+60n60t60r60o60d60u60c60t60i60o60nwh120ct
+60owh120ct
+60h60ewh120cc
+60o60m60m60a60n60d60swh120ci
+60nwh120cv
+60iwh120ca
+60n60dwh120ct
+60owh120ct
+60r60ywh120ct
+60owh120cs
+60h60o60wn120 0
+H720
+V4488
+h360ct
+60h60ewh120cm
+60e60t60h60o60dwh120ci
+60nwh120ct
+60h60ewh120cm
+60a60d60n60e60s60swh120ct
+60h60a60twh120ci
+60swh120ct
+60h60ewh120cv
+60iwh120cc
+60o60m60m60a60n60dwh120cs
+60t60r60u60c60t60u60r60e60.n120 0
+H720
+f1
+V4668
+cT
+61h50i28sw65w72o50r33k50sw65b50yw77s39u50b50d50i28v50i28d50i28n50gw77t28h50ew71c44u50r33r33e44n50tw55t28e44x50tw55(f5
+33060,60$wf1
+h87Cem
+wh127ct
+28h50ew71w72h50o50l28ew71f33i28l28e44)w60i28n50t28ow77a44p50p50e44a44r33a44n50c44e44sw66o50fw60i28t28sw66t28e44x50t28u50a44lw55a44r33g50u50m78e44n50tn120 0
+H720
+V4788
+c(
+f5
+33E60m60a60c60sf1
+60)33,w57a44n50dw82t28h50e44nw82r33u50n50n50i28n50gw81t28h50ew75c44o50m78m78a44n50dw81t28h50a44tw59f33o50l28l28o50w72sw70(f5
+33c60/60v60i60/f1
+60)w64w72i28t28hw81d50o50tw59s39e44tw59t28ow81t28h50ew75t28e44x50t28.w81W94ew75c44a44nw81r33e44a44dw81t28h50i28sn120 0
+H720
+V4908
+ce
+44x50a44m78p50l28ew74a44s39,w55`33`33f33i28n50dw80a44l28lw58o50c44c44u50r33r33e44n50c44e44sw69o50fwf5
+63E60m60a60c60swf1
+90i28nw80t28h50ew74f33i28l28e44,w55a44n50dw80f33o50rw63e44a44c44hw80o50n50e44,w55s39e44tw58t28h50ew74c44u50r33r33e44n50tw58t28e44x50tw58t28ow80t28h50ew75o50c44c44u50rh33Chy
+n120 0
+H720
+V5028
+cr
+33e44n50c44ew73a44n50dw79r33u50nw79t28h50ew73c44o50m78m78a44n50dwf5
+79c60/60v60i60/f1
+60,w54w72h50i28c44hw79w72i28l28lw57r33e44p50l28a44c44ew72t28h50ew72c44u50r33r33e44n50tw56t28e44x50tw56b50ywf5
+78v60i60.f1
+60'33'w61[33T61h50i28sw67c44o50m78m78a44n50dw78i28sw67s39o50m78eh44Chy
+n120 0
+H720
+V5148
+cw
+72h50a44tw56s39i28m78i28l28a44rw61t28owf5
+78e60df1
+60'33swf5
+67gwf1
+88c44o50m78m78a44n50d50.w78T61h50ew72d50i28f33f33e44r33e44n50c44e44sw67w72i28l28lw56d50e44v50e44l28o50pw78b50e44l28o50w72,w53b50u50tw56n50o50t28ew72t28h50a44tw57t28h50ew73d50e44f33a44u50l28tw57a44d50d50r33e44s39s39,w54a44sn120 0
+H720
+V5268
+ca
+44l28w72a44y50s39,w50i28sw64d50o50tw53r33a44t28h50e44rw58t28h50a44nw75t28h50ew69w72h50o50l28ew69f33i28l28e44.25]n120 0
+H720
+V5424
+h250cA
+w97s39i28n50g50l28ewf5
+69uwf1
+85c44o50m78m78a44n50dw75i28sw64s39u50f33f33i28c44i28e44n50tw53t28ow75u50n50d50ow75a44nwf5
+75xwf1
+85c44o50m78m78a44n50d50,w50r33e44g50a44r33d50l28e44s39sw64o50fw58h50o50ww97m78a44n50yw76i28n50d50i28v50i28d50u50a44lw54c44h50a44n50g50e44sn120 0
+H720
+V5544
+ct
+28h50ewf5
+69xwf1
+85m78a44k50e44s39.n120 0
+H720
+x font 0 CI
+f0
+V5724
+h360cu
+n120 0
+H720
+V5844
+h360c0
+60,60$60pn120 0
+H720
+f5
+V5964
+h360cT
+60h60i60swh120cm
+60a60n60u60a60lwh120ci
+60swh120co
+60r60g60a60n60i60z60e60dwh120ci
+60nwh120ca
+wh120cr
+60a60t60h60e60rwh120ch
+60a60p60h60a60z60a60r60dwh120cm
+60a60n60n60e60r60.wh180cT
+60h60ewh120cf
+60i60r60s60tn120 0
+H720
+V6084
+h360cs
+60e60v60e60r60a60lwh120cs
+60e60c60t60i60o60n60swh120cw
+60e60r60ewh120cw
+60r60i60t60t60e60nwh120ch
+60a60s60t60i60l60ywh120ci
+60nwh120ca
+60nwh120ca
+60t60t60e60m60p60twh120ct
+60owh120cp
+60r60o60v60i60d60ewh120ca
+n120 0
+H720
+V6204
+h360cg
+60e60n60e60r60a60lwh120ci
+60n60t60r60o60d60u60c60t60i60o60nwh120ct
+60owh120ct
+60h60ewh120cc
+60o60m60m60a60n60d60swh120ci
+60nwh120cE
+60m60a60c60swh120ca
+60n60dwh120ct
+60owh120ct
+60r60ywh120ct
+60owh120cs
+60h60o60wn120 0
+H720
+V6324
+h360ct
+60h60ewh120cm
+60e60t60h60o60dwh120ci
+60nwh120ct
+60h60ewh120cm
+60a60d60n60e60s60swh120ct
+60h60a60twh120ci
+60swh120ct
+60h60ewh120cE
+60m60a60c60swh120cc
+60o60m60m60a60n60dwh120cs
+60t60r60u60c60t60u60r60e60.n120 0
+H720
+f1
+V6540
+h250cO
+72fw70c44o50u50r33s39e44,wf5
+62cwf1
+97i28sw76n50o50tw65t28h50ew81o50n50l28yw87c44o50m78m78a44n50dwf5
+87xwf1
+97c44a44nw87r33u50n50.w87A72nwf5
+87awf1
+98c44o50m78m78a44n50dw88c44a44nw88b50ew82u50s39e44dw88t28ow88p50u50tw66p50r33o50p50r33i28e44t28a44r33yn120 0
+H720
+V6660
+cm
+78a44r33k50i28n50g50sw64o50nwf5
+75E60m60a60c60sf1
+60:n120 0
+H720
+x font 0 CI
+f0
+V6840
+h360c0
+60,60$60x60/60E60m60a60c60s60/60a60/60{60T60M60}60/n120 0
+H720
+V6960
+h360c/
+60E60m60a60c60s60/60+60-60pn120 0
+H720
+f5
+V7080
+h360cg
+60e60n60e60r60a60lwh120ci
+60n60t60r60o60d60u60c60t60i60o60nwh120ct
+60owh120ct
+60h60ewh120cc
+60o60m60m60a60n60d60swh120ci
+60nwh120cE
+60m60a60c60s60{60T60M60}wh120ca
+60n60dwh120ct
+60owh120ct
+60r60ywh120ct
+60owh120cs
+60h60o60wn120 0
+H720
+f1
+V7260
+c[
+33T61h50e44r33ew74i28sw69n50ow80w72a44yw80t28ow80s39e44ew74t28h50ew74c44h50a44n50g50e44sw69a44sw69t28h50e44yw80h50a44p50p50e44n50,w55a44sw69i28nwf5
+80e60df1
+60'33swf5
+69g60/60E60m60a60c60s60/60s60/60/60&60{60T60M60}60/60pf1
+60;w59s39e44ew75t28h50ew75s39e44c44t28i28o50nn120 0
+V7920
+p6
+x font 1 R
+x font 2 I
+x font 3 B
+x font 4 BI
+x font 5 CW
+x font 6 H
+x font 7 HI
+x font 8 HB
+x font 9 S1
+x font 10 S
+s10
+f1
+H720
+V480
+h2077Chy
+w33 256w50 h25Chy
+wn120 0
+H720
+V840
+co
+50nw75M89u50l28t28i28p50l28ew69C67h50a44n50g50e44s39,w50b50e44l28o50w72.25]n120 0
+H720
+V996
+h250cT
+61h50ewf5
+69pwf1
+85c44o50m78m78a44n50dw75i28sw64a44l28s39ow75u50s39e44f33u50lw53w72h50e44nw75d50r33i28v50e44nw75b50yw75a44nwf5
+75xf1
+60,w50b50u50tw53b50ew69c44a44r33e44f33u50lw53t28h50a44tw53y50o50uw75s39a44yw75w72h50a44tw53y50o50uw75m78e44a44n50;n120 0
+H720
+x font 0 CI
+f0
+V1176
+h360c0
+60,60$60x60/60E60m60a60c60s60/60pn120 0
+H720
+f5
+V1296
+h360cE
+60m60a60c60s60E60m60a60c60sn120 0
+H720
+f1
+V1476
+cs
+39i28n50c44ewf5
+69xwf1
+85s39e44t28sw64d50o50tw54t28ow76t28h50ew70t28e44x50tw54i28nw76t28h50ew70s39l28a44s39h50e44s39,w51p50r33i28n50t28i28n50gw76o50n50l28yw76t28h50a44tw54t28e44x50tw54i28sw65n50o50tw54g50o50i28n50gw76t28ow76b50ew70v50e44r33yw76i28n50f33o50r33m78a44t28i28v50e44.w76B67u50tw54t28h50en120 0
+H720
+V1596
+cc
+44o50m78m78a44n50dw80t28h50a44twf5
+58xwf1
+90r33u50n50sw69c44a44nw80c44o50n50t28a44i28nw80a44d50d50r33e44s39s39e44s39.w80F56o50rw63e44x50a44m78p50l28e44,w55i28fw63w72ew74w72a44n50tw57t28ow79p50r33i28n50tw57a44l28lw57l28i28n50e44sw68c44o50n50t28a44i28n50i28n50gwf5
+79E60m60a60c60sf1
+60,n120 0
+H720
+V1716
+cj
+28u50s39tw53u50s39ewf5
+69+60-f1
+60:n120 0
+H720
+x font 0 CI
+f0
+V1896
+h360c0
+60,60$60x60/60E60m60a60c60s60/60+60-60pn120 0
+H720
+f5
+V2016
+h360cg
+60e60n60e60r60a60lwh120ci
+60n60t60r60o60d60u60c60t60i60o60nwh120ct
+60owh120ct
+60h60ewh120cc
+60o60m60m60a60n60d60swh120ci
+60nwh120cE
+60m60a60c60s60{60T60M60}wh120ca
+60n60dwh120ct
+60owh120ct
+60r60ywh120ct
+60owh120cs
+60h60o60wn120 0
+H720
+V2136
+h360ct
+60h60ewh120cm
+60e60t60h60o60dwh120ci
+60nwh120ct
+60h60ewh120cm
+60a60d60n60e60s60swh120ct
+60h60a60twh120ci
+60swh120ct
+60h60ewh120cE
+60m60a60c60s60{60T60M60}wh120cc
+60o60m60m60a60n60dwh120cs
+60t60r60u60c60t60u60r60e60.n120 0
+H720
+f1
+V2316
+cF
+56i28n50a44l28l28y50,w58l28e44t28'33sw72r33e44s39t28o50r33ew77t28h50ew77s39t28a44t28ew77o50fw66t28h50ew77f33i28l28ew78w72i28t28hw84a44n50o50t28h50e44rwf5
+67xwf1
+94c44o50m78m78a44n50d50,w59a44n50dw84m78a44k50ew78u50s39ew78o50fw67aw78h50a44n50d50yw84s39h50o50r33t28h50a44n50d50:w62an120 0
+H720
+V2436
+cc
+44o50m78m78aw71i28nw77a44nw77a44d50d50r33e44s39sw66h50a44sw66i28t28sw66l28e44f33tw55s39i28d50ew71d50e44f33a44u50l28tw55t28owf5
+770f1
+60,w52a44n50dw77i28t28sw66r33i28g50h50tw55s39i28d50ew71d50e44f33a44u50l28tw54t28owf5
+76$f1
+60,w51s39ow76t28h50ew70e44a44s39y50-33t28o50-33t28y50p50ew70a44d50d50r33e44s39sn120 0
+H720
+f5
+V2556
+c,
+wf1
+85r33e44f33e44r33sw64t28ow75t28h50ew69w72h50o50l28ew69f33i28l28e44:n120 0
+H720
+x font 0 CI
+f0
+V2736
+h360c,
+60x60/60E60m60a60c60s60/wh120c/
+60{60T60M60}60/60dn120 0
+H720
+V2856
+h360c,
+60pn120 0
+H720
+f5
+V2976
+h360cT
+60h60i60swh120cm
+60a60n60u60a60lwh120ci
+60swh120co
+60r60g60a60n60i60z60e60dwh120ci
+60nwh120ca
+wh120cr
+60a60t60h60e60rwh120ch
+60a60p60h60a60z60a60r60dwh120cm
+60a60n60n60e60r60.wh180cT
+60h60ewh120cf
+60i60r60s60tn120 0
+H720
+V3096
+h360cs
+60e60v60e60r60a60lwh120cs
+60e60c60t60i60o60n60swh120cw
+60e60r60ewh120cw
+60r60i60t60t60e60nwh120ch
+60a60s60t60i60l60ywh120ci
+60nwh120ca
+60nwh120ca
+60t60t60e60m60p60twh120ct
+60owh120cp
+60r60o60v60i60d60ewh120ca
+n120 0
+H720
+V3216
+h360cg
+60e60n60e60r60a60lwh120ci
+60n60t60r60o60d60u60c60t60i60o60nwh120ct
+60owh120ct
+60h60ewh120cc
+60o60m60m60a60n60d60swh120ci
+60nwh120cE
+60m60a60c60swh120ca
+60n60dwh120ct
+60owh120ct
+60r60ywh120ct
+60owh120cs
+60h60o60wn120 0
+H720
+V3336
+h360ct
+60h60ewh120cm
+60e60t60h60o60dwh120ci
+60nwh120ct
+60h60ewh120cm
+60a60d60n60e60s60swh120ct
+60h60a60twh120ci
+60swh120ct
+60h60ewh120cE
+60m60a60c60swh120cc
+60o60m60m60a60n60dwh120cs
+60t60r60u60c60t60u60r60e60.n120 0
+H720
+f1
+V3516
+cN
+72o50t28i28c44ew69w72h50a44tw53t28h50i28swf5
+64xwf1
+85d50o50e44s39:w53f33o50rw58e44a44c44hw75o50c44c44u50r33r33e44n50c44ew69o50fw58E61m78a44c44s39,w50f33i28n50dw75t28h50ewf5
+69{60T60M60}wf1
+85t28h50a44tw53f33o50l28l28o50w72s39,w50a44n50dw75d50e44l28e44t28ew69i28t28.n120 0
+H720
+V3672
+h250cT
+61h50ew79`33t28e44x50t28'wf5
+68s60a60mwf1
+95a44c44c44e44p50t28sw74f33o50rw68s39e44a44r33c44h50e44sw74i28nw85a44d50d50r33e44s39s39e44sw74a44n50dw85i28nwf5
+85xwf1
+95c44o50m78m78a44n50d50sw75i28sw75n50o50tw64s39i28m78p50l28ew80t28e44x50t28,w61b50u50tw64r33a44t28h50e44rn120 0
+H720
+f2
+V3792
+cr
+39e44g50u50l28a50r39 25e44x44p50r39e44s39s39i28o50n50s39.wf1
+90U72n50i28xw90h50a44sw79s39e44v50e44r33a44lw68d50i28s39t28i28n50c44tw68i28n50t28e44r33p50r33e44t28a44t28i28o50n50sw79o50fw73r33e44g50u50l28a44rw73e44x50p50r33e44s39s39i28o50n50s39.w90T61h50ew84f33o50r33mwh118cu
+50s39e44dw89b50yn120 0
+H720
+f5
+V3912
+cs
+60a60mwf1
+85i28sw64t28h50a44tw53o50fwf5
+58e60g60r60e60pf1
+60(33150)33,w50i28n50c44l28u50d50i28n50gw75p50a44r33e44n50t28h50e44s39e44swf5
+64(60)wf1
+85f33o50rw58g50r33o50u50p50i28n50gw75a44n50dw75a44nw75`33o50r33'w58o50p50e44r33a44t28o50rwf5
+58|wf1
+85f33o50rw58m78a44t28c44h50i28n50gw75s39t28r33i28n50g50sn120 0
+H720
+V4032
+ci
+28nw84p50a44r33a44l28l28e44l28.wf5
+84s60a60mwf1
+94m78a44k50e44sw73t28w72ow84e44x50t28e44n50s39i28o50n50s39:w62a44l28t28h50o50u50g50hwf5
+84.wf1
+94(33t28h50ew78m78o50s39tw62o50v50e44r33l28o50a44d50e44dw84c44h50a44r33a44c44t28e44rw67i28nw84U72n50i28x50)w67m78a44t28c44h50e44sw72a44n50yn120 0
+H720
+V4152
+cc
+44h50a44r33a44c44t28e44rwf2
+69e44x44c44e44p50twf1
+65n50e44w72l28i28n50e44,w62t28h50ew81r33e44g50u50l28a44rw70e44x50p50r33e44s39s39i28o50nwf5
+87@wf1
+97(33t28h50i28n50kw87o50fw70i28tw65a44sw76aw81b50i28gw87d50o50t28)w70m78a44t28c44h50e44sw76a44n50yw87c44h50a44r33a44c44t28e44r33,w62e44v50e44nn120 0
+H720
+V4272
+cn
+50e44w72l28i28n50e44s39;w62a44n50dw84t28h50ew78c44h50a44r33a44c44t28e44rw66s39e44q50u50e44n50c44ewf5
+77\60nwf1
+93m78a44t28c44h50e44sw72aw77n50e44w72l28i28n50ew77c44h50a44r33a44c44t28e44r33.w83R67e44p50l28a44c44e44m78e44n50tw61t28e44x50t28,w58s39u50c44hw83a44sw72u50s39e44dw83i28nn120 0
+H720
+V4392
+ct
+28h50ewf5
+69awf1
+85a44n50dwf5
+75cwf1
+85c44o50m78m78a44n50d50s39,w50i28sw64s39t28i28l28lw53p50l28a44i28nw75t28e44x50t28,w50b50u50tw53t28h50ew69s39e44q50u50e44n50c44ewf5
+69\60nwf1
+85r33e44p50r33e44s39e44n50t28sw64n50e44w72l28i28n50ew69i28nw75t28h50a44tw53c44o50n50t28e44x50t28,w50t28o50o50.n120 0
+H720
+V4548
+h250cH
+72e44r33ew77i28sw72a44nw83e44x50a44m78p50l28e44.w83S56a44yw83w72ew77w72a44n50t28e44dw83t28ow83d50o50u50b50l28ew77s39p50a44c44ew77t28h50ew77d50o50c44u50m78e44n50t28,w58t28h50a44tw62i28s39,w59t28u50r33nw84e44v50e44r33yw84n50e44w72l28i28n50ew78i28n50t28on120 0
+H720
+V4668
+ct
+28w72ow75n50e44w72l28i28n50e44s39.w75T61h50ew69f33o50l28l28o50w72i28n50gw75a44l28lw53d50ow75t28h50ew69j28o50b50:n120 0
+H720
+x font 0 CI
+f0
+V4848
+h360c,
+60x60/60\60n60/wh120ca
+60/60\60n60/n120 0
+H720
+V4968
+h360c,
+60x60/60\60n60/wh120cc
+60/60\60n60\60n60/n120 0
+H720
+V5088
+h360c,
+60x60/60$60/wh120ca
+60/60\60n60/n120 0
+H720
+V5208
+h360c,
+60x60/60^60/wh120ci
+60/60\60n60/n120 0
+H720
+f1
+V5388
+cT
+61h50ew70l28a44s39tw54e44x50a44m78p50l28ew70i28sw65s39l28i28g50h50t28l28yw76d50i28f33f33e44r33e44n50t28,w51b50e44c44a44u50s39ew70i28tw54p50u50t28sw65aw70n50e44w72l28i28n50ewf2
+70b50e44f28o50r39ewf1
+70e44a44c44hw76l28i28n50e44;w54t28h50ew70o50t28h50e44rw59e44x50a44m78p50l28e44sw65p50l28a44c44ew71i28tn120 0
+H720
+V5508
+ca
+44f33t28e44r33.w81T61h50ew75f33i28r33s39tw59t28w72ow81e44x50a44m78p50l28e44sw70m78a44n50i28p50u50l28a44t28ew75n50e44w72l28i28n50e44sw70d50i28r33e44c44t28l28yw81[33s39o50m78e44t28h50i28n50gw81o50u50t28s39i28d50ewf5
+75e60df1
+60'33sw70k50e44n50]33;w58t28h50ew74l28a44s39tw58t28w72ow80u50s39en120 0
+H720
+V5628
+cr
+33e44g50u50l28a44rw58e44x50p50r33e44s39s39i28o50n50s39:wf5
+53$wf1
+85i28sw64t28h50ew69e44m78p50t28yw75s39t28r33i28n50gw75a44tw53t28h50ew69e44n50dw75o50fw58aw69l28i28n50e44,w50w72h50i28l28ewf5
+69^wf1
+85i28sw64t28h50ew69e44m78p50t28yw75s39t28r33i28n50gw75a44tw53t28h50ew69b50e44g50i28n50n50i28n50g50.n120 0
+H720
+V5784
+h250cT
+61h50e44s39ew71s39o50l28u50t28i28o50n50sw66a44l28lw55h50a44v50ew71aw71p50o50s39s39i28b50l28ew71d50r33a44w72b50a44c44k50:w55i28fw60t28h50e44r33ew71i28sw66a44l28r33e44a44d50yw77aw71b50l28a44n50kw77l28i28n50ew72(33t28h50a44tw56i28s39,w53t28w72ow78c44o50n50s39e44c44u50t28i28v50en120 0
+H720
+V5904
+cn
+50e44w72l28i28n50e44s39)33,w53t28h50e44yw78m78a44k50ew72i28tw56m78u50c44hw78l28a44r33g50e44rw60(33f33o50u50rw60c44o50n50s39e44c44u50t28i28v50ew71n50e44w72l28i28n50e44s39)33.w77Aw99b50e44t28t28e44rw60m78e44t28h50o50dw77i28sw66t28ow77e44x50t28e44n50dw77e44v50e44r33yw77g50r33o50u50pn120 0
+H720
+V6024
+co
+50fw58n50e44w72l28i28n50e44sw64b50yw75o50n50e44:n120 0
+H720
+x font 0 CI
+f0
+V6204
+h360c,
+60x60/60\60n60+60/wh120ca
+60/60\60n60/n120 0
+H720
+f1
+V6384
+cT
+61h50ew78r33e44g50u50l28a44rw67e44x50p50r33e44s39s39i28o50nw84o50p50e44r33a44t28o50rwf5
+67+wf1
+95m78e44a44n50sw74`33o50n50ew79o50rw68m78o50r33e44;28'wf5
+68\60n60+wf1
+95i28sw74i28d50e44n50t28i28c44a44lw63t28owf5
+85\60n60\60n60*f1
+60.w85T61h50u50s39,w60t28h50i28sw74e44x50a44m78p50l28en120 0
+H720
+V6504
+ct
+28a44k50e44sw64e44v50e44r33yw75s39e44q50u50e44n50c44ew69o50fw58n50e44w72l28i28n50e44sw64a44n50dw75a44d50d50sw64a44n50o50t28h50e44rw58t28ow75t28h50ew69e44n50d50.n120 0
+H720
+V6660
+h250cA
+w97m78o50r33ew69c44o50m78m78o50nw75e44x50a44m78p50l28ew69i28sw64i28n50d50e44n50t28i28n50gw75aw69b50l28o50c44kw75o50fw58t28e44x50tw53b50yw75aw69t28a44bw75s39t28o50p50.w75T61h50ew70f33o50l28l28o50w72i28n50gw76a44l28lw54w72o50r33k50,w51a44l28t28h50o50u50g50hn120 0
+H720
+V6780
+ct
+28h50ew69f33i28r33s39tw53i28sw64a44r33g50u50a44b50l28yw75t28h50ew69c44l28e44a44n50e44s39tw53(33t28h50ew69b50l28a44n50kw75t28e44x50tw53i28nw75s39l28a44s39h50e44sw64i28sw64aw69t28a44b50)33:n120 0
+V7920
+p7
+x font 1 R
+x font 2 I
+x font 3 B
+x font 4 BI
+x font 5 CW
+x font 6 H
+x font 7 HI
+x font 8 HB
+x font 9 S1
+x font 10 S
+s10
+f1
+H720
+V480
+h2077Chy
+w33 257w50 h25Chy
+wn120 0
+H720
+x font 0 CI
+f0
+V900
+h360c,
+60x60/60^60/60a60/wwh200c/
+n120 0
+H720
+V1020
+h360c,
+60x60/60^60/60c60/wwh200c/
+n120 0
+H720
+V1140
+h360c,
+60x60/60.60*60\60n60/60i60/wwh270c/
+n120 0
+H720
+f1
+V1320
+cT
+61h50ew81l28a44s39tw65e44x50a44m78p50l28ew81u50s39e44sw76t28h50ew81p50a44t28t28e44r33nw87(33i28d50i28o50m78,w62r33e44a44l28l28y50)wf5
+70.60*60\60nwf1
+98t28ow88m78a44t28c44hw88l28i28n50e44s39:wf5
+66.60*wf1
+98m78a44t28c44h50e44sw77t28h50ew82l28o50n50g50e44s39tw66p50o50s39s39i28b50l28en120 0
+H720
+V1440
+cs
+39t28r33i28n50gw75o50fw58n50o50n50-33n50e44w72l28i28n50ew69c44h50a44r33a44c44t28e44r33s39.w75T61a44k50i28n50gw75i28n50i28t28i28a44lw53t28a44b50sw64a44w72a44yw75i28sw64j28u50s39tw53a44sw64e44a44s39y50:n120 0
+H720
+x font 0 CI
+f0
+V1620
+h360c,
+60x60/60^wh300c/
+60dn120 0
+H720
+f1
+V1800
+cI
+33nw75t28h50e44s39ew69e44x50a44m78p50l28e44sw64Iw58h50a44v50ew69s39p50e44c44i28f33i28e44dw75a44nw75a44d50d50r33e44s39sw64(33t28h50ew69w72h50o50l28ew69f33i28l28e44)33,w50b50u50tw53i28nw76p50r33a44c44t28i28c44ew70c44o50m78m78a44n50d50sw65l28i28k50ew70t28h50e44s39ew70a44r33ew70m78o50r33en120 0
+H720
+V1920
+cl
+28i28k50e44l28yw75t28ow75b50ew69r33u50nw75w72i28t28h50o50u50tw53a44nw75a44d50d50r33e44s39s39,w50u50s39i28n50gw75t28h50ew69v50a44l28u50ew69o50fw58d50o50tw53s39e44tw53b50yw75s39e44l28e44c44t28i28n50gw75t28e44x50tw53w72i28t28hw75t28h50ew69m78o50u50s39e44.n120 0
+H720
+f3
+V2160
+cC
+72o50n56d56i28t33i28o50n56a50l28sn120 0
+H720
+f1
+V2316
+h250cT
+61h50ewf5
+69xwf1
+85c44o50m78m78a44n50dw75i28sw64aw69l28o50o50p50i28n50gw75c44o50n50s39t28r33u50c44t28:w53f33o50rw58e44a44c44hw75m78a44t28c44hw76o50fw59aw70r33e44g50u50l28a44rw59e44x50p50r33e44s39s39i28o50n50,w51i28tw54e44x50t28r33a44c44t28sw65(33s39e44t28sw65d50o50tw54t28o50)n120 0
+H720
+V2436
+ct
+28h50ew71m78a44t28c44hw77a44n50dw77r33u50n50sw66aw71c44o50m78m78a44n50d50.wf5
+77s60a60mwf1
+87a44l28s39ow77h50a44sw66aw71c44o50n50d50i28t28i28o50n50a44l28,wf5
+52gf1
+60:wf5
+90g60/f2
+60p50a50t28t28e44r39nf5
+50/f2
+60c44o50m72m72a50n50dwf1
+76r33u50n50sw65t28h50ew70c44o50m78m78a44n50dw76i28fn120 0
+H720
+V2556
+cd
+50o50tw55c44o50n50t28a44i28n50sw66aw71m78a44t28c44hw77o50fw60t28h50ew71p50a44t28t28e44r33nwf2
+77w67i28t28h50o50u50tw55c44h50a50n50g50i28n50gw77t28h50ew71v44a50l28u50ew71o50fw55d50o50t28.wf1
+78T61h50ew72i28n50v50e44r33s39e44,wf5
+53vf1
+60,w53r33u50n50sw67t28h50ew72c44o50m78m78a44n50dw78i28fn120 0
+H720
+V2676
+cd
+50o50tw57d50o50e44swf2
+68n50o50twf1
+57c44o50n50t28a44i28nw79aw73m78a44t28c44hw79o50fw62t28h50ew73p50a44t28t28e44r33n50.w79(33T61h50ew73l28e44t28t28e44r33swf5
+68gwf1
+89a44n50dwf5
+79vwf1
+89a44r33ew72h50i28s39t28o50r33i28c44a44lw56a44n50dw78h50a44v50ew72n50ow78m78n50e44m78o50n50i28cw72s39i28gh50Chy
+n120 0
+H720
+V2796
+cn
+50i28f33i28c44a44n50c44e44.w75Y72o50uw75m78i28g50h50tw53t28h50i28n50kw75o50fwf5
+58gwf1
+85a44sw64`33g50u50a44r33d50.25'33)w83[f5
+33e60dwf1
+85u50s39e44r33sw64s39h50o50u50l28dw75r33e44a44dw75t28h50ew69a44b50o50v50ew69d50e44f33i28n50i28t28i28o50n50sw64v50e44r33yw75c44a44r33e44f33u50l28l28y50;w54t28h50en120 0
+H720
+f5
+V2916
+cg
+wf1
+h101cc
+44o50m78m78a44n50dw91i28nwf5
+91s60a60mwf1
+h101ci
+28sw80f33u50n50d50a44m78e44n50t28a44l28l28yw91d50i28f33f33e44r33e44n50tw69f33r33o50mwh119ct
+28h50a44tw69i28nwf5
+91e60df1
+60.25]w99H72e44r33ew85i28sw80a44nw91e44x50a44m78p50l28ew85o50fw74t28h50ew84d50i28f33f33e44r33e44n50c44en120 0
+H720
+V3036
+cb
+50e44t28w72e44e44nwf5
+75xwf1
+85a44n50dwf5
+75g60:n120 0
+H720
+V3216
+h360c,
+60x60/60E60m60a60c60s60/60c60/60v60i60/n120 0
+H720
+f1
+V3396
+cc
+44h50a44n50g50e44sw64e44a44c44hw75o50c44c44u50r33r33e44n50c44ew69o50fw58t28h50ew69w72o50r33dwf5
+75E60m60a60c60swf1
+85i28nw75t28h50ew69f33i28l28ew69t28ow75t28h50ew69w72o50r33dwf5
+75v60if1
+60,w50b50u50tn120 0
+H720
+f5
+V3576
+h360c,
+60g60/60E60m60a60c60s60/60c60/60v60i60/n120 0
+H720
+f1
+V3756
+cc
+44h50a44n50g50e44sw64t28h50ewf2
+69w67h50o50l28ew69f28i28l28ewf1
+69t28owf5
+75v60iwf1
+85i28fw58t28h50e44r33ew69i28sw64t28h50ew69w72o50r33dwf5
+75E60m60a60c60swf1
+85a44n50y50w72h50e44r33ew69i28nw75t28h50ew69f33i28l28e44.n120 0
+H720
+V3912
+h250cN
+72e44i28t28h50e44rw66o50fw66t28h50e44s39ew77c44o50m78m78a44n50d50sw73i28sw73p50a44r33t28i28c44u50l28a44r33l28yw84i28n50t28e44r33e44s39t28i28n50gw84i28nw84i28s39o50l28a44t28i28o50n50,w59b50u50tw62t28h50e44yw84a44r33ew78v50a44l28u50a44b50l28ew78w72h50e44nw84c44o50mh78Chy
+n120 0
+H720
+V4032
+cb
+50i28n50e44dw75w72i28t28hwf5
+75xwf1
+85a44n50dw75w72i28t28hw75t28h50e44m78s39e44l28v50e44s39.n120 0
+H720
+f3
+V4272
+cC
+72o50m83p56o50s39i28t33i28o50nn120 0
+H720
+f1
+V4428
+h250cO
+72n50ew75w72a44yw81t28ow81t28h50i28n50kw81a44b50o50u50tw59t28h50ewf5
+75xwf1
+91c44o50m78m78a44n50dw82i28sw71t28h50a44t28,w57g50i28v50e44nw82aw76s39e44l28e44c44t28i28o50nw82(33aw76v50a44l28u50ew76o50fw65d50o50t28)w65i28tw60i28t28e44r33a44t28e44sw71t28h50r33o50u50g50hn120 0
+H720
+V4548
+ci
+28n50t28e44r33e44s39t28i28n50gw90s39u50b50s39e44l28e44c44t28i28o50n50sw79(33v50a44l28u50e44sw79o50fw72d50o50tw67w72i28t28h50i28n50)33.w89I33nw89o50t28h50e44rw72w72o50r33d50s39,w64i28tw67t28a44k50e44sw78aw83p50i28e44c44ew83o50fw72t28e44x50tw67a44n50dw89c44u50t28sw78i28tw67i28n50t28on120 0
+H720
+V4668
+cs
+39m78a44l28l28e44rw59p50i28e44c44e44s39.w76B67u50tw54t28h50ew70t28e44x50tw54t28h50a44tw55i28tw55c44u50t28sw66u50pw77m78a44yw77a44l28r33e44a44d50yw77b50ew71aw71p50i28e44c44ew71c44u50tw55b50yw77aw71p50r33e44v50i28o50u50swf5
+66xwf1
+87c44o50m78m78a44n50dw77o50rw60s39e44l28e44c44t28e44dn120 0
+H720
+V4788
+cb
+50yw80awf5
+74gf1
+60.wf5
+80s60a60mf1
+60'33sw69m78o50s39tw58i28n50t28e44r33e44s39t28i28n50gw80p50r33o50p50e44r33t28yw80i28sw69t28h50ew73a44b50i28l28i28t28yw79t28ow79d50e44f33i28n50ew73aw73s39e44q50u50e44n50c44ew73o50fw62c44o50m78m78a44n50d50sw68t28ow79p50e44r33f33o50r33mwh107ca
+w73p50a44rh33Chy
+n120 0
+H720
+V4908
+ct
+28i28c44u50l28a44rw58t28a44s39k50.h25Cdg
+wh113cA
+w97s39i28m78p50l28ew69e44x50a44m78p50l28ew69i28sw64t28ow75c44h50a44n50g50ew69a44l28lw53o50c44c44u50r33r33e44n50c44e44sw64o50fwf5
+58E60m60a60c60swf1
+85t28owf5
+75e60m60a60c60sf1
+60;w53c44e44r33t28a44i28n50l28yw75t28h50ew69c44o50m78m78a44n50dn120 0
+H720
+x font 0 CI
+f0
+V5088
+h360c,
+60x60/60E60m60a60c60s60/wh120cc
+60/60e60m60a60c60s60/n120 0
+H720
+f1
+V5268
+cw
+72i28l28lw53w72o50r33k50,w50b50u50tw53w72ew69c44a44nw75u50s39ew69a44nwf5
+75xwf1
+85c44o50m78m78a44n50dw75t28ow75s39a44v50ew69r33e44t28y50p50i28n50gw75m78o50s39tw53o50fw58t28h50ew69w72o50r33dwf5
+75E60m60a60c60sf1
+60:n120 0
+H720
+x font 0 CI
+f0
+V5448
+h360c,
+60x60/60E60m60a60c60s60/wh120cx
+60/60E60/wh120cc
+60/60e60/n120 0
+H720
+f1
+V5628
+c(
+33B67l28a44n50k50sw75c44a44nw86b50ew80u50s39e44dw86t28ow86s39e44p50a44r33a44t28ew80c44o50m78m78a44n50d50sw75o50nw86aw80l28i28n50ew80t28ow86m78a44k50ew80t28h50e44mwh114ce
+44a44s39i28e44rw69t28ow86r33e44a44d50.25)w94W94h50a44tw65t28h50i28sw76c44o50m78m78a44n50dn120 0
+H720
+V5748
+cd
+50o50e44sw65i28sw65f33i28n50dw76a44l28lw53o50c44c44u50r33r33e44n50c44e44sw64o50fwf5
+58E60m60a60c60swf1
+85(f5
+33,60x60/60E60m60a60c60s60/f1
+60)33,w50a44n50dw75t28h50e44nwf2
+75w67i28t28hw75d50o50tw53s39e44tw53t28ow75t28h50a50tw53t28e44x44t28,wf1
+50f33i28n50dw75a44l28lw53o50c44c44u50r33r33e44n50c44e44sn120 0
+H720
+V5868
+co
+50fw60t28h50ew71l28e44t28t28e44rwf5
+60Ewf1
+87(f5
+33x60/60E60/f1
+60)33,w52a44n50dw77t28h50e44nwf2
+77w67i28t28hw77d50o50tw55s39e44tw55t28ow77t28h50a50tw55t28e44x44t28,wf1
+52r33u50nw78t28h50ew72c44o50m78m78a44n50dwf5
+78c60/60e60/wf1
+88t28ow78c44h50a44n50g50ew72t28h50ew72c44h50a44r33a44c44t28e44rw61t28on120 0
+H720
+V5988
+cl
+28o50w72e44rw71c44a44s39e44.w88N72o50t28ew82t28h50a44tw66t28h50ew82a44d50d50r33e44s39sw76f33o50rw70t28h50ew81c44o50m78m78a44n50dwh87Cem
+wh137ct
+28h50ew81w72h50o50l28ew81f33i28l28e44,w62s39p50e44c44i28f33i28e44dw87b50yw87aw81c44o50m78m78awh81Cem
+wh137ci
+28sw76o50n50l28yn120 0
+H720
+V6108
+cg
+50i28v50e44nw77t28ow77t28h50ew71l28e44f33t28m78o50s39tw55p50i28e44c44ew71o50fw60t28h50ew71c44o50m78m78a44n50d50;w55t28h50ew71r33e44s39tw55o50fw60t28h50ew72p50i28e44c44e44sw67h50a44v50ew72d50o50tw56s39e44tw56f33o50rw61t28h50e44mwh106cb
+50yw78t28h50ew72e44x50e44c44u50t28i28o50nw78o50fn120 0
+H720
+V6228
+ct
+28h50ew69p50i28e44c44e44sw64t28ow75t28h50e44i28rw58l28e44f33t28.n120 0
+H720
+V6384
+h250cA
+72sw67a44n50o50t28h50e44rw61s39i28m78p50l28ew72e44x50a44m78p50l28e44,w53c44o50n50s39i28d50e44rw61aw72p50r33o50b50l28e44mwh106cs
+39o50l28v50e44dw78a44b50o50v50e44:w57p50r33i28n50t28i28n50gw79a44l28lw57l28i28n50e44sw68i28nw79t28h50ew73f33i28l28ew73c44o50n50t28a44i28n50i28n50gn120 0
+H720
+V6504
+ct
+28h50ew69w72o50r33dwf5
+75E60m60a60c60s60:n120 0
+H720
+f1
+s8
+V6880
+Cru
+h40Cru
+h40Cru
+h40Cru
+h40Cru
+h40Cru
+h40Cru
+h40Cru
+h40Cru
+h40Cru
+h40Cru
+h40Cru
+h40Cru
+h40Cru
+h40Cru
+h40Cru
+h40Cru
+h40Cru
+n100 0
+H720
+V6980
+Cdg
+w70T49h40ew55o40b40v40i22o40u40sw51a35n40a35l22o40g40yw60w58i22t22hw60s31h40e35l22lw42p40i22p40e35l22i22n40e35sw51i22sw51o40n40l22yw60p40a35r26t22i22a35l22l22yw60v40a35l22i22d40,w40b40e35c35a35u40s31ew55t22h40ew55i22n40d40i22v40i22d40u40a35lwf5
+42s48a48mwf1
+68c35o40m62m62a35n40d40sw51a35r26ew56a35l22lw43w58o40r26k40i22n40gw61o40nn100 0
+H720
+V7080
+ct
+22h40ew55s31a35m62ew55t22e35x40t22;w42i22tw42i22sw51o40n40l22yw60h40o40ww78t22h40ew55t22e35x40tw42i22sw51s31l22i22c35e35dw60u40pw60t22h40a35tw42i22sw51c35h40a35n40g40i22n40g40.n100 0
+V7920
+p8
+x font 1 R
+x font 2 I
+x font 3 B
+x font 4 BI
+x font 5 CW
+x font 6 H
+x font 7 HI
+x font 8 HB
+x font 9 S1
+x font 10 S
+s10
+f1
+H720
+V480
+h2077Chy
+w33 258w50 h25Chy
+wn120 0
+H720
+x font 0 CI
+f0
+V900
+h360c,
+60x60/60.60*60\60n60/wh120cg
+60/60E60m60a60c60s60/60pn120 0
+H720
+f5
+V1020
+h360cg
+60e60n60e60r60a60lwh120ci
+60n60t60r60o60d60u60c60t60i60o60nwh120ct
+60owh120ct
+60h60ewh120cc
+60o60m60m60a60n60d60swh120ci
+60nwh120cE
+60m60a60c60swh120ca
+60n60dwh120ct
+60owh120ct
+60r60ywh120ct
+60owh120cs
+60h60o60wn120 0
+H720
+V1140
+h360ct
+60h60ewh120cm
+60e60t60h60o60dwh120ci
+60nwh120ct
+60h60ewh120cm
+60a60d60n60e60s60swh120ct
+60h60a60twh120ci
+60swh120ct
+60h60ewh120cE
+60m60a60c60swh120cc
+60o60m60m60a60n60dwh120cs
+60t60r60u60c60t60u60r60e60.n120 0
+H720
+f1
+V1320
+cT
+61h50i28sw79c44o50m78m78a44n50dw90s39a44y50sw79t28ow90b50r33e44a44kw90t28h50ew84f33i28l28ew84i28n50t28ow90l28i28n50e44sw79(f5
+33,60x60/60.60*60\60n60/f1
+60)33,w65a44n50dw90f33o50rw73e44a44c44hw90l28i28n50ew84t28h50a44tw68c44o50n50t28a44i28n50sw79t28h50ew85s39t28r33i28n50gn120 0
+H720
+f5
+V1440
+cE
+60m60a60c60swf1
+90(f5
+33g60/60E60m60a60c60s60/f1
+60)33,w55r33u50nw80t28h50ew74c44o50m78m78a44n50dwf5
+80pwf1
+90w72i28t28hw80d50o50tw58s39e44tw58t28ow80t28h50ew74l28i28n50ew73(33n50o50tw57t28h50ew73m78a44t28c44hw79o50fwf5
+62E60m60a60c60sf1
+60)33,w54w72h50i28c44hw79p50r33i28n50t28sn120 0
+H720
+V1560
+ct
+28h50ew72l28i28n50e44.w78T61ow78s39a44v50ew72t28y50p50i28n50g50,w53b50e44c44a44u50s39ewf5
+72.60*60\60nwf1
+88i28sw67aw72c44o50m78m78o50nw78p50a44t28t28e44r33nw78i28nwf5
+78xwf1
+88c44o50m78m78a44n50d50s39,w53i28fw61t28h50ewf5
+73xwf1
+89i28sw68f33o50l28l28o50w72e44dw79i28m78m78e44d50ih28Chy
+n120 0
+H720
+V1680
+ca
+44t28e44l28yw75b50yw75aw69s39p50a44c44e44,w50t28h50ew69p50a44t28t28e44r33nwf5
+75.60*60\60nwf1
+85i28sw64a44s39s39u50m78e44d50.w75T61h50e44r33e44f33o50r33e44,w50t28h50ew69a44b50o50v50ew69c44o50u50l28dw75b50ew69w72r33i28t28t28e44nw75m78o50r33ew69s39u50c44c44i28n50c44t28l28y50:n120 0
+H720
+x font 0 CI
+f0
+V1860
+h360c,
+60xwh120cg
+60/60E60m60a60c60s60/60pn120 0
+H720
+f1
+V2040
+cT
+61h50ew69s39o50l28u50t28i28o50nw75w72ew69u50s39e44dw75b50e44f33o50r33ew69w72a44sn120 0
+H720
+x font 0 CI
+f0
+V2220
+h360c,
+60x60/60E60m60a60c60s60/60+60-60pn120 0
+H720
+f1
+V2400
+cw
+72h50i28c44hw81r33u50n50sw70t28h50ew75c44o50m78m78a44n50dwf5
+81+60-60pwf1
+91w72i28t28hw81d50o50tw59s39e44tw59t28ow81e44a44c44hw82m78a44t28c44hw82o50fwf5
+65E60m60a60c60swf1
+92i28nw82t28h50ew76f33i28l28ew76(33r33e44c44a44l28lw60t28h50a44tw60t28h50ew76i28d50i28o50mwf5
+h110c+
+60-60pn120 0
+H720
+f1
+V2520
+cp
+50r33i28n50t28sw64t28h50ew69l28i28n50ew69c44o50n50t28a44i28n50i28n50gw75t28h50ew69e44n50dw75o50fw58d50o50t28)33.n120 0
+H720
+V2676
+h250cT
+61h50ew77t28w72ow83c44o50m78m78a44n50d50sw72u50s39u50a44l28l28yw83p50r33o50d50u50c44ew77t28h50ew77s39a44m78ew77r33e44s39u50l28tw61(33t28h50ewf5
+77+60-60pwf1
+93f33o50r33mwh111cw
+72i28l28lw61p50r33i28n50tw61aw77l28i28n50ew77t28w72i28c44ew77i28fw66i28tw62c44o50nh50Chy
+n120 0
+H720
+V2796
+ct
+28a44i28n50swf5
+66E60m60a60c60swf1
+87t28w72i28c44e44)33.w77W94h50i28c44hw77i28sw66b50e44t28t28e44r33?wf5
+96,60x60/60E60m60a60c60s60/60+60-60pwf1
+87i28sw66e44a44s39i28e44rw60t28ow77t28y50p50ew71a44n50dw77w72i28l28lw55b50ew70m78u50c44hw76f33a44s39t28e44rw59i28fw59t28h50ew70f33i28l28en120 0
+H720
+V2916
+ci
+28sw83l28a44r33g50ew88a44n50dw95t28h50e44r33ew89a44r33ew89f33e44wwh117co
+50c44c44u50r33r33e44n50c44e44sw84o50fw78t28h50ew89s39t28r33i28n50g50,w70b50u50tw73i28tw73i28sw84r33e44a44l28l28yw95a44nw95o50d50dw95s39p50e44c44i28a44lw73c44a44s39e44.wf5
+95,60x60/60.60*60\60n60/n120 0
+H720
+V3036
+cg
+60/60E60m60a60c60s60/60pwf1
+88i28sw67s39l28o50w72e44rwh61Cem
+wh128ci
+28tw56b50r33e44a44k50sw67e44a44c44hw78l28i28n50ew72o50u50tw56s39e44p50a44r33a44t28e44l28y50,w53t28h50e44nw77e44x50a44m78i28n50e44sw66i28tw55f33o50rw60aw71m78a44t28c44hwh77Cem
+wh127cb
+50u50tw55i28sw66c44o50n50c44e44ph50Chy
+n120 0
+H720
+V3156
+ct
+28u50a44l28l28yw80c44l28e44a44n50e44r33,w55a44n50dw81g50e44n50e44r33a44l28i28z44e44sw70m78o50r33ew75e44a44s39i28l28y50.w81F56o50rw64e44x50a44m78p50l28e44,w56c44o50n50s39i28d50e44rw64t28h50ew75f33o50l28l28o50w72i28n50gw81p50i28e44c44ew75o50fw64t28h50ew75E61m78a44c44sw70m78a44nh50Chy
+n120 0
+H720
+V3276
+cu
+50a44l28:n120 0
+H720
+f5
+V3456
+h360cc
+60o60m60m60a60n60dwh120cn
+60a60m60e60=60"60a60p60p60e60n60d60-60t60o60-60f60i60l60e60"60,wh120ck
+60e60y60=60"60[60u60n60b60o60u60n60d60]60"n120 0
+H720
+V3576
+h360cT
+60a60k60e60swh120ct
+60h60ewh120cc
+60o60n60t60e60n60t60swh120co
+60fwh120ct
+60h60ewh120cc
+60u60r60r60e60n60twh120cb
+60u60f60f60e60rwh120ca
+60n60dwh120ca
+60p60p60e60n60d60swh120ci
+60twh120ct
+60owh120ct
+60h60en120 0
+H720
+V3696
+h360cn
+60a60m60e60dwh120cf
+60i60l60e60.wh120cI
+60fwh120ct
+60h60ewh120cf
+60i60l60e60swh120cd
+60o60e60s60n60'60twh120ce
+60x60i60s60t60,wh120ci
+60twh120cw
+60i60l60lwh120cb
+60ewh120cc
+60r60e60a60t60e60d60.n120 0
+H720
+V3936
+h360cc
+60o60m60m60a60n60dwh120cn
+60a60m60e60=60"60a60p60r60o60p60o60s60"60,wh120ck
+60e60y60=60"60E60S60C60-60?60"n120 0
+H720
+V4056
+h360cP
+60r60o60m60p60t60swh120cf
+60o60rwh120ca
+wh120ck
+60e60y60w60o60r60dwh120ca
+60n60dwh120ct
+60h60e60nwh120cp
+60r60i60n60t60swh120ca
+wh120cl
+60i60s60twh120co
+60fwh120ct
+60h60o60s60ewh120cc
+60o60m60m60a60n60d60sn120 0
+H720
+V4176
+h360cw
+60h60o60s60ewh120cs
+60h60o60r60twh120cd
+60e60s60c60r60i60p60t60i60o60nwh120cc
+60o60n60t60a60i60n60swh120ct
+60h60a60twh120ck
+60e60y60w60o60r60d60.wh180cF
+60o60rwh120ce
+60x60a60m60p60l60e60,n120 0
+H720
+V4296
+h360ci
+60fwh120cy
+60o60uwh120cf
+60o60r60g60e60twh120cw
+60h60i60c60hwh120cc
+60o60m60m60a60n60d60swh120cd
+60e60a60lwh120cw
+60i60t60hwh120cw
+60i60n60d60o60w60s60,wh120cj
+60u60s60twh120ct
+60y60p60en120 0
+H720
+V4416
+h360c"
+60@60b60[60E60S60C60-60?60]60@60t60[60w60i60n60d60o60w60]60@60b60[60E60S60C60]60"60.n120 0
+H720
+f2
+V4656
+h360ca
+50n50dw75s39ow75o50nn120 0
+H720
+f1
+V4836
+cT
+61h50i28sw66t28e44x50tw55c44o50n50s39i28s39t28sw66o50fw60g50r33o50u50p50sw66o50fw60n50o50n50-33e44m78p50t28yw77l28i28n50e44s39,w52w72i28t28hw77aw71s39i28m78p50l28ew71f33o50r33m78a44tw55f33o50rw60t28h50ew71t28e44x50tw55w72i28t28h50i28nw77e44a44c44hw78g50r33o50u50p50.w78I33m78a44gh50Chy
+n120 0
+H720
+V4956
+ci
+28n50ew73t28h50a44tw57w72ew73w72a44n50t28e44dw79t28ow79f33i28n50dw79t28h50ew73d50e44s39c44r33i28p50t28i28o50nw79o50fw62t28h50ew73`33a44p50r33o50p50o50s39'w62c44o50m78m78a44n50d50.w78T61h50ew72p50r33o50b50l28e44mwh106ci
+28sw67t28ow78b50r33e44a44kw78t28h50ew72f33i28l28ew72i28n50t28on120 0
+H720
+V5076
+ci
+28n50d50i28v50i28d50u50a44lw53d50e44s39c44r33i28p50t28i28o50n50s39,w50a44n50dw75t28h50e44nw75t28ow75f33i28n50dw75t28h50ew69d50e44s39c44r33i28p50t28i28o50nw75o50fw58`33a44p50r33o50p50o50s39'w58a44n50dw75t28ow75p50r33i28n50tw53i28t28.w75T61h50ew69s39o50l28u50t28i28o50nw75i28sw64s39t28r33a44i28g50h50th28Chy
+n120 0
+H720
+V5196
+cf
+33o50r33w72a44r33d50:n120 0
+H720
+x font 0 CI
+f0
+V5376
+h360c,
+60x60/60(60.60+60\60n60)60+60/wh120cg
+60/60c60o60m60m60a60n60dwh120cn
+60a60m60e60=60"60a60p60r60o60p60o60s60"60/60pn120 0
+H720
+f5
+V5496
+h360cc
+60o60m60m60a60n60dwh120cn
+60a60m60e60=60"60a60p60r60o60p60o60s60"60,wh120ck
+60e60y60=60"60E60S60C60-60?60"n120 0
+H720
+V5616
+h360cP
+60r60o60m60p60t60swh120cf
+60o60rwh120ca
+wh120ck
+60e60y60w60o60r60dwh120ca
+60n60dwh120ct
+60h60e60nwh120cp
+60r60i60n60t60swh120ca
+wh120cl
+60i60s60twh120co
+60fwh120ct
+60h60o60s60ewh120cc
+60o60m60m60a60n60d60sn120 0
+H720
+V5736
+h360cw
+60h60o60s60ewh120cs
+60h60o60r60twh120cd
+60e60s60c60r60i60p60t60i60o60nwh120cc
+60o60n60t60a60i60n60swh120ct
+60h60a60twh120ck
+60e60y60w60o60r60d60.wh180cF
+60o60rwh120ce
+60x60a60m60p60l60e60,n120 0
+H720
+V5856
+h360ci
+60fwh120cy
+60o60uwh120cf
+60o60r60g60e60twh120cw
+60h60i60c60hwh120cc
+60o60m60m60a60n60d60swh120cd
+60e60a60lwh120cw
+60i60t60hwh120cw
+60i60n60d60o60w60s60,wh120cj
+60u60s60twh120ct
+60y60p60en120 0
+H720
+V5976
+h360c"
+60@60b60[60E60S60C60-60?60]60@60t60[60w60i60n60d60o60w60]60@60b60[60E60S60C60]60"60.n120 0
+H720
+f1
+V6156
+cT
+61h50ew73r33e44g50u50l28a44rw62e44x50p50r33e44s39s39i28o50nwf5
+79(60.60+60\60n60)60+wf1
+89m78a44t28c44h50e44sw68o50n50ew73o50rw63m78o50r33ew74l28i28n50e44sw69w72i28t28hw80o50n50ew74o50rw63m78o50r33ew74c44h50a44r33a44c44t28e44r33sw69e44a44c44h50,w55t28h50a44tw58i28s39,w55t28h50en120 0
+H720
+V6276
+ct
+28e44x50twh197cb
+50e44t28w72e44e44nwh219cb
+50l28a44n50kwh219cl
+28i28n50e44s39,wh194cs
+39owf5
+h219c,
+60x60/60(60.60+60\60n60)60+60/wf1
+h228ce
+44x50t28r33a44c44t28swh207ce
+44a44c44hwh218cd
+50e44s39c44r33i28p50t28i28o50n50;wh196ct
+28h50e44nn120 0
+H720
+f5
+V6396
+cg
+60/60c60o60m60m60a60n60d60 60n60a60m60e60=60"60a60p60r60o60p60o60s60"60/wf1
+85s39e44l28e44c44t28sw64t28h50ew69d50e44s39c44r33i28p50t28i28o50nw75f33o50rw58`33a44p50r33o50p50o50s39'w58a44n50dwf5
+75pwf1
+85p50r33i28n50t28sw64i28t28.n120 0
+H720
+V6552
+h250cI
+33m78a44g50i28n50ew70t28h50a44tw54w72ew70h50a44dw76aw70Cw93p50r33o50g50r33a44mwh104cc
+44o50n50t28a44i28n50i28n50gw76t28h50ew70v50a44r33i28a44b50l28ewf5
+70nf1
+60,w51b50u50tw54w72ew70w72a44n50t28e44dw77t28ow77c44h50a44n50g50ew71i28tw55t28owf5
+77n60u60mf1
+60.w77T61h50i28sn120 0
+H720
+V6672
+cc
+44o50m78m78a44n50dw75i28sw64aw69f33i28r33s39tw53c44u50t28:n120 0
+H720
+x font 0 CI
+f0
+V6852
+h360c,
+60x60/60n60/wh120cc
+60/60n60u60m60/n120 0
+H720
+f1
+V7032
+cb
+50u50tw54i28sw65o50b50v50i28o50u50s39l28yw76f33l28a44w72e44d50:w54i28tw54w72i28l28lw54c44h50a44n50g50ew70a44l28lwf5
+54nf1
+60'33sw65i28nw76t28h50ew70f33i28l28e44,w51n50o50tw54j28u50s39tw54t28h50ewf2
+70i28d50e44n50t28i28f28i28e44rwf5
+65nf1
+60.w76Aw98b50e44t28t28e44rw59s39o50l28u50t28i28o50nw77i28sw66t28ow77u50s39en120 0
+H720
+V7152
+ca
+44nwf5
+75xwf1
+85c44o50m78m78a44n50dw75t28ow75e44x50t28r33a44c44tw53t28h50ew69i28d50e44n50t28i28f33i28e44r33s39,w50a44n50dw75t28h50e44nw75u50s39ewf5
+69gwf1
+85t28ow75f33i28n50dw75t28h50ewf5
+69nf1
+60'33s39:n120 0
+V7920
+p9
+x font 1 R
+x font 2 I
+x font 3 B
+x font 4 BI
+x font 5 CW
+x font 6 H
+x font 7 HI
+x font 8 HB
+x font 9 S1
+x font 10 S
+s10
+f1
+H720
+V480
+h2077Chy
+w33 259w50 h25Chy
+wn120 0
+H720
+x font 0 CI
+f0
+V900
+h360c,
+60x60/60[60a60-60z60A60-60Z60_60]60[60a60-60z60A60-60Z60_60060-60960]60*60/wh120cg
+60/60n60/wh120cv
+60/60.60.60/wh120cc
+60/60n60u60m60/n120 0
+H720
+f1
+V1080
+cI
+33tw59l28o50o50k50sw70a44w72f33u50l28,w56b50u50tw59i28t28'33sw70f33a44i28r33l28yw81e44a44s39yw81t28ow81u50n50d50e44r33s39t28a44n50dw81w72h50e44nw81r33e44a44dw81l28e44f33tw60t28ow82r33i28g50h50t28.w82Awh104cC
+w99i28d50e44n50t28i28f33i28e44rw65i28sw71a44nw82a44l28p50h50a44b50e44t28i28cw76o50rn120 0
+H720
+V1200
+cu
+50n50d50e44r33s39c44o50r33ew75f33o50l28l28o50w72e44dw81b50yw81z44e44r33ow81o50rw63m78o50r33ew74a44l28p50h50a44n50u50m78e44r33i28c44sw69o50rw63u50n50d50e44r33s39c44o50r33e44s39,w55t28h50a44tw58i28s39,w55m78a44t28c44h50e44sw69o50fw63t28h50ew74r33e44g50u50l28a44rw63e44x50p50r33e44sh39Chy
+n120 0
+H720
+V1320
+cs
+39i28o50nwf5
+80[60a60-60z60A60-60Z60_60]60[60a60-60z60A60-60Z60_60060-60960]60*f1
+60.w80T61h50ewf5
+74gwf1
+90c44o50m78m78a44n50dw80s39e44l28e44c44t28sw69t28h50o50s39ew74i28d50e44n50t28i28f33i28e44r33sw69c44o50n50t28a44i28n50i28n50gwf5
+80nf1
+60,w55a44n50dw80t28h50ewf5
+75vwf1
+91i28sn120 0
+H720
+V1440
+ca
+w76t28r33i28c44k50:w60i28tw60r33e44j28e44c44t28sw71t28h50o50s39ew76i28d50e44n50t28i28f33i28e44r33sw70c44o50n50t28a44i28n50i28n50gw81m78o50r33ew75t28h50a44nw81o50n50ew75c44h50a44r33a44c44t28e44r33.w81H72e44n50c44ew75t28h50ewf5
+75c60/60n60u60m60/wf1
+91a44p50p50l28i28e44sw70o50n50l28yw81t28on120 0
+H720
+V1560
+cf
+33r33e44e44-33s39t28a44n50d50i28n50gwf5
+75nf1
+60'33s39.n120 0
+H720
+V1716
+h250cT
+61h50e44r33ew73i28sw68s39t28i28l28lw57aw73p50r33o50b50l28e44mwh107ch
+50e44r33e44:w57w72ew73d50o50n50'33tw57w72a44n50tw57t28ow79c44h50a44n50g50ewf5
+73nf1
+60'33sw68t28h50a44tw58a44r33ew74p50a44r33tw58o50fw63t28h50ew74c44h50a44r33a44c44t28e44rw63c44o50n50s39t28a44n50twf5
+58\60nf1
+60.n120 0
+H720
+V1836
+cT
+61h50e44r33ew70i28sw65aw70c44o50m78m78a44n50dwf5
+76yf1
+60,w51c44o50m78p50l28e44m78e44n50t28a44r33yw76t28owf5
+76xf1
+60,w51t28h50a44tw54i28sw65j28u50s39tw53w72h50a44tw53w72ew69n50e44e44d50:wf5
+88y60/f2
+60p50a50t28t28e44r39nf5
+50/f2
+60c44o50m72m72a50n50dwf1
+75r33u50n50sw64t28h50ew69c44o50mh78Chy
+n120 0
+H720
+V1956
+cm
+78a44n50dw83o50nw83t28h50ew78p50i28e44c44e44sw73o50fw67t28e44x50twf2
+62b50e44t28w67e44e44nwf1
+84m78a44t28c44h50e44sw73o50fw67t28h50ew78p50a44t28t28e44r33n50;w62i28fwf5
+67xwf1
+94s39e44l28e44c44t28s39,wf5
+59ywf1
+94r33e44j28e44c44t28s39.w84H72e44r33ew78i28sw73t28h50ew78f33i28n50a44lw62c44o50mh78Chy
+n120 0
+H720
+V2076
+cm
+78a44n50d50:n120 0
+H720
+x font 0 CI
+f0
+V2256
+h360c,
+60y60/60\60\60n60/wh120cx
+60/60[60a60-60z60A60-60Z60_60]60[60a60-60z60A60-60Z60_60060-60960]60*60/wh120cg
+60/60n60/wh120cv
+60/60.60.60/wh120cc
+60/60n60u60m60/n120 0
+H720
+f1
+V2436
+cT
+61h50ewf5
+78y60/60\60\60n60/wf1
+94(33w72i28t28hw85b50a44c44k50s39l28a44s39hw85d50o50u50b50l28e44dw85t28ow85m78a44k50ew79i28tw63aw79l28i28t28e44r33a44lw63c44h50a44r33a44c44t28e44r33)w68r33e44m78o50v50e44sw74t28h50ew79t28w72o50-33c44h50a44r33a44c44t28e44rw68s39e44q50u50e44n50c44en120 0
+H720
+f5
+V2556
+c\
+60nwf1
+91f33r33o50mwh109cc
+44o50n50s39i28d50e44r33a44t28i28o50n50,w56s39ow81t28h50ew75r33e44s39tw59o50fw64t28h50ew75c44o50m78m78a44n50dw81w72i28l28lw59n50o50tw59t28o50u50c44hw81i28t28.w81T61h50e44r33ew75i28sw70m78o50r33ew75w72ew75c44o50u50l28dw81d50ow81h50e44r33e44;w59f33o50rn120 0
+H720
+V2676
+ce
+44x50a44m78p50l28e44,w55a44n50o50t28h50e44rwf5
+63ywf1
+90c44o50u50l28dw80b50ew74p50r33e44f33i28x50e44dw80t28ow80p50r33o50t28e44c44tw58c44o50m78m78e44n50t28sw69i28nw80t28h50ew74c44o50d50e44.w80Iw63w72o50n50'33tw58e44l28a44b50o50r33a44t28ew74t28h50ew74e44x50a44m78p50l28ew75a44n50yn120 0
+H720
+V2796
+cf
+33u50r33t28h50e44r33,w60b50u50tw63y50o50uw85s39h50o50u50l28dw85h50a44v50ew79a44nw85i28d50e44aw79o50fw68t28h50ew79w72a44yw85i28nw85w72h50i28c44hw85t28h50ew79l28o50o50p50i28n50gw84a44n50dw84c44o50n50d50i28t28i28o50n50a44lw62c44o50m78m78a44n50d50sw73i28nwf5
+84s60a60mn120 0
+H720
+f1
+V2916
+cm
+78a44yw75b50ew69c44o50m78p50o50s39e44dw75t28ow75d50ow75i28n50t28e44r33e44s39t28i28n50gw75t28h50i28n50g50s39.n120 0
+H720
+f3
+V3156
+cG
+78r44o50u56p56i28n56gn120 0
+H720
+f1
+V3312
+h250cT
+61h50e44r33ew82i28sw77a44n50o50t28h50e44rw72w72a44yw89t28ow89a44r33r33a44n50g50ew83c44o50m78m78a44n50d50s39.w89B67yw89e44n50c44l28o50s39i28n50gw89t28h50e44mwh117ci
+28nw89b50r33a44c44ew83b50r33a44c44k50e44t28swf5
+78{60}f1
+60,w64c44o50m78m78a44n50d50sn120 0
+H720
+V3432
+cm
+78a44yw82b50ew76a44p50p50l28i28e44dw82i28nw82p50a44r33a44l28l28e44l28.w82T61h50i28sw70e44x50a44m78p50l28ew75u50s39e44sw70t28h50ewf5
+75=wf1
+91c44o50m78m78a44n50d50,w56w72h50i28c44hw81r33e44p50o50r33t28sw70t28h50ew75l28i28n50ew75a44n50dw81c44h50a44r33a44c44t28e44rw64n50u50mh78Chy
+n120 0
+H720
+V3552
+cb
+50e44r33sw64o50fw58d50o50t28,w50t28o50g50e44t28h50e44rw58w72i28t28hwf5
+75pf1
+60,w50t28ow75r33e44p50o50r33tw53o50nw75a44p50p50e44a44r33a44n50c44e44sw64o50fwf5
+58E60m60a60c60swf1
+85i28nw75o50u50rw58o50r33i28g50i28n50a44lw53f33i28l28e44:n120 0
+H720
+x font 0 CI
+f0
+V3732
+h360c,
+60pn120 0
+H720
+f5
+V3852
+h360cT
+60h60i60swh120cm
+60a60n60u60a60lwh120ci
+60swh120co
+60r60g60a60n60i60z60e60dwh120ci
+60nwh120ca
+wh120cr
+60a60t60h60e60rwh120ch
+60a60p60h60a60z60a60r60dwh120cm
+60a60n60n60e60r60.wh180cT
+60h60ewh120cf
+60i60r60s60tn120 0
+H720
+V3972
+h360cs
+60e60v60e60r60a60lwh120cs
+60e60c60t60i60o60n60swh120cw
+60e60r60ewh120cw
+60r60i60t60t60e60nwh120ch
+60a60s60t60i60l60ywh120ci
+60nwh120ca
+60nwh120ca
+60t60t60e60m60p60twh120ct
+60owh120cp
+60r60o60v60i60d60ewh120ca
+n120 0
+H720
+V4092
+h360cg
+60e60n60e60r60a60lwh120ci
+60n60t60r60o60d60u60c60t60i60o60nwh120ct
+60owh120ct
+60h60ewh120cc
+60o60m60m60a60n60d60swh120ci
+60nwh120cE
+60m60a60c60swh120ca
+60n60dwh120ct
+60owh120ct
+60r60ywh120ct
+60owh120cs
+60h60o60wn120 0
+H720
+V4212
+h360ct
+60h60ewh120cm
+60e60t60h60o60dwh120ci
+60nwh120ct
+60h60ewh120cm
+60a60d60n60e60s60swh120ct
+60h60a60twh120ci
+60swh120ct
+60h60ewh120cE
+60m60a60c60swh120cc
+60o60m60m60a60n60dwh120cs
+60t60r60u60c60t60u60r60e60.n120 0
+H720
+x font 0 CI
+f0
+V4332
+h360c,
+60x60/60E60m60a60c60s60/60{n120 0
+H720
+V4452
+h610c=
+n120 0
+H720
+V4572
+h610c+
+60-60pn120 0
+H720
+V4692
+h360c}
+n120 0
+H720
+f5
+V4812
+h360c3
+60;wh120c#
+60160760160,60#601607606n120 0
+H720
+V4932
+h360cg
+60e60n60e60r60a60lwh120ci
+60n60t60r60o60d60u60c60t60i60o60nwh120ct
+60owh120ct
+60h60ewh120cc
+60o60m60m60a60n60d60swh120ci
+60nwh120cE
+60m60a60c60swh120ca
+60n60dwh120ct
+60owh120ct
+60r60ywh120ct
+60owh120cs
+60h60o60wn120 0
+H720
+V5052
+h360c4
+60;wh120c#
+60260360460,60#602603609n120 0
+H720
+V5172
+h360ct
+60h60ewh120cm
+60e60t60h60o60dwh120ci
+60nwh120ct
+60h60ewh120cm
+60a60d60n60e60s60swh120ct
+60h60a60twh120ci
+60swh120ct
+60h60ewh120cE
+60m60a60c60swh120cc
+60o60m60m60a60n60dwh120cs
+60t60r60u60c60t60u60r60e60.n120 0
+H720
+f1
+V5352
+c(
+33T61h50ew79n50u50m78b50e44rw68b50e44f33o50r33ew79t28h50ew79s39e44m78i28c44o50l28o50nw85i28sw74t28h50ew79l28i28n50ew79n50u50m78b50e44r33;w64t28h50ew80n50u50m78b50e44r33sw75b50e44g50i28n50n50i28n50gw86w72i28t28hwf5
+86#wf1
+96a44r33ew80c44h50a44r33a44c44t28e44rw69n50u50mh78Chy
+n120 0
+H720
+V5472
+cb
+50e44r33s39.25)w91A72sw72aw77m78o50r33ew77i28n50t28e44r33e44s39t28i28n50gw83e44x50a44m78p50l28e44,w58c44o50n50s39i28d50e44rw66c44h50a44n50g50i28n50gw83a44l28lw61o50c44c44u50r33r33e44n50c44e44sw71o50fwf5
+65E60m60a60c60swf1
+92t28owf5
+82v60iwf1
+92a44n50dw82v50i28c44ew76v50e44r33s39a44.n120 0
+H720
+V5592
+cW
+94ew69c44a44nw75t28y50p50en120 0
+H720
+x font 0 CI
+f0
+V5772
+h360c,
+60x60/60E60m60a60c60s60|60v60i60/60{n120 0
+H720
+V5892
+h610cg
+60/60E60m60a60c60s60/wh120cc
+60/60v60i60/n120 0
+H720
+V6012
+h610cg
+60/60v60i60/wh120cc
+60/60E60m60a60c60s60/n120 0
+H720
+V6132
+h360c}
+n120 0
+H720
+f1
+V6312
+co
+50rw58e44v50e44nn120 0
+H720
+x font 0 CI
+f0
+V6492
+h360c,
+60x60/60[60a60-60z60A60-60Z60]60+60/60{n120 0
+H720
+V6612
+h610cg
+60/60E60m60a60c60s60/wh120cv
+60/60.60.60.60.60.60.60/wh120cc
+60/60v60i60/n120 0
+H720
+V6732
+h610cg
+60/60v60i60/wh120cv
+60/60.60.60.60/wh120cc
+60/60E60m60a60c60s60/n120 0
+H720
+V6852
+h360c}
+n120 0
+H720
+f1
+V7032
+ct
+28ow75m78a44k50ew69s39u50r33ew69w72ew69d50o50n50'33tw53c44h50a44n50g50ew69s39t28r33i28n50g50sw64e44m78b50e44d50d50e44dw75i28nw75w72o50r33d50s39.n120 0
+V7920
+p10
+x font 1 R
+x font 2 I
+x font 3 B
+x font 4 BI
+x font 5 CW
+x font 6 H
+x font 7 HI
+x font 8 HB
+x font 9 S1
+x font 10 S
+s10
+f1
+H720
+V480
+h2052Chy
+w33 251500w50 h25Chy
+wn120 0
+H720
+f3
+V840
+cM
+94u56l28t33i28p56l28ew69C72h56a50n56g50e44sn120 0
+H720
+f1
+V996
+h250cY
+72o50uw89m78i28g50h50tw67w72o50n50d50e44rw72w72h50y50,w64o50n50c44ewf5
+83E60m60a60c60swf1
+99h50a44sw78b50e44e44nw89c44h50a44n50g50e44dw89t28owf5
+89v60iwf1
+99i28nw90t28h50ew84a44b50o50v50ew84e44x50a44m78p50l28e44,w65t28h50ew84s39e44c44o50n50dn120 0
+H720
+V1116
+cc
+44o50m78m78a44n50dw89i28nw89t28h50ew83b50r33a44c44e44sw78d50o50e44s39n50'33tw67p50u50tw67i28tw67b50a44c44kw89a44g50a44i28n50.w89T61h50ew83r33e44a44s39o50nw88i28sw77t28h50a44tw66t28h50ew82c44o50m78m78a44n50d50sw77a44r33ew82r33u50nw88i28nw88p50a44r33a44l28l28e44l28:n120 0
+H720
+V1236
+cw
+72i28t28h50i28nw85a44n50yw85t28o50p50-33l28e44v50e44lwf5
+63s60a60mwf1
+95c44o50m78m78a44n50d50,w60a44l28lw63c44h50a44n50g50e44sw74t28ow85t28h50ew79f33i28l28ew79r33e44f33e44rw68t28ow85t28h50ew79s39t28a44t28ew79o50fw68t28h50ew79f33i28l28ew79b50e44f33o50r33ew79a44n50yw85o50fw69t28h50en120 0
+H720
+V1356
+cc
+44h50a44n50g50e44sw66i28nw77t28h50a44tw54c44o50m78m78a44n50dw76a44r33ew70m78a44d50e44.w76A72f33t28e44rw59a44l28lw54t28h50ew70c44h50a44n50g50e44sw65h50a44v50ew70b50e44e44nw76d50e44t28e44r33m78i28n50e44d50,w51t28h50e44yw76a44r33ew70a44l28lw54a44p50p50l28i28e44dw76s39i28m78u50lh28Chy
+n120 0
+H720
+V1476
+ct
+28a44n50e44o50u50s39l28y50.n120 0
+H720
+V1632
+h250cT
+61h50i28sw79m78e44a44n50s39,w65a44sw80m78e44n50t28i28o50n50e44d50,w66t28h50a44tw69c44o50m78m78a44n50d50sw80w72i28t28h50i28nw91aw85c44o50m78p50o50u50n50dw91c44o50m78m78a44n50dw91s39e44ew85t28h50ew85s39t28a44t28ew85o50fw74t28h50ew85f33i28l28en120 0
+H720
+V1752
+cb
+50e44f33o50r33ew93a44n50yw99o50fw82t28h50ew93c44h50a44n50g50e44sw88a44p50p50l28y50.w99T61h50i28sw88m78e44t28h50o50dw99o50fw82e44v50a44l28u50a44t28i28o50nw99m78a44k50e44sw88s39o50m78ew93t28h50i28n50g50sw88e44a44s39i28e44rw82(33s39u50c44hw99a44sw87t28h50en120 0
+H720
+V1872
+ce
+44x50c44h50a44n50g50ew70o50fwf5
+59E60m60a60c60swf1
+86a44n50dwf5
+76v60if1
+60)33,w51a44n50dw76s39o50m78ew70t28h50i28n50g50sw65h50a44r33d50e44r33.w76F56o50rw59i28n50s39t28a44n50c44e44,w51i28tw54i28sw65i28m78p50o50s39s39i28b50l28ew71t28ow77u50s39ew71awf5
+71pwf1
+87c44o50m78m78a44n50dw77t28on120 0
+H720
+V1992
+cp
+50r33i28n50tw54t28h50ew70c44h50a44n50g50e44sw65a44sw65t28h50e44yw76h50a44p50p50e44n50,w51b50e44c44a44u50s39ew70t28h50e44yw76h50a44v50e44n50'33tw54h50a44p50p50e44n50e44dw76w72h50e44nw76t28h50ewf5
+70pwf1
+86i28sw65e44x50e44c44u50t28e44d50.w76A72nw75i28n50d50i28r33e44c44tw53r33a44m78ih28Chy
+n120 0
+H720
+V2112
+cf
+33i28c44a44t28i28o50nw75i28sw64t28h50a44tw53c44h50a44n50g50e44sw64m78u50s39tw53o50c44c44u50rw58i28nw75f33o50r33w72a44r33dw75o50r33d50e44rw58t28h50r33o50u50g50hw75t28h50ew69f33i28l28e44,w50a44n50dw75m78u50s39tw53n50o50tw53o50v50e44r33l28a44p50.n120 0
+H720
+f3
+V2352
+cU
+72n56i28xn120 0
+H720
+f5
+V2508
+h250cs
+60a60mwf1
+87h50a44sw66aw71f33e44ww99c44o50m78m78a44n50d50sw66t28ow77c44o50n50n50e44c44tw55t28ow77U72n50i28xw77p50r33o50c44e44s39s39e44s39.w77T61h50ew71s39i28m78p50l28e44s39tw55i28swf5
+66!f1
+60,w52w72h50i28c44hw77r33u50n50sw66t28h50ew72c44o50m78m78a44n50dn120 0
+H720
+V2628
+cw
+72i28t28hw75i28n50p50u50tw53a44n50dw75o50u50t28p50u50tw53c44o50n50n50e44c44t28e44dw75t28ow75t28h50ew69t28e44r33m78i28n50a44l28.n120 0
+H720
+x font 0 CI
+f0
+V2808
+h360c!
+60d60a60t60en120 0
+H720
+f5
+V2928
+h360cW
+60e60dwh120cM
+60a60ywh120c2
+608wh120c2
+60360:60260560:602601wh120cE
+60D60Twh120c1
+609608606n120 0
+H720
+V3048
+h360c!
+n120 0
+H720
+f1
+V3228
+c(
+33W94h50e44nw94d50o50w72n50l28o50a44d50e44d50,w69t28h50ew88i28n50p50u50tw72i28sw84c44o50n50n50e44c44t28e44dw95t28owf5
+95/60d60e60v60/60n60u60l60lwf1
+h105ca
+44n50dw95o50n50l28yw95t28h50ew89f33i28r33s39tw73f33e44wwh117cl
+28i28n50e44sw84o50fw78o50u50t28p50u50tw73a44r33en120 0
+H720
+V3348
+cp
+50r33i28n50t28e44d50;w59a44n50yw81o50v50e44r33f33l28o50wwh103ci
+28sw70s39t28o50r33e44dw81i28nwf5
+81$60H60O60M60E60/60s60a60m60.60e60r60rf1
+60.25)w89T61h50ew75f33i28n50a44lwf5
+58!wf1
+90i28sw69aw74p50r33o50m78p50tw58t28ow80i28n50d50i28c44a44t28ew74w72h50e44nw80t28h50ew74c44o50mh78Chy
+n120 0
+H720
+V3468
+cm
+78a44n50dw75c44o50m78p50l28e44t28e44s39.n120 0
+H720
+V3624
+h250cS
+56l28i28g50h50t28l28yw87m78o50r33ew81i28n50t28e44r33e44s39t28i28n50gw87i28swf5
+76>f1
+60,w62w72h50i28c44hw87p50r33o50v50i28d50e44sw76t28h50ew81c44u50r33r33e44n50tw65t28e44x50tw66a44sw77s39t28a44n50d50a44r33dw88i28n50p50u50tw66t28ow88t28h50ew82U72n50i28xw88c44o50mh78Chy
+n120 0
+H720
+V3744
+cm
+78a44n50d50:n120 0
+H720
+x font 0 CI
+f0
+V3924
+h360c1
+60,602wh120c>
+60w60cn120 0
+H720
+wf5
+V4044
+h720c2
+wh480c2
+602wh420c1
+603601n120 0
+H720
+V4164
+h360c!
+n120 0
+H720
+f1
+V4344
+cT
+61h50ew71c44o50m78p50l28e44m78e44n50tw55o50fwf5
+60>wf1
+87i28s39,w53n50a44t28u50r33a44l28l28y50,wf5
+53<f1
+60:w56i28tw56r33e44p50l28a44c44e44sw67t28h50ew72c44u50r33r33e44n50tw56t28e44x50tw56w72i28t28hw78t28h50ew72s39t28a44n50d50a44r33dw78o50u50t28p50u50tw56o50fw61t28h50ew72U72n50i28xw78c44o50mh78Chy
+n120 0
+H720
+V4464
+cm
+78a44n50d50:n120 0
+H720
+x font 0 CI
+f0
+V4644
+h360c1
+wh120c<
+60d60a60t60en120 0
+H720
+f5
+V4764
+h360c!
+n120 0
+H720
+x font 0 CI
+f0
+V4884
+h360c1
+60pn120 0
+H720
+f5
+V5004
+h360cW
+60e60dwh120cM
+60a60ywh120c2
+608wh120c2
+60360:60260660:604604wh120cE
+60D60Twh120c1
+609608606n120 0
+H720
+f1
+V5184
+cT
+61h50ew71l28a44s39tw55c44o50m78m78a44n50dw77i28swf5
+66|f1
+60,w52w72h50i28c44hw77i28sw66aw71c44o50m78b50i28n50a44t28i28o50nw77o50fwf5
+60<wf1
+87a44n50dwf5
+77>f1
+60:w55t28h50ew71c44u50r33r33e44n50tw55t28e44x50tw55i28sw66p50r33o50v50i28d50e44dw77a44sw66s39t28a44n50d50a44r33dw78i28n50p50u50tw56t28on120 0
+H720
+V5304
+ct
+28h50ew76U72n50i28xw82c44o50m78m78a44n50d50,w57a44n50dw82t28h50ew76U72n50i28xw81c44o50m78m78a44n50d50'33sw70s39t28a44n50d50a44r33dw81o50u50t28p50u50tw59i28sw70c44o50l28l28e44c44t28e44dw81a44n50dw81u50s39e44dw81t28ow81r33e44p50l28a44c44ew75t28h50ew75o50r33i28g50i28n50a44ln120 0
+H720
+V5424
+ct
+28e44x50t28.w75F56o50rw58e44x50a44m78p50l28e44,n120 0
+H720
+x font 0 CI
+f0
+V5604
+h360c,
+60|wh120cs
+60o60r60tn120 0
+H720
+f1
+V5784
+cr
+33u50n50swf5
+65s60o60r60tf1
+60(33150)w59o50nw76t28h50ew70f33i28l28e44,w51s39o50r33t28i28n50gw76t28h50ew70l28i28n50e44sw65o50fw59t28h50ew70t28e44x50tw54l28e44x50i28c44o50g50r33a44p50h50i28c44a44l28l28y50.w76N72o50t28ew70t28h50a44twf5
+54<f1
+60,wf5
+52>wf1
+87a44n50dwf5
+77|wf1
+87a44r33ewf5
+71s60a60mwf1
+87c44o50mh78Chy
+n120 0
+H720
+V5904
+cm
+78a44n50d50s39,w50n50o50tw53U72n50i28xw75s39h50e44l28lw53o50p50e44r33a44t28o50r33s39.n120 0
+H720
+V6060
+h250cT
+61h50ew69n50e44x50tw53e44x50a44m78p50l28ew69c44o50n50v50e44r33t28sw64a44l28lw53a44p50p50e44a44r33a44n50c44e44sw64o50fwf5
+58E60m60a60c60swf1
+85t28ow75u50p50p50e44rw58c44a44s39ew69u50s39i28n50gwf5
+75t60rf1
+60(33150)33:n120 0
+H720
+x font 0 CI
+f0
+V6240
+h360c,
+60x60/60E60m60a60c60s60/wh120c|
+wh120ct
+60rwh120ca
+60-60zwh120cA
+60-60Zn120 0
+H720
+f5
+V6420
+ct
+60rwf1
+88i28sw67r33u50nw78o50n50c44ew72f33o50rw61e44a44c44hw78o50c44c44u50r33r33e44n50c44ew72o50fwf5
+61E60m60a60c60sf1
+60.w78O72fw61c44o50u50r33s39e44,w53y50o50uw78c44o50u50l28dw78d50ow78t28h50i28sw67e44x50a44m78p50l28ew73m78o50r33ew73e44f33f33i28c44i28e44n50t28l28yw79w72i28t28hn120 0
+H720
+V6540
+ca
+w76s39i28m78p50l28ewf5
+76cwf1
+92c44o50m78m78a44n50d50,w57b50u50tw60h50e44r33e44'33sw71aw76t28r33i28c44k50i28e44rw65o50n50e44:w60g50i28v50e44nw82aw76U72n50i28xw82m78a44i28lw60b50o50xw82a44sw71i28n50p50u50t28,w57c44o50n50v50e44r33tw60a44l28lw59t28h50ewf5
+75S60u60b60j60e60c60tn120 0
+H720
+f1
+V6660
+ch
+50e44a44d50e44r33sw64t28ow75d50i28s39t28i28n50c44tw53f33o50r33t28u50n50e44s39:n120 0
+H720
+x font 0 CI
+f0
+V6840
+h360c,
+60x60/60^60S60u60b60j60e60c60t60:60.60*60\60n60/wh120cx
+60/60[60^60:60]60*60\60n60/wh120c<
+wh120c/
+60u60s60r60/60g60a60m60e60s60/60f60o60r60t60u60n60en120 0
+H720
+f1
+V7020
+c(
+33T61h50ew91r33e44g50u50l28a44rw80e44x50p50r33e44s39s39i28o50nwf5
+97[60^60:60]wf1
+h107cr
+33e44f33e44r33sw86t28ow97a44n50yw97c44h50a44r33a44c44t28e44rwf2
+80e44x44c44e44p50twf5
+75:wf1
+h108ca
+44n50dw98n50e44w72l28i28n50e44;w76t28h50ew92n50e44g50a44t28i28o50nw98o50p50e44r33a44t28o50rwf5
+81^n120 0
+H720
+f1
+V7140
+ce
+44x50c44l28u50d50e44sw88n50e44w72l28i28n50ew93f33r33o50mwh127ct
+28h50ew93l28i28s39tw77o50fw82c44h50a44r33a44c44t28e44r33s39.25)w82A72g50a44i28n50,wf5
+74/60u60s60r60/60g60a60m60e60s60/60f60o60r60t60u60n60ewf1
+h109ci
+28sw88r33u50nw99o50n50c44ew93f33o50rw82e44a44c44hn120 0
+H720
+f5
+V7260
+cS
+60u60b60j60e60c60twf1
+85l28i28n50e44,w50s39ow75e44a44c44hwf5
+75S60u60b60j60e60c60twf1
+85l28i28n50ew69i28sw64c44h50a44n50g50e44dw75t28ow75aw69d50i28f33f33e44r33e44n50tw53f33o50r33t28u50n50e44.n120 0
+V7920
+p11
+x font 1 R
+x font 2 I
+x font 3 B
+x font 4 BI
+x font 5 CW
+x font 6 H
+x font 7 HI
+x font 8 HB
+x font 9 S1
+x font 10 S
+s10
+f1
+H720
+V480
+h2052Chy
+w33 25150150 h25Chy
+wn120 0
+H720
+f3
+V840
+cA
+w97f33e44ww97o50t33h56e44rw69t33e44x50tw58c44o50m83m83a50n56d56sn120 0
+H720
+f1
+V996
+h250cF
+56o50rw71c44o50m78p50l28e44t28e44n50e44s39s39,w63Iw71s39h50o50u50l28dw88m78e44n50t28i28o50nw88t28h50r33e44ew82o50t28h50e44rw71c44o50m78m78a44n50d50sw78t28h50a44tw67m78a44n50i28p50u50l28a44t28ew83t28e44x50t28.w89T61h50ewf5
+83mwf1
+99c44o50m78m78a44n50dn120 0
+H720
+V1116
+cm
+78o50v50e44sw64t28h50ew69c44u50r33r33e44n50tw53t28e44x50tw53t28ow75a44f33t28e44rw58t28h50ew69t28e44x50tw53s39p50e44c44i28f33i28e44dw75b50yw75t28h50ew69(33o50b50l28i28g50a44t28o50r33y50)w58a44d50d50r33e44s39sw64a44f33t28e44rw58t28h50ew69c44o50m78m78a44n50d50.w75T61h50u50sn120 0
+H720
+x font 0 CI
+f0
+V1296
+h360c/
+60E60m60a60c60s60/60+60-wh120cm
+wh120c0
+n120 0
+H720
+f1
+V1476
+cm
+78o50v50e44sw65t28h50ew70n50e44x50tw54l28i28n50ew70c44o50n50t28a44i28n50i28n50gwf5
+76E60m60a60c60swf1
+86t28ow76t28h50ew70b50e44g50i28n50n50i28n50gw76o50fw59t28h50ew70f33i28l28e44.w76S56i28m78i28l28a44r33l28y50,wf5
+51twf1
+86(33a44n50o50t28h50e44rw60h50i28s39t28o50r33i28cw71c44h50a44r33a44c44t28e44r33)n120 0
+H720
+V1596
+cc
+44o50p50i28e44sw64t28h50ew69t28e44x50t28:n120 0
+H720
+x font 0 CI
+f0
+V1776
+h360c/
+60E60m60a60c60s60/60+60-wh120ct
+wh120c0
+n120 0
+H720
+f1
+V1956
+cw
+72o50u50l28dw75m78a44k50e44,w50a44tw53t28h50ew69b50e44g50i28n50n50i28n50gw75o50fw58t28h50ew69f33i28l28e44,w50aw69c44o50p50yw75o50fw58t28h50ew69n50e44x50tw53l28i28n50ew69c44o50n50t28a44i28n50i28n50gwf5
+75E60m60a60c60sf1
+60.n120 0
+H720
+V2112
+h250cT
+61h50ewh163ct
+28h50i28r33dwh169cc
+44o50m78m78a44n50dwh169ci
+28swh158cm
+78o50r33ewh163ci
+28n50t28e44r33e44s39t28i28n50g50:wh147ci
+28twh148cm
+78a44k50e44swh159cs
+39u50b50s39t28i28t28u50t28i28o50n50s39.wh170cI
+33t28swh159cs
+39y50n50t28a44xwh170ci
+28sn120 0
+H720
+f5
+V2232
+cs
+60/f2
+60p50a50t28t28e44r39nf5
+50/f2
+60r39e44p50l28a50c44e44m72e44n50tf5
+28/f1
+60.w78W94i28t28h50i28nw78t28h50ew72c44u50r33r33e44n50tw55t28e44x50t28,w52i28tw55f33i28n50d50sw66t28h50ew71f33i28r33s39tw55o50c44c44u50r33r33e44n50c44ew71o50fw60t28h50ew71p50a44t28t28e44r33nw77a44n50dw77r33e44p50l28a44c44e44sw66i28tn120 0
+H720
+V2352
+cb
+50yw75t28h50ew69r33e44p50l28a44c44e44m78e44n50tw53t28e44x50t28,w50l28e44a44v50i28n50gw75d50o50tw53s39e44tw53t28ow75t28h50ew69e44n50t28i28r33ew69a44d50d50r33e44s39sw64o50fw58t28h50ew69s39u50b50s39t28i28t28u50t28i28o50n50.n120 0
+H720
+x font 0 CI
+f0
+V2532
+h360c1
+60pn120 0
+H720
+f5
+V2652
+h360cT
+60h60i60swh120cm
+60a60n60u60a60lwh120ci
+60swh120co
+60r60g60a60n60i60z60e60dwh120ci
+60nwh120ca
+wh120cr
+60a60t60h60e60rwh120ch
+60a60p60h60a60z60a60r60dwh120cm
+60a60n60n60e60r60.wh180cT
+60h60ewh120cf
+60i60r60s60tn120 0
+H720
+x font 0 CI
+f0
+V2772
+h360cs
+60/60h60a60p60h60a60z60a60r60d60/60t60h60o60u60g60h60t60l60e60s60s60/n120 0
+H720
+V2892
+h360cp
+n120 0
+H720
+f5
+V3012
+h360cT
+60h60i60swh120cm
+60a60n60u60a60lwh120ci
+60swh120co
+60r60g60a60n60i60z60e60dwh120ci
+60nwh120ca
+wh120cr
+60a60t60h60e60rwh120ct
+60h60o60u60g60h60t60l60e60s60swh120cm
+60a60n60n60e60r60.wh180cT
+60h60ewh120cf
+60i60r60s60tn120 0
+H720
+f1
+V3192
+cO
+72c44c44u50r33r33e44n50c44e44sw64o50fw58t28h50ew69c44h50a44r33a44c44t28e44rwf5
+58&wf1
+85i28nw75t28h50ew69r33e44p50l28a44c44e44m78e44n50tw53t28e44x50tw53s39t28a44n50dw75f33o50rw58t28h50ew69t28e44x50tw53m78a44t28c44h50i28n50gw75t28h50ew69p50a44t28t28e44r33n50.n120 0
+H720
+x font 0 CI
+f0
+V3372
+h360cs
+60/60T60/60"60&60&60&60&60"60/n120 0
+H720
+V3492
+h360cp
+n120 0
+H720
+f5
+V3612
+h360c"
+60T60T60T60T60"60h60i60swh120cm
+60a60n60u60a60lwh120ci
+60swh120co
+60r60g60a60n60i60z60e60dwh120ci
+60nwh120ca
+wh120cr
+60a60t60h60e60rwh120ct
+60h60o60u60g60h60t60l60e60s60swh120cm
+60a60n60n60e60r60.wh180cT
+60h60ewh120cf
+60i60r60s60tn120 0
+H720
+f1
+V3792
+cT
+61h50e44r33ew69a44r33ew69t28w72ow75v50a44r33i28a44n50t28s39.w75T61h50ew69f33i28r33s39tw53i28sw64t28h50a44tw53aw69n50u50m78b50e44rw58m78a44yw75b50ew69s39p50e44c44i28f33i28e44dw75a44f33t28e44rw58t28h50ewf5
+70sf1
+60,w51t28ow76i28n50d50i28c44a44t28ew70w72h50i28c44hw76o50c44c44u50r33r33e44n50c44en120 0
+H720
+V3912
+co
+50fw58t28h50ew69p50a44t28t28e44r33nw75t28ow75s39u50b50s39t28i28t28u50t28e44;w53t28h50ew69d50e44f33a44u50l28tw53i28sw64t28h50ew69f33i28r33s39t28.n120 0
+H720
+x font 0 CI
+f0
+V4092
+h360cs
+60260/60i60s60/60w60a60s60/n120 0
+H720
+V4212
+h360cp
+n120 0
+H720
+f5
+V4332
+h360c"
+60T60T60T60T60"60h60i60swh120cm
+60a60n60u60a60lwh120cw
+60a60swh120co
+60r60g60a60n60i60z60e60dwh120ci
+60nwh120ca
+wh120cr
+60a60t60h60e60rwh120ct
+60h60o60u60g60h60t60l60e60s60swh120cm
+60a60n60n60e60r60.wh180cT
+60h60ewh120cf
+60i60r60s60tn120 0
+H720
+f1
+V4512
+cT
+61h50ew69s39e44c44o50n50dw75i28sw64t28h50a44tw53s39u50f33f33i28x50i28n50gw75awf5
+69gwf1
+85(33g50l28o50b50a44l28)w58c44a44u50s39e44sw64r33e44p50l28a44c44e44m78e44n50tw53o50fw58a44l28lw53o50c44c44u50r33r33e44n50c44e44s39,w50n50o50tw53j28u50s39tw53t28h50ew69f33i28r33s39t28.n120 0
+H720
+x font 0 CI
+f0
+V4692
+h360cs
+60/60[60a60-60z60A60-60Z60]60/60x60/60gn120 0
+H720
+V4812
+h360cp
+n120 0
+H720
+f5
+V4932
+h360c"
+60x60x60x60x60"60x60x60xwh120cx
+60x60x60x60x60xwh120cx
+60x60xwh120cx
+60x60x60x60x60x60x60x60xwh120cx
+60xwh120cx
+wh120cx
+60x60x60x60x60xwh120cx
+60x60x60x60x60x60x60x60x60x60xwh120cx
+60x60x60x60x60x60xwh180cx
+60x60xwh120cx
+60x60x60x60xn120 0
+H720
+f1
+V5112
+cN
+72o50t28i28c44ew69t28h50a44tw53i28nw75a44l28lw53t28h50e44s39ew69e44x50a44m78p50l28e44sw64d50o50tw53i28sw64l28e44f33tw53s39e44tw53t28ow75t28h50ew69e44n50t28i28r33ew69l28i28n50e44.n120 0
+H720
+V5268
+h250c[
+33T61h50ew71s39u50b50s39t28i28t28u50t28ew71c44o50m78m78a44n50dw77i28sw66v50i28t28a44lw55t28owf5
+77e60d60,wf1
+87b50e44c44a44u50s39ew71i28tw55i28sw66t28h50ew71o50n50l28yw78w72a44yw78t28ow78m78a44k50ew72c44h50a44n50g50e44sw67w72i28t28h50i28nw78aw72l28i28n50e44.w78I33tn120 0
+H720
+V5388
+ci
+28sw67l28e44s39sw67v50a44l28u50a44b50l28ew72i28nwf5
+78s60a60mf1
+60,w53i28nw78w72h50i28c44hw78t28h50ew72c44o50n50c44e44p50tw56o50fw61aw72l28i28n50ew72i28sw67m78u50c44hw78l28e44s39sw67i28m78p50o50r33t28a44n50t28.w78F56o50rw61e44x50a44m78p50l28e44,w52m78a44n50ywf5
+77e60dwf1
+87s39u50bh50Chy
+n120 0
+H720
+V5508
+cs
+39t28i28t28u50t28i28o50nw75i28d50i28o50m78sw64a44r33ew69h50a44n50d50l28e44dw75w72e44l28lw53b50ywf5
+75s60a60mf1
+60'33sw64b50a44s39i28cw69c44o50m78m78a44n50d50s39.w50C67o50n50s39i28d50e44rw58t28h50ew69c44o50m78m78a44n50d50sn120 0
+H720
+f5
+V5688
+h360cs
+60/60g60o60o60d60/60b60a60d60/n120 0
+H720
+V5808
+h360cs
+60/60g60o60o60d60/60/n120 0
+H720
+V5928
+h360cs
+60/60g60o60o60d60/60&wh120cb
+60y60e60/n120 0
+H720
+f1
+V6108
+cw
+72h50i28c44hw75a44r33ew69e44q50u50i28v50a44l28e44n50tw53i28nwf5
+75s60a60mwf1
+85t28on120 0
+H720
+f5
+V6288
+h360c/
+60g60o60o60d60/60c60/60b60a60d60/n120 0
+H720
+V6408
+h360c/
+60g60o60o60d60/60dn120 0
+H720
+V6528
+h360c/
+60g60o60o60d60/60a60/wh120cb
+60y60e60/n120 0
+H720
+f1
+V6708
+ca
+44n50dw76f33o50rw59w72h50i28c44hw76t28h50ew70c44o50n50t28e44x50tw54s39e44a44r33c44hw76i28sw65l28i28k50e44l28yw76u50n50n50e44c44e44s39s39a44r33yw76b50e44c44a44u50s39ew71t28h50ew71d50e44s39i28r33e44dw77t28e44x50tw55i28sw66a44l28r33e44a44d50yw77d50o50t28.w77A72l28s39o50,w52b50e44w72a44r33en120 0
+H720
+V6828
+ct
+28h50i28swf5
+64e60dwf1
+85i28d50i28o50m78:n120 0
+H720
+f5
+V7008
+h360c1
+60,60$60s60/60g60o60o60d60/60b60a60d60/n120 0
+H720
+f1
+V7188
+cw
+72h50i28c44hw77c44h50a44n50g50e44sw66t28h50ew71f33i28r33s39twf5
+55g60o60o60dwf1
+87o50nw77e44a44c44hw77l28i28n50e44;w55t28h50ew71s39a44m78ew71c44o50m78m78a44n50dw78i28nwf5
+78s60a60mwf1
+88w72i28l28lw56o50n50l28yw78c44h50a44n50g50ew72t28h50ew72f33i28r33s39tw56o50n50ew72i28nw78t28h50en120 0
+H720
+V7308
+cw
+72h50o50l28ew69f33i28l28e44.w75T61h50ew69c44o50r33r33e44c44twf5
+53s60a60mwf1
+85v50e44r33s39i28o50nw75i28sn120 0
+V7920
+p12
+x font 1 R
+x font 2 I
+x font 3 B
+x font 4 BI
+x font 5 CW
+x font 6 H
+x font 7 HI
+x font 8 HB
+x font 9 S1
+x font 10 S
+s10
+f1
+H720
+V480
+h2052Chy
+w33 251502w50 h25Chy
+wn120 0
+H720
+f5
+V900
+h360c,
+60xwh120cs
+60/60g60o60o60d60/60b60a60d60/n120 0
+H720
+f1
+V1080
+cb
+50u50tw53w72h50a44tw53i28sw64m78o50r33ew69l28i28k50e44l28yw75m78e44a44n50tw53i28sn120 0
+H720
+f5
+V1260
+h360c,
+60x60/60g60o60o60d60/wh120cc
+60/60b60a60d60/n120 0
+H720
+V1440
+cs
+60a60mwf1
+85o50p50e44r33a44t28e44sw64u50n50d50e44rw58d50i28f33f33e44r33e44n50tw53r33u50l28e44s39.25]n120 0
+H720
+f3
+V1680
+cF
+61i28l28e44sn120 0
+H720
+f1
+V1836
+h250cS
+56ow84f33a44r33,w59w72ew78h50a44v50ew78o50n50l28yw84b50e44e44nw84w72o50r33k50i28n50gw84w72i28t28hw84aw78s39i28n50g50l28ew78f33i28l28e44,w59b50u50twf5
+62s60a60mwf1
+94i28sw73aw78m78u50l28t28i28-33f33i28l28ew79e44d50i28t28o50r33.w85O72n50l28yw85o50n50ew79f33i28l28en120 0
+H720
+V1956
+cm
+78a44yw76b50ew70e44d50i28t28e44dw76a44tw54aw70t28i28m78e44,w51b50u50tw54i28tw54i28sw65e44a44s39yw76t28ow76c44h50a44n50g50ew70w72h50i28c44hw76f33i28l28ew70i28sw65t28h50ew70`33c44u50r33r33e44n50t28'w59f33i28l28ew70f33o50rw59e44d50i28t28i28n50g50.w76T61ow76s39e44ew70h50o50ww98t28ow76d50on120 0
+H720
+V2076
+ct
+28h50i28s39,w52w72ew71n50e44e44dw77awf5
+71s60a60mwf1
+87w72i28t28hw77aw71f33e44ww99f33i28l28e44s39;w55t28h50ew71e44a44s39i28e44s39tw55w72a44yw77t28ow77d50ow77t28h50i28sw66i28sw66t28ow77s39t28a44r33tw55i28tw55w72i28t28hw77aw71l28i28s39tw56o50fw61U72n50i28xw78f33i28l28ew72n50a44m78e44sw67t28on120 0
+H720
+V2196
+ce
+44d50i28t28.n120 0
+H720
+f5
+V2376
+h360c$
+wx font 0 CI
+f0
+h120ce
+60c60h60owh120c*
+60.60m60sn120 0
+H720
+f5
+V2496
+h360cc
+60o60n60q60u60e60s60t60.60m60swh120cd
+60e60a60t60h60.60m60swh120ce
+60m60a60c60s60.60m60swh120cf
+60a60m60i60n60e60.60m60swh120cs
+60l60a60u60g60h60t60e60r60.60m60sn120 0
+H720
+V2616
+h360c$
+wx font 0 CI
+f0
+h120cs
+60a60mwh120c-
+60dwh120c*
+60.60m60sn120 0
+H720
+wf5
+V2736
+h420c-
+60.wh120cc
+60o60n60q60u60e60s60t60.60m60sn120 0
+H720
+f1
+V2916
+c(
+33I33'33mwh105cs
+39o50r33r33yw77t28h50ew71H72o50r33s39e44m78e44nw77d50o50n50'33tw55a44p50p50e44a44rw60i28nw77l28i28t28u50r33g50i28c44a44lw56o50r33d50e44r33.25)w86T61h50ew72l28i28n50ew72p50r33i28n50t28e44dw78b50ywf5
+78s60a60mwf1
+88i28sw67a44nw78i28n50d50i28c44a44t28i28o50nw78t28h50a44tw56t28h50en120 0
+H720
+V3036
+cU
+72n50i28xw79f33i28l28ewf5
+73c60o60n60q60u60e60s60t60.60m60swf1
+89h50a44sw68b50e44e44nw79r33e44a44d50,w54a44n50dw79i28sw67n50o50wwh100ct
+28h50ew72c44u50r33r33e44n50tw56f33i28l28e44.wf5
+78s60a60mwf1
+88d50o50e44sw67n50o50tw56r33e44a44dw78t28h50ew72U72n50i28xw78f33i28l28ew72u50n50t28i28ln120 0
+H720
+V3156
+ct
+28h50ew69a44s39s39o50c44i28a44t28e44dwf5
+75s60a60mwf1
+85f33i28l28ew69b50e44c44o50m78e44sw64c44u50r33r33e44n50t28.n120 0
+H720
+V3312
+h250cT
+61h50ewf5
+69nwf1
+85c44o50m78m78a44n50dw75p50r33i28n50t28sw64t28h50ew69n50a44m78e44sw64o50fw58a44l28lw53t28h50ew69f33i28l28e44s39:n120 0
+H720
+x font 0 CI
+f0
+V3492
+h360cn
+n120 0
+H720
+wf5
+V3612
+h420c-
+60.wh120cc
+60o60n60q60u60e60s60t60.60m60sn120 0
+H720
+wV3732
+h420c-
+wh180cd
+60e60a60t60h60.60m60sn120 0
+H720
+wV3852
+h420c-
+wh180ce
+60m60a60c60s60.60m60sn120 0
+H720
+wV3972
+h420c-
+wh180cf
+60a60m60i60n60e60.60m60sn120 0
+H720
+wV4092
+h420c-
+wh180cs
+60l60a60u60g60h60t60e60r60.60m60sn120 0
+H720
+f1
+V4272
+cT
+61h50i28sw65l28i28s39tw54i28sw65a44l28s39ow76a44v50a44i28l28a44b50l28ew70i28nw76t28h50ew70m78e44n50uw76o50nw76m78o50u50s39ew70b50u50t28t28o50nw76350.w76T61h50ew70c44o50m78m78a44n50dwf5
+76fwf1
+86t28e44l28l28sw65t28h50ew70n50a44m78ew70o50fw59j28u50s39tw54t28h50ew70c44u50r33r33e44n50tn120 0
+H720
+V4392
+cf
+33i28l28e44:n120 0
+H720
+x font 0 CI
+f0
+V4572
+h360cf
+n120 0
+H720
+wf5
+V4692
+h420c-
+60.wh120cc
+60o60n60q60u60e60s60t60.60m60sn120 0
+H720
+f1
+V4872
+cT
+61h50ew87c44h50a44r33a44c44t28e44r33sw82t28ow93t28h50ew87l28e44f33tw72o50fw77t28h50ew88f33i28l28ew88n50a44m78ew88e44n50c44o50d50ew88h50e44l28p50f33u50lw72i28n50f33o50r33m78a44t28i28o50nw94a44b50o50u50tw72t28h50ew88f33i28l28e44.w94T61h50ew88m78i28n50u50sw83s39i28g50nn120 0
+H720
+V4992
+cb
+50e44c44o50m78e44sw73aw78p50l28u50sw73s39i28g50nw84i28fw67t28h50ew78f33i28l28ew78h50a44sw73aw78w72i28n50d50o50wwh106co
+50p50e44n50,w59a44n50dw84a44nw84a44s39t28e44r33i28s39kw84i28fw67m78o50r33ew78t28h50a44nw84o50n50ew78i28sw73o50p50e44n50.w84T61h50ew77p50e44r33i28o50dn120 0
+H720
+V5112
+c(
+33a44n50o50t28h50e44rw58m78e44a44n50i28n50gw75o50fw58d50o50t28)w58i28d50e44n50t28i28f33i28e44sw64t28h50ew69c44u50r33r33e44n50tw53f33i28l28e44.w75T61h50ew69l28e44a44d50i28n50gw75b50l28a44n50kw75c44h50a44n50g50e44sw64t28ow76a44nw76a44p50o50s39t28r33o50p50h50ew70i28fw59t28h50ew70f33i28l28ew70i28sn120 0
+H720
+V5232
+cd
+50i28f33f33e44r33e44n50tw61f33r33o50mwh111ct
+28h50ew77c44o50n50t28e44n50t28sw72o50fw66t28h50ew77a44s39s39o50c44i28a44t28e44dw83U72n50i28xw83f33i28l28e44,w58a44sw72f33a44rw66a44swf5
+72s60a60mwf1
+93k50n50o50w72s39.w83T61h50i28sw71b50e44c44o50m78e44sw71e44v50i28d50e44n50tw60i28fw65w72en120 0
+H720
+V5352
+cm
+78a44k50ew69aw69c44h50a44n50g50e44.n120 0
+H720
+x font 0 CI
+f0
+V5532
+h360c1
+60dn120 0
+H720
+V5652
+h360cf
+n120 0
+H720
+f5
+V5772
+h360c'
+60-60.wh120cc
+60o60n60q60u60e60s60t60.60m60sn120 0
+H720
+f1
+V5952
+cI
+33fw58t28h50ew69f33i28l28ew69i28sw64r33e44s39t28o50r33e44dw75b50yw75a44nw75u50n50d50ow75c44o50m78m78a44n50d50,w50t28h50ew69a44p50o50s39t28r33o50p50h50ew69d50i28s39a44p50p50e44a44r33s39.n120 0
+H720
+x font 0 CI
+f0
+V6132
+h360cu
+n120 0
+H720
+V6252
+h360cf
+n120 0
+H720
+wf5
+V6372
+h420c-
+60.wh120cc
+60o60n60q60u60e60s60t60.60m60sn120 0
+H720
+f1
+V6552
+cT
+61h50ew69f33i28l28ew69n50a44m78ew69m78a44yw75b50ew69c44h50a44n50g50e44dw75b50yw75p50r33o50v50i28d50i28n50gw75aw69n50e44ww97n50a44m78ew69w72i28t28hw75t28h50ewf5
+69fwf1
+85c44o50m78m78a44n50d50:n120 0
+H720
+f5
+V6732
+h360cf
+wh120cp
+60e60s60t60i60l60e60n60c60e60.60m60sn120 0
+H720
+V6852
+h360c'
+60-60.wh120cp
+60e60s60t60i60l60e60n60c60e60.60m60sn120 0
+H720
+x font 0 CI
+f0
+V7032
+cf
+wf1
+99p50r33i28n50t28sw78t28h50ew83n50e44wwh111cs
+39t28a44t28u50sw78o50fw72t28h50ew84f33i28l28e44,w65t28h50a44tw68i28s39,w65i28tw68c44h50a44n50g50e44sw79t28h50ew84n50a44m78ew84i28fw73o50n50ew84i28sw79p50r33o50v50i28d50e44d50,w65a44n50dw90p50r33i28n50t28sw79t28h50ew84n50a44m78en120 0
+H720
+V7152
+cr
+33e44g50a44r33d50l28e44s39s39.w75Aw97f33i28l28ew69n50a44m78ew69c44h50a44n50g50ew69m78a44yw75a44l28s39ow75b50ew69u50n50d50o50n50e44.n120 0
+V7920
+p13
+x font 1 R
+x font 2 I
+x font 3 B
+x font 4 BI
+x font 5 CW
+x font 6 H
+x font 7 HI
+x font 8 HB
+x font 9 S1
+x font 10 S
+s10
+f1
+H720
+V480
+h2052Chy
+w33 25150350 h25Chy
+wn120 0
+H720
+x font 0 CI
+f0
+V900
+h360cu
+n120 0
+H720
+V1020
+h360cf
+n120 0
+H720
+wf5
+V1140
+h420c-
+60.wh120cc
+60o60n60q60u60e60s60t60.60m60sn120 0
+H720
+f1
+V1356
+h250cW
+94h50e44nwf5
+79s60a60mwf1
+89i28sw68d50o50w72n50l28o50a44d50e44d50,w54t28h50ew73c44u50r33r33e44n50tw57f33i28l28ew73m78a44yw79b50ew74c44h50a44n50g50e44dw80s39i28m78p50l28yw80b50yw80s39e44l28e44c44t28i28n50gw80t28h50ew74d50e44s39i28r33e44dw80f33i28l28ew74f33r33o50mn120 0
+H720
+V1476
+ct
+28h50ew71m78e44n50uw77(33s39e44l28e44c44t28i28n50gw77t28h50ew71s39a44m78ew71f33i28l28ew71s39u50b50s39e44q50u50e44n50t28l28yw77c44y50c44l28e44sw66t28h50r33o50u50g50hw77t28h50ew71w72i28n50d50o50w72sw66o50p50e44n50e44dw77o50nw76t28h50ew70f33i28l28e44)33.w76O72t28h50e44r33w72i28s39e44,n120 0
+H720
+V1596
+ct
+28h50ewf5
+69bwf1
+85c44o50m78m78a44n50dw75c44a44nw75b50ew69u50s39e44dw75t28ow75c44h50o50o50s39ew69t28h50ew69d50e44s39i28r33e44dw75f33i28l28e44:h28Cdg
+n120 0
+H720
+x font 0 CI
+f0
+V1776
+h360cb
+wh120ce
+60m60a60c60s60.60m60sn120 0
+H720
+wf5
+V1896
+h420c-
+60.wh120ce
+60m60a60c60s60.60m60sn120 0
+H720
+f1
+V2076
+cA
+72g50a44i28n50,wf5
+54s60a60mwf1
+89p50r33i28n50t28sw68t28h50ew73n50a44m78ew73(33a44c44t28u50a44l28l28y50,w55e44x50e44c44u50t28e44sw69a44nw80i28m78p50l28i28c44i28twf5
+58fwf1
+90c44o50m78m78a44n50d50)w63b50e44c44a44u50s39ew74t28h50ew74U72n50i28xw80f33i28l28ewf5
+74e60m60a60c60s60.60m60sn120 0
+H720
+f1
+V2196
+ci
+28sw68b50e44i28n50gw79r33e44a44dw79f33o50rw62t28h50ew73f33i28r33s39tw57t28i28m78e44.w79I33tw57i28sw68a44nw79e44r33r33o50rw62t28ow79a44s39kw79f33o50rw62aw73f33i28l28ewf5
+73s60a60mwf1
+89d50o50e44s39n50'33tw57k50n50o50wwh101ca
+44b50o50u50t28,w54b50u50tw57t28h50ewf5
+73Bwf1
+89c44o50m78m78a44n50dn120 0
+H720
+V2316
+cw
+72i28l28lw53p50r33i28m78ewf5
+69s60a60mf1
+60'33sw64m78e44n50uw75w72i28t28hw75aw69n50e44ww97f33i28l28e44,w50a44n50dw75m78a44k50ew69i28tw53c44u50r33r33e44n50t28.n120 0
+H720
+x font 0 CI
+f0
+V2496
+h360cb
+wh120cf
+60l60o60o60d60.60p60i60cn120 0
+H720
+f5
+V2616
+h360c?
+60n60owh120cs
+60u60c60hwh120cf
+60i60l60ewh120c`
+60f60l60o60o60d60.60p60i60c60'n120 0
+H720
+x font 0 CI
+f0
+V2736
+h360cB
+wh120cf
+60l60o60o60d60.60p60i60cn120 0
+H720
+wf5
+V2856
+h420c-
+60.wh120cf
+60l60o60o60d60.60p60i60cn120 0
+H720
+x font 0 CI
+f0
+V2976
+h360cn
+n120 0
+H720
+wf5
+V3096
+h420c-
+wh180cc
+60o60n60q60u60e60s60t60.60m60sn120 0
+H720
+wV3216
+h420c-
+wh180cd
+60e60a60t60h60.60m60sn120 0
+H720
+wV3336
+h420c-
+wh180ce
+60m60a60c60s60.60m60sn120 0
+H720
+wV3456
+h420c-
+wh180cf
+60a60m60i60n60e60.60m60sn120 0
+H720
+wV3576
+h420c-
+60.wh120cf
+60l60o60o60d60.60p60i60cn120 0
+H720
+wV3696
+h420c-
+wh180cs
+60l60a60u60g60h60t60e60r60.60m60sn120 0
+H720
+f1
+V3876
+cB
+67o50t28hwf5
+80bwf1
+90a44n50dwf5
+80Bwf1
+90w72i28l28lw58a44c44c44e44p50tw58aw74l28i28s39tw59o50fw64f33i28l28ew75n50a44m78e44s39.wf5
+81bwf1
+91s39i28m78p50l28yw81t28a44k50e44sw70t28h50ew75f33i28r33s39tw59f33i28l28ew75i28nw81t28h50ew75l28i28s39t28,w56b50u50twf5
+59Bwf1
+91l28o50a44d50sw70t28h50e44mwh109ca
+44l28l28.n120 0
+H720
+V3996
+cT
+61h50ew69l28i28s39tw53m78a44yw75b50ew69t28y50p50e44dw75o50nw75o50n50ew69l28i28n50ewh69Cem
+n120 0
+H720
+x font 0 CI
+f0
+V4176
+h360cB
+wh120cd
+60e60v60i60l60.60t60e60xwh120cs
+60a60t60a60n60.60t60e60xwh120c6
+60660660.60t60e60xwh120ce
+60m60a60c60s60.60t60e60xn120 0
+H720
+f1
+V4356
+Cem
+wh125co
+50rw58g50e44n50e44r33a44t28e44dw75b50yw75aw69U72n50i28xw75c44o50m78m78a44n50dwh75Cem
+n120 0
+H720
+x font 0 CI
+f0
+V4536
+h360cB
+wh120c<
+60e60c60h60owh120c*
+60.60t60e60xn120 0
+H720
+f1
+V4716
+cT
+61h50ew73l28a44t28t28e44rw63f33o50r33mwh108cr
+33e44q50u50i28r33e44sw69aw74U72n50i28xw80c44o50m78m78a44n50d50;wf5
+58s60a60mwf1
+90d50o50e44sw69n50o50tw58u50n50d50e44r33s39t28a44n50dw80t28h50ew74s39h50e44l28lw58f33i28l28ew74n50a44m78ew74m78e44t28a44c44h50a44r33a44c44t28e44r33s39,w55s39on120 0
+H720
+f5
+V4836
+cB
+wh130c*
+60.60t60e60xwf1
+94a44t28t28e44m78p50t28sw73t28ow84l28o50a44dw84aw78s39i28n50g50l28ew78f33i28l28ew78n50a44m78e44dwf5
+84*60.60t60e60xf1
+60.w84(33T61h50ewf5
+78<wf1
+94f33o50r33mwh112ci
+28sw73o50fw67c44o50u50r33s39ew78d50e44r33i28v50e44dw84f33r33o50mwf5
+h112cs
+60a60mf1
+60'33swf5
+73<n120 0
+H720
+f1
+V4956
+cc
+44o50m78m78a44n50d50.25)wf5
+83e60c60h60owf1
+85i28sw64n50o50tw53t28h50ew69o50n50l28yw75u50s39e44f33u50lw53c44o50m78m78a44n50dw75t28ow75r33u50nw75s39u50b50s39e44r33v50i28e44n50tw53t28owf5
+75Bf1
+60;w53f33o50rw58e44x50a44m78p50l28e44,n120 0
+H720
+x font 0 CI
+f0
+V5136
+h360cB
+wh120c<
+60g60r60e60pwh120c-
+60lwh120cE
+60m60a60c60swh120c*
+n120 0
+H720
+f1
+V5316
+cw
+72i28l28lw57l28o50a44dw79o50n50l28yw79t28h50o50s39ew73f33i28l28e44sw68c44o50n50t28a44i28n50i28n50gw79t28h50ew73s39t28r33i28n50gwf5
+79E60m60a60c60sf1
+60.w79F56i28n50a44l28l28y50,w54aw73s39p50e44c44i28a44lw57c44a44s39e44:w58awf5
+74Bwf1
+90w72i28t28hw80n50ow80a44r33g50u50m78e44n50t28sw69c44r33eh44Chy
+n120 0
+H720
+V5436
+ca
+44t28e44sw64a44nw75e44m78p50t28y50,w50n50a44m78e44l28e44s39sw64f33i28l28ew69w72i28t28h50i28nwf5
+75s60a60mf1
+60.n120 0
+H720
+V5592
+h250cT
+61h50ew69c44o50m78p50l28e44m78e44n50tw53o50fwf5
+58Bwf1
+85i28swf5
+64Df1
+60:n120 0
+H720
+x font 0 CI
+f0
+V5772
+h360cD
+wh120cd
+60e60v60i60l60.60t60e60xwh120cs
+60a60t60a60n60.60t60e60xwh120c6
+60660660.60t60e60xwh120ce
+60m60a60c60s60.60t60e60xn120 0
+H720
+f1
+V5952
+ce
+44r33a44d50i28c44a44t28e44sw77t28h50ew82f33i28l28e44sw77f33r33o50mwf5
+h116cs
+60a60mf1
+60'33sw78m78e44m78o50r33yw89(33n50o50tw67f33r33o50mwh117ct
+28h50ew83U72n50i28xw89m78a44c44h50i28n50e44'33sw78d50i28s39c44)33.wf5
+89Dwf1
+99w72i28t28h50o50u50tw67a44n50yw89f33i28l28ew83n50a44m78e44sn120 0
+H720
+V6072
+cr
+33e44m78o50v50e44sw64t28h50ew69c44u50r33r33e44n50tw53f33i28l28ew69f33r33o50mwf5
+h103cs
+60a60mf1
+60.n120 0
+H720
+V6228
+h250cT
+61h50e44r33ew73a44r33ew73t28h50r33e44ew73o50t28h50e44rw62c44o50m78m78a44n50d50sw68t28h50a44tw57r33e44l28a44t28ew73t28h50ew73c44u50r33r33e44n50tw57f33i28l28ew73t28ow79U72n50i28xw79f33i28l28e44s39.w79T61h50ewf5
+74wwf1
+90c44o50m78m78a44n50dw80w72r33i28t28e44sw69t28h50en120 0
+H720
+V6348
+cf
+33i28l28ew79t28ow85d50i28s39c44;w63w72i28t28h50o50u50tw63a44r33g50u50m78e44n50t28s39,w60i28tw63w72r33i28t28e44sw74t28h50ew79e44n50t28i28r33ew79f33i28l28ew78t28ow84t28h50ew78U72n50i28xw84f33i28l28ew78a44s39s39o50c44i28a44t28e44dw84w72i28t28hw84t28h50ew78c44u50r33r33e44n50tw62f33i28l28ew78i28nn120 0
+H720
+f5
+V6468
+cs
+60a60mwf1
+86(33i28tw54i28sw65t28h50ew70o50n50l28yw76c44o50m78m78a44n50dw76w72h50o50s39ew70d50e44f33a44u50l28tw54a44d50d50r33e44s39sw65i28sw65n50o50tw54d50o50t28)33.w76O72fw59c44o50u50r33s39e44,w51y50o50uw76c44a44nw76s39p50e44c44i28f33yw76a44nw76a44d50d50r33e44s39sw66t28ow77b50en120 0
+H720
+V6588
+cw
+72r33i28t28t28e44n50,w50a44n50dw75aw69d50i28f33f33e44r33e44n50tw53f33i28l28ew69n50a44m78e44,w50w72i28t28hw75t28h50ew69o50b50v50i28o50u50sw64s39y50n50t28a44x50:n120 0
+H720
+s8
+V6880
+Cru
+h40Cru
+h40Cru
+h40Cru
+h40Cru
+h40Cru
+h40Cru
+h40Cru
+h40Cru
+h40Cru
+h40Cru
+h40Cru
+h40Cru
+h40Cru
+h40Cru
+h40Cru
+h40Cru
+h40Cru
+n100 0
+H720
+V6980
+Cdg
+w70Aw78b40u40gw60p40r26e35v40e35n40t22sw51t22h40ewf5
+55bwf1
+68c35o40m62m62a35n40dw61f26r26o40mw83w58o40r26k40i22n40gw61w58h40e35nw61d40o40w58n40l22o40a35d40e35d40.w61B54e35c35a35u40s31ew56t22h40ew56m62e35n40uw61i22sw52m62o40r26ew56c35o40n40v40e35n40i22e35n40tw43a35n40y40w58a35y40,w41a35n40dw61b40eh35Chy
+n100 0
+H720
+V7080
+cc
+35a35u40s31ew55t22h40ew55m62e35t22h40o40dw60o40fw46c35h40o40o40s31i22n40gw60f26i22l22e35sw51f26r26o40mw82t22h40ew55c35o40m62m62a35n40dw60l22a35n40g40u40a35g40ew55i22sw51s31l22a35t22e35dw60t22ow60c35h40a35n40g40e35,w40t22h40ew55b40u40gw60h40a35s31n40'26tw42b40e35e35nw60f26i22x40e35d40.n100 0
+V7920
+p14
+x font 1 R
+x font 2 I
+x font 3 B
+x font 4 BI
+x font 5 CW
+x font 6 H
+x font 7 HI
+x font 8 HB
+x font 9 S1
+x font 10 S
+s10
+f1
+H720
+V480
+h2052Chy
+w33 251504w50 h25Chy
+wn120 0
+H720
+x font 0 CI
+f0
+V900
+h360c1
+60,60260wwh120c/
+60t60m60p60/60r60e60v60e60l60a60t60i60o60n60sn120 0
+H720
+f5
+V1020
+h360c/
+60t60m60p60/60r60e60v60e60l60a60t60i60o60n60s60:wh120c#
+604604n120 0
+H720
+V1200
+cs
+60a60mwf1
+85r33e44s39p50o50n50d50sw64w72i28t28hw75t28h50ew69f33i28l28ew70n50a44m78ew70a44n50dw76t28h50ew70n50u50m78b50e44rw59o50fw59c44h50a44r33a44c44t28e44r33sw65w72r33i28t28t28e44nw76t28ow76t28h50ew70f33i28l28e44.w76T61h50ewf5
+70w60r60i60t60ewf1
+86c44o50m78m78a44n50dw76o50nn120 0
+H720
+V1320
+ct
+28h50ew69b50u50t28t28o50nw753w75m78e44n50uw75i28sw64i28d50e44n50t28i28c44a44lw53i28nw75f33u50n50c44t28i28o50nw75t28ow75a44nw75u50n50a44d50o50r33n50e44dwf5
+75wwf1
+85c44o50m78m78a44n50d50.n120 0
+H720
+V1476
+h250cT
+61h50ew71o50t28h50e44rw60t28w72ow77c44o50m78m78a44n50d50s39,wf5
+52ewf1
+87a44n50dwf5
+77rf1
+60,w52r33e44a44dw77d50a44t28aw71f33r33o50mwh105cU
+72n50i28xw77f33i28l28e44s39.w77T61h50ewf5
+71ewf1
+87c44o50m78m78a44n50dw77c44l28e44a44r33sw66o50u50tw55t28h50ew72c44u50r33r33e44n50tn120 0
+H720
+V1596
+cf
+33i28l28e44,w57r33e44a44d50sw71t28h50ew76d50a44t28aw76f33r33o50mwh110ct
+28h50ew76n50a44m78e44dw81f33i28l28ew75(33o50rw64u50s39e44sw70t28h50ew75c44u50r33r33e44n50tw59f33i28l28e44'33sw70o50l28dw81n50a44m78ew75i28fw64n50o50n50ew75i28sw70e44x50p50l28i28c44i28t28l28yw81p50r33o50v50i28d50e44d50)33,n120 0
+H720
+V1716
+ca
+44n50dw76s39e44t28sw65t28h50ew70f33i28l28ew70n50a44m78e44.w77I33t28'33sw66m78u50c44hw77l28i28k50ew71awf5
+71Bwf1
+87c44o50m78m78a44n50d50,w52b50u50tw55p50u50t28sw66t28h50ew71i28n50f33o50r33m78a44t28i28o50nw77i28nw77t28h50ew71c44u50r33r33e44n50tw55f33i28l28ew71i28n50s39t28e44a44dw77o50fw60an120 0
+H720
+V1836
+cn
+50e44ww98o50n50e44.wf5
+76ewf1
+86w72i28t28h50o50u50tw54a44n50yw76f33i28l28ew70n50a44m78ew70i28sw65t28h50e44r33e44f33o50r33ew70a44nw76e44a44s39yw76w72a44yw76t28ow76r33e44f33r33e44s39hwf5
+76s60a60mf1
+60'33sw65c44o50p50yw76o50fw59aw70U72n50i28xw76f33i28l28e44.w76[33U72n50l28i28k50ew69i28nn120 0
+H720
+f5
+V1956
+ce
+60df1
+60,wf5
+61ewf1
+96d50o50e44s39n50'33tw64c44o50m78p50l28a44i28nw86i28fw69t28h50ew80f33i28l28ew80i28sw75m78o50d50i28f33i28e44d50.w86T61h50ew80p50r33i28n50c44i28p50l28ew80i28sw75n50o50tw64t28ow86p50r33o50t28e44c44tw64a44g50a44i28n50s39tw64t28h50i28n50g50sw75t28h50a44tw64c44a44nw87b50en120 0
+H720
+V2076
+cu
+50n50d50o50n50ew69i28fw58w72r33o50n50g50.25]w83S56i28n50c44ew69i28t28sw64j28o50bw75i28sw64t28ow75r33e44p50l28a44c44ew69t28h50ew69w72h50o50l28ew69t28e44x50t28,wf5
+50ewf1
+85n50e44v50e44rw58t28a44k50e44sw64a44nw75a44d50d50r33e44s39s39.n120 0
+H720
+V2232
+h250cT
+61h50ewf5
+78rwf1
+94c44o50m78m78a44n50dw84i28sw73l28i28k50ewf5
+78ef1
+60,w59b50u50tw62i28tw62d50o50e44s39n50'33tw62c44l28e44a44rw67t28h50ew78f33i28l28e44:w62t28h50ew78t28e44x50tw62i28nw84t28h50ew78U72n50i28xw84f33i28l28ew78r33e44p50l28a44c44e44sw73d50o50t28,w60o50rw68t28h50en120 0
+H720
+V2352
+cs
+39p50e44c44i28f33i28e44dw75t28e44x50tw53i28fw58a44nw75a44d50d50r33e44s39sw64i28sw64g50i28v50e44n50.n120 0
+H720
+x font 0 CI
+f0
+V2532
+h360cr
+wh120ce
+60m60a60c60s60.60m60sn120 0
+H720
+f1
+V2712
+ch
+50a44sw64e44s39s39e44n50t28i28a44l28l28yw75t28h50ew69e44f33f33e44c44tw53o50fn120 0
+H720
+x font 0 CI
+f0
+V2892
+h360c<
+60c60a60twh120ce
+60m60a60c60s60.60m60sn120 0
+H720
+f1
+V3072
+cT
+61h50ew73c44o50m78m78a44n50d50swf5
+68rwf1
+89a44n50dwf5
+79wwf1
+89w72i28l28lw57s39e44tw57t28h50ew73n50a44m78ew73o50fw62t28h50ew73f33i28l28ew73i28fw63t28h50ew74c44u50r33r33e44n50tw58f33i28l28ew74h50a44sw69n50ow80n50a44m78ew74a44l28r33e44a44d50yw80d50e44f33i28n50e44d50;wf5
+58ewf1
+90s39e44t28sn120 0
+H720
+V3192
+ct
+28h50ew69n50a44m78ew69e44v50e44nw75i28fw58t28h50ew69f33i28l28ew69a44l28r33e44a44d50yw75h50a44sw64o50n50e44.n120 0
+H720
+V3348
+h250cT
+61h50e44r33ew77i28sw72aw77c44o50m78m78a44n50d50,w58a44n50a44l28o50g50o50u50sw72t28owf5
+83xf1
+60,w58t28h50a44tw61i28t28e44r33a44t28e44sw72o50v50e44rw66f33i28l28e44sw72i28n50s39t28e44a44dw83o50fw67p50i28e44c44e44sw73o50fw67t28e44x50t28:wf5
+62Xwf1
+94(33c44a44p50i28t28a44lwf5
+62xf1
+60)33.n120 0
+H720
+V3468
+cT
+61h50ew79s39y50n50t28a44xw85i28sw74e44a44s39y50;w63i28t28'33sw74j28u50s39tw63l28i28k50ew79t28h50a44tw63o50fwf5
+68xwf1
+h95Cem
+wf5
+h134cX
+60/f2
+60p50a50t28t28e44r39nf5
+50/f2
+60c44o50m72m72a50n50df1
+50.w84(33T61h50ew78c44o50m78p50l28e44m78e44n50t28a44r33yw84c44o50m78m78a44n50dw84i28swf5
+73Yf1
+60,n120 0
+H720
+V3588
+ca
+44n50a44l28o50g50o50u50sw79t28owf5
+90yf1
+60.25)w98T61h50ew84e44f33f33e44c44tw68i28sw79t28ow90r33u50nw90t28h50ew84c44o50m78m78a44n50dw90i28nw90e44a44c44hw90f33i28l28ew84w72h50o50s39ew84m78e44n50uw90e44n50t28r33yw91(33t28h50a44tw69i28s39,w66w72h50o50s39ew85l28i28n50en120 0
+H720
+V3708
+cp
+50r33i28n50t28e44dw75b50yw75a44nwf5
+75fwf1
+85c44o50m78m78a44n50d50)w58m78a44t28c44h50e44sw64t28h50ew69p50a44t28t28e44r33n50.w75F56o50rw58e44x50a44m78p50l28e44,w50s39i28n50c44ew69a44nw75a44p50o50s39t28r33o50p50h50ew69i28d50e44n50t28i28f33i28e44sw64m78o50d50i28f33i28e44dw75f33i28l28e44s39,n120 0
+H720
+x font 0 CI
+f0
+V3888
+h360cX
+60/60'60/wh120cw
+n120 0
+H720
+f1
+V4068
+cw
+72r33i28t28e44sw66t28h50ew71c44h50a44n50g50e44dw77f33i28l28e44sw66o50u50tw55t28ow77d50i28s39c44.w77H72e44r33ew71i28sw66aw71l28o50n50g50e44rw61e44x50a44m78p50l28e44:w56f33i28n50dw78a44l28lw56u50s39e44sw67o50fw61aw72p50a44r33t28i28c44u50l28a44rw61v50a44r33i28a44b50l28ew72i28nw78t28h50ew72Cn120 0
+H720
+V4188
+cs
+39o50u50r33c44ew69f33i28l28e44s39:n120 0
+H720
+x font 0 CI
+f0
+V4368
+h360cX
+60/60\60.60c60$60/wh120c,
+60x60/60v60a60r60i60a60b60l60e60/60+60-60pn120 0
+H720
+f1
+V4548
+cW
+94ew69c44a44nw75u50s39ew69a44nwf5
+75fwf1
+85c44o50m78m78a44n50dw75t28ow75i28d50e44n50t28i28f33yw75w72h50i28c44hw75f33i28l28ew69t28h50ew69v50a44r33i28a44b50l28ew69a44p50p50e44a44r33sw64i28n50:n120 0
+H720
+x font 0 CI
+f0
+V4728
+h360cX
+60/60\60.60c60$60/wh120c,
+60g60/60v60a60r60i60a60b60l60e60/wh120c{
+n120 0
+H720
+V4848
+h610cf
+n120 0
+H720
+V4968
+h610c,
+60x60/60v60a60r60i60a60b60l60e60/60+60-60{n120 0
+H720
+wV5088
+h860c=
+n120 0
+H720
+wV5208
+h860cp
+n120 0
+H720
+V5328
+h610c}
+n120 0
+H720
+V5448
+h360c}
+n120 0
+H720
+f1
+V5628
+cH
+72e44r33e44,w59t28h50ewf5
+78gwf1
+94c44o50m78m78a44n50dw84g50u50a44r33a44n50t28e44e44sw73t28h50a44tw62o50n50l28yw84t28h50ew78n50a44m78e44sw73o50fw67f33i28l28e44sw73c44o50n50t28a44i28n50i28n50gw84t28h50ew78v50a44r33i28a44b50l28ew78w72i28l28lw63b50ew79p50r33i28n50t28e44dw85(33b50u50tn120 0
+H720
+V5748
+cb
+50e44w72a44r33ew73t28h50a44twf5
+57s60a60mwf1
+89m78a44yw79c44o50n50f33u50s39ew73m78a44t28t28e44r33sw68b50yw79p50r33i28n50t28i28n50gw79t28h50ew73n50a44m78e44sw68o50fw62f33i28l28e44sw68i28tw57r33e44a44d50sw68i28nw79d50u50r33i28n50gw78t28h50ew72c44o50m78m78a44n50d50)33.w78T61h50en120 0
+H720
+f5
+V5868
+c=
+wf1
+85c44o50m78m78a44n50dw75s39h50o50w72sw64w72h50e44r33ew69i28nw75t28h50ew69f33i28l28ew69t28h50ew69v50a44r33i28a44b50l28ew69a44p50p50e44a44r33s39,w50a44n50dw75t28h50ewf5
+69pwf1
+85c44o50m78m78a44n50dw75p50r33i28n50t28sw64t28h50ew69l28i28n50e44.n120 0
+H720
+V6024
+h250cT
+61h50ewf5
+74Dwf1
+90c44o50m78m78a44n50dw80i28sw69h50a44n50d50yw80a44sw69t28h50ew74t28a44r33g50e44tw58o50fw63a44nwf5
+81Xf1
+60.w81T61h50i28sw70e44x50a44m78p50l28ew75d50e44l28e44t28e44sw70f33r33o50mwh109ct
+28h50ew75m78e44n50uw81a44l28lw59Cw98f33i28l28e44sw70t28h50a44tn120 0
+H720
+V6144
+cd
+50ow75n50o50tw53c44o50n50t28a44i28nw75aw69p50a44r33t28i28c44u50l28a44rw58v50a44r33i28a44b50l28e44:n120 0
+H720
+x font 0 CI
+f0
+V6324
+h360cX
+60/60\60.60c60$60/wh120c,
+60v60/60v60a60r60i60a60b60l60e60/wh120cD
+n120 0
+H720
+f1
+V6504
+cI
+33fw58n50ow75p50a44t28t28e44r33nw75i28sw64p50r33o50v50i28d50e44dw75f33o50rw58t28h50ewf5
+69Xf1
+60,w50t28h50ew69c44o50m78m78a44n50dw75(33w72h50i28c44hw75d50e44f33a44u50l28t28sw64t28owf5
+75ff1
+60)w58i28sw64r33u50nw75i28nw75a44l28lw53f33i28l28e44s39,w50s39on120 0
+H720
+x font 0 CI
+f0
+V6684
+h360cX
+wh120cD
+n120 0
+H720
+f1
+V6864
+cc
+44l28e44a44n50swf5
+64s60a60mwf1
+85u50pw75f33o50rw58aw69f33r33e44s39hw75s39t28a44r33t28.n120 0
+H720
+V7020
+h250cB
+67u50tw53r33a44t28h50e44rw58t28h50a44nw75w72o50r33k50i28n50gw75a44n50yw75f33u50r33t28h50e44r33,w50l28e44t28'33sw64s39t28o50pw75n50o50w72:n120 0
+V7920
+p15
+x font 1 R
+x font 2 I
+x font 3 B
+x font 4 BI
+x font 5 CW
+x font 6 H
+x font 7 HI
+x font 8 HB
+x font 9 S1
+x font 10 S
+s10
+f1
+H720
+V480
+h2052Chy
+w33 25150550 h25Chy
+wn120 0
+H720
+x font 0 CI
+f0
+V900
+h360cq
+n120 0
+H720
+f5
+V1020
+h360c$
+n120 0
+H720
+f1
+V1236
+h250cS
+56o50m78ew75o50fw64t28h50ew75f33i28l28ew75m78a44n50i28p50u50l28a44t28i28n50gw81c44o50m78m78a44n50d50sw70c44a44nw81b50ew75u50n50d50o50n50e44:w59u50n50d50o50i28n50gw81awf5
+75ff1
+60,wf5
+56ef1
+60,w56o50rwf5
+64rwf1
+91r33e44s39t28o50r33e44sw70t28h50ew76p50r33e44v50i28o50u50sn120 0
+H720
+V1356
+cs
+39t28a44t28ew69o50fw58t28h50ew69f33i28l28e44,w50b50u50twf5
+53wf1
+60,wf5
+50Bwf1
+85a44n50dwf5
+75Dwf1
+85a44r33ew69i28r33r33e44v50o50c44a44b50l28e44.w75A72n50d50,w50o50fw58c44o50u50r33s39e44,w50s39ow75i28swf5
+64qf1
+60.n120 0
+x trailer
+V7920
+x stop

BIN
sys/doc/sam/sam0.png


BIN
sys/doc/sam/sam1.png


BIN
sys/doc/sam/sam2.png


BIN
sys/doc/sam/sam3.png


BIN
sys/doc/sam/sam4.png


+ 1 - 0
sys/src/9/pc/pc

@@ -75,6 +75,7 @@ link
 
 misc
 	archmp		mp apic
+	mtrr
 
 	sdata		pci sdscsi
 	sd53c8xx	pci sdscsi

+ 1 - 0
sys/src/9/pc/pcauth

@@ -46,6 +46,7 @@ link
 
 misc
 	realmode
+	mtrr
 	sdata		pci sdscsi
 
 	uarti8250

+ 1 - 0
sys/src/9/pc/pccd

@@ -75,6 +75,7 @@ link
 
 misc
 	archmp		mp apic
+	mtrr
 
 	sdata		pci sdscsi
 	sd53c8xx	pci sdscsi

+ 1 - 0
sys/src/9/pc/pccpu

@@ -62,6 +62,7 @@ link
 
 misc
 	archmp		mp apic
+	mtrr
 
 	uarti8250
 	uartpci		pci

+ 1 - 0
sys/src/9/pc/pccpuf

@@ -70,6 +70,7 @@ link
 
 misc
 	archmp		mp apic
+	mtrr
 
 	uarti8250
 	uartpci		pci

+ 1 - 0
sys/src/9/pc/pcdisk

@@ -73,6 +73,7 @@ link
 
 misc
 	archmp		mp apic
+	mtrr
 
 	sdata		pci sdscsi
 	sd53c8xx	pci sdscsi

+ 1 - 0
sys/src/9/pc/pcf

@@ -73,6 +73,7 @@ link
 
 misc
 	archmp		mp apic
+	mtrr
 
 	sdata		pci sdscsi
 	sd53c8xx	pci sdscsi

+ 1 - 0
sys/src/9/pc/pcflop

@@ -75,6 +75,7 @@ link
 
 misc
 #	archmp		mp apic
+	mtrr
 
 	sdata		pci sdscsi
 	sd53c8xx	pci sdscsi

Some files were not shown because too many files changed in this diff