home *** CD-ROM | disk | FTP | other *** search
Text File | 1992-03-05 | 55.0 KB | 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
-