DataMuseum.dkPresents historical artifacts from the history of: Rational R1000/400 Tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Rational R1000/400 Tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - downloadIndex: ┃ P T ┃
Length: 192762 (0x2f0fa) Types: TextFile Names: »PM_HELP«
└─⟦5f3412b64⟧ Bits:30000745 8mm tape, Rational 1000, ENVIRONMENT 12_6_5 TOOLS └─ ⟦91c658230⟧ »DATA« └─⟦f6fec0485⟧ └─⟦this⟧
@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.