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

⟦2b930b513⟧ Ada Source

    Length: 7168 (0x1c00)
    Types: Ada Source
    Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Local_Time, seg_04cdd9, separate Calendar

Derivation

└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000
    └─ ⟦cfc2e13cd⟧ »Space Info Vol 2« 
        └─⟦this⟧ 

E3 Source Code



separate (Calendar)
package body Local_Time is

    type Tm is
        record
            Seconds : Day_Duration;
            Day : Day_Number;
            Month : Month_Number;
            Year : Year_Number;
        end record;


    -------------------------------------------------
    -- Table of common Daylight Savings varieties. --
    -------------------------------------------------

    type Months is (Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec);

    type Hemispheres is (Northern, Southern);
    This_Hemisphere : Hemispheres;

    type Dst_Rec is
        record
            Yr_In_Effect : Year_Number;
            Change_Month1 : Months;
            Change_Sunday_After1 : Day_Number;
            Change_Month2 : Months;
            Change_Sunday_After2 : Day_Number;
            Seconds : Time_Float;
        end record;


    ---------------------------------------------------------------------------
    -- ATTENTION:                                                            --
    -- The following tables and constants need to be adjusted when the VADS  --
    -- is installed at a site not in the PACIFIC time zone. For the U.S. the --
    -- dst table is correct everywhere that daylight savings applies.  The   --
    -- only changes, then, are to the zone names and to  hours_west_of_GMT.  --
    -- For example, in the Eastern time zone, "EDT", "EST", and 5 should do  --
    -- the trick.  In Indiana, where no daylight savings applies, then these --
    -- tables can be ignored, and the daylight_savings funtion can return    --
    -- 0.0 in all cases.                                                     --
    --                                                                       --
    -- If these tables are not adjusted, no disaster will occur.  Dates are  --
    -- normalized to GMT (Grenwich Meridian Time) to provide uniformity on   --
    -- geographically interconnected machines.  If these tables are not      --
    -- changed, then dates cannot be directly transfered (correctly) among   --
    -- these machines.                                                       --
    ---------------------------------------------------------------------------

    -----------------------------------------------------------------------
    -- dst (daylight savings time) for the PACIFIC time zone of the U.S. --
    -----------------------------------------------------------------------
    Dst_Zone_Name : constant String := "PDT";
    Non_Dst_Zone_Name : constant String := "PST";
    Hours_West_Of_Gmt : constant := 8;
    Dst_Entries : constant := 3;
    ------------------------------------------------------------------
    -- valid for most of the U.S.; Indiana has no DST, for example. --
    ------------------------------------------------------------------
    Dst_Table : constant array (1 .. Dst_Entries) of Dst_Rec :=
       ((1974, Jan, 6, Nov, 24, 3600.0), (1975, Mar, 1, Oct, 25, 3600.0),
        (1976, Apr, 24, Oct, 25, 3600.0));

    ------------------------------------------------------
    -- End of material to change, if the above daylight --
    -- savings time model applies.                      --
    ------------------------------------------------------

    function Clock return Time is
        Day : Integer;
        Sec : Duration;

        procedure Ts_Current_Time (Day : out Integer; Sec : out Duration);
        pragma Interface (Ada, Ts_Current_Time);
        pragma Interface_Name (Ts_Current_Time, "TS_CURRENT_TIME");
    begin
        Ts_Current_Time (Day, Sec);
        return (Day, Sec);
    exception
        when Numeric_Error =>
            raise Time_Error;
    end Clock;

    function Sunday_After
                (Y : Year_Number; M : Months; D : Day_Number) return Integer is
        Jday : Integer := Julian_Day_Of (Y, Months'Pos (M) + 1, D);
    begin
        -- the 0th julian day was a monday.
        return ((Jday / 7) * 7) + 6;
    end Sunday_After;

    function Daylight_Savings (Year, Julian_Day : Integer) return Time_Float is
        Change1, Change2 : Integer;
    begin
        for I in reverse 1 .. Dst_Entries loop
            if Year >= Dst_Table (I).Yr_In_Effect then
                Change1 := Sunday_After (Year, Dst_Table (I).Change_Month1,
                                         Dst_Table (I).Change_Sunday_After1);
                Change2 := Sunday_After (Year, Dst_Table (I).Change_Month2,
                                         Dst_Table (I).Change_Sunday_After2);
                if Julian_Day >= Change1 and then Julian_Day < Change2 then
                    if This_Hemisphere = Northern then
                        return Dst_Table (I).Seconds;
                    else
                        return 0.0;
                    end if;
                else
                    if This_Hemisphere = Northern then
                        return 0.0;
                    else
                        return Dst_Table (I).Seconds;
                    end if;
                end if;
            end if;
        end loop;
        return 0.0;    -- date was before dst went into effect
    end Daylight_Savings;

begin
    This_Hemisphere := Northern;
    Seconds_From_Gmt := Time_Float (Hours_West_Of_Gmt) * 3600.0;

    -- Initialize clock to some arbitrary time
    Set_Clock (Time_Of (Year => 1987, Month => 10, Day => 15, Seconds => 0.0));
end Local_Time;

E3 Meta Data

    nblk1=6
    nid=0
    hdr6=c
        [0x00] rec0=23 rec1=00 rec2=01 rec3=018
        [0x01] rec0=0c rec1=00 rec2=02 rec3=05a
        [0x02] rec0=10 rec1=00 rec2=03 rec3=048
        [0x03] rec0=1b rec1=00 rec2=04 rec3=02e
        [0x04] rec0=15 rec1=00 rec2=05 rec3=010
        [0x05] rec0=11 rec1=00 rec2=06 rec3=000
    tail 0x217541e66874f7b8be408 0x42a00088462060003