DataMuseum.dk

Presents historical artifacts from the history of:

Rational R1000/400 Tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Rational R1000/400 Tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download
Index: ┃ P T

⟦195275978⟧ TextFile

    Length: 192762 (0x2f0fa)
    Types: TextFile
    Names: »PM_HELP«

Derivation

└─⟦5f3412b64⟧ Bits:30000745 8mm tape, Rational 1000, ENVIRONMENT 12_6_5 TOOLS 
    └─ ⟦91c658230⟧ »DATA« 
        └─⟦f6fec0485⟧ 
            └─⟦this⟧ 

TextFile


  @node !Commands.Activity

  An activity maintains a mapping between subsystems and pairs of
  views.  The pair consists of a spec view and a load view from
  that subsystem.  An activity typically is used to specify an
  implementation from each subsystem to be used for execution.

  This package provides operations for creating, viewing, and
  manipulating activities and for identifying which activity is
  the current activity for a running job or session.

  Editing Activities

  In addition to the commands relating to activities, an editor
  provides editing operations specific to activities.  Many of the
  operations in package !Commands.Common apply to activities.  An
  activity can be viewed with the Edit command (or simply by getting
  the definition of the activity) and then can be edited with common
  editing operations.  This section describes the commands from
  package !Commands.Common that apply to activities.  Operations
  from package Common that do not apply to activities produce a
  message to that effect in the Message window.

  Changes to activities are not made permanent until committed.  When
  an activity is changed, but not yet committed, the # symbol appears
  in the window banner.  Committing the activity makes all changes
  to the activity permanent, and the = symbol appears in the window
  banner.

  Commands from Package !Commands.Common

  !Commands.Common.Abandon

  Ends editing of the activity and removes the window from the
  screen.  Because all changes to activities are not made permanent
  until committed, any uncommitted changes will be lost.

  !Commands.Common.Commit

  Makes permanent any changes made to the activity.

  !Commands.Common.Create_Command

  Creates a Command window below the current window.  The use clause
  in the Command window includes package Activity, so operations in
  package Activity are directly visible without qualification in the
  Command window.

  !Commands.Common.Definition

  Finds the definition of the subsystem corresponding to the selected
  entry or the entry on which the cursor resides, in the compressed
  form of an activity.  For expanded entries (that is, those expanded
  to three lines:  one each for the subsystem, the spec view, and the
  load view), this command finds the definition of the corresponding
  subsystem, spec view, or load view.  This procedure creates a
  window containing that subsystem or view.

  !Commands.Common.Edit

  Prompts the user for changes to the selected entry, or to the 
  entry on which the cursor resides when [Edit] is pressed, by creating
  a Command window and placing in it the command:

      Change (Spec_View => "", Load_View => "");

  The user fills in values for one or both parameters, as desired.

  Spec- or load-view entries also can be specified indirectly through
  another activity.  By specifying the name of an activity rather
  than the name of an actual view, the user indicates that the
  name of the desired view should be derived from the subsystem's
  corresponding entry in the specified activity.

  !Commands.Common.Release

  Makes any changes to the activity permanent, releases control of
  (unlocks) the activity, and then destroys the window.

  !Commands.Common.Sort_Image

  Sorts the activity image according to the specified sort format.
  These formats are specified by number:

     1    Sorts by subsystem
     2    Sorts by kind and subsystem
     3    Sorts by kind and value
     4    Sorts by kind and view
     5    Sorts by value and subsystem
     6    Sorts by value and kind
     7    Sorts by view and subsystem
     8    Sorts by view and kind

  !Commands.Common.Object.Child

  Selects the entry in the activity on which the cursor currently
  resides.  If an entry is already selected, this command has no
  effect.

  !Commands.Common.Object.Delete

  Deletes the selected entry or the entry on which the cursor
  resides.

  !Commands.Common.Object.Elide

  Controls the level of detail displayed in the image of the current
  activity.  Successive uses display successively less information
  about the activity entries, proceeding from top to bottom in the
  following list:

  o All data by subsystem

  o Load data by subsystem (indirections are identified)

  o Spec data by subsystem (indirections are identified)

  o Both views by subsystem

  o Load views by subsystem (indirections are not identified)

  o Spec views by subsystem (indirections are not identified)

  o Subsystems by subsystem

  !Commands.Common.Object.Expand

  Controls the level of detail displayed in the image of the current
  activity.  Successive uses display successively more information
  about the activity entries, proceeding from bottom to top in the
  list given under Common.Object.Elide.

  !Commands.Common.Object.Explain

  Uncompresses a subsystem entry, separating each component
  (subsystem name, spec view, and load view) of the entry onto
  separate lines.

  !Commands.Common.Object.First_Child

  Selects the first entry of the activity.

  !Commands.Common.Object.Insert

  Inserts a new subsystem entry or modifies an existing entry in the
  activity by prompting the user.  Creates a Command window and places
  in it the command:
      Insert (Subsystem => "", Spec_View => "", Load_View => "");

  The user fills in values for parameters, as desired.  If the
  subsystem name is omitted, it will be derived from the view names,
  provided that these are full pathnames.

  Spec- or load-view entries also can be specified indirectly through
  another activity.  By specifying the name of an activity rather
  than the name of an actual view, the user indicates that the
  name of the desired view should be derived from the subsystem's
  corresponding entry in the specified activity.

  !Commands.Common.Object.Last_Child

  Selects the last entry of the activity.

  !Commands.Common.Object.Next

  Selects the next entry in the activity if an entry is selected.
  If no entry is selected, this command selects the entry on which
  the cursor currently resides.  If all entries are selected, this
  procedure produces an error.

  !Commands.Common.Object.Parent

  Selects the entry in the activity on which the cursor currently
  resides.  If an entry is already selected, the procedure selects
  all entries in the activity.  Otherwise, the procedure has no
  effect.

  !Commands.Common.Object.Previous

  Selects the previous entry in the activity if an entry is selected.
  If no entry is selected, the procedure selects the entry on which
  the cursor currently resides.  If all entries are selected, this
  procedure produces an error.
  @node !Commands.Activity.Activity_Name

  subtype Activity_Name is String;

  Defines a string pathname that resolves to an activity in the
  directory system.
  @node !Commands.Activity.Add

  procedure Add
     (Subsystem    : Subsystem_Name        := "<CURSOR>";
      Load_Value   : View_Or_Activity_Name := Activity.Nil;
      Spec_Value   : View_Or_Activity_Name := Activity.Nil;
      The_Activity : Activity_Name         := Activity.The_Current_Activity;
      Mode         : Creation_Mode         := Activity.Exact_Copy;
      Response     : String               := "<PROFILE>");

  Modifies the activity specified by The_Activity parameter by
  updating an existing entry for a subsystem or by adding a new entry
  if an entry for the specified subsystem does not already exist.
  @node !Commands.Activity.Change

  procedure Change (Spec_View : View_Or_Activity_Name := "";
                   Load_View : View_Or_Activity_Name := "");

  Modifies the spec-view and/or load-view components of the
  currently selected subsystem entry or the entry on which the cursor
  currently resides.

  The !Commands.Common.Edit command prompts the user with this
  command.  This command is meaningful only in a Command window
  associated with an activity.
  @node !Commands.Activity.Create

  procedure Create (The_Activity : Activity_Name := ">>ACTIVITY NAME<<";
                   Source       : Activity_Name := Activity.Nil;
                   Mode         : Creation_Mode := Activity.Exact_Copy;
                   Response     : String        := "<PROFILE>");

  Creates a new activity.

  The created activity may be derived from the source activity based
  on the Mode parameter.
  @node !Commands.Activity.Creation_Mode

  type Creation_Mode is (Differential, Exact_Copy, Value_Copy);

  Defines three modes for the creation of spec-view and load-view
  references for subsystem entries.

  Differential

  Indicates that the new entry should be formed as an indirect
  reference to the source activity.  The created entry will not be
  the name of a view but the name of another activity that specifies
  an actual view or another activity from which to derive the
  view.  With this mode, changes made to the source activity will
  be reflected in the target activity.

  Exact_Copy

  Indicates that the new entry should be formed as an exact copy
  of the entry in the source activity.  Thus, if the source entry
  contains the name of an actual view, the new entry also will
  contain the actual view.  If the source entry contains an indirect
  reference, the new entry will contain an identical indirect
  reference.
  Value_Copy

  Indicates that the new entry should be formed as the dereferenced
  value of the corresponding source entry.  Indirect (differential)
  references will be resolved until an actual view is found.
  @node !Commands.Activity.Current

  procedure Current (Response : String := "<PROFILE>");

  Displays the name of the activity that is associated with the
  current job.

  If no activity has been associated with the job, the procedure
  returns the activity currently associated with the running
  session.

  The current activity is set by the Set and Set_Default procedures.
  @node !Commands.Activity.Display

  procedure Display
            (Subsystem    : Subsystem_Name := "?";
             Spec_View    : View_Name      := "?";
             Load_View    : View_Name      := "?";
             Mode         : Creation_Mode  := Activity.Value_Copy;
             The_Activity : Activity_Name  := Activity.The_Current_Activity;
             Response     : String         := "<PROFILE>");

  Displays an image of the specified activity.

  Only the mappings that match the patterns (Environment naming
  conventions, including wildcards) given in the Subsystem,
  Spec_View, and Load_View parameters are listed.  In Value_Copy
  mode, all indirect references are resolved; only the resolution is
  displayed.  In Exact_Copy mode, indirect mappings are not resolved;
  the name of the source activity is displayed.  In Differential
  mode, the indirect mappings are resolved; both the resolution and
  the original indirect activity are displayed.
  @node !Commands.Activity.Edit

  procedure Edit (The_Activity : Activity_Name := "<ACTIVITY>");

  Invokes the activity object editor on the specified activity.

  The default is to edit the current activity.
  @node !Commands.Activity.Enclosing_Subsystem

  procedure Enclosing_Subsystem (View     : View_Name := "<IMAGE>";
                                Response : String    := "<PROFILE>");

  Displays the name of the subsystem that contains the specified
  view.

  The default is the currently selected view, the view containing the
  current selection, or the view containing the current context.

  The view may be either a spec or a load view.
  @node !Commands.Activity.Enclosing_View

  procedure Enclosing_View (Unit     : Unit_Name := "<IMAGE>";
                           Response : String    := "<PROFILE>");

  Displays the name of the view that contains the specified unit.

  The default is the currently selected unit or unit image.
  @node !Commands.Activity.Insert

  procedure Insert
                (Subsystem : Subsystem_Name        := ">>SUBSYSTEM NAME<<";
                 Spec_View : View_Or_Activity_Name := "";
                 Load_View : View_Or_Activity_Name := "");

  Modifies an activity to update an existing entry for a subsystem
  or adds a new entry if one does not already exist for the specified
  subsystem.

  The !Commands.Common.Object.Insert command prompts the user with
  this command.  This command is meaningful only in a Command window
  associated with an activity.
  @node !Commands.Activity.Merge

  procedure Merge (Source    : Activity_Name  := ">>ACTIVITY NAME<<";
                  Subsystem : Subsystem_Name := "?";
                  Spec_View : View_Name      := "?";
                  Load_View : View_Name      := "?";
                  Mode      : Creation_Mode  := Activity.Exact_Copy;
                  Target    : Activity_Name  := "<ACTIVITY>";
                  Response  : String         := "<PROFILE>");

  Copies into the specified target those subsystem entries defined
  in the source activity that match the patterns specified in the
  Subsystem, Spec_View, and Load_View parameters.

  New subsystem entries are added as necessary; existing subsystem
  entries are replaced.

  Patterns for the Subsystem, Spec_View, and Load_View parameters
  are the standard Environment naming conventions and wildcards.
  @node !Commands.Activity.Nil

  function Nil return Activity_Name;

  Returns the name of an empty activity.
  @node !Commands.Activity.Remove

  procedure Remove
            (Subsystem    : Subsystem_Name := "<SELECTION>";
             The_Activity : Activity_Name  := Activity.The_Current_Activity;
             Response     : String         := "<PROFILE>");

  Deletes a subsystem entry from an activity.

  The default activity is the current activity for the job or
  session.
  @node !Commands.Activity.Set

  procedure Set (The_Activity : Activity_Name := "<ACTIVITY>";
                Response     : String        := "<PROFILE>");

  Changes the current activity for the running job to the specified
  activity.

  A session may have a current activity associated with it.  The
  Set_Default procedure is used to form this association.  When a job
  begins execution, its current activity is that of the current
  session.  The Set procedure changes a job's current activity
  without changing the session's activity.  Thereafter, until the
  job terminates, the new activity is consulted when necessary,
  instead of the current session's activity.

  Note that this procedure cannot be used to affect the loading of a
  subsequent command in the same job.  Loading is done for the entire
  job before execution begins and thus would be unaffected by the
  execution of the Set command.  In the following example:
      Activity.Set ("New_Activity_Name");
      Command_Requiring_Loading;

  the Command_Requiring_Loading command will be loaded with the
  current session's activity and not with New_Activity_Name.

  By contrast, in the example:
      Activity.Set ("New_Activity_Name");
      Program.Run ("Command_Requiring_Loading");

  the loading for the command via Program.Run is performed after the
  execution of the Set procedure and thus will use New_Activity_Name.
  @node !Commands.Activity.Set_Default

  procedure Set_Default (The_Activity : Activity_Name := "<ACTIVITY>";
                        Response     : String        := "<PROFILE>");

  Makes the specified activity the current activity for the current
  session.

  This procedure sets the value of the Profile.Activity_File
  session switch.  If the current activity of the job that executes
  Set_Default is nil, the procedure sets this activity as well.

  The default activity for a session is also preserved across
  logouts.
  @node !Commands.Activity.Set_Load_View

  procedure Set_Load_View
     (Load_View    : View_Or_Activity_Name := "<CURSOR>";
      Subsystem    : Subsystem_Name        := "";
      Mode         : Creation_Mode         := Activity.Differential;
      The_Activity : Activity_Name         := Activity.The_Current_Activity;
      Response     : String               := "<PROFILE>");

  Modifies the load view for the specified subsystem entry in
  The_Activity parameter.

  If an entry for the specified subsystem does not exist, one is
  added to the activity.
  @node !Commands.Activity.Set_Spec_View

  procedure Set_Spec_View
     (Spec_View    : View_Or_Activity_Name := "<CURSOR>";
      Subsystem    : Subsystem_Name        := "";
      Mode         : Creation_Mode         := Activity.Differential;
      The_Activity : Activity_Name         := Activity.The_Current_Activity;
      Response     : String               := "<PROFILE>");

  Modifies the spec view for the specified subsystem entry in
  The_Activity parameter.

  If an entry for the specified subsystem does not exist, one is
  added to the activity.
  @node !Commands.Activity.Subsystem_Name

  subtype Subsystem_Name is String;

  Defines a string pathname that resolves to a subsystem in the
  directory system.
  @node !Commands.Activity.The_Current_Activity

  function The_Current_Activity return Activity_Name;

  Returns the name of the current activity associated with the
  running job.

  If no activity has been associated with the running job, this
  function returns the activity associated with the running session.
  @node !Commands.Activity.The_Enclosing_Subsystem

  function The_Enclosing_Subsystem (View : View_Name := "<IMAGE>")
                                                    return Subsystem_Name;

  Returns the name of the subsystem that contains the specified view.

  The default is the currently selected view, the view containing the
  current selection, or the view containing the current context.
  @node !Commands.Activity.The_Enclosing_View

  function The_Enclosing_View (Unit : Unit_Name := "<IMAGE>")
                                                         return View_Name;

  Returns the name of the view that contains the specified unit.
  @node !Commands.Activity.Unit_Name

  subtype Unit_Name is String;

  Defines a string pathname that resolves to an Ada compilation unit
  in the directory system.
  @node !Commands.Activity.View_Name

  subtype View_Name is String;

  Defines a string pathname that resolves to a view of a subsystem.
  @node !Commands.Activity.View_Or_Activity_Name

  subtype View_Or_Activity_Name is String;

  Defines a string pathname that resolves either to a view of a
  subsystem or to an activity in the directory system.
  @node !Commands.Activity.View_Simple_Name

  subtype View_Simple_Name is String;

  Defines a string that is the simple name of a view of a subsystem.

  A simple name is an unqualified name not prefixed with the name of
  the object's parent.
  @node !Commands.Activity.Visit

  procedure Visit (The_Activity : Activity_Name := "<ACTIVITY>");

  Invokes the activity editor on the specified activity and replaces
  the old activity if one is currently being edited.

  This procedure is identical to the !Commands.Common.Edit command,
  except that if the command is given on an activity window, the new
  activity is displayed in that window rather than in a new one.
  @node !Commands.Activity.Write

  procedure Write (File : Activity_Name := "<ACTIVITY>");

  Copies the contents of an activity window into a new activity in
  the directory system.

  This command is valid only in an activity window.
  @node !Tools.Compatibility.Revn.Units.Check

  Package Check provides interfaces for checking the compatibility
  between spec and load views in a subsystem.  Compatibility is
  defined in the Key Concepts to this book.  Command-oriented
  interfaces and programmatic interfaces with status values are
  provided.  Interfaces are available for comparing units in load
  views with their corresponding units in spec views or for comparing
  a set of spec/load-view pairs.

  The compatibility checking done by this package checks that every
  declaration exported by a spec-view unit is also exported by the
  corresponding load-view unit and that the spec and load views have
  the same target key.  These declarations do not need to be in the
  same order or textually identical.  Two declarations are considered
  equivalent if they match according to the subprogram specification
  conformance rules of the Ada Language Reference Manual, section
  6.3.1.  All units involved in the check must be in the installed or
  coded state.

  It is possible to construct an activity such that the spec/load-
  view pairs named by the activity are compatible but the set of
  load views specified would not execute correctly together.  For
  example, this could happen if two load views in the activity import
  different spec views of the same subsystem.  The checks done by
  this package will not catch those situations, but the loader will
  check for this and report these types of problems at load time.
  @node !Tools.Compatibility.Revn.Units.Check.Activity

  procedure Activity (The_Activity : String  := "<ACTIVITY>";
                     Menu         : Boolean := False;
                     Response     : String  := "<PROFILE>");
  function  Activity (The_Activity : String := "<ACTIVITY>";
                     Response     : String := "<PROFILE>") return Status;

  Checks the compatibility of all spec-view and load-view pairs
  specified in an activity.

  For each subsystem entry in the activity, each unit in the spec
  view is checked for compatibility with the corresponding unit in
  the load view.  If an entry for a subsystem does not specify both a
  spec and a load view, that subsystem will not be checked.

  Two interfaces are provided:  a procedure interface for Command
  window usage and a functional interface returning a status value
  for use in building tools.
  @node !Tools.Compatibility.Revn.Units.Check.Status

  type Status is (Compatible, Incompatible, Error);

  Defines the range of possible outcomes of a compatibility check.

  Compatible

  Indicates that the unit or units included in the check are all
  compatible with each other.

  Error

  Indicates that the operation failed to complete successfully.  For
  example, the name of a unit or view may not be resolvable.  The log
  output can be consulted to determine the reason for the error.

  Incompatible

  Indicates that at least one unit included in the check is not
  compatible with another unit.  The log output can be consulted to
  determine which unit or units are not compatible.
  @node !Tools.Compatibility.Revn.Units.Check.Units

  procedure Units (Load_View_Units : String  := "<CURSOR>";
                  Spec_Views      : String  := "<ACTIVITY>";
                  Menu           : Boolean := False;
                  Response        : String  := "<PROFILE>");
  function Units (Load_View_Units : String := "<CURSOR>";
                 Spec_Views      : String := "<ACTIVITY>";
                 Response        : String := "<PROFILE>") return Status;

  Checks the compatibility of a set of units in load views with their
  corresponding units in the specified spec views.

  The Load_View_Units parameter specifies the set of units to be
  checked, and the Spec_Views parameter specifies the set of spec
  views used to perform the check.

  Two interfaces are provided:  a procedure interface for Command
  window usage and a functional interface returning a status value
  for use in building tools.
  @node !Tools.Compatibility.Revn.Units.Check.Views

  procedure Views (Load_Views : String  := "<CURSOR>";
                  Spec_Views : String  := "<ACTIVITY>";
                  Menu       : Boolean := False;
                  Response   : String  := "<PROFILE>");
  function Views (Load_Views : String := "<CURSOR>";
                 Spec_Views : String := "<ACTIVITY>";
                 Response   : String := "<PROFILE>") return Status;

  Checks the compatibility of all units in one or more spec/load-view
  pairs.

  The Load_View parameter specifies the set of views to be checked,
  and the Spec_Views parameter specifies the set of spec views used
  to perform the check.

  Two interfaces are provided:  a procedure interface for Command
  window usage and a functional interface returning a status value
  for use in building tools.
  @node !Commands.Cmvc

  Package Cmvc defines a set of operations that support the following
  activities of project management:

  o Partitioning projects into components using subsystems and
    managing the interfaces among these components

  o Creating and releasing alternative implementations (views) of
    individual project components

  o Placing the objects within project components under source
    control to record generations of change history and to coordinate
    the work of multiple developers

  o Coordinating parallel development efforts both within and
    between subsystems

  The Key Concepts section of this book provides a guide to project
  development using subsystems, views, and source control.

  The following sections in this package introduction provide:

  o A list of CMVC commands grouped by topic

  o A summary of the types of objects you can create and manage
    through CMVC commands

  o A guide to the images and operations for managing configuration
    information interactively

  o A list of switches and commands from package Common that pertain
    to CMVC

  Commands Grouped by Topic

  The commands in package Cmvc fall into several functional groups.
  They are listed here by group for your convenience.  (Note that the
  reference entries for these commands are arranged in alphabetical
  order by command name.)

  o Commands for creating and destroying subsystems and systems:

    Initial                    Destroy_Subsystem        Destroy_System

  o Commands for creating, releasing, destroying, and recreating
    views:

    Build                      Copy                       Destroy_View
    Initial                    Make_Code_View           Make_Path
    Make_Spec_View           Make_Subpath              Release

  o Commands for managing source control:

    Abandon_Reservation      Accept_Changes           Check_In
    Check_Out                 Join                       Make_Controlled
    Make_Uncontrolled        Merge_Changes             Revert
    Sever

  o Commands for managing subsystem interfaces:

    Import                     Imported_Views           Remove_Imports
    Remove_Unused_Imports   Replace_Model

  o Commands for interactively viewing notes and configuration
    information:

    Def                        Edit                       Notes

  o Commands for displaying reports in I/O windows:

    Information                      Show
    Show_All_Checked_Out           Show_All_Controlled
    Show_All_Uncontrolled          Show_Checked_Out_By_User
    Show_Checked_Out_In_View       Show_History
    Show_History_By_Generation    Show_Image_Of_Generation
    Show_Out_Of_Date

  o File-oriented commands for managing notes:

    Append_Notes                     Create_Empty_Note_Window
    Get_Notes                        Put_Notes

  System Object and View Types

  The Cmvc.Initial command can create several types of system objects
  (see also System_Object_Enum type).  A system object refers to both
  systems and subsystems:

  o Subsystems provide a means of partitioning applications into
    components to facilitate parallel development, minimize
    recompilation dependencies, and enforce design decisions.  Each
    subsystem contains the units that implement a component of an
    application.  As development progresses within a given subsystem,
    releases can be made of its implementation.

  o Systems provide an optional means of grouping the subsystems
    that compose an application; within a system, operations are
    available for tracking the latest release from each subsystem and
    for referencing those releases for execution.  These releases are
    referenced by release activities that are built and maintained
    within the system.  Systems can form a hierarchy by including
    other systems.

  There is only one type of system, and systems contain only one type
  of view---namely, system views.  In contrast, there are two types
  of subsystem---spec/load subsystems and combined subsystems.
  Spec/load subsystems can contain spec and load views, which
  function together, as well as combined views.  Combined subsystems
  can contain only combined views.

  Within a spec/load subsystem, load views and combined views can be
  created using the Initial, Copy, or Make_Path command; spec views
  are created using the Make_Spec_View or Copy command:

  o A load view contains an implementation of a subsystem.  Load
    views are specified in activities and are actually used for
    execution.

  o A spec view expresses a subsystem's exports.  Exports are the
    specifications of implemented units that are made available for
    units in other subsystems to reference in with clauses.  When a
    spec view is imported by a view in another subsystem, units in
    the importing view can compile against the units in the imported
    view.

  o A combined view combines characteristics of spec and load views.
    A combined view both contains a subsystem implementation and
    expresses the exports from that implementation.  When a combined
    view is imported, units in the importing subsystem can compile
    against the combined view's units; at execution time, the units
    in that combined view are executed.

  Spec and load views provide greater flexibility than combined
  views during development and test.  Using spec and load views
  minimizes the recompilation required after changes are made and
  eliminates the need for recompilation during recombinant testing.
  Using combined views involves no such reduction of recompilation
  requirements; from a recompilation point of view, development in
  combined views is equivalent to development in worlds.  (Note,
  however, that development in combined views makes CMVC operations
  available, which are not available in worlds.)

  In spite of the advantages of spec and load views, combined views
  must be used in spec/load subsystems under certain circumstances-
  --namely, when generics or inlined subprograms are exported from
  implementations for non-R1000 targets.

  Combined views also must be used in combined subsystems.  Combined
  subsystems must be used when import relationships in an application
  need to be circular---that is, when a given view must be within its
  own import closure (for example, when two views must import each
  other).  In contrast, import relationships among views in spec/load
  subsystems must be hierarchic.

  Within any system object (subsystem or system), there are working
  views within which ongoing development and maintenance proceeds.  A
  view is recognized as a working view through a naming convention-
  --namely, the _Working suffix.  A load view, a combined view, or a
  system view can serve as a working view.

  At any time during development and maintenance, a release can
  be made from a working view.  A release is a frozen copy of the
  working view; releases typically are made after the implementation
  in the working view is compiled and tested.

  Managing CMVC Information Interactively

  When objects are controlled in one or more views in a subsystem,
  you typically need to know the following information, which is
  managed by the CMVC database:

  o Which objects are controlled?

  o Which objects are checked out and to which views?

  o Which objects are joined to objects in other views?

  o Which views contain the other objects in the join set?

  o Which objects in a join set are out of date and which view
    contains the latest generation of these objects?

  Furthermore, because multiple generations typically exist for a
  given object in a view, it is useful to be able to:

  o View images of past generations for the object.

  o View the line-by-line differences between two successive
    generations.

  o Find out when a given generation was created.

  o Keep a scratchpad of notes recording the changes that were made
    to each generation.

  o Review the comments that were supplied each time the object was
    checked out and checked in.

  The Def, Edit, and Notes procedures bring up three kinds of
  images in which such information is displayed.  These images are
  configuration images, generation images, and history images.
  These images not only provide several levels of information but
  also make available commands from package Common, which you can use
  to traverse to other images and perform certain CMVC operations.

  Configuration Images

  The Edit procedure displays a configuration image for a specified
  view or configuration object or for the view enclosing a specified
  controlled object.  A configuration image for a view is a library-
  like display of CMVC information pertaining to the configuration
  embodied by that view.  (A configuration is a set of generations,
  one for each controlled object in the view.)  Note that Edit can be
  used to display a configuration image for a configuration object
  that has no view associated with it (for example, a configuration
  release).

  The information displayed in a configuration image represents the
  contents of the CMVC database at the time the Edit procedure is
  entered.  Subsequent CMVC operations can change the CMVC database
  without automatically updating the configuration image.  You
  can refresh a configuration image using the Common.Format or
  Common.Revert command.

  Levels of Information in Configuration Images

  Several levels of information are available in a configuration
  image.  For example, Figure 11-1 shows the configuration image
  displayed for the view !Programs.Mail.Mail_Utilities.

  This image contains the first level of configuration information.
  This level contains an entry for each controlled object in the
  view's configuration.  Each entry indicates the generation of the
  object that is present in the view.  An entry also indicates the
  latest generation that exists for the object in any view, if the
  object is out of date.  Thus, Rev1_Working contains generation 4
  out of a possible five generations for Destinations'Body.

  With the cursor on the first line in the configuration image, the
  Common.Expand command displays the second level of configuration
  image, as shown in Figure 11-2.

  Each entry in this expanded configuration image contains the
  following additional information (from left to right):

  o An asterisk indicating whether the object is out of date in the
    view

  o An indication of whether the unit is currently checked out (Out)
    or checked in (In); libraries are indicated as Lib

  o The date and time at which the object was checked out (if the
    object is currently checked out) or checked in (if the object is
    currently checked in)

  o The user who performed the last checkout or checkin

  o The view in which a given object is currently checked out

  When objects are checked out or out of date, portions of their
  entries are underlined, so you can use the Editor.Cursor.Next and
  Editor.Cursor.Previous commands to move the cursor among these
  objects.

  Using Common.Expand again displays a third level of configuration
  information, as shown in Figure 11-3.  Each entry now displays the
  reservation token associated with each controlled object in the
  view.

  Finally, using Common.Expand again displays a fourth level of
  configuration information, as shown in Figure 11-4.  At this level,
  the entry for a given joined object displays the views containing
  other objects in the join set.

  Operations in Configuration Images

  At any level of expansion, a configuration image provides a
  convenient way to:

  o Check objects in, using the Common.Promote command

  o Check objects out, using the Common.Demote command

  o Accept changes on objects, using the Common.Complete command

  o Access generation and history images, using the
    Common.Definition and Common.Explain commands, respectively

  o Traverse to the designated object in the associated view, using
    the Cmvc.Def command

  A complete list of operations is given in "Commands from Package
  !Commands.Common," below.

  Restricting Operations in Configuration Images

  Operations in configuration images can be restricted using the
  Edit command.  When creating a configuration image, you can set
  the Allow_Check_Out, Allow_Check_In, and Allow_Accept_Changes
  parameters to false to prevent the corresponding operations from
  accessing objects through the configuration image.

  You can also use the Edit command to reset the restrictions
  on these operations in an existing configuration image.  For
  example, if a checkout operation currently is not permitted in
  a given configuration image, you can enter the Edit command with
  Allow_Check_Out set to true.

  Alternative Ways of Displaying a Configuration Image

  The basic way to create a configuration image is to enter the Edit
  command from a view or object.  Following are two alternative ways
  of creating a configuration image:

  o Within the Configurations directory in a subsystem, put the
    cursor on the name of a configuration object and enter the
    Common.Definition command.

  o From a generation image (see "Generation Images," below), enter
    the Common.Enclosing command.

  In both of these cases, checkin, checkout, and accept-changes
  operations are automatically restricted in the configuration
  image.  However, the Edit command can be entered from the existing
  configuration image to change these restrictions as specified by
  the Allow_Check_Out, Allow_Check_In, and Allow_Accept_Changes
  parameters.

  Generation Images

  Generation images are textual representations of particular
  generations of controlled objects.  Generation images can be
  displayed even for generations of objects that do not currently
  exist outside the CMVC database.  For example, using generation
  images, you can browse the text of past generations from
  configuration-only releases or from code views, which no longer
  contain source objects.  A given generation image can be expanded
  to show differences between that generation and the previous one.
  Generation images are available only for controlled objects for
  which source is saved.

  Accessing Generation Images

  Generation images can be accessed in several ways.  They can be
  accessed from configuration images:

  1. Display the configuration image for a view, code view, or
     configuration object.

  2. With the cursor on the configuration image entry for the desired
     object, enter the Common.Definition command.

  Alternatively, you can access a generation image for a given object
  directly from view, as follows:

  1. Put the cursor on the object's entry in the view.

  2. Enter the Cmvc.Def command.

  Generation images contain text reconstructed from the CMVC
  database and does not have the underlying structure of an Ada
  unit.  Therefore, commands such as Common.Object.Parent select
  text structures such as lines rather than Ada structures.  A
  generation image is identified in the window banner by the
  generation attribute following the object's name and by the string
  (cmvc).

  Accessing Next and Previous Generation Images

  An object's generations form a sequence from the starting
  generation to the latest generation.  When the image of a
  particular generation is displayed, you can access images for
  the previous and next generations in the sequence as follows:

  o With the cursor in the generation image, enter the Common.Undo
    command to access the image for the previous generation in the
    sequence.  Repeated uses of Common.Undo iterate toward the
    starting generation.

  o With the cursor in the generation image, enter the Common.Redo
    command to access the image for the next generation in the
    sequence.  Repeated uses of Common.Redo iterate toward the latest
    generation.

  Displaying the Differences between Consecutive Generations

  A given generation image can be expanded to show the differences
  between it and the previous generation.  Enter the Common.Expand
  command to expand a generation image.  (The Common.Elide command
  removes the differences from the display.)  For example, Figure 11-5
  shows the result of using Common.Expand in the generation image for
  generation 4 of Destinations'Body.

  Differences are shown on a line-by-line basis:

  o A line beginning with the minus sign (-) indicates that the line
    was deleted from the previous generation.

  o A line beginning with the plus sign (+) indicates that the line
    was added to the previous generation.

  o One or more lines beginning with the minus sign immediately
    followed by one or more lines beginning with the plus sign
    indicate changed lines.

  Regions of difference begin with an underline so that you can use
  the Editor.Cursor.Next and Editor.Cursor.Previous commands to move
  the cursor among such regions.

  Other operations available in generation images are listed in
  "Commands from Package !Commands.Common," below.

  History Images

  The CMVC database stores history information pertaining to each
  generation of a controlled object.  The history image for a given
  generation displays this stored information.  Figure 11-6 shows the
  history image for generation 4 of Destinations'Body.

  The history image for a generation of an object contains:

  o The history for the generation, which lists the time of checkout
    and checkin and the user who performed these operations

  o The notes for the generation, which contains comments provided to
    various CMVC commands as well as arbitrary commentary associated
    with that generation

  The CMVC database also stores release history for each
  configuration.  Release history contains comments provided through
  the Cmvc.Release command and also lists the date and time at which
  spec views and releases were created.

  Accessing History Images

  History images can be accessed in several ways.  They can be
  accessed from configuration images:

  1. Display the configuration image for a view, code view, or
     configuration object.

  2. With the cursor on the configuration image entry for the desired
     object, enter the Common.Explain command.

     If the cursor is on the header line of a configuration image,
     then Common.Explain displays the release history for the
     configuration.

     If the cursor is on an underline other than the header line, an
     explanation of the underline is displayed in the Message window.
     Move the cursor off the underline to display a history window.

  History images also can be accessed from generation images:

  1. With the cursor in the appropriate generation image, enter the
     Common.Explain command.

  Finally, a history image for a given object can be accessed
  directly, as follows:

  1. Put the cursor on the object or on its directory entry.

  2. Enter the Cmvc.Notes command.

  Displaying History from Other Generations

  From a history image, the Common.Undo and Common.Redo commands
  iterate through history images of the previous and next
  generations, respectively.

  Furthermore, using the Common.Expand command in a history image
  displays the cumulative history and notes for a range of previous

  generations within the same image.  The number of previous
  generations for which history is displayed is determined by the
  Repeat parameter of the Common.Expand command.  The Common.Elide
  command reduces the amount of cumulative history by the number of
  generations specified by its Repeat parameter.

  Managing Notes through History Images

  History images provide an interactive way to manage notes.  From a
  history image, new notes can be added and saved.  The Common.Edit
  command displays a prompt in which additional notes can be entered.
  The Common.Save or Common.Commit commands save the new notes in the
  CMVC database.

  The window banner for a history image contains the object name
  followed by a generation attribute (for example 'G(3)), followed by
  the attribute 'History.  Furthermore, the window banner contains
  the string (cmvc).

  Traversing between Library and CMVC Images

  Subsystems, views, configuration objects, and objects such as
  files and Ada units are all part of the Environment library system.
  Associated with these library objects are configuration images,
  generation images, and history images, which display information
  managed by the CMVC database.

  As shown in Figure 11-7, the Cmvc.Edit, Cmvc.Def, and Cmvc.Notes
  commands traverse between objects in the library system and images
  managed by CMVC. Commands from package Common traverse among images
  within each group.

  Figure 11-8 shows the use of Common.Undo and Common.Redo to access
  generation images for different generations of the same object.

  Session Switches

  A number of session switches have names that begin with the prefix
  "Cmvc_".  All but one of these pertain to objects that are
  managed by commands in package Work_Order and are documented in
  that package.  The remaining switch, Cmvc_Enable_Relocation, is
  for use by Rational personnel only.

  Commands from Package !Commands.Common

  Commands from Package Common in Configuration Images

  !Commands.Common.Complete

  Equivalent to entering the Accept_Changes command to update
  the designated object (or the objects in the designated
  configuration) to the latest generation.  The Accept_Changes
  operation is performed with default parameter values, except
  that Allow_Demotion has the value true.  The configuration image
  is updated to reflect the operation.  The operation performed
  by the command is subject to restriction according to the
  Allow_Accept_Changes parameter of the Cmvc.Edit command.

  !Commands.Common.Definition

  Displays the generation image for the current generation of the
  object whose entry is designated in a configuration image.  An
  In_Place parameter specifies whether the current frame should be
  used.

  !Commands.Common.Demote

  Equivalent to entering the Check_Out command to check out
  the designated object (or the objects in the designated
  configuration).  The Check_Out operation is performed with default
  parameter values, except that Allow_Demotion has the value true.
  The configuration image is updated to reflect the operation.  The
  operation performed by the command is subject to restriction
  according to the Allow_Check_Out parameter of the Cmvc.Edit
  command.

  !Commands.Common.Edit

  Checks out the object whose entry is designated in the
  configuration image and then displays the object.  The object is
  not opened for editing, in case it is an Ada unit to which you want
  to make incremental changes.  The Check_Out operation is performed
  with default parameter values, except that Allow_Demotion has
  the value true.  The configuration image is updated to reflect
  the operation.  The operation performed by the command is subject
  to restriction according to the Allow_Check_Out parameter of the
  Cmvc.Edit command.

  !Commands.Common.Elide

  Reduces the level of information displayed in the configuration
  image.  As designated by the cursor, the level can be reduced for
  an individual entry or for the entire image (the cursor must be on
  the top header line of the image).  See "Levels of Information in
  Configuration Images," above.

  !Commands.Common.Enclosing

  Displays the subsystem that contains the configuration represented
  in the configuration image.  An In_Place parameter specifies
  whether the current frame should be used.

  !Commands.Common.Explain

  Displays the history image for the generation of the designated
  object.  If the cursor is on the top header line in the
  configuration image, release history for the configuration is
  displayed.  If the cursor is on an underline (other than the
  header), an explanation of the underline is given.

  !Commands.Common.Expand

  Increases the level of information displayed in the configuration
  image.  As designated by the cursor, the level can be increased for
  an individual entry or for the entire image (the cursor must be on
  the top header line of the image).  See "Levels of Information in
  Configuration Images," above.

  !Commands.Common.Format

  Updates the configuration image with current information
  from the CMVC database.  Note that the configuration image is
  updated automatically after Common.Promote, Common.Demote, or
  Common.Complete is executed, but it is not updated when the CMVC
  database is changed by any other operation.

  !Commands.Common.Promote

  Equivalent to entering the Check_In command to check in
  the designated object (or the objects in the designated
  configuration).  The configuration image must have a view
  associated with it.  The Check_In operation is performed with
  default parameter values.  The configuration image is updated to
  reflect the operation.

  !Commands.Common.Revert

  Updates the configuration image with current information from the
  CMVC database.  Note that the configuration image is automatically
  updated after Common.Promote, Common.Demote, or Common.Complete is
  executed, but it is not updated when the CMVC database is changed
  by any other operation.

  Commands from Package Common in Generation Images

  !Commands.Common.Definition

  Displays the controlled object associated with the generation in
  the generation image containing the cursor.  An In_Place parameter
  specifies whether the current frame should be used.

  !Commands.Common.Elide

  Removes from the generation image the differences that were
  displayed by the Common.Expand command.

  !Commands.Common.Enclosing

  Displays the configuration image for the last configuration that
  was visited.  An In_Place parameter specifies whether the current
  frame should be used.

  !Commands.Common.Explain

  Displays the history image for the generation represented in the
  current generation image.  If the cursor is on an underline, an
  explanation of the underline is given.

  !Commands.Common.Expand

  Displays the differences between the generation in the generation
  image and the previous generation.  Differences are shown on a
  line-by-line basis.  Lines beginning with a minus sign (-) indicate
  lines deleted from the previous generation.  Lines beginning with a
  plus sign (+) indicate lines added to the previous generation.  The
  start of each difference region is underlined.

  !Commands.Common.Redo

  Displays the generation following the generation represented in
  the current generation image.  A Repeat parameter specifies which
  succeeding generation is displayed, relative to the currently
  displayed generation.

  !Commands.Common.Undo

  Displays the generation previous to the generation represented
  in the current generation image.  A Repeat parameter specifies
  which preceding generation is displayed, relative to the currently
  displayed generation.

  Commands from Package Common in History Images

  !Commands.Common.Commit

  Saves the new notes entered through the prompt given by the
  Common.Edit command.

  !Commands.Common.Definition

  Displays the controlled object associated with the generation
  for which history is displayed.  An In_Place parameter specifies
  whether the current frame should be used.

  !Commands.Common.Edit

  Provides a prompt in the current history image in which new notes
  can be entered.

  !Commands.Common.Elide

  Reduces the cumulative history that is displayed in the current
  history image.  The Repeat parameter specifies the number of
  generations by which the cumulative history should be reduced.

  !Commands.Common.Enclosing

  Displays the generation image for the generation associated with
  the current history image.  An In_Place parameter specifies whether
  the current frame should be used.

  !Commands.Common.Expand

  Expands the cumulative history that is displayed in the current
  history image.  The Repeat parameter specifies the number of
  generations by which the cumulative history should be increased.

  !Commands.Common.Format

  Updates the history image with current information from the CMVC
  database.

  !Commands.Common.Promote

  Saves the new notes entered through the prompt given by the
  Common.Edit command.

  !Commands.Common.Redo

  Displays the history image for the generation following the current
  generation.  A Repeat parameter specifies which succeeding history
  image is displayed, relative to the generation of the current
  history image.

  !Commands.Common.Revert

  Updates the history image with current information from the CMVC
  database.

  !Commands.Common.Undo

  Displays the history image for the generation previous to the
  current generation.  A Repeat parameter specifies which preceding
  history image is displayed, relative to the generation of the
  current history image.
  @node !Commands.Cmvc.Abandon_Reservation

  procedure Abandon_Reservation
        (What_Object          : String                := "<SELECTION>";
         Allow_Demotion       : Boolean               := False;
         Remake_Demoted_Units : Boolean               := True;
         Goal                : Compilation.Unit_State := Compilation.Coded;
         Comments            : String                := "";
         Work_Order           : String                := "<DEFAULT>";
         Response            : String                := "<PROFILE>");

  Abandons the reservation on one or more checked-out objects,
  effectively canceling the checkout of those objects.

  Any changes made during the canceled checkout are discarded.

  When an object is checked out, a new generation is created.
  The Abandon_Reservation procedure cancels this newly created
  generation and causes the object to revert to the last checked-in
  generation.

  Note that checking out an object automatically updates that
  object to the latest checked-in generation, accepting changes
  as necessary.  This procedure does not undo the implicit accept
  changes, so the object remains at the latest generation.
  @node !Commands.Cmvc.Accept_Changes

  procedure Accept_Changes
        (Destination          : String                := "<CURSOR>";
         Source              : String                := "<LATEST>";
         Allow_Demotion       : Boolean               := False;
         Remake_Demoted_Units : Boolean               := True;
         Goal                : Compilation.Unit_State := Compilation.Coded;
         Comments            : String                := "";
         Work_Order           : String                := "<DEFAULT>";
         Response            : String                := "<PROFILE>");

  Updates the object(s) specified in the Destination parameter to
  the generation(s) indicated by the Source parameter; that is, the
  destination objects are changed to reflect any modifications that
  have been made to the corresponding source objects.

  When changes to individual Ada units are being accepted, unit
  specifications should be updated before their corresponding bodies
  to ensure that the units compile correctly.

  Typically, the Accept_Changes procedure is used to update each
  destination object to the latest generation.  The procedure thus is
  a means of synchronizing the development of controlled objects that
  are joined to objects in other views.  When an object in a join set
  is checked out and then checked in, a new generation is created,
  rendering the other objects in the set at least one generation out
  of date.  This procedure can be used on the out-of-date objects to
  update them to the latest generation.  (Checking out an out-of-date
  object implicitly accepts changes.)

  The Accept_Changes procedure also can be used to "go backward
  in time."  If the name of a previous configuration is given as
  the Source parameter, the objects specified by the Destination
  parameter are changed to the generations given in that
  configuration.  Unless such objects are subsequently severed,
  however, checking them out automatically updates them to the latest
  generation.

  The Accept_Changes procedure also can be used to copy new
  controlled objects from the source view into the destination view.
  This is more effective than using Library.Copy to propagate new
  objects across views.

  If Ada units are compiled against a specified unit, accepting
  changes to that unit may require the demotion of the other
  dependent units.  The value of the Allow_Demotion parameter
  controls whether the command actually performs the demotion and
  updates the unit.

  The configuration image displayed by the Edit command uses
  an asterisk to indicate objects that require updating.
  Alternatively, the Show_Out_Of_Date_Objects command can be used
  to determine the objects that may require updating.
  @node !Commands.Cmvc.Append_Notes

  procedure Append_Notes (Note        : String := "<WINDOW>";
                         What_Object : String := "<CURSOR>";
                         Response    : String := "<PROFILE>");

  Appends the specified string to the end of the notes for the
  specified controlled object.

  The notes for a controlled object are stored in the CMVC database.
  An object's notes can be used as a scratchpad for arbitrary
  commentary to be associated with particular generations.

  The contents of a file can be appended by specifying the filename
  as an indirect file.

  Append_Notes is one of a set of file-oriented commands for
  managing notes.  That is, these commands, including Get_Notes,
  Create_Empty_Note_Window, and Put_Notes, are most useful for
  managing notes through files.  However, these commands also manage
  special-purpose notes windows (identified by the Notes for string
  in the banner) in which the Append_Notes command can be used as
  follows:

  o If the Create_Empty_Note_Window procedure has been used to
    display an empty notes window for an object, text entered in
    this window can be appended to the object's existing notes using
    the Append_Notes procedure.  In this case, Append_Notes must be
    entered (with default parameter values) from a Command window
    attached to the window that was created by the Create_Empty_Note-
    _Window procedure.

  Note that modified notes windows retain the * symbol in their
  window banners, even after their contents have been entered in the
  CMVC database using Append_Notes or Put_Notes.  Accordingly, the
  Quit command reports these windows as changed images when logout
  is attempted.  Because these windows cannot be committed, use the
  Common.Abandon procedure to remove these windows.

  The Notes command provides an interactive alternative to Create-
  _Empty_Note_Window, Append_Notes, and the like.  The Notes command
  displays a history image (identified by 'History attribute
  following the object name and generation in the window banner),
  which allows interactive operations for managing an object's
  notes.
  @node !Commands.Cmvc.Build

  procedure Build
       (Configuration  : String                := ">>CONFIGURATION NAME<<";
        View_To_Import : String                := "<INHERIT_IMPORTS>";
        Model          : String                := "<INHERIT_MODEL>";
        Goal           : Compilation.Unit_State := Compilation.Installed;
        Limit          : String                := "<WORLDS>";
        Comments       : String                := "";
        Work_Order     : String                := "<DEFAULT>";
        Volume         : Natural               := 0;
        Response       : String                := "<PROFILE>");

  Builds views from the specified configuration objects.

  Views corresponding to the specified configuration objects must
  not already exist.

  Whenever a view is created or released, a configuration object is
  created for it automatically.  The configuration object for a view
  lists the specific generations of the controlled objects in that
  view and provides an index into the CMVC database where the source
  for these generations is stored.  Thus, views are realizations of
  configuration objects, in that views contain library structure and
  compilable units, whereas configuration objects merely summarize
  the contents of the corresponding views.

  Because configuration objects provide enough information to
  reconstruct views, space can be saved by creating or keeping only
  the configuration objects for views whose units do not need to be
  compiled and executed frequently:

  o The Release command creates only a configuration object
    without creating the corresponding released view if the
    Create_Configuration_Only parameter is true.

  o The Destroy_View command destroys only a view without
    destroying the corresponding configuration object if the
    Destroy_Configuration_Also parameter is false.

  The Build command is used when it is necessary to build a view for
  a released configuration object or rebuild a destroyed view.

  Note that when a view is built (or rebuilt) from a configuration
  object, the only objects that can be recreated are controlled
  objects for which source is saved in the CMVC database.
  (Controlled objects for which source is not saved cannot be
  rebuilt.)

  Configuration objects reside in the directory subsys-
  tem_name.Configurations.  Each configuration object has the same
  simple name as the view to which it corresponds.
  @node !Commands.Cmvc.Check_In

  procedure Check_In (What_Object : String := "<CURSOR>";
                     Comments    : String := "";
                     Work_Order  : String := "<DEFAULT>";
                     Response    : String := "<PROFILE>");

  Releases the reserved right to update the specified object or set
  of objects and stores the text of the new generation(s) in the CMVC
  database.

  An object that is checked in cannot be modified until it is checked
  out again.  Only controlled objects can be checked in or out.

  Because checked-in objects cannot be modified in any way, it is
  recommended that all incremental additions or changes to Ada
  units be promoted before those units are checked in.  Errors will
  result from attempting to compile the checked-in units that contain
  insertion points, because promoting insertion points would require
  the modification of checked-in units.

  Note that checking in an object that was made controlled without
  saving source simply releases the right to update that object; no
  text is recorded in the CMVC database.
  @node !Commands.Cmvc.Check_Out

  procedure Check_Out
    (What_Object                  : String                := "<CURSOR>";
     Comments                     : String                := "";
     Allow_Implicit_Accept_Changes : Boolean               := True;
     Allow_Demotion               : Boolean               := False;
     Remake_Demoted_Units          : Boolean               := True;
     Goal                         : Compilation.Unit_State :=
                                                        Compilation.Coded;
     Expected_Check_In_Time        : String                := "<TOMORROW>";
     Work_Order                   : String                := "<DEFAULT>";
     Response                     : String                := "<PROFILE>");

  Reserves the right to modify the specified controlled object or
  objects.

  Controlled objects can be modified only while they are checked out.
  However, objects need not be checked out in order to be compiled.

  When objects are joined across multiple views, they share the same
  reservation token, so that only one of the joined objects can be
  checked out at a time.  Checking out a joined object in one view
  renders the corresponding objects in the other views unavailable
  for update.  (In contrast, objects that do not share the same
  reservation token can be checked out and modified independently.)

  A new generation of an object is created when it is checked out.
  The new generation can be preserved by the Check_In command or
  abandoned by the Abandon_Reservation command.  When one object in
  a join set is checked out and then checked in, the other objects in
  the set are rendered at least one generation out of date.  Checking
  out one of the out-of-date objects automatically updates it to
  the latest generation, unless the Allow_Implicit_Accept_Changes
  parameter has been set to false, in which case the checkout
  operation fails.  Setting this parameter to false allows an object
  to be checked out only if it is at the latest generation already.
  (Note that if an object was made controlled without saving source,
  Check_Out can implicitly update it only if an object in some view
  actually contains the latest generation; see the Make_Controlled
  command.)

  If Ada units are compiled against a unit that requires updating,
  checking out that unit may require the demotion of the other
  dependent units.  In this case, the value of the Allow_Demotion
  parameter controls whether the command actually performs the
  demotion and checks out the unit.

  Various commands can be used to determine whether objects are
  currently checked out, including Show, Show_All_Checked_Out, Show-
  _Checked_Out_In_View, and Show_Checked_Out_By_User.  Other related
  information, such as the checkout date, time, and user, can be
  displayed using the Show_History_By_Generation command.

  The reservation obtained by the Check_Out procedure can be
  abandoned using the Abandon_Reservation command.
  @node !Commands.Cmvc.Copy

  procedure Copy
    (From_View             : String                := "<CURSOR>";
     New_Working_View       : String                := ">>SUB/PATH NAME<<";
     View_To_Modify         : String                := "";
     View_To_Import         : String                := "<INHERIT_IMPORTS>";
     Only_Change_Imports    : Boolean               := True;
     Join_Views            : Boolean               := True;
     Reservation_Token_Name : String                := "<AUTO_GENERATE>";
     Construct_Subpath_Name : Boolean               := False;
     Create_Spec_View       : Boolean               := False;
     Create_Load_View       : Boolean               := False;
     Create_Combined_View   : Boolean               := False;
     Level_For_Spec_View    : Natural               := 0;
     Model                 : String                := "<INHERIT_MODEL>";
     Remake_Demoted_Units   : Boolean               := True;
     Goal                  : Compilation.Unit_State := Compilation.Coded;
     Comments              : String                := "";
     Work_Order            : String                := "<DEFAULT>";
     Volume                : Natural               := 0;
     Response              : String                := "<PROFILE>");

  Creates one or more new views by copying the specified view or
  views.

  By default, the Copy command makes new spec views, new working
  load views, or new working combined views, depending on the kinds
  of source views named by the From_View parameter.  This procedure
  also can be used to make views of a specific type, depending on
  the values of the Create_Spec_View, Create_Load_View, and Create-
  _Combined_View parameters.  (At most, only one of these three
  parameters can be true.)

  The Copy command can be used to make new paths, subpaths, and spec
  views, although specialized commands (Make_Path, Make_Subpath,
  and Make_Spec_View) exist for this purpose.  (Note that all of the
  special-purpose commands call the Copy command.)

  Objects in new working load or combined views are made controlled
  if the corresponding objects were controlled in the source views.
  Objects in new spec views are left uncontrolled.

  Controlled objects in a new view can, but need not, be joined to
  the corresponding objects in the view from which it is copied.
  Two views should be joined (using the Join_Views parameter) if
  the majority of the controlled objects in them are to be joined.
  (Joined objects cannot be checked out and modified independently.)
  The controlled objects that need to be modified independently can
  be severed subsequently with the Sever command.

  A new view should not be joined to the view from which it is
  created if most of the controlled objects in these two paths are
  to be modified independently.  (Note that changes can be propagated
  across unjoined objects with the Merge_Changes command.)  Although
  the new path is not created joined, individual objects in it
  subsequently can be joined to the corresponding objects in other
  views (see the Join command).

  By default, each new view has the same imports as the view from
  which it was copied.  It is also possible to specify different
  imports in the process of creating the new paths by using the View-
  _To_Import and Only_Change_Imports parameters.  Import adjustments
  are subject to the same consistency checking that is performed by
  the Import command.
  @node !Commands.Cmvc.Create_Empty_Note_Window

  procedure Create_Empty_Note_Window (What_Object : String := "<CURSOR>";
                                    Response    : String := "<PROFILE>");

  Creates an empty window for the purpose of composing notes for the
  specified controlled object.  The banner of the created window
  identifies it as Notes For followed by the object's name.

  The notes for a controlled object are stored the CMVC database.  An
  object's notes can be used as a scratchpad for arbitrary commentary
  to be associated with particular generations.

  After the notes window has been edited:

  o The Append_Notes command can be used to append the window's
    contents to the object's existing notes.

  o The Put_Notes command can be used to replace the object's
    existing notes with the window's contents.

  Modified notes windows retain the * symbol in their window banners,
  even after their contents have been entered in the CMVC database
  using Append_Notes or Put_Notes.  Accordingly, the Quit command
  reports these windows as changed images when logout is attempted.
  Because these windows cannot be committed, use Common.Abandon to
  remove these windows.

  The Notes command provides an interactive alternative to
  Append_Notes, Create_Empty_Note_Window, and the like.  The Notes
  command displays a history image (identified by the 'History
  attribute following the object name and generation in the window
  banner), which allows interactive operations for managing an
  object's notes.
  @node !Commands.Cmvc.Def

  procedure Def (What_Object : String  := "<CURSOR>";
                In_Place    : Boolean := False);

  Traverses between various objects managed by the Environment
  library system and images managed by the CMVC editor.

  In some contexts, the Def command serves as the inverse of the Edit
  command:

  o Entering Edit from a view or from a controlled object in the view
    displays the configuration image for that view.

  o Entering Def from the configuration image for a view displays the
    view itself or a controlled object in the view (depending on the
    location of the cursor within the configuration image).

  In other contexts, the Def command serves as the inverse of the
  Notes command:

  o Entering Notes from a controlled object in a view displays the
    history image for the object.

  o Entering Def from the history image for a controlled object
    displays the object itself.

  Finally, Def traverses back and forth between a controlled object
  in a view and its current generation image.  If images of other
  generations are displayed subsequently, Def also displays the
  controlled object from any of these other generation images.

  A particularly useful application of Def is to use it to display
  an object's current generation image and then use Common.Expand to
  see the differences between the current generation and the previous
  generation.
  @node !Commands.Cmvc.Destroy_Subsystem

  procedure Destroy_Subsystem (What_Subsystem : String := "<SELECTION>";
                              Comments       : String := "";
                              Work_Order     : String := "<DEFAULT>";
                              Response       : String := "<PROFILE>");

  Destroys the specified subsystem or subsystems.

  All views in each subsystem must be destroyed (with the
  Destroy_View command) before that subsystem can be destroyed.
  @node !Commands.Cmvc.Destroy_System

  procedure Destroy_System (What_System : String := "<SELECTION>";
                           Comments    : String := "";
                           Work_Order  : String := "<DEFAULT>";
                           Response    : String := "<PROFILE>");

  Destroys the specified system or systems.

  All views in each system must be destroyed (with the Destroy_View
  command) before the subsystem can be destroyed.
  @node !Commands.Cmvc.Destroy_View

  procedure Destroy_View
                    (What_View                 : String  := "<SELECTION>";
                     Demote_Clients            : Boolean := False;
                     Destroy_Configuration_Also : Boolean := False;
                     Comments                  : String  := "";
                     Work_Order                : String  := "<DEFAULT>";
                     Response                  : String  := "<PROFILE>");

  Destroys the named view or views and all of their subdirectory
  structure, including the Ada units in the Units directories.

  This procedure destroys views in subsystems and in systems.

  All objects are first unfrozen if they are currently frozen, and
  then they are deleted and expunged from the directory system.  A
  view cannot be destroyed in any of the following cases:

  o The view contains controlled objects that currently are checked
    out.

  o The view is currently imported by client views.

  o The view is included in a system as a result of operations in the
    Cmvc_Hierarchy package.

  Destroy_View is the only command that should be used to destroy
  a view.  In particular, neither the Library.Destroy nor the
  Compilation.Destroy command should be used, because these commands
  cannot destroy the entire view structure.  If an attempt was made
  to destroy a view using any command other than Destroy_View, you
  can recover as follows:

  1. Enter the Cmvc_Maintenance.Check_Consistency command to repair
     the partially destroyed view.

  2. Enter the Destroy_View command to destroy the view completely.

  By default, views are destroyed so that they can be rebuilt using
  the Build command.  Views can be destroyed permanently by setting
  the Destroy_Configuration_Also parameter to true.
  @node !Commands.Cmvc.Edit

  procedure Edit (View_Or_Config       : String  := "<CURSOR>";
                 In_Place            : Boolean := False;
                 Allow_Check_Out      : Boolean := True;
                 Allow_Check_In       : Boolean := True;
                 Allow_Accept_Changes : Boolean := True);

  Displays a configuration image for the specified view or
  configuration object or for the view enclosing the specified
  object.

  A configuration image for a view is a library-like display of CMVC
  information pertaining to that view.

  Every view embodies a specific configuration, where a
  configuration is a combination of generations, one for each
  controlled object in the view.  A configuration image for a view
  thus contains an entry for each controlled object in the view,
  indicating the generation of the object that is present in the
  configuration embodied by the view.  Each entry also indicates the
  latest generation that exists for that object in any view.

  A configuration image for a view provides a convenient way to:

  o Check in, check out, and accept changes on controlled objects.

  o Determine whether an object is checked out, to whom it is checked
    out, whether it is out of date in a given view, and which other
    views contain objects in the same join set.  (The Common.Expand
    command displays increasing levels of information from this
    image.)

  o Access generation images (textual representations of previous
    generations) and history images (the notes stored in the
    CMVC database for each controlled object).  Note that a given
    generation image can be expanded to show differences between that
    generation and the previous one.  Generation images are available
    only for controlled objects for which source is saved.

  Note that Edit can be used to display a configuration image for
  a configuration object that has no view associated with it (for
  example, a configuration release).  In this case, the configuration
  image provides access to generation images and history images even
  for objects that may not still exist outside the CMVC database.
  This is a useful means for browsing past generations of objects.

  Similarly, the Edit command can be used to display configuration
  images for code views, which do not contain source objects.

  The Def command traverses from a configuration image for a view to
  the view itself (or to an object in that view).

  By default, commands from package Common can be used to
  perform checkin, checkout, and accept-changes operations in a
  configuration image that was created by the Edit command.  To
  restrict such operations, set the Allow_Check_Out, Allow_Check_In,
  and Allow_Accept_Changes parameters to false when you enter the
  Edit command.

  As an alternative to using the Edit command, configuration images
  can be created using commands from package Common.  In this case,
  checkin, checkout, and accept-changes operations are restricted
  automatically.  However, the Edit command can be entered from the
  configuration image to change these restrictions as specified by
  the Allow_Check_Out, Allow_Check_In, and Allow_Accept_Changes
  parameters.
  @node !Commands.Cmvc.Get_Notes

  procedure Get_Notes (To_File     : String := "<WINDOW>";
                      What_Object : String := "<CURSOR>";
                      Response    : String := "<PROFILE>");

  Retrieves the notes for the current generation of the specified
  controlled object.

  The Get_Notes command retrieves an object's notes from the CMVC
  database and displays them in a special-purpose window or writes
  them into a file.  An object's notes can be used as a scratchpad
  for arbitrary commentary to be associated with particular
  generations.

  Get_Notes is one of a set of file-oriented commands for
  managing notes.  That is, these commands, including Put_Notes,
  Create_Empty_Note_Window, and Append_Notes, are most useful
  for managing notes through files.  However, these commands also
  manage special-purpose notes windows, which are identified in the
  banner by the string Notes For followed by the object's name.  The
  contents of the window can be edited; however, the edited text in
  the window can be saved into the CMVC database only as follows:

  o The Append_Notes command can be used to append the window's
    contents to the object's existing notes.

  o The Put_Notes command can be used to replace the object's
    existing notes with the window's contents.

  Note that modified notes windows retain the * symbol in their
  window banners even after their contents have been entered in the
  CMVC database using Append_Notes or Put_Notes.  Accordingly, the
  Quit command reports these windows as changed images when logout
  is attempted.  Because these windows cannot be committed, use
  Common.Abandon to remove these windows.

  The Notes command provides an interactive alternative to
  Get_Notes, Put_Notes, and the like.  The Notes command displays
  a history image (identified by the 'History attribute following
  the object name and generation in the window banner), which allows
  interactive operations for managing an object's notes.
  @node !Commands.Cmvc.Import

  procedure Import
        (View_To_Import       : String                := "<REGION>";
         Into_View           : String                := "<CURSOR>";
         Only_Change_Imports  : Boolean               := False;
         Import_Closure       : Boolean               := False;
         Remake_Demoted_Units : Boolean               := True;
         Goal                : Compilation.Unit_State := Compilation.Coded;
         Comments            : String                := "";
         Work_Order           : String                := "<DEFAULT>";
         Response            : String                := "<PROFILE>");

  Imports the specified spec or combined views into the designated
  view(s).

  Some or all of the views specified by the View_To_Import parameter
  are imported by a given view, depending on the value of the Only-
  _Change_Imports parameter.

  The Import command can be used to:

  o Add new imports

  o Change an existing import by importing a different view from the
    same subsystem

  o Refresh a view's existing imports after new specifications have
    been added to the imported views

  Consistency checking is done to ensure that no view directly or
  indirectly imports more than one view from the same subsystem.  The
  import operation checks the closure of the importing view and the
  closures of all views that import it.  An error results if any new
  or changed import would cause an inconsistency.

  Furthermore, within spec/load subsystems, circularity checking
  is done to ensure that no view directly or indirectly imports
  itself.  (Circular importing is permitted among views in combined
  subsystems, however.)

  An import operation succeeds only if the target key of the
  importing (client) view is compatible with the target key of the
  imported (supplier) view.  For example, a view with target key
  R1000 cannot import a view with target key Mc68020_Bare.

  Importing operations create and manage links among subsystems.
  When one view imports another, links are created in the client view
  to each of the units in the supplier view.  Imports alone enable
  links to be managed across paths, subpaths, and releases; links
  should never be added individually through commands from package
  Links.

  An import operation will create links to a subset of the units in
  a supplier view if export and import restrictions exist.  Users
  create export and import restrictions as text files in the supplier
  and client views, respectively.

  An export restriction file is a text file in the Exports
  subdirectory within the supplier view.  An export restriction file
  defines a subset of the units in the supplier view either through
  a list of unit names (one per line) or through naming expressions.
  Names in an export restriction file are resolved against the Units
  directory within the view.  The Exports subdirectory can contain
  multiple export restriction files that define alternative subsets
  of the view.

  An import restriction file is a text file in the Imports
  subdirectory within the client view.  A given import restriction
  file determines which subset to use from a particular supplier
  view.  A client view may have multiple import restriction files,
  one for each of its supplier views.  The following rules pertain to
  the creation of an import restriction file that corresponds to a
  particular supplier view:

  o The import restriction file must have the same name as the
    subsystem containing the supplier view.  Typically the
    subsystem's simple name is used; however, a fully qualified
    subsystem name can be converted to a filename by omitting
    the preceding !  and changing the dots (.)  between name
    components to underscores (_).  For example, an import
    restriction file for a supplier view in the subsystem
    !Programs.Mail.Mail_Utilities can be named either Mail_Utilities
    or Programs_Mail_Mail_Utilities.

  o The first line of the file must consist of the string
    export_restriction=> followed by the simple name of the desired
    export restriction file from the supplier view.  No blanks should
    appear in this line.  Omitting this line implicitly specifies
    an export restriction file named Default, if such a file exists;
    otherwise, the entire supplier view is used.

  o Subsequent lines in the import restriction file can contain
    names or naming expressions to specify a further subset of the
    units listed in the export restriction file.  Links are created
    in the client view for the units that are matched by the naming
    expressions.  If no naming expressions are specified, no links
    are created.

    Because an import restriction file essentially specifies a set
    of link names, only simple Ada names should be used in the naming
    expressions.  This is true even for names that are qualified
    within the export restriction file.  Whereas names in an export
    restriction file are resolved as library names, names in an
    import restriction file are resolved as link names.

    Naming expressions can be used to:

    ---Request links for all units in the export restriction file by
       entering @

    ---Request links for subsets by using wildcard expressions such
       as @_pkg

    ---Exclude links to units by using expressions such as ~Unit_Name
       (which should follow an expression such as @)

    ---Rename links to units by specifying the unit name followed by
       the new link name
  @node !Commands.Cmvc.Imported_Views

  function Imported_Views (Of_View               : String  := "<CURSOR>";
                          Include_Import_Closure : Boolean := False;
                          Include_Importer       : Boolean := False;
                          Response              : String  := "<WARN>")
                                                           return String;

  Returns a string that names all the views that are imported by the
  specified view.
  @node !Commands.Cmvc.Information

  procedure Information (For_View                 : String  := "<CURSOR>";
                        Show_Model               : Boolean := True;
                        Show_Whether_Frozen       : Boolean := True;
                        Show_View_Kind           : Boolean := True;
                        Show_Creation_Time        : Boolean := True;
                        Show_Imports             : Boolean := True;
                        Show_Referencers          : Boolean := True;
                        Show_Unit_Summary         : Boolean := True;
                        Show_Controlled_Objects   : Boolean := False;
                        Show_Last_Release_Numbers : Boolean := False;
                        Show_Path_Name           : Boolean := False;
                        Show_Subpath_Name         : Boolean := False;
                        Show_Switches            : Boolean := False;
                        Show_Exported_Units       : Boolean := False;
                        Response                 : String  := "<PROFILE>");

  Displays various kinds of information about the specified view in
  the output window.

  Each parameter specifies whether to display a particular kind of
  information.
  @node !Commands.Cmvc.Initial

  procedure Initial
   (System_Object          : String            := ">>SYSTEM OBJECT NAME<<";
    Working_View_Base_Name : String            := "Rev1";
    System_Object_Type     : System_Object_Enum := Cmvc.Spec_Load_Subsystem;
    View_To_Import         : String            := "";
    Create_Load_View       : Boolean           := True;
    Model                 : String            := "R1000";
    Comments              : String            := "";
    Work_Order            : String            := "<DEFAULT>";
    Volume                : Natural           := 0;
    Response              : String            := "<PROFILE>");

  Builds a new system or a new subsystem of the specified type---
  namely, spec/load or combined.

  Subsystems partition a project or application into high-level
  components by grouping Ada units or other objects.  A system
  pulls an application's components together by logically grouping
  particular releases from the component subsystems.  Operations for
  systems are in package Cmvc_Hierarchy.

  The new subsystem or system contains an empty working view that
  has the specified imports.  The Initial command also can be used to
  create an empty view in an existing subsystem or system.

  The initial view is set up according to the specified model.  This
  includes the setting of the switches and initial links for the
  view.  The model also may contain a file named Levels whose integer
  contents specify the number of levels for automatic name generation
  for released and spec views.  Furthermore, the model may contain
  user-defined directory structure to be created in the view in
  addition to the predefined directories.

  The name of the initial view of the subsystem or system is:
      [System_Object].[Working_View_Base_Name]_Working
  @node !Commands.Cmvc.Join

  procedure Join (What_Object           : String := "<SELECTION>";
                 To_Which_View          : String := ">>VIEW NAME<<";
                 Reservation_Token_Name : String := "";
                 Comments              : String := "";
                 Work_Order            : String := "<DEFAULT>";
                 Response              : String := "<PROFILE>");

  Joins the specified controlled objects to the corresponding
  objects in the designated view.

  When objects are joined across views, they form a join set.
  Objects in a join set have the same pathname within their
  respective views and share a single reservation token, so that
  only one object in the set can be checked out at a time.  Thus,
  joining allows synchronized changes to an object when there are
  instances of the same object in multiple working views.

  The objects to be joined must be textually identical.  The Merge-
  _Changes command can be used to prepare objects for joining.

  There are two alternative ways to specify the join set to which
  objects are to be joined.  One is to specify a view that contains
  an object in the desired join set.  The other is to specify the
  reservation token associated with the desired join set.  (See the
  To_Which_View and Reservation_Token_Name parameters, below.)
  @node !Commands.Cmvc.Make_Code_View

  procedure Make_Code_View (From_View      : String  := "<CURSOR>";
                           Code_View_Name : String  := "";
                           Comments       : String  := "";
                           Work_Order     : String  := "<DEFAULT>";
                           Volume         : Natural := 0;
                           Response       : String  := "<PROFILE>");

  Makes a code view from the specified load view.

  Code views are copies of views that store executable code in place
  of Ada units.  Code views thus require the minimum amount of space
  necessary to permit execution of the view.  The executable code is
  stored in an object called Code_Database within the view.

  The Units directory of a code view contains a copy of any non-Ada
  objects from the original view.

  Because Ada units in code views are stored as executable code,
  these units cannot be modified or browsed except through
  configuration and generation images (see the Cmvc.Edit command).
  @node !Commands.Cmvc.Make_Controlled

  procedure Make_Controlled
                    (What_Object           : String  := "<CURSOR>";
                     Reservation_Token_Name : String  := "<AUTO_GENERATE>";
                     Join_With_View         : String  := "<NONE>";
                     Save_Source           : Boolean := True;
                     Comments              : String  := "";
                     Work_Order            : String  := "<DEFAULT>";
                     Response              : String  := "<PROFILE>");

  Makes the specified object or objects controlled by the CMVC system
  and therefore subject to reservation.

  Once controlled, an object must be checked out before it can be
  modified and it must be checked in before various commands can
  access it.

  When an object is controlled with the Save_Source parameter set
  to true, the textual changes from one generation to the next are
  stored in the CMVC database.  This permits the reconstruction of
  previous generations through, for example, the Revert command or by
  rebuilding a view from a configuration object.  (Note that because
  changed lines are determined textually, changing an Ada unit's
  pretty-printing causes all lines to be stored as changed lines.)

  When an object is controlled with the Save_Source parameter set to
  false, no textual representation is stored in the CMVC database.
  This is useful for binary objects that have no ASCII representation
  or for very large files (when storage space is an issue).  Even
  though previous generations cannot be reconstructed when objects
  are controlled without saving source, such objects still need to be
  checked out before they can be modified.  (Generation numbers thus
  record the number of times objects were checked out and checked
  in.)

  Controlling an object associates a reservation token with it.
  The Check_In and Check_Out procedures operate by manipulating
  reservation tokens, and joined objects share not only the same name
  but also a single reservation token.
  @node !Commands.Cmvc.Make_Path

  procedure Make_Path
      (From_Path           : String                := "<CURSOR>";
       New_Path_Name        : String                := ">>PATH NAME<<";
       View_To_Modify       : String                := "";
       View_To_Import       : String                := "<INHERIT_IMPORTS>";
       Only_Change_Imports  : Boolean               := True;
       Create_Load_View     : Boolean               := False;
       Create_Combined_View : Boolean               := False;
       Model               : String                := "<INHERIT_MODEL>";
       Join_Paths           : Boolean               := True;
       Remake_Demoted_Units : Boolean               := True;
       Goal                : Compilation.Unit_State := Compilation.Coded;
       Comments            : String                := "";
       Work_Order           : String                := "<DEFAULT>";
       Volume              : Natural               := 0;
       Response            : String                := "<PROFILE>");

  Creates a copy of each of the specified views, starting new
  development paths.

  A path is a logically connected series of views within a subsystem
  or a system.  For each view specified, the Make_Path command
  creates a new working view that serves as the start of such a
  series of views.

  A subsystem or a system can contain multiple paths.  For example,
  if an application has multiple targets, a path can be made for each
  target.  Similarly, if a new major release of an application must
  be developed while the existing release is maintained, a separate
  path can be made for the new major release.

  A new path can, but need not, be joined to the view (and hence to
  the path) from which it is created.  Two paths should be joined
  (using the Join_Paths parameter) if the majority of the controlled
  objects in them are to be joined.  (Joined objects cannot be
  checked out and modified independently.)  The controlled objects
  that need to be modified independently can be severed subsequently
  with the Sever command.  For example, if an application has two
  targets, the target-independent code is shared and the target-
  dependent code is not.  Assuming that a path already exists for one
  of the targets, a joined path can be created for the second target
  and then the target-dependent units can be severed.

  A new path should not be joined to the path from which it is
  created if most of the controlled objects in these two paths are
  to be modified independently.  For example, if a new major release
  of an application is developed while the previous major release
  is maintained, the objects in the two paths typically need to
  be modified independently, so the paths are not joined.  (Note
  that changes can be propagated across unjoined objects with the
  Merge_Changes command.)  Although the new path is not joined when
  created, individual objects in it subsequently can be joined to the
  corresponding objects in other views (see the Join command).

  By default, the working view for each new path has the same imports
  as the view from which it was copied.  It is also possible to
  specify different imports in the process of creating the new paths
  by using the View_To_Import and Only_Change_Imports parameters.
  Import adjustments are subject to the same consistency checking
  that is performed by the Import command.
  @node !Commands.Cmvc.Make_Spec_View

  procedure Make_Spec_View
      (From_Path           : String                := "<CURSOR>";
       Spec_View_Prefix     : String                := ">>PREFIX<<";
       Level               : Natural               := 0;
       View_To_Modify       : String                := "";
       View_To_Import       : String                := "<INHERIT_IMPORTS>";
       Only_Change_Imports  : Boolean               := True;
       Remake_Demoted_Units : Boolean               := True;
       Goal                : Compilation.Unit_State := Compilation.Coded;
       Comments            : String                := "";
       Work_Order           : String                := "<DEFAULT>";
       Volume              : Natural               := 0;
       Response            : String                := "<PROFILE>");

  Creates a new spec view from each of the specified views in a
  spec/load subsystem.

  Each new spec view is created with only those units named in the
  Exports file of the corresponding source view.  (This file is
  located in the view_name.State directory.)  The new spec view
  contains a copy of the specifications of those units.  If no units
  are specified in the Exports file, the new spec view copies the
  specifications of all of the units in the source view.  Units in
  each new spec view are compiled according to the Remake_Demoted-
  _Units and Goal parameters.

  By default, units in spec views are not made controlled.  If these
  units are subsequently made controlled for purposes of history
  tracking, they should not be joined to their counterparts in
  working views.

  Portions of each new spec view's name are automatically generated
  unless the Spec_View_Prefix and Level parameters specify
  otherwise.  An automatically generated spec-view name consists
  of a spec-view prefix, one or more level numbers that correlate
  with a particular numbered release, and the _Spec suffix---for
  example, Rev1_1_Spec.

  By default, each spec view has the same imports as the view from
  which it was copied.  It is also possible to specify different
  imports in the process of creating the spec views by using the
  View_To_Import and Only_Change_Imports parameters.  Import
  adjustments are subject to the same consistency checking that
  is performed by the Import command.
  @node !Commands.Cmvc.Make_Subpath

  procedure Make_Subpath
     (From_Path            : String                := "<CURSOR>";
      New_Subpath_Extension : String                := ">>SUBPATH<<";
      View_To_Modify        : String                := "";
      View_To_Import        : String                := "<INHERIT_IMPORTS>";
      Only_Change_Imports   : Boolean               := True;
      Remake_Demoted_Units  : Boolean               := True;
      Goal                 : Compilation.Unit_State := Compilation.Coded;
      Comments             : String                := "";
      Work_Order           : String                := "<DEFAULT>";
      Volume               : Natural               := 0;
      Response             : String                := "<PROFILE>");

  Creates a copy of each of the specified views in order to start new
  development subpaths.

  A subpath is a series of working views that constitutes an
  extension of a path.  Multiple subpaths in a single path support
  parallel development within that path, allowing multiple
  developers to make and test changes without conflict.  Parallel
  development can proceed because the controlled objects in each
  subpath are automatically joined to the corresponding objects in
  the other subpaths and in the parent path.  A controlled object
  therefore can be checked out and modified in only one subpath view
  at a time.

  Subpaths share the same model as their parent path, which means
  that they share the same target key and initial links.

  By default, the working view for each new subpath has the same
  imports as the view from which it was copied.  It is also possible
  to specify different imports in the process of creating the new
  subpaths by using the View_To_Import and Only_Change_Imports
  parameters.  Import adjustments are subject to the same consistency
  checking that is performed by the Import command.

  Subpaths can be created in systems as well as subsystems.
  @node !Commands.Cmvc.Make_Uncontrolled

  procedure Make_Uncontrolled (What_Object : String := "<CURSOR>";
                              Comments    : String := "";
                              Work_Order  : String := "<DEFAULT>";
                              Response    : String := "<PROFILE>");

  Makes the specified objects uncontrolled, so that change
  information about them is no longer collected in the CMVC database.

  Existing history for these objects remains in the CMVC database
  until the database is expunged using the Cmvc_Maintenance.Expunge-
  _Database command.  Objects can be made controlled again using
  the Make_Controlled command; if the CMVC database has not been
  expunged, the history for the recontrolled objects continues where
  it stopped.

  Because controlled objects cannot be deleted or withdrawn, the
  Make_Uncontrolled procedure is used to prepare a controlled object
  for deletion.  Similarly, an Ada unit's kind cannot be changed (for
  example, from procedure to function) while the unit is controlled.
  Therefore, the unit must be made uncontrolled and then the database
  must be expunged (using Cmvc_Maintenance.Expunge_Database) before
  the unit's kind can be changed.
  @node !Commands.Cmvc.Merge_Changes

  procedure Merge_Changes
                     (Destination_Object      : String  := "<SELECTION>";
                      Source_View            : String  := ">>VIEW_NAME<<";
                      Report_File            : String  := "";
                      Fail_If_Conflicts_Found : Boolean := False;
                      Comments               : String  := "";
                      Work_Order             : String  := "<DEFAULT>";
                      Response               : String  := "<PROFILE>");

  Merges two objects that previously were joined and then severed
  from each other.

  The object named by the Destination_Object parameter is updated
  to include any changes that have been made to the corresponding
  object located in the view named by the Source_View parameter.  The
  updated destination object is left in the source state; the source
  object is left unchanged.

  The Merge_Changes procedure can succeed only if the views named
  by the Source_View and Destination_Object parameters were created
  from a common view (for example, by commands such as Make_Path).
  The configuration object for the common view must still exist.
  Merge_Changes uses the common ancestor of the two objects to
  determine the changes from the source object that need to be merged
  into the destination object.

  Merge_Changes compares both the destination object and the source
  object with the common ancestor to determine the lines that need
  to be merged.  Lines that have been added, deleted, or changed in
  the source object are correspondingly added, deleted, or changed
  in the destination object.  Lines that have been added, deleted, or
  changed in the destination object are left as is.

  Conflicts exist when the same lines have been changed in both
  the source and destination objects.  When conflicts exist, the
  destination object is updated to contain the changed lines from
  both the destination and the source objects.  These changed lines
  are marked with the string "*;".  When a unit contains lines
  marked with "*;", the unit must be edited to remove these marks
  before it can be compiled.

  Besides updating the destination object, the Merge_Changes
  procedure writes a report containing the text of the Destination-
  _Object in which the following conventions indicate the lines that
  were affected by the merge:

  o Added lines are marked by the + character.

  o Deleted lines are redisplayed, marked with the - character.

  o Each changed line is indicated as a deleted line followed by an
    added line.

  o Conflicting lines are bracketed by *** START CONFLICT and *** END
    CONFLICT.

  Following the + or - symbol is a number or letter indicating the
  origin of the modified line:

  o The number 1 indicates changes that were merged from the source
    object.

  o The number 2 indicates changes that existed in the destination
    object.

  o The letter B indicates changes that were made in both the source
    and the destination objects.

  The Fail_If_Conflicts_Found parameter can be set to true to cause
  the command to produce the merge report without actually updating
  the destination object.

  The Merge_Changes procedure is used for updating objects that are
  not joined---for example, objects in unjoined paths or severed
  objects in joined paths.  In contrast, the Accept_Changes command
  is used for updating objects that are joined.

  Merge_Changes can be used to prepare two objects for joining since
  objects must be textually identical before they can be joined.  To
  prepare two objects for joining:

  1. Merge the source object into the destination object.

  2. Check out and edit the destination object to resolve any
     conflicts.

  3. Check out the source object and copy the contents of the
     destination object into it.
  @node !Commands.Cmvc.Notes

  procedure Notes (What_Object : String  := "<CURSOR>";
                  In_Place    : Boolean := False);

  Displays the history image for the current generation of the
  specified controlled object.

  A history image for a generation contains:

  o The history for the generation, which lists the time of checkout
    and checkin, the user who performed these operations, and
    comments provided to various CMVC commands

  o The notes for the generation, which can be used as a scratchpad
    for arbitrary commentary to be associated with that generation

  History images provide an interactive way to manage notes.
  From a history image, new notes can be added and saved using
  the Common.Edit and Common.Commit or Common.Promote commands.
  Furthermore, operations are available in a history image for
  displaying notes from other generations.

  The Notes procedure thus provides an interactive alternative to the
  set of file-oriented commands (Get_Notes, Create_Empty_Note_Win-
  dow, Append_Notes, and Put_Notes).  These file-oriented commands
  are most useful for retrieving notes directly into files, although
  these commands can put notes into special-purpose notes windows.

  The window banner for a history image contains the object name
  followed by a generation attribute (for example 'G(3)), followed by
  the attribute 'History.  Furthermore, the window banner contains
  the string (cmvc).  In contrast, the banner of a notes window
  brought up by the Get_Notes or Create_Empty_Note_Window procedures
  contains the string Notes for followed by the object name.  No
  interactive operations are available from a Notes for window.
  @node !Commands.Cmvc.Put_Notes

  procedure Put_Notes (From_File   : String := "<WINDOW>";
                      What_Object : String := "<CURSOR>";
                      Response    : String := "<PROFILE>");

  Replaces the notes for the specified controlled object with the
  contents of the specified file.

  The notes for a controlled object are stored the CMVC database.  An
  object's notes can be used as a scratchpad for arbitrary commentary
  to be associated with particular generations.

  Put_Notes is one of a set of file-oriented commands for
  managing notes.  That is, these commands, including Get_Notes,
  Create_Empty_Note_Window, and Append_Notes, are most useful
  for managing notes through files.  However, these commands also
  manage special-purpose notes windows (identified by the Notes for
  string in the banner) in which the Put_Notes command can be used as
  follows:

  o If the Get_Notes procedure has been used to display an object's
    notes in a notes window, this window can be modified and its
    contents saved using the Put_Notes procedure.  In this case,
    Put_Notes must be entered (with default parameter values) from
    a Command window attached to the window that was created by Get-
    _Notes.

  o If the Create_Empty_Note_Window procedure has been used to
    display an empty notes window for an object, Put_Notes can be
    used to replace the object's existing notes with any text entered
    in this window.  In this case, Put_Notes must be entered (with
    default parameter values) from a Command window attached to the
    window that was created by the Create_Empty_Note_Window command.

  Note that modified notes windows retain the * symbol in their
  window banners, even after their contents have been entered in the
  CMVC database using Append_Notes or Put_Notes.  Accordingly, the
  Quit command reports these windows as changed images when logout
  is attempted.  Because these windows cannot be committed, use the
  Common.Abandon procedure to remove these windows.

  The Notes command provides an interactive alternative to
  Get_Notes, Put_Notes, and the like.  The Notes command displays
  a history image (identified by 'History attribute following the
  object name and generation in the window banner), which allows
  interactive operations for managing an object's notes.
  @node !Commands.Cmvc.Release

  procedure Release
  (From_Working_View         : String                := "<CURSOR>";
   Release_Name             : String                := "<AUTO_GENERATE>";
   Level                    : Natural               := 0;
   Views_To_Import           : String                := "<INHERIT_IMPORTS>";
   Create_Configuration_Only : Boolean               := False;
   Compile_The_View          : Boolean               := True;
   Goal                     : Compilation.Unit_State := Compilation.Coded;
   Comments                 : String                := "";
   Work_Order               : String                := "<DEFAULT>";
   Volume                   : Natural               := 0;
   Response                 : String                := "<PROFILE>");

  Creates a new released view from each of the specified working
  views.  Releases can be made in subsystems and in systems.

  A released view is a frozen copy of the working view and can serve
  as a baseline for testing and execution.

  In addition to creating a new released view, the Re-
  lease command creates two objects in the directory
  (sub)system_name.Configurations.  These objects are:

  o A configuration object named release_name.

  o A state description directory named release_name_State.  This
    directory contains several files that store switch values, the
    names of exported and imported views, the model name, and the
    like.

  If the newly created view is subsequently destroyed to save space,
  it can be reconstructed from these objects.

  If saving space is important, the Release command can be used to
  create only the configuration object and the state description
  directory for each specified working view.  Full released views
  can be created subsequently from the configuration object using
  the Build command.  (Note, however, that a configuration object
  references only the controlled objects in a view; therefore,
  only the controlled objects can be created by the Build command.)
  Creating only a configuration is much faster than making a view.

  When a released view is created, the controlled objects in it are
  automatically joined to the corresponding objects in the working
  view and in the previously released views in the same development
  path.
  @node !Commands.Cmvc.Remove_Import

  procedure Remove_Import (View       : String := ">>VIEW NAME<<";
                          From_View  : String := "<CURSOR>";
                          Comments   : String := "";
                          Work_Order : String := "<DEFAULT>";
                          Response   : String := "<PROFILE>");

  Removes the links that were created when the view specified by the
  View parameter was imported.

  This command does not remove an import if there are units compiled
  against any of the links it created.  However, such an import can
  be removed if the units are demoted to the source state.
  @node !Commands.Cmvc.Remove_Unused_Imports

  procedure Remove_Unused_Imports (From_View  : String := "<CURSOR>";
                                  Comments   : String := "";
                                  Work_Order : String := "<DEFAULT>";
                                  Response   : String := "<PROFILE>");

  Removes imports from the specified view or views if none of the
  links created by those imports are needed for compilation.

  Links are removed only on an import-by-import basis.  Thus, if any
  of the links from a given import are needed for compilation, then
  none of the links created by that import are removed.

  A link is needed for compilation if it is referenced in a with
  clause in at least one unit that is in the source, installed,
  or coded state (archived units are ignored).  Compare this with
  the Remove_Import command, which is sensitive only to units that
  actually are compiled against the link.
  @node !Commands.Cmvc.Replace_Model

  procedure Replace_Model (New_Model  : String := ">>NEW MODEL NAME<<";
                          In_View    : String := "<CURSOR>";
                          Comments   : String := "";
                          Work_Order : String := "<DEFAULT>";
                          Response   : String := "<PROFILE>");

  Replaces the model world for the specified view.

  A view's model can be changed to:

  o Invoke a new switches file for the view.

  o Rebuild the view's links.

  o Reset the number of levels for automatic name generation for
    released and spec views.  (This affects only future releases.)

  o Change the view's target key.  However, the change must be to a
    target key that is compatible with the current target key.  For
    example, a view with target key R1000 cannot change to a model
    with target key Mc68020_Bare.
  @node !Commands.Cmvc.Revert

  procedure Revert
      (What_Object           : String                := "<SELECTION>";
       To_Generation          : Integer               := -1;
       Make_Latest_Generation : Boolean               := False;
       Allow_Demotion         : Boolean               := False;
       Remake_Demoted_Units   : Boolean               := True;
       Goal                  : Compilation.Unit_State := Compilation.Coded;
       Comments              : String                := "";
       Work_Order            : String                := "<DEFAULT>";
       Response              : String                := "<PROFILE>");

  Reverts the specified object or objects to the specified
  generation.

  This procedure replaces the contents of each object with the
  contents of the indicated generation of that object.

  The generation to which an object is reverted can be retained as
  the latest generation if the Make_Latest_Generation parameter is
  true.  Otherwise, the reverted object is updated to the latest
  generation the next time the object is checked out.
  @node !Commands.Cmvc.Sever

  procedure Sever (What_Objects              : String := "<SELECTION>";
                  New_Reservation_Token_Name : String := "<AUTO_GENERATE>";
                  Comments                  : String := "";
                  Work_Order                : String := "<DEFAULT>";
                  Response                  : String := "<PROFILE>");

  Severs the specified objects from their respective join sets.

  When an object is severed, it is given a different reservation
  token, so that it can be checked out and modified independent of
  the objects to which it had previously been joined.
  @node !Commands.Cmvc.Show

  procedure Show (Objects  : String := "<CURSOR>";
                 Response : String := "<PROFILE>");

  Displays checkout and generation information for the specified
  controlled objects.

  In addition, this procedure lists the views containing objects that
  are joined to each specified object.

  The display produced by the Show procedure includes the following
  fields:
   Object Name   Generation    Where     Chkd Out By Whom Expected Check In
  ============== ========== ============ ======== ======= =================
  UNITS.CMVC_TEX   3 of 3   REV1_WORKING   Yes      SJL    June 15, 1988

  For each object listed, the fields display the following
  information:

  Object Name       Displays the portion of the object's name that
                     follows the view name.

  Generation        Lists a pair of numbers.  The first number is the
                     generation of the object in the current view.  The
                     second number is the number of generations that
                     exist for that object.

  Where             Displays a view name.  If the object is currently
                     checked out, this field names the view in which
                     it is checked out.  If the object is currently
                     checked in, it names the view that contains the
                     most recent generation.

  Chkd Out          Indicates whether the object is currently checked
                     out.  If "Yes," the following two fields provide
                     more information.

  By Whom           Displays the username of the user who checked out
                     the object.

  Expected Check InDisplays the value that was supplied for the
                     Expected_Check_In_Time parameter of the Check_Out
                     command.

  The Show command also displays the names of the views to which the
  specified objects are joined.
  @node !Commands.Cmvc.Show_All_Checked_Out

  procedure Show_All_Checked_Out (In_View  : String := "<CURSOR>";
                                 Response : String := "<PROFILE>");

  Displays a list of the objects in the specified view that are
  checked out.

  The objects are listed in the same format used by the Show command.
  @node !Commands.Cmvc.Show_All_Controlled

  procedure Show_All_Controlled (In_View  : String := "<CURSOR>";
                                Response : String := "<PROFILE>");

  Lists the controlled objects in the specified view or views.

  The objects are listed in the same format used by the Show command.
  @node !Commands.Cmvc.Show_All_Uncontrolled

  procedure Show_All_Uncontrolled (In_View  : String := "<CURSOR>";
                                  Response : String := "<PROFILE>");

  Lists all uncontrolled objects in the specified views.
  @node !Commands.Cmvc.Show_Checked_Out_By_User

  procedure Show_Checked_Out_By_User
                          (In_View  : String := "<CURSOR>";
                           Who      : String := System_Utilities.User_Name;
                           Response : String := "<PROFILE>");

  Lists the objects in the specified view(s) that are checked out by
  the specified user.

  The objects are listed in the same format used by the Show command.

  Objects are listed even if they are controlled in the specified
  view but checked out in another view.
  @node !Commands.Cmvc.Show_Checked_Out_In_View

  procedure Show_Checked_Out_In_View (In_View  : String := "<CURSOR>";
                                    Response : String := "<PROFILE>");

  Lists the objects that are checked out in the specified view or
  views, regardless of who checked them out.

  The objects are listed in the same format used by the Show command.
  @node !Commands.Cmvc.Show_History

  procedure Show_History (For_Objects           : String  := "<CURSOR>";
                         Display_Change_Regions : Boolean := True;
                         Starting_Generation    : String  := "<CURSOR>";
                         Ending_Generation      : String  := "";
                         Response              : String  := "<PROFILE>");

  Displays the history for the specified view or object within a
  view.

  This procedure shows what has changed between two configurations
  (or two views) on the same path.  For example, the Show_History
  command can be used to display the differences between two released
  views, between a working view and a previously released view, and
  the like.  It also can be used to display how a particular object
  has changed from one view or configuration to another.

  The Show_History procedure provides the following information for
  each specified object (if a view is specified, this information is
  shown for each controlled object in the view):

  o The join set name (the name of the reservation token for the
    joined objects)

  o The object's history for the generations that were created
    between the configurations specified by the Starting_Generation
    and Ending_Generation parameters

  For each of the requested generations of an object, the history
  includes:

  o The time and date of the checkout and checkin that created the
    generation

  o The notes for the object

  o The changes that occurred since the previous generation (if
    requested by the Display_Change_Regions parameter)
  @node !Commands.Cmvc.Show_History_By_Generation

  procedure Show_History_By_Generation
                         (For_Objects           : String  := "<CURSOR>";
                          Display_Change_Regions : Boolean := True;
                          Starting_Generation    : Natural := 1
                          Ending_Generation      : Natural := Natural'Last;
                          Response              : String  := "<PROFILE>");

  Displays the history for one or more controlled objects across the
  specified range of generations.

  This procedure uses generation numbers to delimit the extent of the
  displayed history, whereas the Show_History procedure uses views
  or configurations to delimit the display.

  The Show_History_By_Generation procedure provides the following
  information for each specified object (if a view is specified, this
  information is shown for each controlled object in the view):

  o The join set name (the name of the reservation token for the
    joined objects)

  o The object's history for the generations that were created
    between the configurations specified by the Starting_Generation
    and Ending_Generation parameters

  For each of the requested generations of an object, the history
  includes:

  o The time and date of the checkout and checkin that created the
    generation

  o The notes for the object

  o The changes that occurred since the previous generation (if
    requested by the Display_Change_Regions parameter)
  @node !Commands.Cmvc.Show_Image_Of_Generation

  procedure Show_Image_Of_Generation
                                 (Object         : String  := "<CURSOR>";
                                  Generation     : Integer := -1;
                                  Output_Goes_To : String  := "<WINDOW>";
                                  Response       : String  := "<PROFILE>");

  Reconstructs an image of the specified generation of the designated
  controlled object.

  Successive generations of a controlled object are stored in the
  CMVC database as a series of changed increments.  This command
  reconstructs a textual image of the specified generation.  The
  reconstructed image is displayed in the output log, unless the
  Output_Goes_To parameter specifies a file.

  Show_Image_Of_Generation is a report-oriented command that is most
  useful for putting the image of a single generation into a file.
  As an alternative, the Edit and Def procedures can be used to bring
  up generation images from which interactive operations can be
  used to display images of other generations and of the differences
  between successive generations.
  @node !Commands.Cmvc.Show_Out_Of_Date_Objects

  procedure Show_Out_Of_Date_Objects (In_View  : String := "<CURSOR>";
                                    Response : String := "<PROFILE>");

  Lists the objects in the specified view or views that are not at
  the most recent generation.

  The objects are listed in the same format used by the Show command.
  @node !Commands.Cmvc.System_Object_Enum

  type System_Object_Enum is (Spec_Load_Subsystem, Combined_Subsystem,
                                                                 System);

  Defines the types of system objects that can be created, where a
  system object is either a system or a subsystem.

  There are two types of subsystems.  A subsystem's type determines
  what kind of views the subsystem can contain---for example,
  spec/load views or combined views.

  A subsystem's type also determines whether hierarchic importing is
  enforced.
  Combined_Subsystem

  Defines a type of subsystem that can contain only combined views.
  Within a Combined subsystem, circular import relations may hold---
  that is, a view is permitted to be in its own import closure.

  Spec_Load_Subsystem

  Defines a type of subsystem that can contain spec, load, or
  combined views.  Within a Spec_Load subsystem, all imports must
  be hierarchic---that is, no view is permitted to be in its own
  import closure.

  System

  Defines a system, which is an optional device for creating logical
  groupings of releases from component subsystems in an application.
  Operations for systems are in package Cmvc_Hierarchy.
  @node !Commands.Cmvc_Hierarchy

  When an application consists of multiple subsystems, these
  subsystems optionally can be included in an Environment object
  called a system.  Inclusion in a system is a way of identifying
  particular subsystems as components of a given application or
  of a major portion of an application.  Inclusion in a system
  also provides an automated means of tracking the latest release
  from each subsystem and building activities that reference those
  releases.

  A subsystem is included in a system by establishing a parent-child
  relationship between the system and the subsystem.  Therefore, a
  system does not actually contain its component subsystems in the
  same way that a subsystem view contains component objects.

  Systems have the same internal directory structure as subsystems.
  Systems contain views called system views (not spec/load or
  combined).  As in subsystems, views in systems contain the same
  subdirectories found in subsystem views (for example, Units) plus
  an additional subdirectory called Paths.

  The initial system view is a working view.  Within the State
  directory of the working system view, you can build a release
  activity.  A release activity automatically contains entries
  that reference the latest release from each child subsystem.
  After creating a release activity, you can make a release from
  the working system view to preserve that activity as a frozen
  object.  Every time new releases are made in child subsystems, you
  can rebuild the release activity and then make a new release of the
  working system view.  You can use the Cmvc.Information command to
  display the release activity for a given system view.

  A system can contain multiple paths that correspond to the paths
  in the child subsystems.  The release activity in each system path
  references releases from the corresponding paths in the child
  subsystems.

  Setting Up Systems

  1. Use the Cmvc.Initial command to create a system.  It contains a
     working system view.

  2. Use the Add_Child command to establish the parent-child
     relationship between the desired subsystems and the system.

  3. At each major release point, you can run the Build_Activity
     command in the working system view to build (or update) a
     release activity called Release_Activity that references the
     latest releases from child subsystems.  Release_Activity is
     located in the State directory.

  4. Make the release activity the default and execute the
     application.

  5. If desired, you can edit the release activity using
     Build_Activity to change one of the activity entries (do not use
     commands from package Activity to modify a release activity).

  After a release activity is created, the releases it references
  cannot be deleted.

  Setting Up Paths

  You can use the Cmvc.Make_Path command in a system to create
  multiple paths, one for each path in the component subsystems.
  Before building a release activity in a given system path, you must
  explicitly set up the correspondences between that system path and
  the desired paths from the child subsystems.  To do this:

  1. Locate the Paths directory in the working view of the system
     path.

  2. In the Paths directory, create a file corresponding to each
     child subsystem.  The name of each file must be the same as the
     name of the subsystem to which it corresponds.

  3. In the file for each subsystem, enter a naming expression
     that matches the release names in the desired path from that
     subsystem.

  4. When you build a release activity in a given system path, the
     entry for each subsystem will reference the latest release
     that matches the naming expression in the Paths file for that
     subsystem.

  For example, assume that a system called Mail_System has a child
  subsystem called Mail_Utilities and that the child contains two
  paths whose prefixes are Rev1 and Rev2.  Assume further that
  Mail_System contains a Rev1 path and that this system path is
  to reference releases from the Rev1 path in Mail_Utilities.  To
  establish the correspondence between the Rev1 system path and the
  Rev1 subsystem path:

  1. Within the Mail_System.Rev1_Working.Paths directory, create a
     file called Mail_Utilities.

  2. Edit the file, entering a naming expression that matches the
     release names in the Rev1 path of the Mail_Utilities subsystem--
     -for example:  Rev1@

  3. Commit the file.

  4. If a Rev2 path is desired in Mail_System, repeat these steps
     starting in Mail_System.Rev2_Working.Paths and entering a
     naming expression such as Rev2@.

  The naming expression in a Paths file can match releases from
  more than one path in a given subsystem.  In this case, the latest
  of the releases from among these paths is entered in the release
  activity.

  Releasing System Views

  You can use the Cmvc.Release command to make releases of
  working system views to preserve release activities as frozen
  objects.  When a system view is released, a subdirectory called
  Release_Information is created within the released system view.
  The Release_Information directory contains four controlled text
  files that can be used to rebuild the release activity and the
  views it references from configuration objects.

  The Release_Information directory for a released system view is
  shown in Figure 12-1.

  Assume that you have built a release activity in a working system
  view and made a release of that view.  Furthermore, assume that
  you have destroyed the released system view without deleting
  its configuration object and then you have destroyed each of the
  releases that were referenced in the release activity, without
  deleting their configuration objects.  To rebuild the deleted views
  and release activity:

  1. Use the Cmvc.Build command to rebuild the deleted system-view
     release from its configuration object.  The system view will be
     rebuilt except for the release activity.

  2. Locate the Release_Information directory in the rebuilt system
     view.  Using the Load_Configurations and Spec_Configurations
     files as indirect files, use the Cmvc.Build command to rebuild
     the views that were referenced in the release activity.  (This
     step assumes that the child subsystems still exist and contain
     configuration objects for those views.)

  3. From the Units directory of the rebuilt system view, enter the
     Build_Activity command with default parameters to rebuild and
     then freeze the release activity.  The Build_Activity command
     automatically consults the files in the Release_Information
     directory.
  @node !Commands.Cmvc_Hierarchy.Add_Child

  procedure Add_Child (Child      : String := ">>SYSTEM/SUBSYSTEM NAME<<";
                      To_System  : String := "<CURSOR>";
                      Comments   : String := "";
                      Work_Order : String := "<DEFAULT>";
                      Response   : String := "<PROFILE>");

  Adds a new child (a subsystem or another system) to the designated
  system.

  A system provides an automated means of tracking the latest release
  from each child and building activities that reference those
  releases.

  A system cannot directly or indirectly be a child of itself.
  @node !Commands.Cmvc_Hierarchy.Build_Activity

  procedure Build_Activity (Working_System_View : String  := "<CURSOR>";
                           Views_To_Include    : String  := "<LATEST>";
                           Update_Imports      : Boolean := True;
                           Allow_Code_Views    : Boolean := False;
                           Comments           : String  := "";
                           Work_Order          : String  := "<DEFAULT>";
                           Response           : String  := "<PROFILE>");

  Builds or updates the release activity in the working system view
  to include the specified views.

  By default, the latest releases of all the children of the system
  are included in the release activity.  Views are included in
  the release activity only if they have been created after the
  Build_Activity command was last run on the specified working system
  view.

  Path restrictions can be used to control which releases are
  included.

  By default, the working system view imports spec views from all of
  the subsystems referenced by the release activity.  Updating the
  system view's imports allows you to execute test programs from the
  system view, if desired.  Note that this importing is subject to
  the normal compatibility requirements.

  By default, code views are overlooked in favor of including the
  latest load view in the release activity.  However, changing the
  Allow_Code_Views parameter to true allows code views to be included
  in the release activity.
  @node !Commands.Cmvc_Hierarchy.Children

  function Children (Of_System : String  := "<CURSOR>";
                    Recursive : Boolean := True;
                    Response  : String  := "<WARN>") return String;

  Returns a list of designated subsystem's children.
  @node !Commands.Cmvc_Hierarchy.Contents

  function Contents (Of_System_View : String  := "<CURSOR>";
                    Recursive      : Boolean := True;
                    Response       : String  := "<WARN>") return String;

  Returns the contents of the release activity of the designated
  system view.

  The function returns a string formatted as a naming expression.
  This naming expression contains the fully qualified name of each
  view referenced in the release activity.  The names are separated
  by commas and the entire list is enclosed in brackets.
  @node !Commands.Cmvc_Hierarchy.Expand_Activity

  procedure Expand_Activity
                         (New_Activity : String := ">>NEW ACTIVITY NAME<<";
                          System_View  : String := "<CURSOR>";
                          Response     : String := "<PROFILE>");

  Makes a dereferenced copy of the release activity in the designated
  system view.

  That is, in the new release activity, the procedure replaces
  the entries for system views with the entries from the release
  activities in those system views.
  @node !Commands.Cmvc_Hierarchy.Parents

  function Parents (Of_Subsystem : String  := "<CURSOR>";
                   Recursive    : Boolean := False;
                   Response     : String  := "<WARN>") return String;

  Returns a list of systems that are parents to the designated
  subsystem.
  @node !Commands.Cmvc_Hierarchy.Remove_Child

  procedure Remove_Child
                     (Child       : String := ">>SYSTEM/SUBSYSTEM NAME<<";
                      From_System : String := "<CURSOR>";
                      Comments    : String := "";
                      Work_Order  : String := "<DEFAULT>";
                      Response    : String := "<PROFILE>");

  Severs the relationship between a child system or subsystem and its
  parent.

  This procedure is the opposite of the Add_Child procedure.

  @node !Commands.Cmvc_Maintenance

  Packages Cmvc_Maintenance defines a set of operations for checking
  and restoring the integrity of the various databases associated
  with the CMVC system.  This package also provides operations for
  managing primary and secondary subsystems (copies of subsystems
  that support development on multiple R1000s).

  Commands Grouped by Topic

  The commands in package Cmvc_Maintenance fall into several
  functional groups.  They are listed here by group for your
  convenience.  (Note that the reference entries for these commands
  are arranged in alphabetical order by command name.)

  o Commands for managing the CMVC database:

    Check_Consistency               Expunge_Database

  o Commands for managing the compatibility database (CDB) and
    multiple-host development:

    Destroy_Cdb                      Display_Cdb
    Make_Primary                     Make_Secondary
    Repair_Cdb                       Update_Cdb

  o Commands for managing code views:

    Display_Code_View
  @node !Commands.Cmvc_Maintenance.Check_Consistency

  procedure Check_Consistency (Views    : String := "<CURSOR>";
                              Response : String := "<PROFILE>");

  Checks the consistency of the specified views with respect to the
  CMVC database and the Environment library system.

  In some cases, corrective action is taken.  The specified views can
  be in subsystems or in systems.

  The CMVC database and the Environment library system both record
  various types of information about controlled objects.  The Check-
  _Consistency command makes sure that information in the database
  agrees with the information in the library system.  Specifically,
  Check_Consistency ensures that:

  o There is a configuration object in the Configurations directory
    for every configuration represented in the database.  Missing
    configuration objects are recreated from the database.

  o Both the library system and the CMVC database are synchronized
    with respect to which objects are controlled.  If the library
    system and the CMVC database do not agree, the information in
    the library system is changed to match the information in the
    database.

  o The text of each object in the view directories matches the text
    stored in the CMVC database for the appropriate generation.  Note
    that this is a textual comparison, so that differences due to
    changed pretty-printer switches will be reported.  No action is
    taken by Check_Consistency to reconcile the differences; the
    Cmvc.Check_Out or Cmvc.Accept_Changes command can be used to get
    the latest generation from the database.

  The Check_Consistency command also checks the library structure
  independently of the CMVC database.  The Check_Consistency command
  ensures that:

  o The directory structure within the specified views or subsystems
    is complete.  Check_Consistency reconstructs deleted directories
    and/or missing objects such as the Subpath_Name and Last-
    _Release_Name files in the view.State directory.  (Note that
    the Last_Release_Name file contains the level numbers of the most
    recently released view; when Check_Consistency reconstructs this
    file, all the level numbers are set to 0 and the file must be
    edited by hand to restore the correct level numbers.)

  o The specified views have a model associated with them.  Views
    that reference deleted models lose that reference; the Cmvc-
    .Replace_Model command can be used to provide new models for
    those views.

  The Check_Consistency command verifies that all imported views
  still exist and ensures that, whenever a view is imported by
  another view, both views maintain a record of this relationship.
  Discrepancies are resolved in favor of the importing view.  That
  is, if View_1 imports View_2, but View_2 does not list View_1 as a
  referencer, then View_2's list of referencers is updated to include
  View_1.  On the other hand, if View_2 lists View_1 as a referencer,
  but View_1 does not list View_2 as an import, View_1 is removed
  from View_2's list of referencers.

  Finally, the Check_Consistency command makes sure that the
  proper links exist for each specified view.  Specifically, Check-
  _Consistency examines the with clauses within the specified views'
  Ada units and reports references for which links do not exist.
  Furthermore, Check_Consistency reports unacceptable links---
  namely, links that resolve to load views and links that resolve
  to unimported spec views.  (Typically, such reported links result
  from improperly using the Links.Add command instead of the CMVC
  importing operations.)

  The Check_Consistency command can be used to:

  o Reconstruct a configuration object that was deleted by mistake.

  o Recover from an attempt to delete a view with commands in package
    Library or Compilation.  Check_Consistency reconstructs enough
    of the view so that it can be deleted successfully with the Cmvc-
    .Destroy_View command.

  o Reconstruct the directory structure within a view after deleting
    directories or objects on which other CMVC commands may depend
    (for example, the State, Exports, or Imports directories.)

  o Reconcile conflicting reports and error messages---for example,
    if error messages indicate that an object is already checked
    out, whereas commands such as Cmvc.Show_All_Checked_Out have
    indicated that the object is checked in.
  @node !Commands.Cmvc_Maintenance.Convert_Old_Subsystem

  procedure Convert_Old_Subsystem (Which    : String := "<SELECTION>";
                                  Response : String := "<PROFILE>");

  Converts the views in one or more subsystems from the Gamma format
  to the Delta format so that CMVC operations can be used.

  This is not applicable to subsystems created on an R1000
  that already has been converted from the Gamma release of the
  Environment to a Delta release.
  @node !Commands.Cmvc_Maintenance.Delete_Unreferenced_Leading_Generations

  procedure Delete_Unreferenced_Leading_Generations
                                    (In_Subsystem : String := "<CURSOR>";
                                    Response     : String := "<PROFILE>");

  Not yet implemented.
  @node !Commands.Cmvc_Maintenance.Destroy_Cdb

  procedure Destroy_Cdb (Subsystem   : String  := "<SELECTION>";
                        Limit       : String  := "<WORLDS>";
                        Effort_Only : Boolean := True;
                        Response    : String  := "<PROFILE>");

  Destroys the compatibility database for the specified subsystem.

  When units are compiled in a subsystem, information from
  the compatibility database is incorporated into the DIANA
  representation for those units.  Therefore, when a compatibility
  database is destroyed, all compiled units in the subsystem are
  demoted to the source state and all code views are deleted.

  When the Effort_Only parameter is true, the compatibility database
  is not actually destroyed; instead, a report is generated listing
  the units that would be demoted as a result of destroying the
  database.

  The compatibility database for a subsystem is recreated
  automatically the next time units are compiled in that subsystem.
  When recreated, however, the compatibility database provides a
  new subsystem identification number, effectively severing the
  subsystem from any secondary or primary subsystems with which it
  was associated.  A subsystem is automatically made primary whenever
  its compatibility database is destroyed and then recreated.

  Destroying a compatibility database may be useful in the following
  cases:

  o A compatibility database may need to be destroyed if it is
    corrupted---for example, if any of the objects in the subsystem-
    .State.Compatibility directory are deleted.

  o A compatibility database can be destroyed to remove references
    to any units that were once compiled in the subsystem but are now
    deleted.
  @node !Commands.Cmvc_Maintenance.Display_Cdb

  procedure Display_Cdb (Subsystem  : String  := "<CURSOR>";
                        Show_Units : Boolean := False;
                        Response   : String  := "<PROFILE>");

  Displays information from the compatibility database for each of
  the specified subsystems.

  A subsystem contains a compatibility database only after units have
  been promoted to the installed or coded state in that subsystem.

  The following information is displayed in the output window:

  o Whether the subsystem is primary or secondary

  o The subsystem identification number

  o How many Ada units are represented in the compatibility database

  If the Show_Units parameter is true, each unit is listed along
  with the number of declarations it contains.  Note that every unit
  that was ever compiled in a given subsystem is represented in that
  subsystem's compatibility database.  Therefore, even deleted units
  appear in the listing.
  @node !Commands.Cmvc_Maintenance.Display_Code_View

  procedure Display_Code_View (View             : String  := "<CURSOR>";
                              Verbose_Unit_Info : Boolean := False;
                              Show_Map_Info     : Boolean := False;
                              Response          : String  := "<PROFILE>");

  Displays information about the specified code view.

  By default, the command displays a list of units in the code view.
  (Recall that code views are created by the Cmvc.Make_Code_View
  command.)

  If the Verbose_Unit_Info parameter is true, the command displays
  the withed units and other compiler information for each unit in
  the code view.

  If the Show_Map_Info parameter is true, the command displays a
  mapping of the code segments and exceptions from the code view to
  the original view.  Since code views do not support source-level
  debugging, setting Show_Map_Info to true can be used as a debugging
  aid.
  @node !Commands.Cmvc_Maintenance.Expunge_Database

  procedure Expunge_Database (In_Subsystem : String := "<CURSOR>";
                             Response     : String := "<PROFILE>");

  Expunges the CMVC database, removing stored information and
  history about unused configurations or objects.

  Expunging the database deletes any configuration represented in
  the database for which there is no corresponding configuration
  object in the subsystem.Configurations directory.

  Expunging the database also deletes any join set represented in
  the CMVC database if no configuration references any object in the
  set.  All generations associated with the join set are deleted,
  effectively deleting the history for the unused objects from the
  database.

  The Expunge_Database command is useful when attempting to delete a
  view and then recreate it with the same name.  To do this:

  1. Enter the Cmvc.Destroy_View command with the Destroy-
     _Configuration_Also parameter set to true.  (This destroys
     the configuration object and the state description directory
     along with the view.)

  2. Enter the Expunge_Database command to remove references to the
     configuration from the CMVC database.

  3. Recreate the view.
  @node !Commands.Cmvc_Maintenance.Make_Primary

  procedure Make_Primary (Subsystem      : String  := "<SELECTION>";
                         Moving_Primary : Boolean := False;
                         Response       : String  := "<PROFILE>");

  Converts the specified secondary subsystem into a primary
  subsystem with its own updatable compatibility database.

  When development occurs on multiple R1000s, a copy of each
  subsystem needs to reside on each machine so that the entire
  application can be executed.  One copy of a given subsystem,
  called the primary subsystem, contains an updatable compatibility
  database and thus supports ongoing development.  The other copies,
  called secondary subsystems, have frozen compatibility databases
  and essentially are local copies for execution and test.  Every
  secondary subsystem is associated with exactly one primary
  subsystem and shares its subsystem identification number.

  Subsystems created by the Cmvc.Initial command are always created
  as primary subsystems.  A subsystem also is made primary whenever
  its compatibility database is destroyed and then recreated (see
  the Destroy_Cdb command).  By default, subsystems created by the
  Archive.Copy or Archive.Restore commands are secondary subsystems,
  even if they were copied from primary subsystems.  (Note, however,
  that the Options parameter in each of these Archive commands can be
  set to Primary to create primary subsystems.)

  The Make_Primary command converts secondary subsystems to primary
  subsystems and can be used as one step in the process of:

  o Creating a a separate, updatable subsystem from an existing
    subsystem.  To create a new primary subsystem that is not
    associated with any other existing subsystems:

    1. Make a copy of the existing subsystem using the Archive.Copy
       command.  If the default value for the Options parameter is
       used, a secondary subsystem is created.

    2. Convert the secondary subsystem to a primary subsystem using
       the Make_Primary command with the Moving_Primary parameter
       set to false.  The converted subsystem is given a unique
       subsystem identification number and so is no longer associated
       with any other primary subsystem.

  o Relocating a primary subsystem to a different host.  To move
    a primary subsystem to a location currently occupied by an
    associated secondary subsystem:

    1. Find or create an associated secondary subsystem on the
       desired host.

    2. Update the compatibility database in the secondary subsystem
       using the Update_Cdb command.

    3. Convert the secondary subsystem to a primary subsystem using
       the Make_Primary command with the Moving_Primary parameter
       set to true.  This causes the converted subsystem to retain
       its original subsystem identification number and thus its
       previous association with other subsystems.

    4. Either destroy the original primary subsystem or convert it to
       a secondary subsystem with the Make_Secondary command.  This
       step must be done to prevent corruption of the compatibility
       database.

  Care must be taken to ensure that the Moving_Primary parameter has
  the correct value for the desired operation.  In particular, the
  value false assigns the subsystem a new identification number,
  severing its association from other subsystems, including its
  original primary subsystem.  The new identification number is
  retained, even if the subsystem is made secondary again.
  @node !Commands.Cmvc_Maintenance.Make_Secondary

  procedure Make_Secondary (Subsystem : String := "<SELECTION>";
                           Response  : String := "<PROFILE>");

  Converts the specified primary subsystem into a secondary
  subsystem with a read-only compatibility database.

  When development occurs on multiple R1000s, a copy of each
  subsystem needs to reside on each machine so that the entire
  application can be executed.  One copy of a given subsystem,
  called the primary subsystem, contains an updatable compatibility
  database and thus supports ongoing development.  The other copies,
  called secondary subsystems, have frozen compatibility databases
  and essentially are local copies for execution and test.  Every
  secondary subsystem is associated with exactly one primary
  subsystem and shares its subsystem identification number.

  By default, secondary subsystems are created by the Archive.Copy
  or Archive.Restore commands, even if they were copied from primary
  subsystems.  (Note, however, that the Options parameter in each of
  these Archive commands can be set to create primary subsystems.)

  The Make_Secondary command is used in the last step in the process
  of moving a primary subsystem:

  1. Update the compatibility database in the secondary subsystem
     using the Update_Cdb command.

  2. Convert the secondary subsystem to a primary subsystem using
     the Make_Primary command with the Moving_Primary parameter set
     to true.  This causes the converted subsystem to retain its
     original subsystem identification number and thus its previous
     association with other subsystems.

  3. Either destroy the original primary subsystem or convert it to
     a secondary subsystem with the Make_Secondary command.  This
     step must be done to prevent corruption of the compatibility
     database.
  @node !Commands.Cmvc_Maintenance.Repair_Cdb

  procedure Repair_Cdb (Subsystem      : String  := "<SELECTION>";
                       Verify_Only    : Boolean := True;
                       Delete_Current : Boolean := False;
                       Response       : String  := "<PROFILE>");

  Verifies that the information in the specified subsystem's
  compatibility database is consistent with the DIANA representation
  of the subsystem's compiled units.

  When the Verify_Only parameter is false, some or all of the
  inconsistencies are repaired, depending on the value of the Delete-
  _Current parameter.

  When units are compiled in a subsystem, information from
  the compatibility database is incorporated into the DIANA
  representation for those units.  If the compatibility database
  is corrupted after units have been compiled, it can be repaired
  or rebuilt using information from the DIANA representation of the
  compiled units.  For example, if an object in the subsystem.State-
  .Compatibility directory is deleted, the Repair_Cdb command can
  rebuild the object.

  Note that Repair_Cdb can rebuild a compatibility database only from
  the DIANA representation of installed or coded units.  Therefore,
  Repair_Cdb cannot be used to restore a database destroyed by the
  Destroy_Cdb command, because Destroy_Cdb also deletes the DIANA
  representation.

  As long as there is at least one installed or coded unit in the
  subsystem, the database can be rebuilt with the same subsystem
  identification number.
  @node !Commands.Cmvc_Maintenance.Update_Cdb

  procedure Update_Cdb (From_Subsystem : String := "<ASSOCIATED_PRIMARY>";
                       To_Subsystem   : String := "<SELECTION>";
                       Response       : String := "<PROFILE>");

  Updates a secondary subsystem's compatibility database by copying
  the compatibility database from another subsystem.

  The two subsystems must have the same subsystem identification
  number, although they can be on different R1000s.

  Typically, a compatibility database is copied from a primary
  subsystem into an associated secondary subsystem to:

  o Compile incremental changes in the secondary subsystem

  o Prepare a secondary subsystem to be converted to a primary
    subsystem (see the Make_Primary command)

  Note that the compatibility database is automatically moved
  whenever Archive.Copy is used to copy views or individual units
  from one subsystem into another.  In contrast, the Update_Cdb
  command copies only the compatibility database.  Thus, using the
  Update_Cdb command is equivalent to entering the Archive.Copy
  command with Options => "cdb".

  The Update_Cdb command cannot be used to revert a compatibility
  database to a previous version.  See the Revert_Cdb value of the
  Option parameter of the Archive.Copy command.
  @node !Commands.Work_Order

  This package provides operations for creating, viewing, and
  manipulating work orders, work-order lists, and ventures.  These
  objects can be associated with user sessions (that is, with user
  IDs and session names) to collect and convey data about project
  management among team members involved in large-system development
  using subsystems.

  Many characteristics of work orders, work-order lists, and
  ventures are controllable with session switches, which are
  described in a following section.

  Work orders are designed to communicate details about specific
  tasks to be accomplished.  They may present instructions to a
  developer and collect project work data to mark ongoing progress.
  A particular work order may address one or more developers, but
  typically it is limited in scope; a work order may describe one bug
  to be fixed, for example.

  Groups of related work orders constitute a work-order list.  For
  example, a work-order list may relate to a particular module of
  code or it may be the set of work orders assigned to an individual
  developer.

  A larger component of project management is the venture.  A venture
  is a management tool that contains information about groups of
  work orders and work-order lists and controls their use via venture
  policy switches.  Each work order must have a venture that is its
  "parent."

  Ventures, work-order lists, and work orders are library objects.
  For each project-management object, package Work_Order provides
  subprograms to:

  o Create, display, and edit the object

  o View and set the default object for a user or session

  o View and set the textual notes within the object

  Although there are editing commands in packages within package
  Work_Order for each object, viewing and editing of work orders,
  work-order lists, and ventures is perhaps most easily done with
  commands from package Common.  See the following introductions to
  subpackages Editor, List_Editor, and Venture_Editor for sample
  displays and specific information about using Common commands for
  editing.

  Session Switches

  Many session switches determine how information in work orders,
  work-order lists, and ventures are formatted.  See SJM, Session
  Switches, for more information on session switches.

  The following session switches pertain to project-reporting
  objects.  Unless otherwise specified, the full name for each
  switch begins with Session.  For example, the full name for
  Cmvc_Break_Long_Lines is Session.Cmvc_Break_Long_Lines.

  Cmvc_Break_Long_Lines (default true)

  Controls whether lines in work orders, work-order lists, and
  ventures that exceed the value of the Cmvc_Line_Length switch
  are broken.  User-entered strings are never broken.

  Cmvc_Capitalize (default true)

  Determines whether words, other than those in user-entered
  strings, in work orders, work-order lists, and ventures are
  capitalized.

  Cmvc_Comment_Extent (default 4)

  Specifies, as an integer value, the number of comments displayed in
  a work order.

  Cmvc_Configuration_Extent (default 0)

  Specifies, as an integer value, the number of configurations
  displayed in a work order.

  Cmvc_Field_Extent (default 4)

  Specifies, as an integer value, the number of elements of vector
  fields that are displayed in a work order.

  Cmvc_Indentation (default 2)

  Specifies, as an integer value, the number of spaces used for
  indentation in work orders, work-order lists, and ventures.

  Cmvc_Line_Length (default 80)

  Specifies, as an integer value, how long a line in a work order,
  work-order list, or venture can be before it is eligible to be
  broken.

  Cmvc_Shorten_Name (default true)

  Shows object names in work orders, work-order lists, and ventures
  in a shortened form.

  Cmvc_Shorten_Unit_State (default false)

  Shows the state of work orders in a shortened form.

  Cmvc_Show_Add_Date (default true)

  Displays the date an entry is added to a work order.

  Cmvc_Show_Add_Time (default true)

  Displays the time an entry is added to a work order.

  Cmvc_Show_All_Default_Lists (default false)

  Displays only the user's default work-order list in a venture.

  Cmvc_Show_All_Default_Orders (default false)

  Displays only the user's default work order in a venture.

  Cmvc_Show_Deleted_Objects (default false)

  Shows deleted work orders or work-order lists in a work-order list.
  Display of deleted objects is controlled by elision.

  Cmvc_Show_Deleted_Versions (default false)

  Shows version numbers and information for all versions of a
  work order or work-order list.  Display of deleted versions is
  controlled by elision.

  Cmvc_Show_Display_Position (default false)

  Shows display position of user-defined work-order fields.

  Cmvc_Show_Edit_Info (default false)

  Shows edit information for objects displayed in work orders, work-
  order lists, or ventures.

  Cmvc_Show_Field_Default (default true)

  Shows the default value for vector fields.  If this switch is true,
  vector fields will show the default value of all elements that have
  not been assigned.

  Cmvc_Show_Field_Max_Index (default false)

  Shows the number of entries in a vector field that have been
  written.

  Cmvc_Show_Field_Type (default false)

  Shows the type of field (that is, Boolean, integer, or string) for
  all scalar and vector fields.

  Cmvc_Show_Frozen (default false)

  Shows "Frz" for frozen objects displayed in work orders, work-
  order lists, or ventures.

  Cmvc_Show_Hidden_Fields (default false)

  Displays hidden fields in a venture.

  Cmvc_Show_Retention (default false)

  Shows the retention count when displaying objects in work orders,
  work-order lists, or ventures.

  Cmvc_Show_Boolean (default false)

  Shows the size of the version, in bytes, when displaying objects in
  a work order, work-order list, or venture.

  Cmvc_Show_Unit_State (default true)

  Shows the state of work orders listed in ventures and work-order
  lists (that is, pending, in progress, closed).

  Cmvc_Show_Users (default false)

  Shows the list of users in the users field of work orders.  Display
  of users is controlled by elision.

  Cmvc_Show_Version_Number (default false)

  Shows the version number of objects displayed in work orders,
  work-order lists, or ventures.

  Cmvc_Uppercase (default false)

  Determines whether words, other than those in user-entered
  strings, in work orders, work-order lists, and ventures are
  displayed in uppercase.

  Cmvc_Version_Extent (default 0)

  Specifies, as an integer value, the number of versions displayed in
  a work order.

  Default_Venture

  Specifies a filename for the default venture for the session.  The
  full switch name is Cmvc.Default_Venture.
  @node !Commands.Work_Order.Add_To_List

  procedure Add_To_List (Order_Names : String := "<IMAGE>";
                        List_Name   : String := "<WORK_LIST>";
                        Response    : String := "<PROFILE>");

  Adds one or more work orders to a work-order list.
  @node !Commands.Work_Order.Close

  procedure Close (Order_Name : String := "<ORDER>";
                  Response   : String := "<PROFILE>");

  Sets the status of the specified work order to closed.

  Once a work order has been closed, it no longer can be modified.
  @node !Commands.Work_Order.Create

  procedure Create (Order_Name             : String  := ">>OBJECT NAME<<";
                   Notes                  : String  := "";
                   On_List                : String  := "<WORK_LIST>";
                   On_Venture             : String  := "<VENTURE>";
                   Make_Default_Work_Order : Boolean := True;
                   Response               : String  := "<PROFILE>");

  Creates a work order on the specified venture and adds it to a
  work-order list.

  The new work order is created on the default venture for the
  current session unless the On_Venture parameter names a venture.
  The string specified in the Notes parameter is entered into the
  notes field of the new work order.  If the Make_Default_Work_Order
  parameter is true, the new work order becomes the default work
  order on the parent venture.
  @node !Commands.Work_Order.Create_Field

  procedure Create_Field
               (Field_Name       : String  := ">>FIELD NAME<<";
                Field_Type       : String  := ">>BOOLEAN|STRING|INTEGER<<";
                Is_Vector        : Boolean := False;
                Is_Controlled    : Boolean := False;
                Default          : String  := "";
                Display_Position : Natural := Natural'Last;
                On_Venture       : String  := "<VENTURE>";
                Propagate        : Boolean := True;
                Renumber_Fields  : Boolean := True;
                Response         : String  := "<PROFILE>");

  Creates a new user-defined field with the designated data type in
  the specified venture.

  This field appears in all work orders subsequently created on
  this venture.  If the Propagate parameter is true, all work orders
  already created on this venture are updated to contain this field.
  The new field appears with the initial value specified by the
  Default parameter.
  @node !Commands.Work_Order.Create_List

  procedure Create_List (List_Name         : String  := ">>OBJECT NAME<<";
                        Notes            : String  := "";
                        On_Venture        : String  := "<VENTURE>";
                        Make_Default_List : Boolean := True;
                        Response          : String  := "<PROFILE>");

  Creates a work-order list on the specified venture.
  @node !Commands.Work_Order.Create_Venture

  procedure Create_Venture
                     (Venture_Name         : String  := ">>OBJECT NAME<<";
                      Notes               : String  := "";
                      Make_Default_Venture : Boolean := True;
                      Response            : String  := "<PROFILE>");

  Creates a new venture.
  @node !Commands.Work_Order.Default

  function Default (For_Venture    : String  := "<VENTURE>";
                   For_User       : String  := "<CURRENT_USER>";
                   Ignore_Garbage : Boolean := True) return String;

  Returns the name of the user's default work order in the specified
  venture.
  @node !Commands.Work_Order.Default_List

  function Default_List (For_Venture    : String  := "<VENTURE>";
                        For_User       : String  := "<CURRENT_USER>";
                        Ignore_Garbage : Boolean := True) return String;

  Returns the name of the user's default work-order list in the
  specified venture.
  @node !Commands.Work_Order.Default_Venture

  function Default_Venture (For_User       : String  := "<CURRENT_USER>";
                           Ignore_Garbage : Boolean := True) return String;

  Returns the pathname of the default venture for a user.
  @node !Commands.Work_Order.Delete_Field

  procedure Delete_Field (Field_Name           : String  := ">>FIELD NAME<<";
                         Venture_Name         : String  := "<VENTURE>";
                         Even_If_Data_Present : Boolean := False;
                         Response            : String  := "<PROFILE>");

  Deletes the named field from the venture.
  @node !Commands.Work_Order.Display

  procedure Display (Order_Name : String := "<ORDER>";
                    Options    : String := "";
                    Response   : String := "<PROFILE>");

  Formats and displays the contents of the specified work order in
  the output window.

  The format of the display is controlled by the Options parameter.
  This display cannot be edited; to edit a work order, see the Edit
  command.
  @node !Commands.Work_Order.Display_List

  procedure Display_List (List_Name : String := "<WORK_LIST>";
                         Options   : String := "";
                         Response  : String := "<PROFILE>");

  Formats and displays the contents of the specified work-order list
  in the output window.

  The format of the display is controlled by the Options parameter.
  This display cannot be edited; to edit a work-order list, see the
  Edit_List command.
  @node !Commands.Work_Order.Display_Venture

  procedure Display_Venture (Venture_Name : String := "<VENTURE>";
                            Options      : String := "";
                            Response     : String := "<PROFILE>");

  Formats and displays the contents of the specified venture in the
  output window.

  The format of the display is controlled by the Options parameter.
  This display cannot be edited; to edit a venture, see the
  Edit_Venture command.
  @node !Commands.Work_Order.Edit

  procedure Edit (Order_Name : String := "<ORDER>");

  Edits the designated work order.

  The procedure creates a window in which the designated work order
  is displayed.  If a window already exists for that work order, the
  window is reused.  From the window, the work order can be edited
  with the operations from package !Commands.Common that apply to
  this class of object.
  @node !Commands.Work_Order.Edit_List

  procedure Edit_List (List_Name : String := "<WORK_LIST>");

  Edits the designated work-order list.

  The procedure creates a window in which the designated work-order
  list is displayed.  If a window already exists for that work-order
  list, the window is reused.  From the window, the work-order list
  can be edited with the operations from package !Commands.Common
  that apply to this class of object.
  @node !Commands.Work_Order.Edit_Venture

  procedure Edit_Venture (Venture_Name : String := "<VENTURE>");

  Edits the designated venture.

  The procedure creates a window in which the designated venture is
  displayed.  If a window already exists for that venture, the window
  is reused.  From the window, the venture can be edited with the
  operations from package !Commands.Common that apply to this class
  of object.
  @node !Commands.Work_Order.Notes

  function Notes (Order_Name : String := "<ORDER>") return String;

  Returns the notes field of the specified work order.

  The notes field typically contains descriptive information about a
  work order.
  @node !Commands.Work_Order.Notes_List

  function Notes_List (List_Name : String := "<WORK_LIST>") return String;

  Returns the notes field of the specified work-order list.

  The notes field typically contains descriptive information about a
  work-order list.
  @node !Commands.Work_Order.Notes_Venture

  function Notes_Venture (Venture_Name : String := "<VENTURE>")
                                                           return String;

  Returns the notes field for the specified venture.

  The notes field typically contains descriptive information about a
  venture.
  @node !Commands.Work_Order.Remove_From_List

  procedure Remove_From_List (Order_Names : String := "<IMAGE>";
                             List_Name   : String := "<WORK_LIST>";
                             Response    : String := "<PROFILE>");

  Removes the entry for the specified work order from a work-order
  list.
  @node !Commands.Work_Order.Set_Default

  procedure Set_Default (To_Work_Order : String := "<CURSOR>";
                        For_Venture   : String := "<VENTURE>";
                        For_User      : String := "<CURRENT_USER>";
                        Response      : String := "<PROFILE>");

  Sets the specified work order to be the default for a given user
  and session whenever the work order's parent venture is the
  default.

  Each venture contains a list of mappings between user sessions
  and work orders.  When a user sets a venture as the default in a
  given session, the work order mapped to that session in the venture
  automatically becomes the user's default work order.  This command
  modifies the venture by adding or changing the mapping from session
  to work order in the specified venture.
  @node !Commands.Work_Order.Set_Default_List

  procedure Set_Default_List (To_List     : String := "<CURSOR>";
                             For_Venture : String := "<VENTURE>";
                             For_User    : String := "<CURRENT_USER>";
                             Response    : String := "<PROFILE>");

  Sets the specified work-order list to be the default for a given
  user and session whenever the work-order list's parent venture is
  the default.

  Each venture contains a list of mappings between user sessions and
  work-order lists.  When a user sets a venture as the default in a
  given session, the work-order list mapped to that session in the
  venture automatically becomes the user's default work-order list.
  This command modifies the venture by adding or changing the mapping
  from session to work-order list in the specified venture.
  @node !Commands.Work_Order.Set_Default_Venture

  procedure Set_Default_Venture (To_Venture : String := "<CURSOR>";
                                For_User   : String := "<CURRENT_USER>";
                                Response   : String := "<PROFILE>");

  Sets the default venture for the specified session.

  Setting a venture to be the default automatically sets the default
  work order and the default work-order list for the current session,
  if such defaults have been specified for that venture.

  Setting a default venture with this command automatically sets the
  value of the Cmvc.Default_Venture session switch to the specified
  venture name.
  @node !Commands.Work_Order.Set_Notes

  procedure Set_Notes (To_Value   : String := ">>New Notes<<";
                      Order_Name : String := "<ORDER>";
                      Response   : String := "<PROFILE>");

  Modifies the notes field for the specified work order.

  Any existing notes in the specified work order are replaced by
  the new notes.  Unlike user-defined fields, the notes field can be
  updated multiple times.

  The notes field typically is used to provide a brief description of
  the work order.
  @node !Commands.Work_Order.Set_Notes_List

  procedure Set_Notes_List (To_Value  : String := ">>New Notes<<";
                           List_Name : String := "<WORK_LIST>";
                           Response  : String := "<PROFILE>");

  Modifies the notes field for the specified work-order list.

  Any existing notes in the specified work-order list are replaced by
  the new notes.

  The notes field typically is used to provide a brief description of
  the work-order list.
  @node !Commands.Work_Order.Set_Notes_Venture

  procedure Set_Notes_Venture (To_Value     : String := ">>New Notes<<";
                              Venture_Name : String := "<VENTURE>";
                              Response     : String := "<PROFILE>");

  Modifies the notes field for the specified venture.

  Any existing notes in the specified venture are replaced by the new
  notes.

  The notes field typically is used to provide a brief description of
  the venture.
  @node !Commands.Work_Order.Set_Venture_Policy

  procedure Set_Venture_Policy
                     (The_Switch   : Venture_Policy_Switch;
                      To_Value     : Boolean;
                      Venture_Name : String              := "<VENTURE>";
                      Effort_Only  : Boolean             := False;
                      Response     : String              := "<PROFILE>");

  Sets the specified venture policy switch to the specified value.

  This command also can be used to determine the value of a
  particular switch for a venture that currently is not displayed.
  @node !Commands.Work_Order.Venture_Policy_Switch

  type Venture_Policy_Switch is (Require_Current_Work_Order,
                                Require_Comments_At_Check_In,
                                Require_Comment_Lines,
                                Journal_Comment_Lines,
                                Allow_Edit_Of_Work_Orders);

  Defines the policies that can be enforced for a venture.

  When a user has a default venture, the policies on that venture
  are followed by CMVC commands; errors result if any policies are
  violated.  For example, if the policy Require_Current_Work_Order
  is enforced for the user's default venture, the user must have a
  default work order to execute any CMVC commands that would update a
  work order, such as Cmvc.Check_In and Cmvc.Check_Out.

  Using package !Implementation.Work_Order_Implementation, these
  policies can be interrogated and enforced by other user-defined
  commands.
  Allow_Edit_Of_Work_Orders

  Defines a policy in which controlled user-defined fields can
  be modified interactively.  User-defined fields that are not
  controlled can be modified, independent of this policy.  Note
  that all user-defined fields can be modified only once.

  Journal_Comment_Lines

  Defines a policy in which comment strings provided to CMVC commands
  are recorded in the work-order comments field.  It makes no sense
  to enforce Require_Comments_At_Check_In or Require_Comment_Lines
  without enforcing Journal_Comment_Lines.

  Require_Comment_Lines

  Defines a policy that requires users to provide a string comment to
  all CMVC commands that have a Comments parameter.  The null string
  will not be accepted.

  Require_Comments_At_Check_In

  Defines a policy that requires users to provide a string to the
  Comments parameter of the Cmvc.Check_In command.  The null string
  will not be accepted.

  Require_Current_Work_Order

  Defines a policy that requires users to have a default work order
  in order to execute any CMVC commands that have a Work_Order
  parameter.
  @node !Commands.Work_Order.Editor

  The commands in package Work_Order.Editor are used for
  interactively editing work orders.  Generally, users will not
  enter these commands directly but will invoke them through commands
  in package !Commands.Common.

  The formatted display of a sample work order is shown below.
  Following this is a field-oriented list of applicable commands
  from package Common.
      !Users.Drk.W_1.Order_4 : In_Progress;
      -------------------------------------
      Notes:

      + "New notes for this work order"
      Parent Venture: (!Users.Drk.W_1...)
        ...A_Venture
      Status: In_Progress
        Created at 87/04/13 10:40:12 by Drk.S_1
      Fields:
        "A Vector String Field" 5 Strings =>
              2 => "number 2"
              3 => "number 3"
              4 => "some more values"
              5 => "another value"
      +        0 => "a value which hasn't been saved yet"
          others => "uninitialized"
      = "A Controlled Boolean" => False
      Comments: 1 + 1
        87/04/27 11:40:03 Drk.S_1 for ">>Element Name<<" => ">>Comment<<"
      + 87/04/28 14:30:23 Drk.S_1 for ">>Element Name<<" =>
      +   ">>A New and much longer Comment<<"
      Users: 1
        Drk.S_1
      Versions: 1 (!Users.Drk...)
        87/04/28 11:38:48 "A_Venture".1 ...W_1
      Configurations: 1
        87/04/23 15:18:48 !Machine.Error_Logs

  In the following list are brief descriptions of the operations
  affected by commands from package Common for each field in the
  foregoing work-order display.  Commands not listed have no effect
  or produce results consistent with the descriptions in the EST
  book.

  Field          Command/Program Action

  Notes          Delete reverts to old notes, if any; Edit/Insert
                  prompt in a Command window for new notes.

  Fields         Definition creates minor window to show detailed
                  information about all fields; Delete removes a newly
                  inserted field for which no values have been saved;
                  Edit/Insert prompt in a Command window for data about
                  a new field; Expand/Elide show more/less of field
                  extent; Explain shows maximum index, defaults, and
                  type for each field.

  Comments      Definition creates minor window to show all comments;
                  Delete removes newly inserted comment, if it has not
                  been saved; Edit/Insert prompt in a Command window
                  for a new comment; Expand/ Elide show more/less of
                  comment extent; Explain shows the date and time
                  comment was added.

  Users          Definition traverses to session object in user's home
                  directory; Expand/Elide show/hide list of users.

  Versions      Definition creates minor window to show all versions;
                  Delete removes newly inserted version data, if
                  it has not been saved; Edit/ Insert prompt in a
                  Command window for information about a new version;
                  Expand/Elide show more/less of version extent;
                  Explain shows the date and time version was added.

  Configurations Definition creates minor window to show all\r               
                  configurations; Delete removes newly inserted
                  configuration, if it has not been saved; Edit/Insert
                  prompt in a Command window for information about a
                  new configuration; Expand/Elide show more/less about
                  a configuration; Explain shows the date and time
                  configuration was added.

  When a work order is edited interactively, the object is locked
  and the # symbol appears in the window banner.  Individual changes
  are marked by a + symbol until they are saved using Common.Commit.
  Changes can be undone until they are saved.
  @node !Commands.Work_Order.Editor.Add_Comment

  procedure Add_Comment (The_Comment : String := ">>Comment<<";
                        The_Element : String := ">>Element Name<<";
                        The_User    : String := "<CURRENT_USER>");

  Adds a comment to those recorded in the work order.

  Once a comment has been added, it cannot be removed.
  @node !Commands.Work_Order.Editor.Add_Configuration

  procedure Add_Configuration (The_Configuration : String :=
                                                ">>Configuration Name<<");

  Adds a configuration to those recorded in the work order.

  Once a configuration has been added, it cannot be removed.
  @node !Commands.Work_Order.Editor.Add_User

  procedure Add_User (The_User : String := "<CURRENT_USER>");

  Adds a user session to those recorded in the work order.

  Once a user has been added, it cannot be removed.
  @node !Commands.Work_Order.Editor.Add_Version

  procedure Add_Version
                  (The_Configuration : String  := ">>Configuration Name<<";
                   The_Element       : String  := ">>Element Name<<";
                   The_Generation    : Natural := 0);

  Adds a version to those recorded in the work order.

  Once a version has been added, it cannot be removed.
  @node !Commands.Work_Order.Editor.Set_Field

  procedure Set_Field (To_Value  : Boolean := False;
                      The_Index : Natural := 0;
                      The_Field : String  := ">>Field Name<<");

  Sets the Boolean value of the specified work-order field to the
  specified value.

  Once a work-order field has been set, it cannot be modified
  further.
  @node !Commands.Work_Order.Editor.Set_Field

  procedure Set_Field (To_Value  : Integer := 0;
                      The_Index : Natural := 0;
                      The_Field : String  := ">>Field Name<<");

  Sets the integer value of the specified work-order field to the
  specified value.

  Once a work-order field has been set, it cannot be modified
  further.
  @node !Commands.Work_Order.Editor.Set_Field

  procedure Set_Field (To_Value  : String  := ">>Field Value<<";
                      The_Index : Natural := 0;
                      The_Field : String  := ">>Field Name<<");

  Sets the string value of the specified work-order field to the
  specified value.

  Once a work-order field has been set, it cannot be modified
  further.
  @node !Commands.Work_Order.Editor.Set_Notes

  procedure Set_Notes (Notes : String := ">>New Notes<<");

  Sets the notes field of the work order to the specified string.

  The specified text will replace the existing text.
  @node !Commands.Work_Order.List_Editor

  This package provides operations for adding work orders to work-
  order lists and setting the notes for a work-order list.

  The formatted display of a sample work-order list is shown below.  
  Following this is a field-oriented list of applicable commands from
  package !Commands.Common.

      !Users.Drk.W_1.A_List

      ---------------------
      Notes: "Outstanding work orders"
      Parent Venture: (!USERS.DRK.W_1...)
        ...A_Venture
      Work Orders: (!USERS.DRK.W_1...)
        ...Order_1   : In_Progress;
        ...Order_2   : Pending    ;
        ...Order_3 :           ;

  In the following list are brief descriptions of the operations
  affected by commands from package Common for each field in the
  foregoing display.  Commands not listed have no effect or produce
  results consistent with the descriptions in the EST book.

  Field        Command/Program Action

  Notes        Delete reverts to old notes, if any; Edit/Insert
                prompt in a Command window for new notes.

  Orders       Delete removes unsaved insertions; marks an existing
                order to be removed from the list.
  @node !Commands.Work_Order.List_Editor.Add

  procedure Add (Work_Orders : String := ">>Work Order Names<<");

  Adds the specified work orders to the local work-order list.
  @node !Commands.Work_Order.List_Editor.Set_Notes

  procedure Set_Notes (Notes : String := ">>New Notes<<");

  Sets the notes field of the work-order list to the specified
  string.

  The specified text will replace the existing text.
  @node !Commands.Work_Order.Venture_Editor

  These commands are intended for use when editing ventures.  They
  will execute only in a Command window attached to a venture;
  all operations modify that venture.  Many commands are bound to
  keys that, when pressed, prompt the user for parameter completion
  through a Command window.

  The formatted display of a sample venture is shown below.  Following this
  is a field-oriented list of applicable commands from package 
  Common.

      !Users.Drk.W_1.A_Venture
      ------------------------
      Notes: "Notes for this venture"
      Policy_Switches:
        Require_Current_Work_Order  => False
        Require_Comment_At_Check_In => True
        Require_Comment_Lines       => True
        Journal_Comment_Lines       => True
        Allow_Edit_Of_Work_Orders   => False
      Fields:
        "A Hidden Field" Integer @ 0 => 0
      = "A Controlled Hidden Field" Integers @ 0 => -1
      = "A Controlled Boolean" Boolean @ 1 => False
        "A Vector String Field" Strings @ 2 => "uninitialized"
      Work_Orders: (!Users.Drk.W_1...)
        ...Order_1   : In_Progress;
        ...Order_2   : Pending    ;
        ...Order_3 :           ;
        ...Order_4   : In_Progress;
      Default_Work_Orders: (!Users.Drk.W_1...)
        Drk.S_1 => ...Order_2
        Drk.S_2 => ...Order_3
      Work_Order_Lists: (!Users.Drk.W_1...)
        ...A_List
      Default_Work_Order_Lists: (!Users.Drk.W_1...)
        Drk.S_2 => ...A_List

  In the following list are brief descriptions of the operations
  affected by commands from package Common for each field in the
  foregoing display.  Commands not listed have no effect or produce
  results consistent with the descriptions in the EST book.

  Field          Command/Program Action

  Notes          Delete reverts to old notes, if any; Edit/Insert
                  prompt in a Command window for new notes.

  Policy         Delete sets the policy to false; Edit toggles current
                  policy switch; Insert prompts in a Command window for
                  new policy value.

  Fields         Delete sets display to begin with field 0; Edit
                  prompts for new type and position on a field display
                  line; Expand/Elide show/hide hidden fields; Explain
                  shows defaults and type for each field; Insert
                  prompts in a Command window for data about a new
                  field.

  Orders         Insert prompts in a Command window to create a new
                  work order.

  Default_Orders  Delete sets the default work order to nil;\r               
                  Edit/Insert prompt in a Command window for a new
                  default work order; Expand/Elide show/hide list of
                  users.

  Lists          Insert prompts in a Command window to create a new
                  work-order list.

  Default_Lists Delete sets the default work-order list to nil;
                  Edit/Insert prompt in a Command window for a new
                  default work-order list; Expand/Elide show/hide list
                  of users.
  @node !Commands.Work_Order.Venture_Editor.Set_Default_List

  procedure Set_Default_List (New_Default : String := "<SELECTION>";
                             For_User    : String := "<CURRENT_USER>");

  Sets the default work-order list for a specific user session on the
  local venture.

  Each user session can have a different default work-order list.
  Several commands reference the default work-order list of the
  default venture when determining which work-order list to use.
  @node !Commands.Work_Order.Venture_Editor.Set_Default_Order

  procedure Set_Default_Order (New_Default : String := "<SELECTION>";
                              For_User    : String := "<CURRENT_USER>");

  Set the default work order for a specific user session on the local
  venture.

  Each user session may have a different default work order.  Several
  commands reference the default work order of the default venture
  when determining which work order to use.
  @node !Commands.Work_Order.Venture_Editor.Set_Field_Info

  procedure Set_Field_Info (Is_Controlled    : Boolean := False;
                           Display_Position : Natural := 1;
                           The_Field        : String  := ">>Field Name<<");

  Sets the numeric tag of a user-defined field and specifies whether
  that field is modifiable.

  Numeric tags control the relative display position of the field
  within the venture.
  @node !Commands.Work_Order.Venture_Editor.Set_Notes

  procedure Set_Notes (Notes : String := ">>New Notes<<");

  Sets the notes field of the venture to the specified string.

  The specified text will replace the existing text.
  @node !Commands.Work_Order.Venture_Editor.Set_Policy

  procedure Set_Policy (To_Value   : Boolean               := False;
                       The_Switch : Venture_Policy_Switch);

  Sets the value of the specified venture policy switch to the
  specified value.
  @node !Commands.Work_Order.Venture_Editor.Spread_Fields

  procedure Spread_Fields (Interval : Natural := 10);

  Renumbers all user-defined fields, assigning new numeric tags
  using the specified interval.

  This command is useful for creating a place to insert a new field
  between two existing fields that are consecutively numbered.