home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1992 March / Source_Code_CD-ROM_Walnut_Creek_March_1992.iso / usenet / altsrcs / 2 / 2407 < prev    next >
Encoding:
Internet Message Format  |  1990-12-28  |  38.6 KB

  1. From: pjc@pcbox.UUCP (Paul J. Condie)
  2. Newsgroups: alt.sources
  3. Subject: menu(1) part 2 of 14
  4. Message-ID: <436@pcbox.UUCP>
  5. Date: 26 Dec 90 20:04:05 GMT
  6.  
  7.  
  8. #!/bin/sh
  9. # this is part 2 of a multipart archive
  10. # do not concatenate these parts, unpack them in order with /bin/sh
  11. # file menu.1 continued
  12. #
  13. CurArch=2
  14. if test ! -r s2_seq_.tmp
  15. then echo "Please unpack part 1 first!"
  16.      exit 1; fi
  17. ( read Scheck
  18.   if test "$Scheck" != $CurArch
  19.   then echo "Please unpack part $Scheck next!"
  20.        exit 1;
  21.   else exit 0; fi
  22. ) < s2_seq_.tmp || exit 1
  23. echo "x - Continuing file menu.1"
  24. sed 's/^X//' << 'SHAR_EOF' >> menu.1
  25. XFor example:
  26. XAssuming $SNAME is a multiple worded value to be assigned to a field.
  27. X
  28. X    field_defaults = "cat \fIfilename\fP |
  29. X        while [ $? -eq 0 ]
  30. X        do
  31. X            read LINE
  32. X            [ $? -ne 0 ] && break
  33. X            set $LINE
  34. X            SCODE=$1
  35. X            shift
  36. X            SNAME=$*
  37. X            echo $SCODE  \\\\"$SNAME\\\\"
  38. X        done"
  39. X.fi
  40. X.TP 15
  41. X[ after_screen = "" ]
  42. XA command to be run after the user exits the screen.
  43. XThis command does not get run if the user presses the \fIKEY_CANCEL\fP
  44. Xkey to exit the screen.
  45. X
  46. XDiagnostics
  47. X.RS 15
  48. XThe following actions are taken by menu depending on what exit code your
  49. Xcommand uses.
  50. X.TP 8
  51. X0
  52. XAOK.
  53. XIf your command prints something to stdout,
  54. Xthat output (up to a newline) will be displayed to the screen as a message
  55. Xto the message line before prompting for input again.
  56. X.TP 8
  57. X1
  58. XIssue a audible bell.
  59. XIf your command prints something to stdout,
  60. Xthat output (up to a newline) will be displayed to the screen as a message
  61. Xto the message line before prompting for input again.
  62. X.TP 8
  63. Xanything else
  64. XNo action.
  65. X.RE
  66. X
  67. X.RS 15
  68. Xnote:  Other return codes will be added depending on demand.
  69. X.RE
  70. X
  71. X.TP 15
  72. X[ exit_last_field ]
  73. XIf exit_last_field is specified, after the user presses return on the last field
  74. Xthe input will be accepted and the user will exit the screen (this is as if the
  75. Xuser had pressed the KEY_ACCEPT).  Don't ask me Lee wanted it.
  76. X.TP 15
  77. X[ exit_on_cancel ]
  78. XOnly exit from the screen when the user presses the \fIKEY_CANCEL\fP key.
  79. XThis is useful in combination with the \fIafter_screen\fP keyword if you
  80. Xwant the capability, for example, to add a bunch of records without exiting
  81. Xthe screen.  In this case, the \fIKEY_ACCEPT\fP key would add the record(s) 
  82. Xby running the \fIafter_screen\fP command and 
  83. Xthe user would signify he is done by pressing the \fIKEY_CANCEL\fP key.
  84. X.br
  85. XFor a good example of this see the sadmin.m menu script with the adduser
  86. Xshell script in the utilities.d/m.d directory.
  87. X.TP 15
  88. X[ text = row col text ]
  89. XAllows you to put any text at a specified row and column within the input
  90. Xwindow.  Where the first number is the row (base 0) and the second number
  91. Xis the column (base 0).  Remember the border of the window will take up
  92. Xtwo rows and two columns.  The text will be written to the window before
  93. Xany of the field stuff is placed on the window.  Any number of text lines
  94. Xmay be specified up to \fIMAXTEXT\fP (20) defined in menu.h.
  95. XIt's up to you to make sure your text stays in the window.
  96. XThe text may contain terminal attributes.
  97. X.RE
  98. X
  99. XField Arguments:
  100. X.RS 4
  101. X.TP 15
  102. Xfield_name
  103. XThe environment variable name that the data will be assigned to.  The field_name
  104. Xmust begin with a "$", just to remind you that it is a environment variable 
  105. Xthat I 
  106. Xam using.  Although, the "$" is not actually used in the environment variable 
  107. Xname.  This screen argument (field_name) tells menu that you are starting 
  108. Xa new field
  109. Xdefinition.  ..soooo...  It has to be the first argument for a field.  
  110. XAll other field
  111. Xarguments for that field_name follows after, but before the next field_name.
  112. X
  113. XThe user's input is immediatly accessable, via the environment variable,
  114. Xas soon as the user exits the field.  If the \fIKEY_CANCEL\fP is pressed
  115. Xto exit the screen.  All environment variables are set back to their original
  116. Xvalues, before the screen was entered.
  117. X.TP 15
  118. Xfield_row
  119. XThe row this field will appear on (base zero).
  120. XThe window is drawn with a box on the outer edge, row zero and the last 
  121. Xrow (window_rows) is used for the box.
  122. X.TP 15
  123. Xfield_col
  124. XThe starting column for this field (base zero).  
  125. XIf you have a field_label you need to allow enough room to place the label 
  126. Xto the left of the field, also, the field terminators.
  127. XThe window is drawn with
  128. Xa box on the outer edge, so, column zero and the last column (window_cols) 
  129. Xis used for the box.
  130. X.TP 15
  131. Xfield_length
  132. XMaximum length of this field.  For field types SET and MENU this argument
  133. Xbecomes optional, the field length is automatically set to the longest set value
  134. Xin the field_range.
  135. X.TP 15
  136. X[ field_label = "" ]
  137. XA Label to be placed to the left of the field.
  138. X. \ **********************************
  139. X.TP 15
  140. X[ field_mask = "" ]
  141. XValid masks for a field depend upon the type of field
  142. Xyou specified, see (field_edits).  Basically the mask says what character
  143. Xpositions in the field you allow input, what type of character allowed at that
  144. Xposition, and what kind of a format do you want for the field.
  145. X
  146. XThe \fIfield_length\fP should not include character positions where no input
  147. Xis allowed in the mask (format characters), because format characters
  148. Xare not returned into \fIfield_name\fP.  For example, \fIfield_edits = DATE,
  149. Xfield_mask = "MM/DD/YY"\fP.  The "/" is a format character.  The cursor
  150. Xwill skip over those positions in the field.  Only the characters typed in
  151. Xthe MM DD YY positions will be in the environment variable \fIfield_name\fP.
  152. XThe field_length would be six.
  153. X
  154. XBecause the mask is so closely tied to the \fIfield_edits\fP, a complete
  155. Xdescription of what mask characters are valid with what field types is 
  156. Xdescribed under
  157. X\fIfield_edits\fP.  Any character in the mask that is not listed as a valid
  158. Xmask character for that field type becomes a format character.
  159. X. \ ---------------------------------
  160. X.TP 15
  161. X[ field_edits = UPPER_AN ]
  162. XThis argument defines edit checks to be performed on the
  163. Xinput characters as they are being typed in.  If no mask is provided then
  164. Xthe field type itself determines the edit checks to be performed on all
  165. Xcharacters in the field.
  166. X.RS 15
  167. X.TP 11
  168. XALPHANUM
  169. XAny alpha/numeric character is allowed.
  170. X.br
  171. XValid mask characters:
  172. X.nf
  173. X    space    alpha/numeric
  174. X    A    alpha
  175. X    9    numeric
  176. X    U    alpha only - convert to upper case
  177. X    V    alpha/numeric - convert alpha to upper case
  178. X    H    ???
  179. X.fi
  180. X.TP
  181. XALPHA
  182. XAlpha only.
  183. X.br
  184. XValid mask characters:
  185. X.nf
  186. X    A    alpha
  187. X.fi
  188. X.TP
  189. XNUMERIC
  190. XNumeric only.
  191. X.br
  192. XValid mask characters:
  193. X.nf
  194. X    9    numeric
  195. X.fi
  196. X.TP
  197. XUPPER
  198. XConvert to upper case.  Only alpha permitted.
  199. X.br
  200. XValid mask characters:
  201. X.nf
  202. X    U    upper alpha
  203. X.fi
  204. X.TP
  205. XUPPER_AN
  206. XAlpha and numeric permitted.  Convert alpha characters to upper-case.
  207. X.br
  208. XValid mask characters:
  209. X.nf
  210. X    V    upper alpha/numeric
  211. X.fi
  212. X.TP
  213. XHEX
  214. XOnly hex characters permitted.
  215. X.br
  216. XValid mask characters:
  217. X.nf
  218. X    H    ???
  219. X    space    ???
  220. X.fi
  221. X.TP
  222. XSTATE
  223. XValid two character Post Office abbreviations for the fifty states.
  224. XA edit check is done for a valid state.
  225. X.br
  226. XValid mask characters:
  227. X.nf
  228. X    SS    two character state
  229. X    S    ???
  230. X    space    ???
  231. X.fi
  232. X.TP
  233. XZIP
  234. XPost Office zip code.
  235. X.br
  236. XValid mask characters:
  237. X.nf
  238. X    99999-9999    ???
  239. X.fi
  240. X.TP
  241. XDATE
  242. XA valid date.
  243. X.br
  244. XValid mask characters:
  245. X.nf
  246. X    MM    month  (01-12)
  247. X    DD    day  (01-31)
  248. X    YY    year  (00-99)
  249. X    YYYY    full year with century
  250. X.fi
  251. XThe mask must contain at least MM and DD.  If no mask is specified for the
  252. Xfield a default mask of "MMDDYY" is used.
  253. X.br
  254. XSome examples:
  255. X.nf
  256. X    MMDDYY
  257. X    MM/DD/YY
  258. X    YY-MM-DD
  259. X    MM  DD  YYYY
  260. X.fi
  261. X
  262. XThe \fIfield_range\fP argument may contain any of the following keywords
  263. X(case insensitive)
  264. Xand the appropriate edit will be performed (see \fIfield_range\fP for more
  265. Xinfo).
  266. X.nf
  267. X    sun,mon,tue,
  268. X    wed,thr,fri,sat    - validate date entered against day of week.
  269. X    No_Holidays    - no holidays allowed.  
  270. X              This is validated against the file 
  271. X              /usr/lib/acct/holidays by default.  
  272. X              Modify GetInput.h to change default.
  273. X    GT_Today    - date must be greater than todays date.
  274. X    GE_Today    - greater than or equal to todays date.
  275. X    LT_Today    - less than todays date.
  276. X    LE_Today    - less than or equal to todays date.
  277. X.fi
  278. X.TP
  279. XTIME
  280. XA time field.
  281. X.br
  282. XValid mask characters:
  283. X.nf
  284. X    HH    hours  (01-12)
  285. X    MM    minutes  (00-59)
  286. X    SS    seconds  (00-59)
  287. X    TT    tenths  (00-99)
  288. X    II    military hours  (00-24)
  289. X.fi
  290. XSome examples:
  291. X.nf
  292. X    HH:MM
  293. X    HH:MM:SS
  294. X    HH:MM:SS:TT
  295. X    II:MM
  296. X    II:MM:SS
  297. X    II:MM:SS:TT
  298. X.fi
  299. X.TP
  300. XSET
  301. XThis field type specifies a set of values that are acceptable in the input 
  302. Xfield.
  303. XThe acceptable values within the set are specified in the \fIfield_range\fP 
  304. Xargument.  
  305. XThe user selects one of the set values specified in the field range by
  306. Xpressing the space bar, which will toggle through the set values,
  307. Xor by pressing the first character in the desired value.
  308. X
  309. XThe format of the field_range can only be comma separated values 
  310. X(ex. "CA,ID,TX").  
  311. XRange values, such as "1-5", don't work.  You would have to say "1,2,3,4,5".
  312. X.br
  313. XThe field length is automatically set to the longest set value in the 
  314. Xfield_range.
  315. X.TP
  316. XMENU
  317. XThis field type is similar to the SET type.  The difference is when the user
  318. Xattempts to type something in the field a pop-up menu of available choices
  319. Xare displayed, as specified in field_range.  
  320. XThe user makes a selection by hi-lighting the choice and pressing return.
  321. X.br
  322. XSee SET type for specifying the field range.
  323. XThe limit is ten items in the field range.
  324. X.TP
  325. XPROTECT
  326. XThis X's out the field so that what is entered on the keyboard can not be seen
  327. Xon the screen.  Useful for password entry.
  328. X.RE
  329. X. \ ---------------------------------
  330. X.TP 15
  331. X[ field_range = "" ]
  332. XA set of valid ranges permitted for this field. 
  333. XRanges may be specified as comma separated values ("ONE,TWO,THREE") 
  334. Xor as a inclusive range ("1-5"), or a combination of both ("1-5,M,E").
  335. XThe comma separated range values are "or" conditions not "and" conditions,
  336. Xexcept for
  337. XDATE ranges.  Date range "mon-fri,No_Holidays" means date must be mon-fri
  338. Xand not a holiday.
  339. XRange values must be compatible with the field_edits that you have selected.
  340. XMaximum length of this field is 1k.
  341. X
  342. XInstead of hard coding the range values a command may be specified,
  343. Xenclosed in grave accents, that will echo to stdout the range values to
  344. Xbe used.  The command will be run once upon entering the screen.
  345. X.br
  346. XSome examples:
  347. X.nf
  348. X    "1-10"
  349. X    "5,10,15,16"
  350. X    "1-10,20,M,E,32-40"
  351. X    ",CA,TX,ID"
  352. X    "mon-fri"
  353. X
  354. X    ### this command builds a field_range of valid printers
  355. X    "`lpstat -p | awk '{ print $2 }' |
  356. X        for printer in `cat`
  357. X        do
  358. X            if [ \\"$printer\\" = \\"unknown\\" ]
  359. X               then continue
  360. X            fi
  361. X            if [ -z \\"$RANGEVALUES\\" ]
  362. X                     then RANGEVALUES=$printer
  363. X                     else RANGEVALUES=\\"$RANGEVALUES,$printer\\"
  364. X            fi
  365. X            echo $RANGEVALUES > /tmp/menu.tmpfile
  366. X        done
  367. X        cat /tmp/menu.tmpfile`"
  368. X.fi
  369. X. \ ---------------------------------
  370. X.TP 15
  371. X[ field_min = 0 ]
  372. XIf field_mustenter is selected then this is the minimum
  373. Xrequired input.  Otherwise, it is the minimum required input only if they try 
  374. Xto input something.
  375. X.br
  376. XWarning: If you select a \fIfield_adjust\fP that blank fills then this 
  377. Xoption will have no meaning because there will be spaces in the field.
  378. X.TP 15
  379. X[ field_adjust = NOFILL ]
  380. XIndicates whether to adjust the text right or left within the field
  381. Xand whether or not to zero or blank fill the field.
  382. X.RS 15
  383. X.TP 15
  384. XNOFILL
  385. Xno action.
  386. X.TP
  387. XRTADJ_ZFILL
  388. Xright adjust, zero fill
  389. X.TP
  390. XRTADJ_BFILL
  391. Xright adjust, blank fill
  392. X.TP
  393. XLFADJ_ZFILL
  394. Xleft adjust, zero fill
  395. X.TP
  396. XLFADJ_BFILL
  397. Xleft adjust, blank fill
  398. X.RE
  399. X. \ ---------------------------------
  400. X.TP 15
  401. X[ field_mustenter ]
  402. XMarks this as a must enter field.  Default is that the field is not
  403. Xa must enter field.
  404. X. \ ---------------------------------
  405. X.TP 15
  406. X[ field_prompt = "" ]
  407. XPrompt message to be displayed.
  408. X. \ ---------------------------------
  409. X.TP 15
  410. X[ field_terminator = "[]" ]
  411. XCharacters to terminate the field with.  The left one goes on the left, 
  412. Xthe right one goes on the right.  Funny how that works.  I recommend
  413. Xto use terminators on input fields and no terminators (spaces) for
  414. X\fIfield_noinput\fP fields.
  415. X. \ ---------------------------------
  416. X.TP 15
  417. X[ field_noinput ]
  418. XIf field_noinput is selected then the cursor will skip over this field.  A
  419. Xdisplay only field.
  420. X.TP 15
  421. X[ before_field = "" ]
  422. XWhat goes into the quoted string is a shell command that is passed into a 
  423. Xpopen(3) call before any input is done or default values displayed.
  424. X
  425. XDiagnostics
  426. X.RS 15
  427. XThe following actions are taken by menu depending on what exit code your
  428. Xcommand uses.
  429. X.TP 8
  430. X0
  431. XAOK. Continue to prompt for input.
  432. XYour command may print to stdout, up to a newline, enviroment variable 
  433. Xsettings to change the values of your \fIfield_names\fP.  For example
  434. X"$FIELD_1=value1 $FIELD_2=value2 ...".  The new values are displayed 
  435. Ximmediately to the fields.
  436. X.TP 8
  437. X1
  438. XAOK.  Continue to prompt for input.  If your command prints something to stdout,
  439. Xthat output (up to a newline) will be displayed to the screen as a message
  440. Xto the message line.
  441. X.TP 8
  442. X2
  443. XSkip this field.  Same effect as specifying \fIfield_noinput\fP, only this 
  444. Xhappens at runtime.
  445. X.TP 8
  446. Xanything else
  447. XDo nothing.
  448. X.RE
  449. X
  450. X.RS 15
  451. Xnote:  Other return codes will be added depending on demand.
  452. X.RE
  453. X
  454. X.TP 15
  455. X[ after_field = "" ]
  456. XWhat goes into the quoted string is a shell command that is passed into a 
  457. Xpopen(3) call after the user exits the field.
  458. XThis command does not get run if the user presses the KEY_CANCEL key 
  459. Xwhile in this field.
  460. X
  461. XDiagnostics
  462. X.RS 15
  463. XThe following actions are taken by menu depending on what exit code your
  464. Xcommand uses.
  465. X.TP 8
  466. X0
  467. XAOK. Continue to next field.
  468. XYour command may print to stdout, up to a newline, enviroment variable 
  469. Xsettings to change the values of your \fIfield_names\fP.  For example
  470. X"$FIELD_1=value1 $FIELD_2=value2 ...".  The new values are displayed 
  471. Ximmediately to the fields.
  472. X.TP 8
  473. X1
  474. XStay on this field (re-input).  Issue a audible bell.
  475. XIf your command prints something to stdout,
  476. Xthat output (up to a newline) will be displayed to the screen as a message
  477. Xto the message line before prompting for input again.
  478. X.TP 8
  479. Xanything else
  480. XDo nothing.
  481. X.RE
  482. X
  483. X.RS 15
  484. Xnote:  Other return codes will be added depending on demand.
  485. X.RE
  486. X
  487. X.RE
  488. X.RE
  489. X. \ --------------------------------------------------------------------------
  490. X
  491. X.PP
  492. X.nf
  493. X \fB.EXIT\fP [ command ]   [ \\ ]
  494. XExit description text.
  495. X.fi
  496. X.IP "" 6
  497. XExit menu program.  This can be used if you want to exit as a user
  498. Xselectable option.  There should be only one .EXIT per menu.
  499. X.br
  500. XIf command is present a system(3S) will be called, with command as the
  501. Xargument, before exiting.  The command will be executed even if the user uses
  502. Xthe "E" command (see help) to exit, as long as there is a .EXIT 
  503. Xin current menu.  If you
  504. Xwant to make sure a particular command gets executed when the user exits you
  505. Xshould have a ".EXIT command" in every menu.
  506. X. \ --------------------------------------------------------------------------
  507. X
  508. X.PP
  509. X.nf
  510. X \fB.GETINPUT\fP  screen_name [ [!]variable=value ... ] [ \\ ]
  511. XOption description text.
  512. X.fi
  513. X.IP "" 6
  514. XDisplays a predefined screen and prompts for input
  515. Xas outlined in the screen definition.
  516. XAfter the user has pressed the \fIKEY_ACCEPT\fP
  517. Xthe environment variables, specified by the \fIfield_name\fP argument
  518. Xis set equal to the data the user entered in that field.
  519. XIf no data was entered for a field the environment variable is set equal to
  520. X"".
  521. XThe after_screen command is executed after every \fIKEY_ACCEPT\fP.
  522. XIf \fIKEY_CANCEL\fP is pressed the environment variables are not set.
  523. X.br
  524. XThe screen_name is what was used in the .DEFINE_SCREEN keyword.
  525. XThe \fIvariable=value\fP are set at runtime (when the user selects the
  526. Xoption).
  527. X
  528. X
  529. XThe cursor moves from field to field based upon the order of the fields in
  530. Xthe \fI.DEFINE_SCREEN\fP keyword.  
  531. XBelow is listed the various keys used in a GETINPUT, the action they perform 
  532. Xand their default value.  In addition to the default values, if the terminal
  533. Xhas a associated curses key defined (see curses.h) that key may also be used.
  534. XFor example, ^j is the default value to traverse forwards through the fields
  535. Xbut if the down arrow is defined for KEY_DOWN, in curses, then the down arrow 
  536. Xmay also be used.  Not all keys may have an associated curses key.
  537. XThe "^" indicates press and hold the control key.
  538. X.br
  539. XSee \fIMenu Initialization File\fP to customize the values of the keys.
  540. X
  541. XMover Keys:
  542. X.nf
  543. X    KEY_RETURN  (^m)    Traverse forwards through the fields.
  544. X    KEY_DOWN  (^j)    Traverse forwards through the fields.
  545. X    KEY_UP  (^k)        Traverse backwards through the fields.
  546. X    KEY_TAB  (^i)        Fast forward through the fields.
  547. X    KEY_BTAB          Fast reverse through the fields.
  548. XField Editing Keys:
  549. X    KEY_BEG  (^b)        Place cursor at beginning of field.
  550. X    KEY_END  (^e)        Place cursor at end of input in field.
  551. X    KEY_RIGHT  (^l)    Forward space within the field.
  552. X    KEY_LEFT  (^h)        Backspace within the field (non-destructive).
  553. X    KEY_BACKSPACE  (^h)    Same as KEY_LEFT.
  554. X    KEY_EOL  (^d)        Delete from cursor to end of field.
  555. X    KEY_DL  (^c)        Clear field and home cursor.
  556. X    KEY_DC  (^x)        Delete a character.
  557. X    KEY_IC  (^t)        Toggle between type-over and insert mode.
  558. XOther Keys:
  559. X    KEY_HELP  (?)        Display help screen.
  560. X    KEY_REFRESH  (^r)    Redraw the screen.
  561. X    KEY_ACCEPT  (^a)    Accept all input and exit screen.
  562. X    KEY_CANCEL  (esc)    Cancel all input and exit screen.
  563. X    KEY_SAVE  (^f)        Save screen to a file.
  564. X    KEY_PRINT  (^p)    Print screen to lp.
  565. X.fi
  566. X. \ --------------------------------------------------------------------------
  567. X
  568. X.PP
  569. X \fB.GNAME\fP menuname menufile
  570. X.IP "" 6
  571. XDefine a goto name for a menu so that the user may go directly to that
  572. Xmenu by typing in the menu name (G "return" menuname "return").  
  573. XMenuname is the name you want
  574. Xthe user to input.  Menuname has to be one word and is limited to fifteen
  575. Xcharacters.
  576. XMenufile is the unix filename for that menu.  The .GNAME
  577. Xis not accessible to the user until the menufile that you have placed the .GNAME
  578. Xin has been displayed.  If all .GNAME's have been placed in the main menu
  579. Xthen they will all be accessible to the user as soon as the main menu has
  580. Xbeen displayed.
  581. X.br
  582. XInstead of having the user type (G "return" menuname "return") try 
  583. X(control g).
  584. X
  585. XWarning:
  586. X.br
  587. XThis should not be used to goto a pop-up (.POPMENU) type menu.  It doesn't
  588. Xwork too well.  If your .MENU calls a .GETINPUT screen or sets environment
  589. Xvariables before it calls the menu those will not be called if you use a
  590. Xgoto for that menu.
  591. X
  592. XNot supported in a \fI.POPMENU\fP menu.
  593. X. \ --------------------------------------------------------------------------
  594. X
  595. X.PP
  596. X \fB.INCLUDE\fP menufile
  597. X.IP "" 6
  598. XInclude a menu script file.  This is so you don't have to type the same 
  599. Xscreen definition in all the menu files that you want to use it in.
  600. XAlthough, it could be used for any menufile.
  601. XIt is significant where you place the .INCLUDE in your menufile, depending on
  602. Xwhat is in the .INCLUDE menufile.  Think of it as if you were typing it in
  603. Xat this point in the menu file.
  604. X
  605. XThe file is looked for first in the current directory and
  606. Xthen in \fI$MENUDIR\fP.  The \fImenufile\fP may be a environment variable or 
  607. Xabsolute pathname of the file.
  608. X. \ --------------------------------------------------------------------------
  609. X
  610. X.PP
  611. X \fB.LINE\fP [ StandoutLine ] [ DumbLine ]
  612. X.IP "" 6
  613. XDraws a standout line underneath your last title line to
  614. Xsplit the options portion of the screen from the title portion.
  615. XPlace after last \fI.TITLE\fP.
  616. X.br
  617. XSee .BOX for description of line types.
  618. X
  619. XNot supported in a \fI.POPMENU\fP menu.
  620. X. \ --------------------------------------------------------------------------
  621. X
  622. X.PP
  623. X.nf
  624. X \fB.MENU\fP menufile  [ [!]variable=value ... ]  [ GETINPUT screen_name ]  [ [!]variable=value  ... ]   [ \\ ]
  625. X Option description text.
  626. X.fi
  627. X.IP "" 6
  628. XDefines this option as a sub-menu.  When user selects this option
  629. Xthe menu defined in "menufile" will be parsed and displayed.
  630. X
  631. XThe [ GETINPUT ] option allows you to display a screen and prompt a user for
  632. Xinput.  The screen is displayed before parsing of the new menu is begun.
  633. XThis could be used to prompt a user for a password with a .UNIX in the calling
  634. Xmenu using checkpass(1) to check permission to run the menu.
  635. XCompliments of Victoria.
  636. X
  637. XA environment variable may be specified in the Option description text.
  638. X.br
  639. X
  640. XThe optional variables are environment variables that will be set equal to
  641. Xthe value specified when the user selects this option.  
  642. XPlacing them before or after a GETINPUT call causes them to be set either
  643. Xbefore or after the GETINPUT screen is called.
  644. XThis can be used
  645. Xto pass data to a sub menu.  Maximum length of the .MENU line is 700 bytes.
  646. X
  647. XNot supported in a \fI.POPMENU\fP menu.
  648. X. \ --------------------------------------------------------------------------
  649. X
  650. X.PP
  651. X.nf
  652. X \fB.POPMENU\fP [ NoDim ] menufile [ row column ] [ [!]variable=value  ... ]  [ \\ ]
  653. X Option description text.
  654. X.fi
  655. X.IP "" 6
  656. XDefines this option as a pop-up menu.  When user selects this option
  657. Xthe script file "menufile" will be parsed and displayed.  
  658. XThe optional row and column (upper left corner) is where you want the pop-up 
  659. Xmenu to pop-up.  If row and column is omitted then the menu will be placed
  660. Xas close to the option, that is selecting it, as possible.
  661. XSee \fI.SETENV\fP for \fIvariable=value\fP.
  662. X
  663. XThe [ NoDim ] flag tells menu not to dim the box on a inactive menu.  The
  664. Xdefault is to dim inactive menus.  That way the user can easily see what
  665. Xmenu they are working with.
  666. X
  667. XA environment variable may be specified in the Option description text.
  668. X
  669. XThe options in a pop-up menu can be selected by hi-lighting the option
  670. Xand pressing return, or ESC to cancel.  The pop-up menu goes away after
  671. Xan option has been selected and you are put back in your calling menu 
  672. X(the calling menu is reparsed).
  673. XThis keyword was provided for those options where the user would go over to
  674. Xa menu select an item then return back.  A printer select menu would be ideal
  675. Xfor this keyword.
  676. X
  677. XYou can toggle between full character matching and single (first) character
  678. Xmatching by pressing KEY_IC/KeyIC key.
  679. X. \ --------------------------------------------------------------------------
  680. X
  681. X.PP
  682. X.nf
  683. X \fB.SETENV\fP  [ BELL ] [!]variable=value [ [!]variable=value ... ] [ message ]   [ \\ ]
  684. X Option description text.
  685. X.fi
  686. X.IP "" 6
  687. XWhen the user selects this option it will set
  688. Xa variable to a value in the the current environment (i.e. the menu
  689. Xenvironment).  This is useful if you want something like a printer menu
  690. Xlisting available printers and changing the $LPDEST so all print jobs
  691. Xwill go to the new printer.
  692. XThe \fImessage\fP argument is what is printed to the screen so the user
  693. Xcan get feed back that his selection did something.
  694. XThe \fIBELL\fP argument provides an audible beep if the variables were
  695. Xset successfully.
  696. X
  697. Xnote:
  698. X.br
  699. X      If the message has a "=" sign in it menu will think it is a
  700. X      "variable=value" and will try to set a environment variable.
  701. X. \ --------------------------------------------------------------------------
  702. X
  703. X.PP
  704. X.nf
  705. X \fB.SPACE\fP
  706. X.fi
  707. X.IP "" 6
  708. XPut a space in between options.
  709. X
  710. XNot supported in a \fI.POPMENU\fP menu.
  711. X. \ --------------------------------------------------------------------------
  712. X
  713. X.PP
  714. X.nf
  715. X \fB.SYSTEM\fP [ [ variable=value ... ] GETINPUT screen_name ] command   [ \\ ]
  716. X Option description text.
  717. X.fi
  718. X.IP "" 6
  719. XDefines this option as a system call.  When user selects this option
  720. Xa system call will be executed, with command as the argument. Since the command
  721. Xis a argument to system(3S) anything you can type at the $ prompt you can
  722. Xput in the command.
  723. XMaximum length of \fIcommand\fP is 1k.
  724. XA environment variable may be specified in the Option description text.
  725. X
  726. XThe [ GETINPUT ] option allows you to display a screen and prompt a user for
  727. Xinput that could be used as command line arguments to the command.  
  728. XThe screen_name is a defined screen name.
  729. XSee .GETINPUT and .DEFINE_SCREEN for more information.
  730. X.br
  731. XThe optional \fIvariable=value\fP arguments associated with the GETINPUT
  732. Xare set at runtime, when the user selects this option.  This could be
  733. Xused to have a dynamic window_title in your GETINPUT screen.
  734. X
  735. XExample: Say you need to prompt the user for a $DATA field then pass that 
  736. Xfield into
  737. Xyour program, lock the program so that program cannot be run until this one 
  738. Xfinishes
  739. Xand you want to kick the program off in the back ground.  You
  740. Xcould try something like this (see lock(1),unlock(1)):
  741. X.nf
  742. X   .SYSTEM     GETINPUT  screen1 \\
  743. X        lock program_name; \\
  744. X        if [ $? -eq 0 ] \\
  745. X           then    (nohup program_name $DATA; nohup unlock program_name)& \\
  746. X           else    echo "Program Already Running."; \\
  747. X            echo "Press [ Return ] to continue ...\\c"; \\
  748. X            read reply \\
  749. X        fi
  750. X   Option Description Text.
  751. X
  752. X
  753. X
  754. XNote: No error checking is done for \fIcommand\fP.  If error checking is
  755. Ximportant for your application you will need to build it into 
  756. Xyour \fIcommand\fP.
  757. X.fi
  758. X. \ --------------------------------------------------------------------------
  759. X
  760. X.PP
  761. X.nf
  762. X \fB.TEXT\fP [-]row [-]column
  763. X Text goes on this line.
  764. X.fi
  765. X.IP "" 6
  766. XAllows you to put any text at a specified row and column on the \fIstdscr\fP 
  767. Xscreen (base 0).
  768. XA negative row and/or column indicates number of rows from the bottom of the
  769. Xscreen or number of columns from the right of the screen (relative addressing).
  770. XFor example, \fI.TEXT -4 -20\fP will display text on the 4th row from the
  771. Xbottom and the 20th column from the right.  This could be useful if your users
  772. Xare using different sized terminals/windows.  If the row and/or column are 
  773. Xgreater than the window size the text will get displayed on the last row or
  774. Xlast column of the screen.
  775. X
  776. XThis keyword could be used to
  777. Xplace a prompt text next to the cursor.  The \fI.TEXT\fP is only active for
  778. Xthe current menu.  If you want the same text to appear in every menu you
  779. Xwill need to put a \fI.TEXT\fP in every menu.
  780. XTerminal attributes may be placed in the text line (see Terminal Attributes).
  781. X
  782. XA environment variable may be specified within the text.
  783. X
  784. XThe last line of the screen is used to report error messages, like 
  785. X\fIInvalid Option\fP.  Your text will probably get erased if put on the last
  786. Xline.
  787. X. \ --------------------------------------------------------------------------
  788. X
  789. X.PP
  790. X.nf
  791. X \fB.TITLE\fP
  792. X Title Line text.
  793. X.fi
  794. X.IP "" 6
  795. XDisplay a title line top of menu.
  796. XTitle lines will start at row zero.
  797. XMultiple .TITLE lines may be defined up to MAXTITLE (6) defined in
  798. Xmenu.h file.
  799. X
  800. XThe title line consists of three sections defined as follows:
  801. X.br
  802. Xleft text...center text...right text
  803. X.br
  804. XText you place in the three sections will be either left justified,
  805. Xcentered, or right justified on the screen.  The "\fB...\fP" are used to
  806. Xseparate the sections.
  807. X
  808. X.RS 6
  809. X.PP
  810. XA substitutable variable may be specified within the title line text.
  811. XThe character $ is used to introduce substitutable 
  812. Xparameters, in the form of ${\fIparameter\fP}.
  813. XThe value, if any, of the \fIparameter\fP is substituted.  The braces are 
  814. Xrequired only when \fIparameter\fP is followed by a letter, digit, or 
  815. Xunderscore that is not to be interpreted as part of its name.  See sh(1) 
  816. Xfor more info.
  817. X.TP 6
  818. X$DATE
  819. Xmay be placed anywhere in title text and the system date (mm/dd/yy) will
  820. Xbe displayed.
  821. X.TP 6
  822. X$TIME
  823. Xmay be placed anywhere in title text and the system time (hh:mm zz) will 
  824. Xbe displayed.
  825. X
  826. X.TP 6
  827. X$MAIL
  828. XThe \fI$MAIL\fP is a special environment variable.  This turns on the mail
  829. Xnotification facility.  $MAIL may be placed anywhere in the title text and when
  830. Xthe user has mail to be read the word "\fBMAIL\fP" will be displayed in
  831. Xreverse video at that location in the title line, with an audible beep.
  832. XThe MAIL environment variable needs to be set to the users mail file, ex.
  833. X"MAIL=/usr/mail/pjc".  The environment variable \fIMAILCHECK\fP is used to
  834. Xdetermine how often to check for mail.  See mail(1).
  835. X.br
  836. XIf you have a hierarchy of menus for your application \fI$MAIL\fP only needs
  837. Xto be in the first menu.
  838. X
  839. XWarning: If menu is run with the set uid bit set, menu will be unable to
  840. Xdetermine if your mail is being forwarded, because it won't have read
  841. Xpermission on your mail file, and \fIMAIL\fP will be displayed all the time
  842. Xon machines where you forward your mail.
  843. X.TP
  844. XTerminal Attributes
  845. XAttributes may be specified anywhere in the title text as follows:
  846. X.nf
  847. X\\S = Standout
  848. X\\B = Bold
  849. X\\U = Underline
  850. X\\D = Dim
  851. X\\R = Reverse Video
  852. X\\L = Blink
  853. X\\N = Normal
  854. X
  855. Xexample: \\RThis text is reverse video.\\N Now normal.
  856. X
  857. Xnote: Terminal attributes are terminal dependent.
  858. XBerkeleys' version of curses only supports Standout.  Attributes may
  859. Xalso be combined.
  860. X.fi
  861. X
  862. XFor \fI.POPMENU\fP there is no left,center,right sections.  The title is
  863. Xcentered.  You can have only one \fI.TITLE\fP in a pop-up menu.  No attributes
  864. Xand/or environment variables are supported in the title for pop-up menus.
  865. X.RE
  866. X. \ --------------------------------------------------------------------------
  867. X
  868. X.PP
  869. X \fB.UNIX\fP  [ REDRAW ]  [ GETINPUT screen_name ]  command  [ \\ ]
  870. X.IP "" 6
  871. XA system(3) call with command as the argument is executed immediately 
  872. Xwhen found while parsing the 
  873. Xmenufile.  Can be used to set function keys on terminal.  Warning: if
  874. Xyou use this to set function keys and the function keys are changed in
  875. Xanother program, they do not get reset back to what they were in the menu.
  876. XMaximum length of command is 700 characters.
  877. X
  878. XThe [ GETINPUT ] option allows you to display a screen and prompt a user for
  879. Xinput, before the command is run.
  880. XThe window_pos argument to DEFINE_SCREEN must be specified in order to use
  881. Xthe screen here, because, menu is unable to automatically figure out where to 
  882. Xput the screen because this is happing during the parsing stage.
  883. XAdditionally, the \fIDEFINE_SCREEN\fP must be declared before the \fI.UNIX\fP.
  884. X
  885. XThe [ REDRAW ] flag instructs menu to redraw the menu screen after your command
  886. Xhas been executed.  This is recommended if your command writes anything to
  887. Xthe screen.
  888. X
  889. XDiagnostics
  890. X.RS 10
  891. XThe following actions are taken by menu depending on what exit code your
  892. Xcommand uses.
  893. X.TP 8
  894. X0
  895. XAOK. Continue to parse the next keyword.
  896. X.TP 8
  897. X1
  898. XQuit/Exit the menu program.
  899. X.TP 8
  900. X4
  901. XReturn to previous menu and display the error message 
  902. X"Not Authorized to run menu.".
  903. X.TP 8
  904. X> 4
  905. XQuit parsing this menu and return to previous menu.  No message.
  906. X.RE
  907. X
  908. X.RS 6
  909. XExample:  Authorize menu access.
  910. X.nf
  911. X         .UNIX grep $LOGNAME access_table >/dev/null 2>/dev/null \\
  912. X        [ $? -ne 0 ] && exit 4 \\
  913. X        exit 0
  914. X.fi
  915. X
  916. XExample:  Build a menu script file at run time.
  917. X.nf
  918. X       ###  Printer Selection Menu
  919. X       ###  Build a .POPMENU of available printers connected to a system.
  920. X
  921. X          .UNIX echo ".TITLE" > printers.m; \\
  922. X             echo "Printer Menu" >> printers.m; \\
  923. X             echo ".TEXT 23 0" >> printers.m; \\
  924. X             echo "Select A Printer." >> printers.m; \\
  925. X             lpstat -p | awk '{ print $2 }' | \\
  926. X             for i in `cat` \\
  927. X             do \\
  928. X             echo ".SETENV LPDEST=$i  Printer ($i) selected." >>printers.m; \\
  929. X             echo "$i" >> printers.m; \\
  930. X             done; \\
  931. X             exit 0
  932. X
  933. X          .POPMENU printers.m
  934. X          Select Default Printer.
  935. X.fi
  936. X.RE
  937. X. \ --------------------------------------------------------------------------
  938. X
  939. X.PP
  940. X \fB.WINDOW\fP  first_row  last_row  first_col  last_col  [ heading ]
  941. X.IP "" 6
  942. XDefines a window area (rectangle) to display the options that follow this 
  943. Xkeyword (up to the next \fI.WINDOW\fP or end of file).
  944. XThe options are centered between first_row / last_row
  945. Xand between first_col / last_col.
  946. XThe \fIrows\fR and \fIcolumns\fR are absolute (base 0) and inclusive.  
  947. XIt is up to you
  948. Xto make sure they don't overlap (unless that's what you want), and
  949. Xthat it is large enough to hold the options that follow.
  950. XThe optional \fIheading\fR is text you wish centered over the window area
  951. X(rectangle).
  952. XIt is
  953. Xdisplayed on \fIfirst_row\fR minus one.
  954. XThe heading may contain terminal attributes as described under \fI.TITLE\fR.
  955. XYour \fI.WINDOW\fP keywords should be placed after all \fI.TITLE\fP(s).
  956. X.br
  957. XFor example suppose you want two columns of options on the screen, one
  958. Xof which will have a heading:
  959. X.nf
  960. X .WINDOW 0 23 0 39
  961. X1. this option in left column
  962. X2. this option in left column
  963. X .WINDOW 10 23 40 79 \\R REPORTS \\N
  964. X3. this option in right column
  965. X
  966. X.fi
  967. XIf no .WINDOW is used a default of .WINDOW 0 screen_rows 0 screen_cols 
  968. Xis used for all options.
  969. X
  970. XNot supported in a \fI.POPMENU\fP menu.
  971. X. \ --------------------------------------------------------------------------
  972. X
  973. X.SH HELP SCREENS
  974. XThe default help file for menu(1) is \fImenu.hlp\fP.  Additional help files
  975. Xmay be used in a GETINPUT screen.  The following describes the the syntax of
  976. Xa help file.
  977. X
  978. X\fBtagname\fP
  979. X.br
  980. X[ .TITLE   A Title May Be Placed Here. ]
  981. X.br
  982. XA tagname identifies a help screen and must be on a line by itself.
  983. X.br
  984. XThe text (with optional terminal attributes) to be displayed for this tagname 
  985. Xis placed between the two tags.  Don't use tabs to space the text 
  986. X(it don't work), you have to put in hard spaces.
  987. XMore than one tagname may be placed in a help file.
  988. XAny text outside of a tagname is ignored.
  989. X.br
  990. X\fBtagname\fP
  991. X
  992. X
  993. XThe \fITABLE_OF_CONTENTS\fP tagname is a special tag describing what
  994. Xis to be contained in the table of contents for help.  The following is the
  995. Xsyntax for this tagname.
  996. X.nf
  997. X\fBTABLE_OF_CONTENTS\fP
  998. Xhelpfile   tagname   description
  999. Xhelpfile   tagname   description
  1000. X    etc...
  1001. X\fBTABLE_OF_CONTENTS\fP
  1002. X.fi
  1003. X
  1004. X
  1005. XBelow is shown the default help file for menu(1)  (menu.hlp).
  1006. XIt has four tagnames in it (TABLE_OF_CONTENTS, menu, popmenu, GETINPUT 
  1007. Xand help).  This file may be customized to fit your needs.
  1008. X
  1009. X.nf
  1010. X\fBTABLE_OF_CONTENTS\fP
  1011. Xmenu.hlp    menu        Menus      - Help using menus.
  1012. Xmenu.hlp    popmenu    Pop-menus  - Help using popmenus.
  1013. Xmenu.hlp    GETINPUT    Input      - Editing commands.
  1014. Xmenu.hlp    help        Help       - Using help.
  1015. X\fBTABLE_OF_CONTENTS\fP
  1016. X
  1017. X
  1018. X\fBmenu\fP
  1019. X .TITLE Menu Help
  1020. X
  1021. X  \\RMENU COMMANDS:\\N
  1022. X          m       \\D-  Go directly to main menu.\\N
  1023. X          p       \\D-  Return to previous menu.\\N
  1024. X          g or ^g \\D-  Go directly to a specific menu.\\N
  1025. X          h or ?  \\D-  This help screen.\\N
  1026. X          ^r      \\D-  Redraw the screen.\\N
  1027. X          e       \\D-  Exit.\N
  1028. X          !       \\D-  Enter a unix command.\\N
  1029. X
  1030. X  \\RSELECTING OPTIONS:\\N
  1031. X          -  Use "up arrow key", "^k", "down arrow key", "^j" or
  1032. X             "tab key" to place bar on option and press "return".    
  1033. X
  1034. X                  or
  1035. X
  1036. X          -  Enter option number and press "return".
  1037. X
  1038. X\fBmenu\fP
  1039. X
  1040. X\fBpopmenu\fP
  1041. X .TITLE Pop-Up Menu Help
  1042. XSELECTING OPTIONS:
  1043. X    To select an option press the "up arrow key",
  1044. X    "k", "down arrow key", "j" to place bar on
  1045. X    option and press "return".
  1046. X
  1047. X    KEY_CANCEL (esc)   - Cancel selection.
  1048. X\fBpopmenu\fP
  1049. X
  1050. X\fBGETINPUT\fP
  1051. X .TITLE GETINPUT Help
  1052. XMover Keys:
  1053. X        KEY_RETURN  (^m)    Traverse forwards through the fields.
  1054. X    .
  1055. X    . (etc.  see GETINPUT)
  1056. X    .
  1057. X        KEY_PRINT  (^p)     Print screen to lp.
  1058. X\fBGETINPUT\fP
  1059. X
  1060. X\fBhelp\fP
  1061. X .TITLE Using Help
  1062. XHelp displays consist of a description displayed in a window.
  1063. XIf the description doesn't fit in the window, the Up Arrow and
  1064. XDown Arrow keys can be used to view a few more lines of the 
  1065. Xdisplay.  Exiting the help system will return the display to 
  1066. Xthe state it was in when you asked for help.
  1067. X
  1068. X   The following keys are active in help:
  1069. X        KEY_CANCEL  (esc)    Exit help.
  1070. X        KEY_DOWN  (^j)    View a few more lines.
  1071. X        KEY_UP  (^k)    View the previous lines.
  1072. X        KEY_BEG  (^b)    Display first page.
  1073. X        KEY_END  (^e)    Display last page.
  1074. X        KEY_TOC  (^t)    Display help table of contents.
  1075. X\fBhelp\fP
  1076. X.fi
  1077. X
  1078. X.SH MENU INITIALIZATION FILE - (.menuinit)
  1079. XA menu initialization file can be provided that
  1080. Xcontains initialization commands
  1081. Xto menu.  This file is read when menu is first started.  The \fI.menuinit\fP
  1082. Xfile is first looked for in the current directory then in getenv("HOME")
  1083. Xthen in getenv("MENUDIR").  This file is not needed if the default settings 
  1084. Xsuffice.  
  1085. X
  1086. XBelow is listed a .menuinit 
  1087. Xfile with all the various initialization commands and their associated default 
  1088. Xvalue.  The decimal value is what is returned from a curses getch() call.  
  1089. X\fITry menu  -keys\fP.  Setting a key value to minus one disables the key, 
  1090. Xalthough the associated curses key, if any, is still active.
  1091. X
  1092. XNote: Menu(1) does character matching (case insensitive) on the option
  1093. Xdescription,
  1094. Xin addition to entering the number
  1095. Xof the option, to select a option.  The character matching is done after it
  1096. Xhas checked for any of the following keys.  So, for example, if you use the
  1097. Xdefault setting for KEY_EXITMENU (e) and you have a option titled "Enter ...".
  1098. XThe user will not be able to press a "e" for character matching on "Enter ...".
  1099. XThe exit menu process will be enabled.  This should be considered in
  1100. Xselecting your key values if full character matching is important.
  1101. X
  1102. X
  1103. X.nf
  1104. X     KEY_EXITMENU = 101    # (e)   Exit Menu Program.
  1105. X     KEY_MAINMENU = 109    # (m)   Go to main menu.
  1106. X     KEY_PREVMENU = 112    # (p)   Go to previous menu.
  1107. X     HOTKEYS            #       This causes the above menu keys to work without a carriage return.
  1108. X
  1109. X     KEY_GNAME = 103    # (g)   Go to a specific menu prompt.
  1110. X     KEY_POPGNAME = 7    # (^g)  Display "\fIGoto Menu\fP", GNAME pop menu.
  1111. X     KEY_RETURN = 13    # (^m)  Select hi-lighted menu option or traverse forwards through GETINPUT fields.
  1112. X     KEY_DOWN = 10    # (^j)  Traverse forwards through menu options or GETINPUT fields.
  1113. X                       Scroll help screen.
  1114. X     KEY_UP = 11        # (^k)  Traverse backwards through menu options or GETINPUT fields.
  1115. X                       Scroll help screen.
  1116. X     KEY_TAB = 9    # (^i)  Fast forward through menu options or GETINPUT fields.
  1117. X     KEY_BTAB = -1    #        Fast reverse through menu options or GETINPUT fields.
  1118. X     KEY_BEG = 2    # (^b)  Place cursor at beginning of a GETINPUT field.
  1119. X                       Display first page of help screen.
  1120. X     KEY_END = 5    # (^e)  Place cursor at end of input in a GETINPUT field.
  1121. X                       Display last page of help screen.
  1122. X     KEY_RIGHT = 12    # (^l)  Forward space within the GETINPUT field.
  1123. X     KEY_LEFT = 8    # (^h)  Backspace within the GETINPUT field (non-destructive).
  1124. X     KEY_BACKSPACE = 8    # (^h)  Same as KEY_LEFT.
  1125. X     KEY_EOL = 4    # (^d)  Delete from cursor to end of GETINPUT field.
  1126. X     KEY_DL = 3        # (^c)  Clear GETINPUT field and home cursor.
  1127. X     KEY_DC = 24    # (^x)  Delete a character in a GETINPUT field.
  1128. X     KEY_IC = 20        # (^t)  Toggle between type-over and insert mode in GETINPUT.
  1129. X     KEY_HELP = 63    # (?)  Display help screen.
  1130. X     KEY_TOC = 20    # (^t)  When in help display table of contents for help.
  1131. X     KEY_REFRESH = 18    # (^r)  Redraw the screen.
  1132. X     KEY_ACCEPT = 1    # (^a)  Accept all input from a GETINPUT screen.
  1133. SHAR_EOF
  1134. echo "End of part 2"
  1135. echo "File menu.1 is continued in part 3"
  1136. echo "3" > s2_seq_.tmp
  1137. exit 0
  1138.