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

⟦2ff938232⟧ Ada Source

    Length: 12288 (0x3000)
    Types: Ada Source
    Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Values, seg_044e9b

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



package body Values is


-- creation

    procedure New_Value (V : out Value) is
    begin
        V := (Kind => Undefine_Value);
    end New_Value;


-- access

    function Kind_Of (V : in Value) return Kind_Of_Values is
    begin
        return V.Kind;
    end Kind_Of;


    function Value_As (V : in Value) return Natural is
    begin
        if V.Kind = Natural_Value then
            return V.The_Natural;
        else
            raise No_Natural_Value;
        end if;
    end Value_As;


    function Value_As (V : in Value) return Boolean is
    begin
        if V.Kind = Boolean_Value then
            return V.The_Boolean;
        else
            raise No_Boolean_Value;
        end if;
    end Value_As;


    function Value_As (V : in Value) return String is
    begin
        if V.Kind = String_Value then
            return Bounded_String.Image (V.The_String);
        else
            raise No_String_Value;
        end if;
    end Value_As;


    function Equal (V1 : in Value; V2 : in Value) return Boolean is
    begin
        if V1.Kind = V2.Kind then
            case V1.Kind is
                when Undefine_Value =>
                    return True;
                when Natural_Value =>
                    return (V1.The_Natural = V2.The_Natural);
                when Boolean_Value =>
                    return (V1.The_Boolean = V2.The_Boolean);
                when String_Value =>
                    return Bounded_String.Image (V1.The_String) =
                              Bounded_String.Image (V2.The_String);
            end case;
        else
            return False;
        end if;
    end Equal;


    function Image (V : in Value) return String is
    begin
        case V.Kind is
            when Undefine_Value =>
                return "Undefine value !!";
            when Natural_Value =>
                return Integer'Image (V.The_Natural);
            when Boolean_Value =>
                return Boolean'Image (V.The_Boolean);
            when String_Value =>
                return Bounded_String.Image (V.The_String);
        end case;  
    end Image;


-- modification

    procedure Undefine (V : in out Value) is
    begin
        Dispose (V);
        New_Value (V);
    end Undefine;


    procedure Set_To (V : in out Value; I : in Natural) is
    begin
        Undefine (V);
        V := (Kind => Natural_Value, The_Natural => I);
    end Set_To;


    procedure Set_To (V : in out Value; B : in Boolean) is
    begin
        Undefine (V);
        V := (Kind => Boolean_Value, The_Boolean => B);
    end Set_To;


    procedure Set_To (V : in out Value; S : in String) is
    begin
        Undefine (V);
        V := (Kind => String_Value,
              The_String => Bounded_String.Value (S, 128));
    end Set_To;


    procedure Copy (To_Value : in out Value; The_Value : in Value) is
    begin
        if The_Value.Kind = String_Value then
            Set_To (To_Value, Bounded_String.Image (The_Value.The_String));
        else
            Undefine (To_Value);
            To_Value := The_Value;
        end if;
    end Copy;

-- liberation

    procedure Dispose (V : in out Value) is
    begin
        if V.Kind = String_Value then
            Bounded_String.Free (V.The_String);
        end if;
        V := (Kind => Undefine_Value);
    end Dispose;


end Values;




E3 Meta Data

    nblk1=b
    nid=9
    hdr6=8
        [0x00] rec0=2e rec1=00 rec2=01 rec3=044
        [0x01] rec0=1f rec1=00 rec2=02 rec3=05e
        [0x02] rec0=28 rec1=00 rec2=05 rec3=054
        [0x03] rec0=1a rec1=00 rec2=0b rec3=000
        [0x04] rec0=18 rec1=00 rec2=08 rec3=046
        [0x05] rec0=1b rec1=00 rec2=05 rec3=056
        [0x06] rec0=21 rec1=00 rec2=07 rec3=002
        [0x07] rec0=1b rec1=00 rec2=03 rec3=040
        [0x08] rec0=1c rec1=00 rec2=0a rec3=030
        [0x09] rec0=1d rec1=00 rec2=0b rec3=018
        [0x0a] rec0=09 rec1=00 rec2=09 rec3=000
    tail 0x217463e4686467b558d6b 0x42a00088462060003
Free Block Chain:
  0x9: 0000  00 0a 00 53 80 1a 20 28 4b 69 6e 64 20 3d 3e 20  ┆   S   (Kind => ┆
  0xa: 0000  00 03 00 3f 80 1e 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ┆   ?  ----------┆
  0x3: 0000  00 07 03 fc 80 36 20 20 20 20 20 20 20 56 20 3a  ┆     6       V :┆
  0x7: 0000  00 08 00 42 80 17 6c 75 65 3b 20 49 20 3a 20 69  ┆   B  lue; I : i┆
  0x8: 0000  00 06 03 fc 80 32 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ┆     2----------┆
  0x6: 0000  00 04 03 fc 80 08 6c 5f 56 61 6c 75 65 3b 08 00  ┆      l_Value;  ┆
  0x4: 0000  00 00 03 fc 80 07 2d 4a 61 6e 2d 39 35 07 00 1d  ┆      -Jan-95   ┆