-- Intime.mesa -- Maureen Stone June 3, 1982 10:51 am -- reduced size of DeltaDeltaTime to make room for penPosition ActionKind -- Dan Swinehart April 14, 1982 11:31 am -- DIRECTORY Inline USING [LowHalf, HighHalf, DIVMOD], Process USING [Milliseconds, Ticks]; Intime: DEFINITIONS IMPORTS Inline, Process = BEGIN OPEN Inline; MsTicks: TYPE = Process.Milliseconds; -- expressed in milliseconds -- MSTicks: TYPE = LONG CARDINAL; -- long milliseconds -- DeltaTicks: TYPE = Process.Ticks; -- grain of resolution for Increek events -- DeltaTime: TYPE = DeltaTicks [0..256); -- expresses time differences in tick units -- maxDeltaTime: DeltaTime = LAST[DeltaTime]; -- fits in a short event value cell -- msPerDeltaTick: MsTicks; deltaTicksPerSecond: DeltaTicks; DeltaDeltaTime: TYPE = DeltaTime [0..16); -- must fit in Action first word -- maxDeltaDeltaTime: DeltaDeltaTime = LAST[DeltaDeltaTime]; Overlap: TYPE = {loShort, hiShort}; EventTime: TYPE = PRIVATE MACHINE DEPENDENT RECORD -- what client sees -- milliseconds since 1901 [ SELECT OVERLAID Overlap FROM loShort => [lo: MsTicks, hi: LONG CARDINAL], hiShort => [lower: MSTicks, higher: CARDINAL], ENDCASE]; -- Procedures -- ReadEventTime: PROCEDURE RETURNS [EventTime]; AdjustEventTime: PROC[initialize: BOOLEAN←FALSE]; EventTimeDifference: PROCEDURE [t1, t2: LONG POINTER TO READONLY EventTime] RETURNS [MsTicks] = INLINE { RETURN[IF t1.hi = t2.hi THEN t1.lo - t2.lo ELSE BigDifference[t1, t2]]; }; IsLaterTime: PROCEDURE [t1, t2: EventTime] RETURNS [BOOLEAN] = INLINE BEGIN RETURN[IF t1.hi = t2.hi THEN t1.lo > t2.lo ELSE t1.hi > t2.hi]; END; AddDeltaTimeToEventTime: PROCEDURE [eT: EventTime, dT: DeltaTime] RETURNS [rT: EventTime] = INLINE { lo: MSTicks ← LONG[eT.lo] + (dT*msPerDeltaTick); RETURN[[loShort[hi: eT.hi + HighHalf[lo], lo: LowHalf[lo]]]]; }; SubtractMsTicksFromEventTime: PROCEDURE [ eT: LONG POINTER TO EventTime, ticks: MsTicks] = INLINE { IF ticks > eT.lower THEN eT.higher ← eT.higher - 1; eT.lower ← eT.lower - ticks; }; MsTicksToDeltaTime: PROCEDURE [s: MsTicks] RETURNS [dT: DeltaTicks, rem: MsTicks] = INLINE { [dT, rem] ← DIVMOD[s, msPerDeltaTick]; }; BigDifference: PRIVATE PROCEDURE [t1, t2: LONG POINTER TO READONLY EventTime] RETURNS [MsTicks]; END. -- DCS, July 2, 1980 2:39 PM, birth, extracted from Increeks -- July 2, 1980 2:56 PM, more -- July 17, 1980 3:17 PM, remove AddTimeToPosTime, involves Positions -- July 21, 1980 8:16 AM, add StoredTimeToEventTime -- August 7, 1980 9:35 AM, change EventTimeDifference to StoredEvent...ce, add EventTimeDiff..ce -- August 12, 1980 12:37 AM, change time representation again, all milliseconds -- August 12, 1980 4:23 PM, add SubtractMsTicksFromEventTime -- August 19, 1980 4:45 PM, difference operates on READONLYs -- September 9, 1980 2:57 PM, long pointers -- September 12, 1980 5:47 AM, modify DeltaTime a little -- October 2, 1980 3:36 PM, make EventTime internals PRIVATE -- 29-Jan-81 13:49:38, narrow DeltaDeltaTime to widen Action kind --