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

⟦24411e41f⟧ Ada Source

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

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 Panel_Interface;
with Client;
with Message_Types;
with Message_Dispatch;
with Message;
with Network;
with Log_Writer;
with Seats;
package body Light_Controller is

    Light_Controller_Id : Client.Id;
    -- Client Id for this module.  There is a dispatcher task handling
    -- requests addressed to this client.

    procedure Start is
    begin
        null; -- Startup automatic during elaboration.
    end Start;


    procedure Shutdown is
    begin
        null; -- no explicit shutdown needed.
    end Shutdown;



    task Dispatcher is
        entry Start;
        -- The client must be registered in elaboration code before this
        -- entry is called.  Once called, begin dispatching requests.
    end Dispatcher;

    task body Dispatcher is
        Packet : Message.Packet;
        -- This packet is allocated by the Message_Dispatch package and must
        -- be explicitly freed here.

        function Get_Seat (Cmd : String) return Seats.Seat_Id is
        begin
            if Cmd'Length >= 2 then
                return Seats.Seat_Id'Value (Cmd (Cmd'First + 1 .. Cmd'Last));
            else
                return 0;
            end if;
        exception
            when others =>
                return 0;
        end Get_Seat;

    begin  
        accept Start;
        loop
            begin
                -- Get a message
                Message_Dispatch.Get_Message (Light_Controller_Id, Packet);

                -- Decode message and process.
                declare
                    Cmd : constant String := Message.Packet_Body (Packet);
                    Seat : Seats.Seat_Id := Get_Seat (Cmd);
                begin
                    -- 1st char T => on F => off, rest of string is seat
                    -- number.
                    case Cmd (Cmd'First) is
                        when 'T' =>
                            Log_Writer.Log_Message
                               ("Light_Controller",
                                "Light ON: " & Seats.Seat_Id'Image (Seat));
                            -- Call physical controller to turn light on
                            Panel_Interface.Light_On (Seat);

                        when 'F' =>
                            Log_Writer.Log_Message
                               ("Light_Controller",
                                "Light OFF:" & Seats.Seat_Id'Image (Seat));
                            -- Call physical controller to turn light off
                            Panel_Interface.Light_Off (Seat);
                        when others =>
                            Log_Writer.Log_Message
                               ("Light_Controller.Dispatcher",
                                "illegal message");
                    end case;
                    Message_Dispatch.Free_Buffer (Packet);
                exception
                    when others =>
                        Log_Writer.Log_Message
                           ("Light_Controller.Dispatcher", "exception");
                        delay 3.0;  -- avoid infinite busy loops
                end;
            end;
        end loop;
    end Dispatcher;

begin
    -- initialization: Register client and start dispatcher task
    Light_Controller_Id := Client.Register ("Light_Controller");
    Dispatcher.Start;
end Light_Controller;

E3 Meta Data

    nblk1=4
    nid=0
    hdr6=8
        [0x00] rec0=28 rec1=00 rec2=01 rec3=034
        [0x01] rec0=1c rec1=00 rec2=02 rec3=064
        [0x02] rec0=14 rec1=00 rec2=03 rec3=014
        [0x03] rec0=0d rec1=00 rec2=04 rec3=001
    tail 0x2150bba8a822f64108558 0x42a00088462060003