1 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...]
2 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

/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.

/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.

/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.

/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.

/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.

/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.

/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.

/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.

/GENERATE

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

   Invokes the MMS description file generator.

   Select MMS subtopic 'Generating_Description_Files' for more
   information.


/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"

/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.

/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.

/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.

/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.

/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.

/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)

/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.

/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

/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).

/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.

/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 *

/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.

/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.

/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.

2 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 Qualifiers

/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.

/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.

/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.

/FMS_LIBRARY

   /FMS_LIBRARY=forms-library-name

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

/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.

/LINK_LIBRARY

   /LINK_LIBRARY=filespec[,...]

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

/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.

/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.

/OPTIONS_FILE

   /OPTIONS_FILE=filespec[,...]

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

/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.

/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.

2 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.

3 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 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 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 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.

3 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.

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.

3 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


3 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.

3 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.

3  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  Text_operations

   The following functions perform text processing operations:

5  ADDPREFIX

   $(ADDPREFIX prefix,text)

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

5  ADDSUFFIX

   $(ADDSUFFIX suffix,text)

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

5  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 %.

5  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 %.

5  FINDSTRING

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

5  FIRSTWORD

   $(FIRSTWORD text)

   Returns the first word in 'text'.

5  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'.

5  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.

5  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'.

5  SORT

   $(SORT text)

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

5  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.

5  SUBST

   $(SUBST from,to,text)

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

5  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.

5  WORDS

   $(WORDS text)

   Returns the number of words in 'text'.

4  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:

5  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. 

5  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. 

5  FILETYPE

   $(FILETYPE text)

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

5  FILEVERSION

   $(FILEVERSION text)

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

5  NOTDIR

   $(NOTDIR text)

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

5  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  Other_operations

   Other miscellaneous operations:

5  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

3  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.

3  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"

2 Examples

3 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

3 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.

2 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.

2 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.

2 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.

2 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.

2 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.

2 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.