This chapter describes the Form and Menu Language Interpreter at a general level. There are four major sections:
The Form and Menu Language Interpreter provides a framework for developers to write applications and application interfaces that use menus and forms. It controls many aspects of screen management for you. That means that you do not have to be concerned with the low-level details of creating or placing frames, providing users with a means of navigating between or within frames, or precessing the user of forms and menus. Nor do you need to worry about what king of terminal your application will be run on. FMLI takes care of all that for you.
FMLI is a high-level programming tool having two main parts:
The following figure shows the configuration of the screen when an FMLI application is running.
FMLI divides the screen into the following five regions:
Banner Line
The banner line displays a one line banner on the top line of the screen. By default, it displays a "working" icon when FMLI is busy. You can, however,. redefine the banner line in the initialization file.
Work Area
The work area is the section of the screen where frames are displayed. (A frame is an independently scrollable region of the screen surrounded by a border. Frames are defined in detail in the next section, "Frames.") This area starts on the second line of the screen and stops on the third line from the bottom of the screen.
CAUTION: If a terminal supports hardware function keys, FMLI will use the last line of the screen to display function key labels. The developer should be aware of this since the size of the work area will be decreased by one line (that is, it will stop on the fourth line from the bottom) to make room for these labels.
Message Line
The message line is the second line from the bottom of the screen. Messages generated by FMLI, or which you generate in your scripts, are displayed here. By default, a message remains on the message line until the next key is pressed; however, you can define messages that will remain on display permanently, or until other user actions occur, such as navigation to another frame.
Command Line
The command line is the next to last line on the screen. Users access it by pressing CTRL-j, or CTRL-f c, at which time a --> prompt appears flush left on the line. Any FMLI command, application -specific command, or UNIX System V executable can be executed from the command line.
Screen-labels for function keys (SLKs)
The last line of the screen displays screen-labels which correspond to the eight function keys (SLKs) found on many keyboards. SLKs allow users to perform functions easily by pressing one key. FMLI provides two sets of screen-labels for the function keys. Your scripts control which set is displayed at any given time. FMLI predefines the SLKs in the first set, assigning each a default screen-label and function depending on the type of frame active at the moment. The alternate set is not predefined--you can define this set specifically for your application. In the first set, you can rename or disable function keys F1 through F7 (but they cannot be redefined), and function key F8 can be redefined. In the second set, you can define application-specific commands for function keys F9 through F16. Keep in mind, though, that if you redefine key F8 or F16 to be something other than CHG-KEYS, your users will lose the ability to access the alternate set of function keys.
Since some keyboards do not have function keys, FMLI predefines "alternate keystrokes" that are equivalent to function keys. (By default, FMLI attempts to download alternate keystroke definitions into the function keys on some terminals. See "Programming Tips and Known Problems", for information on how and why this is done, and how you can disable this behavior.)
A frame is an independently scrollabe portion of the work area surrounded by a border. By default, the dimensions of a frame are determined by FMLI, and it is positioned in the work area so that overlap of other frames is minimized. Several frames may be open simultaneously in the work area; however, only one frame can be current at any given time.
The current frame is the frame a user is currently working in. It is distinguished from other frames in the work area by its border (and all features in its border) being displayed in full bright video attribute, while non-current frames are displayed in half-bright video. (On terminals that do not have the half-bright video attribute, non-current frames are displayed differently; for example, they may be displayed in inverse video.) Input from the user applies to the current frame. The current frame may cover parts of other frames in the work area.
All menu, form, and text frames can display the following features:
Title Bar
Each frame displays a title bar in its top border. The title bar contains a frame ID number, assigned to the frame by FMLI, and the title of the frame (an FMLI default title, or one you define).
Scroll Box
Each frame that displays three or more lines of information displays a scroll box in its right border. A scroll box can house both an up symbol (^) and a down symbol (v). If present, these scroll symbols indicate to the user that there is more information before (^) or after (v) the information currently displayed in the frame. For example, only the up symbol (^) will appear in the scroll box when a user is viewing page two of a two page form. A scroll box is only displayed when a frame contains three or more lines of information. A scroll box will be blank when all the information in the frame is currently visible.
Scroll Symbols in the Bottom Border
The scroll symbols will also appear on the lower right border of a form frame if the current field has been defined to be multi-line and scrollable.
Typically, the scripts for an FMLI application include a set of frame definition files, each defining a single menu, form or text frame. These files define the frames users will see when they execute your FMLI application, and the operations that can be done in frames. In addition, most FMLI applications include three (optional) application level definition files: an initialization file, a commands file, and an alias file. These files define global features of your application, such as the colors of various screen elements, application-specific commands; and aliases for pathnames that can make your code easier to read and maintain.
A frame definition file is an ASCII file in which you define a frame using the Form and Menu Language. Three types of frames can be defined in FMLI: menu frames, form frames, and text frames. FMLI recognizes the type of frame you are defining based on the contents of the frame definition file, and certain file naming conventions. The following sections briefly describe these three types of frames. Detailed explanations of how to write frame definition files can be found in Chapter 3.
A menu in FMLI is a method for displaying a list of selections in a frame, determining the user's selection, and taking action based on the selection. The title bar of a menu frame displays a default name for the menu (Menu), or one you define, and an identification number assigned to the frame by FMLI. By default, FMLI presents menus with 10 or fewer items in a single, left-justified column. When the number of items is greater than 10, FMLI automatically creates a multi-column menu, using an algorithm that attempts to display 3 times as many columns as rows. The number of items in the menu determines the number and height of each column. However, you can explicitly define the number of rows and columns you want in a menu.
If there are too many items for the entire menu to fit on the screen at once, the menu will be presented as a single column menu, and will be scrollable. (See Appendix A,"Programming Tips and Known Problems", for a table describing the way FMLI calculates rows and columns for menus.) If either of the scroll symbols (^ for up and v for down) appears in the scroll box in the right-hand border of the frame, the named keys SCROLL-UP and SCROLL-DOWN will work in addition to the other menu navigation keys. If a menu is scrollable, many of the menu navigation keys support wrapping. (See Appendix B, "Named Keys and Alternate Keystrokes" for complete descriptions of how navigation keys work.)
Single-Select and Multi-Select Menus You can define a menu to be either single-select or multi-select. In a single-select menu, a user can select only one item. When the user presses ENTER, backquoted expressions and the FMLI command associated with the item the cursor is positioned on are immediately evaluated and executed, respectively.
In a multi-select menu, a user can "mark" more than one item as selections. A marked menu item is indicated by an asterisk (*) to the left of the item. In multi-select menus, a user presses MARK to mark an item, and backquoted expressions associated with the item are evaluated immediately; however, any FMLI command associated with the marked item is ignored. After having marked all desired items, the user presses ENTER, and the done descriptor is evaluated. (Backquoted expressions, descriptors, and FMLI commands are discussed in Chapter 2, "The Form and Menu Language").
A form is a method for displaying and prompting for information. The title bar of a form frame displays a default name for the form (Form), or one you define, and a frame ID number assigned to the frame by FMLI. A form comprises fields, which have two parts: a field label (the name of the field); and an area in which to enter a value for the field. You can validate the value a user enters in a field: if you define a validation test for a field, the user will not be able to navigate to another field, or save the form, until the value passes the validation test.
You can define the field input area to be multiple lines and/or scrollable. If it is scrollable, scroll symbols will appear at the right in the bottom border of the frame when the cursor is positioned on a multi-line field, or in the field input area if the field is a single-line field. To the user, a form looks like a fill-in-the-blanks questionnaire. The navigation keays tha can be used to navigate in a form frame and to edit form fields are described in Appendix B, "Table of Named Keys and Alternate Keystrokes."
Multipage Forms A form can be more than one page long. If it is, the first page is displayed when the form frame is first opened. The up and down symbols in the scroll box are the devices used by FMLI to inform users that they are positioned on the first page, the last page, or one of the middle pages of a form. If you want give your users more precise information about the particular view, you must define that information in the form frame definition file. Chapter 3, "Frame Definition Files", explains how to include a message, such as Page 2 of , in a form.
Choices Menu A Choices menu is a way to show users to valid choices for a field in a form. When you define a Choices menu for a field, you can choose whether the user will toggle through the choices in the field itself, or whether the choices will be displayed in a pop-up menu. In either case, a Choices menu is accessed by the FMLI command choices, (mapped by default to function key F2).
When a user selects a value from a Choices menu, it is automatically entered in the field to which the Choices menu applies. The menu navigation keys described in Appendix B can be used in a Choices menu, but users should be warned that if they navigate away from a Choices menu it disappears immediately.
Text frames are primarily used to display read-only information, such as on-line help for the user. The title bar of a text frame displays a default name for the frame (Text) or one you define, and a frame ID number assigned to the frame by FMLI. If either of the scroll symbols (^ or v) appear in a scroll box on the right-hand border of the frame, the SCROLL-UP and SCROLL-DOWN keys will work in addition to the other text frame navigation keys. This behavior is automatic if all the text you have defined will not fit in the frame. You can define a text frame to be "editable." That is, users can change the displayed text using text frame editing keys (see Appendix B).
Application level definition files define attributes of the application as a whole. There are three optional application level files: The initialization file and the commands file allow you to customize the appearance and functionality of your entire application, and the alias file allows you to streamline references to source files in your code. The following sections briefly describe these three application level definition files. Detailed explanations of how to write them can be found in Chapter 4.
An initialization file defines attributes of the application as a whole. You can define an introductory frame (such as a copyright notice), changes to the default banner line, the colors of various elements of the FMLI screen, whether users will be able to access the UNIX system directly for your application, and the names displayed on and commands assigned to screen labeled keys, among other things.
A commands file allows you to define new commands for users of your application, as well as redefine or disable existing FMLI commands. The contents of the commands file will be reflected in the FMLI Command Menu (discussed in the next section of this chapter), and commands defined therein can also be executed on the FMLI command line by users of your application.
An alias file contains lines of the form alias=pathname. An alias can be assigned a single path to a file or device, or it can be assigned a series of paths to be searched (similar to the way $PATH is searched in the UNIX shell). Using aliases will make the code in your other definition files more readable.
FMLI Release 4.0 uses the UNIX System V Release 4.0 terminfo database to determine the values of terminal-dependent capabilities. The default path to this database is /usr/share/lib/terminfo if the environment variable TERMINFO is not set. New terminals not described in this database can be added to the terminfo database under the proper sub-directory named by the first character in the terminal's name. For example, the 5425 terminal description would be in $TERMINFO/5/5425.
To ensure that the terminal is initialized properly for your FMLI application, include the command
tput init
in the executable or script that invokes your application. If you choose not to do that, the documentation for your application should remind users to place this command in their .profile file after the TERM variable is set and exported.
NOTE: Terminal attribute settings can be lost when a user returns to an FMLI application after having used a full-screen application executed via the FMLI run built-in utility. To prevent this from happening, the full-screen application can execute tput init before returning to FMLI.
FMLI will work on any asynchronous terminal that:
It may be possible to run FMLI on smaller screens if you define the size and position of frames to fit within the screen's limits. However, some elements of screen layout, such as the screen labels for the function keys, may be truncated.
In the case of an abnormal termination of an FMLI application, users can execute
CTRL-j stty sane
to restore the screen. Until this is done, user input might not display on the screen, giving the appearance that the computer is "hung," or down. If the user executes this command to recover, it will also be necessary to execute
CTRL-j stty tab3
to ensure a sane screen. (Borders of frames may be distorted otherwise.)
NOTE: By default, FMLI attempts to download alternate keystroke definitions into the function keys on some terminals. See Appendix A, "Programming Tips and Known Problems", for information on how and why this is done, and how you can disable this behavior.
Here is an example FMLI application consisting of a menu frame definition file, named Menu.sample, and a text frame definition file, named Text.welcome:
menu=TOP MENU name=date action=`date | message'nop name=welcome action=open Text.welcome name=exit action=exit
The file Menu.sample is named according to the conventions defined for FMLI frame definition files (Chapter 2 contains a complete discussion of file naming conventions), and defines the initial frame to be opened when this example application is run.
The first line of code is an FMLI descriptor, menu, which is used to define a title to appear in the title bar of the menu frame. Many FMLI descriptors have a default value that will be used if you do not explicitly define the descriptor in the frame definition file. If the menu descriptor were not defined in this file, the title of the menu would default to Menu.
The next two lines of code define the first menu item. The name that will appear in the menu for this item is defined by the name descriptor. The action descriptor defines what will happen when a user selects the item date from this menu: the UNIX system date(1) command will be run and the output will be piped to the FMLI built-in utility message(1F), which displays the output of date on the FMLI message lines. nop is an FMLI command which does nothing (no operation), but which must be present because FMLI expects the action descriptor to ultimately evaluate to an FMLI command. If if doesn't, the terminal will beep.
The second item defines the name of this menu item to be welcome and the action to execute when welcome is selected is to open another frame in the work area--in this case a text frame, Text.welcome), which displays a welcome message. The next example shows the contents of the text frame definition file, Text.welcome.
The third menu item defines name to be exit. The action that will be executed when the user selects this item is to run the FMLI command exit. The will result in the termination of the FMLI session, and return the user to the UNIX shell.
title="WELCOME" rows=3 text="Welcome to my application. I hop you enjoy yourself while you are using it."
The file Text.welcome is named according to the conventions for text frame definition files, and defines a text frame. The title descriptor defines the title that will appear in the title bar of the text frame, in this case, WELCOME. The rows descriptor defines the vertical size of the text frame (in lines of text). The width of the frame in this example is determined by FMLI. (See Appendix A, "Programming Tips and Known Problems" for a discussion of how FMLI calculates rows and columns for frames.) The text descriptor defines the words that will be printed in the body of the text frame.
To execute this application the fmli command is invoked as follows:
fmli Menu.sample
In this example, Menu.sample is specified as the initial frame to open. An initial frame is a frame that is opened as an argument to fmli when it is invoked. There can be more than one initial frame, and all initial frames remain displayed in the work area for the entire length of time this application is running (that is, a user cannot close, or cancel, and initial frame.).
To exit from this FMLI application, a user can select exit from TOP MENU, because the FMLI command exit has been defined as a menu item. An alternative way to exit from any FMLI application is to press CTRL-j (or CTRL-f c) to access the FMLI command lines, then type exit.
In the next section, this example application will server to illustrate how an FMLI application appears to users. You can create copies of Menu.sample and Text.welcome in your file system, and execute the fmli command as shown above if you want to supplement the discussion which follows with a hands-on example.
This section discusses the "look and feel" of an FMLI application. It covers the way menus, forms, and text frames and other visual elements of the FMLI screen environment are presented (the look), the basics of navigation, the ways commands can be executed, the functions assigned by default to named keyboard keys, and how to use sequences of alternate keystrokes in the event named keys do not work, or exist, on a keyboard (the feel).
This information is important for two reasons. First, so that you understand the features that "come for free" with an FMLI application; thus enabling you to design your application to take advantage of those features. Second, to summarize information on the use of an FMLI application that you will need to include in your user documents. We can't help you describe what's in your menus, forms, and text frames, but we can help you describe the features that should be common to any FMLI application: navigating in and between frames, making menu selections, executing commands, and getting help.
When you execute the command fmli Menu.sample, given the FMLI scripts just discussed, the following figure shows what the terminal screen will look like.
This application illustrates most of the aspects of screen and frame style enforced by FMLI. (Screen and frame style refers to the way these elements are presented to users when an FMLI application is running. For more information on guidelines you should follow when customizing the default appearance of your FMLI application, see the Character User Interface Style Guide.)
The figure above shows how the screen layout shown earlier is implemented in FMLI. Since the frame opened initially in this example is a menu frame, the frame itself and the screen labels on the last line of the screen show the default appearance when a menu frame is current. The banner line (top line of the screen) is currently blank, but while this application was being loaded, you may have noticed the word Working appeared at the right on the banner line. The banner line is blank by default, except for the Working indicator. But, you can define the banner line to display more information, and you can change the Working indicator. (See Chapter 4, "Application Level Files", and the indicator(1F) manual page for more information.)
The menu frame defined in Menu.sample and named on the fmli command line as the initial frame to open is displayed in the work area. The title bar of the frame displays the menu title and a frame ID number (assigned automatically by FMLI). Each item defined in Menu.sample is listed in the order in which it was defined, and the highlighting mechanisms supplied by FMLI (inverse video, or the > symbol, or both), show where the cursor is currently positioned. A scroll bar appears in the right hand frame border because there are three items in this menu, although no scrolling symbols are shown because the entire menu can fit in the frame at one time.
The two lines immediately above the display of screen labels for the function keys are the message line and the command line, although nothing is displayed on them at this point. You can press CTRL-j or CTRL-f c to navigate to the command line. Press ENTER or CTRL-j again to leave the command line without executing a command.
The default set of screen-labels for the function keys when the current frame is a menu (the defaults are different when a form frame or text frame is current) is displayed on the last line of the screen. A complete discussion of screen-labeled function keys (SLKs) and how to define, disable, or redefine them is contained in Chapter 4.
The features discussed in the following sections are general to all FMLI applications. They will be explained in the context of the example application just discussed.
Named keys are the keys on terminal keyboards that do something other than print an alphanumeric or special character. Named keys include ENTER, TAB, DEL, and the function keys F1 through F8. A complete table of the named keys that are recognized by FMLI (using terminfo) is provided in Appendix B, and summarizes the action that will occur when these keys are pressed in menus, forms, and text frames.
Many terminal keyboards will not have a complete selection of the named keys defined by FMLI. If a keyboard does not have a specific named key discussed in this document, users can use a sequence of alternate keystrokes. A sequence of alternate keystrokes is two or three keys that, when typed, are equivalent to pressing the named key. For example, if a user of this application wanted to open the FMLI Command Menu, mapped by default to function key F7, and the keyboard being used does not have function keys, the user can type the sequence of alternate keystrokes CTRL-f 7 instead. The alternate keystrokes for each named key are also given in Appendix B. (By default, FMLI attempts to download alternate keystroke definitions into the function keys on some terminals. See Appendix A, "Programming Tips and Known Problems", for information on how and why this is done, and how you can disable this behavior.)
Some of the named keys are reserved for navigation during an FMLI session. Navigation keys are named keys that, when pressed, cause the cursor to move. The default action assigned to a navigation key changes depending on whether you are in a menu, a form, or a text frame. For example, the named key BEG, or the alternate keystrokes CTRL-b, work as follows in the three types of frames:
The default action assigned to BEG in these three cases has a common element (moving to the beginning), but the implementation varies according to what kinds of things users need to do in each type of frame. Appendix B is a summary table of all the named keys and their alternate keystrokes available in menu frames, form frames, and text frames.
There are two methods of navigating within a menu frame. One is to use a navigation key. As an example of how navigation keys work, you can try the menu navigation keys in the menu whose title is TOP MENU, defined in this example. The following list shows some of the keys that are used for navigation within a menu (the complete set is described in Appendix B).
As you navigate within the menu, the FMLI highlighting mechanisms (inverse video and the > symbol to the left of the item) show which menu item is current.
The other method of navigating in a menu frame is to type the name of the item to which you want to move. You don't have to type the full name, or worry about upper case and lower case. When you type a character, the cursor moves to the first item in the menu that matches the string typed so far. If you type the letter w, for example, the cursor moves to the first menu item that starts with w or W. If you then type r, the cursor moves to the first item that starts with the letters wr. When a string cannot be matched, the terminal bell sounds, or the screen flashes, depending on the terminal, and an error message is displayed on the message line. The cursor wraps around when it reaches either end of the menu, regardless of whether you are traveling up or down in the menu.
NOTE: If you start to type the name of a menu item and the cursor moves, and you then decide to select something else, you must use BACKSPACE to "erase" the characters already typed, or press one of the navigation keys before character matching can be used again.
Once the cursor is positioned on the desired item, it can be selected by pressing ENTER.
NOTE: Depending on the keyboard being used, the carriage return key may be called ENTER, RETURN, or something else. If your keyboard only has a RETURN key, use it or CTRL-m instead.
You can try this now, if you are running the example application, by navigating to the item welcome and pressing the key labeled ENTER.
Notice that the text frame defined in Text.welcome is displayed in the work area, its frame ID number is 2, and the screen labels shown on the last line of the screen now display the default labels for text frames. At this point, the screen looks like the figure below.
Two of the navigation keys you can use in a text frame are the following:
The complete set of navigation keys that can be used in text frames is described in Appendix B.
If either of the scroll symbols (^ for up and v for down) appears in the scroll box in the right border of the frame, the corresponding scroll key is valid. FMLI turns scrolling on automatically if all the text will not fit in the frame at one time. In addition, any of the named keys for editing that can be used in form frame can be used in a text frame if the text frame descriptor edit evaluates to TRUE.
Navigation between frames comprises simple moves and command actions that change which frame is current. The following list defines all the ways to move between frames, including the way just described to navigate to the welcome text frame--selection of a menu item.
The Command Menu is an FMLI-supplied menu that lists a subset of FMLI commands. (A discussion of the FMLI commands, including the subset shown in the Command Menu, can be found in Chapter 2, "The Form and Menu Language".) By default in all menu, form, and text frames, pressing function key F7 or the sequence of alternate keystrokes CTRL-f 7, causes the Command Menu to appear in the work area.
Command Menu > cancel next-frm cleanup prev-from exit refresh frm-mgmt unix-system goto update help
The Command Menu will reflect the contents of the commands file. That is, if you rename, redefine, or disable an existing FMLI command in the commands file, or if you define a new command for your application, it will be added to or removed from the Command Menu, as appropriate. Users can access a command in the Command Menu by selecting it just as they would select an item from any menu (refer to the section "Selecting a Menu Item" in this chapter).
The FMLI command line is accessed by pressing CTRL-j or CTRL-f c. A prompt, -->, then appears on the command line indicating that the user can execute FMLI commands by typing their names (and arguments, if any). All FMLI commands can be executed from the command line, except those that you have disables in the commands file. Those that appear in the Command Menu or that are assigned to screen-labeled function keys should be explained in your suer documentation. However, you should not document commands you do not want your users to use.
When the command line is current, if what the user types is not a known FMLI command, it is interpreted according to the following default behavior. If what is typed is an integer, the action that will be executed defaults to goto integer. For example, if a user accesses the command line and types 2, navigation to frame 2 will occur. If what is typed is anything other than an integer or a known FMLI command, the action that will be executed defaults to open what-is-typed.
You can try using the command line now, If you are running the example application. Press CTRL-j and type the command release. This FMLI command returns the release number of the version of FMLI you are currently running. The words FMLI Release 4.0 should be displayed on the message line.
If the command Menu is the current frame when a user presses CTRL-j or CTRL-f c, the Command Menu will disappear and the command that the cursor is currently positioned on will appear on the command line after the prompt.
By default, users can run UNIX system commands from the FMLI command line by prefixing an exclamation mark (!) to the command. However, you can disable this feature (see Chapter 4, "Application Level Definition Files").
NOTE: In previous releases of FMLI, CTRL-z was used to access the command line. However, in UNIX System V Release 4.0, job control is enabled when users run jsh or ksh. In this case, using CTRL-z will suspend an FMLI application. To resume the FMLI application, use the fg command. (See the sh(1) manual page for detailed information on job control.)
Pressing a screen-labeled function key (SLK) results in the execution of the command defined for that function key. Many of the default FMLI commands shown on the SLKs can also be selected from the Command Menu or executed by typing the command name on the command line. (Not all FMLI command shown by default on the SLKs appear in the Command Menu, and vice versa, but all FMLI commands can be executed from the command line.) If you have defined a SLK (either in an initialization file or in a frame definition file) to execute an application-specific command or a different FMLI command than the default, then pressing that SLK will execute the command(s) you have defined for that key. (By default, FMLI attempts to download alternate keystroke definitions into the function keys on some terminals. See Appendix A, "Programming Tips and Known Problems", for information on how and why this is done, and how you can disable this behavior.)
Function key F1 is labeled HELP and assigned the FMLI help command. The Command Menu also lists the FMLI help command. A user can request on-line help in either of these ways, which results in the FMLI help descriptor being evaluated. (Typically, developers use the help descriptor to define a text frame that presents information on the use of the frame or command. But, you can define help to be anything, such as a message to be printed on the message line or a UNIX executable.)
On-line help is available for each FMLI command. Users can request help on a command by pressing CMD-MENU to access the Command Menu, navigating to the command for which they want help, then pressing HELP. An alternative way to do this is to access the command line with CTRL-j and type the following command:
help command_name
where command_name is the name of the command for which they want help.
There are other ways you can provide users with help on the use of your application. You can define a short, descriptive tag to be displayed alongside an item in a menu that offers a user a "memory jogger" on the use of that menu item. And, the Choices menu that you can define for a field in a form frame can be considered a kind of help. Chapter 3, "Frame Definition Files", presents examples of these and other ways to provide users with on-line help. Help can also be provided via any of the FMLI descriptors that display a message on the message line, such as choicemsg, itemmsg, or fieldmsg. The built-in utility message(1F) can also be used to display information on the message line.
The UNIX system can be accessed by selecting the FMLI unix-system command from the Command Menu or by typing it on the command line. When a user invokes unix-system, the FMLI screen clears, and the user is in a full-screen UNIX shell. When exiting from the UNIX system a prompt message appear requesting that the user press ENTER to continue. The FMLI screen returns in the same condition it was in before the command unix-system was issued. You can control user access to the UNIX shell by disabling the unix-system command in the commands file (see "The Commands File">The Commands File" in Chapter 4, for a discussion of how to disable FMLI commands).
Users can also access UNIX system command from the FMLI command line by prefixing an exclamation mark (!) to the command. (Whitespace is ignored before ! when issued as a UNIX system escape on the command line.) The run(1F) built-in function can also be used to execute UNIX system commands from the FMLI command line (see the run(1F) manual page for details). This ability is the default behavior in FMLI applications, but it, too, can be disabled (see "The Initialization File">The initialization File" in Chapter 4, for a discussion of the nobang descriptor).