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

⟦73d90eb39⟧ Ada Source

    Length: 8192 (0x2000)
    Types: Ada Source
    Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Generic_Fact, seg_02acf1

Derivation

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

E3 Source Code



with Constant_String;
with Text_Io;
package body Generic_Fact is

    Class_Identity : Constant_String.Object :=
       Constant_String.Make (Class_Name);

    function Slot_Count return Natural is
        First : Natural := Slot_Names'Pos (Slot_Names'First);
        Last  : Natural := Slot_Names'Pos (Slot_Names'Last);
    begin
        return Last - First + 1;
    end Slot_Count;


    function As_Fact_Slot_Name
                (Slot_Name : Slot_Names) return Fact.Slot_Names is
    begin
        return Slot_Names'Pos (Slot_Name) -
                  Slot_Names'Pos (Slot_Names'First) + 1;
    end As_Fact_Slot_Name;


    function As_Anonymous (What : Patterns) return Fact.Patterns is
        Result : Fact.Patterns (1 .. Slot_Count);
    begin  
        for Slot_Name in What'Range loop
            Result (As_Fact_Slot_Name (Slot_Name)) := What (Slot_Name);
        end loop;
        return Result;
    end As_Anonymous;


    function As_Anonymous (What : Slots) return Fact.Slots is
        Result : Fact.Slots (1 .. Slot_Count);
    begin
        for Slot_Name in What'Range loop
            Result (As_Fact_Slot_Name (Slot_Name)) := What (Slot_Name);
        end loop;
        return Result;
    end As_Anonymous;


    function Exist (What : Patterns) return Fact.Query is
    begin
        return Fact.Query'(Kind  => Fact.Find,
                           Class => Class_Identity,
                           Size  => Slot_Count,
                           Value => As_Anonymous (What));
    end Exist;


    function Not_Any (What : Patterns) return Fact.Query is
    begin
        return Fact.Query'(Kind  => Fact.Check_No,
                           Class => Class_Identity,
                           Size  => Slot_Count,
                           Value => As_Anonymous (What));
    end Not_Any;

    function Get (The_Fact : Fact.Name; Slot : Slot_Names) return Integer is
    begin
        return Fact.Get (The_Fact, Slot => As_Fact_Slot_Name (Slot));
    end Get;

    function Get (The_Fact : Fact.Name) return Slots is
        Result : Slots;
    begin
        for Slot in Slot_Names loop
            Result (Slot) := Fact.Get (The_Fact,
                                       Slot => As_Fact_Slot_Name (Slot));
        end loop;
        return Result;
    end Get;

    procedure Add (The_Fact : Slots) is
    begin
        Fact.Add ((Size  => The_Fact'Length,
                   Class => Class_Identity,
                   Value => As_Anonymous (The_Fact)));
    end Add;

    procedure Delete (The_Fact : Fact.Name) is
    begin
        Fact.Delete (The_Fact);
    end Delete;

    procedure Change (The_Fact : Fact.Name; Value : Slots) is
    begin
        Fact.Change (The_Fact,
                     Value => (Size  => Value'Length,
                               Class => Class_Identity,
                               Value => As_Anonymous (Value)));
    end Change;

    procedure Change (The_Fact : Fact.Name;
                      The_Slot : Slot_Names;
                      To_Value : Integer) is
    begin
        Fact.Change (The_Fact, As_Fact_Slot_Name (The_Slot), To_Value);
    end Change;

    procedure Put (The_Fact : Fact.Name; Where : Output_Stream.Object) is
        First : Boolean := True;
        use Output_Stream;
    begin
        Put (Class_Name & "'(", Where);
        Indent_Right (Where);
        New_Line (Where);
        for I in Slot_Names loop
            if not First then
                Put_Line (", ", Where);
            else
                First := False;
            end if;
            Put (Slot_Names'Image (I) & " =>", Where);
            Put (Attribute_Image (Get (The_Fact, Slot => I)), Where);
        end loop;
        Indent_Left (Where);
        Put_Line (")", Where);
    end Put;

end Generic_Fact;

E3 Meta Data

    nblk1=7
    nid=2
    hdr6=a
        [0x00] rec0=23 rec1=00 rec2=01 rec3=020
        [0x01] rec0=00 rec1=00 rec2=04 rec3=058
        [0x02] rec0=1d rec1=00 rec2=05 rec3=060
        [0x03] rec0=21 rec1=00 rec2=07 rec3=006
        [0x04] rec0=1c rec1=00 rec2=06 rec3=000
        [0x05] rec0=04 rec1=00 rec2=02 rec3=000
        [0x06] rec0=14 rec1=00 rec2=03 rec3=000
    tail 0x21723eaa083e56f6295f9 0x42a00088462063c03
Free Block Chain:
  0x2: 0000  00 03 00 03 00 00 00 20 50 75 74 5f 4c 69 6e 65  ┆        Put_Line┆
  0x3: 0000  00 00 02 89 00 1a 20 20 20 20 20 20 20 20 75 73  ┆              us┆