|
|
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: 16384 (0x4000)
Types: Ada Source
Notes: 03_class, FILE, R1k_Segment, e3_tag, procedure Superviseur, seg_04ccbe, seg_04cd99
└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000
└─⟦cfc2e13cd⟧ »Space Info Vol 2«
└─⟦this⟧
with Carte;
with Cl35;
with Cl35_Message;
with Date;
with Evenement;
with Evenements;
with Groupe;
with Io;
with Lecteur;
with L_Groupes;
with L_Lecteurs;
with L_Plages_Horaires;
with L_Zones;
with L_P_Access;
with Machine_Io;
with My_Types;
with Parametres;
with Plage;
with Plage_Horaire;
with Porte;
with Porteur;
with P_Acces;
with Syntaxic;
with Text_Io;
with Time_Utilities;
with Zone;
-- Pour prevenir les autres, ou pour voir qui a deja le lecteur.
-- A supprimer en exploitation "normale"
with Message;
with What;
procedure Superviseur is
package Mt renames My_Types;
package Tio renames Text_Io;
package Tu renames Time_Utilities;
Fichier_Journal : constant String := "journal";
Le_Lecteur : Cl35.Object;
Le_Journal : Io.File_Type;
procedure Imprime (Affichage : in String) is
begin
Tio.Put_Line (Item => "++" & Ascii.Lf & Affichage & Ascii.Lf);
Io.Put_Line (File => Le_Journal,
Item => "++" & Ascii.Lf & Affichage & Ascii.Lf);
Io.Save (File => Le_Journal);
end Imprime;
function Identifie (Numero_De_Carte : Carte.Object) return String is
Un_Porteur : Porteur.Object;
Un_Groupe : Groupe.Object;
begin
L_Groupes.Search (Les_Groupes => Syntaxic.Liste_G,
Numero_Carte => Numero_De_Carte,
Le_Groupe => Un_Groupe,
Le_Porteur => Un_Porteur);
-- Ajout 23 Mars 1995. CST
if Porteur.Get (Le_Porteur => Un_Porteur) = Carte.Zero then
return String'("Porteur inconnu !");
end if;
return String'("Groupe : " & Groupe.Image (Le_Groupe => Un_Groupe) &
". " & Porteur.Image (Le_Porteur => Un_Porteur));
end Identifie;
function Localise return String is
Une_Porte : Porte.Object;
Une_Zone : Zone.Object;
begin
L_Zones.Search (Les_Zones => Syntaxic.Liste_Zone,
Numero_Lecteur => Cl35.Address (Le_Lecteur),
La_Zone => Une_Zone,
La_Porte => Une_Porte);
return String'("Zone : " & Zone.Image (Une_Zone) &
". " & Porte.Image (Une_Porte));
end Localise;
procedure Conf_Plages is
Une_Zone : Zone.Object;
Iterateur : L_Zones.Liste.Iterator;
begin
L_Zones.Liste.Init (Iterateur, Syntaxic.Liste_Zone);
loop
exit when L_Zones.Liste.Done (Iterateur);
Une_Zone := L_Zones.Liste.Value (Iterateur);
declare
Iterateur : Zone.Liste_Portes.Iterator;
Les_Portes : Zone.Liste_Portes.List;
Une_Plage : Plage.Object;
begin
Les_Portes := Zone.Liste (La_Zone => Une_Zone);
Zone.Liste_Portes.Init (Iterateur, Les_Portes);
loop
exit when Zone.Liste_Portes.Done (Iterateur);
Le_Lecteur := Cl35.Address
(Porte.Get (La_Porte =>
Zone.Liste_Portes.Value
(Iter => Iterateur)));
for I in Plage.Num_Plage'First ..
Plage.Num_Plage'Last - 1 loop
Une_Plage :=
Plage_Horaire.Get_Plage
(Une_Plage_Horaire =>
L_Plages_Horaires.Search
(Les_P_H => Syntaxic.List_P_H,
N_Zone => Zone.Image
(La_Zone => Une_Zone),
Der_Car_Zone =>
Zone.Longueur_Name (Une_Zone),
Numero_P_H => I));
Cl35.Transmission_Plage
(Le_Lecteur => Le_Lecteur, La_Plage => Une_Plage);
end loop;
Zone.Liste_Portes.Next (Iterateur);
end loop;
end;
L_Zones.Liste.Next (Iterateur);
end loop;
end Conf_Plages;
procedure Conf_Cartes is
Un_Acces : P_Acces.Object;
Iterateur : L_P_Access.Liste.Iterator;
begin
L_P_Access.Liste.Init (Iterateur, Syntaxic.Liste_L_A);
loop
exit when L_P_Access.Liste.Done (Iterateur);
Un_Acces := L_P_Access.Liste.Value (Iterateur);
declare
Numero_Plage : Plage.Num_Plage;
Une_Zone : Zone.Object;
Iterateur : Zone.Liste_Portes.Iterator;
Les_Portes : Zone.Liste_Portes.List;
begin
Numero_Plage := P_Acces.Get_Num_Plage (Un_Acces => Un_Acces);
L_Zones.Search (Les_Zones => Syntaxic.Liste_Zone,
Nom_De_Zone => P_Acces.Get_Nom_Zone
(Un_Acces => Un_Acces),
La_Zone => Une_Zone);
Les_Portes := Zone.Liste (La_Zone => Une_Zone);
Zone.Liste_Portes.Init (Iterateur, Les_Portes);
loop
exit when Zone.Liste_Portes.Done (Iterateur);
Le_Lecteur := Cl35.Address
(Porte.Get (La_Porte =>
Zone.Liste_Portes.Value
(Iter => Iterateur)));
declare
Un_Groupe : Groupe.Object;
Les_Porteurs : Groupe.Liste_Porteurs.List;
Iterateur : Groupe.Liste_Porteurs.Iterator;
Un_Porteur : Porteur.Object;
Une_Carte : Carte.Object;
begin
L_Groupes.Search
(Les_Groupes => Syntaxic.Liste_G,
Nom_De_Groupe => P_Acces.Get_Nom_Groupe (Un_Acces),
Le_Groupe => Un_Groupe);
Les_Porteurs := Groupe.Liste (Le_Groupe => Un_Groupe);
Groupe.Liste_Porteurs.Init
(Iter => Iterateur, L => Les_Porteurs);
loop
exit when Groupe.Liste_Porteurs.Done (Iterateur);
Un_Porteur := Groupe.Liste_Porteurs.Value
(Iter => Iterateur);
Une_Carte := Porteur.Get (Le_Porteur => Un_Porteur);
Cl35.Valide_Carte (Le_Lecteur => Le_Lecteur,
La_Carte => Une_Carte,
Pour_La_Plage => Numero_Plage);
Groupe.Liste_Porteurs.Next (Iterateur);
end loop;
end;
Zone.Liste_Portes.Next (Iterateur);
end loop;
end;
L_P_Access.Liste.Next (Iterateur);
end loop;
end Conf_Cartes;
procedure Conf_Parms is
Parms : Parametres.Object;
Num_Cl35 : Natural;
Une_Date : Date.Object;
Type_Cl35 : String (1 .. 30);
Iterateur : L_Lecteurs.Liste.Iterator;
begin
L_Lecteurs.Liste.Init (Iterateur, Syntaxic.Liste_Lect);
loop
exit when L_Lecteurs.Liste.Done (Iterateur);
Lecteur.Get (Un_Lecteur => L_Lecteurs.Liste.Value (Iterateur),
Type_Lecteur => Type_Cl35,
Numero => Num_Cl35,
Les_Para => Parms);
Une_Date := Date.System_Date;
Le_Lecteur := Cl35.Address (Address => Num_Cl35);
Cl35.Mise_A_L_Heure (Le_Lecteur => Le_Lecteur,
Date_Lecteur => Une_Date);
Cl35.Reglage_Parametres (Le_Lecteur => Le_Lecteur,
Params_Lecteur => Parms);
Cl35.Set_Site (Le_Lecteur => Cl35.Address (Address => Num_Cl35),
Le_Code => Syntaxic.Le_Site);
-- invalidation de toutes les cartes
Cl35.Invalide_Carte (Le_Lecteur => Le_Lecteur,
De_La_Carte => 1,
A_La_Carte => Carte.Object'Last);
L_Lecteurs.Liste.Next (Iterateur);
end loop;
end Conf_Parms;
procedure Init_Date (Le_Lecteur : in Cl35.Object) is
Date_Systeme : Date.Object;
begin
Date_Systeme := Date.System_Date;
Cl35.Mise_A_L_Heure (Le_Lecteur, Date_Lecteur => Date_Systeme);
Imprime (Date.Image (The_Date => Date_Systeme) & ", " &
"Mise a l'heure du lecteur" & Ascii.Lf & Localise);
end Init_Date;
function Check_Evt (Le_Lecteur : in Cl35.Object) return Boolean is
package File_Evt renames Evenements.Evt_Queue;
package Message_Lu is new Cl35_Message (Mt.Response);
File_Rapport : File_Evt.Queue;
Rapport : Evenement.Object;
Iterateur : File_Evt.Iterator;
Power_Off : Boolean := False;
Une_Carte : Carte.Object;
begin
Cl35.Init;
Cl35.Rapport_Evenements (Le_Lecteur => Le_Lecteur,
Le_Rapport => File_Rapport);
File_Evt.Init (Iter => Iterateur, Q => File_Rapport);
loop
exit when File_Evt.Done (Iter => Iterateur);
Rapport := File_Evt.Value (Iter => Iterateur);
if Evenement.Was_Power_Off (Rapport) then
Power_Off := True;
end if;
Une_Carte := Evenement.Get (Rapport);
if (Une_Carte /= Carte.Zero) then
Imprime (Evenement.Image (Rapport => Rapport) &
Ascii.Lf & Localise & Ascii.Lf &
Identifie (Numero_De_Carte => Une_Carte));
else
Imprime (Evenement.Image (Rapport => Rapport) &
Ascii.Lf & Localise);
end if;
File_Evt.Next (Iter => Iterateur);
end loop;
File_Evt.Make_Empty (Q => File_Rapport);
return Power_Off;
exception
when Message_Lu.Bad_Ack =>
Imprime (Date.Image (The_Date => Date.System_Date) & ": " &
"ne repond pas correctement => mauvais aquittement !" &
Ascii.Lf & Localise);
return False;
when Message_Lu.Bad_Header | Message_Lu.Bad_Trailer =>
Imprime (Date.Image (The_Date => Date.System_Date) & ": " &
"ne repond pas correctement => erreur de trame !" &
Ascii.Lf & Localise);
return False;
when Machine_Io.Open_Error =>
Imprime (Date.Image (The_Date => Date.System_Date) & ": " &
"n'est pas accessible => erreur a l'ouverture !" &
Ascii.Lf & Localise);
return False;
when Machine_Io.Read_Timeout =>
Imprime (Date.Image (The_Date => Date.System_Date) &
": " & "ne repond pas !" & Ascii.Lf & Localise);
return False;
end Check_Evt;
procedure Demon is
Parms : Parametres.Object;
Num_Cl35 : Natural;
Type_Cl35 : String (1 .. 30);
Iterateur : L_Lecteurs.Liste.Iterator;
begin
Machine_Io.Set (Timeout => 1.0);
Main:
loop
L_Lecteurs.Liste.Init (Iterateur, Syntaxic.Liste_Lect);
loop
exit when L_Lecteurs.Liste.Done (Iterateur);
Lecteur.Get (Un_Lecteur =>
L_Lecteurs.Liste.Value (Iterateur),
Type_Lecteur => Type_Cl35,
Numero => Num_Cl35,
Les_Para => Parms);
Le_Lecteur := Cl35.Address (Address => Num_Cl35);
if Check_Evt (Le_Lecteur => Le_Lecteur) then
Init_Date (Le_Lecteur => Le_Lecteur);
end if;
L_Lecteurs.Liste.Next (Iterateur);
end loop;
delay 10.0;
end loop Main;
end Demon;
begin
Syntaxic.Charge_Config;
Tio.Put ("Initialisation des lecteurs ");
Conf_Parms;
Conf_Plages;
Conf_Cartes;
Tio.Put_Line ("terminee");
Io.Create (File => Le_Journal,
Mode => Io.Out_File,
Name => Fichier_Journal,
Form => "");
Imprime (Affichage =>
Tu.Image (Date => Tu.Get_Time,
Date_Style => Tu.Day_Month_Year,
Time_Style => Tu.Short,
Contents => Tu.Both) &
" Debut de supervision sur port " & Machine_Io.Io_Port);
-- A supprimer si on est seul.
-- Message.Send_All("Je prends le controle des lecteurs pour ~ 1 minute. Merci, Claude.");
--
Demon;
exception
when Syntaxic.Syntax_Error =>
Tio.Put_Line
("Erreur detectee a la lecture du fichier de configuration");
when others =>
Tio.Put_Line (Ascii.Lf & Localise & " : " & "Erreur d'acces");
raise;
-- A supprimer si on est seul.
What.Locks (Name => Machine_Io.Io_Port);
--
end Superviseur;
nblk1=f
nid=0
hdr6=1e
[0x00] rec0=30 rec1=00 rec2=01 rec3=024
[0x01] rec0=1d rec1=00 rec2=02 rec3=022
[0x02] rec0=1e rec1=00 rec2=03 rec3=022
[0x03] rec0=13 rec1=00 rec2=04 rec3=012
[0x04] rec0=1c rec1=00 rec2=05 rec3=024
[0x05] rec0=12 rec1=00 rec2=06 rec3=03e
[0x06] rec0=12 rec1=00 rec2=07 rec3=08e
[0x07] rec0=1d rec1=00 rec2=08 rec3=066
[0x08] rec0=19 rec1=00 rec2=09 rec3=026
[0x09] rec0=1c rec1=00 rec2=0a rec3=07a
[0x0a] rec0=1a rec1=00 rec2=0b rec3=03a
[0x0b] rec0=1b rec1=00 rec2=0c rec3=008
[0x0c] rec0=19 rec1=00 rec2=0d rec3=02e
[0x0d] rec0=22 rec1=00 rec2=0e rec3=01e
[0x0e] rec0=09 rec1=00 rec2=0f rec3=000
tail 0x217540d36874f6ea11bd4 0x42a00088462060003