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

⟦3226da262⟧ Ada Source

    Length: 10240 (0x2800)
    Types: Ada Source
    Notes: 03_class, FILE, R1k_Segment, e3_tag, procedure Prog_Date, seg_03decb

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 Prog_Date;
with Text_Io;
with Device_Independent_Io;
with System;

use Text_Io;

procedure Prog_Date is
    type J is (Lundi, Mardi, Mercredi, Jeudi, Vendredi, Samedi, Dimanche);
    type M is (Janvier, Fevrier, Mars, Avril, Mai, Juin, Juillet,
               Aout, Septembre, Octobre, Novembre, Decembre);
    subtype D is Positive range 1 .. 31;
    subtype A is Positive range 1000 .. 3000;

    Date : D;
    An_Biss, Nb_An, Last, Nb_An_Biss, Nb_J : Natural;
    Jour : J;
    Annee : A;
    Ch : String (1 .. 35);
    Z : Natural range 0 .. 12;
    Mois : M;

    --*************************************************

    procedure Lecture (Date : in out D;
                       Last : in out Natural;
                       Mo : out M;
                       Annee : in out A) is
        K : Integer range 0 .. 2;
        Aux, I, U : Natural;
    begin
        loop
            begin
                K := 0;
                U := 0;
                Aux := 1;
                Put ("Entrer la date: ");

                Text_Io.Get_Line (Ch, Last);
                Skip_Line;
                Put ("Date entree");
                for I in 1 .. Last loop

                    if (Ch (I) = ' ') and (I = 1) and (Ch (I + 1) = ' ') then
                        U := 0;
                    end if;

                    if (Ch (I) = ' ') and (I = 1) and (Ch (I + 1) /= ' ') then
                        Aux := I + 1;
                    end if;

                    if (I > 1) and then
                       ((Ch (I - 1) = ' ') and (Ch (I) = ' ') and
                        (Ch (I + 1) = ' ')) then
                        U := 0;
                    end if;

                    if (I > 1) and then
                       ((Ch (I - 1) /= ' ') and (Ch (I) = ' ') and
                        (Ch (I + 1) = ' ')) then
                        U := 1;
                    end if;

                    if (I > 1) and then
                       ((Ch (I - 1) = ' ') and (Ch (I) = ' ') and
                        (Ch (I + 1) /= ' ')) then
                        U := 1;
                    end if;

                    if (I > 1) and then
                       ((Ch (I - 1) /= ' ') and (Ch (I) = ' ') and
                        (Ch (I + 1) /= ' ')) then
                        U := 1;
                    end if;

                    if I = Last then
                        Annee := A'Value (Ch (Aux .. I));
                        exit;
                    end if;

                    if (Ch (I) = ' ') and (K < 3) and (U = 1) then
                        case K is
                            when 0 =>
                                Date := D'Value (Ch (Aux .. (I - 1)));
                                K := K + 1;
                            when 1 =>
                                Mo := M'Value (Ch (Aux .. (I - 1)));
                                K := K + 1;
                            when 2 =>
                                Annee := A'Value (Ch (Aux .. I));
                                exit;
                                K := K + 1;
                            when others =>
                                null;
                        end case;
                    end if;
                    if (I > 1) and then
                       ((Ch (I - 1) /= ' ') and (Ch (I) = ' ') and
                        (Ch (I + 1) /= ' ')) then
                        Aux := I + 1;
                    end if;
                end loop;
                exit;
            exception
                when Constraint_Error =>
                    New_Line;
                    Put_Line ("date incorrecte...");
                    New_Line;
            end;
        end loop;
    end Lecture;
begin
    loop
        loop
            Lecture (Date, Last, Mois, Annee);
            Nb_An := Annee - 1901;
            An_Biss := (Nb_An) mod (4);
            case Mois is
                when Avril | Juin | Septembre | Novembre =>
                    if Date > 30 then
                        Put ("date incorrecte");
                        New_Line;
                    else
                        exit;
                    end if;
                when Fevrier =>
                    if An_Biss = 3 then
                        if Date > 29 then
                            Put ("date incorrecte");
                            New_Line;
                        else
                            exit;
                        end if;
                    else
                        if Date > 28 then
                            Put ("date incorrecte");
                            New_Line;
                        else
                            exit;
                        end if;
                    end if;
                when others =>
                    exit;
            end case;
        end loop;
        if (Annee < 1901) or (Annee > 2000) then
            exit;
        end if;
        Nb_An_Biss := Nb_An / 4;
        if (An_Biss = 3) and (Mois > Fevrier) then
            Nb_J := ((Nb_An - Nb_An_Biss) * 365) + (Nb_An_Biss * 366) + 1;
        else
            Nb_J := ((Nb_An - Nb_An_Biss) * 365) + (Nb_An_Biss * 366);
        end if;
        case Mois is
            when Fevrier =>
                Nb_J := Nb_J + 31;

            when Mars =>
                Nb_J := Nb_J + 59;

            when Avril =>
                Nb_J := Nb_J + 90;

            when Mai =>
                Nb_J := Nb_J + 120;

            when Juin =>
                Nb_J := Nb_J + 151;

            when Juillet =>
                Nb_J := Nb_J + 181;

            when Aout =>
                Nb_J := Nb_J + 212;

            when Septembre =>
                Nb_J := Nb_J + 243;

            when Octobre =>
                Nb_J := Nb_J + 273;

            when Novembre =>
                Nb_J := Nb_J + 304;

            when Decembre =>
                Nb_J := Nb_J + 334;

            when others =>
                null;

        end case;
        Put ("le ");
        Put (Ch (1 .. Last));
        Put (" est un ");
        Put (J'Image (Jour));
        New_Line;
    end loop;
end Prog_Date;

E3 Meta Data

    nblk1=9
    nid=4
    hdr6=10
        [0x00] rec0=24 rec1=00 rec2=01 rec3=02e
        [0x01] rec0=1d rec1=00 rec2=09 rec3=030
        [0x02] rec0=01 rec1=00 rec2=03 rec3=07a
        [0x03] rec0=19 rec1=00 rec2=02 rec3=048
        [0x04] rec0=1d rec1=00 rec2=08 rec3=03c
        [0x05] rec0=1b rec1=00 rec2=06 rec3=060
        [0x06] rec0=26 rec1=00 rec2=05 rec3=03e
        [0x07] rec0=10 rec1=00 rec2=07 rec3=001
        [0x08] rec0=bf rec1=94 rec2=00 rec3=005
    tail 0x21536a7e685fd6e1313d2 0x42a00088462060003
Free Block Chain:
  0x4: 0000  00 00 00 4e 80 0b 31 29 20 61 6e 64 20 74 68 65  ┆   N  1) and the┆