/sys$common/syshlp/HELPLIB.HLB  —  MMS
    The  Module Management System (MMS)  is a  tool  that  updates  files
    by comparing the revision times of files you specify in a description
    file.  If a "source" file (for example, an object  module)  is  newer
    than its "target" (for example, an executable image), MMS updates the
    source by executing commands that you also supply in the  description
    file.   If some of the sources need updating, MMS updates them before
    building the target.  If the target is newer than its sources, it  is
    already up-to-date and MMS does not rebuild it.

    Format:

      $ MMS [qualifier...] [target,...]

    If you do not specify a target on the command line, MMS processes the
    first target in the description file.

    MMS can also generate a description file from a list of sources files.

    Format:

      $ MMS/GENERATE [qualifier...] source[,source...]

1  –  Parameters

    MMS accepts an optional list of targets to  build.   If  you  do  not
    specify  a  target  on  the  command  line, and if you do not specify
    /NODESCRIPTION,  MMS  tries  to  build  the  first  target   in   the
    description  file.   If  you do not specify the name of a description
    file,  MMS  attempts  to  process  the   default   description   file
    DESCRIP.MMS;  if it does not exist, MMS attempts to process MAKEFILE.
    If   MAKEFILE.    does   not   exist,   MMS   attempts   to   process
    target-name.MMS.    If   all   these   files  exist,  MMS  uses  only
    DESCRIP.MMS.  If none of these files exist, MMS uses  built-in  rules
    to build the target.

    If you specify the target on  the  command  line,  MMS  looks  for  a
    description  file with the same name and builds that target directly.
    If you specify /NODESCRIPTION, MMS does not look  for  a  description
    file but uses its built-in rules to build the target specified on the
    command line.

    When generating a description file, MMS accepts a list of sources that
    will be scanned for dependencies.

2  –  Qualifiers

2.1    /ACTION

    /ACTION (D)
    /NOACTION

    Controls whether MMS executes the action lines in a description
    file. These qualifiers affect only the execution of action lines,
    not the behavior of MMS.

    The /ACTION qualifier displays action lines as they are invoked.
    MMS does not display any information on dependencies.

    If you specify /NOACTION, MMS does not execute the action lines,
    but instead writes them to an output file (either SYS$OUTPUT
    or the file specified by the /OUTPUT qualifier). /NOACTION is
    useful for determining what actions MMS would have executed had
    the system actually been built. You can also use /NOACTION in
    combination with the /OUTPUT qualifier to generate a command
    procedure (see the description of the /OUTPUT qualifier).

    /NOACTION overrides the Silent action-line prefix - @. Note that
    the $(MMS) reserved macro is executed even if you specify
    /NOACTION. Therefore, you can see what actions MMS would have
    executed in the subprocess.

    /NOACTION does not affect the /AUDIT qualifier that you can
    provide with references to CDD records. That is, if you suppress
    the execution of action lines with the /NOACTION qualifier,
    the remark you supply with /AUDIT is still written to the CDD
    history file.

2.2    /CHANGED

    /CHANGED=(source1, source2,...)

    Directs MMS to treat only the specified sources as having been
    changed, regardless of their actual modification times. No date
    checking is performed at all; MMS simply rebuilds any targets
    that depend on one or more of the specified sources. This
    qualifier affects the behavior of MMS but not the execution of
    action lines.

2.3    /CHECK_STATUS

    /CHECK_STATUS
    /NOCHECK_STATUS (D)

    Controls whether MMS returns a value in the symbol MMS$STATUS
    instead of updating a target. This symbol contains the status
    of the last action line executed by MMS. These qualifiers affect
    both the execution of action lines and the behavior of MMS.

    When you specify the /CHECK_STATUS qualifier, MMS checks whether
    a target is up-to-date by determining whether any actions would
    be executed if the /ACTION qualifier was specified. MMS issues
    an informational message and sets MMS$STATUS to 1 if no actions
    would be executed (that is, if the target is up-to-date). If the
    target needs to be updated, MMS sets the MMS$STATUS value to 0.

    /CHECK_STATUS has precedence over both the /ACTION and "/REVISE_
    DATE" qualifiers if they appear on the same command line. In this
    case, only /CHECK_STATUS is processed.

    The /NOCHECK_STATUS qualifier directs MMS to process the
    description file as it normally would, executing action lines
    if necessary.

2.4    /CMS

    /CMS
    /NOCMS (D)

    Controls whether MMS looks for source files, description files,
    and include files in the current default CMS library as well
    as in the specified directories. CMS must be installed on your
    system. These qualifiers affect both the execution of action
    lines and the behavior of MMS.

    For information on using the /CMS qualifier with the
    description-file generator, refer to the /GENERATE qualifier.

    When you specify the /CMS qualifier and the source in the CMS
    library is newer, MMS fetches it from the CMS library. If the
    source in the CMS library is older, MMS instead uses the source
    in the specified directory.

    /CMS also directs MMS to look in the current default CMS library
    for a description file and any files included with the .INCLUDE
    directive, or specified with the /RULES qualifier. If MMS does
    not find a description file in either the specified directory or
    the current default CMS library, it aborts execution.

    The /CMS qualifier also directs MMS to apply CMS built-in rules
    where appropriate.

    The /NOCMS qualifier directs MMS not to look in the current
    default CMS library for source files, description files, rules
    files, or include files. However, if any file specifications in
    the description file are followed by a tilde (~)  to indicate
    specific CMS elements, MMS looks for the files in the CMS library
    regardless of whether /NOCMS is in effect.

    If you specify /NOCMS, or the combination /CMS/NORULES, and
    the sources do not exist in the specified directory, MMS aborts
    execution.

2.5    /DESCRIPTION

    /DESCRIPTION[=filespec...](D)
    /NODESCRIPTION target

    Controls whether MMS looks for a description file to update the
    target. These qualifiers affect the behavior of MMS, but not the
    execution of action lines.

    The filespec is an OpenVMS file specification or a logical name
    that identifies the description file. The default file type is
    .MMS. If a tilde (~)  follows the file specification, MMS fetches
    the description file from the default CMS library even if the
    description file exists in the default directory. The target is
    an OpenVMS file specification or a mnemonic name that designates
    the target to be built.

    When you specify more than one description file, separate the
    file specifications with either commas (,)  or plus signs (+)  and
    enclose them in parentheses or quotation marks.

    If you use commas, the description files are processed separately
    and the list of files must be enclosed in parentheses. For
    example:

    $ MMS/DESCRIPTION=(A, B)

    If you use plus signs, the description files are concatenated
    and processed as one file. The list of files must be enclosed in
    quotation marks. For example:

    $ MMS/DESCRIPTION="A + B"

    You can combine separate description files with description files
    to be concatenated and processed as one file. For example:

    $ MMS/DESCRIPTION=("A + B", CLEANUP)

    This command line directs MMS to process A.MMS and B.MMS as
    one file, and CLEANUP.MMS as another. In this case, there are
    two default targets: the first one is in either A.MMS or B.MMS
    (depending on the contents of the two files) and the second one
    is in CLEANUP.MMS.

    If you specify a list of description files in parentheses and a
    list of targets, the rules for updating all the listed targets
    must occur in all the listed description files. For example:

    $ MMS/DESC=(A,B) X,Y,Z

    In this case, the rules for updating X, Y, and Z must appear in
    both description files, A.MMS and B.MMS.

    If you specify a concatenated list of description files and a
    list of targets, the rules for updating all the listed targets
    must occur in the concatenated description file. For example:

    $ MMS/DESC="A + B" X,Y,Z

    In this case, the description file formed by the concatenation of
    A.MMS and B.MMS must contain the rules for updating X, Y, and Z.

    If you specify the /DESCRIPTION qualifier without a file
    specification or if you do not specify /DESCRIPTION, MMS looks
    first for the default description file DESCRIP.MMS. If it cannot
    locate that file, it looks for one called MAKEFILE.; if it
    cannot find MAKEFILE., it looks for target-name.MMS. If MMS
    finds target-name.MMS, it does not update the first target in
    the description file, but instead attempts to directly update the
    target indicated by target-name.MMS. For example:

    $ MMS MAIN.EXE

    In this example, if DESCRIP.MMS and MAKEFILE. are not present,
    MMS looks for a file named MAIN.MMS. If MAIN.MMS exists, MMS
    directly processes the target you specified on the command
    line, MAIN.EXE.

    If MMS cannot find any one of these files, it attempts to use
    built-in rules to build the target.

    If you use the /NODESCRIPTION qualifier, you must specify a
    target on the command line. /NODESCRIPTION directs MMS to ignore
    all description files and to build the target specified on the
    command line.

    For information on using the /DESCRIPTION qualifier with the
    description-file generator, refer to the /GENERATE qualifier.

2.6    /EXTENDED_SYNTAX

    /EXTENDED_SYNTAX
    /NOEXTENDED_SYNTAX (D)

    The /EXTENDED_SYNTAX qualifier instructs MMS to enable the
    extension of MMS syntax, providing for the following:

    o  Use of predefined MMS functions.

    o  Macro redefinition.

    o  Nested macro expansion.

    To enable the /EXTENDED_SYNTAX qualifier in DECwindows MMS, check
    the Extended Syntax check box in the Build Definitions/Directives
    Options dialog box.

    The /EXTENDED_SYNTAX qualifier will be used to include all future
    extensions to the MMS syntax. The inverse qualifier, the default
    /NOEXTENDED_SYNTAX, will continue to support the syntax of MMS
    Version 3.2.

2.7    /FORCE

    /FORCE
    /NOFORCE(D)

    Controls whether MMS executes the action lines necessary to
    update one specific target. These qualifiers affect the behavior
    of MMS but not the execution of action lines.

    When you specify the /FORCE qualifier, MMS does not check whether
    the target or its sources are up-to-date, but simply rebuilds the
    specified target by executing the action lines. MMS also executes
    any .FIRST and .LAST directives associated with the target.

    The /FORCE qualifier is useful for quickly rebuilding a single
    target.

2.8    /FROM_SOURCES

    /FROM_SOURCES
    /NOFROM_SOURCES (D)

    Directs MMS to build a target from its sources, regardless of
    whether the target is already up-to-date. This qualifier affects
    the execution of action lines and the behavior of MMS.

    When you specify the /FROM_SOURCES qualifier, MMS does not
    compare the revision times of the specified sources and target.
    Instead, it executes the action lines in the description file
    necessary to update the target. The /FROM_SOURCES qualifier
    is useful when you want to guarantee that an entire system is
    rebuilt, perhaps for an internal release.

    If you specify the /CMS and /FROM_SOURCES qualifiers on the MMS
    command line, MMS uses the sources found in the default CMS
    library. If you do not use /CMS, MMS uses the sources found in
    the specified directory.

    The /FROM_SOURCES qualifier overrides the /SKIP_INTERMEDIATE
    qualifier.

2.9    /GENERATE

    /GENERATE [/qualifier[/...]] source_filespec[,...]

    Invokes the MMS description file generator.

    Select MMS subtopic 'Generating_Description_Files' for more
    information.

2.10    /HELP

    /HELP[="topic"]

    Provides information about MMS and its qualifiers. The topic is
    an MMS topic on which you want information.

    The /HELP qualifier displays information about MMS on your
    terminal. If you specify the /HELP qualifier without a topic,
    MMS displays general information and a list of qualifiers. To
    get help on a specific topic, type /HELP with an equal sign (=)
    and the topic. The topic must be enclosed in quotation marks. For
    example:

    $ MMS/HELP="/RULES"

2.11    /IDENTIFICATION

    /IDENTIFICATION

    Directs MMS to display an informational message with the version
    number and copyright date of the MMS image you are running. MMS
    does not process any description files or qualifiers; it simply
    displays an informational message on your screen.

    You should include the version number and copyright date with any
    MMS Software Performance Reports (SPRs) you submit.

2.12    /IGNORE

    /IGNORE[=options]
    /NOIGNORE (D)

    Directs MMS to specify the severity levels of errors that MMS
    normally ignores when it executes action lines. The parameters
    correspond to the DCL severity levels W, E, and F. The /NOIGNORE
    qualifier directs MMS to abort execution when it finds an error.
    These qualifiers affect the execution of action lines but not the
    behavior of MMS.

    The options field can contain the keyword WARNING, ERROR, or
    FATAL. WARNING directs MMS to ignore W errors and continue
    processing, but to abort execution if it finds an E or F error.
    If you specify the /IGNORE qualifier without parameters, WARNING
    is the default. ERROR directs MMS to ignore both W and E errors,
    but to abort execution if it finds an F error. FATAL directs MMS
    to ignore all errors, and to continue processing the description
    file. This parameter is equivalent to the .IGNORE directive.

    When you specify the /IGNORE qualifier, the errors that MMS
    ignores are those generated by the execution of action lines.
    The only fatal errors MMS will not ignore are syntax errors.
    The /IGNORE qualifier does not stop MMS error messages from
    being generated or displayed. Informational messages are always
    displayed, regardless of whether you use the /IGNORE qualifier.

                                   NOTE

       Take caution when executing MMS with the /IGNORE qualifier;
       if errors occur during processing, the target might be
       updated but still contain errors of which you will not be
       aware.

    The .IGNORE directive and the Ignore action line prefix are
    similar to the /IGNORE=FATAL qualifier. However, instead of
    typing them on the command line, you include them in the
    description file.

    To override the .IGNORE directive contained in a description
    file, type the /IGNORE[=WARNING], /IGNORE=ERROR, or /IGNORE=FATAL
    qualifier explicitly on the MMS command line. You cannot override
    the Ignore action-line prefix on the MMS command line.

2.13    /INTERFACE

    /INTERFACE[=DECWINDOWS]
    /INTERFACE[=CHARACTER_CELL] (D)

    Controls whether MMS invokes the DECwindows Motif user interface
    or the character-cell interface. The CHARACTER_CELL qualifier is
    the default.

2.14    /LIST

    /LIST[=filespec]
    /NOLIST (D)

    Controls whether MMS writes dependencies and action lines to
    an output file as it processes the description file. These
    qualifiers affect the behavior of MMS, but not the execution
    of action lines.

    When you specify the /LIST qualifier, MMS creates a complete
    listing of all dependencies, dependents, and actions that need
    to be processed to update the target. MMS creates this listing as
    it processes the description file and writes the listing to the
    output file, or to SYS$OUTPUT if you did not specify a file.

    The /LIST qualifier is useful during the debugging of description
    files. You can also use /LIST in combination with the /NOACTION
    qualifier to display the dependency list and action lines without
    executing any actions.

2.15    /LOG

    /LOG
    /NOLOG (D)

    Controls whether MMS displays informational messages as it
    processes the description file. These qualifiers affect the
    behavior of MMS, but not the execution of action lines.

    The /LOG qualifier directs MMS to write all informational
    messages to your terminal screen while it processes the
    description file. The /LOG qualifier is useful for debugging
    your description files. These messages indicate what MMS finds
    and what it assumes as it processes the description file. You
    should include these messages with any MMS Software Performance
    Reports (SPRs) you submit. To save these messages in a file, type
    the following:

    $ DEFINE SYS$OUTPUT MYFILE.LOG
    $ MMS/LOG
       .
       .
       .
    $ DEASSIGN SYS$OUTPUT

    The /NOLOG qualifier prevents MMS from displaying informational
    messages. However, if you specify /NOLOG/CHECK_STATUS on the same
    command line, MMS does display the informational message that
    reports the value of MMS$STATUS.

2.16    /MACRO

    /MACRO=filespec | "macro", . . .

    Directs MMS to add to or override the macro definitions in the
    description file. This qualifier affects the behavior of MMS but
    not the execution of action lines.

    The filespec is an OpenVMS file specification or a logical name
    that identifies a file of macro definitions. The default file
    type is .MMS. The macro string is a macro definition enclosed
    in quotation marks. The definition of the macro should always
    assign a value to the macro. Use the same format as for macro
    definitions in description files, that is, name = "string".

    With the /MACRO qualifier, you can specify a macro definition
    on the MMS command line. You can also specify a file
    of macro definitions to use in your description file.

    You can define macros in three locations:

    o  In a description file

    o  In a macro definitions file

    o  On the command line

    To specify more than one macro definition on the MMS command
    line, enclose the list of macros in parentheses. For example:

    $ MMS/MACRO=("A=MAC1", "B=MAC2")

    You can also specify both a macro definition and a file on the
    same command line. For example:

    $ MMS/MACRO=("A=MAC1", MACROS)

2.17    /OUTPUT

    /OUTPUT=filespec

    Directs MMS to write action lines and output to the specified
    file. Error messages preceded by "%MMS" are not written to this
    output file, but instead are written to SYS$ERROR. The /OUTPUT
    qualifier affects the behavior of MMS, but not the execution of
    action lines.

    The filespec is an OpenVMS file specification or a logical name
    that identifies the output file. The default file type is .LOG.
    If you do not specify the /OUTPUT qualifier on the MMS command
    line, MMS writes all action lines, messages, and output to
    SYS$OUTPUT.

    If you specify the /NOVERIFY qualifier on the same MMS command
    line with /OUTPUT, MMS does not write action lines to the output
    file.

    If you specify /OUTPUT and your command-line interpreter is DCL,
    MMS automatically prefixes a dollar sign ($)  to any action
    line that does not begin with one. Thus, you can use the file
    generated by /OUTPUT as a DCL command procedure.

2.18    /OVERRIDE

    /OVERRIDE
    /NOOVERRIDE (D)

    Controls the order in which MMS applies definitions when it
    processes macros. These qualifiers affect the behavior of MMS,
    but not the execution of action lines.

    When you specify the /OVERRIDE qualifier, MMS overrides the macro
    definitions in the description file with CLI symbol definitions.
    To find the macro definitions that should have precedence,
    MMS looks at symbols defined by the CLI assignment statement,
    scanning the CLI symbol table for the body of the macro. If the
    body of the macro is not in the CLI symbol table, MMS substitutes
    a null string for all invocations of the macro.

    The /OVERRIDE qualifier imposes the following order of
    application when MMS processes macro definitions:

    1. Command line

    2. CLI symbol

    3. Description file

    4. Built-in

    Once MMS finds a definition for a macro, it does not search those
    locations farther down the list for more definitions. If MMS
    finds more than one definition in the same location (such as on a
    command line), it uses the last definition it processed, unless
    the location is a description file. MMS issues an error message
    if a macro is defined more than once in a description file.

    The /NOOVERRIDE qualifier imposes the following order, which is
    the default hierarchy:

    1. Command-line

    2. Description file

    3. Built-in

    4. CLI symbol

2.19    /REVISE_DATE

    /REVISE_DATE
    /NOREVISE_DATE (D)

    Controls whether MMS changes only the revision dates of all
    targets that need updating, or performs the update. These
    qualifiers affect the behavior of MMS, not the execution of
    action lines.

    When you specify the /REVISE_DATE qualifier, MMS changes only the
    revision dates of targets that need updating; it does not direct
    MMS to execute the action lines that actually do the updating.
    If any files are missing, /REVISE_DATE causes MMS to create them.
    If MMS cannot create a missing file, or if it cannot update the
    revision date of an existing file, it issues an error message.

    The /REVISE_DATE qualifier is useful for reducing the number of
    superfluous compilations, for example, when you change only a
    comment line in a required file. However, /REVISE_DATE can defeat
    the purpose of using MMS, so use this qualifier with caution.

    As it changes the revision times, MMS writes the name of
    the revised files to an output file (or to SYS$OUTPUT if no
    file is specified). If you specify the /REVISE_DATE and
    /NOVERIFY qualifiers, the names of revised files are suppressed.

    Unless you specify a target on the command line, the /REVISE_
    DATE qualifier causes MMS to revise the first target (and its
    sources) in the description file. If you specify multiple targets
    on the command line, those targets and their sources are revised.
    /REVISE_DATE does not change the value of MMS$STATUS.

    The /REVISE_DATE qualifier has precedence over the /ACTION
    qualifier if they both appear on the same command line. In that
    case, only /REVISE_DATE is processed.

    The /NOREVISE_DATE qualifier directs MMS to build the system
    by updating targets as necessary (as long as the /CHECK_STATUS
    qualifier is not specified on the same command line).

2.20    /RULES

    /RULES[=filespec] (D)
    /NORULES

    Controls whether MMS applies user-defined built-in rules and
    a suffixes-precedence list when it builds a system. These
    qualifiers affect the behavior of MMS, but not the execution
    of action lines.

    The filespec is an OpenVMS file specification or a logical
    name that identifies the file of user-created rules that MMS
    is to use. When you supply a file specification with the /RULES
    qualifier, MMS replaces the built-in rules it normally uses with
    the built-in rules and suffixes list in the file you specify.
    The file specified with /RULES has precedence over the file
    represented by MMS$RULES.

    If you specify /RULES without a file specification, MMS
    translates the logical name MMS$RULES to locate the user-defined
    built-in rules file. If MMS$RULES is not defined, MMS uses its
    own built-in rules.

    The /NORULES qualifier prevents MMS from using its built-in
    rules or the suffixes-precedence list. It also prevents MMS from
    applying user-defined rules and default macros. When you specify
    /NORULES, MMS applies only the dependency rules contained in the
    description file.

2.21    /SCA_LIBRARY

    /SCA_LIBRARY[=library-name]
    /NOSCA_LIBRARY (D)

    Controls whether MMS generates an SCA library during the build
    process.

    When you specify a library name with the /SCA_LIBRARY qualifier,
    MMS defines the macro $(SCALIBRARY) to be that library name.
    If you use /SCA_LIBRARY without specifying a library name,
    SCA$LIBRARY is the value of $(SCALIBRARY). If you do not specify
    /SCA_LIBRARY, /NOSCA_LIBRARY is the default.

    The macro $(SCA) is defined to be SCA regardless of the setting
    of the /SCA_LIBRARY qualifier.

    The macro $(MMSQUALIFIERS) contains the setting of the /SCA_
    LIBRARY qualifier.

    When you specify the /SCA_LIBRARY qualifier, built-in rules for
    BASIC, BLISS-32, C, C++, COBOL, DIGITAL Fortran, MACRO, Pascal,
    PL/I, and SCAN change.

                                   NOTE

       You might choose to defer loading modules into the SCA
       library until after all compilations are completed. In
       this case, define the default rules for compilation in your
       description file to be the same as the default rule provided
       by MMS when the /NOSCA_LIBRARY qualifier is specified. You
       should also include a .LAST directive, which then loads the
       SCA database. For example:

        .LAST :
           $(SCA) SET LIBRARY $(SCALIBRARY)
           $(SCA) LOAD *

2.22    /SHOW_DESCRIPTION_FILE

    /SHOW_DESCRIPTION_FILE (D)
    /[NO]SHOW_DESCRIPTION_FILE

    Controls whether MMS displays the current description file in the
    MMS description file area.

    When you specify the /SHOW_DESCRIPTION_FILE qualifier, if the
    DECwindows version of LSE is not presently invoked, MMS displays
    the current description file in the MMS description file area as
    read-only for browsing purposes. If the DECwindows version of LSE
    is currently invoked, MMS displays the description file in the
    MMS description file area in a modifiable LSE buffer.

    The /NOSHOW_DESCRIPTION_FILE qualifier directs MMS to hide the
    current description file from the MMS description file area. The
    default qualifier is /SHOW_DESCRIPTION_FILE.

2.23    /SKIP_INTERMEDIATE

    /SKIP_INTERMEDIATE
    /NOSKIP_INTERMEDIATE (D)

    Controls whether MMS builds intermediate source or target
    files. These qualifiers affect the behavior of MMS, but not the
    execution of action lines.

    The /SKIP_INTERMEDIATE qualifier directs MMS to determine whether
    a target is up-to-date without rebuilding intermediate files,
    unless they need to be updated.

    MMS first checks the target date against the dates of its
    sources. If the target is newer than its sources, MMS determines
    that the target does not need to be rebuilt; if MMS cannot find
    some intermediate files, it acts as though they already exist,
    and skips over them to check their sources, and so on.

    For example, if you have a .C file and an .EXE file, but no .OBJ
    file, and the time of the .EXE file is more recent than that
    of the .C file, the /SKIP_INTERMEDIATE qualifier prevents MMS
    from building the .OBJ file and the .EXE file because the target
    is already up-to-date with regard to its nearest source. Using
    /SKIP_INTERMEDIATE saves time and disk space.

    If the target is older than its sources, MMS determines that
    the target does need to be rebuilt. It then ensures that all of
    the target's immediate sources exist; if any do not, MMS works
    from the bottom up by first rebuilding the missing sources, then
    rebuilding the target. If the sources contain include files that
    have changed, are located in a CMS library, or both, MMS also
    fetches the include files and recompiles the source files, then
    rebuilds the system. For example:

    !
    ! SYSTEM2.MMS
    !
    SYSTEM2 : MAIN.EXE, MOD.EXE
    MAIN.EXE : MAIN.OBJ
    MAIN.OBJ : MAIN.C, DEFS1.H, DEFS2.H
    MOD.OBJ : MOD.C, DEFS2.H

    If the include file DEFS1.H changes, MMS does the following when
    you specify the /SKIP_INTERMEDIATE qualifier:

    1. Determines that one of the target's sources is newer than the
       target, and that the target must be rebuilt.

    2. Verifies that MAIN.OBJ depends on MAIN.C, which contains the
       include files DEFS1.H and DEFS2.H.

    3. Fetches MAIN.C, DEFS1.H, and DEFS2.H from the CMS library and
       recompiles MAIN.C.

    4. Because MAIN.OBJ is now newer than MAIN.EXE, MMS rebuilds
       MAIN.EXE.

    5. Because none of the sources for MOD.EXE have changed, MMS does
       not need to fetch them from CMS, and target SYSTEM2 is now
       up-to-date.

    The /NOSKIP_INTERMEDIATE qualifier directs MMS to ensure that
    all intermediate source files exist and are up-to-date. If any
    intermediate source files do not exist, MMS builds them. This is
    the default.

2.24    /VERIFY

    /VERIFY (D)
    /NOVERIFY

    Controls whether MMS displays action lines before executing
    them. These qualifiers affect the behavior of MMS, but not the
    execution of action lines.

    The /VERIFY qualifier directs MMS to display each action line
    before executing it. MMS writes action lines either to SYS$OUTPUT
    or to a file you specify on the /OUTPUT qualifier.

    If you specify the /REVISE_DATE qualifier in combination with the
    /VERIFY qualifier, MMS displays the names of files whose dates
    have been revised.

    When you specify the /NOVERIFY qualifier, MMS suppresses the
    display (but not the execution) of action lines. Any error
    messages generated by the execution of action lines continue
    to be displayed. If you specify the /REVISE_DATE and /NOVERIFY
    qualifiers on the same command line, the names of files whose
    dates have been revised are not displayed.

    The behavior of the /NOVERIFY qualifier is identical to
    that of the Silent action-line prefix and the .SILENT
    directive. If a description file contains the .SILENT directive, to
    override it you must type the /VERIFY qualifier explicitly on the
    MMS command line. You cannot override the Silent action-line prefix
    from the MMS command line.

3  –  Generating Description Files

    MMS/GENERATE [/qualifier[/...]] source_filespec[,...]

    Controls whether MMS automatically generates a description file.
    The source_filespec specifies the source files to inspect for
    dependencies and from which the target will be built. The first
    file specified must contain the main module from which the target
    will be built. Otherwise, the source files can be specified in
    any order and wildcard characters can be used. Unless the /CMS
    qualifier has been specified, the description-file generator
    scans all the specified files for dependencies and generates an
    MMS description file for the target defined by the main module.

    For example, if the target is built from C files in the current
    default directory and from Bliss files in the subdirectory
    [.BLISS], and the file MAIN.C contains the main module, the
    following command generates the description file in DESCRIP.MMS:

    $ MMS/GENERATE MAIN.C,*.C,[.BLISS]*.BLI

3.1  –  Qualifiers

3.1.1    /BUILTIN_RULES_APPLY

    /BUILTIN_RULES_APPLY
    /NOBUILTIN_RULES_APPLY (D)

    Controls whether MMS generates compilation actions lines. When
    /BUILTIN_RULES_APPLY is selected, no compilation action lines are
    included in the generated description file; the MMS built-in rules
    will be used to perform the compilations.

3.1.2    /CMS

    /CMS
    /NOCMS (D)

    Controls whether MMS looks for source files and include files in
    the current default CMS library. CMS must be installed on your
    system. If a directory-spec is associated with a file, that is the
    directory into which MMS fetches the file when building the target.

3.1.3    /DESCRIPTION

    /DESCRIPTION[=filespec]

    Specifies the file to which the generated description is written.
    When not specified, the description is written to the file
    DESCRIP.MMS in the current default directory.

3.1.4    /FMS_LIBRARY

    /FMS_LIBRARY=forms-library-name

    Specifies an FMS library. This qualifier defaults to MMS$FLB.FLB.

3.1.5    /INCLUDES

    /INCLUDES (D)
    /NOINCLUDES

    Indicates whether C include files are scanned for dependencies.
    This qualifier gives the same functionality as the Scan Include
    Files toggle button.

3.1.6    /LINK_LIBRARY

    /LINK_LIBRARY=filespec[,...]

    Specifies additional object libraries to be included in the LINK
    command in the description file.

3.1.7    /MAIN_MODULE

    /MAIN_MODULE=module-name

    Specifies the main module to be included from the object library
    during the Link process. The main module is that defined in the
    first source file specified and, by default, the module name is
    the same name as the file. This qualifier lets you specify a
    module name that is different from the file name. Note that if an
    appropriate language-dependent module name directive is detected
    within the first source file, the value specified by this
    qualifier is ignored.

3.1.8    /OBJECT_LIBRARY

    /OBJECT_LIBRARY=filespec

    Specifies the object library to be included in the LINK command in
    the description file. Object files from the compilations are
    inserted into this object library.

3.1.9    /OPTIONS_FILE

    /OPTIONS_FILE=filespec[,...]

    Specifies user-written options files to be included in the LINK
    command in the description file.

3.1.10    /SWITCHES

    /SWITCHES=COMPILE="/qualifier..."
    /SWITCHES=LINK="/qualifier..."
    /SWITCHES=(COMPILE="/qualifier...",LINK="/qualifier...")

    Specifies additional command line qualifiers to be included in the
    generated description file for all compilation and/or link commands.
    Additional compilation switches can not be specified when
    /BUILTIN_RULES_APPLY has been specified.

3.1.11    /TARGET

    /TARGET=name

    Specifies a name for the build target. If this qualifier is not
    specified, the target defaults to the first file specified. This
    lets you specify an executable name that is different from the file
    name.

4  –  Description File

    The description file contains rules that describe how the  components
    of  your system are related and how MMS is to build them.  You create
    and modify  a  description  file  with  any  text editor (or by using
    MMS/GENERATE);  once the description file exists, you need issue only
    a simple MMS command to update your system.

    A description file contains dependency rules  and  can  also  contain
    macro definitions, directives, and user-defined rules.

4.1  –  Dependency rules

    Dependency rules describe the relationships  among  the  files  in  a
    software system and specify the actions MMS is to perform in updating
    those files.

    Format:

      target,... : source,...  [! comment]
              action line    [! comment]

    Targets and sources  are  OpenVMS  file  specifications  or  mnemonic
    names.   A  target  is the file you want updated.  A source is a file
    from which the target is built and can be optional.  You must begin a
    target/source  line  in column 1 of the line, and you must include at
    least one space or tab on each side  of  the  colon.   A  comment  is
    simply a string of text that documents the description file.

    An action line contains a CLI command that specifies how  the  target
    is  to  be built from the source.  An action line must be indented by
    at least one space or tab below the corresponding target/source line.
    When  you  run  MMS,  all  action  lines,  including any comments you
    specified in the description file, are written to SYS$OUTPUT  (or  to
    the file specified by the /OUTPUT qualifier) as they are executed.

    MMS supplies some default, or "built-in," dependency rules.  You  can
    also define your own rules.

4.1.1  –  Built-in Rules

    MMS uses built-in rules when you omit the action line or the  source,
    or  both, from a dependency rule.  Built-in rules allow MMS to assume
    dependencies that are not stated  in  the  description  file  and  to
    perform  actions  necessary  to  update  the target.  To decide which
    built-in rule to apply to a dependency, MMS also  uses  the  suffixes
    precedence list.

    Built-in rules also allow you to  access  files  stored  in  OpenVMS,
    CMS,  FMS libraries and records stored in the Common Data Dictionary.

4.1.2  –  User-defined Rules

    You can define your own rules in a description file if MMS  does  not
    supply  a built-in rule that meets your needs.  Once you define a new
    rule, MMS uses  it  every  time  it  builds  your  system  with  that
    description file.

    Format:

      .SRC.TAR     [! comment]
              action line...     [! comment]

    .SRC is the source file type, and .TAR is the target file type.   The
    comment  is  a  string  of text that documents your rule.  The action
    lines specify the CLI commands that MMS should execute  to  update  a
    file  of  the  target  type from a file of the source type.  Both the
    source and target file types must appear in the  suffixes  precedence
    list.

4.1.3  –  Suffixes precedence list

    The suffixes precedence list is a list of  all  the  file  types  MMS
    recognizes,  arranged in a predetermined order.  MMS uses the list to
    decide which built-in rule to apply based on the order of  the  types
    in the list, the file type of the target currently being updated, and
    the existence of source files in the specified directory.

    You can  alter  the  suffixes  precedence  list by using  one  of the
    .SUFFIXES... directives.

4.2  –  Macros

    A macro is a name that represents a character string.  You can define
    a  macro  at  the  beginning  of  the  description file or on the MMS
    command line and then use its name anywhere in the  description  file
    in  place  of  the equivalent string.  A macro must be defined before
    you use it.

    Format:

      name = string

    The name identifies the macro,  and  the  string  is  the  text  that
    replaces  the  name  when  the macro is expanded.  A macro definition
    must begin in column 1 of the line.  To invoke a macro, type:

         $(name)

    You can define a macro on the command line with the /MACRO qualifier;
    you can also use a CLI symbol as a macro.

    If a macro is not defined in the description file, MMS looks  in  its
    environment for macro definitions.  To find them, it looks at symbols
    defined by the CLI assignment  statement,  scanning  the  CLI  symbol
    table  for the body of the macro.  If the body of the macro is not in
    the  CLI  symbol  table,  MMS  substitutes  a  null  string  for  all
    invocations of the macro.

    MMS supplies some default, or "built-in," macro definitions and  some
    "special" macros for use in action lines.

4.3  –  Reserved-Macros

    MMS                  Used to invoke MMS from a description file.
    MMSALPHA             Defined as 'Alpha' if MMS is running on Alpha.
    MMSARCH_NAME         The architecture name on which MMS is running
                             (i.e. 'IA64', 'Alpha' or 'VAX').
    MMSDESCRIPTION_FILE  The full file specification of the description
                         file specified (or implied) by the command line.
    MMSIA64              Defined as 'IA64' if MMS is running on IA64.
    MMSQUALIFIERS        The command line qualifiers used to invoke MMS.
    MMSTARGETS           The target list specified on the command line.
    MMSVAX               Defined as 'VAX' if MMS is running on VAX.

    Note: the MMSIA64, MMSVAX and MMSALPHA macros can be used with the
          .IF directive to include description file lines that should
          only be processed for the appropriate architecture.

4.4  –  Special-Macros

    MMS$TARGET            $@    The current target
    MMS$TARGET_NAME       $*    The current target (excluding file type)
    MMS$SOURCE            $<    The source file specification
    MMS$SOURCE_LIST       $+    Comma-separated list of all sources
    MMS$CHANGED_LIST      $?    Comma-separated list of sources that are
                                newer than the current target
    MMS$TARGET_SPEC       $>    The current target

    If the target is a module in an OpenVMS library...
    MMS$LIB_ELEMENT       $%    Element spec (i.e., module=alias)
    MMS$TARGET            $@    The library file specification
    MMS$TARGET_NAME       $*    The module name
    MMS$TARGET_SPEC       $>    The library file specification

    If the source is a CMS element...
    MMS$CMS_ELEMENT       $<    The CMS element
    MMS$CMS_GEN           $&    The CMS generation
    MMS$CMS_LIBRARY       $@    The CMS library specification

4.5  –  Directives

    A directive is a word that instructs MMS to take a certain action  as
    it  processes a description file.  A directive can appear on any line
    in the description file, but it affects how  the  entire  description
    file is processed.  A directive must start in column 1 of the line.

    The MMS directives and their functions are:

    Directive       Function

    .ACTION_STATUS   Introduces a user-defined severity rule; select
                     'Description_File' subtopic 'User_Defined_Severity'
                     for more information.

    .DEFAULT         Indicates actions to be performed  if MMS built-in
                     rules or user-defined rules do not specify how to
                     update a target.

    .ELSE            Causes subsequent lines of a description file to be
                     processed if the boolean-expressions for the .IF
                     and all the preceding .ELSIF directives are false.

    .ELSIF           Causes subsequent lines of a description file to be
                     processed if the boolean-expressions for the .IF
                     and all the preceding .ELSIF directives are false
                     and the specified boolean-expression is true.

    .ENDIF           Terminates the set of lines in the description file
                     whose processing is controlled by .IF, .ELSIF and
                     .ELSE.

    .FIRST           Indicates actions to be performed before MMS has
                     executed any action lines to update the target.

    .IF              Causes subsequent lines of a description file to be
                     processed only if the specified boolean-expression
                     is true; select 'Description_File' subtopic
                     'Using_Conditionals' for more information.

    .IFDEF           Causes subsequent lines of a description file to be
                     processed only if the specified macro is defined
                     (obsolete, use .IF instead).

    .IGNORE          Causes MMS to ignore all errors generated by all
                     action lines and to continue processing the
                     description file.

    .INCLUDE         Includes the specified file in the description file.

    .LAST            Indicates actions to be performed after MMS has
                     executed all the action lines that update the target.

    .SILENT          Suppresses the writing of all action lines to the
                     output file (whether to SYS$OUTPUT or to the file
                     specified by the /OUTPUT qualifier).

    .SUFFIXES        Clears or appends to the suffixes-precedence list.

    .SUFFIXES_DELETE Clears or deletes types from the suffixes-precedence
                     list.

    .SUFFIXES_AFTER  Inserts types into the suffixes-precedence list
                     after the first type specified.

    .SUFFIXES_BEFORE Inserts types into the suffixes-precedence list
                     before the first type specified.

4.6  –  Action line prefixes

    An action line prefix is a modifier that controls the processing of a
    single action line in a description file.  The action line prefixes
    are:

    Prefix           Function

    - (Ignore)       Causes MMS to ignore errors generated by the action
                     line on which the prefix appears.

    @ (Silent)       Suppresses the writing to the output file of the
                     action line  on which the prefix appears. (The output
                     file can be either SYS$OUTPUT or the file specified
                     by the /OUTPUT qualifier).

    ?name (Severity) Use named user-defined severity rule to convert the
                     status returned by the action line to the equivalent
                     OpenVMS severity. Select 'Description_File' subtopic
                     'User_Defined_Severity' for more information.

    An action line prefix must appear as the first character on an action
    line.   The rest of the action line must be separated from the prefix
    by at least one space or tab.  To  use  more than  one prefix  on the
    same action line, type them next to each other with no intervening
    spaces; they must be separated from the rest of the action line with at
    least one space or tab.

4.7  –  Predefined functions

    Predefined functions can be used to perform text processing operations,
    operate on file specifications and determine the origin of macros. Note
    that, predefined functions can only be used if extended syntax has been
    enabled (use /EXTENDED_SYNTAX qualifier when invoking MMS or, in
    DECwindows MMS, check the Extended Syntax check box in the Build
    Definitions/Directives Options dialog box).

    Where a parameter to a function is considered to be a list of words,
    a word is defined as any sequence of characters, not containing
    white-space characters, that is terminated by a white-space character
    or ')'. White-space characters are space and tab. Functions that
    generate word lists will produce lists that are white-space
    compressed (i.e. no leading or trailing spaces and a single space
    character between each word in the list).

4.7.1  –  Text operations

    The following functions perform text processing operations:

4.7.1.1  –  ADDPREFIX

    $(ADDPREFIX prefix,text)

    Prepends to text. 'prefix' is prepended to the start of each word
    in 'text'.

4.7.1.2  –  ADDSUFFIX

    $(ADDSUFFIX suffix,text)

    Appends to text. 'suffix' is appended to the end of each word in
    'text'.

4.7.1.3  –  FILTER

    $(FILTER pattern...,text)

    Filters text. Any word in 'text' that does not match any 'pattern'
    word is removed. 'pattern' words may contain the wildcard
    characters * and %.

4.7.1.4  –  FILTER-OUT

    $(FILTER-OUT pattern...,text)

    Filters text. Any word in 'text' that matches any 'pattern' word
    is removed. 'pattern' words may contain the wildcard characters
    * and %.

4.7.1.5  –  FINDSTRING

    $(FINDSTRING find,text)
    String search. If 'find' occurs in 'text', the value is 'find';
    otherwise, the value is empty.

4.7.1.6  –  FIRSTWORD

    $(FIRSTWORD text)

    Returns the first word in 'text'.

4.7.1.7  –  FOREACH

    $(FOREACH macro,list,text)

    Repeatedly expands text. For each word in 'list', 'text' is
    repeated with the value of 'macro' defined as the word from 'list'.

4.7.1.8  –  JOIN

    $(JOIN list,text)

    Concatenates word by word. Each word in 'text' is appended to the
    corresponding word in 'list' to form a word in the result. When
    the number of words in 'list' and 'text' are not the same, the
    remaining words from the longer list are simply appended to the
    result.

4.7.1.9  –  PATSUBST

    $(PATSUBST pattern...,to,text)

    Pattern substitution. Each word in 'text' that matches any
    'pattern'    word is replaced by 'to'. 'pattern' words may contain
    the wildcard characters * and %. If 'to' also contains wildcard
    characters, they will be replaced by the text that matched the
    wildcard characters in 'pattern'.

4.7.1.10  –  SORT

    $(SORT text)

    Sorts text. Words in 'text' are sorted into lexical order;
    duplicated words are removed.

4.7.1.11  –  STRIP

    $(STRIP text)

    White-space compression. Leading and trailing white-space is
    removed from 'text' and each internal sequence of white-space
    characters is replaced by a single space.

4.7.1.12  –  SUBST

    $(SUBST from,to,text)

    String substitution. Each occurrence of 'from' in 'text' is
    replaced by 'to'.

4.7.1.13  –  WORD

    $(WORD n,text)

    Returns the n'th word from 'text'. 'n' should be in the range 1 to the
    number of words in the list; when 'n' is not in this range, the result
    is empty.

4.7.1.14  –  WORDS

    $(WORDS text)

    Returns the number of words in 'text'.

4.7.2  –  File operations

    The following functions operate on file specifications; each has a
    single parameter which is a list of words where each word is
    considered to be a file specification:

4.7.2.1  –  BASENAME

    $(BASENAME text)

    Returns directory and name part. For each file specification in
    'text', returns that part of the file specification that is not
    the type or version.

4.7.2.2  –  DIR

    $(DIR text)

    Returns directory part. For each file specification in 'text',
    returns that part of the file specification that is not the name,
    type or version.

4.7.2.3  –  FILETYPE

    $(FILETYPE text)

    Returns type part. For each file specification in 'text', returns
    the type part of the file specification.

4.7.2.4  –  FILEVERSION

    $(FILEVERSION text)

    Returns version part. For each file specification in 'text',
    returns the version part of the file specification.

4.7.2.5  –  NOTDIR

    $(NOTDIR text)

    Returns name/type part. For each file specification in 'text',
    returns the name and type part of the file specification.

4.7.2.6  –  WILDCARD

    $(WILDCARD text)

    File search. Result is the name and type part of all existing files
    that match any of the file specifications in 'text'. The file
    specifications may contain the wildcard characters * and %.

4.7.3  –  Other operations

    Other miscellaneous operations:

4.7.3.1  –  ORIGIN

    $(ORIGIN macro)

    Result is the origin of 'macro' as follows:

          "FILE"          defined in a description file
          "COMMAND LINE"  defined on the command line
          "SPECIAL"       a special macro
          "DEFAULT"       a default macro
          "CLI SYMBOL"    a CLI symbol
          "TEMPORARY"     defined by function FOREACH
          "UNDEFINED"     'macro' is not defined

4.8  –  User Defined Severity

    When an action line returns a value that is not a standard OpenVMS
    status, the .ACTION_STATUS directive can be used to define how the
    equivalent OpenVMS severity can be determined from the foreign status
    value.

    The action line prefix, ?name, indicates those action lines for which
    the severity must be determined according to the named ACTION_STATUS
    directive.

    The ACTION_STATUS directive has the following form:
     (use the line continuation character '-' if the directive uses more
      than one line)

    .ACTION_STATUS name [ .MASK m  ]
                        [ .SUCCESS { s1,s2,... | OTHERS } ]
                        [ .INFORMATION { i1,i2,...  | OTHERS } ]
                        [ .WARNING { w1,w2,...  | OTHERS } ]
                        [ .ERROR { e1,e2,... | OTHERS } ]
                        [ .FATAL { f1,f2,... | OTHERS } ]

    where,

       Name is any sequence of characters not starting with a punctuation
       character and terminated by comma, space or tab (punctuation
       characters are ! : ; , # ).

       m,s,i,w,e,f are decimal, octal or hex numbers
           (octal numbers are 0... and hex numbers are %x... or 0x...).

       Space, tab or comma can be used as the separators in a list of
       numbers.

       OTHERS can only be specified for one severity.

       If OTHERS is not specified, it will default to the least severe of
       any undefined severity (or ERROR if all severity values are
       defined).

       The directive is effective over the entire file.

       It is an error to specify two ACTION_STATUS directives with the same
       name.

    MMS will then interpret the status returned from an action line
    prefixed by ?name as follows:

       If mask is specified, extract value from the action line status
       using the mask value; the extracted value is shifted right to match
       the first bit in the mask.

       If mask is not specified, extracted value is the action line status.

       Determine the severity associated with the extracted value.

    MMS will then continue, treating this severity as if it were a standard
    OpenVMS $SEVERITY.

4.9  –  Using Conditionals

    The directives .IF, .ELSIF, .ELSE and .ENDIF are used to instruct MMS
    to process selected lines in your description file.

    The .IF directive has the following format:

       .IF boolean-expression
       [description file line] ...
       {.ELSIF boolean-expression}
       [description file line] ...
       [.ELSE]
       [description file line] ...
       .ENDIF

    In  this  syntax,  the  "description  file  line"  is  zero  or  more
    description file lines that may include further  .IF directives.  The
    .IF  directive  may be  followed  by  zero  or  any number of  .ELSIF
    directives,  and zero or one .ELSE directive.  The .IF directive must
    always be accompanied  by a  matching .ENDIF directive.

    MMS  evaluates  the   'boolean-expression'  specified  with  the  .IF
    directive. If true, the lines of the description file between the .IF
    directive and a corresponding .ELSIF, .ELSE  or .ENDIF are processed;
    then, if either .ELSIF or .ELSE  were detected,  all description file
    lines  from  this  line  to the  corresponding  .ENDIF  directive are
    ignored. When the boolean-expression specified with the .IF directive
    is  false,   all   description  file  lines  from  this  point  to  a
    corresponding    .ELSE,    .ENDIF   or    .ELSIF   whose   associated
    'boolean-expression' is true, are ignored.

    The 'boolean-expression' specified in  .IF and .ELSIF  directives  is
    defined as follows:

    boolean-expression
       :== [ .NOT ] boolean-operation |
           [ .NOT ] boolean-operation boolean-operator boolean-expression

    boolean-operation :== ( boolean-expression ) |
                          word |
                          word comparison-operator word

    word :== null |
             any sequence of characters, terminated by space, and not
             starting with '.', '(' or ')'.

    boolean-operator :== .AND | .OR

    comparison-operator :== .EQ | .NE | .GE | .LE | .GT | .LT

    The operands in the 'boolean-expression' take one of two forms:

    .IF word

    or,

    .IF word1 .EQ word2

    In the first case,  MMS checks to see if  'word' is a  macro that has
    been defined to a  non-null value;  the expression  is true if it is,
    false otherwise. (NOTE: this is  precisely the same  functionality as
    that of the obsolete .IFDEF directive).  For example,  to check  that
    the macro FRUIT is defined, write:

    .IF FRUIT

    In the second case,  MMS  performs the requested  comparison  between
    'word1' and 'word2' to determine the expression value; the comparison
    operation  is  case-sensitive.  Note  that,  when  using  macros  and
    functions in expressions of this form,  you must reference the  macro
    or function in the standard way, in $().  For example,  to check that
    the macro FRUIT is defined to be BANANAS, write:

    .IF $(FRUIT) .EQ BANANAS

    If you need to compare words that start with the  characters '.', '('
    or  ')'  or  text  containing  layout  characters  then,  enclose the
    words or text   (on  both  sides  of  the  comparison  operator)   in
    quotation-marks.  For example,  to check that the macro  FILETYPE  is
    defined  as  .MMS,  and  that  the  macro  VERSION  is not defined as
    'Version 3.2', you must write:

    .IF "$(FILETYPE)" .EQ ".MMS" .AND "$(VERSION)" .NE "Version 3.2"

5  –  Examples

5.1  –  Description File

    The following description file directs MMS to build MYPROG.EXE using
    the appropriate architecture-dependent *_DEFS.REQ:

         ! Macro definitions
         LIBRARYMODULES = A, B, C, D, E
         LIBRARIES = MYPROG.OLB($(LIBRARYMODULES)) - ! project library
                     SYS$LIBRARY:CRTLIB.OLB          ! C Runtime Library
         ! Dependencies
         MYPROG.EXE : $(LIBRARIES)
              LINK/EXEC=MYPROG MYPROG/LIB/INCLUDE=(A)
         .IF MMSIA64
         A.OBJ, B.OBJ : IA64_DEFS.REQ
         .ELSIF MMSALPHA
         A.OBJ, B.OBJ : ALPHA_DEFS.REQ
         .ELSE
         A.OBJ, B.OBJ : VAX_DEFS.REQ
         .ENDIF
         D.OBJ, E.OBJ : COMMON.H
         E.OBJ : DATA.H

    If this file is named DESCRIP.MMS, the following command  causes  MMS
    to use the file to build MYPROG.EXE:

         $ MMS

5.2  –  MMS Actions

    If the current default directory contains the following files:

             A.BLI;1             B.BLI;1             C.MAR;1
             COMMON.H;1          D.C;1               DATA.H;1
             DEFS.REQ;1          DESCRIP.MMS;1       E.C;1

    MMS will execute the following actions as  it  processes  the  sample
    description file:

         BLISS  A.BLI
         IF "''F$SEARCH("MYPROG.OLB")'" .EQS. "" THEN LIBRARY/CREATE
         MYPROG.OLB
         LIBRARY/REPLACE MYPROG.OLB A.OBJ
         BLISS  B.BLI
         IF "''F$SEARCH("MYPROG.OLB")'" .EQS. "" THEN LIBRARY/CREATE
         MYPROG.OLB
         LIBRARY/REPLACE MYPROG.OLB B.OBJ
         MACRO C.MAR
         IF "''F$SEARCH("MYPROG.OLB")'" .EQS. "" THEN LIBRARY/CREATE
         MYPROG.OLB
         LIBRARY/REPLACE MYPROG.OLB C.OBJ
         CC /NOLIST D.C
         IF "''F$SEARCH("MYPROG.OLB")'" .EQS. "" THEN LIBRARY/CREATE
         MYPROG.OLB
         LIBRARY/REPLACE MYPROG.OLB D.OBJ
         CC /NOLIST E.C
         IF "''F$SEARCH("MYPROG.OLB")'" .EQS. "" THEN LIBRARY/CREATE
         MYPROG.OLB
         LIBRARY/REPLACE MYPROG.OLB E.OBJ
         LINK/EXEC=MYPROG MYPROG/LIB/INCLUDE=(A)

    These actions result in the production of all the intermediate  files
    needed  to  produce  MYPROG.EXE.   If  you then delete all the object
    files (.OBJ), and run  MMS  again  using  the  /SKIP  qualifier,  MMS
    informs you that the target MYPROG.EXE is already up-to-date.

6  –  CMS

    If CMS is installed on your system and your source files  are in  the
    current default  CMS library,  MYPROG.EXE may be built  from the  CMS
    library when you issue the following command:

         $ MMS/CMS

    This command causes MMS to fetch the description file, if  necessary,
    and source files from the CMS library, and perform the actions needed
    to create an up-to-date MYPROG.EXE.

    If a module, for example A.BLI, is replaced in the  CMS  library  (by
    you  or  anyone else), thus causing a later version of A.BLI to exist
    in the library, the command

         $ MMS/CMS

    causes MMS to fetch the new CMS element A.BLI, compile it, add it  to
    the MYPROG.OLB library, and produce a new MYPROG.EXE by executing the
    LINK command.

7  –  FMS

    If FMS (Forms Management System) is installed on your system, you can
    use MMS to access forms stored in FMS libraries.  To specify   an FMS
    form  in a  dependency  rule,  use the  same syntax  as for  files in
    OpenVMS libraries.  The file type .FLB after the library name informs
    FMS that the library contains FMS forms.  The default file  type  for
    FMS forms is .FRM.

    The  MMS  default  macro  FMSFLAGS  invokes  FMS  with  the  /REPLACE
    qualifier.

    MMS uses the insertion time of a form in an FMS library to  determine
    whether  a  source  is  newer  than  the  target.  You cannot use the
    /REVISE_DATE qualifier with references to FMS forms.

8  –  MMS$STATUS

    Unless  the  qualifiers   /CHECK_STATUS  or   /REVISE_DATE  have been
    selected,  when MMS completes,  the symbol  MMS$STATUS  is set to the
    status value($STATUS) of the last action line executed.

9  –  MMS$SEVEREST_STATUS

    When  MMS  completes,  the symbol  MMS$SEVEREST_STATUS  is set to the
    'severest' status value($STATUS) of all action lines executed. If the
    status values  of more than one  action line have the  same severity,
    then the resulting value of  MMS$SEVEREST_STATUS  will be that of the
    last of these action lines.

10  –  Oracle CDD/Plus

    If the Oracle Common Data Dictionary (CDD/Plus) is installed on  your
    system,  you  can  use  MMS  to  access records and other definitions
    stored in CDD/Plus.  In a dependency rule, you follow the  path  name
    of  a  CDD/Plus  definition  with  a caret (^) to inform MMS that the
    source is stored in CDD/Plus.  For example:

         A.PAS : CDD$TOP.B.C.D.E^      ! CDD record that updates A.PAS
              ! action to update A.PAS

    To insert a remark in the CDD/Plus history list when MMS  accesses  a
    CDD/Plus  definition, use the /AUDIT qualifier after the caret in the
    CDD/Plus specification.  Follow the /AUDIT qualifier  with  a  quoted
    string  that  contains  the  remark  to  be  inserted in the CDD/Plus
    history file.  For example:

         A : CDD$TOP.B.C.D.E^/AUDIT="Accessed by MMS to update A"
              ! action to update A

    The MMS default macro CDDFLAGS is initially defined to  be  the  null
    string, but you can redefine it so that the same remark is written to
    the history file for all accesses to CDD/Plus entities.

    You cannot use the /REVISE_DATE qualifier with references to CDD/Plus
    definitions.   The  /NOACTION  qualifier  does  not affect the /AUDIT
    qualifier; that is, remarks are written to the CDD/Plus history  file
    even if action lines are not being executed.

11  –  Release Notes

    The release notes for MMS Version 4.0 are contained in the file:

    SYS$HELP:MMS040.RELEASE_NOTES

    You can type or print this file to read the release note information.
    If  you  have installed prior versions of MMS, the associated release
    notes  up  to  and   including   Version  4.0   can   be   found   in
    SYS$HELP:MMSvvu.RELEASE_NOTES,  where vv is the major version number,
    and u is the update number.
Close Help