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

⟦44fcb7118⟧ Ada Source

    Length: 17408 (0x4400)
    Types: Ada Source
    Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Class_Pen, seg_038193

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 Bounded_String;
with Class_Integer;  
with Class_String;  
with Class_Printer;
with Class_Window;
with Block;
with Message;
with String_Utilities;
with Text_Io;
with Bug_Report;

package body Class_Pen is

    function Send (This_Message : Message.Unary; To : Object.Reference)
                  return Object.Reference is
        type E_Message is (Petitetaille, Moyennetaille, Grandetaille,
                           Tafenetre, Rentrecheztoi, Tonx, Tony,
                           Tataille, Dupliquetoi, Detruistoi, Entexte);

        Token : E_Message;

        package Bs renames Bounded_String;

        use Object;

    begin
        Token := E_Message'Value (Bs.Image
                                     (Message.Get (Name_From => This_Message)));
        case Token is  
            when Petitetaille =>
                Table (Object.Get (Index_From => To)).Taille :=
                   Easy_Y.Small_Font;
                return To;

            when Moyennetaille =>
                Table (Object.Get (Index_From => To)).Taille :=
                   Easy_Y.Medium_Font;
                return To;

            when Grandetaille =>
                Table (Object.Get (Index_From => To)).Taille :=
                   Easy_Y.Large_Font;
                return To;

            when Tataille =>
                return Class_String.Create
                          (E_Message'Image
                              (E_Message'Val
                                  ((Easy_Y.Fonts'Pos
                                       (Table (Object.Get (To)).Taille)))));

            when Tafenetre =>
                return Object.Create
                          (Object.Window_Class,
                           Table (Object.Get (Index_From => To)).Fenetre);

            when Rentrecheztoi =>
                Table (Object.Get (To)).X := 0;
                Table (Object.Get (To)).Y := 0;
                Table (Object.Get (To)).Taille := Easy_Y.Small_Font;
                return To;

            when Tonx =>
                return Class_Integer.Create (Object.Index
                                                (Table (Object.Get (To)).X));

            when Tony =>
                return Class_Integer.Create (Object.Index
                                                (Table (Object.Get (To)).Y));

            when Dupliquetoi =>
                return Create (To);

            when Detruistoi =>
                return Object.Void_Reference;

            when Entexte =>
                Put (To);
                return To;

        end case;
    exception
        when Constraint_Error =>
            raise Bug_Report.Unknown_Unary_Message;
    end Send;


    function Send (This_Message : Message.Binary; To : Object.Reference)
                  return Object.Reference is
    begin
        raise Bug_Report.Unknown_Binary_Message;
        return Object.Void_Reference;
    end Send;


    function Send (This_Message : Message.Keyword; To : Object.Reference)
                  return Object.Reference is
        type E_Message is (Tonx, Tony, Tafenetre, Vaenx, Y, Ecris);

        Token : E_Message;

        package Bs renames Bounded_String;

        use Object;

        Mess : Message.Keyword := This_Message;

    begin
        Message.Init (This => Mess);

        while not Message.Is_Done_Name (Mess) loop

            Token := E_Message'Value (Bs.Image (Message.Get (Mess)));

            case Token is
                when Tafenetre =>
                    if Object.Get (Class_From =>
                                      Message.Get (Argument_From => Mess)) =
                       Object.Window_Class then
                        Table (Object.Get (Index_From => To)).Fenetre :=
                           Object.Get (Index_From =>
                                          Message.Get (Argument_From => Mess));
                    else
                        raise Bug_Report.Pen_Bad_Type;
                    end if;

                when Tonx =>
                    if Object.Get (Class_From =>
                                      Message.Get (Argument_From => Mess)) =
                       Object.Integer_Class then
                        Table (Object.Get (Index_From => To)).X :=
                           Object.Get (Index_From =>
                                          Message.Get (Argument_From => Mess));
                    else
                        raise Bug_Report.Pen_Bad_Type;
                    end if;

                when Tony =>
                    if Object.Get (Class_From =>
                                      Message.Get (Argument_From => Mess)) =
                       Object.Integer_Class then
                        Table (Object.Get (Index_From => To)).Y :=
                           Object.Get (Index_From =>
                                          Message.Get (Argument_From => Mess));
                    else
                        raise Bug_Report.Pen_Bad_Type;
                    end if;

                when Vaenx =>
                    if Object.Get (Class_From =>
                                      Message.Get (Argument_From => Mess)) =
                       Object.Integer_Class then
                        Table (Object.Get (Index_From => To)).X :=
                           Object.Get (Index_From =>
                                          Message.Get (Argument_From => Mess));
                        Message.Next (Mess);
                        if not Message.Is_Done (Mess) then
                            if Bs.Image (Message.Get (Name_From => Mess)) =
                               "Y" then
                                if Object.Get
                                      (Class_From =>
                                          Message.Get (Argument_From => Mess)) =
                                   Object.Integer_Class then
                                    Table (Object.Get (Index_From => To)).Y :=
                                       Object.Get
                                          (Index_From =>
                                              Message.Get
                                                 (Argument_From => Mess));

                                else
                                    raise Bug_Report.Pen_Bad_Type;
                                end if;
                            end if;
                        else
                            raise Bug_Report.Pen_Bad_Type;
                        end if;
                    end if;
                when Y =>
                    if Object.Get (Class_From =>
                                      Message.Get (Argument_From => Mess)) =
                       Object.Integer_Class then
                        Table (Object.Get (Index_From => To)).Y :=
                           Object.Get (Index_From =>
                                          Message.Get (Argument_From => Mess));
                        Message.Next (Mess);
                        if not Message.Is_Done (Mess) then
                            if Bs.Image (Message.Get (Name_From => Mess)) =
                               "VaEnX" then
                                if Object.Get
                                      (Class_From =>
                                          Message.Get (Argument_From => Mess)) =
                                   Object.Integer_Class then
                                    Table (Object.Get (Index_From => To)).X :=
                                       Object.Get
                                          (Index_From =>
                                              Message.Get
                                                 (Argument_From => Mess));

                                else
                                    raise Bug_Report.Pen_Bad_Type;
                                end if;
                            end if;
                        else
                            raise Bug_Report.Pen_Bad_Type;
                        end if;
                    end if;

                when Ecris =>
                    if Object.Get (Class_From =>
                                      Message.Get (Argument_From => Mess)) =
                       Object.String_Class then

                        Easy_Y.Set_Display
                           (Class_Window.Get
                               (Index => Table (Object.Get (Index_From => To)).
                                            Fenetre));
                        Easy_Y.Put_Font
                           (To => Table (Object.Get (Index_From => To)).Taille);
                        Easy_Y.Print
                           (X1 => Table (Object.Get (Index_From => To)).X,
                            Y1 => Table (Object.Get (Index_From => To)).Y,
                            The_String =>
                               Class_String.Get
                                  (Object.Get (Index_From =>
                                                  Message.Get
                                                     (Argument_From => Mess))));
                    else
                        raise Bug_Report.Pen_Bad_Type;
                    end if;

            end case;
            Message.Next (Mess);
        end loop;
        return To;
    exception
        when Constraint_Error =>
            raise Bug_Report.Unknown_Keyword_Message;
    end Send;


    function Create (From : Object.Reference) return Object.Reference is
        use Object;
    begin
        Last := Last + 1;
        Table (Last) := Table (Object.Get (From));
        return Object.Create (Class => Object.Pen_Class, Object => Last);
    exception
        when Constraint_Error =>
            raise Bug_Report.Full_Pen_Table;
    end Create;

    procedure Create is
        use Object;
        Node : Block.Node := Block.Get_Current_Node;
        Str : Object.Tiny_String;
    begin
        Last := Last + 1;  
        Block.Put_Into_Table
           (This_Object => Object.Create
                              (Class => Object.Pen_Class, Object => Last),
            Named => Bounded_String.Value ("stylo", 80),
            Into_Block => Node);
    exception
        when Constraint_Error =>
            raise Bug_Report.Full_Pen_Table;
    end Create;

    procedure Put (An_Object : Object.Reference) is
    begin
        Class_Printer.Put ("Objet Stylo {");
        Class_Printer.Forward (4);
        Class_Printer.New_Line;
        Class_Printer.Put ("Numero => " &
                           Object.Index'Image (Object.Get (An_Object)));
        Class_Printer.New_Line;
        Class_Printer.Put ("X => " & Object.Index'Image
                                        (Table (Object.Get (An_Object)).X));
        Class_Printer.New_Line;
        Class_Printer.Put ("Y => " & Object.Index'Image
                                        (Table (Object.Get (An_Object)).Y));
        Class_Printer.New_Line;
        Class_Printer.Put ("Taille Police => ");
        case Table (Object.Get (An_Object)).Taille is
            when Easy_Y.Small_Font =>
                Class_Printer.Put ("Petite Taille");
            when Easy_Y.Medium_Font =>
                Class_Printer.Put ("Moyenne Taille");
            when Easy_Y.Large_Font =>
                Class_Printer.Put ("Grande Taille");
        end case;
        Class_Printer.New_Line;
        Class_Printer.Put ("Fenetre => ");
        Class_Printer.New_Line;
        Class_Printer.Forward (4);
        Class_Window.Put (Object.Create
                             (Object.Window_Class,
                              Table (Object.Get (An_Object)).Fenetre));
        Class_Printer.Backward (8);
        Class_Printer.Put_Tab ("}");
        Class_Printer.New_Line (2);
    end Put;

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

end Class_Pen;

E3 Meta Data

    nblk1=10
    nid=6
    hdr6=1a
        [0x00] rec0=22 rec1=00 rec2=01 rec3=034
        [0x01] rec0=1b rec1=00 rec2=08 rec3=030
        [0x02] rec0=17 rec1=00 rec2=0d rec3=040
        [0x03] rec0=23 rec1=00 rec2=09 rec3=050
        [0x04] rec0=15 rec1=00 rec2=04 rec3=042
        [0x05] rec0=13 rec1=00 rec2=03 rec3=026
        [0x06] rec0=13 rec1=00 rec2=0f rec3=02a
        [0x07] rec0=11 rec1=00 rec2=0b rec3=03e
        [0x08] rec0=17 rec1=00 rec2=07 rec3=008
        [0x09] rec0=18 rec1=00 rec2=0e rec3=06a
        [0x0a] rec0=1e rec1=00 rec2=0a rec3=036
        [0x0b] rec0=15 rec1=00 rec2=02 rec3=03c
        [0x0c] rec0=12 rec1=00 rec2=10 rec3=000
        [0x0d] rec0=12 rec1=00 rec2=10 rec3=000
        [0x0e] rec0=04 rec1=00 rec2=0d rec3=001
        [0x0f] rec0=00 rec1=00 rec2=00 rec3=000
    tail 0x21735ba7a84e67cc0152b 0x42a00088462060003
Free Block Chain:
  0x6: 0000  00 0c 03 fa 80 1b 61 69 6c 6c 65 20 3a 3d 20 45  ┆      aille := E┆
  0xc: 0000  00 05 00 2b 80 28 20 20 20 20 20 20 20 20 20 20  ┆   + (          ┆
  0x5: 0000  00 00 00 55 80 3f 20 20 20 20 20 20 20 20 20 20  ┆   U ?          ┆