|
|
DataMuseum.dkPresents historical artifacts from the history of: Rational R1000/400 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Rational R1000/400 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 9216 (0x2400)
Types: Ada Source
Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Cl35, seg_041b63
└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000
└─⟦cfc2e13cd⟧ »Space Info Vol 2«
└─⟦this⟧
with Cl35_Message;
with Date;
with My_Types;
with Machine_Io;
with Text_Io;
package body Cl35 is
Cmd_Beep : constant := 16#2C#;
Cmd_Rapport_Horloge : constant := 16#24#;
Cmd_Ack : constant := 16#06#;
Cmd_En_Veille : constant := 16#2A#;
Cmd_Hors_Veille : constant := 16#2B#;
Cmd_Code_Site : constant := 16#27#;
Cmd_Mise_A_L_Heure : constant := 16#23#;
Cmd_Rapport_Site : constant := 16#28#;
procedure Set_Address (Le_Lecteur : out Object; Address : in Addr) is
begin
Le_Lecteur.Addr_Lecteur := Address;
end Set_Address;
function Get_Address (Le_Lecteur : in Object) return Addr is
begin
return Le_Lecteur.Addr_Lecteur;
end Get_Address;
procedure Mise_A_L_Heure (Le_Lecteur : Object;
Date_Lecteur : in Date.Object) is
Send_Message : Cl35_Message.Object (3);
begin
Send_Message.Addr_Lecteur := Get_Address (Le_Lecteur);
Send_Message.Cmd := Cmd_Mise_A_L_Heure;
Send_Message.Data (1) := Date.Get_Hour (The_Date => Date_Lecteur);
Send_Message.Data (2) := Date.Get_Minutes (The_Date => Date_Lecteur);
Send_Message.Data (3) := Date.Get_Day (The_Date => Date_Lecteur);
Cl35_Message.Write_Msg (Message => Send_Message);
if not Ack (Le_Lecteur) then
Text_Io.Put_Line ("Pas d'ack");
end if;
end Mise_A_L_Heure;
procedure Rapport_Horloge (Le_Lecteur : Object;
Date_Lecteur : out Date.Object) is
Send_Message : Cl35_Message.Object (0);
Rec_Message : Cl35_Message.Object (3);
begin
Send_Message.Addr_Lecteur := Get_Address (Le_Lecteur);
Send_Message.Cmd := Cmd_Rapport_Horloge;
Cl35_Message.Write_Msg (Message => Send_Message);
Cl35_Message.Read_Msg (Message => Rec_Message);
if Rec_Message.Cmd /= Cmd_Rapport_Horloge then
Text_Io.Put_Line ("Mauvaise cmd");
end if;
Date.Set_Day (The_Date => Date_Lecteur,
Day_To_Set => Rec_Message.Data (3));
Date.Set_Hour (The_Date => Date_Lecteur,
Hour_To_Set => Rec_Message.Data (1));
Date.Set_Minutes (The_Date => Date_Lecteur,
Minutes_To_Set => Rec_Message.Data (2));
end Rapport_Horloge;
procedure Rapport_Site (Le_Lecteur : Object) is
Send_Message : Cl35_Message.Object (0);
Rec_Message : Cl35_Message.Object (3);
begin
Send_Message.Addr_Lecteur := Get_Address (Le_Lecteur);
Send_Message.Cmd := Cmd_Rapport_Site;
Cl35_Message.Write_Msg (Message => Send_Message);
Cl35_Message.Read_Msg (Message => Rec_Message);
if Rec_Message.Cmd /= Cmd_Rapport_Site then
Text_Io.Put_Line ("Mauvaise cmd");
end if;
end Rapport_Site;
procedure Code_Site (Le_Lecteur : Object; Code_Site : Natural) is
Message : Cl35_Message.Object (3);
begin
Message.Data (1) := Code_Site / 10000;
Message.Data (2) := (Code_Site - 10000) / 100;
Message.Data (3) := Code_Site mod 100;
Message.Addr_Lecteur := Get_Address (Le_Lecteur);
Message.Cmd := Cmd_Code_Site;
Cl35_Message.Write_Msg (Message => Message);
if not Ack (Le_Lecteur) then
Text_Io.Put_Line ("Pas d'ack");
end if;
end Code_Site;
procedure Beep (Le_Lecteur : Object) is
Message : Cl35_Message.Object (0);
begin
Message.Addr_Lecteur := Get_Address (Le_Lecteur);
Message.Cmd := Cmd_Beep;
Cl35_Message.Write_Msg (Message => Message);
if not Ack (Le_Lecteur) then
Text_Io.Put_Line ("Pas d'ack");
end if;
end Beep;
procedure Mise_Hors_Veille (Le_Lecteur : Object) is
Message : Cl35_Message.Object (0);
begin
Message.Addr_Lecteur := Get_Address (Le_Lecteur);
Message.Cmd := Cmd_Hors_Veille;
Cl35_Message.Write_Msg (Message => Message);
if not Ack (Le_Lecteur) then
Text_Io.Put_Line ("Pas d'ack");
end if;
end Mise_Hors_Veille;
procedure Mise_En_Veille (Le_Lecteur : Object) is
Message : Cl35_Message.Object (0);
begin
Message.Addr_Lecteur := Get_Address (Le_Lecteur);
Message.Cmd := Cmd_En_Veille;
Cl35_Message.Write_Msg (Message => Message);
if not Ack (Le_Lecteur) then
Text_Io.Put_Line ("Pas d'ack");
end if;
end Mise_En_Veille;
function Ack (Le_Lecteur : Object) return Boolean is
Rec_Message : Cl35_Message.Object (0);
begin
Cl35_Message.Read_Msg (Message => Rec_Message);
if Rec_Message.Addr_Lecteur /= Get_Address (Le_Lecteur) then
return False;
end if;
if Rec_Message.Datalen /= 0 then
return False;
end if;
if Rec_Message.Cmd /= Cmd_Ack then
return False;
end if;
return True;
end Ack;
procedure Init is
begin
Machine_Io.Flush;
end Init;
end Cl35;
nblk1=8
nid=5
hdr6=c
[0x00] rec0=21 rec1=00 rec2=01 rec3=006
[0x01] rec0=13 rec1=00 rec2=03 rec3=030
[0x02] rec0=17 rec1=00 rec2=08 rec3=064
[0x03] rec0=1d rec1=00 rec2=07 rec3=008
[0x04] rec0=1f rec1=00 rec2=06 rec3=024
[0x05] rec0=11 rec1=00 rec2=04 rec3=000
[0x06] rec0=0d rec1=00 rec2=04 rec3=000
[0x07] rec0=0a rec1=00 rec2=02 rec3=001
tail 0x217426d5086267c619013 0x42a00088462060003
Free Block Chain:
0x5: 0000 00 02 00 f5 80 06 6e 64 20 69 66 3b 06 00 00 00 ┆ nd if; ┆
0x2: 0000 00 00 01 2f 00 24 20 20 20 20 20 20 20 20 20 20 ┆ / $ ┆