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

⟦e99e7d4ab⟧ Ada Source

    Length: 10240 (0x2800)
    Types: Ada Source
    Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Itf01, seg_0468c8

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, String_Utilities, Unbounded_String;
package body Itf01 is

    package Infinite_String is new Unbounded_String (50);

    type States is (State_Start, State_Good_Id, State_Bad_Id, State_Found);

    Maxtaille : constant Positive := 100;
    Maxword : constant Positive := 3;
    Tab_Value : array (1 .. Maxword) of Infinite_String.Variable_String;
    Tab_Status : array (1 .. Maxword) of Status;
    Word_Number : Natural := 0;
    Current_Status : Status;
    Current_Value : Infinite_String.Variable_String;

    function Get_Value (I : in Positive) return String is
    begin
        return Infinite_String.Image (Tab_Value (I));
    end Get_Value;

    function Get_Status (I : in Positive) return Status is

    begin
        return Tab_Status (I);
    end Get_Status;

    procedure Initialize is
    begin
        for I in 1 .. Maxword loop
            Infinite_String.Free (Tab_Value (I));
        end loop;
    end Initialize;

    function Isalpha (C : in Character) return Boolean is

    begin
        return ((C in 'a' .. 'z') or (C in 'A' .. 'Z') or (C = '_'));  
    end Isalpha;

    function Isdigit (C : in Character) return Boolean is

    begin
        return (C in '0' .. '9');
    end Isdigit;

    function Isseparator (C : in Character) return Boolean is

    begin
        return (C = ' ');
    end Isseparator;

    function Get_Command return Infinite_String.Variable_String is
        Source : String (1 .. Maxtaille);
        Source1 : Infinite_String.Variable_String;
        Prompt_Character : constant Character := '>';
        Long : Positive;

    begin
        Infinite_String.Free (Source1);
        Text_Io.Put_Line ("enter votre action :");
        Text_Io.Put (Prompt_Character);
        Text_Io.Put (Prompt_Character);
        Text_Io.Get_Line (Source, Long);
        Source1 := Infinite_String.Value (Source);
        -- Source1 := Infinite_String.Value
        --              (String_Utilities.Strip_Trailing (Source);
        Text_Io.Put (Infinite_String.Image (Source1));
        -- source1 n'a ainsi plus de blanc a la fin
        return Source1;
    end Get_Command;

    procedure Get_Identifier (Source : in Infinite_String.Variable_String;
                              Index : in out Natural) is

        Current_State : States;

        Readed_Character : Character;

    begin
        Infinite_String.Free (Current_Value);
        Current_State := State_Start;
        Current_Status := Invalid;

        while ((Current_State /= State_Found) and then
               (Index <= Infinite_String.Length (Source))) loop
            Readed_Character := Infinite_String.Char_At (Source, Index);
            Index := Index + 1;
            case Current_State is
                when State_Start =>
                    if (Isseparator (Readed_Character)) then
                        Current_State := State_Start;
                        Text_Io.Put_Line (" " & Positive'Image (Index) & "  " &
                                          States'Image (Current_State));
                        -- Index := Index + 1;
                    else
                        if (not Isalpha (Readed_Character)) then
                            Current_State := State_Bad_Id;
                            Infinite_String.Append
                               (Current_Value, Readed_Character);
                            Text_Io.Put_Line
                               (" " & Positive'Image (Index) & "  " &
                                States'Image (Current_State));
                            --  Index := Index + 1;
                        else
                            Current_State := State_Good_Id;
                            Text_Io.Put_Line
                               (" " & Positive'Image (Index) & "  " &
                                States'Image (Current_State));
                            -- Index := Index + 1;
                        end if;
                    end if;
                when State_Bad_Id =>
                    if (not Isseparator (Readed_Character)) then
                        Current_State := State_Bad_Id;
                        Infinite_String.Append
                           (Current_Value, Readed_Character);
                        Text_Io.Put_Line (" " & Positive'Image (Index) & "  " &
                                          States'Image (Current_State));
                        -- Index := Index + 1;
                    else
                        Current_State := State_Found;
                        Current_Status := Invalid;
                        Word_Number := Word_Number + 1;
                    end if;
                when State_Good_Id =>
                    if ((Isdigit (Readed_Character)) or
                        (Isalpha (Readed_Character))) then
                        Current_Status := Valid;
                        Current_State := State_Good_Id;
                        Infinite_String.Append
                           (Current_Value, Readed_Character);
                        Text_Io.Put_Line (" " & Positive'Image (Index) & "  " &
                                          States'Image (Current_State));
                        --  Index := Index + 1;
                    else
                        Current_State := State_Found;
                        Current_Status := Valid;
                        Word_Number := Word_Number + 1;
                    end if;
                when others =>
                    null;
            end case;  
        end loop;
        if Index > Infinite_String.Length (Source) then
            case Current_State is
                when State_Good_Id =>
                    Current_State := State_Found;
                    Current_Status := Valid;
                when State_Bad_Id =>
                    Current_State := State_Found;
                    Current_Status := Invalid;
                when others =>
                    null;
            end case;
        end if;
    end Get_Identifier;

    procedure Next_Command is

        Index : Natural := 1;
        Source : Infinite_String.Variable_String;


    begin
        Initialize;
        Source := Get_Command;

        while (Index <= Infinite_String.Length (Source)) loop
            Get_Identifier (Source, Index);
            Text_Io.Put (" " & Infinite_String.Image (Current_Value));
            if (Word_Number > Maxword) then
                raise Word_Overflow;
            end if;
            Text_Io.Put ("  " & Natural'Image (Word_Number));
            Tab_Value (Word_Number) := Current_Value;
            Text_Io.Put (" " & Infinite_String.Image (Tab_Value (Word_Number)));
            Tab_Status (Word_Number) := Current_Status;

        end loop;

    end Next_Command;

end Itf01;

E3 Meta Data

    nblk1=9
    nid=8
    hdr6=10
        [0x00] rec0=21 rec1=00 rec2=01 rec3=020
        [0x01] rec0=21 rec1=00 rec2=05 rec3=040
        [0x02] rec0=1a rec1=00 rec2=04 rec3=052
        [0x03] rec0=12 rec1=00 rec2=02 rec3=00a
        [0x04] rec0=13 rec1=00 rec2=06 rec3=050
        [0x05] rec0=16 rec1=00 rec2=09 rec3=036
        [0x06] rec0=21 rec1=00 rec2=07 rec3=014
        [0x07] rec0=02 rec1=00 rec2=03 rec3=000
        [0x08] rec0=02 rec1=00 rec2=03 rec3=000
    tail 0x215433d0e86515cc27fb5 0x42a00088462060003
Free Block Chain:
  0x8: 0000  00 00 00 04 80 01 20 01 69 6e 67 2e 56 61 6c 75  ┆        ing.Valu┆