|  | Compaq ACMS for OpenVMSWriting Applications
 
 E.3 FMS Sample Application
This section describes the components of the FMS sample application. In
general, the FMS sample application uses FMS user request procedures
written in FORTRAN to replace the TDMS requests included in the request
libraries that are defined in the task group definition. This requires
the use of the ACMS$RI_LIB_libraryname logical. All the components
listed are in the ACMS$RI_EXAMPLES directory.
E.3.1 FMS Sample Application Source Modules 
This section lists the source modules for the FMS sample application.
 
   Record definitions
  
     FMS_EMPLOYEE_RECORD.DDL This is the CDD record definition for
    the ACMS Request Interface (RI) FMS sample application. The record
    contains employee information.
 FMS_WORKSPACE_RECORD.CDO This is the CDD record definition for
    the ACMS RI FMS sample application. The record contains two fields: the
    program request key field and the error status field.
 FMS_SCROLL_RECORD.CDO This is the CDD record definition for
    the ACMS RI FMS sample application. The record contains scroll area
    information.
 FMS_SALARY_RECORD.CDO This is the CDD record definition for
    the ACMS RI FMS sample application. The record contains the salary
    range information used by the FMS user action routines to demonstrate
    cross-field validation.
 FMS_FORM.BAK---CDD backup of TDMS form definitions This is the
  CDD backup of the TDMS forms used in the FMS sample application. It
  contains the following forms:
 
     FMS_ADD_FORM TDMS form used in the add request that is used in
    the add task example.
 FMS_INQ_FORM TDMS form used in the inquiry request and the
    inquiry display request that is used in the inquiry task.
 FMS_UPD_FORM TDMS form used in the inquiry update request and
    the display/modify request that is used in the update task.
 FMS_SCROLL_FORM TDMS form used in the inquiry scroll request
    that is used in the scroll task.
 FMS_SCROLL_DISP_FORM TDMS form used in the display scroll
    request that is used in the scroll task.
 TDMS request definitions
  
     FMS_ADD_REQUEST.RDF This is the TDMS request definition used
    in the FMS_ADD_TASK task in the FMS_SAMPLE application. It prompts the
    user to enter all employee information.
 FMS_INQ_REQUEST.RDF This is the TDMS request definition used
    in the FMS_INQ_TASK task in the FMS_SAMPLE application. It prompts the
    user to enter the employee badge number.
 FMS_INQ_DISP_REQUEST.RDF This is the TDMS request definition
    used in the FMS_INQ_TASK task in the FMS_SAMPLE application. It
    displays employee information that was requested in the inquire request.
 FMS_UPD_REQUEST.RDF This is the TDMS request definition used
    in the FMS_UPD_TASK task in the FMS_SAMPLE application. It prompts the
    user to enter the employee badge number. This is the same as the
    FMS_INQ_REQUEST.
 FMS_UPD_DISP_REQUEST.RDF This is the TDMS request definition
    used in the FMS_UPD_TASK task in the FMS_SAMPLE application. It
    displays the employee information requested in the update request; it
    then allows users to modify the employee information.
 FMS_SCROLL_REQUEST.RDF This is the TDMS request definition
    used in the FMS_SCROLL_TASK task in the FMS_SAMPLE application. It
    prompts the user to enter an employee last name.
 FMS_SCROLL_DISP_REQUEST.RDF This is the TDMS request
    definition used in the FMS_SCROLL_TASK task in the FMS_SAMPLE
    application. It displays employee last name, employee first name, and
    employee badge number for all employees with the specified last name
    from the FMS_SCROLL_REQUEST.
 TDMS request library definition (includes BUILD command),
FMS_REQUEST_LIBRARY.LDF
 This is the request library definition for
the TDMS request libraries. This also includes the BUILD command to
build the request library FMS_REQUEST_LIBRARY.RLB.
 Task definitions
  
     FMS_ADD_TASK.TDF This is the ACMS task definition for the add
    task in the FMS_SAMPLE application. The task has one exchange step and
    one processing step. The exchange step prompts the user to enter the
    employee information, and then the processing step writes the data out
    to an RMS datafile using employee ID as the key. The task contains
    control action for duplicate records and a program request key for
    [PF1/E].
 FMS_INQ_TASK.TDF This is the ACMS task definition for the
    inquire task in the FMS_SAMPLE application. The task has two exchange
    steps and one processing step. The first exchange step prompts the user
    to enter employee ID. The processing step retrieves the employee
    information from an RMS datafile using employee ID as the key; then the
    second exchange step displays the employee information retrieved from
    the previous processing step. The task contains control action for
    record not found and a program request key for [PF1/E].
 FMS_UPD_TASK.TDF This is the ACMS Task Definition for the
    update task in the FMS_SAMPLE application. The task has two exchange
    steps and two processing step. The first exchange step prompts the user
    to enter employee ID. The processing step retrieves the employee
    information from an RMS data file using employee ID as the key. The
    second exchange step displays the employee information retrieved from
    the previous processing step and lets user modify the employee data.
    Then the second processing step rewrites the data record to the file.
    The task contains control action for record not found and a program
    request key for [PF1/E].
 FMS_SCROLL_TASK.TDF This is the ACMS task definition for the
    scroll task in the FMS_SAMPLE application. The task has two exchange
    steps and one processing steps. The first exchange step prompts the
    user to enter the last name. The processing step retrieves employee
    information on all employees with that last name from an RMS datafile,
    using employee last name as the key. Then the second exchange step
    displays the employee information retrieved from the previous
    processing step in a scroll region. The task contains control action
    for record not found and a program request key for [PF1/E].
 Task group definition (includes BUILD command), FMS_GROUP.GDF
  This is the ACMS task group definition for the RI FMS sample
  application. This group does not define a shared image (.EXE) file in
  the REQUEST LIBRARY IS clause. You must define a logical name to use
  the RI for this group. This also includes the BUILD command to build
  the task group database FMS_GROUP.TDB.
 Procedure server source modules
  
     FMS_INIT_PROCEDURE.COB This is the COBOL source code for the
    initialization routine for the FMS sample application server procedure.
    The routine opens an RMS datafile called FMS_APPL.DAT.
 FMS_ADD_PROCEDURE.COB This is the COBOL source code for the
    add routine for the FMS sample application server procedure. This
    procedure is used in the FMS_ADD_TASK to store a record containing the
    employee information.
 FMS_GET_PROCEDURE.COB This is the COBOL source code for the
    get routine for the FMS sample application server procedure. This
    procedure is used in the FMS_INQ_TASK and FMS_UPD_TASK to retrieve a
    record containing all employee information using the EMPLOYEE_ID as the
    key.
 FMS_UPDATE_PROCEDURE.COB This is the COBOL source code for the
    update routine for the FMS sample application server procedure. This
    procedure is used in the FMS_UPD_TASK to rewrite the record after the
    user modifies it.
 FMS_SCROLL_PROCEDURE.COB This is the COBOL source code for the
    get scroll data routine for the FMS sample application server
    procedure. This procedure is used in the FMS_SCROLL_TASK to retrieve
    employee information for all employees with a specified last name.
 FMS_TERM_PROCEDURE.COB This is the COBOL source code for the
    termination routine for the FMS sample application server procedure.
    The routine closes the RMS datafile called FMS_APPL.DAT.
 Message source file, FMS_MESSAGES.MSG This is the message file
  source that contains the error messages for the FMS sample application.
  These messages are displayed using the ACMS GET MESSAGE clause.
 Command Procedure to build message file, FMS_MESSAGES.COM This
  is a command file to build the FMS messages file.
 Command Procedures to COMPILE and LINK the procedure server
  
     FMS_SERVER_COMPILE.COM This is a command procedure to
    recompile all the procedure server modules. It also creates a new
    object library (FMS_SERVER.OLB) and inserts all server modules.
 FMS_SERVER_LINK.COM This is a command procedure to relink the
    procedure server modules into FMS sample application server image. It
    uses the server object library created in the recompile command
    procedure.
 Application Definition (includes BUILD command),
  FMS_APPLICATION.ADF This is the ACMS application definition for the
  RI FMS sample application. It uses the FMS_GROUP.TDB task group and
  includes the BUILD command to build the application database (.ADB).
 Menu Definition (includes BUILD command), FMS_APPLICATION_MENU.MDB
  This is the ACMS menu definition for the RI FMS sample application.
  It includes the BUILD command to build the menu database (.MDB).
 FMS form definitions
  
     FMS_ADD_FORM.FRM This is the FMS form used in the add request
    URP that the add task example uses.
 FMS_INQ_FORM.FRM This is the FMS form used in the inquiry
    request URP that is used in the inquiry task.
 FMS_DISP_FORM.FRM This is the FMS form used in the inquiry
    display request URP that is used in the inquiry task.
 FMS_DEP_FORM.FRM This is the FMS form used in the inquiry
    display request URP and the update display request URP that is used in
    the inquiry task/update task.
 FMS_UPD_FORM.FRM This is the FMS form used in the update
    inquiry request URP that is used in the update task.
 FMS_SCROLL_FORM.FRM This is the FMS form used in the inquiry
    scroll request that is used in the scroll task.
 FMS_SCROLL_DISP_FORM.FRM This is the FMS form used in the
    display scroll request that is used in the scroll task.
 FMS_HELP_FORM.FRM This is the FMS form used as a help form to
    the FMS_ADD_FORM.FRM.
 Command Procedure to build the FMS form library,
  FMS_BUILD_FORM_LIB.COM This is a command procedure that builds the
  FMS form library for the FMS sample application.
 Request Interface URP source modules
  
     FMS_INIT_LIBRARY.COB This is COBOL PROCEDURE source code for
    the initialization procedure for the FMS RI request library. This
    procedure creates the FMS workspaces, attaches the terminal, and opens
    the FMS forms library defined by the logical ACMS$RI_FMS_MENU_LIB.
 FMS_ADD_REQUEST.COB This is COBOL PROCEDURE source code to
    duplicate the TDMS add request by using FMS service calls to prompt the
    user employee information. The employee record and workspace record are
    passed to it as parameters.
 FMS_INQ_REQUEST.COB This is COBOL PROCEDURE source code to
    duplicate the TDMS inquiry request by using the FMS service calls to
    prompt the user for badge number. The employee record, the ACMS
    processing status record, and the workspace record are passed to it as
    parameters.
 FMS_INQ_DISP_REQUEST.COB This is COBOL PROCEDURE source code
    to duplicate the TDMS inquiry display request by using the FMS service
    calls to display the employee information. The employee record is
    passed to it as a parameter.
 FMS_UPD_REQUEST.COB This is COBOL PROCEDURE source code to
    duplicate the TDMS update request by using the FMS service calls to
    prompt the user for badge number. The employee record, the ACMS
    processing status record, and the workspace record are passed to it as
    parameters.
 FMS_UPD_DISP_REQUEST.COB This is COBOL PROCEDURE source code
    to duplicate the TDMS inquiry display/modify request by using the FMS
    service calls to display the employee information and request user
    updates. The employee record and workspace record are passed to it as
    parameters.
 FMS_SCROLL_REQUEST.COB This is COBOL PROCEDURE source code to
    duplicate the TDMS inquiry scroll request by using the FMS service
    calls to prompt the user for an employee last name. The scroll record,
    the ACMS processing status record, and the workspace record are passed
    to it as parameters.
 FMS_SCROLL_DISP_REQUEST.COB This is COBOL PROCEDURE source
    code to duplicate the TDMS scroll display request by using the FMS
    service calls to display all employees with the requested last name.
    The scroll record is passed to it as a parameter.
 FMS user action routines (UAR) source modules
  
     FMS_TITLE_CHECK_UAR.COB This is COBOL PROCEDURE source code to
    execute as a UAR in the FMS add task. It checks the title field entered
    on the form with a data file named TITLE_SALARY.DAT.
 FMS_SALARY_CHECK_UAR.COB This is COBOL PROCEDURE source code
    to execute as a UAR in the FMS add task. It checks the salary field
    entered on the form with a salary range for the entered title field.
 Command Procedures to COMPILE and LINK Request Library shared
  image file
  
     FMS_REQ_LIB_COMPILE.COM This is a command procedure used to
    recompile the FMS RI request library modules. It also creates a new
    object library and inserts all the modules.
 FMS_REQ_LIB_LINK.COM This is command procedure used to relink
    the FMS RI request library shared image. It uses the object library.
 E.3.2 FMS Sample Application Run-Time Files
This section contains the run-time files for the FMS sample application.
 
   TDMS request library file (RLB), FMS_REQUEST_LIBRARY.RLB This
  is the TDMS request library for the RI FMS sample application. It
  contains all the TDMS requests for the FMS sample application.
 Task group database (TDB), FMS_GROUP.TDB This is the ACMS task
  group database for the RI FMS sample application. This group does not
  define a request library shared image (.EXE) file in the REQUEST
  LIBRARY IS clause (only TDMS request library files (RLB)). Because the
  FMS sample application is built using this task group database, you
  must define a logical name (ACMS$RI_LIB_libraryname) to use the FMS
  user request procedures for this group.
 Procedure server object module library, FMS_SERVER.OLB This is
  the object library containing the six object modules that make up the
  ACMS server used in the FMS sample application. It includes the
  following modules:
 
     FMS_INIT_PROCEDURE Object module for the initialization
    procedure
 FMS_TERM_PROCEDURE Object module for the termination procedure
 FMS_ADD_PROCEDURE Object module for the add record procedure
 FMS_GET_PROCEDURE Object module for the get record procedure
 FMS_UPDATE_PROCEDURE Object module for the update record
    procedure
 FMS_SCROLL_PROCEDURE Object module for the get scroll data
    procedure
 Procedure server image file, FMS_SERVER.EXE This is the
  procedure server image for the RI FMS sample application.
 Application database (ADB), FMS_APPLICATION.ADB This is the
  ACMS application database for the RI FMS sample application. It uses
  the FMS_GROUP.TDB task group.
 Menu database (MDB), FMS_APPLICATION_MENU.MDB This is the ACMS
  menu database for the RI FMS sample application.
 Application message file, FMS_MESSAGES.EXE This is the message
  file that contains the error messages for the FMS sample application.
  These messages are displayed using the ACMS GET MESSAGE clause.
 Request Interface FMS form library, FMS_FORM_LIBRARY.FLB This
  is the FMS form library that contains all the FMS forms used in the FMS
  sample application.
 Request Interface request library shared image file,
  FMS_REQUEST_LIBRARY.EXE This is the FMS RI request library shared
  image file that includes all FMS URP modules.
 Request Interface URP object module library, FMS_REQ_LIB.OLB
  This is the object library that contains the object modules for the
  FMS RI request library shared image file.
 
     ACMSRI$INIT_LIBRARY Object module for the FMS RI request
    library initialization procedure
 FMS_ADD_REQUEST Object module for the FMS RI request library
    add request procedure
 FMS_INQ_REQUEST Object module for the FMS RI request library
    inquiry request procedure
 FMS_INQ_DISP_REQUEST Object module for the FMS RI request
    library inquiry display request procedure
 FMS_UPD_REQUEST Object module for the FMS RI request library
    inquiry update request procedure
 FMS_UPD_DISP_REQUEST Object module for the FMS RI request
    library update display/modify request procedure
 FMS_SCROLL_REQUEST Object module for the FMS RI request
    library inquiry scroll request procedure
 FMS_SCROLL_DISP_REQUEST Object module for the FMS RI request
    library display scroll request procedure
 FMS_TITLE_CHECK_UAR Object module for the FMS UAR
 FMS_SALARY_CHECK_UAR Object module for the FMS UAR
 FMS User Action Routine RMS data file, TITLE_SALARY.DAT This
  is the data file that contains title and salary range information. This
  matches the FMS_HELP_FORM information.
 
 
 Appendix FModifying the FMS Menu Interface
ACMS software includes an FMS-based menu interface to use with the
ACMS-supplied RI agent, ACMS$RI_AGENT. The sample FMS form library for
the menu interface is in the ACMS$RI_EXAMPLES directory.
 
This appendix describes how to modify this menu interface to suit the
needs of a particular application. To incorporate the modified menu
interface into the ACMS$RI_AGENT, see Chapter 14.
 
There are two FMS menu form definitions:
 
   MENU_MAIN_FORM.FRM This is the FMS form used as the top-level
  (main) menu form. It is similar to the layout of the ACMS default menu
  format, which includes a number, a keyword, a task or menu indicator (T
  or M), and descriptive text. At the bottom of the menu is the
  SELECTION: prompt.
 The menu layout is static text in the FMS form.
  The only field on the menu form is the selection field. The numbers and
  keywords are used as named-data indexes and named-data keywords. To
  change the form for a specific application, modify the static text on
  the main menu and change the named-data field information. The default
  main menu is set up for the FMS sample application.
 MENU_HELP_FORM.FRM This is the FMS form used when the user
  types $HELP or presses [PF2] twice at the SELECTION: prompt.
  It displays a form explaining the functionality available under the FMS
  menu interface, such as *, -, $EXIT, number, keyword, and so on.
  Include this form in all FMS menu interface form libraries.
 
To modify the supplied FMS menu form, MENU_MAIN_FORM.FRM:
 
  Make a copy of the form. Do not modify the original copy of
  MENU_MAIN_FORM.FRM; you must modify a copy of the form. The form
  MENU_MAIN_FORM must stay the same because the menu interface routine
  uses that name. For example:
 
  
    | 
 
$ COPY MENU_MAIN_FORM.FRM newmenu.frm
 | Edit the form to make the necessary changes.
 FMS responds by clearing the screen and displaying the Form Editor
    Menu, shown in Figure F-1. You use this menu to select an action to
    perform. Type the name of the phase you wish to enter.
 
Figure F-1 Form Editor Menu
 
   First change the layout of the form. To enter the layout phase,
    type LAYOUT and press [Return].
 The layout of the
    ACMS-supplied menu form is similar to the ACMS menu format. The FMS
    menu form contains a menu header, a selection list, a prompt line, and
    a message line. The menu header is the name of the menu. The selection
    list shows the tasks you can run and the menus available.
 
     The first column in the list is the number of the entry on the
    menu.
     The second column is a keyword for the item.
     The third column is a label identifying the item as a task (T) or
    a menu (M).
     The fourth column is text describing the item.
     The prompt line includes both the SELECTION: prompt and blank
    spaces after the prompt.
   Type the number or keyword for the task or menu in the blank space
    after the prompt. Press [Return] after making your
    selection.
 The FMS menu form contains only one field, the selection
    field. The remaining data on the screen is background text. In the
    layout phase, you can change, delete, or add any background text that
    is needed for a given application; the selection field name and size,
    however, must remain the same.
 The selection list is also used by
    the menu interface routines. The FMS menu interface routine uses the
    selection list numbers as indexes or the selection list keywords as
    keywords for FMS-named data calls to retrieve the task and application
    names.
 After modifying the FMS menu form layout, change the Named Data
  Area of the form. Named Data provides a convenient way for the FMS menu
  routine to store program parameters with the form instead of coding
  them into the menu routines. Use Named Data to add additional menu
  forms and change the existing menu form without changing the menu
  interface routine. Named Data is data that is associated with a
  form but does not appear on the operator's screen. Named Data exists in
  the FMS workspace with the form. Define the Named Data to the menu form
  during the data phase. Enter the data phase by typing PHASE at the form
  editor menu.
 The data can be any string up to 80 characters and is
  referenced by either name or index. The FMS menu routine subdivides the
  80-character data area into ACMS task name and application name. The
  task name must be first; the application name follows, with at least
  one space in between them.
 Table F-1 shows how to define the
  named data associated with a form.
 
 
 The FMS menu interface routine uses the Named Data area to
    determine the ACMS task name and the ACMS application name by providing
    the user with two ways to select a task or menu: by number or by
    keyword. The user can type either the number from the menu (that is
    used as a index into the Named Data area) or the keyword from the menu
    (that is used as a keyword into the Named Data area). You can use the
    short form of a keyword. Use enough letters to make the selection
    unique.
 The select list numbers and keywords must exactly match the
    indexes and names in the Named Data area of the menu form. If a user
    enters a selection that is not contained in the Named Data area, an
    error message is displayed indicating that it was an invalid selection
    and to enter another one.
 In addition, the FMS menu interface
    routines define three keywords that implement some of the ACMS menu
    functionality. The interface routines keywords must be placed in the
    task-name field of the Named Data area. The keywords are as follows:
 
    MENU If the menu interface routine finds the keyword MENU in
    the task-name field, FMS assumes that the application-name field
    contains the name of another menu form in the same FMS menu form
    library. This keyword enables you to develop menu trees.
 The FMS
    menu interface routine provides two special characters for moving
    through the menu tree. This is similar to the ACMS menu facility. The
    special characters are the asterisk (*) for moving up to the main level
    menu and the hyphen (-) for moving up to the previous level. The FMS
    menu interface supports five levels of menus.
$EXIT If the menu interface routine finds the keyword $EXIT in
    the task-name field, it exits from the RI agent code.
$HELP If the menu interface routine finds the keyword $HELP in
    the task-name field, it displays the help form (MENU_HELP_FORM) that is
    provided in the ACMS$RI_EXAMPLES directory. The help form simply
    describes the user's options at the selection prompt.
Create a new FMS menu library. After modifying the supplied
  menu form, create a new FMS form library. Use the FMS Form Librarian
  Utility. Putting forms in form libraries makes the forms available to
  the Form Driver and the FMS menu interface routine. The create
  operation makes a new library file and puts one or more binary forms in
  it, as follows:
 
 
  
    | 
 
$ FMS/LIBRARY/CREATE
LIBRARY: newmenulibrary.flb
FORMS:   newmenu.frm,menuhelpform.frm
 | Link the FMS menu interface routine. You can link the FMS menu
  interface routine directly into the ACMS$RI_AGENT or into a shared
  image that is activated at run time. See Section 14.5.1 for more
  information on linking and running the menu interface.
 
 
   |