home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Usenet 1994 October
/
usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso
/
x
/
volume16
/
contool-3.2
/
part03
< prev
next >
Wrap
Text File
|
1992-03-05
|
56KB
|
1,128 lines
Newsgroups: comp.sources.x
Path: uunet!think.com!mips!msi!dcmartin
From: chuck@trantor.harris-atd.com (Chuck Musciano)
Subject: v16i088: Contool 3.2, Part03/05
Message-ID: <1992Mar5.185125.2290@msi.com>
Originator: dcmartin@fascet
Sender: dcmartin@msi.com (David C. Martin - Moderator)
Organization: Molecular Simulations, Inc.
References: <csx-16i086-contool-3.2@uunet.UU.NET>
Date: Thu, 5 Mar 1992 18:51:25 GMT
Approved: dcmartin@msi.com
Submitted-by: chuck@trantor.harris-atd.com (Chuck Musciano)
Posting-number: Volume 16, Issue 88
Archive-name: contool-3.2/part03
# This is a shell archive. Remove anything before this line, then feed it
# into a shell via "sh file" or similar. To overwrite existing files,
# type "sh file -c".
# The tool that generated this appeared in the comp.sources.unix newsgroup;
# send mail to comp-sources-unix@uunet.uu.net if you want that tool.
# If this archive is complete, you will see the following message at the end:
# "End of archive 3 (of 5)."
# Contents: contool.man contool_ui.c.Z.uu lex.c
# Wrapped by dcmartin@fascet on Sat Feb 22 10:11:09 1992
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'contool.man' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'contool.man'\"
else
echo shar: Extracting \"'contool.man'\" \(22843 characters\)
sed "s/^X//" >'contool.man' <<'END_OF_FILE'
X.TH CONTOOL 1 "31 July 1991"
X.SH NAME
Xcontool \- capture and display console output
X.SH SYNOPSIS
Xcontool [\fB\(hyc\fP \fIfile\fP] [\fB\(hyf\fP] [\fB\(hyi\fP \fIinput\fP] [\fB\(hyl\fP] [\f3\(hyL\fP \f2logfile\fP] [\f3\(hyn\fP]
X.SH DESCRIPTION
X.LP
X\f2Contool\fP captures and displays any messages sent to the system console.
XEach message is timestamped as it arrives. The messages are displayed in a
Xscrolling text window, so the user can scroll through old messages.
X.LP
XWhen a message arrives, \f3contool\fP will beep and, if closed, begin
Xblinking its icon until the user opens the tool. This behavior can be changed
Xby modifying the default contool properties.
X.LP
X\f2Contool\fP must be run under either Open Windows or X Windows.
XIt accepts the standard Open Windows command line options.
X.SH OPTIONS
X.IP "\fB\\(hyc\fP \fIfile\fP"
Xspecifies an alternate configuration file. \f2Contool\fP normally
Xreads its configuration information from ~/.contool.
X.IP "\fB\\(hyf\fP"
Xforces \f2contool\fP to fork itself into the background after
Xacquiring the console. This option is most useful when starting
X\f2contool\fP from your ~/.xinitrc or ~/.openwin-init file, where
Xmultiple tools are started in the background. Even if \f2contool\fP is
Xstarted first, other tools may begin running and produce error
Xmessages before \f2contool\fP can acquire the console. By using the
X\fB-f\fP option you can start \f2contool\fP in the foreground,
Xpreventing other tools from starting until \f2contool\fP has acquired
Xthe console.
X.IP "\fB\\(hyi\fP \fIinput\fP"
Xspecifies an alternate input source. \f2Contool\fP normally reads
Xmessages from the system console. If \fB-i\fP is used, \f2contool\fP
Xwill read messages from the specified \fIinput\fP. \fIInput\fP must
Xbe the pathname of a either a FIFO, or a character special device like
X/dev/tty. \fIInput\fP can also be given as \*(lq-\*(rq, indicating
Xthat contool should read messages from its standard input.
X.IP "\fB\\(hyl\fP"
Xenables logging when \f2contool\fP starts. Initially, \f2contool\fP
Xdoes not log messages to a file. This option allows logging to be started
Xautomatically. Logging behavior can be enabled and disabled via the
X\*(lqFile\*(rq menu (see below).
X.IP "\fB\\(hyL\fP \fIlogfile\fP"
Xspecifies an alternate log file. The value of \fIlogfile\fP overrides
Xany log file stored in the configuration file. The \fB-l\fP and \fB-L\fP
Xoptions used together allow multiple copies of contool to be started on
Xa single machine, with each copy logging to a different file, without
Xhaving to create and maintain multiple configuration files.
X.IP "\fB\\(hyn\fP"
Xprevents \f2contool\fP from acquiring the console when it starts. This
Xis most useful when testing a new version of contool, so that the test
Xcopy does not interfere with any previously running console tool.
X.SH USER INTERFACE
X.LP
X\f2Contool\fP presents the user with a control panel containing three
Xbuttons and a scrolling text window. Console messages appear in the
Xtext window; \f2contool\fP's behavior is managed with the \fBFile\fP,
X\fBView\fP, and \fBEdit\fP buttons. These buttons have several menu choices
Xassociated with them:
X.IP "\fBFile: Load Configuration...\fP"
Xbrings up the \fBLoad Configuration\fP dialog box. This dialog contains
Xa non-exclusive setting, a text field, and a single \fBLoad\fP button.
XThe setting has two entries: \*(lqTool Properties\*(rq and \*(lqFilter
XDefinitions\*(rq. The user can choose which of these items to load from
Xthe configuration file. The default action is to load both properties and
Xfilters from the file.
X.IP ""
XThe text field contains the path of the configuration file. By default,
Xthis is either ~/.contool, or the value of the \fB-c\fP option (above).
XThis text field provides file name completion, like \f2csh\fP(1), by typing
Xa space or carriage return.
X.IP ""
XAfter determining which components to be read from the file, and the name of
Xthe file, clicking on the \fBLoad\fP button will cause the desired elements
Xto be read from the file. If filters are loaded, any existing filters are
Xdiscarded. If \f2contool\fP was in the middle of filtering a multi-line message,
Xthat filtering action is terminated.
X.IP ""
X\f2Contool\fP can read files created by all previous versions of
X\f2contool\fP. Files written by \f2contool\fP cannot be read by any previous
Xversion.
X.IP "\fBFile: Save Configuration...\fP"
Xis analogous to the \fBLoad Configuration\fP operation, bringing up a dialog
Xbox containing a non-exclusive setting, a text field, and a \fBSave\fP
Xbutton. In the same manner as the \fBLoad Configuration\fP dialog, the
Xuser indiactes which items he desires to save, specifies the destination
Xfile, and clicks on the \fBSave\fP button to save the information.
X.IP ""
X\f2Contool\fP writes the data in a format incompatible with previous
Xversions (release 3.0 or earlier) of the tool.
X.IP "\fBFile: Start Logging\fP"
Xstarts logging console messages to the log file specified by the tool
Xproperties, or the \fB-L\fP option (above). The tool properties also
Xcontains a switch which determines whether messages are written before
Xor after filtering occurs. If before, all messages are logged. If after,
Xa message is written to the log if it does not match a filter and the default
Xaction in the tool properties has \*(lqLog message\*(rq enabled; or if it
Xmatches a filter with both the \*(lqSave\*(rq and \*(lqLog message\*(rq
Xattributes set.
X.IP ""
XThe log file is written in such a manner that multiple invocations of
X\f2contool\fP can write to the same log file without conflict. New
Xmessages are always appended to the log file. Log files can be forcibly
Xflushed with a SIGHUP; see SIGNALS, below.
X.IP "\fBFile: Stop Logging\fP"
Xstops the logging process.
X.IP "\fBFile: Print\fP"
Xuses the \*(lqPrint Filter\*(rq specified in the tool properties to
Xprint the contents of the console. Only messages saved in the console
Xcan be printed.
X.IP "\fBFile: About Contool...\fP"
Xprovides a brief history of \f2contool\fP, and allows users to send
Xe-mail to the contool developer.
X.IP "\fBView: Archive...\fP"
Xopens the message archive dialog box. This dialog box displays a
Xscrolling window containing all messages archived from the main
Xconsole display. See MESSAGE ARCHIVE, below.
X.IP "\fBView: Archive Messages\fP"
Xmoves all the messages in the console display to the message archive.
XThis is a handy way to remove already viewed messages from the console
Xwithout losing them for later review. By periodically moving
Xmessages to the archive, only the most recent messages will be
Xvisible in the main console display. Messages can be archived automatically
Xas well; see TOOL PROPERTIES, below.
X.IP "\fBView: Become Console\fP"
Xensures that \f2contool\fP has the system console attribute. SunOS
Xallows exactly one process in the system to own the console. If some
Xother process takes control of the console, the user can reassign the
Xconsole attribute to \f2contool\fP using this menu selection.
X.IP "\fBView: Clear Messages\fP"
Xclears all messages from the console text display.
X.IP "\fBView: Reset Filter\fP"
Xinterrupts filtering of a multi-line filter. If the user incorrectly
Xspecifies the end pattern of a multi-line filter, \f2contool\fP may
Xnever stop processing the filter, causing all subsequent console
Xmessages to be incorrectly handled. This selection resets the effect
Xof any multi-line filter that may be in effect.
X.IP ""
XWhen processing a multi-line filter, \f2contool\fP displays the
Xstarting filter pattern in the left window footer. If the left footer
Xis blank, \f2contool\fP is not processing a multi-line filter.
X.IP "\fBEdit: Filters...\fP"
Xbrings up the \fBFilters\fP dialog box. See EDITING FILTERS, below.
X.IP "\fBEdit: Properties...\fP"
Xbrings up the \fBTool Properties\fP dialog box. See TOOL PROPERTIES, below.
X.SH EDITING FILTERS
XThe \fBFilters\fP dialog presents a scrolling list of filters and a variety of
Xdevices used to modify the current filter set. The items in this dialog are:
X.IP "\fBFilters\fP"
XThis scrolling list shows the starting pattern of each filter currently used by
X\f2contool\fP. The pattern text is preceded by a small glyph indicating
Xwhether the filter is a single-line or multi-line filter.
X.IP ""
XIf exactly one item in the list is selected, the properties of that filter
Xwill be displayed in the dialog box. If no, or more than one, filter is
Xselected, the remainder of the dialog box is grayed out.
X.IP "\fBInsert\fP"
XThis button inserts a new blank filter into the scrolling list, allowing
Xthe user to add new filters to the filter set. A menu attached to
Xthe button allows the user to select the insert point: at the top of the
Xlist, before the current selection, after the current selection, or at
Xthe bottom of the list. The \*(lqbefore\*(rq and \*(lqafter\*(rq
Xchoices are only enabled if exactly one filter in the list is selected.
XThe default position is the bottom of the list.
X.IP "\fBEdit\fP"
XThis button edits the currently selected filters in the list. The
Xmenu attached to this button has four choices: \fBCut\fP, \fBCopy\fP, \fBPaste\fP,
Xand \fBDelete\fP.
X.IP ""
XThe \fBCut\fP operation removes the selected filters from the list
Xand places them on the clipboard, where they can subsequently be pasted
Xback into the list.
X.IP ""
XThe \fBCopy\fP operation copies the selected filters to the clipboard.
XThe filters are not removed from the list. The copied filters can subsequently
Xbe pasted back into the list.
X.IP ""
XThe \fBPaste\fP operation copies filters from the clipboard into the list.
XThis selection has a menu which specifies the paste position: at the top of the
Xlist, before the current selection, after the current selection, or at
Xthe bottom of the list. The \*(lqbefore\*(rq and \*(lqafter\*(rq
Xchoices are only enabled if exactly one filter in the list is selected.
XThe default position is the bottom of the list.
X.IP ""
XThe \fBDelete\fP operation removes the selected filters from the list
Xwithout placing them on the clipboard. Once deleted, filters cannot
Xbe recovered with a paste operation.
X.IP ""
XThe \fBCut\fP, \fBCopy\fP, and \fBDelete\fP selections are only presented
Xif one or more filters in the list are selected. The \fBPaste\fP selection
Xis only available after a \fBCut\fP or \fBCopy\fP operation.
X.IP "\fBUpdate\fP"
XThis button updates the currently selected filter using the values
Xpresented in the remainder of the dialog box. This button is only
Xaccessible if exactly one filter in the list is selected.
X.IP ""
X\fBUpdate\fP is used to modify an existing filter. When just that filter
Xis selected, its attributes are placed into the other dialog elements
Xdescribed below. After adjusting the filter attributes, the user clicks
Xthe \fBUpdate\fP button to apply the changes to the currently selected
Xfilter.
X.IP ""
XIn a similar manner, \fBUpdate\fP is used to apply attributes to a new,
Xblank filter placed in the list via the \fBInsert\fP button.
X.IP "\fBType\fP"
XThe \fBType\fP toggle indicates whether a filter will match just a single
Xline message, or will match a multiple line message. When \*(lqSingle
Xline filter\*(rq is chosen, the \fBEnd pattern\fP item is disabled,
Xand the user must specify the pattern which will match a single line of
Xtext written to the console. When \*(lqMulti-line filter\*(rq is
Xselected, the \fBEnd pattern\fP item is enabled, and the user needs to specify
Xboth a starting and an ending pattern. All text following a line which
Xmatches the starting pattern, up to and including a line which matches the
Xending pattern, is considered to be part of the filtered message.
X.IP "\fBPattern\fP"
XThis text field specifies the regular expression which matches the first
X(and, in the case of single line filters, the only) line of text in the
Xfiltered message. Any valid regular expression is permitted. Users that
Xare trying to match some text exactly should be aware that regular
Xexpressions can match text anywhere in a line, and that the expression
Xshould be anchored to the start (or end) of the line by using the "^"
X(or "$") metacharacters. For more information on regular expressions,
Xsee \f2ed\fP(1).
X.IP ""
XAs a special extension to regular expressions, \f2contool\fP recognizes
Xa backslash (\*(lq\\\*(rq) followed by one or more octal digits as a single
Xcharacter in the expression. This allows non-printing characters, such as
Xcontrol characters, to be inserted in the text pattern. If a backslash is
Xfollowed by any other character, it is placed in the pattern verbatim. Thus,
Xto create an expression which matches a control-G followed by a backslash, the
Xpattern \*(lq\\007\\\*(rq would suffice.
X.IP "\fBEnd pattern\fP"
XIf the \fBType\fP is set to \*(lqMulti-line filter\*(rq, this field
Xmust contain the regular expression which matches the last line of the
Xblock of text handled by this filter.
X.IP "\fBTimeout\fP"
XIf the \fBType\fP is set to \*(lqMulti-line filter\*(rq, this field
Xsets a limit on how long \f2contool\fP will process the filter. This
Xprevents filters with erroneous end patterns from absorbing all console
Xoutput once they begin filtering. The default value, 0, indicates that
Xno timeout is in effect.
X.IP "\fBComment\fP"
XThis text field contains any comments regarding the filter the user
Xwishes to record. Since some filters can be rather arcane, it is suggested
Xthat users comment their filters.
X.IP "\fBWhen matched\fP"
XThis exclusive setting dictates the behavior of \f2contool\fP when a
Xfilter is matched. If \*(lqSave message\*(rq is chosen, the message
Xis copied into the console display, and various actions can be taken.
XIf \*(lqIgnore message\*(rq is selected, the filter text is discarded
Xand no further actions are taken by \f2contool\fP.
X.IP "\fBWhen saved\fP"
XIf \fBWhen matched\fP is set to \*(lqSave message\*(rq, this non-exclusive
Xchoice item will be enabled, allowing the user to specify what contool
Xshould do with this message.
X.IP ""
XThe \*(lqBeep\*(rq choice causes the terminal bell to be sounded. If
Xselected, the beep counter to the right of this item is enabled, allowing
Xthe user to choose anywhere from one brief beep up to 99 annoying beeps.
X.IP ""
XThe \*(lqCommand\*(rq choice causes a single command to be executed.
XThe text field to the right of this item must contain the command to
Xbe executed. \f2Contool\fP will write the text of the message to the
Xstandard input of the command. For example, using \*(lqmail -s 'Contool
Xoutput' user\*(rq as the command would mail the message text to the
X\f2user\fP.
X.IP ""
XThe \*(lqFlash icon\*(rq choice causes the \f2contool\fP icon to flash,
Xalternating between the \*(lqCheck console\*(rq and \*(lqFlash\*(rq
Xicons.
X.IP ""
XThe \*(lqLog message\*(rq choice causes the message to be written to
Xthe message log, if logging is enabled and is performed after filtering.
X.IP ""
XThe \*(lqOpen window\*(rq choice causes \f2contool\fP to open from
Xits iconic state, and to move in front of any obscuring windows.
X.IP ""
XThe \*(lqTimestamp\*(rq choice causes \f2contool\fP to write a timestamp
Xto the console before copying the message into the console. The timestamp
Xis written in conjunction with the timestamp resolution specified in the
X\fBTool Properties\fP dialog.
X.IP "\fBApply\fP"
XThis button makes the filters contained in the scrolling list the current
Xset of active filters. Until this button is clicked, all changes made to
Xthe filters are not used by \f2contool\fP. After clicking \fBAccept\fP,
Xthe changed filters become the current working set.
X.IP ""
XNote that even after clicking \fBAccept\fP, the configuration file is
Xnot updated. To make the changes permanent between invocations of
X\f2contool\fP, press the \fBApply and Save\fP button, or use the \fBSave Configuration\fP
Xdialog to save the changed filters.
X.IP "\fBApply and Save\fP"
XThis button makes the filters in the scrolling list the current set of
Xactive filters and writes those filters and the tool properties to the
Xcurrent configuration file. To write the filters to a different file, or
Xto write just the filters without the tool properties, press the \fBApply\fP
Xbutton and use the \fBSave Configuration\fP dialog instead.
X.IP "\fBReset\fP"
XThis button discards any changes made to the current filter set,
Xrestoring the filter list to match the current filter set in use
Xby \f2contool\fP.
X.SH TOOL PROPERTIES
XThe \fBTool Properties\fP dialog allows the user to change the default behavior
Xof \f2contool\fP. This includes various tool attributes, and the
Xactions taken when a message arrives which does not match any filter.
XThe various properties include:
X.IP "\fBDefault action\fP"
XThis non-exclusive setting determines the actions taken by \f2contool\fP
Xwhen a message arrives which does not match any filter. The various
Xchoices in this setting exactly correspond to the \fBWhen saved\fP
Xsetting the \fBFilters\fP dialog, above.
X.IP "\fBLog file\fP
XThis text field contains the path of the file to which messages will
Xbe logged. This field must be filled in before logging is enabled.
X.IP "\fBLog messages\fP"
XIf this exclusive setting is set to \*(lqbefore filtering\*(rq, all
Xmessages will be logged. If set to \*(lqafter filtering\*(rq,
Xmessages that match filters whose \*(lqWhen matched\*(rq behavior is
Xset to \*(lqIgnore message\*(rq will not be logged.
X.IP "\fBArchive messages\fP"
XThis exclusive setting determines how messages will be moved from the
Xmain console display to the message archive. If set to
X\*(lqManually\*(rq, messages will only be archived when the user selects
X\fBArchive Messages\fP from the \fBView\fP menu in the main \f2contool\fP
Xwindow. If set to \*(lqWhen closing contool\*(rq, messages are copied to
Xthe archive whenever the \f2contool\fP window is closed. This mode assumes that
Xyou typically open \f2contool\fP, read all the messages, and close the window.
XEach time you open the window, you'll only see messages that have arrived
Xsince you last closed \f2contool\fP.
X.IP ""
XArchived messages can be viewed in the message archive, described below.
X.IP "\fBPrint filter\fP"
XThis text field specifies the command to be used to print the
Xconsole. The default is \*(lqlpr\*(rq. Local site dependencies
Xmay require a different command.
X.IP "\fB\\*(lqAll is well\\*(rq icon\fP"
XThis text field contains the path of a file created with \f2iconedit\fP(1).
XThe contained image will be used as \f2contool\fP's regular icon image.
XThis image is displayed whenever no flashing is in effect.
X.IP "\fB\\*(lqCheck console\\*(rq icon\fP"
XThis image is alternated with the \fB\*(lqFlash\*(rq icon\fP image whenever flashing
Xis required.
X.IP "\fB\\*(lqFlash\\*(rq icon\fP"
XThis image is alternated with the \fB\*(lqCheck console\*(rq icon\fP image whenever flashing
Xis required. Ideally, all three icons should be the same size.
X.IP "\fBTimestamp resolution\fP"
XThis numeric field specifies the minimum number of seconds to wait before
Xwriting a new timestamp to the console. Messages which require timestamping
Xwill only write a timestamp if this number of seconds have transpired since the
Xlast timestamp.
X.IP "\fBMaximum message text\fP"
XThis numeric field determines the maximum size, in bytes, of messages that will
Xbe stored in the console. When writing a message to the console would exceed
Xthis limit, some number of bytes, as determined by the \fBOverflow delete amount\fP,
Xbelow, will be removed from the front of the console. This feature prevents the
Xconsole from becoming so large over time that it begins to swamp system resources.
X.IP "\fBOverflow delete amount\fP"
XWhen writing a message to the console would exceed the \fBMaximum message text\fP,
Xabove, text will be deleted from the beginning of the console to make room.
XThis numeric field specifies how many bytes to remove to make room. \f2Contool\fP
Xwill attempt to remove whole messages within the constraints of the console
Xsize to preserve a readable console.
X.IP "\fBApply\fP"
XThis button makes the values in the dialog box the
Xcurrent tool properties. Until this button is clicked, all changes made to
Xthe properties are not used by \f2contool\fP. After clicking \fBAccept\fP,
Xthe changed values become the current properties.
X.IP ""
XNote that even after clicking \fBAccept\fP, the configuration file is
Xnot updated. To make the changes permanent between invocations of
X\f2contool\fP, use the \fBSave Configuration\fP dialog to save the
Xchanged properties.
X.IP "\fBReset\fP"
XThis button discards any changes in the dialog box made to the current properties,
Xrestoring the properties to match the current properties in use
Xby \f2contool\fP.
X.SH MESSAGE ARCHIVE
XThe \fBMessage Archive\fP dialog allows the user to view archived messages.
XThe dialog presents a scrolling text window and two buttons.
X.IP "\fBClear\fP"
XThe \fBClear\fP button removes all the messages from the archive. Normally,
Xthe archive
Xworks like the main \f2contool\fP display: it retains a certain amount of text,
Xand deletes the oldest messages as new messages arrive in excess of that
Xamount. The \fBClear\fP button circumvents this feature and explicitly
Xclears the archive display.
X.IP ""
XThe archive window will hold ten times the amount of text specified for the
Xmain console display, as determined by the \fBMaximum message text\fP
Xvalue in the \fBTool Properties\fP dialog, described above.
X.IP "\fBPrint\fP
XThe \fBPrint\fP button prints the contents of the archive, using the
X\*(lqPrint Filter\*(rq specified in the \fBTool Properties\fP dialog.
X.SH CONFIGURATION FILE FORMAT
XPrevious versions of \f2contool\fP relied on the user editing the
Xconfiguration file by hand. This version manages the file automatically,
Xand it is not intended that the file be edited directly by users.
XSee EDITING FILTERS, above, for information on modifying the behavior
Xof \f2contool\fP.
X.SH SIGNALS
X\f2Contool\fP will respond to certain Unix signals. They are:
X.IP "\fBSIGHUP\fP"
XUpon receipt of SIGHUP, \f2contool\fP will close and reopen its log file,
Xif logging is enabled. This guarantees that logged messages are flushed
Xto disk.
X.IP "\fBSIGUSR1\fP"
XUpon receipt of SIGUSR1, \f2contool\fP will stop blinking its icon. This
Xis a handy way to stop blinking without opening \f2contool\fP.
X.SH FILES
X.ta 2i
X.SH SEE ALSO
Xcmdtool(1), ed(1), kill(1), mkfifo(2), signal(3)
X.SH AUTHOR
X.LP
XChuck Musciano
X.br
XAdvanced Technology Department
X.br
XHarris Corporation
X.br
XPO Box 37, MS 3A/1912
X.br
XMelbourne, FL 32902
X.br
X(407) 727-6131
X.br
XARPA: chuck@trantor.harris-atd.com
X.SH BUGS
X.LP
X\f2Contool\fP is a view-only tool, and there is no way to type commands
Xon the console.
X.LP
XWindow system bugs may cause unusual, but harmless, quirks in the behavior
Xof \f2contool\fP. In particular, displaying a menu in a dialog box without
Xactually selecting an item from that menu will cause the dialog box to close.
END_OF_FILE
if test 22843 -ne `wc -c <'contool.man'`; then
echo shar: \"'contool.man'\" unpacked with wrong size!
fi
# end of 'contool.man'
fi
if test -f 'contool_ui.c.Z.uu' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'contool_ui.c.Z.uu'\"
else
echo shar: Extracting \"'contool_ui.c.Z.uu'\" \(22923 characters\)
sed "s/^X//" >'contool_ui.c.Z.uu' <<'END_OF_FILE'
Xbegin 666 contool_ui.c.Z
XM'YV0+U0H *$"Q)@W;NB\></F2YTT+L: : &BRIPR<D"D28C13)@Q94"\$:.F
XMS!@Z&MVDH9,F#)LT>L*P1 C"3!TW)],@G.-B8$$J:-+,J9F&3<@[88:>*>,&
XMH\PR9$"(R0,"S!D\=D[4E/.F3=6#"1>R<7'D1$^"((@\ >'D"14018@D>2LD
XM"P@D09P0.:OBA0(%(S:.85.'3$@><^B0T>D"C0_ @@D;!H$XSYP7<,+("=.F
XM\>/ ."4?GF/Y!9T\<,KP= PY=.'#6-.4N?,B]FS/K0>_IFR;]I@P;NPDQ0U:
XM]V0>O3$#+S.6=7'1O.W(ICUG#%<V;,1H)AYY-W+ILU_,L2,G39LP2[F[/IZ<
XM#L8V<^ZH-PX;/&WW>.C,A_Y]NNG3^WF7'%9?X"&'2?HYU]UD(H"E$$,.082&
XM"'\%Y!,(0QSXE$@D(5B5&465\44;3-6AU48@T(%&2'.D-D8:($*54F+ @<27
XM7UC8\<4;F<511QD*."C6%R :-6*)7UA7QE,HI $'"R+=T90<*2B0P&]DD"''
XM%W0DD( *3NY@98X[]OBCEV](B9&8>UA91GX8N0%"$TBN5$8;"<#!8QUP?,'&
XM&V&0D21"()Z!0@IB)O"F>W+(2:<;=7QA)YYZPL'G%W.$88>(8!5Z:**+QCEG
XMG>[A2:,<=/CYQAEG;&0HHF["V>BHD$I::@*)\:@JJZY^&BNCCI)Z9Y[E)73D
XM')DN-8>OBLH:;*V3YKEGGV&(\48=J0K)$+-D\AB&CV4D,)(:B5HY+@@]@$"@
XMDDQB8<473E3!!!-0-E%$O%\,\4033>1%Q!?VQLN"E0FX^\42163Q!1%!4!$$
XME$DX,87#3@Q1!)1.#NQEP%5\0<5<3!3QQ5Q%- &E"$:$*(+&"7 \,A4ELUSP
XMNP@KS+##$$M,L<48/TEPR_=V/+$4$1]Q,A. 1C4$H6F<4<=F,[GAPM0K_^SR
XM$?=^ 8443PP!9:67_AGHH&X4*G.\\[+L,LDF_VQPS0LW_# ($4^<%\\:^>PE
XMT/@.7?3)4V@:TM)E-_VT3#I)3;7,5V>]===?3XNIX&2;_3/:]!*\-LQM[_UV
XMPG'C3+?.=U^<-^-!?^&W$T:#(,(4=&B&$M*\NG%&U7LW[H367'L-PJFI_EG[
XM&6?+F_G&J;,M\^<VRYVSW16;GK'5J:_>^NL*P0$"[:W:CCOR^&*]^^.^Y]JG
XM\-T3?[GQ:B?/^?(T@W[SW'7O++W>X M-!=&LGPQ%L73X'M\Z)C[>00X$< #@
XML9*EFN*E37/NBYG;XM<\T=6O=#U#7=_V]S?7!<%:V,(00AXTEL51+WR.ZUWD
XM+$4M$&9KA&)QX/$&N+ B&"$(\J("E&30/A2.+V)?N$+$U'(%**&@6V8J0PKR
XMM@48=.%D*3/*]S 'JP0<B Y/D].XQ-2'"@D$+1E:DGLX5)*35,4^1X+4B>2D
XM(A:Y"$:RB<I&:(23,MQ( 4C\UH^"!$,(H9%$M6*7>YKTI"A-J4I7"I26N.0E
XM,,$A47D$%YK4) <V_4I4CXI4M,!&+3F,(2B;8E:H9I5)6PTK4YOBTAN^H)E/
XMIB&451SELS1Y*S&8I"N<V@E#RB!*9]&*EL,:S)*V1")DH4<UO036+TV)IP-=
XM)%5%8A2W=.0M26[12N8B";K4I2-!\M)@F*M7ZO3%+W\!+&@L8U[HZ$>ZZ&40
XM@OCZ&!5"]K*8N<X*T_G>YB3H.0JN\WGV>V?NJL?!_GG0DZ"THPD'ZD,#^HZ3
XMK$3H*\L@PQYV3'D3/)C\G#<ZZ.%M>@S5'_^N%P2);FI4QE26 '7G4"BA4D0*
XMB:@K-U51>%[T?1F%V_P BL'3G5"D'12!$&Y)(A&Z80Z[7&GJ"D@^*-GR("0B
XM&U*-4M/\U;-S7E+G3CL:4)^&5'4%O=X0C*(9E#)P#DIM:%,-0E9BJN:L5:4A
XM1ONIT0JRTZ/WTR!0#2H"*:BF#"B)(J/22L 4'M"9@"5241@55Y<1P88X9((.
XM04 #BWZ!J4 4HEZ>4$00')&:25RBDYKXQ'OFDV543-05LTA&+GKQ0F'<T+@\
XM! :HK"2-)DI)BE;TNS?&2(Y'C5T=[QC)/6JK(;9-%2 CY4U"0BE-A[02EA;9
XMI2^%:4R@U6.XQ$5)2S9+F:6,5G(5RP9&+2N6O@SOK<:;0!YAA"7(K&)QPW7-
XM!&13#=M<EX8&"4[VS6F<^^J77LXI,()IE:,7=*=7:2A/>BK/=4583 M.]>L
XM^G.K"?XH_FAH/2@N%B,\6:A5F:I"$(PWFB!N; 2Q.K.Z_I.K/06I53OLNO^Y
XM%U6R";$+"'M9P_J.O5Q)#8X;N+X'6O6Q-\SA#BV+V=UIEHA&G*]HX4#:DT5X
XM)5,T7A57.ZMK=E$!%@+C?D,R6S." <5;FN-[<;O&W;K1)'"4T1R%:R.?X"B[
XMX.)C6""$9DD==<W+3=*8G6M(C"!RNENJKB,AB><S<7=*WI7E+[W49S6CZ@MH
XM X9C"*'9&)26'BR=*IDHDHX>)J4H$Z J%EI+5B"*KVI7K4M_W2'4\^2F:K^
XM\Z5);2TZ**0-TRR3=L5%DG(1&[_ITJ\8O_FN</X77^04\+\XELX+([B=&F:R
XMCZ%4:5VG*M-NV#1&*(Q3NNKTVG@5Z(S#>K(@H"1[/";Q 5=-ZNRI&%\5;O&Y
XM+8CMO/X4K"-M=ZM9Q!P$)2[>VY[1FJOU!IH6>8;[9/&!^9WN!7.8W:X;*JU_
XM5_"<( 3AXRNQK)F3IGO?E)\6=C&&^ZWNBP?<@RCI]:]!WE*%[SI5,N^*R6N8
XM9,E"J;($2ZV5N*S%8BO@RV$N2&S'6&:4G/G#6\I,8D2TW#:WL;=P_NV,Z&Q'
XM.^.QT4 Z+GD9]06INP>W@EXVH:%K:.DJ,M&-O&[!P#Y)2"N@3=_]-+1N9781
XMU9M'ME[F)I-R=H:[^I*HWONP^OZ%6:<I\.I=/.']CO,W^+HKP:[FF>I[W_QV
XM<]#]3=NS.Q9M<U+;P-:F>%=E'''XJ1S=J]^PRV@L G>GB$<T7ROC_[[A<-KT
XMJJ[?]UUCKU> !_6##2>X43SNAMR7>/<#WWF^)S[\&,N>H"\7*LGOP/'E1\WY
XM!V2\X^\@_7*G7/@\5;",77[\F%M^YL67]T,GS\K*7[X-.T=R9"<+="\)W8J
XMQ5I>]EIBMFQD1%M]-EY5IUM7UR)9%T=;5R-=1Q!W)FQY)G8)*&%HUUP94VA4
XMXG99 G?6]4C898&.QG:5='>(-TN4!G5?,%[@)FZ=AE[@E6I]-@;8 GDVZ(('
XM 0=YH(.*AR=]UG= "$Q"Z(*&812#)%]TQWG'YGEIUR[-YE\N4WH#=GKGMU&J
XM9WW:%G('E(&W%8.<1FXHIV]:6'WJ=WT;E'U#@"W@YSLWB"WE5X;4EW[9]F^T
XMMS0^^(;<QH,\D@=S*'&IAX9W^%6T!P63QX=$45X847:35WQ08#Q$<P1(,%D8
XMZ(*,%V@<6$A4%(C!=X9VZ&^&B'$B0 0%YQZ*V&=)"%@4]7"6I7]*!@(Q@%I:
XMIEH!V&5&AW1?I'1C=H!F]G9OQ68,R%L.^"):-V<22%Q@IV<DQ$HA&(R:.&@=
XMB(*']G:,-(*,9H+;A8*1!FM!F !BZ'?/B"Q%B&OAZ(Q:\E;E&"WG"(SDR(3:
XM>&S&=B[)]GEJ%WKT,GKY@@1/D 060V!54&VOMX5I2(:".)"$*(KKEGV?5 =C
XML 9 0 >;$19RT!B:41YST (R0081T16*V([C. >>F%.@"&,%B8>D6 <W 5@A
XM()' H1 5F6ER@)$:J1@=V08AT) /^9&:9B3N*)*N^'O3-XBAV'*S1XI/T$9R
XMH ,\&6X^&9+Y!UFQ.(M!5XM#=XM%1RY'1X %D00JP1(N 1,A 1P16$<B80:^
XMZ'3:<1%FX75BMY8BTG1#(1!OF11QV2$G,0=^MA(M\1)ZP$O32$F'UD<- 9<[
XM@I=T, ?86(*:1U_=I8*JAI8H$ ). @(F8 (@$ *$M$TH4)<7<9AEE)@$L42_
XM@1UO, 8H,(N_(Y9O()F>>9>A.0<I,)N(!(!8-"N=29B-9Y>@B2!SN428DR@P
XMXEF4"0<MX -P69M.<IQPN4VON9N?N8G/)9C"*9G%>9QBYR#7(9L$LYP^D)TC
XMM)W.J9N&"9X)L9U1.$@=Z)W)69W$Z9U%HD3=:9P^$)_CN6>%R9OQF9Z 64C>
XM:9X2R1"RZ9Z3Z9WVH9ST:1_WV8R&B4;2F3?8J9O:*:!5-)P%2I_)A:#'F5P+
XM.B2&.5X/^I\2&IX42J#7Z0.+T2)L$ 9YH*$H*A1PL*)4D2[/F:(QRJ+\26CL
XM:9=;AI5YXUI@MHL8THM-5Q5P:77$Z%L0B(S#Y77SQ8P>RIOE*8V%1(W219Z\
XM*9>+.7?Q^&AK IGS)8_8](3UF*,H""5&( 5!8"\"B7XF68@M)D1$0 5( "4U
XM< ,U()!(4 1)0(F3)0,T8 ,"R01!( 1%D(\B0#@D! (SX (R\#UINJ8B,P7\
XM> 5?8 1/X!9%( 50LC]5<#$$$ZGVHCJ5^@524 13D 1:(#+Z(@5.L*F=*@6?
XM2HOSTJ.WF95 FG1#:H!%"@8 NIU(^F;&N*3!E8Q.NHS/^:L"FJ.!&5U7@J6?
XMJ:6+QIA)5'=?BG=AZH3TR$UF2DE0 @5Y<:AM6I(9II &LZ=, 4OUB"$J0/*
XMR@9H)9!8 "4P()!90*\"*:=T"B6:]05%@ 4P,V!4\ 3^2@18HZ=\ZJ=0,@,\
XM1##]*@1/( 6/Q:D@<$-,, 6@ZG]6:9L"F(M<N:NRA9@?$B+!BG7#*F?%VJ04
XM^'7:"*408IC[^:!6^JSX"9VPZ9M;&J9>FH+8VH1&9U]DRJW-=:8@ *ZOR@1?
XM( 150 4#ZP3C:E=%N6#G>JCJNE7LBI\Z$)_?8S#S2EGV^G,L8[2'^@6$:JA(
XM2WM15 ;?([9(RS8 "267:"31J':=:8THH0)3!B6=6)6U:HNWVEI;&:2P1:0B
XM"P;V4;+%&&? 14=UMK)/^IP.2J73Z:S/*:URI[/<"*8^JY5 NZW*QB1$R[9)
XMN[1-^[0O5J[J-K7INJ['I0/VL;7OTK4V< -?Z[4$([IE.[:TAT^SL;;AVK:<
XM\[8&H9M_A"3-5;<AR"6C>3ILH66TR@2VVK%:J8N#RZN%FUR(JZ0HR[@3V!<L
XMVY@NFY^?":*2ZX.&:;DDR*6-::T\2ZW#IJW:5*9#ZZU%^[NCR[1/X+2H
XMAY!1*V.J6[4<=;4DI /)!;M?T+4Q, ,X4+O]EP"X6ZBZ2XI7-F&WB[]N2VW#
XM6[,*:+R#AKS4M;P=N+<:V[=7^;<#*+@%&+*A614V*J/9^X#;RW7*V+(U"J,R
XMRJQ5*IA7BKY9BIB*.:WL6ZT[ZUW9^K.=1[^#1K0P [!34$3]ZZ:H*[7O@JX"
XM+#H$+!8Z\,(LBL!=6Z_]>Z\@( .TV[_Z6J<@T*__&K#_,K %>[#]NZ=]6HG\
XM"D1K?"]M3+!Q <=>\@10<"_]2JF<E;01.[%3$*NSRK?0Z[?2FZM"ZI5\&99_
XM"0)DR:0@<99I617M!0=ST)8K*W:;K)=R21#A6W9!)LI O)=@Z9?].;EM1[/-
XM&,J]F9<YVX2/B7<66IR6B9F:69GIDILU*\NCC+<&X1)_@IJJ.0>LZ9JZ*<Q
XM3)NU272>!<JG/,NB2<S!:26Y[)VA[**AW*$0(LNR++/4J<W6R<U!1C8!"J_>
XMG,X3"J_@W!#B[,XD"J\ZW#/'V<TFZIV&X1%U4%ZLQ'PNVL]A\,^CQGSQ;,H\
XMHI<$;= !'37W#*$^L,GJO)T5>L[TV= ;4MET"<'<1-T,-!EX,\;708=/2@@
XMG="RK-$X9](>?2W&$J+T2='O/*#F_)X9/=(%7=(GS1+%)-(DW=(];1ZJH=+5
XMS-*-Y])<0M1Z*=/Y3,_G6:(W?:''B=10=1[A!M0[_4)M@-510:/-?-0Z[=!7
XMK6D1C<ZZ4M,7C=/'*3SD)9]>XIUN;9]@'<S5/-<A<M8S#=7K;-.1R=8^X-:)
XMD0=&X:*"?1I&8=0+O2N8@MB<4KYH_=)1S<[[3)^ME%"-3=APK6J6;5(B,MB)
XM7=>Q7,V7/5&9;21./=%\;=&5_=0; 4U0U\ZO/788H=B<;,JS?8.0O==I7<]^
XMO<WT>08+(2AI !8N*MQO0-Q@8=MZB=S*C1!Z_=2]/=F_C=',.3;%C1 NJAW/
XM+2>B/22RS-V2 A;1K=K3W==K3=7UN:)S@ ;CK=WS>9QFP-[NG=W>O<&CO=CS
XMG13U3=ZI3=.^G=XG2B-MT"?.Q!#8DC@N2N &KAH('C7,W=B<T>!3E>#0_=^K
XM+=5_K=[%Q$ RX*(=?DPR$.$AOA0R4-X 3MT"[IWG@0<+=$P@'@8N7N(A\=WA
XM7,TM_N)+@>(93ME3?:(T/@,@_E;'- ,D3N1+,0,\?MZL_>/\?(I^UP8P'=+Q
XMC:)0SDI2GM(V+L]BK811/N5++MGHW=H^0.,T,.0I508T<.1I3@-A7M$:#MS2
XM?=MA <QVJ)5+LMU?N<1KN=VS@9Y\.9J3>:RC%A4'M>\?=N&WN?5;.B"'N",
XM/"O71;TKS'2%&\HQ?+*+2\/':L-AO=CC7+XS2\V+K;[9V+Y%K+GQ*+_()K1+
XM;+^BRJI-0 2FNW(5!\#O<L9V"@-@G')RK+ @4 ,U, .#*L&(JJA:7+1!]EXY
XMAL""W%D6B[$L$^ND.LB8JJD4&^T9FP#4_NRFBJJJRJH1^ZK9'@07N^W4/@2S
XMKC550*E0 $01@Z;F+NV*7$4$\DPH0"!+00<H,"YHJJ:CJN[_PK8I4,>[\^SR
XM?NYZN['2G,*ZNG1D=ND]WLG#**R*6Y:-Z[V/^^FWG>)]'=&CSO&H')NUW*69
XMV[.KCL1!^[F#%+J_6^NPQX5Q3+6LVZX>OYU>C*]AK/,II^MI;,< B\<>H\<&
XMN^U3.\>3I<9!+[!$S\<)\+"%#*L5.^_;_G\-[[$JS(O6V\)@@-0?$369?O&6
XMW+T5"+ZD?MM>SWP@S\.P#-[5;.KP*TFICG>29@=OD 9DX"5I'S695ZVL#H7U
XM.R7?BK\#>P1'$#(P3Y!P&L UC[5[?W#R"B4Y(*@[+XL/++I#P(_^*#(5\P07
XM"R54Z241G 5/L+2#?[1?P(]$HP7[ZS S%,%F:WQ\98I!3<G,QY1AB[]M\3%&
XMH#!K]?@(D?NHG_G]^(_6<\@_HWT=+4")VA5>S?Q&0-\: 1;,3SL@0./,_P2I
XM(2=WL!%DD";,3P5,'3L%+D"^)_KX:P7F/JL@T.L)8/4^ZO!""O&9W/5CS=,O
XM#=)A?XPIF_%EGT2E;*7=/Z&6_V*:J&-[9V_DX2PAAKEN6=S;/"K/<]DCT&6_
XM1%>\L!=$8PAXC#66^!)2ZJIB-,]JM2ZDQM$*H 5+.5UK!L2 /%7Y8D .$'YC
XM2_TQ@4^U,)+ %( "A$IAA S6L:_&& Q$6C*0!DZ,B!47R-:]. (]L&&A/]27
XM TO?9!%=JD]5M3YS]P,!1A# E\@")J.'/ "+QCJ:P) 1 OR/ B6_M:?Z7!_
XMHNM4!8%_L;^8@!C3=L\K>N&BZ?6QZ%^O(H%*S:>IAOU'K+A7#3-[(N\+X,&A
XM5DS6'N4*A'!OB V;N?< Z4L$G%^N3NVXO"^(JJ9 $'!Z=>A-F2L0N+I$8+L:
XMA'U"#\:K_M6U: ,('8ML LNP;&5N\X6*1*%OHL)&CM"Q@1HW=13>/4NTN&J
XMP/7P"!?7LVK.3]/PP1EFK!P7L@J$P+"KF35R=@CM6JD#8B4/U9V\1BBF.A<D
XM9'F\9!*.K2:F0Z(8N6(Y5"SUA< !-@('X*!0AN$FYS&J%>C &I@7C(%FL ;>
XMP!QH!'D@&I,!H8\,HCXM"%:(X+_8@4@0C<4 & "HJF 3-'WW"_5%0=;G!%Q?
XM%52#;- )N,&$1^]*V"([88V,%\X_7TA;\)I1&(:;KAAJO&/H#&^;1WQL:J=9
XMO;($:,V"V.6B.XPP[\P*1-04&L(S80FV(P'$)S? &7))@5-"B:/OQ:]'V.JP
XM8;^K@(2/ WI#J*4)/Z X[(3DL%V=1'48 VA /C088DP&G,(JR _EPCP, CKP
XM"/; &< "5R$0C(=#\%3]0[%X#VL Y3.+9&L6TA[K%Y]PWSM$6@?Q">*OA3@%
XM7Q_^@HA?H V^0:I7!7=?$NA]-6<G]L1S&*, 2^*(@[H0<%$ZK<?".N*J.&UE
XM "1B/++WO0 @2SQLFLT0KD1$" T9($R<AHK0FA!%P/?J!%]"'%O$;_-UP/^%
XM/QB?)\1:H%&*1#X0,/EJEPR0 :@0+L;&?^0$N,85.&2RR"""12=X^L867VR(
XM5/ N[J-,A;'@Q?XR'7!0.K9"V7<]K!^-FP-V43AJ/N,75I#?WM ^9N -'(A%
XMQ"A<!?,+ F: 4;!'C. >XXKH$H/M#S)BQ#GHR*I79?Q%G@TS:L:Q]P<]8R L
XM;:D$M*%$)J$2/U#;NW'/D.291I/G %,C!.1<22P24D#7B/G&H]$C2DTQ'%JQ
XMQE? $.1G<VSJT :XPY23%6=7%1R.G,\X(L=\./J8XVM$6L_1(4I'XO<$JF-;
XM>%44<=O!O@F6?4K*3 D)WS$\ZD/8Z"&YHWGT$B*@"0"'.F#,\@#SNP(K0DX,
XMAC>@S&P'?A,+YH]]2$?\Z/[@'PK#>KUPZ]&6!)+;H,Z ['^<<>.51+W$)HV%
XM;DN).ZP9YK?;E@@;H-U!>>WK[RDQ28@441\WG(TA$M<]Q2LV-[(80] !=1*V
XM,2(Y0!7Q8>U2@32R#,Y D>$5<2!8K(<!<6&5Q25Y%C=E/U2+H#()ND7E&/L.
XM$0"9CTLI%K+"Y8@0H6#$DH+0T2^B/L H&(.D?N18_%$C^D=+Q_6<VWMS V_2
XM#W8Z0#@GOX"QM&^BT4&RQ#YY&BNDI*&)S %3 !:<> 9T8HC@B5$%JC1&O@>/
XM N5J')0;<MS<R T(L!#E%%.4(_(V%K!G2?UVXPU0A2U&C,T &K B2646C(>=
XMDAX"Q+$X*N\C6AQ8J')@ML6WZ"^W(^WA K4'.VB$H7 'F ,;@)C3#R$HR1I9
XM*_?BK62(.A(N\DJ).!AQ(5PTC(AQK2C&<-D5QN5CS(7[<1=.1I!%+&F+>+-O
XMR9+3&4-/URQOIG\[@'K2[47(!?@2*>2?7$%%:SG8Q&WI*KRE40"7/M%E(@2A
XMJ!HQY,J;@"VO4&Y#I9B%F.*[K(V<D%&>C-;E,S_.;JP![@\K+BP5R14!I@WT
XME&'1'HK*MFDJTV(15)@[9%5J1[E(BB#F$%@1#VF#394R@#'MV\;$7WFQ.>+(
XMC]D7'V(16(.!D63Z2NF(,GU?B5F941,H!C^8"2QE9AWDB&9FO[6W8YDS1>+_
XMTRX!L)J)SOYVX8#F:&R6U-)H7BNDB2V7IJ]IFIB3,6I.-T U+^0\NH98,QMJ
XM3:1U*)?BZ0*'\'(<8K'6M3J/)56, 5?Q7>A+'- O#::I#)B?$F\RJH*I*84@
XMPKR;;#%O,LPAZ0JS#\2,?ORM<(*%PRD+25_'5(B,,U<Z3LC9*V]A1?27E3,Q
XM?LO%*"YWYZ^\>G0PZ]',B,?U&-P7.'"$ >Q5/),E]N!D@42=+-& (E +YP:B
XMY?G:DPJ0EDU(:5@ACYC5E(#=BD/JOBJ ?T1N^R&7?-XWCJPN2A)I!:3H XN
XM@4(^4OASTJ;T_#D%<4RZS:\8-T,E"!B?W7-2?<^U*#=_**LDDD%%_!43\J<]
XM)FC48)^STGWJ1?BY^AJG=.P76! _<D%\*;K X.X@DW23_:'!O_@X(^)$M)]5
XMC^'%/S2Y$=6DF:%Q,J!TJJR1R#,QJ(XK R>.&;Y..QH[.>C1M)".\(,"SQ"J
XM+KMH);R$'])_)4H6&B^C(M:"H^I0!O3&RD<#<BA<=)BDZ"* !3(P"B_I+(18
XMM7!R6D0YZ#D%J!TL7#F.QLE1_]<9(6@@3*5(;D&JISRY1X4FGRR-1=./SDY
XM6@TSI%'4ADCK FXJ$UH\4ZBM(SXS#RHNSW8%2].<.F18#LP&C-%]N$/A9JI$
XM8T"4FM;-(7I-H40VG96MDA1)23Q@'NJ 5Z!Q*6)10%&\2"NGJ'.,GR'37V+1
XM?[DI)=\6Y8)5T(O24S$:1L_@_#2C)?-^FLF,.#-/*=<+<JLT3I)$.QKD+&@/
XMXZ.X='WYR5WJ07]G40R>1U&$4L(I8 DQ(8C\F@A+F3;*UA7D(FD.&)5JD[)(
XMTR-:/H/*5' /G;1A?E+/9PNSXRB-C/)O6!)0VK**"D^62P@)]8%>(&1XY3@#
XMF-.CTI(T2LA<2L108T4=4R T\!72$5I"-6 Q-4->$WDR4N4Y4C]A4?VI)[#%
XM*+ 'EE+YY32%A]?S;0K,\&E$=>@V]8?=M*UZTG":?9[ II #\RU-@(">FC@H
XM&5A=IW%1BBK.U =/HR-<G*=:])YR4?RE3\&H6^6GTG%DGE&;^O[4Z)D,H&GR
XM/SH=,Q=4EZ6!;)9FSJ$^2"XW-#4H4UV$3G5S65362"@UZMBR%QP5D;I+K1I2
XMQ:;K(*FQE :85)1Z0RD+#CBK[)2NNM0\ %-E97 =6Z"TIA)&S@E ^V.EVZEF
XMQL_=N<ZZ,YFE'96N@$ZT3LN(>NJ:JK7T)78/[WF)CP 2X$"JV&3,+KYTUZ$H
XM2"\J(94#@U5IZ2_^94QCWDGR=5QU;-H\TO;GK.1N=('1\PN(L1H0 [[I<6VI
XM?"4(]%?C:AUYG^4\(.2UHYW793=D@-)-C9F2\7.Z4:=3Z/X*':"N=-2ZVE(Z
XMV>@\K'95JD13HE;+/UKW[E[> T#/1*$)&?AR7M9KU5RMZ#)KNE:D)5]+E_$\
XMIC(/OXI4_8JU.NPSB:1ZDT7:J0++4KGCR? K1[8PNH7#^&!]AZ-#KQ7V?ZY1
XMS/K(OE)?$DN43$Z,/4S6J]!,)[LC<<N\M$12EF9!3$M495_V+ZT=!*B;S&Q+
XMC(9^KT("MUV6F3;3+VNS<B"#7C/29,Q.4VIR*<MLFM59J"-H91-M(AC2#)@U
XM(SL[S("3\2!S9M9%F=F$9F?M+%)=<?3I!@6X*B=JJ1NG9;2T;4O4M/*6:3&M
XM"WH)B4'3OEJA@!*V7*K52WT&UF:+W2;?_)"*<[63TL]<!%0A:X.MJ#FUDQ+7
XMNJ!5D]I*[9AS<J'6!64H4BMM)0RR5;-@:-?B27Q6GWSML]UP)ZK/\ DR\!2*
XM+=D9MQO"UG9:%X1NSTZS];9-#MS")Q=T&E*#N6U$];;&?4D^@VK[3+YEM? V
XMSEDW'P \%ESL0!77ULT"#X ;; <=M#U.YL/@\HB$&V@;6UKCM=VVX4*ZAYMQ
XMR8X>O!:'CK/UVF#[<4.(NNVW]):H@5R&2W8<KKR-MB17Y6(+A_"5N!.B&[D>
XM5^:FBINP$H;"R4VVJ7:ID8B5RW,3$\MM1"Y7SGTGY\<40JZ(ZFI-E^(V-:9K
XM +>M1'.V\5;I-@TWH!XWFW?:NEU7ZDJ*,\!U#\315;4;]^4>IZ^GX*H<VZ4)
XM/U?-OMT*^FXU[J_EN'VF!**TA'!OMX3>_6@)0>SF7:4&>+4M@_1/,+?EIEVE
XM.W@)H6KHNTG-\?K<?=L0UFVPU;NB\.S".1^G=CLNT@V&68W::EQT^-4H[ZT-
XMNF4MW&C>I#MP[>R> W1]5R^]WAEE>BVOW.VOJW?QMEY4.WM9B>I]*;&7E>!>
XML_92!"_O';Z_EW+47<5[=SNOG35TP7?1Q5TW^WQ-[/+]O,U7FDTZ#:M91U:R
XM!;&G<ZC6+-OK9C_M0QT2E):[4L.8V&+%JRI""+RD7/J]<ZDA=:RZ3'>S;K:N
XMT'R5!.84&B.P-E0<(CUOB@-X:UPT6R<#V3W*BL5HG5VE$J7<#N!-JE)U[6!&
XMN3.9$5A253M+=:I2U:K*%^-.ZE%6_#OPVAT2>'>[(]ZAT6DG@1?&==2?P?;[
XM-85?>>\ 2[[3$?NNWY&$?Z>!!9[6^%T%[^<=O >\@IN7">N<&=:4@DZG@W4%
XM%/AMI>)WTJ)<N_OQS.]H/;U]U+O^T:=J#=VK5(6O-U+_(E,A:UL=)1O(6@$7
XM7JG# "S& K#/4WIL;.B]L43ZZ^B8$/972R^/S6&6 ?4DE@A>KA<6">?4YUK_
XM<BVM?<)R4@H#74.<&$[L^$6U61BU?E=E\MI:4+#ENBS!#/P@^<M><6S]%9X[
XMEFS90!2*557H&&XQC7298BU&'%:Y%I2X 6P8]%T^Q#F*@TC_)9C 511/#'EH
XM364DZ,O%F#3["!80 U@3Y[K,D8;57TI6,>:IA"3^XI'5\3I"X Y)'3F?- 8!
XMS5C*.E@83'8P,8P 1,QURSI7RE@S0^>R]3:(>*&BWRE,=IBMZTRJCQCH1F*Y
XMEUI37GMEK>D2#(NN'KN_Q'"01<7Y];:VJVXS;%MQ[ )],H!AIE1\6#T1)]_,
XM/EZI(#/8#(9.:N\Y+L@;Z(,A&N5%S$:8\PK'EW4<#]!"7&U70CJNH^MX$9=D
XMPSM+71D\5L1J=AZ?H ZJ6J'J(/W"\95T]>,?:U\77]ATH8\RVT92@N@;8T!#
XMEH7"E:]4L(D<O#08H'U!&FAN,0D0EFA$&"?ZR(&XN0I+0EQFV2T<(+?NX22+
XM6'ZKDH-MNY6EK<Q\G5^R')/5+R]EO^#5Q5KB<_N5F00GOK$VV0NWQJF*^O@Q
XM?2W%0/:^ N0A*Y!7L5<&RVIK-R;D,J9DQYA1;K*TIPK4952DC:DL-VY$9UG+
XMAN2M3(ZA*Q.FMZ@A,R[0Q,7_E&5U_:PPF?J"YM3@B%-SQ97)VV@2BXKP^F)C
XMK+\-S;TSD'KB7SH\IZ-LY,F*;Q.V4'FIQ6YS:E"'O]4WUH#%.OR:9''D+#-2
XM.0K68UQ8=263K,;6$4BNX+V9E*\'%0C-@#5_KA7;O)I;D7@L?D)TI#S)!/ Z
XM7$5B>PE- 58ROR9@T-) "X#/(0'-A$DCXR\=:U86QYQY)/<JX"&647-*5K,+
XMUPH#VD:+9R7Q%J[)71@?VU]]G!3;)7#V@"(R()MA'0 \4J0!UI=;\;%R2K6:
XM/=EJH.JGIQ)\%E$9D&1E:G?V'S(!6!3C=CI8D;%U1EK+& (/U&!94)=P53 ?
XM!=J5QF,$G3U:\X%VL[#9?1DQ".U+,2HP/:'^6##;1D=:P,S',_W0"PLXHFCL
XMV4-[X(D6T2F:B/I0%FU@#S 25<KA!H'$Z#@QHZ>SK:RB\C.REM'(.5D!<64]
XMPEJY1V]8[YMSARZV"-)1^$A77'^K<XTT6T;2;GFBOB]>*B@_<4;ERV-+F&9
XM*'VA:6-M!<IGF%#[:8.<P.P48\Z7HI(YHU4:R*7C:G#LSP<3KFK/4TT^G:SK
XM4*)E .2V:1OYIG%E/.VB5W"?;D%\>D7#H!D<@]83LHK,.5T_*>N.+J69M1Q_
XMYIB[J6ENSP74QF71EN4^':MG;M%M:N_X@@IJ!KU!M3!%9=)7\[T.5MC:41.I
XM%*.MR;0,,\^4VZRO=21=8)=R.4/F3'I+PDU,;=7)54=;5H+*?97U5Z"Z'W8T
XM:Z^0.$?#;[0>TN478!OJR@N)$_6*_=;V>#<[Z=Y\53,A2$W7F-I= 6QU2 /P
XM94J= 2=U2Y/H+HW&OC1<Y(=V4TRKRC(=C(/*TH"Z"6%6O\]W"J=O-1FEGY)S
XM.__GS:RGNR\8 +L' EJ''6FM9H$V6IZS0?-0OV:'+3L7=?NMS8FES\S=W-Q+
XMPS5.7I<P,DK[Y.%,I;68T::*9+6WT@ 5^"*=LR].CGO337O,FIV,J7&/M,;:
XMF;*V:MJ#)9G"]9,)GP0JA.<IFS)+#'D.MG.W;*-G)RDS7H?@N'ZQE/DE ;(;
XM=K&??0RB8_!8)^%D[9FKPMP5VJ7,]:H]!4VT$?525;%-NQLI$]KL)6+L>: #
XMG^2A!<6[[#OSLH0&Q9":>#X!PX?X*O4BO=3$^5'.W6>J!$$U99'7.](YZXO/
XMA[8]J=JFHK:Z;3OD%^TZZK:<>"ED8&]OX_&<6$YWZ@[<P7MP'[_"/5267^%^
XMV<^O<*//]I8QFT_A]HZ)NW!K/[O=_<(-^"O<L)K![><;K:LC][[FT?VZ<C^=
XMRTMXIQSF7M!!]^\>U6R]EAFV/&;:NG11<^$F+:[7I:0FIEP3,/=DX9R*NZIA
XMYM\GK?!&TAF@D,6V#9C%VI14C^RXVKN#M1!5U6RUA#ODXTVSDS?]1JR_FC>*
XM:J356&-X+O;/RIA8YVQC?;^1=1OUV8TW%#*U_]VY![4+PKQ,;6%C803NK14X
XMN(ZJ>YE";]1RK;4IN(9>UQA<B!<3WAVV!>S/^>#S.OO PB:;KW7VG;Z(@IB-
XMZE22/'J]&A%'V$:\C2]# GZ%T^_GMK$S^4%';->=8V&W%-^:%KJ^!F>G6,&)
XM; $3M:1W@W=P+TY9<@"K#J*\>*T646@*IE-V7!V(EE2FLO#%R;;I=XXVXY)[
XM$'=F-GY[IZO EF$$FY4FXFU]>GLOYX;CW/JTTF/9/"M(=P*(L.;UUE+M1LV;
XM0[%?KN*$_(H/Y.-[YZ@B6:Q='_PH@],S35(6;&7NVQ!V#)1726E>-#._5L)[
XM>G^7\NQ*? 7'&W?-RA;H]MYNGDI>.3B_L]W:0>_2ISU>I;F$];V"XJ7H<M:M
XMF_FXHW[2O]QV7VPRG+%=+_*-YX)C*,?B'\HOP_CQZ:]A-BH$CDW!8,5SB<'E
XMHR;YIA(S:\WQ-S8'XJC6T'US5EY]8ZPY9^5)&BZ/;KD,8Z,VH]WE]+>7Q^[\
XMY6,%.89.GH1Y0W=TP,+%D7E!Y\[,_,EZV(;.MZLLE'!T%!TD7W-=!<E6&9BM
XM9'"2S!8NL4$&/)GW$CM,?<W2)=T4U>42G)5D:3GDU:RJSL3CEY[%:'RVEVF/
XM/TO5DX94)[2F"9DAVK_4FA3M5C?K<@F:05H?)6F'!%>/3<LKFW5>IF[8DD9"
XMB^I1_=.2N< ^:F]N8#/K->VOFW7"3MW*&U\?[&8]W_;UL9%O%?O8B.K_-K4Q
XM]F^K=*-Z?)KL@H*NF5[ ;M9C%L;=[%EWX$)T51$H7-1J9^J675"\=L1^VA%[
XMVM6^)*AG^VLPP-0W.H0@[6/CH_]VN-[59[D>-Y?WN(\_:C!,@H%Y./1Y-""Z
XM(ZP!;/D6>2M,P.UJ>_AUPE$H#L?W$4@(SXQW.PJ<J2PP!![O@ZP#ASL0[*K^
XM, 8FP>S.W<$[IP7*-U8-YG?ZS@;[NXK5@GTPP3-X&]A7&F$TGJ?S=_U#[4[X
XME&NZS2A4#W8S NZ"8M4*]X9PUU,L'H_-QWW^)O=[/CR=.TQ7UU+1ME.W-5R[
XMW/ M1F-P6.BYL3U&AQ.6'4[Q3&\/.RP@ K'\\ 46J#U\<O_PW8[90[-OI_"+
XM/;*'9B5>X4TKZ$[@2WJ/1VCE_J0+W^$SU]]P_V+LW'V&>_QQ_J\P $M;/L&]
XM^>#%\([.:9M6KVT7;M#Y"M((%( 51A+NY$<%Q ("H; T%OI!G;TZTC8"7]H)
XM\[N?VF\\#:!UN_[V["1+P3=0TQQB#?1PO^RE/:]->-8N*$(Z:KR62E-;WLZ<
XMF#O[IV.<FO2\:D/QUKK2*_9'1=?\G,KK $"O&VGHEJ]\-T"%A_ 1S4---?=<
XM]6&:A+?HN4V*N+OA@!I]M2XR6&-<JT&F\MZ5.KQ.8V +V--A,%/@GRW3?PIU
XMBTZYZ]]L#Q0_GM$'M&DN[1=]D4],#=JXK_.X+%X3 *DW+RA]PZOT/\YC=?)?
XMMMB@?C"#>*SU[,D 5>35C7D@?FI:GWW.O+M_YCX=!'S[%+/L??B%*.IQ=BR)
XMV:3>U@<T3,J,:%8WY0JS.\Q*V<*_67GIJK,RI%U+(<3#1^>R?/-\=9P6UOVL
XM6V]&%[_2%K.T?FA7$UMG9C4KY#^S1^LE(JW84?EX'9M=6H[[\"7N>K2U%__B
XM"W::?_ WK\T5N02WYR=VG-_S=;YO*V\UG\Q=?,E>Y99^:$YH.;_G9W:,:_2;
XMK]*]^)^]Z?=\T?[RB_[65_147^CK7L"VVFN^VW7GN?SA0_V>7_:%?MCONCZ?
XME/ZH &U0:<O#C_91'^XO>IAOX==O/4;N$KN!-W=]GNX-!G27[C./NE=%ZV[L
XML#O6 @$+?7 P#:>!Z\UF_PKO([@%>[L*[-[O)WKGP.#N [<J<G?>^_NZBT3R
XM/073=QY^A._[#7:6^GT'\_<>?/J!,(#'_(1QP,M]42Z@"U?5[VMXW^OK_:._
XM]WN^HZ?)2IZ!7VVVY>&W:DQO7;\?Y^W&@6[B_2^ OV,QGL5/=V 'X_6P]I_Q
XMNZ/&3RQ]S>=YMH$W^' _WP9_N._T67/QA_O'/\-W8GL^[@>KDZ_=+MU23_FN
XM_2C;?V(V]9A<[5(5<7G$T9<'^DAG8A[RYNO1;RT;7P$[=%UI7I.TO;%Y;AZ6
XM%>>);W->/V/G10TQU1FGY^5'_9Z.M\:A?V97?++^F5U8']AG=6EU()_Q5]SE
XM<=N>,E$[27K<DM-T[+%,/]&EQSME>KS<Q!:*>7J*U#ZG[F5L*6"IAP+)8K5+
XMJB>RM7JKVJLWJIUP"5,*-^LM;SF=ZV#K47Z( TV@ZR& ,QLG1^;):3B;L'<_
XM$7O3V^6T/^& 4I,;4-'Y>UQ9X=+V=5TGH-^!]J4*.A\=U_7!?R\@AA<#SF8D
XM71$([O& *9T/N-+E<_G?[;;_J6(ETAQH<1T([]ZGEE+)>V7>]? ,H+X7LWA
XM!_)[.]M0UV5%,JQ,F+49*75<#\/QIR5\-8LHF"HT?&*'*?AF;8 !'\7WD@T)
XMJF"2AAKM69=)G^7+?'RPH MQUHU\QTS)I\R<?+@@A! +KGRSR5SWM]1UPJ N
XM*/+I=4J7*>C:N1 )C2JH"NY\G=<T6-@!?=:@J65K28.ZH(2'<3F#9 Z-$P.@
XM.0Q$#! -ZH+B8'F3#7)V Q>-4P.0@\=$#7 .KESNH#K8#8Y]'$XL90/ @TN!
XM#3 /SEPTC@U@#ZY<K!=@0^/< /Q@&7 #_(/*12QU PR$,U=!F ^F.3A 0H@#
XM,(1W% X $;X05E\[&$OE EA#H 1TC@YP$88]X6#L=1 E! .1"-A2@@#F(02
XM(9"3$HZ#58XX: YN@^C@3 @3XH,R89H3 WPX-6%*..+@A/2@4+@3=H0&84HH
XMY 2%/J&10Q0"A$KA4<@.)H4^X9G#%):#:\Y3V!!6A5)A:D<5EH/[X%5X3!18
XM+:%/*!"F-NN@5S@1EH,(H5BX%,0 "Z%6>$?!A5VAP/45CH45H5M8!AAE96$Y
XMJ!&BA?<@4K@6CH4@H5[H O6%A&%=R'DI77 4#) 0:D6(H8GS$@*&!"%/Z)U<
XM!*K7>5 4+#A,@:"@&;(!&"%FZ!F& 46!8NC7X'8B6=WWB[@0T1XW2!#:@;K)
XM,'C'^7W('^!'_PF"S)WI1^L0?E)>SW/B[3H>&PA$W<T -P#CAX!9@=D=\A%"
XM'!<.&&=1^FE@FU]YU_FA.YI?J:+>B7XAV(U''=)^)5CJ-S+0=]D8Y^3ZY7?\
XMSGX'W_UW=QCNI_#H?CB5&M<&AH*!(? GZ)5F.E.A)Z0U(ZYA1$C\P8:EH#*8
XM!RIIJHYMN.1Q>#M6\X>[\7]G6%HHH)!XE4_UUP-U?W+8]X=?47<0XHI7]/!A
XM-%[4HQVN@2+@>TA;B(.M84[H$RIQLF'?]Y;]?1I>X+?\,5:'E$<5!!9^/YFH
XM)PZ^:XY@;S4 XG0(EEA!F# JCLJN-U.%4MB8K))&E7^:X B(2L52-4"(6!2F
XM.34 B>@?SH8G8FV8(MZ PA%5NYB.=:;S@$RHA((E5T ]2(C-P, (P]9"[;
XM'U(>G %H $K@ E%/$X$LP@7% #YB[%/&A8>9(+.WX^EO :&2"!6F.6<A?X@?
XM/HDFHJ*6Y F(RE\4-ZZUB%!>5J4E3FF(H!83$#Y/8*(88[*Y:%5@HH(&."1K
XMP)Q0!U0'+0'7E=#=!1>)4"!"R %Z0N5GON&(M) M1">><;N?>SC*]2H'H9ZX
XM%3(0#^&B5R(:>1<>@ @H38D#8OVW+I%KLA5O>(HQBA9< 7,04D4%*GZBUS
XM.6*[(3%) 4U#FC@40%D8P:9P[Z&*<Z*0R"'R?JKA9A5+X0"R8D;H)*Y<\1_$
XM1BA:;8;BKX@H&HB'8+'H*'Z+8%OMD@. <,RBJ];\X"<@ %) ,94'OH;=MBFZ
XM"I#?37 "# 6FB!W@-. ](<%KTQ%\!"&!&/ 0L &&04:@:;@9(("[<%I@BS05
XM^4?@]7GGWY&8YN0 X2))."[.7.6B$Y?\H8N<'KEW3ER)B:(I]H\1BX;<N_@Q
XMQHLMT$ 4"9X,?LR]L#UD*DO [<$0K $K@0L M -*(%ZU#1L!$]!5) 44#(!
XMHQO NW ?KU=QDP4.?":&9@#HN(DX .T2)R)7&6-]1R3:B4;B0>42AHPNX<AX
XM"OZ',=$"AS+F8X<BR\@NAGH(H@X@#L( -&.\EY#=C*Z#OGBW309FP(' '% %
XMF@)IN**( 8D-BK F-C"?HMY8*KH'48%"4#&F,=Y/FC 4&(Y<$ RP8Y!Q72/K
XMMS&:?Q?=;F<3DHT^80Q@-F)\1UX3-RCRBH5BRM@V4G'"XLL8(\:--F'=Z+NM
XM0,K<@64O)@'Y(G, 580$5TW3)9(8!/QB<2,4X!^_0QW *J@&'""4,#$ZC&<
XM"' @+(X\P= 8!+ !4DYB8&+<5?X5Q@@D:HZM(I<5-GZ(0B'H6 [F47YB+D@N
XMHHTHXOS7*^*&JV.P6 @*@3!C868L"H6RXR-X ]"+MB/M80:($4]#PLA&! 5#
XMP5VES- $;=UQD2\NC8J$C+ T7AW.A$R80!(,"F6-L<".!"8B T;HT\5N9H
XMIX5RKF+O)S8VA>+C6*CDV(J (JY(&\I_>-GZ6"6RB&YCZRBEO8Z-XJ,D#LX
XM]:.-F .,B<R;"& 1U#;[(U2@'01.HF(#XIXUC,CC7E4>2 =>4GKD2?B/%&,9
XM8/?(4 0D6M(&4 4D1/1(-[@.F./VN$'F>-RBCP8&B(,T0 CY%KHY).3Y""4*
XMB@$BZK@V3FCM(Y88Y0V+,*2[*$.FA+K5?]7%944P ,M&)O(5?\(;D"DJD4B!
XM'- XO@$@P(J@&0",?6-7 +D ==""(!!IHH:8_>8&GJ1XJ -($;NA7WB"DAG
XM]8=F9*#XL)F,Y^*FQS:JBRWD^P@C<FTQY!E62=:0C!QP5#N::<TB<H@O9AI#
XM 4<C)QP(9,5%$!4HD6_>*_$40 F86 N@1+8 [06(@!)(D,ICFG9U]"!YP)F8
XM)CZ291SWV!YZCQ[B&Y42W@"7)%U81I*,Z*.4J#ZFCJ.DE<@ZFI*+8AP9,\Z1
XM/N$-P$IF134 _@A+VHLT00-R+2R1P\MD("I>$:1A4Q 53 77CV7 '* E$R,2
XM$"H.!4L#J:@>38U0PA1I8OQ$;T >@!%<CMJC<H6!<9#4Y*OH,?J%V>1?6#XF
XM@YVD"1DEHI"MFPJY(DYQ[J,$-\AE:,\?,Y42X@#KY X!B^&-(@!0("J2",#!
XM4* BR 2+Y+50S,@)K<))(4\^#9?,03 9.([ 2,9GSF,* $C60?LE)A8]\$&
XM0),:Y$3)17:0W6)5( Z"C/-A'U0?&FQ#&R>Y)Y:#)>$V>3:>D9_DZ?A-KI%^
XM7!O9,@9F6ULA)S_*C&!E2SG&X !Z9 Y95*II"%=;]U/2DT(E10$"E%T[94ZY
XM5 H&ZE&IN"'<E9E!7HF6[)4@ 52I14J57R,;:%%^D!X.#'!):D6C8\EH5J:0
XMX"0;24J.DR;E2^?\K7OS8YJC%<F58N*RF#^2(GUE2D!4OGG)C4."$MP!0<$G
XM,3$5CV+ 10 N) 17XU3!D3B6$B6.%UEVB).EW=<9C@B"8[@H&B*7I:%823KF
XMBB(=']CM013+Y6<8[JF(Z>(^9NZ]C5MBW%A="H[OVD W W!P,.44T!G."8+C
XMU !1GDS%GNXA.7R71<&VV$$"?%B=)SAF%7RH5'))"C8CGZ%45\KTEU8=*XC5
XMN8+:&H0 8/Z'LR!85PN*=9R)V'%@QGQH72^8S"1:R&!#\Z)G)=RT?7.9B"
XMXR[(#+:#@F.,4Q0D-/UE?TD-,H8=IEI3$Z:8O@V)V6&:F/NAU<7BA)@HH6E)
XM$QIV<-1-:'J5F+$4/E3>P)B"84_HX0"%.&:/.13NF"^FD?ECLIA!IG?RD[AV
XM(8F+61K^)$MF<VD91EMX %2 CC@3/]^\E67*=E&FK=5?@@A?YI89C*0V0.94
XMJ-Y8'BO"EO!D5CEL9B/RDTB9#4&<Z6:&)%5F0Q 3LCBQ5$)(9]Y1>2:H=9RD
XMF=O)C0GT$9H"BH[)89:&B":\(CJBF30FQU7V=8:NG2(H&OZ9DZ;J!6E:F=3-
XM.!@9;5^=(YZ87&:5Q%#!!H4Y>$-"B9EB;I069H>I64(F[)P,1G4(CM<EE7BU
XM#7[D)!QIBUE_P4X>N?W98>-EOV0P7'>R9 $#^9V7GV%S".W8:9_?I2(=;HBA
XM2G68WH5^XDY[!VUZ">>A"8:"?8?/X:BB%KPJ-8>LR5RR 328CH#OD(<ZF!K
XM@P4\M=_1$H0%,D08',0>8EA=9#;7:%(\*$(#,K Q>)[5?9AJOIA,9A7&:HZ;
XMS^4):2ZJD:*D9\G\N9!MI3#W2 6<TI^I1_WQ7[QFA=CTM'C470[0N_5AXY_7
XMN#D6B=6DMVAC1GL\IHVIQ%V8'B4:N2N>E0EG6OE9EI3H7CF)2LJ1JF2/"2?:
XMD0*@.]D 7@]9P#Q9$Y@T9, /F2F*BGO.@? B)(U"(S9&2#(%<T#_N%O@E$IE
XM1H!.:0AYVU! (L M@-,: %Q&DM/D)&EO&IDD9Y)I6I*/FF32UFJ6AJ_FRLE9
XMHI7+G5K)7<:/&QH<]:C@G)6/F A3WI3O!F\!,;5Y&-.<*2H*!R_!+JD>"989
XM@3(S1M@22B3O^!(\) CQ&1>AAL0TWI)*6:0CZ5P^7&"C2&GY1:2A)U3)IZY
XMZ*&<V%XZI^V!D@CG399=XB^%BA!PJKP++@,A&%KJ?W!C*JD#_"1RI0TPP[V3
XMM$>;!UA19 *#Z45E2F6#!%7&D>4MNI]\65%ZD A(&E!F_B2<)\.V?'J> R?H
XMZ1*5CNH<Z<ERFIZJX\OI1BJ*NJ9;*=,IGUHF[6DO#72V)TRIDT D+@E%8I',
XM)$)!3<*10!5;I\<I2=)]7J2=:68B"\WGCJ"4W)_86ME9\9V==68W"5+6<R+E
XMZ6DH17 Q9_?I<!8P]J?X"0 R695/^0FFE6K:TZ1HPL5ZVA.9Q@6Z4U[@ OA/
XMT6D!U9!X>4J6R*<UF>;DGS3.R>EJ"J 'Y_6IEV6?W- 3\W::DV\E.LE ,(B-
XM69/ =Z&;,R:GV== "5C1$K$"$ Q#8Q'J6;PV*0 /2I_<FT"H<.BG%#QFS&]X
XMAV%_WM^%F/@!.T99OY0S.@'PYB C_FTJR-&J2%%ZG3[;O1D#H* 09Z*I@J*=
XM+*CUN7:VG&UG&,9P6G$IY</I@Q::.*COIH.&-$KHH!E+-:$"EA!*A!JA1^@.
XMBH/98'QFF@.(UF%4 !3J&U:<0$\<9B&ZB(SH]9>'18A6J)? <4Z'QB<9NMME
XMFDT=J9G**50HF8'988*B:V@ 2E:&;K FMP>U98:T)B H[K&/ZY+KF8"ZCC/G
XM.9D@6IJ=820E20F K^3."3CTHI4@]0:+QI<A(.]'7W:"2!WW @J"CVF.3)%0
XM.'5^@8,92TFCI@TJJ)NDH";2*NAE#9@-4H%I85ZCW:@LN/%=*!W?+5AA IKE
XM*!"SO)0F$N9:%ZNA?/PE.1H@Q74L'Q*VCG*C]Z@[*O/-"S4F X&-;@H)X4"J
XM;UFCT6@WRH\>2184F=.-JIB&W4/:8HJ9]BA#*I$V=FAF19I0")K?25OAH@@3
XM905%FI &2""IJO4-DJ17IFO#=^4YKY)(*I!VHY&2.HB2-IF=S9'DVGDV)*9&
XM:MH\I!C70KJ1?IJY7<=(61X3!BG)J9.F$CZI:?-Y'J407^B9\>F!;FA(V5FZ
XMG+CFZVD(/J(]T)UB@%6B8\RD.&PV?L5FLD,GI#D@@)&44"B;W>8$9NT\FXC,
XM=CBJ>#O78;5)^@6)B0RVJ1O&=R?8?->6EIN2WNN7@YF'=REZV(4NF^OA&$I_
XM9G,7J7R8;R8IJ!R_>9KYFP8F4VJ0^GPGIV2:=E)#/> *>;3,H+EH#9H@SJ1]
XM31Z:4CF(*%XDJN)=G+_F9$')::(9HHW'==*;5*4769(:I2,I0UJ25J:U*69S
XMF<I$<H(M=YN:2+5F 9I]:I?S%6?J?;8N)2G'YL# E&/%,,'3E8$'Q&_JV72B
XMAZG/%BG1IB]I@!23+J6Y:3;:AHINTN6+%9,"I[(H=CF<XB^VZ*<G<QZG^]5K
XMDR*=:F453/D_N*?%Z/.A0)A(U*F?Y^QY-M@I4=J-\J3^YRL8F7:GJ<1NJC;"
XMH4S,&B.#SJ'!7!U:(GDVHFEO1<90G ^B:9K]9:( &85HH5:A3L\6.I@2,C9>
X'&*HM)J-8#Z'!
X
Xend
END_OF_FILE
if test 22923 -ne `wc -c <'contool_ui.c.Z.uu'`; then
echo shar: \"'contool_ui.c.Z.uu'\" unpacked with wrong size!
fi
# end of 'contool_ui.c.Z.uu'
fi
if test -f 'lex.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'lex.c'\"
else
echo shar: Extracting \"'lex.c'\" \(6716 characters\)
sed "s/^X//" >'lex.c' <<'END_OF_FILE'
X/************************************************************************/
X/* Copyright 1987-1991 by Chuck Musciano and Harris Corporation */
X/* */
X/* Full ownership of this software, and all rights pertaining to */
X/* the for-profit distribution of this software, are retained by */
X/* Chuck Musciano and Harris Corporation. You are permitted to */
X/* use this software without fee. This software is provided "as */
X/* is" without express or implied warranty. You may redistribute */
X/* this software, provided that this copyright notice is retained, */
X/* and that the software is not distributed for profit. If you */
X/* wish to use this software in a profit-making venture, you must */
X/* first license this code and its underlying technology from */
X/* Harris Corporation. */
X/* */
X/* Bottom line: you can have this software, you can use it, you */
X/* can give it away. You just can't sell any or all parts of it */
X/* without prior permission from Harris Corporation. */
X/************************************************************************/
X
X#define RETURN(x) return(last_token = (x))
X
X#define FIRST_KEYWORD ARCHIVE
X#define LAST_KEYWORD YES
X#define NUM_KEYWORDS (LAST_KEYWORD - FIRST_KEYWORD + 1)
X
XPRIVATE FILE *f = NULL;
XPRIVATE int last_token = -1;
XPRIVATE char buf[1024];
X
XPRIVATE struct {char *name;
X int value;
X } token[] = {{"archive", ARCHIVE},
X {"beep", BEEP},
X {"check_icon", CHECK_ICON},
X {"command", COMMAND},
X {"comment", COMMENT},
X {"defaults", DEFAULTS},
X {"delete", DELETE},
X {"display", DISPLAY},
X {"filters", FILTERS},
X {"flash", FLASH},
X {"flash_icon", FLASH_ICON},
X {"good_icon", GOOD_ICON},
X {"ignore", IGNORE},
X {"log", LOG},
X {"log_before_filtering", LOG_BEFORE_FILTERING},
X {"log_file", LOG_FILE},
X {"match", MATCH},
X {"no" , NO},
X {"noflash", NOFLASH},
X {"noopen", NOOPEN},
X {"nostamp", NOSTAMP},
X {"open", OPEN},
X {"print", PRINT},
X {"quiet", QUIET},
X {"save", SAVE},
X {"stamp", STAMP},
X {"timeout", TIMEOUT},
X {"timestamp", TIMESTAMP},
X {"to", TO},
X {"version", VERSION},
X {"yes", YES}};
X
XPRIVATE struct {char first;
X char next;
X int name;
X } punc[] = {{'{', '\0', LBRACE},
X {'}', '\0', RBRACE},
X {'\0', '\0', -1}};
X
X/************************************************************************/
XEXPORT int lex_init(path)
X
Xchar *path;
X
X{
X if (f)
X fclose(f);
X if (f = fopen(path, "r")) {
X curr_file = strsave(path);
X line_count = 1;
X ungetc = -1;
X parse_errors_occured = 0;
X return(TRUE);
X }
X else
X return(FALSE);
X}
X
X/************************************************************************/
XPRIVATE char getch()
X
X{ register char c;
X static int first = TRUE;
X
X if (ungetc != -1)
X c = ungetc, ungetc = -1;
X else {
X c = getc(f);
X if (c == '\n')
X line_count++;
X }
X return(c);
X}
X
X/************************************************************************/
XPRIVATE int is_keyword(s)
X
Xchar *s;
X
X{ register int cmp, high, low, pos;
X
X for (low = 0, high = NUM_KEYWORDS - 1; low <= high; )
X if ((cmp = strcmp(s, token[pos = (high - low) / 2 + low].name)) == 0)
X return(token[pos].value);
X else if (cmp < 0)
X high = pos - 1;
X else
X low = pos + 1;
X return(NULL);
X}
X
X/************************************************************************/
XPRIVATE int yylex()
X
X{ register char c, c1, *p;
X register int i, j, val;
X char *index();
X double atof();
X
X c = getch();
X while (isspace(c))
X c = getch();
X if (isalpha(c)) {
X p = buf;
X *p++ = c;
X while (isalnum(c = getch()) || c == '_')
X *p++ = c;
X ungetc = c;
X *p = '\0';
X for (p = buf; *p; p++)
X if (isupper(*p))
X *p = tolower(*p);
X if (i = is_keyword(buf))
X RETURN(i);
X else {
X yyerror("unexpected keyword: %s", buf);
X fclose(f);
X f = NULL;
X RETURN(EOF);
X }
X }
X else if (c == '"' || c == '\'') {
X for (p = buf; TRUE; p++)
X if ((*p = getch()) == c) {
X if ((c1 = getch()) != c) {
X ungetc = c1;
X break;
X }
X }
X else if (*p == '\\' && filter_version < 310)
X *p = getch();
X else if (*p == '\n' || *p == '\r') {
X yyerror("Newline in string not allowed");
X break;
X }
X *p = '\0';
X yylval.cpval = strsave(buf);
X RETURN(STRING);
X }
X else if (isdigit(c)) {
X p = buf;
X *p++ = c;
X while (isdigit(c = getch()))
X *p++ = c;
X *p = '\0';
X ungetc = c;
X yylval.ival = atoi(buf);
X RETURN(INTEGER);
X }
X else if (c == '#') {
X while ((c = getch()) != '\n' && c != EOF)
X ;
X if (c == EOF) {
X fclose(f);
X f = NULL;
X RETURN(EOF);
X }
X else
X RETURN(yylex());
X }
X else if (c == EOF) {
X fclose(f);
X f = NULL;
X RETURN(EOF);
X }
X else {
X for (i = 0; punc[i].first; i++)
X if (c == punc[i].first) {
X for (c1 = getch(), j = 1; punc[i + j].first == c; j++)
X if (c1 == punc[i + j].next)
X RETURN(punc[i + j].name);
X ungetc = c1;
X RETURN(punc[i].name);
X }
X yyerror("Invalid character in source file: %c (0x%02x)", c, c);
X }
X RETURN(yylex());
X}
X
X/************************************************************************/
XPRIVATE char *get_last_token()
X
X{ int i;
X static char msg[512];
X
X if (last_token == INTEGER || last_token == STRING)
X sprintf(msg, "\"%s\"", buf);
X else if (last_token >= LBRACE && last_token <= RBRACE) {
X for (i = 0; punc[i].first; i++)
X if (punc[i].name == last_token) {
X sprintf(msg, "\"%c\"", punc[i].first);
X if (punc[i].next)
X sprintf(msg + 2, "%c\"", punc[i].next);
X break;
X }
X if (punc[i].first == '\0')
X sprintf(msg, "!!Geez! Some punctuation, I don't know!!");
X }
X else if (last_token >= FIRST_KEYWORD && last_token <= LAST_KEYWORD)
X sprintf(msg, "\"%s\"", token[last_token - FIRST_KEYWORD].name);
X else if (last_token == EOF)
X sprintf(msg, "End Of File");
X else
X sprintf(msg, "!!Geez! Some keyword, I don't know!!");
X return(msg);
X}
END_OF_FILE
if test 6716 -ne `wc -c <'lex.c'`; then
echo shar: \"'lex.c'\" unpacked with wrong size!
fi
# end of 'lex.c'
fi
echo shar: End of archive 3 \(of 5\).
cp /dev/null ark3isdone
MISSING=""
for I in 1 2 3 4 5 ; do
if test ! -f ark${I}isdone ; then
MISSING="${MISSING} ${I}"
fi
done
if test "${MISSING}" = "" ; then
echo You have unpacked all 5 archives.
rm -f ark[1-9]isdone
else
echo You still need to unpack the following archives:
echo " " ${MISSING}
fi
## End of shell archive.
exit 0
--
--
Molecular Simulations, Inc. mail: dcmartin@msi.com
796 N. Pastoria Avenue uucp: uunet!dcmartin
Sunnyvale, California 94086 at&t: 408/522-9236