-- System.mesa last edited by:
-- McJones on: May 9, 1980 11:07 AM
-- Sandman on: August 26, 1980 12:20 PM (Alto version)
DIRECTORY
InlineDefs USING [BcplLongNumber, BcplToMesaLongNumber, LongDiv, LongMult];
System: DEFINITIONS IMPORTS InlineDefs =
BEGIN
-- Network addresses
NetworkAddress: TYPE [6];
nullNetworkAddress: READONLY NetworkAddress;
-- Timekeeping facilities
GreenwichMeanTime: TYPE = LONG CARDINAL;
-- 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 = 0; -- for Alto times
GetGreenwichMeanTime: PROCEDURE RETURNS [gmt: GreenwichMeanTime] = INLINE
BEGIN
time: POINTER TO InlineDefs.BcplLongNumber = LOOPHOLE[572B];
RETURN[InlineDefs.BcplToMesaLongNumber[time↑]]
END;
SecondsSinceEpoch: PROCEDURE [gmt: GreenwichMeanTime] RETURNS [LONG CARDINAL] =
INLINE BEGIN RETURN[gmt - gmtEpoch] END;
AdjustGreenwichMeanTime: PROC [gmt: GreenwichMeanTime, delta: LONG INTEGER]
RETURNS [GreenwichMeanTime] = INLINE {RETURN[gmt + delta]};
Microseconds: TYPE = LONG CARDINAL;
Pulses: TYPE = RECORD [CARDINAL];
GetClockPulses: PROCEDURE RETURNS [p: Pulses] = INLINE
BEGIN clock: POINTER TO Pulses = LOOPHOLE[430B]; RETURN[clock↑] END;
PulsesToMicroseconds: PROCEDURE [p: Pulses] RETURNS [m: Microseconds] = INLINE
BEGIN RETURN[InlineDefs.LongMult[p, 38994]] END;
MicrosecondsToPulses: PROCEDURE [m: Microseconds] RETURNS [p: Pulses] = INLINE
BEGIN RETURN[[InlineDefs.LongDiv[m, 38994]]] END;
END.