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

⟦a1d78d9f8⟧ Ada Source

    Length: 26624 (0x6800)
    Types: Ada Source
    Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Config_Cl35, seg_04fbb9

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 Horaire_68;
with Ss_Zone_68;  
with Semaine_68;
with Conversion;

package body Config_Cl35 is

    package Par_68 renames Parametre_68;
    package Conv renames Conversion;

    Entete_Parametre : constant G_D.Byte := 16#22#;
    Entete_Site : constant G_D.Byte := 16#27#;
    Entete_Heure : constant G_D.Byte := 16#23#;
    Entete_Validation : constant G_D.Byte := 16#10#;
    Entete_Invalidation : constant G_D.Byte := 16#12#;  
    Entete_Validation_Groupe : constant G_D.Byte := 16#11#;
    Entete_Invalidation_Groupe : constant G_D.Byte := 16#13#;
    Entete_Plage : constant G_D.Byte := 16#25#;
    Entete_Beep : constant G_D.Byte := 16#2C#;
    Entete_Demande_Evenement : constant G_D.Byte := 16#1D#;
    Entete_Ack : constant G_D.Byte := 16#06#;
    Entete_Nak : constant G_D.Byte := 16#15#;
    Entete_Demande_Parametre : constant G_D.Byte := 16#1E#;
    Entete_Demande_Carte_Valide : constant G_D.Byte := 16#1F#;
    Entete_Demande_Carte_Invalide : constant G_D.Byte := 16#29#;
    Entete_Demande_Horloge : constant G_D.Byte := 16#24#;
    Entete_Demande_Site : constant G_D.Byte := 16#28#;
    Entete_Mise_En_Veille : constant G_D.Byte := 16#2A#;
    Entete_Mise_En_Service : constant G_D.Byte := 16#2B#;
    Entete_Pilotage_1 : constant G_D.Byte := 16#2C#;

    Activation_Apb : constant G_D.Byte := 16#16#;
    Desactivation_Apb : constant G_D.Byte := 16#17#;
    Lecteur_En_Veille : constant G_D.Byte := 16#18#;
    Lecteur_En_Service : constant G_D.Byte := 16#19#;
    Bp_Sur_Entree_Tor : constant G_D.Byte := 16#1A#;
    Boucle_Sur_Entree_Tor : constant G_D.Byte := 16#1B#;
    Contact_Porte_Sur_Entree_Tor : constant G_D.Byte := 16#1C#;
    Tous_Evenement : constant G_D.Byte := 16#20#;
    Anomalie_Seulement : constant G_D.Byte := 16#21#;

    Status_Coupure_Secteur : constant G_D.Byte := 16#00#;
    Status_Carte_Acceptee : constant G_D.Byte := 16#30#;
    Status_Carte_Refusee_Veille : constant G_D.Byte := 16#31#;   Status_Carte_Refusee_Site : constant G_D.Byte := 16#32#;
    Status_Carte_Refusee_Prog : constant G_D.Byte := 16#33#;
    Status_Carte_Refusee_Apb : constant G_D.Byte := 16#34#;
    Status_Carte_Refusee_Plage : constant G_D.Byte := 16#35#;

    function Cl35_Parametre (Lecteur : Lecteur_68.Object)
                            return G_D.Byte_String is

        Data : G_D.Byte_String (1 .. 9);
        Parametre : Par_68.Object;

    begin

        Data (1) := Conv.Nat_To_Byte (Lecteur_68.Get_Numero (Lecteur));
        Data (2) := Conv.Nat_To_Byte (0);
        Data (3) := Conv.Nat_To_Byte (6);  
        Data (4) := Entete_Parametre;

        Parametre := Lecteur_68.Get_Parametre (Lecteur);

        Data (5) := G_D.Byte'Val (Par_68.T_Tempo'Pos
                                     (Par_68.Get_Tempo (Parametre)));

        if Par_68.T_Apb'Pos (Par_68.Get_Apb (Parametre)) =
           Par_68.T_Apb'Pos (Par_68.Actif) then
            Data (6) := Activation_Apb;
        else
            Data (6) := Desactivation_Apb;
        end if;

        if Par_68.T_Veille'Pos (Par_68.Get_Veille (Parametre)) =
           Par_68.T_Veille'Pos (Par_68.En_Service) then
            Data (7) := Lecteur_En_Service;
        else  
            Data (7) := Lecteur_En_Veille;
        end if;

        case Par_68.T_Entree_Tor'Pos (Par_68.Get_Entree_Tor (Parametre)) is
            when Par_68.T_Entree_Tor'Pos (Par_68.Contact) =>
                Data (8) := Contact_Porte_Sur_Entree_Tor;
            when Par_68.T_Entree_Tor'Pos (Par_68.Boucle) =>
                Data (8) := Boucle_Sur_Entree_Tor;
            when Par_68.T_Entree_Tor'Pos (Par_68.Bp) =>
                Data (8) := Bp_Sur_Entree_Tor;
            when others =>
                null;
        end case;

        if Par_68.T_Evenement'Pos (Par_68.Get_Evenement (Parametre)) =
           Par_68.T_Evenement'Pos (Par_68.Tous) then
            Data (9) := Tous_Evenement;
        else  
            Data (9) := Anomalie_Seulement;
        end if;

        return Data;

    end Cl35_Parametre;



    function Cl35_Site (Lecteur : Lecteur_68.Object) return G_D.Byte_String is
        Site : Site_68.Object;
        S : G_D.Byte_String (1 .. 7);  
        Numero : Natural;
    begin
        Site := Lecteur_68.Get_Site (Lecteur);

        S (1) := Conversion.Nat_To_Byte (Lecteur_68.Get_Numero (Lecteur));
        S (2) := Conversion.Nat_To_Byte (0);
        S (3) := Conversion.Nat_To_Byte (4);
        S (4) := Entete_Site;  
        Numero := Site_68.Get_Numero (Site);
        S (7) := Conversion.Nat_To_Byte (Numero mod 100);
        Numero := Numero / 100;
        S (6) := Conversion.Nat_To_Byte (Numero mod 100);
        S (5) := Conversion.Nat_To_Byte (Numero / 100);
        return S;
    end Cl35_Site;


    function Cl35_Jjhhmm (Lecteur : Lecteur_68.Object;
                          Jjhhmm : Jj_Hh_Mm_68.Object) return G_D.Byte_String is
        S : G_D.Byte_String (1 .. 7);
        Horaire : Horaire_68.Object;
    begin
        S (1) := Conversion.Nat_To_Byte (Lecteur_68.Get_Numero (Lecteur));
        S (2) := Conversion.Nat_To_Byte (0);
        S (3) := Conversion.Nat_To_Byte (4);
        S (4) := Entete_Heure;
        Horaire := Jj_Hh_Mm_68.Get_Horaire (Jjhhmm);
        S (5) := Conversion.Nat_To_Byte (Horaire_68.Get_Heure (Horaire));
        S (6) := Conversion.Nat_To_Byte (Horaire_68.Get_Minute (Horaire));
        S (7) := Conversion.Nat_To_Byte
                    (Jj_Hh_Mm_68.T_Jour'Pos (Jj_Hh_Mm_68.Get_Jour (Jjhhmm)) -
                     Jj_Hh_Mm_68.T_Jour'Pos (Jj_Hh_Mm_68.T_Jour'First) + 1);

        return S;
    end Cl35_Jjhhmm;

    function Num_Carte (Carte : Carte_68.Object) return G_D.Byte_String is
        S : G_D.Byte_String (1 .. 2);
    begin
        S (1) := Conversion.Nat_To_Byte (Carte_68.Get_Numero (Carte) / 100);
        S (2) := Conversion.Nat_To_Byte (Carte_68.Get_Numero (Carte) mod 100);

        return S;
    end Num_Carte;


    function Num_Plage (Plage : Plage_68.Object) return G_D.Byte_String is
        S : G_D.Byte_String (1 .. 1);
    begin  
        S (1) := Conversion.Nat_To_Byte (Plage_68.Get_Numero (Plage));

        return S;
    end Num_Plage;

    function Cl35_Valide_Carte
                (Carte : Carte_68.Object;
                 Plage : Plage_68.Object;
                 Lecteur : Lecteur_68.Object) return G_D.Byte_String is
        S : G_D.Byte_String (1 .. 4);
    begin
        S (1) := Conversion.Nat_To_Byte (Lecteur_68.Get_Numero (Lecteur));
        S (2) := Conversion.Nat_To_Byte (0);
        S (3) := Conversion.Nat_To_Byte (4);
        S (4) := Entete_Validation;

        declare
            S2 : constant G_D.Byte_String :=
               Conversion.Concat (S, Num_Carte (Carte));  
        begin
            return Conversion.Concat (S2, Num_Plage (Plage));
        end;

    end Cl35_Valide_Carte;

    function Cl35_Invalide_Carte
                (Carte : Carte_68.Object;
                 Plage : Plage_68.Object;
                 Lecteur : Lecteur_68.Object) return G_D.Byte_String is
        S : G_D.Byte_String (1 .. 4);
    begin
        S (1) := Conversion.Nat_To_Byte (Lecteur_68.Get_Numero (Lecteur));
        S (2) := Conversion.Nat_To_Byte (0);
        S (3) := Conversion.Nat_To_Byte (3);
        S (4) := Entete_Invalidation;

        return Conversion.Concat (S, Num_Carte (Carte));

    end Cl35_Invalide_Carte;

    function Cl35_Semaine (Semaine : Semaine_68.Object) return G_D.Byte is
        N : Natural := 0;
    begin
        for I in Semaine_68.T_Jour_Semaine'First ..
                    Semaine_68.T_Jour_Semaine'Last loop
            N := N * 2;
            if Semaine_68.Jour_Is_In (Semaine, I) then
                N := N + 1;
            end if;
        end loop;
        return Conversion.Nat_To_Byte (N);
    end Cl35_Semaine;

    function Cl35_Sous_Zone (Ss_Zone : Ss_Zone_68.Object)
                            return G_D.Byte_String is
        S : G_D.Byte_String (1 .. 9);
    begin
        S (1) := Conversion.Nat_To_Byte (Horaire_68.Get_Heure
                                            (Ss_Zone_68.Get_Deb_1 (Ss_Zone)));
        S (2) := Conversion.Nat_To_Byte (Horaire_68.Get_Minute
                                            (Ss_Zone_68.Get_Deb_1 (Ss_Zone)));
        S (3) := Conversion.Nat_To_Byte (Horaire_68.Get_Heure
                                            (Ss_Zone_68.Get_Fin_1 (Ss_Zone)));
        S (4) := Conversion.Nat_To_Byte (Horaire_68.Get_Minute
                                            (Ss_Zone_68.Get_Fin_1 (Ss_Zone)));
        S (5) := Conversion.Nat_To_Byte (Horaire_68.Get_Heure
                                            (Ss_Zone_68.Get_Deb_2 (Ss_Zone)));
        S (6) := Conversion.Nat_To_Byte (Horaire_68.Get_Minute
                                            (Ss_Zone_68.Get_Deb_2 (Ss_Zone)));
        S (7) := Conversion.Nat_To_Byte (Horaire_68.Get_Heure
                                            (Ss_Zone_68.Get_Fin_2 (Ss_Zone)));
        S (8) := Conversion.Nat_To_Byte (Horaire_68.Get_Minute
                                            (Ss_Zone_68.Get_Fin_2 (Ss_Zone)));

        S (9) := Cl35_Semaine (Ss_Zone_68.Get_Jour_Sem (Ss_Zone));
        return S;
    end Cl35_Sous_Zone;

    function Cl35_Plage (Lecteur : Lecteur_68.Object; Plage : Plage_68.Object)
                        return G_D.Byte_String is

        S : G_D.Byte_String (1 .. 32);
    begin
        S (1) := Conversion.Nat_To_Byte (Lecteur_68.Get_Numero (Lecteur));
        S (2) := Conversion.Nat_To_Byte (0);
        S (3) := Conversion.Nat_To_Byte (17);
        S (4) := Entete_Plage;
        S (5) := Conversion.Nat_To_Byte (Plage_68.Get_Numero (Plage));
        S (6 .. 14) := Cl35_Sous_Zone (Plage_68.Get_Periode_1 (Plage));
        S (15 .. 23) := Cl35_Sous_Zone (Plage_68.Get_Periode_2 (Plage));
        S (24 .. 32) := Cl35_Sous_Zone (Plage_68.Get_Periode_3 (Plage));

        return S;
    end Cl35_Plage;

    function Cl35_Commande (Lecteur : Lecteur_68.Object; Entete : G_D.Byte)
                           return G_D.Byte_String is
        S : G_D.Byte_String (1 .. 4);
    begin
        S (1) := Conversion.Nat_To_Byte (Lecteur_68.Get_Numero (Lecteur));
        S (2) := Conversion.Nat_To_Byte (0);
        S (3) := Conversion.Nat_To_Byte (1);
        S (4) := Entete;

        return S;
    end Cl35_Commande;

    function Cl35_Demande_Evenement
                (Lecteur : Lecteur_68.Object) return G_D.Byte_String is
    begin
        return Cl35_Commande (Lecteur, Entete_Demande_Evenement);
    end Cl35_Demande_Evenement;

    function Cl35_Beep (Lecteur : Lecteur_68.Object) return G_D.Byte_String is
    begin
        return Cl35_Commande (Lecteur, Entete_Beep);
    end Cl35_Beep;

    function Cl35_Demande_Parametre
                (Lecteur : Lecteur_68.Object) return G_D.Byte_String is
    begin
        return Cl35_Commande (Lecteur, Entete_Demande_Parametre);
    end Cl35_Demande_Parametre;

    function Cl35_Demande_Carte_Valide
                (Lecteur : Lecteur_68.Object) return G_D.Byte_String is
    begin
        return Cl35_Commande (Lecteur, Entete_Demande_Carte_Valide);
    end Cl35_Demande_Carte_Valide;

    function Cl35_Demande_Carte_Invalide
                (Lecteur : Lecteur_68.Object) return G_D.Byte_String is
    begin
        return Cl35_Commande (Lecteur, Entete_Demande_Carte_Invalide);
    end Cl35_Demande_Carte_Invalide;

    function Cl35_Demande_Horloge
                (Lecteur : Lecteur_68.Object) return G_D.Byte_String is
    begin
        return Cl35_Commande (Lecteur, Entete_Demande_Horloge);
    end Cl35_Demande_Horloge;

    function Cl35_Demande_Site
                (Lecteur : Lecteur_68.Object) return G_D.Byte_String is
    begin
        return Cl35_Commande (Lecteur, Entete_Demande_Site);
    end Cl35_Demande_Site;

    function Cl35_En_Veille (Lecteur : Lecteur_68.Object)
                            return G_D.Byte_String is
    begin
        return Cl35_Commande (Lecteur, Entete_Mise_En_Veille);
    end Cl35_En_Veille;

    function Cl35_En_Service (Lecteur : Lecteur_68.Object)
                             return G_D.Byte_String is
    begin
        return Cl35_Commande (Lecteur, Entete_Mise_En_Service);
    end Cl35_En_Service;

    function Cl35_Ack (Lecteur : Lecteur_68.Object) return G_D.Byte_String is
    begin
        return Cl35_Commande (Lecteur, Entete_Ack);
    end Cl35_Ack;

    function Cl35_Nak (Lecteur : Lecteur_68.Object) return G_D.Byte_String is
    begin
        return Cl35_Commande (Lecteur, Entete_Nak);
    end Cl35_Nak;

    function Cl35_Pilotage_1 (Lecteur : Lecteur_68.Object)
                             return G_D.Byte_String is
    begin
        return Cl35_Commande (Lecteur, Entete_Pilotage_1);
    end Cl35_Pilotage_1;

    function Cl35_Valide_Groupe_Carte
                (De_La_Carte, A_La_Carte : Carte_68.Object;
                 Plage : Plage_68.Object;
                 Lecteur : Lecteur_68.Object) return G_D.Byte_String is
        S : G_D.Byte_String (1 .. 4);
    begin
        S (1) := Conversion.Nat_To_Byte (Lecteur_68.Get_Numero (Lecteur));
        S (2) := Conversion.Nat_To_Byte (0);
        S (3) := Conversion.Nat_To_Byte (6);
        S (4) := Entete_Validation_Groupe;

        return Conversion.Concat
                  (S, Conversion.Concat
                         (Num_Carte (De_La_Carte),
                          Conversion.Concat (Num_Carte (A_La_Carte),
                                             Num_Plage (Plage))));
    end Cl35_Valide_Groupe_Carte;

    function Cl35_Invalide_Groupe_Carte
                (De_La_Carte, A_La_Carte : Carte_68.Object;
                 Plage : Plage_68.Object;
                 Lecteur : Lecteur_68.Object) return G_D.Byte_String is
        S : G_D.Byte_String (1 .. 4);
    begin
        S (1) := Conversion.Nat_To_Byte (Lecteur_68.Get_Numero (Lecteur));
        S (2) := Conversion.Nat_To_Byte (0);
        S (3) := Conversion.Nat_To_Byte (5);
        S (4) := Entete_Invalidation_Groupe;

        return Conversion.Concat (S,
                                  Conversion.Concat (Num_Carte (De_La_Carte),
                                                     Num_Carte (A_La_Carte)));

    end Cl35_Invalide_Groupe_Carte;

    function Get_Type_Rapport (Bs : G_D.Byte_String) return G_D.Byte is
    begin
        return Bs (Bs'First + 3);
    end Get_Type_Rapport;

    function Get_Lecteur_Rapport (Bs : G_D.Byte_String)
                                 return Lecteur_68.T_Lecteur is
    begin
        return Conversion.Byte_To_Nat (Bs (Bs'First));
    end Get_Lecteur_Rapport;

    function Get_Size_Rapport (Bs : G_D.Byte_String) return Natural is
    begin  
        return Conversion.Byte_To_Nat (Bs (Bs'First + 1)) * 100 +
                  Conversion.Byte_To_Nat (Bs (Bs'First + 2));
    end Get_Size_Rapport;

    function Get_Data_Rapport (Bs : G_D.Byte_String) return G_D.Byte_String is
        S : G_D.Byte_String (1 .. 0);
    begin  
        if Bs'Length < 4 then
            return S;
        else
            return Bs (Bs'First + 4 .. Bs'Last);
        end if;
    end Get_Data_Rapport;

    function Get_Parametre (Data : G_D.Byte_String)
                           return Parametre_68.Object is
        O : Parametre_68.Object;
    begin
        Parametre_68.Set_Tempo (O, Conversion.Byte_To_Nat (Data (Data'First)));

        case Data (Data'First + 1) is
            when Activation_Apb =>
                Parametre_68.Set_Apb (O, Parametre_68.Actif);
            when Desactivation_Apb =>
                Parametre_68.Set_Apb (O, Parametre_68.Inactif);
            when others =>
                raise Rapport_Error;
        end case;

        case Data (Data'First + 2) is
            when Lecteur_En_Veille =>
                Parametre_68.Set_Veille (O, Parametre_68.En_Veille);
            when Lecteur_En_Service =>
                Parametre_68.Set_Veille (O, Parametre_68.En_Service);
            when others =>
                raise Rapport_Error;
        end case;

        case Data (Data'First + 3) is
            when Bp_Sur_Entree_Tor =>
                Parametre_68.Set_Entree_Tor (O, Parametre_68.Bp);
            when Boucle_Sur_Entree_Tor =>
                Parametre_68.Set_Entree_Tor (O, Parametre_68.Boucle);
            when Contact_Porte_Sur_Entree_Tor =>
                Parametre_68.Set_Entree_Tor (O, Parametre_68.Contact);
            when others =>
                raise Rapport_Error;
        end case;


        case Data (Data'First + 4) is
            when Tous_Evenement =>
                Parametre_68.Set_Evenement (O, Parametre_68.Tous);
            when Anomalie_Seulement =>
                Parametre_68.Set_Evenement (O, Parametre_68.Anomalies);
            when others =>
                raise Rapport_Error;
        end case;

        return O;
    end Get_Parametre;

    function Get_Site (Data : G_D.Byte_String) return Site_68.Object is
        O : Site_68.Object;
    begin
        Site_68.Set_Numero
           (O, Conversion.Byte_To_Nat (Data (Data'First)) * 10_000 +
                  Conversion.Byte_To_Nat (Data (Data'First + 1)) * 100 +
                  Conversion.Byte_To_Nat (Data (Data'First + 2)));
        return O;
    end Get_Site;

    function Get_Jjhhmm (Data : G_D.Byte_String) return Jj_Hh_Mm_68.Object is
        O : Jj_Hh_Mm_68.Object;
        J : Jj_Hh_Mm_68.T_Jour;
    begin  
        J := Jj_Hh_Mm_68.T_Jour'First;
        for I in 2 .. Conversion.Byte_To_Nat (Data (Data'First + 2)) loop
            J := Jj_Hh_Mm_68.T_Jour'Succ (J);
        end loop;

        Jj_Hh_Mm_68.Create
           (O => O,
            Jour => J,
            Heure => Conversion.Byte_To_Nat (Data (Data'First)),
            Minute => Conversion.Byte_To_Nat (Data (Data'First + 1)));

        return O;
    end Get_Jjhhmm;

    function Get_Periode (Data : G_D.Byte_String) return Horaire_68.Object is
        O : Horaire_68.Object;
    begin  
        Horaire_68.Create
           (O => O,
            Heure => Conversion.Byte_To_Nat (Data (Data'First)),
            Minute => Conversion.Byte_To_Nat (Data (Data'First + 1)));

        return O;
    end Get_Periode;

    function Get_Semaine (Data : G_D.Byte) return Semaine_68.Object is
        O : Semaine_68.Object;
        N : Natural;
    begin  
        Semaine_68.Create_Semaine_Vide (O);
        N := Conversion.Byte_To_Nat (Data);
        for I in reverse Semaine_68.T_Jour_Semaine'First ..
                            Semaine_68.T_Jour_Semaine'Last loop  
            if (N mod 2) = 1 then
                Semaine_68.Ajout_Jour (O, I);
            end if;
            N := N / 2;
        end loop;  
        return O;
    end Get_Semaine;

    function Get_Ss_Zone (Data : G_D.Byte_String) return Ss_Zone_68.Object is
        O : Ss_Zone_68.Object;
    begin
        Ss_Zone_68.Create
           (O => O,
            Deb_1 => Get_Periode (Data (Data'First .. Data'First + 1)),
            Fin_1 => Get_Periode (Data (Data'First + 2 .. Data'First + 3)),
            Deb_2 => Get_Periode (Data (Data'First + 4 .. Data'First + 5)),
            Fin_2 => Get_Periode (Data (Data'First + 6 .. Data'First + 7)),
            Jour_Sem => Get_Semaine (Data (Data'First + 8)));

        return O;
    end Get_Ss_Zone;

    function Get_Plage (Data : G_D.Byte_String) return Plage_68.Object is
        O : Plage_68.Object;
    begin
        Plage_68.Create
           (O => O,
            Numero => Conversion.Byte_To_Nat (Data (Data'First)),
            Zone => 1,
            Per_1 => Get_Ss_Zone (Data (Data'First + 1 .. Data'First + 9)),
            Per_2 => Get_Ss_Zone (Data (Data'First + 10 .. Data'First + 18)),
            Per_3 => Get_Ss_Zone (Data (Data'First + 19 .. Data'First + 27)));

        return O;
    end Get_Plage;

    procedure Get_Carte (Data : G_D.Byte_String;
                         De_La_Carte, A_La_Carte : in out Carte_68.Object;
                         Indice_Fin : in out Natural) is
    begin
        Carte_68.Create
           (O => De_La_Carte,
            Numero => Conversion.Byte_To_Nat (Data (Data'First)) * 100 +
                         Conversion.Byte_To_Nat (Data (Data'First + 1)));
        Carte_68.Create (O => A_La_Carte,
                         Numero => Conversion.Byte_To_Nat
                                      (Data (Data'First + 2)) * 100 +
                                   Conversion.Byte_To_Nat
                                      (Data (Data'First + 3)));
        Indice_Fin := Data'First + 3;   end Get_Carte;

    procedure Get_Evenement (Data : G_D.Byte_String;
                             Lecteur : Lecteur_68.T_Lecteur;
                             Evenement : in out Evenement_68.Object;
                             Indice_Fin : in out Natural) is
        O : Jj_Hh_Mm_68.Object;
        Jour : Jj_Hh_Mm_68.T_Jour;
        Statut : Evenement_68.T_Statut;
        Tete : Evenement_68.T_Tete;
    begin

        Jour := Jj_Hh_Mm_68.T_Jour'Val
                   (Jj_Hh_Mm_68.T_Jour'Pos (Jj_Hh_Mm_68.T_Jour'First) +
                    Conversion.Byte_To_Nat (Data (Data'First + 2)) - 1);

        Jj_Hh_Mm_68.Create
           (O => O,
            Jour => Jour,
            Heure => Conversion.Byte_To_Nat (Data (Data'First)),
            Minute => Conversion.Byte_To_Nat (Data (Data'First + 1)));

        case Conversion.Byte_To_Nat (Data (Data'First + 5)) is
            when 0 =>
                Tete := Evenement_68.Tete_Principale;
            when 1 =>
                Tete := Evenement_68.Tete_Auxiliaire;
            when others =>
                raise Rapport_Error;
        end case;

        case Data (Data'First + 6) is
            when Status_Coupure_Secteur =>
                Statut := Evenement_68.Coupure_Secteur;
            when Status_Carte_Acceptee =>
                Statut := Evenement_68.Carte_Acceptee;
            when Status_Carte_Refusee_Veille =>
                Statut := Evenement_68.Carte_Refusee_Veille;
            when Status_Carte_Refusee_Site =>
                Statut := Evenement_68.Carte_Refusee_Site;
            when Status_Carte_Refusee_Prog =>
                Statut := Evenement_68.Carte_Refusee_Prog;
            when Status_Carte_Refusee_Apb =>
                Statut := Evenement_68.Carte_Refusee_Apb;
            when Status_Carte_Refusee_Plage =>
                Statut := Evenement_68.Carte_Refusee_Plage;
            when others =>
                raise Rapport_Error;       end case;

        Evenement_68.Create
           (O => Evenement,
            Lecteur => Lecteur,
            Carte => Conversion.Byte_To_Nat (Data (Data'First + 3)) * 100 +
                        Conversion.Byte_To_Nat (Data (Data'First + 4)),
            Statut => Statut,
            Jjhhmm => O,
            Tete => Tete);

        Indice_Fin := Data'First + 6;
    end Get_Evenement;

end Config_Cl35;

E3 Meta Data

    nblk1=19
    nid=0
    hdr6=32
        [0x00] rec0=1a rec1=00 rec2=01 rec3=04c
        [0x01] rec0=14 rec1=00 rec2=12 rec3=002
        [0x02] rec0=19 rec1=00 rec2=17 rec3=048
        [0x03] rec0=1a rec1=00 rec2=11 rec3=00e
        [0x04] rec0=1f rec1=00 rec2=0d rec3=07e
        [0x05] rec0=16 rec1=00 rec2=0e rec3=048
        [0x06] rec0=1e rec1=00 rec2=08 rec3=00c
        [0x07] rec0=1d rec1=00 rec2=07 rec3=03c
        [0x08] rec0=12 rec1=00 rec2=06 rec3=01e
        [0x09] rec0=14 rec1=00 rec2=05 rec3=08e
        [0x0a] rec0=1c rec1=00 rec2=15 rec3=010
        [0x0b] rec0=1b rec1=00 rec2=0f rec3=044
        [0x0c] rec0=1c rec1=00 rec2=02 rec3=02e
        [0x0d] rec0=18 rec1=00 rec2=04 rec3=04c
        [0x0e] rec0=19 rec1=00 rec2=03 rec3=018
        [0x0f] rec0=1c rec1=00 rec2=09 rec3=01a
        [0x10] rec0=03 rec1=00 rec2=19 rec3=020
        [0x11] rec0=1a rec1=00 rec2=0a rec3=036
        [0x12] rec0=1d rec1=00 rec2=0b rec3=010
        [0x13] rec0=1c rec1=00 rec2=0c rec3=02e
        [0x14] rec0=1c rec1=00 rec2=10 rec3=028
        [0x15] rec0=15 rec1=00 rec2=16 rec3=002
        [0x16] rec0=19 rec1=00 rec2=14 rec3=020
        [0x17] rec0=17 rec1=00 rec2=13 rec3=002
        [0x18] rec0=0f rec1=00 rec2=18 rec3=000
    tail 0x2154aaf3887795ce106c0 0x42a00088462060003