Summary of the Date, Time, and Measurement Utilities
Pascal Summary
Constants
CONST
   {date equates for ToggleDate control bits}
   validDateFields      = -1;       {date fields are valid}
   genCdevRangeBit      = 27;       {restrict date/time to range used by }
                                    { General Controls control panel}
   togDelta12HourBit    = 28;       {if toggling hour up/down, restrict to }
                                    { 12-hour range}
   togCharZCycleBit     = 29;       {modifier for togChar12HourBit to }
                                    { accept hours 0..11 only}
   togChar12HourBit     = 30;       {if toggling hour by char, accept }
                                    { hours 1..12 only}
   smallDateBit         = 31;       {restrict valid date/time to range }
                                    { of Time global}
   {long date-time record field masks}
   eraMask              = $0001;    {era}
   yearMask             = $0002;    {year}
   monthMask            = $0004;    {month}
   dayMask              = $0008;    {day}
   hourMask             = $0010;    {hour}
   minuteMask           = $0020;    {minute}
   secondMask           = $0040;    {second}
   dayOfWeekMask        = $0080;    {day of the week}
   dayOfYearMask        = $0100;    {day of the year}
   weekOfYearMask       = $0200;    {week of the year}
   pmMask               = $0400;    {evening (P.M.)}
   {default value for togFlags field in the toggle parameter block }
   { and default value for the flags parameter passed to the Verify function}
   dateStdMask          = $007F;    {default value for checking era }
                                    { through second fields}
Data Types
TYPE 
   DateTimeRec =              {date-time record}
   RECORD
      year:       Integer;    {year}
      month:      Integer;    {month}
      day:        Integer;    {day of the month}
      hour:       Integer;    {hour}
      minute:     Integer;    {minute}
      second:     Integer;    {second}
      dayOfWeek:  Integer;    {day of the week}
   END;
   LongDateField =   {long date field enumeration}
                     (eraField, yearField, monthField, dayField,
                     hourField, minuteField, secondField,dayOfWeekField,
                     dayOfYearField,weekOfYearField, pmField, res1Field,
                     res2Field, res3Field);
   LongDateTime = comp;       {date and time in 64-bit SANE comp format}
   LongDateCvt =              {long date-time conversion record}
   RECORD
      CASE Integer OF
         0:
            (c:      comp);   {copy field into a variable of type }
                              { LongDateTime}
         1:
            (lHigh:  LongInt; {high-order 32 bits}
             lLow:   LongInt);{low-order 32 bits}
   END;
   LongDateRec =              {long date-time record}
   RECORD
      CASE Integer OF
         0:
            (era:          Integer;       {era}
             year:         Integer;       {year}
             month:        Integer;       {month}
             day:          Integer;       {day of the month}
             hour:         Integer;       {hour}
             minute:       Integer;       {minute}
             second:       Integer;       {second}
             dayOfWeek:    Integer;       {day of the week}
             dayOfYear:    Integer;       {day of the year}
             weekOfYear:   Integer;       {week of the year}
             pm:           Integer;       {half of day--0 for morning, }
                                          { 1 for evening}
             res1:         Integer;       {reserved}
             res2:         Integer;       {reserved}
             res3:         Integer);      {reserved}
         1:                               {index by LongDateField}
            (list:         ARRAY[0..13] OF Integer);
         2:
            (eraAlt:       Integer;       {era}
             oldDate:      DateTimeRec);  {date-time record}
   END;
   TogglePB =                    {toggle parameter block}
   RECORD
      togFlags:      LongInt;    {flags}
      amChars:       ResType;    {from 'itl0' resource, but made uppercase}
      pmChars:       ResType;    {from 'itl0' resource, but made uppercase}
                                 {reserved}
      reserved:      ARRAY[0..3] OF LongInt;
   END;
   ToggleResults = Integer;         {ToggleDate function return type}
   DateDelta = SignedByte;          {ToggleDate function delta field type}
   MachineLocation =                   {geographic location record}
   RECORD
      latitude:            Fract;      {latitude}
      longitude:           Fract;      {longitude}
      CASE Integer OF
         0:
            (dlsDelta:     SignedByte);{daylight savings time}
         1:
            (gmtDelta:     LongInt);   {Greenwich mean time}
   END;
   UnsignedWide =          {Microseconds procedure return type}
   PACKED RECORD
   hi:   longInt;       {high-order 32 bits}
   lo:   longInt;       {low-order 32 bits}
   END;
Routines
Getting the Current Date and Time
FUNCTION ReadDateTime		(VAR time: LongInt) : OSErr;
PROCEDURE GetDateTime 		(VAR secs: LongInt);
PROCEDURE GetTime 		(VAR d: DateTimeRec);
Setting the Current Date and Time
FUNCTION SetDateTime		(time: LongInt) : OSErr;
PROCEDURE SetTime		(d: DateTimeRec);
Converting Between Date-Time Formats
{each procedure has two spellings, see Table 4-4 for the alternate spelling}
PROCEDURE SecondsToDate 	(secs: LongInt; VAR d: DateTimeRec);
PROCEDURE DateToSeconds 	(d: DateTimeRec; VAR secs: LongInt);
Converting Between Long Date-Time Formats
{each procedure has two spellings, see Table 4-4 for the alternate spelling}
PROCEDURE LongSecondsToDate	(VAR lSecs: LongDateTime;
				VAR lDate: LongDateRec);
PROCEDURE LongDateToSeconds	(lDate: LongDateRec; VAR lSecs: LongDateTime);
Modifying and Verifying Long Date-Time Records
FUNCTION ToggleDate		(VAR lSecs: LongDateTime; field: LongDateField;
				delta: DateDelta; ch: Integer;
				params: TogglePB): ToggleResults;
FUNCTION ValidDate		(vDate: LongDateRec; flags: LongInt;
				VAR newSecs: LongDateTime): Integer;
Reading and Writing Location Data
PROCEDURE ReadLocation		(VAR loc: MachineLocation);
PROCEDURE WriteLocation		(VAR loc: MachineLocation);
Determining the Measurement System
{this function has two spellings, see Table 4-4 for the alternate spelling}
FUNCTION IsMetric:Boolean;
Measuring Time
PROCEDURE Microseconds		(VAR microTickCount UnsignedWide);
C Summary
Constants
enum
{
   /*date equates for ToggleDate control bits*/
   validDateFields      = -1,       /*date fields are valid*/
   genCdevRangeBit      = 27,       /*restrict date/time to range used by */
                                    /* General Controls control panel*/
   togDelta12HourBit    = 28,       /*if toggling hour up/down, restrict */
                                    /* to 12-hour range*/
   togCharZCycleBit     = 29,       /*modifier for TogChar12HourBit to */
                                    /* accept hours 0..11 only*/
   togChar12HourBit     = 30,       /*if toggling hour by char, accept */
                                    /* hours 1..12 only*/
   smallDateBit         = 31,       /*restrict valid date/time to range */
                                    /* of Time global*/
   /*long date-time record field masks*/
   eraMask              = 0x0001,   /*era*/
   yearMask             = 0x0002,   /*year*/
   monthMask            = 0x0004,   /*day*/
   dayMask              = 0x0008,   /*month*/
   hourMask             = 0x0010,   /*hour*/
   minuteMask           = 0x0020,   /*minute*/
   secondMask           = 0x0040,   /*second*/
   dayOfWeekMask        = 0x0080,   /*day of the week*/
   dayOfYearMask        = 0x0100,   /*day of the year*/
   weekOfYearMask       = 0x0200,   /*week of the year*/
   pmMask               = 0x0400    /*evening (P.M.)*/
};
enum
{
   /*default value for togFlags field in the toggle parameter block and */
   /* default value for the flags parameter passed to the Verify function*/
   dateStdMask          = 0x007F,   /*default value for checking era */
                                    /* through second fields*/
};
Data Types
struct DateTimeRec         /*date-time record*/
{
   short       year;       /*year*/
   short       month;      /*month*/
   short       day;        /*day of the month*/
   short       hour;       /*hour*/
   short       minute;     /*minute*/
   short       second;     /*second*/
   short       dayOfWeek;  /*day of the week*/
};
typedef struct DateTimeRec DateTimeRec;
enum                       /*long date field enumeration*/
{
   eraField, yearField, monthField, dayField, hourField, minuteField,
   secondField,dayOfWeekField, dayOfYearField, weekOfYearField, pmField,
   res1Field, res2Field, res3Field
};
typedef unsigned char LongDateField;
typedef comp LongDateTime;    /*date and time in 64-bit SANE comp format*/
union LongDateCvt             /*long date-time conversion record*/
{
   comp     c;                /*copy field into a LongDateTime variable*/
   struct
   {
      long  lHigh;            /*high-order 32 bits*/
      long  lLow;             /*low-order 32 bits*/
   } hl;
};
typedef union LongDateCvt LongDateCvt;
union LongDateRec             /*long date-time record*/
{
   struct
   {
      short era;              /*era*/
      short year;             /*year*/
      short month;            /*month*/
      short day;              /*day of the month*/
      short hour;             /*hour*/
      short minute;           /*minute*/
      short second;           /*second*/
      short dayOfWeek;        /*day of the week*/
      short dayOfYear;        /*day of the year*/
      short weekOfYear;       /*week of the year*/
      short pm;               /*half of day--0 for morning, 1 for evening*/
      short res1;             /*reserved*/
      short res2;             /*reserved*/
      short res3;             /*reserved*/
   } ld;
   short list[14];            /*index by LongDateField*/
   struct
   {
      short       eraAlt;     /*era*/
      DateTimeRec oldDate;    /*date-time record*/
   } od;
};
typedef union LongDateRec LongDateRec;
struct TogglePB               /*toggle parameter block*/
{
   long     togFlags;         /*flags*/
   ResType  amChars;          /*from 'itl0' resource, but made uppercase*/
   ResType  pmChars;          /*from 'itl0' resource, but made uppercase*/
   long     reserved[4];      /*reserved*/
};
typedef struct TogglePB TogglePB;
typedef short ToggleResults;  /*ToggleDate function return type*/
typedef char DateDelta;       /*ToggleDate function delta field type*/
struct MachineLocation        /*geographic location record*/
{
   Fract    latitude;         /*latitude*/
   Fract    longitude;        /*longitude*/
   union
   {
      char  dlsDelta;         /*daylight saving time*/
      long  gmtDelta;         /*Greenwich mean time*/
   } gmtFlags;
};
typedef struct MachineLocation MachineLocation;
struct UnsignedWide           /*Microseconds procedure return type*/
{
   unsigned long     hi;      /*high-order 32 bits*/
   unsigned long     lo;      /*high-order 32 bits*/
};
typedef struct UnsignedWide UnsignedWide;
Routines
Getting the Current Date and Time
pascal OSErr ReadDateTime	(unsigned long *time);
pascal void GetDateTime 	(unsigned long *secs);
pascal void GetTime 		(DateTimeRec *d);
Setting the Current Date and Time
pascal OSErr SetDateTime	(unsigned long time);
pascal void SetTime		(const DateTimeRec *d);
Converting Between Date-Time Formats
{each procedure has two spellings, see Table 4-4 for the alternate spelling}
pascal void SecondsToDate	(unsigned long secs, DateTimeRec *d);
pascal void DateToSeconds 	(const DateTimeRec *d, unsigned long *secs);
Converting Between Long Date-Time Formats
{each procedure has two spellings, see Table 4-4 for the alternate spelling}
pascal void LongSecondsToDate
   				(LongDateTime *lSecs, LongDateRec *lDate);
pascal void LongDateToSeconds
				(const LongDateRec *lDate, LongDateTime *lSecs);
Modifying and Verifying Long Date-Time Records
pascal ToggleResults ToggleDate
				(LongDateTime *lSecs, LongDateField field,
				DateDelta delta, short ch,
				const TogglePB *params);
pascal short ValidDate		(const LongDateRec vDate, long flags,
 				LongDateTime *newSecs);
Reading and Writing Location Data
pascal void ReadLocation	(MachineLocation *loc);
pascal void WriteLocation	(MachineLocation *loc);
Determining the Measurement System
{this functiosn has two spellings, see Table 4-4 for the alternate spelling}
pascal Boolean IsMetric		(void);
Measuring Time
pascal void Microseconds	(UnsignedWide *microTickCount);
Assembly-Language Summary
Data Structures
Date-Time Record
| 0 | dtYear | word | year | 
| 2 | dtMonth | word | month | 
| 4 | dtDay | word | day of the month | 
| 6 | dtHour | word | hour | 
| 8 | dtMinute | word | minute | 
| 10 | dtSecond | word | second | 
| 12 | dtDayOfWeek | word | day of the week | 
Long Date Field Enumeration
| 0 | eraField | byte | era | 
| 1 | yearField | byte | year | 
| 2 | monthField | byte | month | 
| 3 | dayField | byte | day of the month | 
| 4 | hourField | byte | hour | 
| 5 | minuteField | byte | minute | 
| 6 | secondField | byte | second | 
| 7 | dayOfWeekField | byte | day of the week | 
| 8 | dayOfYearField | byte | day of the year | 
| 9 | weekOfYearField | byte | week of the year  | 
| 10 | pmField | byte | pm | 
| 11 | res1Field | byte | reserved | 
| 12 | res2Field | byte | reserved | 
| 13 | res3Field | byte | reserved | 
Long Date-Time Value
| 0 | highLong | long | high-order 32 bits | 
| 4 | lowLong | long | low-order 32 bits | 
Long Date-Time Record
| 0 | era | word | era | 
| 2 | year | word | year | 
| 4 | month | word | month | 
| 6 | day | word | day of the month | 
| 8 | hour | word | hour | 
| 10 | minute | word | minute | 
| 12 | second | word | second | 
| 14 | dayOfWeek | word | day of the week | 
| 16 | dayOfYear | word | day of the year | 
| 18 | weekOfYear | word | week of the year | 
| 20 | pm | word | half of day, morning or evening | 
| 22 | ldReserved | 6 bytes | reserved | 
| 0 | latitude | long | latitude | 
| 4 | longitude | long | longitude | 
| 8 | dlsDelta | byte | daylight savings time | 
| 9 | gmtDelta | 3 bytes | Greenwich mean time | 
Geographic Location Record
Toggle Parameter Block
| 0 | togFlags | long | flags | 
| 2 | amChars | word | ResType from 'itl0' made uppercase | 
| 4 | pmChars | word | ResType from 'itl0' made uppercase | 
| 6 | reserved | word | reserved | 
Unsigned Wide Record
| 0 | hi | long | high-order 32 bits | 
| 4 | lo | long | low-order 32 bits | 
Global Variables
| Time | The number of seconds since midnight, January 1, 1904 | 
Result Codes
| toggleErr5 | 9 | Reserved | 
| toggleErr4 | 8 | Reserved | 
| toggleErr3 | 7 | Reserved | 
| toggleOutOfRange | 7 | Out of range (synonym for toggleErr3) | 
| toggleBadNum | 6 | Tried to use character as number | 
| toggleUnknown | 5 | Unknown error | 
| toggleBadChar | 4 | Invalid character | 
| toggleBadDelta | 3 | Invalid delta value | 
| toggleBadField | 2 | Invalid field number | 
| toggleOK | 1 | No error | 
| toggleUndefined | 0 | Undefined error | 
| noErr | 0 | No error | 
| clkRdErr | -85 | Unable to read clock | 
| clkWrErr | -86 | Time written did not verify |