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

⟦573a3fd5c⟧ Ada Source

    Length: 13312 (0x3400)
    Types: Ada Source
    Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Interpreteur, seg_047710

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 Document, Nos_Chaines, Player_Dictionary, Text_Io,
     Gestion_De_Tables, Interface_Structure, Display;


package body Interpreteur is

    Verbe_Table : Gestion_De_Tables.Tableau;
    Preposition_Table : Gestion_De_Tables.Tableau;
    Complement_Table : Gestion_De_Tables.Tableau;
    Complement2_Table : Gestion_De_Tables.Tableau;

    Compteur : Natural := 1;

    procedure File_Interprete (File_Name : in String) is
        Read_Word : Mots.Mot;
        Num_Line : Mots.Number;

        function Equal (Chaine1, Chaine2 : String) return Boolean
            renames Standard."=";

    begin
        Document.Fopen (File_Name);
        while not Document.En_Fin_De_Fichier loop
            Document.File_Get (Read_Word, Num_Line);
            --Text_Io.Put_Line (Mots.Valeur (Read_Word));
            if Mots.Valeur (Read_Word) = "Debut_Verbes" then
                loop
                    Document.File_Get (Read_Word, Num_Line);  
                    exit when Equal (Mots.Valeur (Read_Word), "Fin_Verbes");
                    Verbe_Table (Compteur) :=
                       new String'(Mots.Valeur (Read_Word));
                    Compteur := Compteur + 1;
                    Text_Io.Put_Line (Mots.Valeur (Read_Word));
                end loop;
                Verbe_Table (Compteur .. 80) := (others => (new String'(" ")));
            end if;
        end loop;
        Document.Fclose;
        Compteur := 1;
        Document.Fopen (File_Name);
        while not Document.En_Fin_De_Fichier loop
            Document.File_Get (Read_Word, Num_Line);  
            if Mots.Valeur (Read_Word) = "Debut_Prepositions" then
                loop
                    Document.File_Get (Read_Word, Num_Line);  
                    exit when Equal (Mots.Valeur (Read_Word),
                                     "Fin_Prepositions");
                    Preposition_Table (Compteur) :=
                       new String'(Mots.Valeur (Read_Word));
                    Compteur := Compteur + 1;
                    Text_Io.Put_Line (Mots.Valeur (Read_Word));
                end loop;
                Preposition_Table (Compteur .. 80) :=
                   (others => (new String'(" ")));
            end if;
        end loop;
        Document.Fclose;
        Compteur := 1;
        Document.Fopen (File_Name);
        while not Document.En_Fin_De_Fichier loop
            Document.File_Get (Read_Word, Num_Line);  
            if Mots.Valeur (Read_Word) = "Debut_Complements" then
                loop
                    Document.File_Get (Read_Word, Num_Line);  
                    exit when Equal (Mots.Valeur (Read_Word),
                                     "Fin_Complements");
                    Complement_Table (Compteur) :=
                       new String'(Mots.Valeur (Read_Word));
                    Compteur := Compteur + 1;
                    Text_Io.Put_Line (Mots.Valeur (Read_Word));
                end loop;
                Complement_Table (Compteur .. 80) :=
                   (others => (new String'(" ")));
            end if;
        end loop;
        Document.Fclose;
        Compteur := 1;
        Document.Fopen (File_Name);
        while not Document.En_Fin_De_Fichier loop
            Document.File_Get (Read_Word, Num_Line);  
            if Mots.Valeur (Read_Word) = "Debut_Complements2" then
                loop
                    Document.File_Get (Read_Word, Num_Line);  
                    exit when Equal (Mots.Valeur (Read_Word),
                                     "Fin_Complements2");
                    Complement2_Table (Compteur) :=
                       new String'(Mots.Valeur (Read_Word));

                    Compteur := Compteur + 1;
                    Text_Io.Put_Line (Mots.Valeur (Read_Word));
                end loop;
                Complement2_Table (Compteur .. 80) :=
                   (others => (new String'(" ")));
            end if;
        end loop;
        Document.Fclose;
        Compteur := 1;
    end File_Interprete;

--------------------------------------------------------------------------------------

    procedure Player_Error is
    begin
        Display.Write_On_World ("***   ACHTUNG !   ***     " &
                                "Syntax Error or Unknow Command.");
        -- Text_Io.Put_Line ("***   ACHTUNG !   ***     " &
        --                   "Syntax Error or Unknow Command.");
    end Player_Error;


    procedure Interprete (Commande : out T_Commande) is
        Table_Of_Word : T_Tab_Commande;
        Num_Word : Mots.Number;
        Player_Order : Boolean := False;
        B_Test : Boolean := True;

    begin
        --Document.Open;
        loop
            Display.Write_On_World ("World Message : ");
            --Text_Io.Put ("/:> ");
            Document.Get (Table_Of_Word, Num_Word);

            if (Num_Word > Mots.Max_Number_Words) then
                -- Text_Io.Put_Line
                Display.Write_On_World
                   ("Une instruction ne comporte pas plus de quatre mots !");
            elsif Num_Word = 0 then
                --Text_Io.Put_Line
                Display.Write_On_World ("Il n y aucune instruction.");
            else
                for I in 1 .. Num_Word loop  
                    if Mots.String_Value (Table_Of_Word, I) = "quit" then
                        raise End_Of_Play;  
                    elsif Mots.String_Value (Table_Of_Word, I) = "nothing" then
                        exit;
                    elsif B_Test = True then
------------------------------------------------------------------------------------------------------
--
--  PHASE DE TEST :
--

                        if Gestion_De_Tables.Chercher_Dans_Table
                              (Verbe_Table, Mots.String_Value
                                               (Table_Of_Word, I)) then
                            -- Text_Io.Put_Line
                            Display.Write_On_World ("Mot correct");
                        elsif Gestion_De_Tables.Chercher_Dans_Table
                                 (Preposition_Table, Mots.String_Value
                                                        (Table_Of_Word, I)) then
                            --Text_Io.Put_Line
                            Display.Write_On_World ("Mot correct");
                        elsif Gestion_De_Tables.Chercher_Dans_Table
                                 (Complement_Table, Mots.String_Value
                                                       (Table_Of_Word, I)) then
                            --Text_Io.Put_Line
                            Display.Write_On_World ("Mot correct");
                        elsif Gestion_De_Tables.Chercher_Dans_Table
                                 (Complement2_Table, Mots.String_Value
                                                        (Table_Of_Word, I)) then
                            --Text_Io.Put_Line
                            Display.Write_On_World ("Mot correct");
                        else
                            --Text_Io.Put_Line
                            Display.Write_On_World ("Mot incorrect");  
                        end if;
--
--
------------------------------------------------------------------------------------------------------
                    elsif Player_Dictionary.Player_Sens (Table_Of_Word (I)) then
                        Player_Order := True;
                    else
                        Player_Order := False;
                    end if;
                end loop;  
                if Player_Order then
                    if Player_Dictionary.Player_Syntax
                          (Table_Of_Word, Num_Word) then
                        Commande := Make_Commande (Table_Of_Word, Num_Word);
                    else
                        Player_Error;
                    end if;
                else
                    Player_Error;

                end if;
            end if;
            Num_Word := 0;
        end loop;
        Document.Close;  
    exception
        when End_Of_Play =>
            return;
    end Interprete;

    function Make_Commande
                (List_Of_Order : T_Tab_Commande; Number_Of_Order : Natural)
                return T_Commande is
        Tmp_Command : T_Commande;
        Tmp_List_Of_Order : T_Tab_Commande;
    begin
        for Num_Of_Order in 1 .. Number_Of_Order loop
            Tmp_List_Of_Order (Num_Of_Order) :=
               Interface_Structure.Get_Signification
                  (List_Of_Order (Num_Of_Order));
        end loop;
        Tmp_Command.Size_Of_Commande := Number_Of_Order;
        Tmp_Command.Tab_Commande := Tmp_List_Of_Order;
        return Tmp_Command;
    end Make_Commande;
end Interpreteur;


E3 Meta Data

    nblk1=c
    nid=9
    hdr6=16
        [0x00] rec0=1d rec1=00 rec2=01 rec3=026
        [0x01] rec0=14 rec1=00 rec2=05 rec3=046
        [0x02] rec0=15 rec1=00 rec2=03 rec3=05a
        [0x03] rec0=17 rec1=00 rec2=07 rec3=03e
        [0x04] rec0=1e rec1=00 rec2=08 rec3=024
        [0x05] rec0=16 rec1=00 rec2=0a rec3=070
        [0x06] rec0=01 rec1=00 rec2=0c rec3=00c
        [0x07] rec0=0e rec1=00 rec2=06 rec3=08c
        [0x08] rec0=15 rec1=00 rec2=04 rec3=016
        [0x09] rec0=1f rec1=00 rec2=02 rec3=00e
        [0x0a] rec0=02 rec1=00 rec2=0b rec3=000
        [0x0b] rec0=07 rec1=00 rec2=0b rec3=000
    tail 0x215447d2286544f1dc3eb 0x42a00088462060003
Free Block Chain:
  0x9: 0000  00 00 00 16 80 0a 72 69 6e 67 5f 56 61 6c 75 65  ┆      ring_Value┆