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

⟦58a7bf61f⟧ Ada Source

    Length: 11264 (0x2c00)
    Types: Ada Source
    Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Class_String, seg_0329a5

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 Bounded_String;
with String_Utilities;
with Text_Io;

package body Class_String is

    function Send (This_Message : Object.Unary; To : Object.Reference)
                  return Object.Reference is
        type Message is (En_Texte, En_Majuscules, En_Minuscules,
                         Avec_Capitales, Ta_Longueur);
        Token : Message;

        package Bs renames Bounded_String;
        package Su renames String_Utilities;

    begin
        if Bs.Length (This_Message) /= 0 then
            begin
                Token := Message'Value (Bs.Image (This_Message));
                case Token is  
                    when En_Texte =>
                        Text_Io.Put ("Objet String (");
                        Text_Io.New_Line;

                        Text_Io.Put ("    Classe =>");
                        Text_Io.Put (Object.E_Class'Image (Object.Get (To)));
                        Text_Io.New_Line;

                        Text_Io.Put ("    Objet =>");
                        Text_Io.Put (Bs.Image (Table (Object.Get (To))));
                        Text_Io.New_Line;

                        Text_Io.Put (" )");
                        Text_Io.New_Line (2);
                    when En_Majuscules =>
                        Table (Object.Get (To)) :=
                           Bs.Value (Su.Upper_Case
                                        (Bs.Image (Table (Object.Get (To)))));
                        return To;
                    when En_Minuscules =>
                        Table (Object.Get (To)) :=
                           Bs.Value (Su.Lower_Case
                                        (Bs.Image (Table (Object.Get (To)))));
                        return To;
                    when Avec_Capitales =>
                        Table (Object.Get (To)) :=
                           Bs.Value (Su.Capitalize
                                        (Bs.Image (Table (Object.Get (To)))));

                        return To;
                    when Ta_Longueur =>
                        return Object.Create
                                  (Class => Object.Integer_Class,
                                   Object => Object.Index
                                                (Bs.Length
                                                    (Table (Object.Get (To)))));
                end case;
            exception
                when Constraint_Error =>
                    return Object.Void_Reference;
            end;
        end if;
    end Send;

    function Send (This_Message : Object.Binary; To : Object.Reference)
                  return Object.Reference is
        type Message is (Prendre, Plus, Sup, Inf, Sup_Egal, Inf_Egal, Egal);

        Token : Message;

        package Bs renames Bounded_String;
        package Su renames String_Utilities;

    begin
        if Bs.Length (Object.Get (This_Message)) /= 0 then
            declare
                An_Object : Object.Reference := To;  
                Chaine : Object.Tiny_String;
            begin
                Token := Message'Value (Bs.Image (Object.Get (This_Message)));
                case Token is
                    when Prendre =>
                        Table (Object.Get (To)) := Object.Get (This_Message);
                        return An_Object;
                    when Plus =>
                        Bs.Copy (Chaine, Bs.Image (Table (Object.Get (To))));
                        Bs.Append (Chaine, Bs.Image
                                              (Object.Get (This_Message)));  
                        return Class_String.Create (Chaine);
                    when Sup =>
                        if Bs.Image (Table (Object.Get (To))) >
                           Bs.Image (Object.Get (This_Message)) then
                            return Object.Create (Class => Object.Boolean_Class,
                                                  Object => 1);
                        else
                            return Object.Create (Class => Object.Boolean_Class,
                                                  Object => 0);
                        end if;
                    when Inf =>
                        if Bs.Image (Table (Object.Get (To))) <
                           Bs.Image (Object.Get (This_Message)) then
                            return Object.Create (Class => Object.Boolean_Class,
                                                  Object => 1);
                        else
                            return Object.Create (Class => Object.Boolean_Class,
                                                  Object => 0);
                        end if;
                    when Sup_Egal =>
                        if Bs.Image (Table (Object.Get (To))) >=
                           Bs.Image (Object.Get (This_Message)) then
                            return Object.Create (Class => Object.Boolean_Class,
                                                  Object => 1);
                        else
                            return Object.Create (Class => Object.Boolean_Class,
                                                  Object => 0);
                        end if;
                    when Inf_Egal =>
                        if Bs.Image (Table (Object.Get (To))) <=
                           Bs.Image (Object.Get (This_Message)) then
                            return Object.Create (Class => Object.Boolean_Class,
                                                  Object => 1);
                        else
                            return Object.Create (Class => Object.Boolean_Class,
                                                  Object => 0);
                        end if;
                    when Egal =>
                        if Bs.Image (Table (Object.Get (To))) =
                           Bs.Image (Object.Get (This_Message)) then
                            return Object.Create (Class => Object.Boolean_Class,
                                                  Object => 1);
                        else
                            return Object.Create (Class => Object.Boolean_Class,
                                                  Object => 0);
                        end if;
                end case;
            exception
                when Constraint_Error =>
                    return Object.Void_Reference;
            end;
        end if;

    end Send;


    function Send (This_Message : Object.Keyword; To : Object.Reference)
                  return Object.Reference is
    begin
        return Object.Void_Reference;
    end Send;


    function Create return Object.Reference is
        use Object;
    begin  
        Last := Last + 1;
        return Object.Create (Class => Object.String_Class, Object => Last);
    end Create;


    function Create (Str : Object.Tiny_String) return Object.Reference is
        use Object;
    begin
        Last := Last + 1;
        Table (Last) := Str;
        return Object.Create (Class => Object.String_Class, Object => Last);
    end Create;


    function How_Many return Object.Index is
    begin
        return Last;
    end How_Many;

end Class_String;

E3 Meta Data

    nblk1=a
    nid=3
    hdr6=12
        [0x00] rec0=1e rec1=00 rec2=01 rec3=044
        [0x01] rec0=0b rec1=00 rec2=07 rec3=048
        [0x02] rec0=15 rec1=00 rec2=02 rec3=00a
        [0x03] rec0=1a rec1=00 rec2=04 rec3=03c
        [0x04] rec0=10 rec1=00 rec2=0a rec3=07c
        [0x05] rec0=02 rec1=00 rec2=08 rec3=074
        [0x06] rec0=11 rec1=00 rec2=06 rec3=034
        [0x07] rec0=18 rec1=00 rec2=09 rec3=014
        [0x08] rec0=1d rec1=00 rec2=05 rec3=000
        [0x09] rec0=1d rec1=00 rec2=05 rec3=001
    tail 0x2172d6d1084c58939ee6f 0x42a00088462060003
Free Block Chain:
  0x3: 0000  00 00 00 1a 80 17 20 20 20 42 73 2e 61 70 70 65  ┆         Bs.appe┆