-- DMSTime.Mesa -- edited by Brotz, August 15, 1980 10:07 AM -- edited by Levin, May 9, 1980 4:49 PM DIRECTORY InlineDefs: FROM "InlineDefs", DMSTimeDefs: FROM "DMSTimeDefs", StringDefs: FROM "StringDefs", TimeDefs: FROM "TimeDefs"; DMSTime: PROGRAM IMPORTS InlineDefs, StringDefs, TimeDefs EXPORTS DMSTimeDefs SHARES DMSTimeDefs = BEGIN OPEN DMSTimeDefs, StringDefs; quoteSpace: CHARACTER = ' ; MapPackedTimeToTimeZoneString: PUBLIC PROCEDURE [pt: PackedTime, s: STRING, format: TimeFormat _ timeHouse] = BEGIN upt: UnpackedTime = TimeDefs.UnpackDT[pt.lc]; dayNames: ARRAY [0 .. 7) OF STRING = ["Monday"L, "Tuesday"L, "Wednesday"L, "Thursday"L, "Friday"L, "Saturday"L, "Sunday"L]; monthNames: ARRAY [0 .. 12) OF STRING = ["Jan."L, "Feb."L, "March"L, "April"L, "May"L, "June"L, "July"L, "Aug."L, "Sept."L, "Oct."L, "Nov."L, "Dec."L]; AppendTwoDigitNumber: PROCEDURE [v: CARDINAL, suppressZeros: BOOLEAN] = BEGIN d1, d2: CARDINAL; [d1, d2] _ InlineDefs.DIVMOD[v, 10]; IF d1 ~= 0 OR ~suppressZeros THEN AppendChar[s, d1 + '0]; AppendChar[s, d2 + '0]; END; -- of AppendTwoDigitNumber -- AppendYear: PROCEDURE = BEGIN century, year: CARDINAL; AppendChar[s, quoteSpace]; [century, year] _ InlineDefs.DIVMOD[upt.year, 100]; AppendTwoDigitNumber[century, FALSE]; AppendTwoDigitNumber[year, FALSE]; END; -- of AppendYear -- AppendHumanTime: PROCEDURE = BEGIN aOrP: CHARACTER _ 'a; AppendChar[s, quoteSpace]; SELECT upt.hour FROM < 1 => AppendTwoDigitNumber[12, TRUE]; < 12 => AppendTwoDigitNumber[upt.hour, TRUE]; = 12 => {aOrP _ 'p; AppendTwoDigitNumber[12, TRUE]}; ENDCASE => {aOrP _ 'p; AppendTwoDigitNumber[upt.hour-12, TRUE]}; AppendMinutes[]; AppendChar[s, quoteSpace]; AppendChar[s, aOrP]; AppendChar[s, 'm]; END; -- of AppendHumanTime -- AppendMinutes: PROCEDURE = BEGIN AppendChar[s, ':]; AppendTwoDigitNumber[upt.minute, FALSE]; END; -- of AppendMinutes -- AppendTimeZone: PROCEDURE = BEGIN KnownZones: TYPE = [4..10]; zones: PACKED ARRAY KnownZones OF CHARACTER = ['A,'E,'C,'M,'P,'Y,'H]; IF upt.zone IN KnownZones THEN BEGIN AppendChar[s, quoteSpace]; AppendChar[s, zones[upt.zone]]; AppendChar[s, IF upt.dst THEN 'D ELSE 'S]; AppendChar[s, 'T]; END; END; -- of AppendTimeZone -- s.length _ 0; SELECT format FROM timeHouse => BEGIN AppendString[s, dayNames[upt.weekday]]; AppendChar[s, quoteSpace]; AppendString[s, monthNames[upt.month]]; AppendChar[s, quoteSpace]; AppendTwoDigitNumber[upt.day, TRUE]; AppendChar[s, ',]; AppendYear[]; AppendHumanTime[]; AppendTimeZone[]; END; laurelMsg => BEGIN AppendTwoDigitNumber[upt.day, TRUE]; AppendChar[s, quoteSpace]; AppendString[s, monthNames[upt.month]]; AppendYear[]; AppendHumanTime[]; AppendTimeZone[]; AppendString[s, " ("L]; AppendString[s, dayNames[upt.weekday]]; AppendChar[s, ')]; END; arpaMsg => BEGIN ssd: SubStringDescriptor _ [monthNames[upt.month], 0, 3]; AppendTwoDigitNumber[upt.day, TRUE]; AppendChar[s, quoteSpace]; AppendSubString[s, @ssd]; AppendYear[]; AppendChar[s, quoteSpace]; AppendTwoDigitNumber[upt.hour, FALSE]; AppendMinutes[]; AppendTimeZone[]; END; ENDCASE; END; -- of MapPackedTimeToTimeZoneString -- END. -- of DMSTime --z20461(529)\f1