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

⟦a2b74daaa⟧ Ada Source

    Length: 8192 (0x2000)
    Types: Ada Source
    Notes: 03_class, FILE, R1k_Segment, e3_tag, generic, package Errors, seg_02ba3e

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



-- This package provides a mechanism for writing commands which
-- perform error reporting and error handling in a manner consistent
-- with Environment commands.
--
-- NOTE: This package has internal state, so it cannot be used safely
-- multi-tasking applications.
--
with Profile;
generic

    Old_Response_Profile : Profile.Response_Profile;
    --
    -- Is the response profile to which the response profile should
    -- be reset when exiting.

    New_Response_Profile : Profile.Response_Profile;
    --
    -- Is the response profile which should be used to evaluate log
    -- output destination, error reaction, etc.

    Operation_Name : in String;
    --
    -- Specifies the name of the operation to be used in the closing
    -- message (i.e. "[end of <Operation_Name>--error(s) detected]").

    Parameter_List : in String;
    --
    -- Should be a list of the parameters supplied to the operation,
    -- of the form:
    --
    --    First_Parameter => Some_Value, Second_Parameter => Another_Value, etc
    --
    -- String values should be quoted:
    --
    --    String_Parameter => ""Some_String""

package Errors is

    procedure Prologue;
    --
    -- Sets the response profile to the new response profile, and then
    -- writes an auxiliary message of the form:
    --
    --     [<Operation_Name> (<Parameter_List>);]
    --
    -- Should be the first thing called in any program.

    procedure Epilogue;
    --
    -- If there were no errors, writes an auxiliary message of the form:
    --
    --     [end of <Operation_Name> operation--no errors detected]
    --
    -- If there were errors (non-fatal ones), writes an auxiliary message of
    -- the form
    --
    --     [end of <Operation_Name> operation--error(s) detected]
    --
    -- In both cases, resets the response profile to the original response
    -- profile.

    Propagate : exception;
    Quit : exception;

    Nil_Message : constant String := "";

    procedure Report (This_Message : in String;
                      This_Type : in Profile.Msg_Kind := Profile.Error_Msg;
                      Fatal : in Boolean := True;
                      Nested : in Boolean := False;
                      Suppress_Closing_Message : in Boolean := False);
    --
    -- Does a "Log.Put_Line" of the specified message to the appropriate
    -- output. Message will be of the specified kind (if the message is
    -- equal to Nil_Message, nothing will be output, but the error reaction
    -- will still work as described below).
    --
    -- Once the message is written:
    --
    -- If the error reaction is "QUIT":
    --
    --    A closing message is written (unless "Suppress_Closing_Message" is
    --    True), and the response profile is reset to
    --    "Original_Response_Profile". Then:
    --
    --       If "Nested" is True, "Quit" is raised.
    --
    -- If the error reaction is "PROPAGATE":
    --
    --    A closing message is written (unless "Suppress_Closing_Message" is
    --    True), the response profile is reset to "Original_Response_Profile",
    --    and "Propagate" is raised.
    --
    -- If the error reaction is "PERSEVERE":
    --
    --    If "Fatal" is True:
    --
    --       A closing message is written (unless "Suppress_Closing_Message" is
    --       True), and the response profile is reset to
    --       "Original_Response_Profile". Then:
    --
    --           If "Nested" is True, "Quit" is raised.
    --
    -- If the error reaction is "RAISE_ERROR":
    --
    --    If "Fatal" is True:
    --
    --       A closing message is written (unless "Suppress_Closing_Message" is
    --       True), the response profile is reset to
    --       "Original_Response_Profile", and "Propagate" is raised.
    --
    -- For this procedure to work correctly, two conditions must be
    -- satisfied in the client:
    --
    -- 1) The client must provide the following exception handler alternatives
    --    at the outermost lexical level:
    --
    --        when Errors.Propagate =>
    --            raise;
    --        when Errors.Quit =>
    --            null;
    --
    -- 2) Every raise of "Propagate" and "Quit" by every call to "Report"
    --    must be able to get to the above exception handler alternatives.

-- Here is an example template of how this package should be used:

    -- with Log;
    -- with Errors;
    -- with Profile;
    -- with Debug_Tools;
    -- with <others>;
    -- procedure Template (This_Parameter : in String := "<SPECIAL_NAME>";
    --                     That_Parameter : in String := ">> PLACEHOLDER <<";
    --                     Another_Parameter : in Boolean := True;
    --                     Response : in String := "<PROFILE>") is
    --
    --     package Error is
    --        new Errors
    --               (Profile.Get,
    --                Profile.Value (Response),
    --                "Template",
    --                "This_Parameter => """ & This_Parameter &
    --                """, That_Parameter => """ & That_Parameter &
    --                """, Another_Parameter => " &
    --                Boolean'Image (Another_Parameter) &
    --                ", Response => """ & Response & """");
    --
    --     <other declarations>;
    --
    -- begin
    --     Error.Prologue;
    --     loop
    --         begin
    --            Call_Some_Other_Procedure ("PROPAGATE," & Response);
    --            --
    --         exception
    --            when others =>
    --                Error.Report ("<message for call failure>",
    --                              -- IF CALL FAILURE IS NOT FATAL:
    --                              Fatal => False,
    --                              Nested => True);
    --         end;
    --     end loop;
    --     Error.Epilogue;
    --     --
    -- exception
    --     when This_Exception =>
    --         Error.Report ("<message for this exception>");
    --     when That_Exception =>
    --         Error.Report ("<message for different exception>");
    --     when Error.Propagate =>
    --         raise;
    --     when Error.Quit =>
    --         null;
    --     when others =>
    --         Error.Report ("EXCEPTION: " & Debug_Tools.Get_Exception_Name,
    --                       Profile.Exception_Msg);
    -- end Template;
    --
    -- *****
    --
    -- NOTE: This procedure should NOT be used to report progress messages,
    -- warnings, and other non-errors.

end Errors;

E3 Meta Data

    nblk1=7
    nid=0
    hdr6=e
        [0x00] rec0=20 rec1=00 rec2=01 rec3=016
        [0x01] rec0=20 rec1=00 rec2=02 rec3=022
        [0x02] rec0=19 rec1=00 rec2=03 rec3=016
        [0x03] rec0=19 rec1=00 rec2=04 rec3=01c
        [0x04] rec0=1b rec1=00 rec2=05 rec3=016
        [0x05] rec0=19 rec1=00 rec2=06 rec3=006
        [0x06] rec0=16 rec1=00 rec2=07 rec3=000
    tail 0x21523ff4483f07904c69a 0x42a00088462060003