-- System.mesa (last edited by: Levin on: August 24, 1982 4:56 pm) DIRECTORY MiscAlpha USING [aRCLK], Mopcodes USING [zMISC]; System: DEFINITIONS = BEGIN -- Universal identifiers UniversalID: TYPE [5]; nullIDRep: RECORD [a, b, c, d, e: WORD] = [0, 0, 0, 0, 0]; -- never returned by GetUniversalID nullID: UniversalID = LOOPHOLE[nullIDRep]; GetUniversalID: PROCEDURE RETURNS [uid: UniversalID]; FileID: TYPE = RECORD [UniversalID]; -- a useful special case of UniversalID VolumeID: TYPE = RECORD [UniversalID]; -- another useful special case of UniversalID PhysicalVolumeID: TYPE = RECORD [UniversalID]; -- yet another useful special case of UniversalID -- Network addresses NetworkAddress: TYPE [6]; nullNetworkAddress: READONLY NetworkAddress; -- Time of day GreenwichMeanTime: TYPE = RECORD [LONG CARDINAL]; -- A Greenwich mean time t represents the time which is t-gmtEpoch seconds after midnight, 1 January 1968, the time chosen as the epoch or beginning of the Pilot time standard. Within the range in which they overlap, the Alto and Pilot time standards assign identical bit patterns, but the Pilot standard runs an additional 67 years before overflowing. -- Greenwich mean times should be compared directly only for equality; to find which of two gmt's comes first, apply SecondsSinceEpoch to each and compare the result. If t2 is a gmt known to occur after t1, then t2-t1 is the seconds between t1 and t2. If t is a gmt, then System.GreenwichMeanTime[t+60] is the gmt one minute after t. gmtEpoch: GreenwichMeanTime = [2114294400]; -- = (67 years * 365 days + 16 leap days) * 24 hours * 60 minutes * 60 seconds GetGreenwichMeanTime: SAFE PROC RETURNS [gmt: GreenwichMeanTime]; SecondsSinceEpoch: SAFE PROC [gmt: GreenwichMeanTime] RETURNS [LONG CARDINAL] = TRUSTED INLINE {RETURN[gmt-gmtEpoch]}; AdjustGreenwichMeanTime: SAFE PROC [gmt: GreenwichMeanTime, delta: LONG INTEGER] RETURNS [GreenwichMeanTime] = TRUSTED INLINE {RETURN[[gmt+delta]]}; LocalTimeParameters: TYPE = MACHINE DEPENDENT RECORD [ direction(0:0..0): WestEast, -- e.g. Pacific is west zone(0:1..4): [0..12], -- e.g. Pacific is 8 zoneMinutes(1:0..6): [0..59], beginDST(0:5..15): [0..366], -- e.g. April 30 is 121 endDST(1:7..15): [0..366]]; -- e.g. October 31 is 305 WestEast: TYPE = MACHINE DEPENDENT {west(0), east(1)}; GetLocalTimeParameters: SAFE PROC [pvID: PhysicalVolumeID ← [nullID]] RETURNS [params: LocalTimeParameters]; -- The parameter pvID should normally be defaulted. LocalTimeParametersUnknown: ERROR; SetLocalTimeParameters: PROC [ params: LocalTimeParameters, pvID: PhysicalVolumeID ← [nullID]]; -- The parameter pvID should normally be defaulted. -- Interval timing Microseconds: TYPE = LONG CARDINAL; Pulses: TYPE = RECORD [LONG CARDINAL]; GetClockPulses: SAFE PROC RETURNS [p: Pulses] = TRUSTED MACHINE CODE {Mopcodes.zMISC, MiscAlpha.aRCLK}; PulsesToMicroseconds: SAFE PROC [p: Pulses] RETURNS [m: Microseconds]; MicrosecondsToPulses: SAFE PROC [m: Microseconds] RETURNS [p: Pulses]; -- Old interval timer mechanism (clients should convert GetClockPulses) TimerHandle: TYPE = RECORD [Pulses]; CreateIntervalTimer: SAFE PROC RETURNS [t: TimerHandle] = LOOPHOLE[GetClockPulses]; GetIntervalTime: SAFE PROC [t: TimerHandle] RETURNS [m: Microseconds]; -- System power control PowerOff: PROC; SetAutomaticPowerOn: SAFE PROC [time: GreenwichMeanTime, externalEvent: BOOLEAN]; ResetAutomaticPowerOn: SAFE PROC; END. LOG Time: April 12, 1978 11:56 AM By: Lauer Action: Created file Time: May 4, 1978 3:19 PM By: Lauer Action: Fixed for Mesa 4.0; added NetworkAddress Time: May 5, 1978 11:12 AM By: Lauer Action: Added nullID Time: June 21, 1978 11:23 AM By: Lauer Action: Deleted AllocateSpecificSocket Time: July 29, 1978 1:07 PM By: Horsley Action: Deleted DeleteIntervalTimer and InvalidTimerHandle Time: August 11, 1978 10:22 AM By: Lauer Action: Moved TimerHandle from SystemInternal Time: August 29, 1978 11:26 AM By: Lauer Action: Changed representation of UniversalID to be four words of UNSPECIFIED Time: March 9, 1979 4:37 PM By: McJones Action: Moved body of NetworkAddress from SystemInternal; changed representation of GreenwichMeanTime and Microseconds to be LONG CARDINALs Time: May 2, 1979 2:26 PM By: McJones Action: Added new interval timing (Pulses) Time: May 22, 1979 3:30 PM By: Lauer Action: Replaced NetworkAddress with a record containing only two LONG UNSPECIFIED's Time: January 25, 1980 4:15 PM By: McJones Action: Redefined old interval timers in terms of Pulses Time: February 9, 1980 12:41 PM By: McJones Action: Converted to new GreenwichMeanTime representation Time: May 9, 1980 11:07 AM By: McJones Action: Added PhysicalVolumeID Time: June 10, 1980 5:52 PM By: McJones Action: Added two more words to NetworkAddress and one more word to UniversalID; converted them both to exported types Time: August 13, 1980 4:20 PM By: McJones Action: Added AdjustGreenwichMeanTime; converted to MiscAlpha Time: January 21, 1981 1:36 PM By: McJones Action: Added local time parameters Time: August 24, 1982 4:56 pm By: Levin Action: Make things SAFE.