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

⟦45bfa8877⟧ Ada Source

    Length: 6144 (0x1800)
    Types: Ada Source
    Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Square, seg_03e0a4

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 Io;
with Square;
package body Square is  
    The_Square : Square;
    procedure Move (D : Direction) is
    begin  
        case D is
            when North =>
                Rc.Row := Rc.Row - 1;

            when North_East =>
                Rc.Col := Rc.Col + 1;
                Rc.Row := Rc.Row - 1;


            when North_West =>
                Rc.Row := Rc.Row - 1;
                Rc.Col := Rc.Col - 1;
            when South_West =>
                Rc.Row := Rc.Row + 1;
                Rc.Col := Rc.Col - 1;
            when others =>
                [statement]
        end case;  
        if (Rc.Row = 0) then
            Rc.Row := N;
        end if;  
        if (Rc.Row > N) then
            Rc.Row := Rc.Row - N;
        end if;  
        if (Rc.Col = 0) then
            Rc.Col := N;
        end if;
        if (Rc.Col > N) then
            Rc.Col := Rc.Col - N;
        end if;
    end Move;



    procedure Go_To_Center is
    begin
        Rc := (Row => (N / 2) + 1, Col => (N / 2) + 1);
    end Go_To_Center;


    procedure Deposit (T : Token) is
    begin
        The_Square (Rc.Row, Rc.Col) := T;
    end Deposit;


    procedure Init_Square is
    begin
        The_Square := Square'(1 .. N => (1 .. N => 0));
    end Init_Square;


    function Current_Token return Token is
    begin
        return The_Square (Rc.Row, Rc.Col);
    end Current_Token;

    procedure Display_Square is
    begin
        Io.Put (Item => "Carre magique ");
        Io.Put (Item => N);
        Io.Put_Line (Item => "");
        Io.Put
           (Item =>
               "La somme de chaque ligne, col et diagonale doit etre egale a : ");
        Io.Put (Item => (N * ((N * N) + 1) / 2));
        Io.Put_Line (Item => "");
        Io.Put_Line (Item => "");
        for T in 1 .. N loop
            for U in 1 .. N loop
                Io.Put (Item => (The_Square (T, U)), Width => 5);
            end loop;  
            Io.Put_Line (Item => "");  
            Io.Put_Line (Item => "");  
        end loop;  
        Io.Put_Line (Item => "");  
    end Display_Square;


    procedure Run is  
    begin

        Init_Square;  
        for U in Token range Token'Succ (Token'First) .. Token'Last loop
            if (U = Token'Succ (Token'First)) then
                Go_To_Center;
                Move (D => North);

            else
                Move (D => North_East);
                while (Current_Token /= Token'First) loop
                    Move (D => South_West);
                    Move (D => North_West);
                    Move (D => North_East);
                end loop;  
            end if;
            Deposit (T => U);
        end loop;
        Display_Square;
    end Run;

end Square;

E3 Meta Data

    nblk1=5
    nid=3
    hdr6=6
        [0x00] rec0=2a rec1=00 rec2=01 rec3=012
        [0x01] rec0=24 rec1=00 rec2=05 rec3=054
        [0x02] rec0=20 rec1=00 rec2=04 rec3=000
        [0x03] rec0=05 rec1=00 rec2=03 rec3=000
        [0x04] rec0=09 rec1=00 rec2=02 rec3=000
    tail 0x2173cdcf085fc75ec995b 0x42a00088462060003
Free Block Chain:
  0x3: 0000  00 02 03 fc 80 0d 74 20 28 42 6f 78 5f 4c 69 6e  ┆      t (Box_Lin┆
  0x2: 0000  00 00 03 fc 80 11 65 20 47 6f 5f 54 6f 5f 43 65  ┆      e Go_To_Ce┆