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

⟦70445e149⟧ Ada Source

    Length: 5120 (0x1400)
    Types: Ada Source
    Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Room, seg_058313

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



--::::::::::
--roomline.adb
--::::::::::
with Text_Io;
with Chop;
with Phil;
with Calendar;
pragma Elaborate (Phil);
package body Room is

-- A line-oriented version of the Room package, for line-oriented
-- terminals like IBM 3270's where the user cannot do ASCII screen control.
-- This is the only file in the dining philosophers system that needs
-- changing to use in a line-oriented environment.
-- Michael B. Feldman, The George Washington University, November 1990.


    Phils : array (Table_Type) of Phil.Philosopher;

    type Phil_Names is (Dijkstra, Texel, Booch, Ichbiah, Stroustrup);

    task body Head_Waiter is

        T : Integer;
        Start_Time : Calendar.Time;
        Phil_Names : constant array (1 .. 5) of String (1 .. 18) :=
           ("Eddy Dijkstra     ", "Putnam Texel      ", "Grady Booch       ",
            "Jean Ichbiah      ", "Bjarne Stroustrup ");
        Blanks : constant String := "     ";
    begin

        accept Open_The_Room;
        Start_Time := Calendar.Clock;

        Phils (1).Come_To_Life (1, 1, 2);
        Phils (3).Come_To_Life (3, 3, 4);
        Phils (2).Come_To_Life (2, 2, 3);
        Phils (5).Come_To_Life (5, 1, 5);
        Phils (4).Come_To_Life (4, 4, 5);

        loop
            select
                accept Report_State (Which_Phil : Table_Type;
                                     State : Phil.States;
                                     How_Long : Natural := 0) do
                    T := Integer (Calendar."-" (Calendar.Clock, Start_Time));
                    Text_Io.Put ("T=" & Integer'Image (T) & " " &
                                 Blanks (1 .. Which_Phil) &
                                 Phil_Names (Which_Phil));

                    case State is

                        when Phil.Breathing =>
                            Text_Io.Put ("Breathing");
                        when Phil.Thinking =>
                            Text_Io.Put ("Thinking" & Integer'Image (How_Long) &
                                         " seconds.");
                        when Phil.Eating =>
                            Text_Io.Put ("Eating" & Integer'Image (How_Long) &
                                         " seconds.");
                        when Phil.Done_Eating =>
                            Text_Io.Put ("Yum-yum (burp)");
                        when Phil.Got_One_Stick =>
                            Text_Io.Put ("First chopstick" &
                                         Integer'Image (How_Long));
                        when Phil.Got_Other_Stick =>
                            Text_Io.Put ("Second chopstick" &
                                         Integer'Image (How_Long));

                    end case;
                    Text_Io.New_Line;

                end Report_State;
            or
                terminate;
            end select;

        end loop;

    end Head_Waiter;

end Room;


E3 Meta Data

    nblk1=4
    nid=0
    hdr6=8
        [0x00] rec0=21 rec1=00 rec2=01 rec3=00c
        [0x01] rec0=16 rec1=00 rec2=03 rec3=068
        [0x02] rec0=15 rec1=00 rec2=02 rec3=02a
        [0x03] rec0=09 rec1=00 rec2=04 rec3=000
    tail 0x2176590b687e288fbf2bf 0x42a00088462060003