DataMuseum.dk

Presents historical artifacts from the history of:

Rational R1000/400

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

See our Wiki for more about Rational R1000/400

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦31c953523⟧ Ada Source

    Length: 45056 (0xb000)
    Types: Ada Source
    Notes: 03_class, FILE, R1k_Segment, e3_tag, generic, package Work_Order_Implementation, pragma Module_Name 4 3780, pragma Subsystem Cmvc, seg_012873

Derivation

└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000
    └─ ⟦5a81ac88f⟧ »Space Info Vol 1« 
        └─⟦this⟧ 

E3 Source Code



with Action;
with Calendar;
with Default;
with Directory;
with Io;
with Machine;
with System;
with Work_Order_Errors;

package Work_Order_Implementation is

    pragma Subsystem (Cmvc);
    pragma Module_Name (4, 3780);
    pragma Bias_Key (9);

    subtype User_Id is Machine.Session_Id;

    subtype Venture_Id         is Directory.Object;
    subtype Work_Order_Id      is Directory.Object;
    subtype Work_Order_List_Id is Directory.Object;

    function Nil return Directory.Object renames Directory.Nil;
    function Is_Nil (Id : Directory.Object) return Boolean
        renames Directory.Is_Nil;


    type Venture_Handle         is private;
    type Work_Order_Handle      is private;
    type Work_Order_List_Handle is private;

    Null_Venture_Handle         : constant Venture_Handle;
    Null_Work_Order_Handle      : constant Work_Order_Handle;
    Null_Work_Order_List_Handle : constant Work_Order_List_Handle;


    subtype Status is Work_Order_Errors.Status;


    type Open_Mode is (None, Read, Update);


    -- Types used in Fields.

    type Venture_Field    is private;
    type Work_Order_Field is private;

    Null_Venture_Field    : constant Venture_Field;
    Null_Work_Order_Field : constant Work_Order_Field;


    type Field_Type_Enum is (Bool, Str, Int);

    type Descriptor_Info_Record is
        record
            Element_Type : Field_Type_Enum;  -- Elements have this type.
            Is_Vector    : Boolean;             -- Are elements arrays?
        end record;


    -- A Venture is a Work Order Database created in a subsystem.
    -- This subsystem can be at any level in the hierarchy
    -- (see CMVC.Project_Hierarchy_Operations).


    package Venture_Control is

        procedure Find (Venture_Name :     String;
                        Result       : out Venture_Id;
                        Success      : out Status);
        --
        -- Invoke name resolution on a string.
        -- Returns bad status if the venture cannot be found.


        procedure Create (Venture_Name : String;
                          The_Handle   : out Venture_Handle;
                          Success      : out Status;
                          Notes        : String := "";
                          Storage      : System.Segment := System.Null_Segment;
                          Action_Id    : Action.Id := Action.Null_Id);
        --
        -- New venture will be open for Update.

        procedure Open (The_Venture :     Venture_Id;
                        The_Handle  : out Venture_Handle;
                        Success     : out Status;
                        Mode        :     Open_Mode      := Read;
                        Storage     :     System.Segment := System.Null_Segment;
                        Action_Id   :     Action.Id      := Action.Null_Id);
        --
        -- The_Venture may not be opened with mode None.

        procedure Close (The_Handle : in out Venture_Handle;
                         Success    : out    Status);
        --
        -- The_Handle will be set to Null_Venture_Handle after closing.


        function Id        (The_Handle : Venture_Handle) return Venture_Id;
        function Mode      (The_Handle : Venture_Handle) return Open_Mode;
        function Full_Name (The_Handle : Venture_Handle) return String;

        -- These information functions may be used on any handle.

    end Venture_Control;


    package Venture_Operations is

        procedure Set_Default (To       :     Venture_Id;
                               Success  : out Status;
                               For_User :     User_Id := Default.Session);
        --
        -- Set the appropriate session switch.  To may be Nil.

        procedure Get_Default (Result         : out Venture_Id;
                               Success        : out Status;
                               For_User       :     User_Id := Default.Session;
                               Ignore_Garbage :     Boolean := True);
        --
        -- If Ignore_Garbage is True and the default venture no longer
        -- exists, Nil will be returned instead.


        function Require_Default_Venture return Boolean;

        procedure Set_Require_Default_Venture
                     (To_Val : Boolean; Success : out Status);
        --
        -- System wide setting.  Maybe this should be controlled?


        type Policy_Switches_Enum is (Require_Current_Work_Order,  
                                      Require_Comment_At_Check_In,  
                                      Require_Comment_Lines,  
                                      Journal_Comment_Lines,  
                                      Allow_Edit_Of_Work_Orders);
        type Policy_Switches      is array (Policy_Switches_Enum) of Boolean;

        procedure Get_Policy_Switch (Value       : out Policy_Switches;
                                     For_Venture :     Venture_Handle;
                                     Success     : out Status);

        procedure Set_Policy_Switch (To_Value    :     Policy_Switches;
                                     For_Venture :     Venture_Handle;
                                     Success     : out Status);
        --
        -- For_Venture must be writable before its policy may be changed.


        function Get_Notes (For_Venture : Venture_Handle) return String;
        --
        -- Constraint_Error will be raised if the handle is not open.

        procedure Set_Notes (To_Value    :     String;
                             For_Venture :     Venture_Handle;
                             Success     : out Status);
        --
        -- For_Venture must be writable before its notes may be changed.


        procedure Count_Orders (For_Venture :     Venture_Handle;
                                Work_Orders : out Natural;
                                Success     : out Status);

        generic
            with procedure Visit (Value : Work_Order_Id);
        procedure Traverse_Orders
                     (The_Venture : Venture_Handle; Success : out Status);
        --
        -- Do not Create or Delete Work_Orders while traversing.


        procedure Count_Lists (For_Venture      :     Venture_Handle;
                               Work_Order_Lists : out Natural;
                               Success          : out Status);

        generic
            with procedure Visit (Value : Work_Order_List_Id);
        procedure Traverse_Lists
                     (The_Venture : Venture_Handle; Success : out Status);
        --
        -- Do not Create or Delete Work_Order_Lists while traversing.


        procedure Count_Default_Orders (For_Venture :     Venture_Handle;
                                        Users       : out Natural;
                                        Success     : out Status);
        --
        -- Returns the number of users who have ever set a default
        -- work_order for this venture.

        generic
            with procedure Visit (The_User : User_Id; Value : Work_Order_Id);
        procedure Traverse_Default_Orders
                     (The_Venture : Venture_Handle; Success : out Status);
        --
        -- Do not Set_Default Work_Orders while traversing.


        procedure Count_Default_Lists (For_Venture :     Venture_Handle;
                                       Users       : out Natural;
                                       Success     : out Status);
        --
        -- Returns the number of users who have ever set a default
        -- work_order_list for this venture.

        generic
            with procedure Visit (The_User : User_Id;
                                  Value    : Work_Order_List_Id);
        procedure Traverse_Default_Lists
                     (The_Venture : Venture_Handle; Success : out Status);
        --
        -- Do not Set_Default Work_Order_Lists while traversing.

    end Venture_Operations;


    package Venture_Field_Operations is

        subtype Field is Venture_Field;
        function Null_Field return Field;

        type Modifiable_Info_Record is
            record
                Is_Controlled    : Boolean;
                Display_Position : Natural;
            end record;


        procedure Create (Field_Name      :     String;
                          Descriptor_Info :     Descriptor_Info_Record;
                          Modifiable_Info :     Modifiable_Info_Record;
                          Default         :     String;
                          Result          : out Field;
                          Success         : out Status;
                          For_Venture     :     Venture_Handle;
                          Propagate       :     Boolean := True);
        --
        -- Creates a new user-defined field in a venture.
        -- Field names may not contain Ascii.Lf, '"', or " => ".
        -- All fields will have a default value.  If the Default string
        -- cannot be parsed, a value of False or 0 will be assumed.
        -- Creating a new field will not affect any existing Work_Orders.
        -- For_Venture must be writable.
        -- If Propagate is true, all existing work_orders will be
        -- updated to have this new field.


        procedure Delete (Field_Name           :     String;
                          Success              : out Status;
                          In_Venture           :     Venture_Handle;
                          Even_If_Data_Present :     Boolean := False);
        --
        -- Deletes the field from the venture.
        -- If work orders exist that have data in the field, the
        -- operation fails unless Even_If_Data_Present is true.
        -- This can be a very time consuming operation, as it must
        -- cycle through all of the work orders and remove the field.
        -- Each Work_Order will be opened with the Venture's action_id.
        -- In_Venture must be writable.


        procedure Find (Field_Name :     String;
                        The_Field  : out Field;
                        Success    : out Status;
                        In_Venture :     Venture_Handle);
        --
        -- Search for the named field.
        -- Returns Null_Field (and a warning) if Field_Name cannot be found.
        -- Letter case and leading and trailing spaces are ignored.


        function  Modifiable_Info (The_Field : Field)
                                 return Modifiable_Info_Record;
        procedure Set_Modifiable_Info (The_Field       : Field;
                                       Modifiable_Info : Modifiable_Info_Record;
                                       Success         : out Status);

        function Name            (The_Field : Field) return String;
        function Descriptor_Info (The_Field : Field)
                                 return Descriptor_Info_Record;


        function Default (The_Field : Field) return String;
        function Default (The_Field : Field) return Integer;
        function Default (The_Field : Field) return Boolean;
        --
        -- May raise Constraint_Error or Work_Order_Errors.Type_Mismatch

        procedure Set_Default (The_Field  : in out Field;
                               In_Venture :        Venture_Handle;
                               Value      :        String;
                               Success    : out    Status;
                               Propagate  :        Boolean := False);
        procedure Set_Default (The_Field  : in out Field;
                               In_Venture :        Venture_Handle;
                               Value      :        Boolean;
                               Success    : out    Status;
                               Propagate  :        Boolean := False);
        procedure Set_Default (The_Field  : in out Field;
                               In_Venture :        Venture_Handle;
                               Value      :        Integer;
                               Success    : out    Status;
                               Propagate  :        Boolean := False);
        --
        -- Changing the default value for a field will only affect existing
        -- work_orders if Propagate is True.  New work orders will have their
        -- fields initialized to the current default values.


        procedure Count (For_Venture :     Venture_Handle;
                         Fields      : out Natural;
                         Success     : out Status);

        generic
            with procedure Visit (Value : Field);
        procedure Traverse (The_Venture : Venture_Handle; Success : out Status);
        --
        -- Do not Create or Delete fields while traversing.

    end Venture_Field_Operations;


    package Venture_Display is

        procedure Display (Which   : Venture_Id;
                           Options : String       := "";
                           To_File : Io.File_Type := Io.Current_Output);
        --
        -- Write out a venture to a text file.

        procedure Edit (Which : Venture_Id);
        --
        -- Cause the Venture_Object_Editor to display a unit.

    end Venture_Display;


    package Work_Order_Control is

        procedure Find (Name    :     String;
                        Result  : out Work_Order_Id;
                        Success : out Status);
        --
        -- Invoke name resolution on a string.
        -- Returns bad status if the work_order cannot be found.

        procedure Find (Work_Order_Number :     Long_Integer;
                        Result            : out Work_Order_Id;
                        Success           : out Status);
        --
        -- A Work_Order_Number can be obtained from the function of
        -- that name below.  Numbers are unique.


        procedure Create (Work_Order_Name : String;
                          The_Handle : out Work_Order_Handle;
                          Success : out Status;
                          On_Venture : Venture_Handle;
                          On_List : Work_Order_List_Handle :=
                             Null_Work_Order_List_Handle;
                          Notes : String := "";
                          Storage : System.Segment := System.Null_Segment;
                          For_User : User_Id := Default.Session);
        --
        -- New work_order will be open for Update.
        -- On_Venture (and On_List if supplied) must be writable.
        -- The Venture's action will be used, so close The_Handle
        -- (and On_List) before closing On_Venture.

        procedure Open (The_Work_Order : Work_Order_Id;
                        The_Handle     : out Work_Order_Handle;
                        Success        : out Status;
                        Mode           : Open_Mode := Read;
                        Storage        : System.Segment := System.Null_Segment;
                        Action_Id      : Action.Id := Action.Null_Id);
        --
        -- The_Work_Order may not be opened with mode None.

        procedure Close (The_Handle : in out Work_Order_Handle;
                         Success    : out    Status);
        --
        -- The_Handle will be set to Null_Work_Order_Handle after closing.


        function Id (The_Handle : Work_Order_Handle) return Work_Order_Id;
        function Mode (The_Handle : Work_Order_Handle) return Open_Mode;
        function Full_Name (The_Handle : Work_Order_Handle) return String;

        -- These information functions may be used on any handle.

    end Work_Order_Control;


    package Work_Order_Operations is

        procedure Set_Default (To_Order    :     Work_Order_Handle;
                               For_Venture :     Venture_Handle;
                               Success     : out Status;
                               For_User    :     User_Id := Default.Session);
        --
        -- To_Order may be the Null_Work_Order_Handle.
        -- For_Venture must be writable.

        procedure Get_Default (On_Venture     :     Venture_Handle;
                               Result         : out Work_Order_Id;
                               Success        : out Status;
                               For_User       :     User_Id := Default.Session;
                               Ignore_Garbage :     Boolean := True);
        --
        -- If Ignore_Garbage is True and the default work_order no
        -- longer exists, Nil will be returned instead.

        -- These two operations are really Venture operations.


        type Status_Enumeration is (Pending, In_Progress, Closed);

        subtype Configuration_Object is Directory.Object;
        subtype Element_Name         is String;
        subtype Generation           is Natural;


        procedure Close (The_Order : Work_Order_Handle; Success : out Status);
        --
        -- Sets the Status_Enumeration to Closed.
        -- The_Order must be writable.


        procedure Add_User (To_Order :     Work_Order_Handle;
                            Success  : out Status;
                            The_User :     User_Id := Default.Session);

        procedure Add_Version (To_Order : Work_Order_Handle;
                               The_Configuration : Configuration_Object;
                               The_Element : Element_Name;
                               The_Generation : Generation;
                               Success : out Status;
                               When_Added : Calendar.Time := Calendar.Clock);

        procedure Add_Configuration
                     (To_Order          :     Work_Order_Handle;
                      The_Configuration :     Configuration_Object;
                      Success           : out Status;
                      When_Added        :     Calendar.Time := Calendar.Clock);

        procedure Add_Comment_Line
                     (To_Order         :     Work_Order_Handle;
                      The_Comment_Line :     String;
                      The_Element_Name :     Element_Name;
                      Success          : out Status;
                      The_User         :     User_Id       := Default.Session;
                      When_Added       :     Calendar.Time := Calendar.Clock);

        -- The procedures above add new elements to the pre-defined fields.
        -- To_Order must be writable.


        function Work_Order_Number
                    (The_Order : Work_Order_Id) return Long_Integer;
        --
        -- 0 is a nil Work_Order_Number.

        procedure Get_Parent (The_Order :     Work_Order_Handle;
                              Result    : out Venture_Id;
                              Success   : out Status);

        procedure Get_Status (The_Order :     Work_Order_Handle;
                              Result    : out Status_Enumeration;
                              Success   : out Status);


        type User_Info is
            record
                The_User : User_Id;
                The_Time : Calendar.Time;
            end record;


        procedure Create_Info (The_Order :     Work_Order_Handle;
                               The_Info  : out User_Info;
                               Success   : out Status);

        procedure Close_Info (The_Order :     Work_Order_Handle;
                              The_Info  : out User_Info;
                              Success   : out Status);


        --
        function Create_User_Name (The_Order : Work_Order_Handle) return String;

        function Close_User_Name (The_Order : Work_Order_Handle) return String;

        --------------------------------------------------------------

        function Get_Notes (For_Order : Work_Order_Handle) return String;
        --
        -- Constraint_Error will be raised if the handle is not open.

        procedure Set_Notes (To_Value  :     String;
                             For_Order :     Work_Order_Handle;
                             Success   : out Status);
        --
        -- For_Order must be writable before its notes may be changed.
        -- Changing the notes will not mark an order as being In_Progress.


        procedure Count_Versions (For_Work_Order :     Work_Order_Handle;
                                  Versions       : out Natural;
                                  Success        : out Status);

        generic
            with procedure Visit (The_Configuration : Configuration_Object;
                                  The_Element       : Element_Name;
                                  The_Generation    : Generation;
                                  The_Time          : Calendar.Time);
        procedure Traverse_Versions
                     (For_Work_Order : Work_Order_Handle; Success : out Status);
        --
        -- Do not Add_Versions while traversing.
        -- Versions are time-ordered.


        procedure Count_Configurations (For_Work_Order :     Work_Order_Handle;
                                        Configurations : out Natural;
                                        Success        : out Status);

        generic
            with procedure Visit (The_Configuration : Configuration_Object;
                                  The_Time          : Calendar.Time);
        procedure Traverse_Configurations
                     (For_Work_Order : Work_Order_Handle; Success : out Status);
        --
        -- Do not Add_Configurations while traversing.
        -- Configurations are time-ordered.


        procedure Count_Users (For_Work_Order :     Work_Order_Handle;
                               Users          : out Natural;
                               Success        : out Status);

        generic
            with procedure Visit (The_User : User_Id);
        procedure Traverse_Users
                     (For_Work_Order : Work_Order_Handle; Success : out Status);
        --
        -- Do not Add_Users while traversing.


        procedure Count_Comments (For_Work_Order :     Work_Order_Handle;
                                  Comments       : out Natural;
                                  Success        : out Status);

        generic
            with procedure Visit (The_User    : User_Id;
                                  User_Name   : String;
                                  The_Comment : String;
                                  The_Element : Element_Name;
                                  The_Time    : Calendar.Time);
        procedure Traverse_Comments
                     (For_Work_Order : Work_Order_Handle; Success : out Status);
        --
        -- Do not Add_Comments while traversing.
        -- Comments are time-ordered
        -- The User_Name may be good even if the The_User no longer
        -- exists.  If the comment was generated in a Delta 2 system
        -- then the user name is stored separately.

    end Work_Order_Operations;


    package Work_Order_Field_Operations is

        subtype Field is Work_Order_Field;
        function Null_Field return Work_Order_Field;


        procedure Find (Field_Name    :     String;
                        The_Field     : out Field;
                        Success       : out Status;
                        In_Work_Order :     Work_Order_Handle);
        --
        -- Search for the named field.
        -- Returns Null_Field (and a warning) if Field_Name cannot be found.
        -- Letter case and leading and trailing spaces are ignored.


        function Name            (The_Field : Field) return String;
        function Descriptor_Info (The_Field : Field)
                                 return Descriptor_Info_Record;


        procedure High_Index (The_Field :     Field;
                              Result    : out Natural;
                              Success   : out Status);
        --
        -- Return the highest index which has been used.


        function Value (The_Field : Field) return String;
        function Value (The_Field : Field) return Integer;
        function Value (The_Field : Field) return Boolean;

        function Value (The_Field : Field; Index : Natural) return String;
        function Value (The_Field : Field; Index : Natural) return Integer;
        function Value (The_Field : Field; Index : Natural) return Boolean;

        -- Returns the current value.
        -- If there is no current value, returns the default value.
        -- Raises Type_Mismatch if the selector doesn't conform to the
        --   type of the field.
        -- Raises Mismatched_Vector_Operation if the selector doesn't
        --   conform to the vector type.
        -- Raises Constraint_Error on the Null_Field.
        -- All uninitialized fields in a vector return the default.
        -- An Index of 0 is interpreted as High_Index (1 if High_Index = 0).


        function Is_Default (The_Field : Field)           return Boolean;
        function Is_Default
                    (The_Field : Field; Index : Positive) return Boolean;
        --
        -- Returns True if the field in question has never been
        -- assigned a value using one of the procedures below.


        procedure Set_Value (The_Field  : in out Field;
                             The_Handle :        Work_Order_Handle;
                             Value      :        String;
                             Success    : out    Status);
        procedure Set_Value (The_Field  : in out Field;
                             The_Handle :        Work_Order_Handle;
                             Value      :        Boolean;
                             Success    : out    Status);
        procedure Set_Value (The_Field  : in out Field;
                             The_Handle :        Work_Order_Handle;
                             Value      :        Integer;
                             Success    : out    Status);

        procedure Set_Value (The_Field  : in out Field;
                             The_Handle :        Work_Order_Handle;
                             Index      :        Natural;
                             Value      :        String;
                             Success    : out    Status);
        procedure Set_Value (The_Field  : in out Field;
                             The_Handle :        Work_Order_Handle;
                             Index      :        Natural;
                             Value      :        Boolean;
                             Success    : out    Status);
        procedure Set_Value (The_Field  : in out Field;
                             The_Handle :        Work_Order_Handle;
                             Index      :        Natural;
                             Value      :        Integer;
                             Success    : out    Status);
        --
        -- Sets the value of the field.
        -- The field must not already have a (non-default) value.
        -- An index of 0 is interpreted as High_Index + 1.
        -- The_Handle must be writable.


        procedure Count (For_Work_Order :     Work_Order_Handle;
                         Fields         : out Natural;
                         Success        : out Status);

        generic
            with procedure Visit (Value : Field);
        procedure Traverse (The_Work_Order :     Work_Order_Handle;
                            Success        : out Status);
        --
        -- Do not Create or Delete fields while traversing.

    end Work_Order_Field_Operations;


    package Work_Order_Display is

        procedure Display (Which   : Work_Order_Id;
                           Options : String       := "";
                           To_File : Io.File_Type := Io.Current_Output);
        --
        -- Write out a work_order to a text file.

        procedure Edit (Which : Work_Order_Id);
        --
        -- Cause the Work_Order_Object_Editor to display an object.

    end Work_Order_Display;


    package Work_Order_List_Control is

        procedure Find (List_Name :     String;
                        Result    : out Work_Order_List_Id;
                        Success   : out Status);
        --
        -- Invoke name resolution on a string.
        -- Returns bad status if the list cannot be found.


        procedure Create (List_Name  : String := ">>OBJECT NAME<<";
                          The_Handle : out Work_Order_List_Handle;
                          Success    : out Status;
                          On_Venture : Venture_Handle;
                          Notes      : String := "";
                          Storage    : System.Segment := System.Null_Segment);
        --
        -- New work_order_list will be open for Update.
        -- On_Venture must be writable.
        -- The Venture's action will be used, so close The_Handle
        -- before closing On_Venture.

        procedure Open (The_List   :     Work_Order_List_Id;
                        The_Handle : out Work_Order_List_Handle;
                        Success    : out Status;
                        Mode       :     Open_Mode      := Read;
                        Storage    :     System.Segment := System.Null_Segment;
                        Action_Id  :     Action.Id      := Action.Null_Id);
        --
        -- The_List may not be opened with mode None.

        procedure Close (The_Handle : in out Work_Order_List_Handle;
                         Success    : out    Status);
        --
        -- The_Handle is set to Null_Work_Order_List_Handle after closing.


        function Id (The_Handle : Work_Order_List_Handle)
                    return Work_Order_List_Id;
        function Mode (The_Handle : Work_Order_List_Handle) return Open_Mode;
        function Full_Name (The_Handle : Work_Order_List_Handle) return String;

        -- These information functions may be used on any handle.

    end Work_Order_List_Control;


    package Work_Order_List_Operations is

        procedure Set_Default (To_List     :     Work_Order_List_Handle;
                               For_Venture :     Venture_Handle;
                               Success     : out Status;
                               For_User    :     User_Id := Default.Session);
        --
        -- To_List may be the Null_Work_Order_List_Handle.
        -- For_Venture must be writable.

        procedure Get_Default (On_Venture     :     Venture_Handle;
                               Result         : out Work_Order_List_Id;
                               Success        : out Status;
                               For_User       :     User_Id := Default.Session;
                               Ignore_Garbage :     Boolean := True);
        --
        -- If Ignore_Garbage is True and the default list no longer
        -- exists, Nil will be returned instead.

        -- These two operations are really Venture operations.


        procedure Add (The_Work_Order :     Work_Order_Handle;
                       To_List        :     Work_Order_List_Handle;
                       Success        : out Status);
        --
        -- Adds a work order to a list.
        -- The_Work_Order must have the same parent venture as To_List.
        -- To_List must be writable.

        procedure Remove (The_Work_Order :     Work_Order_Id;
                          From_List      :     Work_Order_List_Handle;
                          Success        : out Status);
        --
        -- Remove a work_order from a list.
        -- The work order itself is unaffected.
        -- From_List must be writable.


        procedure Get_Parent (The_List :     Work_Order_List_Handle;
                              Result   : out Venture_Id;
                              Success  : out Status);


        function Get_Notes (For_List : Work_Order_List_Handle) return String;
        --
        -- Constraint_Error will be raised if the handle is not open.

        procedure Set_Notes (To_Value :     String;
                             For_List :     Work_Order_List_Handle;
                             Success  : out Status);
        --
        -- For_List must be writable before its notes may be changed.


        procedure Count (For_List    :     Work_Order_List_Handle;
                         Work_Orders : out Natural;
                         Success     : out Status);

        generic
            with procedure Visit (The_Work_Order : Work_Order_Id);
        procedure Traverse (For_List :     Work_Order_List_Handle;
                            Success  : out Status);
        --
        -- Do not Add or Remove work orders while traversing.

    end Work_Order_List_Operations;


    package Work_Order_List_Display is

        procedure Display (Which   : Work_Order_List_Id;
                           Options : String       := "";
                           To_File : Io.File_Type := Io.Current_Output);
        --
        -- Write out a Work_Order_List to a text file.

        procedure Edit (Which : Work_Order_List_Id);
        --
        -- Cause the Work_Order_List_Object_Editor to display an object.

    end Work_Order_List_Display;

end Work_Order_Implementation;

E3 Meta Data

    nblk1=2b
    nid=0
    hdr6=56
        [0x00] rec0=25 rec1=00 rec2=01 rec3=01e
        [0x01] rec0=02 rec1=00 rec2=2b rec3=000
        [0x02] rec0=22 rec1=00 rec2=02 rec3=004
        [0x03] rec0=00 rec1=00 rec2=2a rec3=012
        [0x04] rec0=15 rec1=00 rec2=03 rec3=04c
        [0x05] rec0=19 rec1=00 rec2=04 rec3=084
        [0x06] rec0=00 rec1=00 rec2=29 rec3=018
        [0x07] rec0=17 rec1=00 rec2=05 rec3=050
        [0x08] rec0=00 rec1=00 rec2=28 rec3=00a
        [0x09] rec0=17 rec1=00 rec2=06 rec3=05c
        [0x0a] rec0=1a rec1=00 rec2=07 rec3=008
        [0x0b] rec0=17 rec1=00 rec2=08 rec3=004
        [0x0c] rec0=1b rec1=00 rec2=09 rec3=06c
        [0x0d] rec0=00 rec1=00 rec2=27 rec3=006
        [0x0e] rec0=13 rec1=00 rec2=0a rec3=042
        [0x0f] rec0=16 rec1=00 rec2=0b rec3=026
        [0x10] rec0=00 rec1=00 rec2=26 rec3=018
        [0x11] rec0=13 rec1=00 rec2=0c rec3=086
        [0x12] rec0=19 rec1=00 rec2=0d rec3=006
        [0x13] rec0=1c rec1=00 rec2=0e rec3=064
        [0x14] rec0=15 rec1=00 rec2=0f rec3=01a
        [0x15] rec0=19 rec1=00 rec2=10 rec3=016
        [0x16] rec0=16 rec1=00 rec2=11 rec3=00a
        [0x17] rec0=17 rec1=00 rec2=12 rec3=030
        [0x18] rec0=00 rec1=00 rec2=25 rec3=024
        [0x19] rec0=16 rec1=00 rec2=13 rec3=066
        [0x1a] rec0=1d rec1=00 rec2=14 rec3=032
        [0x1b] rec0=16 rec1=00 rec2=15 rec3=016
        [0x1c] rec0=17 rec1=00 rec2=16 rec3=00c
        [0x1d] rec0=16 rec1=00 rec2=17 rec3=07c
        [0x1e] rec0=1b rec1=00 rec2=18 rec3=084
        [0x1f] rec0=01 rec1=00 rec2=24 rec3=00e
        [0x20] rec0=17 rec1=00 rec2=19 rec3=018
        [0x21] rec0=14 rec1=00 rec2=1a rec3=084
        [0x22] rec0=01 rec1=00 rec2=23 rec3=00c
        [0x23] rec0=11 rec1=00 rec2=1b rec3=04a
        [0x24] rec0=1a rec1=00 rec2=1c rec3=00e
        [0x25] rec0=1c rec1=00 rec2=1d rec3=03a
        [0x26] rec0=15 rec1=00 rec2=1e rec3=012
        [0x27] rec0=18 rec1=00 rec2=1f rec3=04e
        [0x28] rec0=16 rec1=00 rec2=20 rec3=004
        [0x29] rec0=1b rec1=00 rec2=21 rec3=046
        [0x2a] rec0=18 rec1=00 rec2=22 rec3=000
    tail 0x2150d8c5e82b08212c824 0x42a00088462065003