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

⟦8d20b1102⟧ Ada Source

    Length: 20480 (0x5000)
    Types: Ada Source
    Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Turtle_Class, seg_0371ff

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 Text_Io;
with Object;
with Error_Broadcaster;
with Bounded_String;
with String_Utilities;
with Elementary_Functions;
package body Turtle_Class is
    type Unary_Message is (Tonx, Tony, Tonangle, Entexte, Rentrecheztoi,
                           Clone, Baissetaplume, Levetaplume);

-- iterateur de la classe turtle_class

    procedure Init (Iter : out Iterator; Coll : in Collection) is
    begin
        Iter := Iterator'First;
    end Init;

    procedure Next (Iter : in out Iterator) is
    begin
        Iter := Iter + 1;
    end Next;

    function Done (Iter : in Iterator) return Boolean is
    begin
        return (Iterator'Last = Iter);
    end Done;

    function Value (Iter : in Iterator) return Index is
    begin
        return Iter;
    end Value;

    function Clone (To_Object : Object.Reference) return Object.Reference is
    begin
        Next (Turtle_Collection.Iter);
        Turtle_Collection.Table (Turtle_Collection.Iter) :=
           Turtle_Collection.Table (To_Object.Identity);
        return (Object.Tiny_Turtle, Turtle_Collection.Iter);
    end Clone;
    function Entexte (To_Object : Object.Reference) return String is


    begin
        return ("Tortue numero:" &

                String_Utilities.Number_To_String (To_Object.Identity, 10, 2) &
                " Ma Position:" &
                String_Utilities.Number_To_String
                   (Turtle_Collection.Table (To_Object.Identity).X, 10, 4) &
                "," & String_Utilities.Number_To_String
                         (Turtle_Collection.Table (To_Object.Identity).Y,
                          10, 4) & " Mon Angle:" &
                String_Utilities.Number_To_String
                   (Turtle_Collection.Table (To_Object.Identity).Angle, 10, 3) &
                " Ma Taille:" &
                String_Utilities.Number_To_String
                   (Turtle_Collection.Table (To_Object.Identity).Draw_Size,
                    10, 2));

    end Entexte;

    function Send (To_Object : Object.Reference; The_Message : Object.Message)
                  return String is

        Message : Unary_Message;
        Obj : Object.Reference;
        My_Turtle : Turtle;
    begin
        Message := Unary_Message'Value (Bounded_String.Image (The_Message));
        Obj := To_Object;
        case Message is  
            when Tonx | Tony | Tonangle | Clone |
                 Rentrecheztoi | Baissetaplume | Levetaplume =>
                return ("");

            when Entexte =>
                return Entexte (To_Object);


        end case;

    end Send;


    function Send (To_Object : Object.Reference; The_Message : Object.Message)
                  return Object.Reference is

        Message : Unary_Message;
        Obj : Object.Reference;
        My_Turtle : Turtle;
    begin
        Message := Unary_Message'Value (Bounded_String.Image (The_Message));
        Obj := To_Object;
        case Message is  
            when Tonx =>

                Obj.Identity := Turtle_Collection.Table (To_Object.Identity).X;
                Obj.Class := Object.Tiny_Integer;

            when Tony =>
                Obj.Identity := Turtle_Collection.Table (To_Object.Identity).Y;  
                Obj.Class := Object.Tiny_Integer;
            when Tonangle =>
                Obj.Identity :=
                   Turtle_Collection.Table (To_Object.Identity).Angle;
                Obj.Class := Object.Tiny_Integer;


            when Entexte =>
                Obj.Identity := To_Object.Identity;
                Obj.Class := Object.Tiny_Turtle;

            when Rentrecheztoi =>
                Turtle_Collection.Table (To_Object.Identity).X := 0;
                Turtle_Collection.Table (To_Object.Identity).Y := 0;
                Graphic_Object.Move (Turtle_Collection.Table
                                        (To_Object.Identity).X,
                                     Turtle_Collection.Table
                                        (To_Object.Identity).Y);
            when Baissetaplume =>
                Turtle_Collection.Table (To_Object.Identity).Marker_Up := False;

            when Levetaplume =>
                Turtle_Collection.Table (To_Object.Identity).Marker_Up := True;

            when Clone =>
                Obj := Clone (To_Object);
        end case;
        return Obj;  
    exception
        when Constraint_Error =>  
            raise Error_Broadcaster.Unknown_Unary_Message;
    end Send;

    function Send (To_Object : Object.Reference;
                   The_Argument : Object.Parameters.List)
                  return Object.Reference is

        Message : Object.Message;
        Obj : Object.Reference;
        My_Turtle : Turtle;
        Local_Argument : Object.Parameters.List := The_Argument;
    begin

        if String_Utilities.Equal
              (Bounded_String.Image
                  (Object.Parameters.Selector (Local_Argument)),
               "vaEnX:", True) then

            Graphic_Object.Move
               (Turtle_Collection.Table (To_Object.Identity).X,
                Turtle_Collection.Table (To_Object.Identity).Y);
            Object.Parameters.Get (Local_Argument, Obj);
            Turtle_Collection.Table (To_Object.Identity).X := Obj.Identity;

            if Turtle_Collection.Table (To_Object.Identity).Marker_Up then
                Graphic_Object.Move (Turtle_Collection.Table
                                        (To_Object.Identity).X,
                                     Turtle_Collection.Table
                                        (To_Object.Identity).Y);
            else
                Graphic_Object.Set_Pen
                   (Turtle_Collection.Table (To_Object.Identity).Draw_Size);

                Graphic_Object.Draw (Turtle_Collection.Table
                                        (To_Object.Identity).X,
                                     Turtle_Collection.Table
                                        (To_Object.Identity).Y);
            end if;


        elsif String_Utilities.Equal
                 (Bounded_String.Image
                     (Object.Parameters.Selector (Local_Argument)),
                  "vaEnY:", True) then
            Graphic_Object.Move
               (Turtle_Collection.Table (To_Object.Identity).X,
                Turtle_Collection.Table (To_Object.Identity).Y);
            Object.Parameters.Get (Local_Argument, Obj);
            Turtle_Collection.Table (To_Object.Identity).Y := Obj.Identity;

            if Turtle_Collection.Table (To_Object.Identity).Marker_Up then
                Graphic_Object.Move (Turtle_Collection.Table
                                        (To_Object.Identity).X,
                                     Turtle_Collection.Table
                                        (To_Object.Identity).Y);
            else
                Graphic_Object.Set_Pen
                   (Turtle_Collection.Table (To_Object.Identity).Draw_Size);

                Graphic_Object.Draw (Turtle_Collection.Table
                                        (To_Object.Identity).X,
                                     Turtle_Collection.Table
                                        (To_Object.Identity).Y);
            end if;


        elsif String_Utilities.Equal
                 (Bounded_String.Image
                     (Object.Parameters.Selector (Local_Argument)),
                  "tonX:Y:", True) then
            Object.Parameters.Get (Local_Argument, Obj);
            Turtle_Collection.Table (To_Object.Identity).X := Obj.Identity;
            Object.Parameters.Get (Local_Argument, Obj);
            Turtle_Collection.Table (To_Object.Identity).Y := Obj.Identity;  
            Graphic_Object.Move
               (Turtle_Collection.Table (To_Object.Identity).X,
                Turtle_Collection.Table (To_Object.Identity).Y);



        elsif String_Utilities.Equal
                 (Bounded_String.Image
                     (Object.Parameters.Selector (Local_Argument)),
                  "vaEnX:Y:", True) then
            Graphic_Object.Move
               (Turtle_Collection.Table (To_Object.Identity).X,
                Turtle_Collection.Table (To_Object.Identity).Y);
            Object.Parameters.Get (Local_Argument, Obj);
            Turtle_Collection.Table (To_Object.Identity).X := Obj.Identity;
            Object.Parameters.Get (Local_Argument, Obj);
            Turtle_Collection.Table (To_Object.Identity).Y := Obj.Identity;

            if Turtle_Collection.Table (To_Object.Identity).Marker_Up then
                Graphic_Object.Move (Turtle_Collection.Table
                                        (To_Object.Identity).X,
                                     Turtle_Collection.Table
                                        (To_Object.Identity).Y);
            else
                Graphic_Object.Set_Pen
                   (Turtle_Collection.Table (To_Object.Identity).Draw_Size);

                Graphic_Object.Draw (Turtle_Collection.Table
                                        (To_Object.Identity).X,
                                     Turtle_Collection.Table
                                        (To_Object.Identity).Y);

            end if;


        elsif String_Utilities.Equal
                 (Bounded_String.Image
                     (Object.Parameters.Selector (Local_Argument)),
                  "aDroite:", True) then
            Object.Parameters.Get (Local_Argument, Obj);
            Turtle_Collection.Table (To_Object.Identity).Angle :=
               (Turtle_Collection.Table (To_Object.Identity).Angle -
                Obj.Identity) mod 360;


        elsif String_Utilities.Equal
                 (Bounded_String.Image
                     (Object.Parameters.Selector (Local_Argument)),
                  "aGauche:", True) then
            Object.Parameters.Get (Local_Argument, Obj);
            Turtle_Collection.Table (To_Object.Identity).Angle :=
               (Turtle_Collection.Table (To_Object.Identity).Angle +
                Obj.Identity) mod 360;


        elsif String_Utilities.Equal
                 (Bounded_String.Image
                     (Object.Parameters.Selector (Local_Argument)),
                  "avance:", True) then

            Graphic_Object.Move
               (Turtle_Collection.Table (To_Object.Identity).X,
                Turtle_Collection.Table (To_Object.Identity).Y);
            Object.Parameters.Get (Local_Argument, Obj);
            Turtle_Collection.Table (To_Object.Identity).X :=
               Turtle_Collection.Table (To_Object.Identity).X +
                  (Integer (Elementary_Functions.Cos
                               (3.1416 / 180.0 *
                                Float (Turtle_Collection.Table
                                          (To_Object.Identity).Angle)) *
                            Float (Obj.Identity)));
            Turtle_Collection.Table (To_Object.Identity).Y :=
               Turtle_Collection.Table (To_Object.Identity).Y +
                  (Integer (-Elementary_Functions.Sin
                                (3.1416 / 180.0 *
                                 Float (Turtle_Collection.Table
                                           (To_Object.Identity).Angle)) *
                             Float (Obj.Identity)));

            if Turtle_Collection.Table (To_Object.Identity).Marker_Up then
                Graphic_Object.Move (Turtle_Collection.Table
                                        (To_Object.Identity).X,
                                     Turtle_Collection.Table
                                        (To_Object.Identity).Y);
            else
                Graphic_Object.Set_Pen
                   (Turtle_Collection.Table (To_Object.Identity).Draw_Size);

                Graphic_Object.Draw (Turtle_Collection.Table
                                        (To_Object.Identity).X,
                                     Turtle_Collection.Table
                                        (To_Object.Identity).Y);
            end if;


        elsif String_Utilities.Equal
                 (Bounded_String.Image
                     (Object.Parameters.Selector (Local_Argument)),
                  "tonAngle:", True) then
            Object.Parameters.Get (Local_Argument, Obj);
            Turtle_Collection.Table (To_Object.Identity).Angle :=
               Obj.Identity mod 360;


        elsif String_Utilities.Equal
                 (Bounded_String.Image
                     (Object.Parameters.Selector (Local_Argument)),
                  "taTaille:", True) then
            Object.Parameters.Get (Local_Argument, Obj);
            Turtle_Collection.Table (To_Object.Identity).Draw_Size :=
               Obj.Identity;  
        else
            raise Error_Broadcaster.Unknown_Keyword_Message;
        end if;
        return Obj;  
    end Send;
end Turtle_Class;

E3 Meta Data

    nblk1=13
    nid=13
    hdr6=22
        [0x00] rec0=25 rec1=00 rec2=01 rec3=05a
        [0x01] rec0=01 rec1=00 rec2=0c rec3=026
        [0x02] rec0=16 rec1=00 rec2=06 rec3=000
        [0x03] rec0=22 rec1=00 rec2=10 rec3=032
        [0x04] rec0=01 rec1=00 rec2=0e rec3=016
        [0x05] rec0=18 rec1=00 rec2=05 rec3=03a
        [0x06] rec0=1d rec1=00 rec2=07 rec3=012
        [0x07] rec0=14 rec1=00 rec2=0f rec3=008
        [0x08] rec0=15 rec1=00 rec2=12 rec3=014
        [0x09] rec0=0a rec1=00 rec2=08 rec3=048
        [0x0a] rec0=15 rec1=00 rec2=0d rec3=068
        [0x0b] rec0=16 rec1=00 rec2=04 rec3=030
        [0x0c] rec0=02 rec1=00 rec2=11 rec3=086
        [0x0d] rec0=18 rec1=00 rec2=02 rec3=07c
        [0x0e] rec0=12 rec1=00 rec2=09 rec3=026
        [0x0f] rec0=15 rec1=00 rec2=0a rec3=024
        [0x10] rec0=11 rec1=00 rec2=03 rec3=000
        [0x11] rec0=00 rec1=00 rec2=00 rec3=000
        [0x12] rec0=00 rec1=00 rec2=00 rec3=000
    tail 0x2153083cc84e26a06350d 0x42a00088462060003
Free Block Chain:
  0x13: 0000  00 0b 00 7a 80 34 20 20 20 20 20 20 20 20 20 20  ┆   z 4          ┆
  0xb: 0000  00 00 00 03 00 00 00 61 73 73 3b 05 00 00 00 09  ┆       ass;     ┆