DIRECTORY BasicTime, BootTime; BootTimeImpl: CEDAR PROGRAM IMPORTS BasicTime EXPORTS BootTime ~ BEGIN bootTimeComputed: BOOL ¬ FALSE; bootTime: BasicTime.GMT ¬ BasicTime.nullGMT; Get: PUBLIC PROC RETURNS [BasicTime.GMT] ~ { IF NOT bootTimeComputed THEN { enow: BasicTime.ExtendedGMT ~ BasicTime.ExtendedNow[]; ticksSinceBoot: CARD ~ GetTicksSinceBoot[]; msSinceBoot: CARD ~ TicksToMsec[ticksSinceBoot]; dms: INT ~ INT[enow.usecs/1000] - INT[msSinceBoot]; ds: INT ~ dms/1000; bootTime ¬ enow.gmt.Update[ds]; bootTimeComputed ¬ TRUE }; RETURN [bootTime] }; GetTicksSinceBoot: PROC RETURNS [CARD] = TRUSTED MACHINE CODE {"XR_TicksSinceBoot"}; TicksToMsec: PROC [CARD] RETURNS [CARD] = TRUSTED MACHINE CODE {"XR_TicksToMsec"}; END. ˆ BootTimeImpl.mesa Copyright Σ 1988, 1991, 1992 by Xerox Corporation. All rights reserved. Willie-s, July 24, 1992 3:40 pm PDT Κ§•NewlineDelimiter –(cedarcode) style™code™Kšœ Οeœ=™HK™#K™—šΟk ˜ K˜ K˜ K˜—šΟn œžœž˜Kšžœ ˜Kšžœ ˜šœž˜K˜—Kšœžœžœ˜Kšœžœ˜,K˜š Ÿœžœžœžœ žœ˜,šžœžœžœ˜K˜6Kšœžœ˜+Kšœ žœ˜0Kšœžœžœžœ˜3Kšœžœ ˜K˜Kšœž˜K˜—Kšžœ ˜K˜K˜—šŸœžœžœžœ˜&Kšœžœžœžœ˜-—K˜š Ÿ œžœžœžœžœ˜'Kšœžœžœžœ˜*—K˜—K˜Kšžœ˜K™—…—ΰ