home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / x / volume16 / contool-3.2 / part03 < prev    next >
Text File  |  1992-03-05  |  56KB  |  1,128 lines

  1. Newsgroups: comp.sources.x
  2. Path: uunet!think.com!mips!msi!dcmartin
  3. From: chuck@trantor.harris-atd.com (Chuck Musciano)
  4. Subject: v16i088: Contool 3.2, Part03/05
  5. Message-ID: <1992Mar5.185125.2290@msi.com>
  6. Originator: dcmartin@fascet
  7. Sender: dcmartin@msi.com (David C. Martin - Moderator)
  8. Organization: Molecular Simulations, Inc.
  9. References: <csx-16i086-contool-3.2@uunet.UU.NET>
  10. Date: Thu, 5 Mar 1992 18:51:25 GMT
  11. Approved: dcmartin@msi.com
  12.  
  13. Submitted-by: chuck@trantor.harris-atd.com (Chuck Musciano)
  14. Posting-number: Volume 16, Issue 88
  15. Archive-name: contool-3.2/part03
  16.  
  17. # This is a shell archive.  Remove anything before this line, then feed it
  18. # into a shell via "sh file" or similar.  To overwrite existing files,
  19. # type "sh file -c".
  20. # The tool that generated this appeared in the comp.sources.unix newsgroup;
  21. # send mail to comp-sources-unix@uunet.uu.net if you want that tool.
  22. # If this archive is complete, you will see the following message at the end:
  23. #        "End of archive 3 (of 5)."
  24. # Contents:  contool.man contool_ui.c.Z.uu lex.c
  25. # Wrapped by dcmartin@fascet on Sat Feb 22 10:11:09 1992
  26. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  27. if test -f 'contool.man' -a "${1}" != "-c" ; then 
  28.   echo shar: Will not clobber existing file \"'contool.man'\"
  29. else
  30. echo shar: Extracting \"'contool.man'\" \(22843 characters\)
  31. sed "s/^X//" >'contool.man' <<'END_OF_FILE'
  32. X.TH CONTOOL 1 "31 July 1991"
  33. X.SH NAME
  34. Xcontool \- capture and display console output
  35. X.SH SYNOPSIS
  36. 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]
  37. X.SH DESCRIPTION
  38. X.LP
  39. X\f2Contool\fP captures and displays any messages sent to the system console.
  40. XEach message is timestamped as it arrives.  The messages are displayed in a
  41. Xscrolling text window, so the user can scroll through old messages.
  42. X.LP
  43. XWhen a message arrives, \f3contool\fP will beep and, if closed, begin
  44. Xblinking its icon until the user opens the tool.  This behavior can be changed
  45. Xby modifying the default contool properties.
  46. X.LP
  47. X\f2Contool\fP must be run under either Open Windows or X Windows.
  48. XIt accepts the standard Open Windows command line options.
  49. X.SH OPTIONS
  50. X.IP "\fB\\(hyc\fP \fIfile\fP"
  51. Xspecifies an alternate configuration file.  \f2Contool\fP normally
  52. Xreads its configuration information from ~/.contool.
  53. X.IP "\fB\\(hyf\fP"
  54. Xforces \f2contool\fP to fork itself into the background after 
  55. Xacquiring the console.  This option is most useful when starting
  56. X\f2contool\fP from your ~/.xinitrc or ~/.openwin-init file, where
  57. Xmultiple tools are started in the background.  Even if \f2contool\fP is
  58. Xstarted first, other tools may begin running and produce error
  59. Xmessages before \f2contool\fP can acquire the console.  By using the
  60. X\fB-f\fP option you can start \f2contool\fP in the foreground,
  61. Xpreventing other tools from starting until \f2contool\fP has acquired
  62. Xthe console.
  63. X.IP "\fB\\(hyi\fP \fIinput\fP"
  64. Xspecifies an alternate input source.  \f2Contool\fP normally reads
  65. Xmessages from the system console.  If \fB-i\fP is used, \f2contool\fP
  66. Xwill read messages from the specified \fIinput\fP.  \fIInput\fP must
  67. Xbe the pathname of a either a FIFO, or a character special device like
  68. X/dev/tty.  \fIInput\fP can also be given as \*(lq-\*(rq, indicating
  69. Xthat contool should read messages from its standard input.
  70. X.IP "\fB\\(hyl\fP"
  71. Xenables logging when \f2contool\fP starts.  Initially, \f2contool\fP
  72. Xdoes not log messages to a file.  This option allows logging to be started
  73. Xautomatically.  Logging behavior can be enabled and disabled via the
  74. X\*(lqFile\*(rq menu (see below).
  75. X.IP "\fB\\(hyL\fP \fIlogfile\fP"
  76. Xspecifies an alternate log file.  The value of \fIlogfile\fP overrides
  77. Xany log file stored in the configuration file.  The \fB-l\fP and \fB-L\fP
  78. Xoptions used together allow multiple copies of contool to be started on 
  79. Xa single machine, with each copy logging to a different file, without
  80. Xhaving to create and maintain multiple configuration files.
  81. X.IP "\fB\\(hyn\fP"
  82. Xprevents \f2contool\fP from acquiring the console when it starts.  This
  83. Xis most useful when testing a new version of contool, so that the test
  84. Xcopy does not interfere with any previously running console tool.
  85. X.SH USER INTERFACE
  86. X.LP
  87. X\f2Contool\fP presents the user with a control panel containing three
  88. Xbuttons and a scrolling text window.  Console messages appear in the
  89. Xtext window; \f2contool\fP's behavior is managed with the \fBFile\fP,
  90. X\fBView\fP, and \fBEdit\fP buttons.  These buttons have several menu choices
  91. Xassociated with them:
  92. X.IP "\fBFile: Load Configuration...\fP"
  93. Xbrings up the \fBLoad Configuration\fP dialog box.  This dialog contains
  94. Xa non-exclusive setting, a text field, and a single \fBLoad\fP button.
  95. XThe setting has two entries: \*(lqTool Properties\*(rq and \*(lqFilter
  96. XDefinitions\*(rq.  The user can choose which of these items to load from
  97. Xthe configuration file.  The default action is to load both properties and
  98. Xfilters from the file.
  99. X.IP ""
  100. XThe text field contains the path of the configuration file.  By default,
  101. Xthis is either ~/.contool, or the value of the \fB-c\fP option (above).
  102. XThis text field provides file name completion, like \f2csh\fP(1), by typing
  103. Xa space or carriage return.
  104. X.IP ""
  105. XAfter determining which components to be read from the file, and the name of
  106. Xthe file, clicking on the \fBLoad\fP button will cause the desired elements
  107. Xto be read from the file.  If filters are loaded, any existing filters are
  108. Xdiscarded.  If \f2contool\fP was in the middle of filtering a multi-line message,
  109. Xthat filtering action is terminated.
  110. X.IP ""
  111. X\f2Contool\fP can read files created by all previous versions of
  112. X\f2contool\fP.  Files written by \f2contool\fP cannot be read by any previous
  113. Xversion.
  114. X.IP "\fBFile: Save Configuration...\fP"
  115. Xis analogous to the \fBLoad Configuration\fP operation, bringing up a dialog
  116. Xbox containing a non-exclusive setting, a text field, and a \fBSave\fP
  117. Xbutton.  In the same manner as the \fBLoad Configuration\fP dialog, the
  118. Xuser indiactes which items he desires to save, specifies the destination
  119. Xfile, and clicks on the \fBSave\fP button to save the information.
  120. X.IP ""
  121. X\f2Contool\fP writes the data in a format incompatible with previous
  122. Xversions (release 3.0 or earlier) of the tool.
  123. X.IP "\fBFile: Start Logging\fP"
  124. Xstarts logging console messages to the log file specified by the tool
  125. Xproperties, or the \fB-L\fP option (above).  The tool properties also
  126. Xcontains a switch which determines whether messages are written before
  127. Xor after filtering occurs.  If before, all messages are logged.  If after,
  128. Xa message is written to the log if it does not match a filter and the default
  129. Xaction in the tool properties has \*(lqLog message\*(rq enabled; or if it
  130. Xmatches a filter with both the \*(lqSave\*(rq and \*(lqLog message\*(rq 
  131. Xattributes set.
  132. X.IP ""
  133. XThe log file is written in such a manner that multiple invocations of
  134. X\f2contool\fP can write to the same log file without conflict.  New 
  135. Xmessages are always appended to the log file.  Log files can be forcibly
  136. Xflushed with a SIGHUP; see SIGNALS, below.
  137. X.IP "\fBFile: Stop Logging\fP"
  138. Xstops the logging process.
  139. X.IP "\fBFile: Print\fP"
  140. Xuses the \*(lqPrint Filter\*(rq specified in the tool properties to 
  141. Xprint the contents of the console.  Only messages saved in the console
  142. Xcan be printed.
  143. X.IP "\fBFile: About Contool...\fP"
  144. Xprovides a brief history of \f2contool\fP, and allows users to send
  145. Xe-mail to the contool developer.
  146. X.IP "\fBView: Archive...\fP"
  147. Xopens the message archive dialog box.  This dialog box displays a 
  148. Xscrolling window containing all messages archived from the main 
  149. Xconsole display.  See MESSAGE ARCHIVE, below.
  150. X.IP "\fBView: Archive Messages\fP"
  151. Xmoves all the messages in the console display to the message archive.
  152. XThis is a handy way to remove already viewed messages from the console
  153. Xwithout losing them for later review.  By periodically moving 
  154. Xmessages to the archive, only the most recent messages will be
  155. Xvisible in the main console display.  Messages can be archived automatically
  156. Xas well; see TOOL PROPERTIES, below.
  157. X.IP "\fBView: Become Console\fP"
  158. Xensures that \f2contool\fP has the system console attribute.  SunOS
  159. Xallows exactly one process in the system to own the console.  If some
  160. Xother process takes control of the console, the user can reassign the
  161. Xconsole attribute to \f2contool\fP using this menu selection.
  162. X.IP "\fBView: Clear Messages\fP"
  163. Xclears all messages from the console text display.
  164. X.IP "\fBView: Reset Filter\fP"
  165. Xinterrupts filtering of a multi-line filter.  If the user incorrectly
  166. Xspecifies the end pattern of a multi-line filter, \f2contool\fP may
  167. Xnever stop processing the filter, causing all subsequent console
  168. Xmessages to be incorrectly handled.  This selection resets the effect
  169. Xof any multi-line filter that may be in effect.
  170. X.IP ""
  171. XWhen processing a multi-line filter, \f2contool\fP displays the
  172. Xstarting filter pattern in the left window footer.  If the left footer
  173. Xis blank, \f2contool\fP is not processing a multi-line filter.
  174. X.IP "\fBEdit: Filters...\fP"
  175. Xbrings up the \fBFilters\fP dialog box.  See EDITING FILTERS, below.
  176. X.IP "\fBEdit: Properties...\fP"
  177. Xbrings up the \fBTool Properties\fP dialog box.  See TOOL PROPERTIES, below.
  178. X.SH EDITING FILTERS
  179. XThe \fBFilters\fP dialog presents a scrolling list of filters and a variety of
  180. Xdevices used to modify the current filter set.  The items in this dialog are:
  181. X.IP "\fBFilters\fP"
  182. XThis scrolling list shows the starting pattern of each filter currently used by
  183. X\f2contool\fP.  The pattern text is preceded by a small glyph indicating
  184. Xwhether the filter is a single-line or multi-line filter.
  185. X.IP ""
  186. XIf exactly one item in the list is selected, the properties of that filter
  187. Xwill be displayed in the dialog box.  If no, or more than one, filter is
  188. Xselected, the remainder of the dialog box is grayed out.
  189. X.IP "\fBInsert\fP"
  190. XThis button inserts a new blank filter into the scrolling list, allowing
  191. Xthe user to add new filters to the filter set.  A menu attached to
  192. Xthe button allows the user to select the insert point: at the top of the
  193. Xlist, before the current selection, after the current selection, or at
  194. Xthe bottom of the list.  The \*(lqbefore\*(rq and \*(lqafter\*(rq
  195. Xchoices are only enabled if exactly one filter in the list is selected.
  196. XThe default position is the bottom of the list.
  197. X.IP "\fBEdit\fP"
  198. XThis button edits the currently selected filters in the list.  The
  199. Xmenu attached to this button has four choices: \fBCut\fP, \fBCopy\fP, \fBPaste\fP,
  200. Xand \fBDelete\fP.
  201. X.IP ""
  202. XThe \fBCut\fP operation removes the selected filters from the list
  203. Xand places them on the clipboard, where they can subsequently be pasted
  204. Xback into the list.
  205. X.IP ""
  206. XThe \fBCopy\fP operation copies the selected filters to the clipboard.
  207. XThe filters are not removed from the list.  The copied filters can subsequently
  208. Xbe pasted back into the list.
  209. X.IP ""
  210. XThe \fBPaste\fP operation copies filters from the clipboard into the list.
  211. XThis selection has a menu which specifies the paste position: at the top of the
  212. Xlist, before the current selection, after the current selection, or at
  213. Xthe bottom of the list.  The \*(lqbefore\*(rq and \*(lqafter\*(rq
  214. Xchoices are only enabled if exactly one filter in the list is selected.
  215. XThe default position is the bottom of the list.
  216. X.IP ""
  217. XThe \fBDelete\fP operation removes the selected filters from the list
  218. Xwithout placing them on the clipboard.  Once deleted, filters cannot
  219. Xbe recovered with a paste operation.
  220. X.IP ""
  221. XThe \fBCut\fP, \fBCopy\fP, and \fBDelete\fP selections are only presented
  222. Xif one or more filters in the list are selected.  The \fBPaste\fP selection
  223. Xis only available after a \fBCut\fP or \fBCopy\fP operation.
  224. X.IP "\fBUpdate\fP"
  225. XThis button updates the currently selected filter using the values 
  226. Xpresented in the remainder of the dialog box.  This button is only
  227. Xaccessible if exactly one filter in the list is selected.
  228. X.IP ""
  229. X\fBUpdate\fP is used to modify an existing filter.  When just that filter
  230. Xis selected, its attributes are placed into the other dialog elements
  231. Xdescribed below.  After adjusting the filter attributes, the user clicks
  232. Xthe \fBUpdate\fP button to apply the changes to the currently selected
  233. Xfilter.
  234. X.IP ""
  235. XIn a similar manner, \fBUpdate\fP is used to apply attributes to a new,
  236. Xblank filter placed in the list via the \fBInsert\fP button.
  237. X.IP "\fBType\fP"
  238. XThe \fBType\fP toggle indicates whether a filter will match just a single
  239. Xline message, or will match a multiple line message.  When \*(lqSingle
  240. Xline filter\*(rq is chosen, the \fBEnd pattern\fP item is disabled,
  241. Xand the user must specify the pattern which will match a single line of
  242. Xtext written to the console.  When \*(lqMulti-line filter\*(rq is
  243. Xselected, the \fBEnd pattern\fP item is enabled, and the user needs to specify
  244. Xboth a starting and an ending pattern.  All text following a line which
  245. Xmatches the starting pattern, up to and including a line which matches the
  246. Xending pattern, is considered to be part of the filtered message.
  247. X.IP "\fBPattern\fP"
  248. XThis text field specifies the regular expression which matches the first
  249. X(and, in the case of single line filters, the only) line of text in the
  250. Xfiltered message.  Any valid regular expression is permitted.  Users that
  251. Xare trying to match some text exactly should be aware that regular
  252. Xexpressions can match text anywhere in a line, and that the expression
  253. Xshould be anchored to the start (or end) of the line by using the "^"
  254. X(or "$") metacharacters.  For more information on regular expressions,
  255. Xsee \f2ed\fP(1).
  256. X.IP ""
  257. XAs a special extension to regular expressions, \f2contool\fP recognizes
  258. Xa backslash (\*(lq\\\*(rq) followed by one or more octal digits as a single
  259. Xcharacter in the expression.  This allows non-printing characters, such as
  260. Xcontrol characters, to be inserted in the text pattern.  If a backslash is
  261. Xfollowed by any other character, it is placed in the pattern verbatim.  Thus,
  262. Xto create an expression which matches a control-G followed by a backslash, the
  263. Xpattern \*(lq\\007\\\*(rq would suffice.
  264. X.IP "\fBEnd pattern\fP"
  265. XIf the \fBType\fP is set to \*(lqMulti-line filter\*(rq, this field
  266. Xmust contain the regular expression which matches the last line of the
  267. Xblock of text handled by this filter.
  268. X.IP "\fBTimeout\fP"
  269. XIf the \fBType\fP is set to \*(lqMulti-line filter\*(rq, this field
  270. Xsets a limit on how long \f2contool\fP will process the filter.  This
  271. Xprevents filters with erroneous end patterns from absorbing all console
  272. Xoutput once they begin filtering.  The default value, 0, indicates that
  273. Xno timeout is in effect.
  274. X.IP "\fBComment\fP"
  275. XThis text field contains any comments regarding the filter the user
  276. Xwishes to record.  Since some filters can be rather arcane, it is suggested
  277. Xthat users comment their filters.
  278. X.IP "\fBWhen matched\fP"
  279. XThis exclusive setting dictates the behavior of \f2contool\fP when a
  280. Xfilter is matched.  If \*(lqSave message\*(rq is chosen, the message
  281. Xis copied into the console display, and various actions can be taken.
  282. XIf \*(lqIgnore message\*(rq is selected, the filter text is discarded
  283. Xand no further actions are taken by \f2contool\fP.
  284. X.IP "\fBWhen saved\fP"
  285. XIf \fBWhen matched\fP is set to \*(lqSave message\*(rq, this non-exclusive
  286. Xchoice item will be enabled, allowing the user to specify what contool
  287. Xshould do with this message.
  288. X.IP ""
  289. XThe \*(lqBeep\*(rq choice causes the terminal bell to be sounded.  If
  290. Xselected, the beep counter to the right of this item is enabled, allowing
  291. Xthe user to choose anywhere from one brief beep up to 99 annoying beeps.
  292. X.IP ""
  293. XThe \*(lqCommand\*(rq choice causes a single command to be executed.
  294. XThe text field to the right of this item must contain the command to
  295. Xbe executed.  \f2Contool\fP will write the text of the message to the
  296. Xstandard input of the command.  For example, using \*(lqmail -s 'Contool
  297. Xoutput' user\*(rq as the command would mail the message text to the
  298. X\f2user\fP.
  299. X.IP ""
  300. XThe \*(lqFlash icon\*(rq choice causes the \f2contool\fP icon to flash,
  301. Xalternating between the \*(lqCheck console\*(rq and \*(lqFlash\*(rq
  302. Xicons.
  303. X.IP ""
  304. XThe \*(lqLog message\*(rq choice causes the message to be written to
  305. Xthe message log, if logging is enabled and is performed after filtering.
  306. X.IP ""
  307. XThe \*(lqOpen window\*(rq choice causes \f2contool\fP to open from
  308. Xits iconic state, and to move in front of any obscuring windows.
  309. X.IP ""
  310. XThe \*(lqTimestamp\*(rq choice causes \f2contool\fP to write a timestamp
  311. Xto the console before copying the message into the console.  The timestamp
  312. Xis written in conjunction with the timestamp resolution specified in the
  313. X\fBTool Properties\fP dialog.
  314. X.IP "\fBApply\fP"
  315. XThis button makes the filters contained in the scrolling list the current
  316. Xset of active filters.  Until this button is clicked, all changes made to
  317. Xthe filters are not used by \f2contool\fP.  After clicking \fBAccept\fP,
  318. Xthe changed filters become the current working set.
  319. X.IP ""
  320. XNote that even after clicking \fBAccept\fP, the configuration file is
  321. Xnot updated.  To make the changes permanent between invocations of
  322. X\f2contool\fP, press the \fBApply and Save\fP button, or use the \fBSave Configuration\fP
  323. Xdialog to save the changed filters.
  324. X.IP "\fBApply and Save\fP"
  325. XThis button makes the filters in the scrolling list the current set of
  326. Xactive filters and writes those filters and the tool properties to the
  327. Xcurrent configuration file.  To write the filters to a different file, or
  328. Xto write just the filters without the tool properties, press the \fBApply\fP
  329. Xbutton and use the \fBSave Configuration\fP dialog instead.
  330. X.IP "\fBReset\fP"
  331. XThis button discards any changes made to the current filter set, 
  332. Xrestoring the filter list to match the current filter set in use
  333. Xby \f2contool\fP.
  334. X.SH TOOL PROPERTIES
  335. XThe \fBTool Properties\fP dialog allows the user to change the default behavior
  336. Xof \f2contool\fP.  This includes various tool attributes, and the 
  337. Xactions taken when a message arrives which does not match any filter.
  338. XThe various properties include:
  339. X.IP "\fBDefault action\fP"
  340. XThis non-exclusive setting determines the actions taken by \f2contool\fP
  341. Xwhen a message arrives which does not match any filter.  The various
  342. Xchoices in this setting exactly correspond to the \fBWhen saved\fP
  343. Xsetting the \fBFilters\fP dialog, above.
  344. X.IP "\fBLog file\fP
  345. XThis text field contains the path of the file to which messages will
  346. Xbe logged.  This field must be filled in before logging is enabled.
  347. X.IP "\fBLog messages\fP"
  348. XIf this exclusive setting is set to \*(lqbefore filtering\*(rq, all
  349. Xmessages will be logged.  If set to \*(lqafter filtering\*(rq, 
  350. Xmessages that match filters whose \*(lqWhen matched\*(rq behavior is
  351. Xset to \*(lqIgnore message\*(rq will not be logged.
  352. X.IP "\fBArchive messages\fP"
  353. XThis exclusive setting determines how messages will be moved from the
  354. Xmain console display to the message archive.  If set to
  355. X\*(lqManually\*(rq, messages will only be archived when the user selects
  356. X\fBArchive Messages\fP from the \fBView\fP menu in the main \f2contool\fP
  357. Xwindow.  If set to \*(lqWhen closing contool\*(rq, messages are copied to
  358. Xthe archive whenever the \f2contool\fP window is closed.  This mode assumes that
  359. Xyou typically open \f2contool\fP, read all the messages, and close the window.
  360. XEach time you open the window, you'll only see messages that have arrived
  361. Xsince you last closed \f2contool\fP.
  362. X.IP ""
  363. XArchived messages can be viewed in the message archive, described below.
  364. X.IP "\fBPrint filter\fP"
  365. XThis text field specifies the command to be used to print the
  366. Xconsole.  The default is \*(lqlpr\*(rq.  Local site dependencies
  367. Xmay require a different command.
  368. X.IP "\fB\\*(lqAll is well\\*(rq icon\fP"
  369. XThis text field contains the path of a file created with \f2iconedit\fP(1).
  370. XThe contained image will be used as \f2contool\fP's regular icon image.
  371. XThis image is displayed whenever no flashing is in effect.
  372. X.IP "\fB\\*(lqCheck console\\*(rq icon\fP"
  373. XThis image is alternated with the \fB\*(lqFlash\*(rq icon\fP image whenever flashing
  374. Xis required.
  375. X.IP "\fB\\*(lqFlash\\*(rq icon\fP"
  376. XThis image is alternated with the \fB\*(lqCheck console\*(rq icon\fP image whenever flashing
  377. Xis required.  Ideally, all three icons should be the same size.
  378. X.IP "\fBTimestamp resolution\fP"
  379. XThis numeric field specifies the minimum number of seconds to wait before
  380. Xwriting a new timestamp to the console.  Messages which require timestamping
  381. Xwill only write a timestamp if this number of seconds have transpired since the
  382. Xlast timestamp.
  383. X.IP "\fBMaximum message text\fP"
  384. XThis numeric field determines the maximum size, in bytes, of messages that will
  385. Xbe stored in the console.  When writing a message to the console would exceed
  386. Xthis limit, some number of bytes, as determined by the \fBOverflow delete amount\fP,
  387. Xbelow, will be removed from the front of the console.  This feature prevents the
  388. Xconsole from becoming so large over time that it begins to swamp system resources.
  389. X.IP "\fBOverflow delete amount\fP"
  390. XWhen writing a message to the console would exceed the \fBMaximum message text\fP,
  391. Xabove, text will be deleted from the beginning of the console to make room.
  392. XThis numeric field specifies how many bytes to remove to make room.  \f2Contool\fP
  393. Xwill attempt to remove whole messages within the constraints of the console
  394. Xsize to preserve a readable console.
  395. X.IP "\fBApply\fP"
  396. XThis button makes the values in the dialog box the
  397. Xcurrent tool properties.  Until this button is clicked, all changes made to
  398. Xthe properties are not used by \f2contool\fP.  After clicking \fBAccept\fP,
  399. Xthe changed values become the current properties.
  400. X.IP ""
  401. XNote that even after clicking \fBAccept\fP, the configuration file is
  402. Xnot updated.  To make the changes permanent between invocations of
  403. X\f2contool\fP, use the \fBSave Configuration\fP dialog to save the
  404. Xchanged properties.
  405. X.IP "\fBReset\fP"
  406. XThis button discards any changes in the dialog box made to the current properties, 
  407. Xrestoring the properties to match the current properties in use
  408. Xby \f2contool\fP.
  409. X.SH MESSAGE ARCHIVE
  410. XThe \fBMessage Archive\fP dialog allows the user to view archived messages.
  411. XThe dialog presents a scrolling text window and two buttons.
  412. X.IP "\fBClear\fP"
  413. XThe \fBClear\fP button removes all the messages from the archive.  Normally, 
  414. Xthe archive
  415. Xworks like the main \f2contool\fP display: it retains a certain amount of text,
  416. Xand deletes the oldest messages as new messages arrive in excess of that
  417. Xamount.  The \fBClear\fP button circumvents this feature and explicitly
  418. Xclears the archive display.
  419. X.IP ""
  420. XThe archive window will hold ten times the amount of text specified for the
  421. Xmain console display, as determined by the \fBMaximum message text\fP
  422. Xvalue in the \fBTool Properties\fP dialog, described above.
  423. X.IP "\fBPrint\fP
  424. XThe \fBPrint\fP button prints the contents of the archive, using the 
  425. X\*(lqPrint Filter\*(rq specified in the \fBTool Properties\fP dialog.
  426. X.SH CONFIGURATION FILE FORMAT
  427. XPrevious versions of \f2contool\fP relied on the user editing the
  428. Xconfiguration file by hand.  This version manages the file automatically,
  429. Xand it is not intended that the file be edited directly by users.
  430. XSee EDITING FILTERS, above, for information on modifying the behavior
  431. Xof \f2contool\fP.
  432. X.SH SIGNALS
  433. X\f2Contool\fP will respond to certain Unix signals.  They are:
  434. X.IP "\fBSIGHUP\fP"
  435. XUpon receipt of SIGHUP, \f2contool\fP will close and reopen its log file,
  436. Xif logging is enabled.  This guarantees that logged messages are flushed
  437. Xto disk.
  438. X.IP "\fBSIGUSR1\fP"
  439. XUpon receipt of SIGUSR1, \f2contool\fP will stop blinking its icon.  This
  440. Xis a handy way to stop blinking without opening \f2contool\fP.
  441. X.SH FILES
  442. X.ta 2i
  443. X.SH SEE ALSO
  444. Xcmdtool(1), ed(1), kill(1), mkfifo(2), signal(3)
  445. X.SH AUTHOR
  446. X.LP
  447. XChuck Musciano
  448. X.br
  449. XAdvanced Technology Department
  450. X.br
  451. XHarris Corporation
  452. X.br
  453. XPO Box 37, MS 3A/1912
  454. X.br
  455. XMelbourne, FL 32902
  456. X.br
  457. X(407) 727-6131
  458. X.br
  459. XARPA: chuck@trantor.harris-atd.com
  460. X.SH BUGS
  461. X.LP
  462. X\f2Contool\fP is a view-only tool, and there is no way to type commands
  463. Xon the console.
  464. X.LP
  465. XWindow system bugs may cause unusual, but harmless, quirks in the behavior
  466. Xof \f2contool\fP.  In particular, displaying a menu in a dialog box without
  467. Xactually selecting an item from that menu will cause the dialog box to close.
  468. END_OF_FILE
  469. if test 22843 -ne `wc -c <'contool.man'`; then
  470.     echo shar: \"'contool.man'\" unpacked with wrong size!
  471. fi
  472. # end of 'contool.man'
  473. fi
  474. if test -f 'contool_ui.c.Z.uu' -a "${1}" != "-c" ; then 
  475.   echo shar: Will not clobber existing file \"'contool_ui.c.Z.uu'\"
  476. else
  477. echo shar: Extracting \"'contool_ui.c.Z.uu'\" \(22923 characters\)
  478. sed "s/^X//" >'contool_ui.c.Z.uu' <<'END_OF_FILE'
  479. Xbegin 666 contool_ui.c.Z
  480. XM'YV0+U0H *$"Q)@W;NB\></F2YTT+L: : &BRIPR<D"D28C13)@Q94"\$:.F
  481. XMS!@Z&MVDH9,F#)LT>L*P1 C"3!TW)],@G.-B8$$J:-+,J9F&3<@[88:>*>,&
  482. XMH\PR9$"(R0,"S!D\=D[4E/.F3=6#"1>R<7'D1$^"((@\ >'D"14018@D>2LD
  483. XM"P@D09P0.:OBA0(%(S:.85.'3$@><^B0T>D"C0_ @@D;!H$XSYP7<,+("=.F
  484. XM\>/ ."4?GF/Y!9T\<,KP= PY=.'#6-.4N?,B]FS/K0>_IFR;]I@P;NPDQ0U:
  485. XM]V0>O3$#+S.6=7'1O.W(ICUG#%<V;,1H)AYY-W+ILU_,L2,G39LP2[F[/IZ<
  486. XM#L8V<^ZH-PX;/&WW>.C,A_Y]NNG3^WF7'%9?X"&'2?HYU]UD(H"E$$,.082&
  487. XM"'\%Y!,(0QSXE$@D(5B5&465\44;3-6AU48@T(%&2'.D-D8:($*54F+ @<27
  488. XM7UC8\<4;F<511QD*."C6%R :-6*)7UA7QE,HI $'"R+=T90<*2B0P&]DD"''
  489. XM%W0DD( *3NY@98X[]OBCEV](B9&8>UA91GX8N0%"$TBN5$8;"<#!8QUP?,'&
  490. XM&V&0D21"()Z!0@IB)O"F>W+(2:<;=7QA)YYZPL'G%W.$88>(8!5Z:**+QCEG
  491. XMG>[A2:,<=/CYQAEG;&0HHF["V>BHD$I::@*)\:@JJZY^&BNCCI)Z9Y[E)73D
  492. XM')DN-8>OBLH:;*V3YKEGGV&(\48=J0K)$+-D\AB&CV4D,)(:B5HY+@@]@$"@
  493. XMDDQB8<473E3!!!-0-E%$O%\,\4033>1%Q!?VQLN"E0FX^\42163Q!1%!4!$$
  494. XME$DX,87#3@Q1!)1.#NQEP%5\0<5<3!3QQ5Q%- &E"$:$*(+&"7 \,A4ELUSP
  495. XMNP@KS+##$$M,L<48/TEPR_=V/+$4$1]Q,A. 1C4$H6F<4<=F,[GAPM0K_^SR
  496. XM$?=^ 8443PP!9:67_AGHH&X4*G.\\[+L,LDF_VQPS0LW_# ($4^<%\\:^>PE
  497. XMT/@.7?3)4V@:TM)E-_VT3#I)3;7,5V>]===?3XNIX&2;_3/:]!*\-LQM[_UV
  498. XMPG'C3+?.=U^<-^-!?^&W$T:#(,(4=&B&$M*\NG%&U7LW[H367'L-PJFI_EG[
  499. XM&6?+F_G&J;,M\^<VRYVSW16;GK'5J:_>^NL*P0$"[:W:CCOR^&*]^^.^Y]JG
  500. XM\-T3?[GQ:B?/^?(T@W[SW'7O++W>X M-!=&LGPQ%L73X'M\Z)C[>00X$< #@
  501. XML9*EFN*E37/NBYG;XM<\T=6O=#U#7=_V]S?7!<%:V,(00AXTEL51+WR.ZUWD
  502. XM+$4M$&9KA&)QX/$&N+ B&"$(\J("E&30/A2.+V)?N$+$U'(%**&@6V8J0PKR
  503. XMM@48=.%D*3/*]S 'JP0<B Y/D].XQ-2'"@D$+1E:DGLX5)*35,4^1X+4B>2D
  504. XM(A:Y"$:RB<I&:(23,MQ( 4C\UH^"!$,(H9%$M6*7>YKTI"A-J4I7"I26N.0E
  505. XM,,$A47D$%YK4) <V_4I4CXI4M,!&+3F,(2B;8E:H9I5)6PTK4YOBTAN^H)E/
  506. XMIB&451SELS1Y*S&8I"N<V@E#RB!*9]&*EL,:S)*V1")DH4<UO036+TV)IP-=
  507. XM)%5%8A2W=.0M26[12N8B";K4I2-!\M)@F*M7ZO3%+W\!+&@L8U[HZ$>ZZ&40
  508. XM@OCZ&!5"]K*8N<X*T_G>YB3H.0JN\WGV>V?NJL?!_GG0DZ"THPD'ZD,#^HZ3
  509. XMK$3H*\L@PQYV3'D3/)C\G#<ZZ.%M>@S5'_^N%P2);FI4QE26 '7G4"BA4D0*
  510. XMB:@K-U51>%[T?1F%V_P BL'3G5"D'12!$&Y)(A&Z80Z[7&GJ"D@^*-GR("0B
  511. XM&U*-4M/\U;-S7E+G3CL:4)^&5'4%O=X0C*(9E#)P#DIM:%,-0E9BJN:L5:4A
  512. XM1ONIT0JRTZ/WTR!0#2H"*:BF#"B)(J/22L 4'M"9@"5241@55Y<1P88X9((.
  513. XM04 #BWZ!J4 4HEZ>4$00')&:25RBDYKXQ'OFDV543-05LTA&+GKQ0F'<T+@\
  514. XM! :HK"2-)DI)BE;TNS?&2(Y'C5T=[QC)/6JK(;9-%2 CY4U"0BE-A[02EA;9
  515. XMI2^%:4R@U6.XQ$5)2S9+F:6,5G(5RP9&+2N6O@SOK<:;0!YAA"7(K&)QPW7-
  516. XM!&13#=M<EX8&"4[VS6F<^^J77LXI,()IE:,7=*=7:2A/>BK/=4583  M.]>L
  517. XM^G.K"?XH_FAH/2@N%B,\6:A5F:I"$(PWFB!N; 2Q.K.Z_I.K/06I53OLNO^Y
  518. XM%U6R";$+"'M9P_J.O5Q)#8X;N+X'6O6Q-\SA#BV+V=UIEHA&G*]HX4#:DT5X
  519. XM)5,T7A57.ZMK=E$!%@+C?D,R6S." <5;FN-[<;O&W;K1)'"4T1R%:R.?X"B[
  520. XMX.)C6""$9DD==<W+3=*8G6M(C"!RNENJKB,AB><S<7=*WI7E+[W49S6CZ@MH
  521. XM  X9C"*'9&)26'BR=*IDHDHX>)J4H$Z J%EI+5B"*KVI7K4M_W2'4\^2F:K^
  522. XM\Z5);2TZ**0-TRR3=L5%DG(1&[_ITJ\8O_FN</X77^04\+\XELX+([B=&F:R
  523. XMCZ%4:5VG*M-NV#1&*(Q3NNKTVG@5Z(S#>K(@H"1[/";Q 5=-ZNRI&%\5;O&Y
  524. XM+8CMO/X4K"-M=ZM9Q!P$)2[>VY[1FJOU!IH6>8;[9/&!^9WN!7.8W:X;*JU_
  525. XM5_"<( 3AXRNQK)F3IGO?E)\6=C&&^ZWNBP?<@RCI]:]!WE*%[SI5,N^*R6N8
  526. XM9,E"J;($2ZV5N*S%8BO@RV$N2&S'6&:4G/G#6\I,8D2TW#:WL;=P_NV,Z&Q'
  527. XM.^.QT4 Z+GD9]06INP>W@EXVH:%K:.DJ,M&-O&[!P#Y)2"N@3=_]-+1N9781
  528. XMU9M'ME[F)I-R=H:[^I*HWONP^OZ%6:<I\.I=/.']CO,W^+HKP:[FF>I[W_QV
  529. XM<]#]3=NS.Q9M<U+;P-:F>%=E'''XJ1S=J]^PRV@L G>GB$<T7ROC_[[A<-KT
  530. XMJJ[?]UUCKU> !_6##2>X43SNAMR7>/<#WWF^)S[\&,N>H"\7*LGOP/'E1\WY
  531. XM!V2\X^\@_7*G7/@\5;",77[\F%M^YL67]T,GS\K*7[X-.T=R9"<+="\)W8J 
  532. XMQ5I>]EIBMFQD1%M]-EY5IUM7UR)9%T=;5R-=1Q!W)FQY)G8)*&%HUUP94VA4
  533. XMXG99 G?6]4C898&.QG:5='>(-TN4!G5?,%[@)FZ=AE[@E6I]-@;8 GDVZ(('
  534. XM 0=YH(.*AR=]UG= "$Q"Z(*&812#)%]TQWG'YGEIUR[-YE\N4WH#=GKGMU&J
  535. XM9WW:%G('E(&W%8.<1FXHIV]:6'WJ=WT;E'U#@"W@YSLWB"WE5X;4EW[9]F^T
  536. XMMS0^^(;<QH,\D@=S*'&IAX9W^%6T!P63QX=$45X847:35WQ08#Q$<P1(,%D8
  537. XMZ(*,%V@<6$A4%(C!=X9VZ&^&B'$B0 0%YQZ*V&=)"%@4]7"6I7]*!@(Q@%I:
  538. XMIEH!V&5&AW1?I'1C=H!F]G9OQ68,R%L.^"):-V<22%Q@IV<DQ$HA&(R:.&@=
  539. XMB(*']G:,-(*,9H+;A8*1!FM!F !BZ'?/B"Q%B&OAZ(Q:\E;E&"WG"(SDR(3:
  540. XM>&S&=B[)]GEJ%WKT,GKY@@1/D 060V!54&VOMX5I2(:".)"$*(KKEGV?5 =C
  541. XML 9 0 >;$19RT!B:41YST (R0081T16*V([C. >>F%.@"&,%B8>D6 <W 5@A
  542. XM()' H1 5F6ER@)$:J1@=V08AT) /^9&:9B3N*)*N^'O3-XBAV'*S1XI/T$9R
  543. XMH ,\&6X^&9+Y!UFQ.(M!5XM#=XM%1RY'1X %D00JP1(N 1,A 1P16$<B80:^
  544. XMZ'3:<1%FX75BMY8BTG1#(1!OF11QV2$G,0=^MA(M\1)ZP$O32$F'UD<- 9<[
  545. XM@I=T, ?86(*:1U_=I8*JAI8H$ ). @(F8 (@$ *$M$TH4)<7<9AEE)@$L42_
  546. XM@1UO, 8H,(N_(Y9O()F>>9>A.0<I,)N(!(!8-"N=29B-9Y>@B2!SN428DR@P
  547. XMXEF4"0<MX -P69M.<IQPN4VON9N?N8G/)9C"*9G%>9QBYR#7(9L$LYP^D)TC
  548. XMM)W.J9N&"9X)L9U1.$@=Z)W)69W$Z9U%HD3=:9P^$)_CN6>%R9OQF9Z 64C>
  549. XM:9X2R1"RZ9Z3Z9WVH9ST:1_WV8R&B4;2F3?8J9O:*:!5-)P%2I_)A:#'F5P+
  550. XM.B2&.5X/^I\2&IX42J#7Z0.+T2)L$ 9YH*$H*A1PL*)4D2[/F:(QRJ+\26CL
  551. XM:9=;AI5YXUI@MHL8THM-5Q5P:77$Z%L0B(S#Y77SQ8P>RIOE*8V%1(W219Z\
  552. XM*9>+.7?Q^&AK IGS)8_8](3UF*,H""5&( 5!8"\"B7XF68@M)D1$0 5( "4U
  553. XM< ,U()!(4 1)0(F3)0,T8 ,"R01!( 1%D(\B0#@D! (SX (R\#UINJ8B,P7\
  554. XM> 5?8 1/X!9%( 50LC]5<#$$$ZGVHCJ5^@524 13D 1:(#+Z(@5.L*F=*@6?
  555. XM2HOSTJ.WF95 FG1#:H!%"@8 NIU(^F;&N*3!E8Q.NHS/^:L"FJ.!&5U7@J6?
  556. XMJ:6+QIA)5'=?BG=AZH3TR$UF2DE0 @5Y<:AM6I(9II &LZ=,  4OUB"$J0/*
  557. XMR@9H)9!8 "4P()!90*\"*:=T"B6:]05%@ 4P,V!4\ 3^2@18HZ=\ZJ=0,@,\
  558. XM1##]*@1/( 6/Q:D@<$-,, 6@ZG]6:9L"F(M<N:NRA9@?$B+!BG7#*F?%VJ04
  559. XM^'7:"*408IC[^:!6^JSX"9VPZ9M;&J9>FH+8VH1&9U]DRJW-=:8@ *ZOR@1?
  560. XM( 150 4#ZP3C:E=%N6#G>JCJNE7LBI\Z$)_?8S#S2EGV^G,L8[2'^@6$:JA(
  561. XM2WM15 ;?([9(RS8 "267:"31J':=:8THH0)3!B6=6)6U:HNWVEI;&:2P1:0B
  562. XM"P;V4;+%&&? 14=UMK)/^IP.2J73Z:S/*:URI[/<"*8^JY5 NZW*QB1$R[9)
  563. XMN[1-^[0O5J[J-K7INJ['I0/VL;7OTK4V< -?Z[4$([IE.[:TAT^SL;;AVK:<
  564. XM\[8&H9M_A"3-5;<AR"6C>3ILH66TR@2VVK%:J8N#RZN%FUR(JZ0HR[@3V!<L
  565. XMVY@NFY^?":*2ZX.&:;DDR*6-::T\2ZW#IJW:5*9#ZZU%^[NCR[1/X+2H
  566. XMAY!1*V.J6[4<=;4DI /)!;M?T+4Q, ,X4+O]EP"X6ZBZ2XI7-F&WB[]N2VW#
  567. XM6[,*:+R#AKS4M;P=N+<:V[=7^;<#*+@%&+*A614V*J/9^X#;RW7*V+(U"J,R
  568. XMRJQ5*IA7BKY9BIB*.:WL6ZT[ZUW9^K.=1[^#1K0P [!34$3]ZZ:H*[7O@JX"
  569. XM+#H$+!8Z\,(LBL!=6Z_]>Z\@( .TV[_Z6J<@T*__&K#_,K %>[#]NZ=]6HG\
  570. XM"D1K?"]M3+!Q <=>\@10<"_]2JF<E;01.[%3$*NSRK?0Z[?2FZM"ZI5\&99_
  571. XM"0)DR:0@<99I617M!0=ST)8K*W:;K)=R21#A6W9!)LI O)=@Z9?].;EM1[/-
  572. XM&,J]F9<YVX2/B7<66IR6B9F:69GIDILU*\NCC+<&X1)_@IJJ.0>LZ9JZ*<Q 
  573. XM3)NU272>!<JG/,NB2<S!:26Y[)VA[**AW*$0(LNR++/4J<W6R<U!1C8!"J_>
  574. XMG,X3"J_@W!#B[,XD"J\ZW#/'V<TFZIV&X1%U4%ZLQ'PNVL]A\,^CQGSQ;,H\
  575. XMHI<$;= !'37W#*$^L,GJO)T5>L[TV=  ;4MET"<'<1-T,-!EX,\;708=/2@@
  576. XMG="RK-$X9](>?2W&$J+T2='O/*#F_)X9/=(%7=(GS1+%)-(DW=(];1ZJH=+5
  577. XMS-*-Y])<0M1Z*=/Y3,_G6:(W?:''B=10=1[A!M0[_4)M@-510:/-?-0Z[=!7
  578. XMK6D1C<ZZ4M,7C=/'*3SD)9]>XIUN;9]@'<S5/-<A<M8S#=7K;-.1R=8^X-:)
  579. XMD0=&X:*"?1I&8=0+O2N8@MB<4KYH_=)1S<[[3)^ME%"-3=APK6J6;5(B,MB)
  580. XM7=>Q7,V7/5&9;21./=%\;=&5_=0; 4U0U\ZO/788H=B<;,JS?8.0O==I7<]^
  581. XMO<WT>08+(2AI !8N*MQO0-Q@8=MZB=S*C1!Z_=2]/=F_C=',.3;%C1 NJAW/
  582. XM+2>B/22RS-V2 A;1K=K3W==K3=7UN:)S@ ;CK=WS>9QFP-[NG=W>O<&CO=CS
  583. XMG13U3=ZI3=.^G=XG2B-MT"?.Q!#8DC@N2N &KAH('C7,W=B<T>!3E>#0_=^K
  584. XM+=5_K=[%Q$ RX*(=?DPR$.$AOA0R4-X 3MT"[IWG@0<+=$P@'@8N7N(A\=WA
  585. XM7,TM_N)+@>(93ME3?:(T/@,@_E;'- ,D3N1+,0,\?MZL_>/\?(I^UP8P'=+Q
  586. XMC:)0SDI2GM(V+L]BK811/N5++MGHW=H^0.,T,.0I508T<.1I3@-A7M$:#MS2
  587. XM?=MA  <QVJ)5+LMU?N<1KN=VS@9Y\.9J3>:RC%A4'M>\?=N&WN?5;.B"'N",
  588. XM/"O71;TKS'2%&\HQ?+*+2\/':L-AO=CC7+XS2\V+K;[9V+Y%K+GQ*+_()K1+
  589. XM;+^BRJI-0 2FNW(5!\#O<L9V"@-@G')RK+ @4 ,U, .#*L&(JJA:7+1!]EXY
  590. XMAL""W%D6B[$L$^ND.LB8JJD4&^T9FP#4_NRFBJJJRJH1^ZK9'@07N^W4/@2S
  591. XMKC550*E0 $01@Z;F+NV*7$4$\DPH0"!+00<H,"YHJJ:CJN[_PK8I4,>[\^SR
  592. XM?NYZN['2G,*ZNG1D=ND]WLG#**R*6Y:-Z[V/^^FWG>)]'=&CSO&H')NUW*69
  593. XMV[.KCL1!^[F#%+J_6^NPQX5Q3+6LVZX>OYU>C*]AK/,II^MI;,< B\<>H\<&
  594. XMN^U3.\>3I<9!+[!$S\<)\+"%#*L5.^_;_G\-[[$JS(O6V\)@@-0?$369?O&6
  595. XMW+T5"+ZD?MM>SWP@S\.P#-[5;.KP*TFICG>29@=OD 9DX"5I'S695ZVL#H7U
  596. XM.R7?BK\#>P1'$#(P3Y!P&L UC[5[?W#R"B4Y(*@[+XL/++I#P(_^*#(5\P07
  597. XM"R54Z241G 5/L+2#?[1?P(]$HP7[ZS S%,%F:WQ\98I!3<G,QY1AB[]M\3%&
  598. XMH#!K]?@(D?NHG_G]^(_6<\@_HWT=+4")VA5>S?Q&0-\: 1;,3SL@0./,_P2I
  599. XM(2=WL!%DD";,3P5,'3L%+D"^)_KX:P7F/JL@T.L)8/4^ZO!""O&9W/5CS=,O
  600. XM#=)A?XPIF_%EGT2E;*7=/Z&6_V*:J&-[9V_DX2PAAKEN6=S;/"K/<]DCT&6_
  601. XM1%>\L!=$8PAXC#66^!)2ZJIB-,]JM2ZDQM$*H 5+.5UK!L2 /%7Y8D .$'YC
  602. XM2_TQ@4^U,)+ %( "A$IAA S6L:_&& Q$6C*0!DZ,B!47R-:]. (]L&&A/]27
  603. XM TO?9!%=JD]5M3YS]P,!1A#  E\@")J.'/ "+QCJ:P) 1 OR/ B6_M:?Z7!_
  604. XMHNM4!8%_L;^8@!C3=L\K>N&BZ?6QZ%^O(H%*S:>IAOU'K+A7#3-[(N\+X,&A
  605. XM5DS6'N4*A'!OB V;N?< Z4L$G%^N3NVXO"^(JJ9 $'!Z=>A-F2L0N+I$8+L:
  606. XMA'U"#\:K_M6U:  ,('8ML LNP;&5N\X6*1*%OHL)&CM"Q@1HW=13>/4NTN&J
  607. XMP/7P"!?7LVK.3]/PP1EFK!P7L@J$P+"KF35R=@CM6JD#8B4/U9V\1BBF.A<D
  608. XM9'F\9!*.K2:F0Z(8N6(Y5"SUA< !-@('X*!0AN$FYS&J%>C &I@7C(%FL ;>
  609. XMP!QH!'D@&I,!H8\,HCXM"%:(X+_8@4@0C<4 & "HJF 3-'WW"_5%0=;G!%Q?
  610. XM%52#;- )N,&$1^]*V"([88V,%\X_7TA;\)I1&(:;KAAJO&/H#&^;1WQL:J=9
  611. XMO;($:,V"V.6B.XPP[\P*1-04&L(S80FV(P'$)S? &7))@5-"B:/OQ:]'V.JP
  612. XM8;^K@(2/ WI#J*4)/Z X[(3DL%V=1'48 VA /C088DP&G,(JR _EPCP, CKP
  613. XM"/; &< "5R$0C(=#\%3]0[%X#VL Y3.+9&L6TA[K%Y]PWSM$6@?Q">*OA3@%
  614. XM7Q_^@HA?H V^0:I7!7=?$NA]-6<G]L1S&*, 2^*(@[H0<%$ZK<?".N*J.&UE
  615. XM "1B/++WO0 @2SQLFLT0KD1$" T9($R<AHK0FA!%P/?J!%]"'%O$;_-UP/^%
  616. XM/QB?)\1:H%&*1#X0,/EJEPR0 :@0+L;&?^0$N,85.&2RR"""12=X^L867VR(
  617. XM5/ N[J-,A;'@Q?XR'7!0.K9"V7<]K!^-FP-V43AJ/N,75I#?WM ^9N -'(A%
  618. XMQ"A<!?,+ F: 4;!'C. >XXKH$H/M#S)BQ#GHR*I79?Q%G@TS:L:Q]P<]8R L
  619. XM;:D$M*%$)J$2/U#;NW'/D.291I/G %,C!.1<22P24D#7B/G&H]$C2DTQ'%JQ
  620. XMQE? $.1G<VSJT :XPY23%6=7%1R.G,\X(L=\./J8XVM$6L_1(4I'XO<$JF-;
  621. XM>%44<=O!O@F6?4K*3 D)WS$\ZD/8Z"&YHWGT$B*@"0"'.F#,\@#SNP(K0DX,
  622. XMAC>@S&P'?A,+YH]]2$?\Z/[@'PK#>KUPZ]&6!)+;H,Z ['^<<>.51+W$)HV%
  623. XM;DN).ZP9YK?;E@@;H-U!>>WK[RDQ28@441\WG(TA$M<]Q2LV-[(80] !=1*V
  624. XM,2(Y0!7Q8>U2@32R#,Y D>$5<2!8K(<!<6&5Q25Y%C=E/U2+H#()ND7E&/L.
  625. XM$0"9CTLI%K+"Y8@0H6#$DH+0T2^B/L H&(.D?N18_%$C^D=+Q_6<VWMS V_2
  626. XM#W8Z0#@GOX"QM&^BT4&RQ#YY&BNDI*&)S %3 !:<> 9T8HC@B5$%JC1&O@>/
  627. XM N5J')0;<MS<R T(L!#E%%.4(_(V%K!G2?UVXPU0A2U&C,T &K B2646C(>=
  628. XMDAX"Q+$X*N\C6AQ8J')@ML6WZ"^W(^WA K4'.VB$H7 'F ,;@)C3#R$HR1I9
  629. XM*_?BK62(.A(N\DJ).!AQ(5PTC(AQK2C&<-D5QN5CS(7[<1=.1I!%+&F+>+-O
  630. XMR9+3&4-/URQOIG\[@'K2[47(!?@2*>2?7$%%:SG8Q&WI*KRE40"7/M%E(@2A
  631. XMJ!HQY,J;@"VO4&Y#I9B%F.*[K(V<D%&>C-;E,S_.;JP![@\K+BP5R14!I@WT
  632. XME&'1'HK*MFDJTV(15)@[9%5J1[E(BB#F$%@1#VF#394R@#'MV\;$7WFQ.>+(
  633. XMC]D7'V(16(.!D63Z2NF(,GU?B5F941,H!C^8"2QE9AWDB&9FO[6W8YDS1>+_
  634. XMTRX!L)J)SOYVX8#F:&R6U-)H7BNDB2V7IJ]IFIB3,6I.-T U+^0\NH98,QMJ
  635. XM3:1U*)?BZ0*'\'(<8K'6M3J/)56, 5?Q7>A+'- O#::I#)B?$F\RJH*I*84@
  636. XMPKR;;#%O,LPAZ0JS#\2,?ORM<(*%PRD+25_'5(B,,U<Z3LC9*V]A1?27E3,Q
  637. XM?LO%*"YWYZ^\>G0PZ]',B,?U&-P7.'"$ >Q5/),E]N!D@42=+-& (E +YP:B
  638. XMY?G:DPJ0EDU(:5@ACYC5E(#=BD/JOBJ  ?T1N^R&7?-XWCJPN2A)I!:3H XN
  639. XM@4(^4OASTJ;T_#D%<4RZS:\8-T,E"!B?W7-2?<^U*#=_**LDDD%%_!43\J<]
  640. XM)FC48)^STGWJ1?BY^AJG=.P76! _<D%\*;K X.X@DW23_:'!O_@X(^)$M)]5
  641. XMC^'%/S2Y$=6DF:%Q,J!TJJR1R#,QJ(XK R>.&;Y..QH[.>C1M)".\(,"SQ"J
  642. XM+KMH);R$'])_)4H6&B^C(M:"H^I0!O3&RD<#<BA<=)BDZ"* !3(P"B_I+(18
  643. XMM7!R6D0YZ#D%J!TL7#F.QLE1_]<9(6@@3*5(;D&JISRY1X4FGRR-1=./SDY 
  644. XM6@TSI%'4ADCK FXJ$UH\4ZBM(SXS#RHNSW8%2].<.F18#LP&C-%]N$/A9JI$
  645. XM8T"4FM;-(7I-H40VG96MDA1)23Q@'NJ 5Z!Q*6)10%&\2"NGJ'.,GR'37V+1
  646. XM?[DI)=\6Y8)5T(O24S$:1L_@_#2C)?-^FLF,.#-/*=<+<JLT3I)$.QKD+&@/
  647. XMXZ.X='WYR5WJ07]G40R>1U&$4L(I8 DQ(8C\F@A+F3;*UA7D(FD.&)5JD[)(
  648. XMTR-:/H/*5' /G;1A?E+/9PNSXRB-C/)O6!)0VK**"D^62P@)]8%>(&1XY3@#
  649. XMF-.CTI(T2LA<2L108T4=4R T\!72$5I"-6 Q-4->$WDR4N4Y4C]A4?VI)[#%
  650. XM*+ 'EE+YY32%A]?S;0K,\&E$=>@V]8?=M*UZTG":?9[ II #\RU-@(">FC@H
  651. XM&5A=IW%1BBK.U =/HR-<G*=:])YR4?RE3\&H6^6GTG%DGE&;^O[4Z)D,H&GR
  652. XM/SH=,Q=4EZ6!;)9FSJ$^2"XW-#4H4UV$3G5S65362"@UZMBR%QP5D;I+K1I2
  653. XMQ:;K(*FQE :85)1Z0RD+#CBK[)2NNM0\ %-E97 =6Z"TIA)&S@E ^V.EVZEF
  654. XMQL_=N<ZZ,YFE'96N@$ZT3LN(>NJ:JK7T)78/[WF)CP 2X$"JV&3,+KYTUZ$H
  655. XM2"\J(94#@U5IZ2_^94QCWDGR=5QU;-H\TO;GK.1N=('1\PN(L1H0 [[I<6VI
  656. XM?"4(]%?C:AUYG^4\(.2UHYW793=D@-)-C9F2\7.Z4:=3Z/X*':"N=-2ZVE(Z
  657. XMV>@\K'95JD13HE;+/UKW[E[> T#/1*$)&?AR7M9KU5RMZ#)KNE:D)5]+E_$\
  658. XMIC(/OXI4_8JU.NPSB:1ZDT7:J0++4KGCR? K1[8PNH7#^&!]AZ-#KQ7V?ZY1
  659. XMS/K(OE)?$DN43$Z,/4S6J]!,)[LC<<N\M$12EF9!3$M495_V+ZT=!*B;S&Q+
  660. XMC(9^KT("MUV6F3;3+VNS<B"#7C/29,Q.4VIR*<MLFM59J"-H91-M(AC2#)@U
  661. XM(SL[S("3\2!S9M9%F=F$9F?M+%)=<?3I!@6X*B=JJ1NG9;2T;4O4M/*6:3&M
  662. XM"WH)B4'3OEJA@!*V7*K52WT&UF:+W2;?_)"*<[63TL]<!%0A:X.MJ#FUDQ+7
  663. XMNJ!5D]I*[9AS<J'6!64H4BMM)0RR5;-@:-?B27Q6GWSML]UP)ZK/\ DR\!2*
  664. XM+=D9MQO"UG9:%X1NSTZS];9-#MS")Q=T&E*#N6U$];;&?4D^@VK[3+YEM? V
  665. XMSEDW'P \%ESL0!77ULT"#X ;; <=M#U.YL/@\HB$&V@;6UKCM=VVX4*ZAYMQ
  666. XMR8X>O!:'CK/UVF#[<4.(NNVW]):H@5R&2W8<KKR-MB17Y6(+A_"5N!.B&[D>
  667. XM5^:FBINP$H;"R4VVJ7:ID8B5RW,3$\MM1"Y7SGTGY\<40JZ(ZFI-E^(V-:9K
  668. XM +>M1'.V\5;I-@TWH!XWFW?:NEU7ZDJ*,\!U#\315;4;]^4>IZ^GX*H<VZ4)
  669. XM/U?-OMT*^FXU[J_EN'VF!**TA'!OMX3>_6@)0>SF7:4&>+4M@_1/,+?EIEVE
  670. XM.W@)H6KHNTG-\?K<?=L0UFVPU;NB\.S".1^G=CLNT@V&68W::EQT^-4H[ZT-
  671. XMNF4MW&C>I#MP[>R> W1]5R^]WAEE>BVOW.VOJW?QMEY4.WM9B>I]*;&7E>!>
  672. XML_92!"_O';Z_EW+47<5[=SNOG35TP7?1Q5TW^WQ-[/+]O,U7FDTZ#:M91U:R
  673. XM!;&G<ZC6+-OK9C_M0QT2E):[4L.8V&+%JRI""+RD7/J]<ZDA=:RZ3'>S;K:N
  674. XMT'R5!.84&B.P-E0<(CUOB@-X:UPT6R<#V3W*BL5HG5VE$J7<#N!-JE)U[6!&
  675. XMN3.9$5A253M+=:I2U:K*%^-.ZE%6_#OPVAT2>'>[(]ZAT6DG@1?&==2?P?;[
  676. XM-85?>>\ 2[[3$?NNWY&$?Z>!!9[6^%T%[^<=O >\@IN7">N<&=:4@DZG@W4%
  677. XM%/AMI>)WTJ)<N_OQS.]H/;U]U+O^T:=J#=VK5(6O-U+_(E,A:UL=)1O(6@$7
  678. XM7JG# "S& K#/4WIL;.B]L43ZZ^B8$/972R^/S6&6 ?4DE@A>KA<6">?4YUK_
  679. XM<BVM?<)R4@H#74.<&$[L^$6U61BU?E=E\MI:4+#ENBS!#/P@^<M><6S]%9X[
  680. XMEFS90!2*557H&&XQC7298BU&'%:Y%I2X 6P8]%T^Q#F*@TC_)9C 511/#'EH
  681. XM364DZ,O%F#3["!80 U@3Y[K,D8;57TI6,>:IA"3^XI'5\3I"X Y)'3F?- 8!
  682. XMS5C*.E@83'8P,8P 1,QURSI7RE@S0^>R]3:(>*&BWRE,=IBMZTRJCQCH1F*Y
  683. XMEUI37GMEK>D2#(NN'KN_Q'"01<7Y];:VJVXS;%MQ[ )],H!AIE1\6#T1)]_,
  684. XM/EZI(#/8#(9.:N\Y+L@;Z(,A&N5%S$:8\PK'EW4<#]!"7&U70CJNH^MX$9=D
  685. XMPSM+71D\5L1J=AZ?H ZJ6J'J(/W"\95T]>,?:U\77]ATH8\RVT92@N@;8T!#
  686. XMEH7"E:]4L(D<O#08H'U!&FAN,0D0EFA$&"?ZR(&XN0I+0EQFV2T<(+?NX22+
  687. XM6'ZKDH-MNY6EK<Q\G5^R')/5+R]EO^#5Q5KB<_N5F00GOK$VV0NWQJF*^O@Q
  688. XM?2W%0/:^ N0A*Y!7L5<&RVIK-R;D,J9DQYA1;K*TIPK4952DC:DL-VY$9UG+
  689. XMAN2M3(ZA*Q.FMZ@A,R[0Q,7_E&5U_:PPF?J"YM3@B%-SQ97)VV@2BXKP^F)C
  690. XMK+\-S;TSD'KB7SH\IZ-LY,F*;Q.V4'FIQ6YS:E"'O]4WUH#%.OR:9''D+#-2
  691. XM.0K68UQ8=263K,;6$4BNX+V9E*\'%0C-@#5_KA7;O)I;D7@L?D)TI#S)!/ Z
  692. XM7$5B>PE- 58ROR9@T-) "X#/(0'-A$DCXR\=:U86QYQY)/<JX"&647-*5K,+
  693. XMUPH#VD:+9R7Q%J[)71@?VU]]G!3;)7#V@"(R()MA'0 \4J0!UI=;\;%R2K6:
  694. XM/=EJH.JGIQ)\%E$9D&1E:G?V'S(!6!3C=CI8D;%U1EK+& (/U&!94)=P53 ?
  695. XM!=J5QF,$G3U:\X%VL[#9?1DQ".U+,2HP/:'^6##;1D=:P,S',_W0"PLXHFCL
  696. XMV4-[X(D6T2F:B/I0%FU@#S 25<KA!H'$Z#@QHZ>SK:RB\C.REM'(.5D!<64]
  697. XMPEJY1V]8[YMSARZV"-)1^$A77'^K<XTT6T;2;GFBOB]>*B@_<4;ERV-+F&9 
  698. XM*'VA:6-M!<IGF%#[:8.<P.P48\Z7HI(YHU4:R*7C:G#LSP<3KFK/4TT^G:SK
  699. XM4*)E .2V:1OYIG%E/.VB5W"?;D%\>D7#H!D<@]83LHK,.5T_*>N.+J69M1Q_
  700. XMYIB[J6ENSP74QF71EN4^':MG;M%M:N_X@@IJ!KU!M3!%9=)7\[T.5MC:41.I
  701. XM%*.MR;0,,\^4VZRO=21=8)=R.4/F3'I+PDU,;=7)54=;5H+*?97U5Z"Z'W8T
  702. XM:Z^0.$?#;[0>TN478!OJR@N)$_6*_=;V>#<[Z=Y\53,A2$W7F-I= 6QU2 /P
  703. XM94J= 2=U2Y/H+HW&OC1<Y(=V4TRKRC(=C(/*TH"Z"6%6O\]W"J=O-1FEGY)S
  704. XM.__GS:RGNR\8 +L' EJ''6FM9H$V6IZS0?-0OV:'+3L7=?NMS8FES\S=W-Q+
  705. XMPS5.7I<P,DK[Y.%,I;68T::*9+6WT@ 5^"*=LR].CGO337O,FIV,J7&/M,;:
  706. XMF;*V:MJ#)9G"]9,)GP0JA.<IFS)+#'D.MG.W;*-G)RDS7H?@N'ZQE/DE ;(;
  707. XM=K&??0RB8_!8)^%D[9FKPMP5VJ7,]:H]!4VT$?525;%-NQLI$]KL)6+L>: #
  708. XMG^2A!<6[[#OSLH0&Q9":>#X!PX?X*O4BO=3$^5'.W6>J!$$U99'7.](YZXO/
  709. XMA[8]J=JFHK:Z;3OD%^TZZK:<>"ED8&]OX_&<6$YWZ@[<P7MP'[_"/5267^%^
  710. XMV<^O<*//]I8QFT_A]HZ)NW!K/[O=_<(-^"O<L)K![><;K:LC][[FT?VZ<C^=
  711. XMRTMXIQSF7M!!]^\>U6R]EAFV/&;:NG11<^$F+:[7I:0FIEP3,/=DX9R*NZIA
  712. XMYM\GK?!&TAF@D,6V#9C%VI14C^RXVKN#M1!5U6RUA#ODXTVSDS?]1JR_FC>*
  713. XM:J356&-X+O;/RIA8YVQC?;^1=1OUV8TW%#*U_]VY![4+PKQ,;6%C803NK14X
  714. XMN(ZJ>YE";]1RK;4IN(9>UQA<B!<3WAVV!>S/^>#S.OO PB:;KW7VG;Z(@IB-
  715. XMZE22/'J]&A%'V$:\C2]# GZ%T^_GMK$S^4%';->=8V&W%-^:%KJ^!F>G6,&)
  716. XM; $3M:1W@W=P+TY9<@"K#J*\>*T646@*IE-V7!V(EE2FLO#%R;;I=XXVXY)[
  717. XM$'=F-GY[IZO EF$$FY4FXFU]>GLOYX;CW/JTTF/9/"M(=P*(L.;UUE+M1LV;
  718. XM0[%?KN*$_(H/Y.-[YZ@B6:Q='_PH@],S35(6;&7NVQ!V#)1726E>-#._5L)[
  719. XM>G^7\NQ*? 7'&W?-RA;H]MYNGDI>.3B_L]W:0>_2ISU>I;F$];V"XJ7H<M:M
  720. XMF_FXHW[2O]QV7VPRG+%=+_*-YX)C*,?B'\HOP_CQZ:]A-BH$CDW!8,5SB<'E
  721. XMHR;YIA(S:\WQ-S8'XJC6T'US5EY]8ZPY9^5)&BZ/;KD,8Z,VH]WE]+>7Q^[\
  722. XMY6,%.89.GH1Y0W=TP,+%D7E!Y\[,_,EZV(;.MZLLE'!T%!TD7W-=!<E6&9BM
  723. XM9'"2S!8NL4$&/)GW$CM,?<W2)=T4U>42G)5D:3GDU:RJSL3CEY[%:'RVEVF/
  724. XM/TO5DX94)[2F"9DAVK_4FA3M5C?K<@F:05H?)6F'!%>/3<LKFW5>IF[8DD9"
  725. XMB^I1_=.2N< ^:F]N8#/K->VOFW7"3MW*&U\?[&8]W_;UL9%O%?O8B.K_-K4Q
  726. XM]F^K=*-Z?)KL@H*NF5[ ;M9C%L;=[%EWX$)T51$H7-1J9^J675"\=L1^VA%[
  727. XMVM6^)*AG^VLPP-0W.H0@[6/CH_]VN-[59[D>-Y?WN(\_:C!,@H%Y./1Y-""Z
  728. XM(ZP!;/D6>2M,P.UJ>_AUPE$H#L?W$4@(SXQW.PJ<J2PP!![O@ZP#ASL0[*K^
  729. XM, 8FP>S.W<$[IP7*-U8-YG?ZS@;[NXK5@GTPP3-X&]A7&F$TGJ?S=_U#[4[X
  730. XME&NZS2A4#W8S NZ"8M4*]X9PUU,L'H_-QWW^)O=[/CR=.TQ7UU+1ME.W-5R[
  731. XMW/ M1F-P6.BYL3U&AQ.6'4[Q3&\/.RP@ K'\\ 46J#U\<O_PW8[90[-OI_"+
  732. XM/;*'9B5>X4TKZ$[@2WJ/1VCE_J0+W^$SU]]P_V+LW'V&>_QQ_J\P $M;/L&]
  733. XM^>#%\([.:9M6KVT7;M#Y"M((%( 51A+NY$<%Q ("H; T%OI!G;TZTC8"7]H)
  734. XM\[N?VF\\#:!UN_[V["1+P3=0TQQB#?1PO^RE/:]->-8N*$(Z:KR62E-;WLZ<
  735. XMF#O[IV.<FO2\:D/QUKK2*_9'1=?\G,KK $"O&VGHEJ]\-T"%A_ 1S4---?=<
  736. XM]6&:A+?HN4V*N+OA@!I]M2XR6&-<JT&F\MZ5.KQ.8V +V--A,%/@GRW3?PIU
  737. XMBTZYZ]]L#Q0_GM$'M&DN[1=]D4],#=JXK_.X+%X3 *DW+RA]PZOT/\YC=?)?
  738. XMMMB@?C"#>*SU[,D 5>35C7D@?FI:GWW.O+M_YCX=!'S[%+/L??B%*.IQ=BR)
  739. XMV:3>U@<T3,J,:%8WY0JS.\Q*V<*_67GIJK,RI%U+(<3#1^>R?/-\=9P6UOVL
  740. XM6V]&%[_2%K.T?FA7$UMG9C4KY#^S1^LE(JW84?EX'9M=6H[[\"7N>K2U%__B
  741. XM"W::?_ WK\T5N02WYR=VG-_S=;YO*V\UG\Q=?,E>Y99^:$YH.;_G9W:,:_2;
  742. XMK]*]^)^]Z?=\T?[RB_[65_147^CK7L"VVFN^VW7GN?SA0_V>7_:%?MCONCZ?
  743. XME/ZH &U0:<O#C_91'^XO>IAOX==O/4;N$KN!-W=]GNX-!G27[C./NE=%ZV[L
  744. XML#O6 @$+?7 P#:>!Z\UF_PKO([@%>[L*[-[O)WKGP.#N [<J<G?>^_NZBT3R
  745. XM/073=QY^A._[#7:6^GT'\_<>?/J!,(#'_(1QP,M]42Z@"U?5[VMXW^OK_:._
  746. XM]WN^HZ?)2IZ!7VVVY>&W:DQO7;\?Y^W&@6[B_2^ OV,QGL5/=V 'X_6P]I_Q
  747. XMNZ/&3RQ]S>=YMH$W^' _WP9_N._T67/QA_O'/\-W8GL^[@>KDZ_=+MU23_FN
  748. XM_2C;?V(V]9A<[5(5<7G$T9<'^DAG8A[RYNO1;RT;7P$[=%UI7I.TO;%Y;AZ6
  749. XM%>>);W->/V/G10TQU1FGY^5'_9Z.M\:A?V97?++^F5U8']AG=6EU()_Q5]SE
  750. XM<=N>,E$[27K<DM-T[+%,/]&EQSME>KS<Q!:*>7J*U#ZG[F5L*6"IAP+)8K5+
  751. XMJB>RM7JKVJLWJIUP"5,*-^LM;SF=ZV#K47Z( TV@ZR& ,QLG1^;):3B;L'<_
  752. XM$7O3V^6T/^& 4I,;4-'Y>UQ9X=+V=5TGH-^!]J4*.A\=U_7!?R\@AA<#SF8D
  753. XM71$([O& *9T/N-+E<_G?[;;_J6(ETAQH<1T([]ZGEE+)>V7>]?  ,H+X7LWA
  754. XM!_)[.]M0UV5%,JQ,F+49*75<#\/QIR5\-8LHF"HT?&*'*?AF;8 !'\7WD@T)
  755. XMJF"2AAKM69=)G^7+?'RPH MQUHU\QTS)I\R<?+@@A! +KGRSR5SWM]1UPJ N
  756. XM*/+I=4J7*>C:N1 )C2JH"NY\G=<T6-@!?=:@J65K28.ZH(2'<3F#9 Z-$P.@
  757. XM.0Q$#! -ZH+B8'F3#7)V Q>-4P.0@\=$#7 .KESNH#K8#8Y]'$XL90/ @TN!
  758. XM#3 /SEPTC@U@#ZY<K!=@0^/< /Q@&7 #_(/*12QU PR$,U=!F ^F.3A 0H@#
  759. XM,(1W% X $;X05E\[&$OE  EA#H 1TC@YP$88]X6#L=1 E! .1"-A2@@#F(02
  760. XM(9"3$HZ#58XX: YN@^C@3 @3XH,R89H3 WPX-6%*..+@A/2@4+@3=H0&84HH
  761. XMY 2%/J&10Q0"A$KA4<@.)H4^X9G#%):#:\Y3V!!6A5)A:D<5EH/[X%5X3!18
  762. XM+:%/*!"F-NN@5S@1EH,(H5BX%,0 "Z%6>$?!A5VAP/45CH45H5M8!AAE96$Y
  763. XMJ!&BA?<@4K@6CH4@H5[H O6%A&%=R'DI77 4#) 0:D6(H8GS$@*&!"%/Z)U<
  764. XM!*K7>5 4+#A,@:"@&;(!&"%FZ!F& 46!8NC7X'8B6=WWB[@0T1XW2!#:@;K)
  765. XM,'C'^7W('^!'_PF"S)WI1^L0?E)>SW/B[3H>&PA$W<T -P#CAX!9@=D=\A%"
  766. XM'!<.&&=1^FE@FU]YU_FA.YI?J:+>B7XAV(U''=)^)5CJ-S+0=]D8Y^3ZY7?\
  767. XMSGX'W_UW=QCNI_#H?CB5&M<&AH*!(? GZ)5F.E.A)Z0U(ZYA1$C\P8:EH#*8
  768. XM!RIIJHYMN.1Q>#M6\X>[\7]G6%HHH)!XE4_UUP-U?W+8]X=?47<0XHI7]/!A
  769. XM-%[4HQVN@2+@>TA;B(.M84[H$RIQLF'?]Y;]?1I>X+?\,5:'E$<5!!9^/YFH
  770. XM)PZ^:XY@;S4 XG0(EEA!F# JCLJN-U.%4MB8K))&E7^:X B(2L52-4"(6!2F
  771. XM.34 B>@?SH8G8FV8(MZ PA%5NYB.=:;S@$RHA((E5T ]2(C-P, (P]9"[;
  772. XM'U(>G %H $K@ E%/$X$LP@7% #YB[%/&A8>9(+.WX^EO :&2"!6F.6<A?X@?
  773. XM/HDFHJ*6Y F(RE\4-ZZUB%!>5J4E3FF(H!83$#Y/8*(88[*Y:%5@HH(&."1K
  774. XMP)Q0!U0'+0'7E=#=!1>)4"!"R %Z0N5GON&(M) M1">><;N?>SC*]2H'H9ZX
  775. XM%3(0#^&B5R(:>1<>@ @H38D#8OVW+I%KLA5O>(HQBA9< 7,04D4%&#*GZBUS
  776. XM.6*[(3%) 4U#FC@40%D8P:9P[Z&*<Z*0R"'R?JKA9A5+X0"R8D;H)*Y<\1_$
  777. XM1BA:;8;BKX@H&HB'8+'H*'Z+8%OMD@. <,RBJ];\X"<@ %) ,94'OH;=MBFZ
  778. XM"I#?37 "# 6FB!W@-. ](<%KTQ%\!"&!&/ 0L &&04:@:;@9(("[<%I@BS05
  779. XM^4?@]7GGWY&8YN0 X2))."[.7.6B$Y?\H8N<'KEW3ER)B:(I]H\1BX;<N_@Q
  780. XMQHLMT$ 4"9X,?LR]L#UD*DO [<$0K $K@0L  M -*(%ZU#1L!$]!5) 44#(!
  781. XMHQO NW ?KU=QDP4.?":&9@#HN(DX .T2)R)7&6-]1R3:B4;B0>42AHPNX<AX
  782. XM"OZ',=$"AS+F8X<BR\@NAGH(H@X@#L( -&.\EY#=C*Z#OGBW309FP(' '% %
  783. XMF@)IN**( 8D-BK F-C"?HMY8*KH'48%"4#&F,=Y/FC 4&(Y<$ RP8Y!Q72/K
  784. XMMS&:?Q?=;F<3DHT^80Q@-F)\1UX3-RCRBH5BRM@V4G'"XLL8(\:--F'=Z+NM
  785. XM0,K<@64O)@'Y(G, 580$5TW3)9(8!/QB<2,4X!^_0QW *J@&'""4,#$ZC&< 
  786. XM"' @+(X\P= 8!+ !4DYB8&+<5?X5Q@@D:HZM(I<5-GZ(0B'H6 [F47YB+D@N
  787. XMHHTHXOS7*^*&JV.P6 @*@3!C868L"H6RXR-X ]"+MB/M80:($4]#PLA&! 5#
  788. XMP5VES- $;=UQD2\NC8J$C+ T7AW.A$&#R80!(,"F6-L<".!"8B T;HT\5N9H
  789. XMIX5RKF+O)S8VA>+C6*CDV(J (JY(&\I_>-GZ6"6RB&YCZRBEO8Z-XJ,D#LX 
  790. XM]:.-F .,B<R;"& 1U#;[(U2@'01.HF(#XIXUC,CC7E4>2 =>4GKD2?B/%&,9
  791. XM8/?(4 0D6M(&4 4D1/1(-[@.F./VN$'F>-RBCP8&B(,T0 CY%KHY).3Y""4*
  792. XMB@$BZK@V3FCM(Y88Y0V+,*2[*$.FA+K5?]7%944P ,M&)O(5?\(;D"DJD4B!
  793. XM'- XO@$@P(J@&0",?6-7  +D ==""(!!IHH:8_>8&GJ1XJ -($;NA7WB"DAG
  794. XM]8=F9*#XL)F,Y^*FQS:JBRWD^P@C<FTQY!E62=:0C!QP5#N::<TB<H@O9AI#
  795. XM 4<C)QP(9,5%$!4HD6_>*_$40 F86 N@1+8 [06(@!)(D,ICFG9U]"!YP)F8
  796. XM)CZ291SWV!YZCQ[B&Y42W@"7)%U81I*,Z*.4J#ZFCJ.DE<@ZFI*+8AP9,\Z1
  797. XM/N$-P$IF134 _@A+VHLT00-R+2R1P\MD("I>$:1A4Q 53 77CV7 '* E$R,2
  798. XM$"H.!4L#J:@>38U0PA1I8OQ$;T >@!%<CMJC<H6!<9#4Y*OH,?J%V>1?6#XF
  799. XM@YVD"1DEHI"MFPJY(DYQ[J,$-\AE:,\?,Y42X@#KY X!B^&-(@!0("J2",#!
  800. XM4* BR 2+Y+50S,@)K<))(4\^#9?,03 9.([  2,9GSF,* $C60?LE)A8]\$&
  801. XM0),:Y$3)17:0W6)5( Z"C/-A'U0?&FQ#&R>Y)Y:#)>$V>3:>D9_DZ?A-KI%^
  802. XM7!O9,@9F6ULA)S_*C&!E2SG&X !Z9 Y95*II"%=;]U/2DT(E10$"E%T[94ZY
  803. XM5 H&ZE&IN"'<E9E!7HF6[)4@ 52I14J57R,;:%%^D!X.#'!):D6C8\EH5J:0
  804. XMX"0;24J.DR;E2^?\K7OS8YJC%<F58N*RF#^2(GUE2D!4OGG)C4."$MP!0<$G
  805. XM,3$5CV+ 10 N) 17XU3!D3B6$B6.%UEVB).EW=<9C@B"8[@H&B*7I:%823KF
  806. XMBB(=']CM013+Y6<8[JF(Z>(^9NZ]C5MBW%A="H[OVD W W!P,.44T!G."8+C
  807. XMU !1GDS%GNXA.7R71<&VV$$"?%B=)SAF%7RH5'))"C8CGZ%45\KTEU8=*XC5
  808. XMN8+:&H0 8/Z'LR!85PN*=9R)V'%@QGQH72^8S"1:R&!#\&#Z)G)=RT?7.9B"
  809. XMXR[(#+:#@F.,4Q0D-/UE?TD-,H8=IEI3$Z:8O@V)V6&:F/NAU<7BA)@HH6E)
  810. XM$QIV<-1-:'J5F+$4/E3>P)B"84_HX0"%.&:/.13NF"^FD?ECLIA!IG?RD[AV
  811. XM(8F+61K^)$MF<VD91EMX %2 CC@3/]^\E67*=E&FK=5?@@A?YI89C*0V0.94
  812. XMJ-Y8'BO"EO!D5CEL9B/RDTB9#4&<Z6:&)%5F0Q 3LCBQ5$)(9]Y1>2:H=9RD
  813. XMF=O)C0GT$9H"BH[)89:&B":\(CJBF30FQU7V=8:NG2(H&OZ9DZ;J!6E:F=3-
  814. XM.!@9;5^=(YZ87&:5Q%#!!H4Y>$-"B9EB;I069H>I64(F[)P,1G4(CM<EE7BU
  815. XM#7[D)!QIBUE_P4X>N?W98>-EOV0P7'>R9 $#^9V7GV%S".W8:9_?I2(=;HBA
  816. XM2G68WH5^XDY[!VUZ">>A"8:"?8?/X:BB%KPJ-8>LR5RR 328CH#OD(<ZF!K 
  817. XM@P4\M=_1$H0%,D08',0>8EA=9#;7:%(\*$(#,K Q>)[5?9AJOIA,9A7&:HZ;
  818. XMS^4):2ZJD:*D9\G\N9!MI3#W2 6<TI^I1_WQ7[QFA=CTM'C470[0N_5AXY_7
  819. XMN#D6B=6DMVAC1GL\IHVIQ%V8'B4:N2N>E0EG6OE9EI3H7CF)2LJ1JF2/"2?:
  820. XMD0*@.]D 7@]9P#Q9$Y@T9, /F2F*BGO.@? B)(U"(S9&2#(%<T#_N%O@E$IE
  821. XM1H!.:0AYVU! (L M@-,: %Q&DM/D)&EO&IDD9Y)I6I*/FF32UFJ6AJ_FRLE9
  822. XMHI7+G5K)7<:/&QH<]:C@G)6/F A3WI3O!F\!,;5Y&-.<*2H*!R_!+JD>"989
  823. XM@3(S1M@22B3O^!(\)  CQ&1>AAL0TWI)*6:0CZ5P^7&"C2&GY1:2A)U3)IZY
  824. XMZ*&<V%XZI^V!D@CG399=XB^%BA!PJKP++@,A&%KJ?W!C*JD#_"1RI0TPP[V3
  825. XMM$>;!UA19 *#Z45E2F6#!%7&D>4MNI]\65%ZD A(&E!F_B2<)\.V?'J> R?H
  826. XMZ1*5CNH<Z<ERFIZJX\OI1BJ*NJ9;*=,IGUHF[6DO#72V)TRIDT D+@E%8I',
  827. XM)$)!3<*10!5;I\<I2=)]7J2=:68B"\WGCJ"4W)_86ME9\9V==68W"5+6<R+E
  828. XMZ6DH17 Q9_?I<!8P]J?X"0 R695/^0FFE6K:TZ1HPL5ZVA.9Q@6Z4U[@ OA/
  829. XMT6D!U9!X>4J6R*<UF>;DGS3.R>EJ"J 'Y_6IEV6?W- 3\W::DV\E.LE ,(B-
  830. XM69/ =Z&;,R:GV== "5C1$K$"$ Q#8Q'J6;PV*0 /2I_<FT"H<.BG%#QFS&]X
  831. XMAV%_WM^%F/@!.T99OY0S.@'PYB C_FTJR-&J2%%ZG3[;O1D#H* 09Z*I@J*=
  832. XM+*CUN7:VG&UG&,9P6G$IY</I@Q::.*COIH.&-$KHH!E+-:$"EA!*A!JA1^@.
  833. XMBH/98'QFF@.(UF%4 !3J&U:<0$\<9B&ZB(SH]9>'18A6J)? <4Z'QB<9NMME
  834. XMFDT=J9G**50HF8'988*B:V@ 2E:&;K FMP>U98:T)B H[K&/ZY+KF8"ZCC/G
  835. XM.9D@6IJ=820E20F K^3."3CTHI4@]0:+QI<A(.]'7W:"2!WW @J"CVF.3)%0
  836. XM.'5^@8,92TFCI@TJJ)NDH";2*NAE#9@-4H%I85ZCW:@LN/%=*!W?+5AA IKE
  837. XM*!"SO)0F$N9:%ZNA?/PE.1H@Q74L'Q*VCG*C]Z@[*O/-"S4F X&-;@H)X4"J
  838. XM;UFCT6@WRH\>2184F=.-JIB&W4/:8HJ9]BA#*I$V=FAF19I0")K?25OAH@@3
  839. XM905%FI &2""IJO4-DJ17IFO#=^4YKY)(*I!VHY&2.HB2-IF=S9'DVGDV)*9&
  840. XM:MH\I!C70KJ1?IJY7<=(61X3!BG)J9.F$CZI:?-Y'J407^B9\>F!;FA(V5FZ
  841. XMG+CFZVD(/J(]T)UB@%6B8\RD.&PV?L5FLD,GI#D@@)&44"B;W>8$9NT\FXC,
  842. XM=CBJ>#O78;5)^@6)B0RVJ1O&=R?8?->6EIN2WNN7@YF'=REZV(4NF^OA&$I_
  843. XM9G,7J7R8;R8IJ!R_>9KYFP8F4VJ0^GPGIV2:=E)#/> *>;3,H+EH#9H@SJ1]
  844. XM31Z:4CF(*%XDJN)=G+_F9$')::(9HHW'==*;5*4769(:I2,I0UJ25J:U*69S
  845. XMF<I$<H(M=YN:2+5F 9I]:I?S%6?J?;8N)2G'YL# E&/%,,'3E8$'Q&_JV72B
  846. XMAZG/%BG1IB]I@!23+J6Y:3;:AHINTN6+%9,"I[(H=CF<XB^VZ*<G<QZG^]5K
  847. XMDR*=:F453/D_N*?%Z/.A0)A(U*F?Y^QY-M@I4=J-\J3^YRL8F7:GJ<1NJC;"
  848. XMH4S,&B.#SJ'!7!U:(GDVHFEO1<90G ^B:9K]9:( &85HH5:A3L\6.I@2,C9>
  849. X'&*HM)J-8#Z'!
  850. Xend
  851. END_OF_FILE
  852. if test 22923 -ne `wc -c <'contool_ui.c.Z.uu'`; then
  853.     echo shar: \"'contool_ui.c.Z.uu'\" unpacked with wrong size!
  854. fi
  855. # end of 'contool_ui.c.Z.uu'
  856. fi
  857. if test -f 'lex.c' -a "${1}" != "-c" ; then 
  858.   echo shar: Will not clobber existing file \"'lex.c'\"
  859. else
  860. echo shar: Extracting \"'lex.c'\" \(6716 characters\)
  861. sed "s/^X//" >'lex.c' <<'END_OF_FILE'
  862. X/************************************************************************/
  863. X/*    Copyright 1987-1991 by Chuck Musciano and Harris Corporation     */
  864. X/*                                    */
  865. X/*    Full ownership of this software, and all rights pertaining to     */
  866. X/*    the for-profit distribution of this software, are retained by     */
  867. X/*    Chuck Musciano and Harris Corporation.  You are permitted to     */
  868. X/*    use this software without fee.  This software is provided "as     */
  869. X/*    is" without express or implied warranty.  You may redistribute     */
  870. X/*    this software, provided that this copyright notice is retained,    */
  871. X/*    and that the software is not distributed for profit.  If you     */
  872. X/*    wish to use this software in a profit-making venture, you must     */
  873. X/*    first license this code and its underlying technology from     */
  874. X/*    Harris Corporation.                         */
  875. X/*                                    */
  876. X/*    Bottom line: you can have this software, you can use it, you     */
  877. X/*    can give it away.  You just can't sell any or all parts of it     */
  878. X/*    without prior permission from Harris Corporation.         */
  879. X/************************************************************************/
  880. X
  881. X#define        RETURN(x)        return(last_token = (x))
  882. X
  883. X#define        FIRST_KEYWORD        ARCHIVE
  884. X#define        LAST_KEYWORD        YES
  885. X#define        NUM_KEYWORDS        (LAST_KEYWORD - FIRST_KEYWORD + 1)
  886. X
  887. XPRIVATE    FILE    *f = NULL;
  888. XPRIVATE    int    last_token = -1;
  889. XPRIVATE    char    buf[1024];
  890. X
  891. XPRIVATE    struct    {char    *name;
  892. X         int    value;
  893. X        } token[] = {{"archive",              ARCHIVE},
  894. X                 {"beep",                 BEEP},
  895. X                 {"check_icon",           CHECK_ICON},
  896. X                 {"command",              COMMAND},
  897. X                 {"comment",              COMMENT},
  898. X                 {"defaults",             DEFAULTS},
  899. X                 {"delete",               DELETE},
  900. X                 {"display",              DISPLAY},
  901. X                 {"filters",              FILTERS},
  902. X                 {"flash",                FLASH},
  903. X                 {"flash_icon",           FLASH_ICON},
  904. X                 {"good_icon",            GOOD_ICON},
  905. X                 {"ignore",               IGNORE},
  906. X                 {"log",                  LOG},
  907. X                 {"log_before_filtering", LOG_BEFORE_FILTERING},
  908. X                 {"log_file",             LOG_FILE},
  909. X                 {"match",                MATCH},
  910. X                 {"no"     ,              NO},
  911. X                 {"noflash",              NOFLASH},
  912. X                 {"noopen",               NOOPEN},
  913. X                 {"nostamp",              NOSTAMP},
  914. X                 {"open",                 OPEN},
  915. X                 {"print",                PRINT},
  916. X                 {"quiet",                QUIET},
  917. X                 {"save",                 SAVE},
  918. X                 {"stamp",                STAMP},
  919. X                 {"timeout",              TIMEOUT},
  920. X                 {"timestamp",            TIMESTAMP},
  921. X                 {"to",                   TO},
  922. X                 {"version",              VERSION},
  923. X                 {"yes",                  YES}};
  924. X
  925. XPRIVATE    struct    {char    first;
  926. X         char    next;
  927. X         int    name;
  928. X        } punc[] = {{'{',  '\0', LBRACE},
  929. X                {'}',  '\0', RBRACE},
  930. X                {'\0', '\0', -1}};
  931. X
  932. X/************************************************************************/
  933. XEXPORT    int    lex_init(path)
  934. X
  935. Xchar    *path;
  936. X
  937. X{
  938. X    if (f)
  939. X       fclose(f);
  940. X    if (f = fopen(path, "r")) {
  941. X       curr_file = strsave(path);
  942. X       line_count = 1;
  943. X       ungetc = -1;
  944. X       parse_errors_occured = 0;
  945. X       return(TRUE);
  946. X       }
  947. X    else
  948. X       return(FALSE);
  949. X}
  950. X
  951. X/************************************************************************/
  952. XPRIVATE    char    getch()
  953. X
  954. X{    register    char    c;
  955. X    static        int    first = TRUE;
  956. X
  957. X    if (ungetc != -1)
  958. X       c = ungetc, ungetc = -1;
  959. X    else {
  960. X       c = getc(f);
  961. X       if (c == '\n')
  962. X          line_count++;
  963. X       }
  964. X    return(c);
  965. X}
  966. X
  967. X/************************************************************************/
  968. XPRIVATE    int    is_keyword(s)
  969. X
  970. Xchar    *s;
  971. X
  972. X{    register    int    cmp, high, low, pos;
  973. X
  974. X    for (low = 0, high = NUM_KEYWORDS - 1; low <= high; )
  975. X       if ((cmp = strcmp(s, token[pos = (high - low) / 2 + low].name)) == 0)
  976. X          return(token[pos].value);
  977. X       else if (cmp < 0)
  978. X          high = pos - 1;
  979. X       else
  980. X          low = pos + 1;
  981. X    return(NULL);
  982. X}
  983. X
  984. X/************************************************************************/
  985. XPRIVATE    int    yylex()
  986. X
  987. X{    register    char    c, c1, *p;
  988. X    register    int    i, j, val;
  989. X    char            *index();
  990. X    double            atof();
  991. X
  992. X    c = getch();
  993. X    while (isspace(c))
  994. X       c = getch();
  995. X    if (isalpha(c)) {
  996. X       p = buf;
  997. X       *p++ = c;
  998. X       while (isalnum(c = getch()) || c == '_')
  999. X          *p++ = c;
  1000. X       ungetc = c;
  1001. X       *p = '\0';
  1002. X       for (p = buf; *p; p++)
  1003. X          if (isupper(*p))
  1004. X             *p = tolower(*p);
  1005. X       if (i = is_keyword(buf))
  1006. X          RETURN(i);
  1007. X       else {
  1008. X          yyerror("unexpected keyword: %s", buf);
  1009. X          fclose(f);
  1010. X          f = NULL;
  1011. X          RETURN(EOF);
  1012. X          }
  1013. X       }
  1014. X    else if (c == '"' || c == '\'') {
  1015. X       for (p = buf; TRUE; p++)
  1016. X          if ((*p = getch()) == c) {
  1017. X             if ((c1 = getch()) != c) {
  1018. X                ungetc = c1;
  1019. X                break;
  1020. X                }
  1021. X             }
  1022. X          else if (*p == '\\' && filter_version < 310)
  1023. X             *p = getch();
  1024. X          else if (*p == '\n' || *p == '\r') {
  1025. X             yyerror("Newline in string not allowed");
  1026. X             break;
  1027. X             }
  1028. X       *p = '\0';
  1029. X       yylval.cpval = strsave(buf);
  1030. X       RETURN(STRING);
  1031. X       }
  1032. X    else if (isdigit(c)) {
  1033. X       p = buf;
  1034. X       *p++ = c;
  1035. X       while (isdigit(c = getch()))
  1036. X          *p++ = c;
  1037. X       *p = '\0';
  1038. X       ungetc = c;
  1039. X       yylval.ival = atoi(buf);
  1040. X       RETURN(INTEGER);
  1041. X       }
  1042. X    else if (c == '#') {
  1043. X       while ((c = getch()) != '\n' && c != EOF)
  1044. X          ;
  1045. X       if (c == EOF) {
  1046. X          fclose(f);
  1047. X          f = NULL;
  1048. X          RETURN(EOF);
  1049. X          }
  1050. X       else
  1051. X          RETURN(yylex());
  1052. X       }
  1053. X    else if (c == EOF) {
  1054. X       fclose(f);
  1055. X       f = NULL;
  1056. X       RETURN(EOF);
  1057. X       }
  1058. X    else {
  1059. X       for (i = 0; punc[i].first; i++)
  1060. X          if (c == punc[i].first) {
  1061. X             for (c1 = getch(), j = 1; punc[i + j].first == c; j++)
  1062. X                if (c1 == punc[i + j].next)
  1063. X                   RETURN(punc[i + j].name);
  1064. X             ungetc = c1;
  1065. X             RETURN(punc[i].name);
  1066. X             }
  1067. X       yyerror("Invalid character in source file: %c (0x%02x)", c, c);
  1068. X       }
  1069. X    RETURN(yylex());
  1070. X}
  1071. X
  1072. X/************************************************************************/
  1073. XPRIVATE    char    *get_last_token()
  1074. X
  1075. X{    int    i;
  1076. X    static    char    msg[512];
  1077. X
  1078. X    if (last_token == INTEGER || last_token == STRING)
  1079. X       sprintf(msg, "\"%s\"", buf);
  1080. X    else if (last_token >= LBRACE && last_token <= RBRACE) {
  1081. X       for (i = 0; punc[i].first; i++)
  1082. X          if (punc[i].name == last_token) {
  1083. X             sprintf(msg, "\"%c\"", punc[i].first);
  1084. X             if (punc[i].next)
  1085. X                sprintf(msg + 2, "%c\"", punc[i].next);
  1086. X             break;
  1087. X             }
  1088. X       if (punc[i].first == '\0')
  1089. X          sprintf(msg, "!!Geez!  Some punctuation, I don't know!!");
  1090. X       }
  1091. X    else if (last_token >= FIRST_KEYWORD && last_token <= LAST_KEYWORD)
  1092. X       sprintf(msg, "\"%s\"", token[last_token - FIRST_KEYWORD].name);
  1093. X    else if (last_token == EOF)
  1094. X       sprintf(msg, "End Of File");
  1095. X    else
  1096. X       sprintf(msg, "!!Geez!  Some keyword, I don't know!!");
  1097. X    return(msg);
  1098. X}
  1099. END_OF_FILE
  1100. if test 6716 -ne `wc -c <'lex.c'`; then
  1101.     echo shar: \"'lex.c'\" unpacked with wrong size!
  1102. fi
  1103. # end of 'lex.c'
  1104. fi
  1105. echo shar: End of archive 3 \(of 5\).
  1106. cp /dev/null ark3isdone
  1107. MISSING=""
  1108. for I in 1 2 3 4 5 ; do
  1109.     if test ! -f ark${I}isdone ; then
  1110.     MISSING="${MISSING} ${I}"
  1111.     fi
  1112. done
  1113. if test "${MISSING}" = "" ; then
  1114.     echo You have unpacked all 5 archives.
  1115.     rm -f ark[1-9]isdone
  1116. else
  1117.     echo You still need to unpack the following archives:
  1118.     echo "        " ${MISSING}
  1119. fi
  1120. ##  End of shell archive.
  1121. exit 0
  1122. -- 
  1123. --
  1124. Molecular Simulations, Inc.            mail: dcmartin@msi.com
  1125. 796 N. Pastoria Avenue                uucp: uunet!dcmartin
  1126. Sunnyvale, California 94086            at&t: 408/522-9236
  1127.