210 lines
5.1 KiB
C
210 lines
5.1 KiB
C
/*******************************************************************
|
|
* Pilot Software
|
|
*
|
|
* Copyright (c) 1995-1997, Palm Computing Inc., All Rights Reserved
|
|
*
|
|
*-------------------------------------------------------------------
|
|
* FileName:
|
|
* DateTime.h
|
|
*
|
|
* Description:
|
|
* Date and Time calculations
|
|
*
|
|
* History:
|
|
* 1/19/95 rsf - Created by Roger Flores
|
|
*
|
|
*
|
|
*******************************************************************/
|
|
|
|
#ifndef __DATETIME_H__
|
|
#define __DATETIME_H__
|
|
|
|
|
|
typedef DWord time_t;
|
|
|
|
typedef struct {
|
|
SWord second;
|
|
SWord minute;
|
|
SWord hour;
|
|
SWord day;
|
|
SWord month;
|
|
SWord year;
|
|
SWord weekDay; // Days since Sunday (0 to 6)
|
|
} DateTimeType;
|
|
|
|
typedef DateTimeType * DateTimePtr;
|
|
|
|
|
|
// This is the time format. Times are treated as words so don't
|
|
// change the order of the members in this structure.
|
|
//
|
|
typedef struct {
|
|
Byte hours;
|
|
Byte minutes;
|
|
} TimeType;
|
|
|
|
typedef TimeType * TimePtr;
|
|
|
|
#define noTime -1 // The entire TimeType is -1 if there isn't a time.
|
|
|
|
|
|
// This is the date format. Dates are treated as words so don't
|
|
// change the order of the members in this structure.
|
|
//
|
|
typedef struct {
|
|
Word year :7; // years since 1904 (MAC format)
|
|
Word month :4;
|
|
Word day :5;
|
|
} DateType;
|
|
|
|
typedef DateType * DatePtr;
|
|
|
|
|
|
/************************************************************
|
|
* Date Time Constants
|
|
*************************************************************/
|
|
|
|
// Maximum lengths of strings return by the date and time formating
|
|
// routine DateToAscii and TimeToAscii.
|
|
#define timeStringLength 9
|
|
#define dateStringLength 9
|
|
#define longDateStrLength 15
|
|
|
|
|
|
#define firstYear 1904
|
|
#define numberOfYears 128
|
|
#define lastYear (firstYear + numberOfYears - 1)
|
|
|
|
|
|
|
|
// Constants for time calculations
|
|
// Could change these from xIny to yPerX
|
|
#define minutesInSeconds 60
|
|
#define hoursInMinutes 60
|
|
#define hoursInSeconds (hoursInMinutes * minutesInSeconds)
|
|
#define hoursPerDay 24
|
|
//#define daysInSeconds ((long)(hoursPerDay) * ((long)hoursInSeconds))
|
|
#define daysInSeconds (0x15180) // cc bug
|
|
|
|
#define daysInWeek 7
|
|
#define daysInYear 365
|
|
#define daysInLeapYear 366
|
|
#define daysInFourYears (daysInLeapYear + 3 * daysInYear)
|
|
|
|
#define monthsInYear 12
|
|
|
|
#define maxDays ((ULong) numberOfYears / 4 * daysInFourYears - 1)
|
|
#define maxSeconds ((ULong) maxDays * daysInSeconds)
|
|
#define maxTime 0x
|
|
|
|
// Values returned by DayOfWeek routine.
|
|
#define sunday 0
|
|
#define monday 1
|
|
#define tuesday 2
|
|
#define wednesday 3
|
|
#define thursday 4
|
|
#define friday 5
|
|
#define saturday 6
|
|
|
|
// Months of the year
|
|
#define january 1
|
|
#define february 2
|
|
#define march 3
|
|
#define april 4
|
|
#define may 5
|
|
#define june 6
|
|
#define july 7
|
|
#define august 8
|
|
#define september 9
|
|
#define october 10
|
|
#define november 11
|
|
#define december 12
|
|
|
|
|
|
// Values returned by DoyOfMonth routine.
|
|
typedef enum {
|
|
dom1stSun, dom1stMon, dom1stTue, dom1stWen, dom1stThu, dom1stFri, dom1stSat,
|
|
dom2ndSun, dom2ndMon, dom2ndTue, dom2ndWen, dom2ndThu, dom2ndFri, dom2ndSat,
|
|
dom3rdSun, dom3rdMon, dom3rdTue, dom3rdWen, dom3rdThu, dom3rdFri, dom3rdSat,
|
|
dom4thSun, dom4thMon, dom4thTue, dom4thWen, dom4thThu, dom4thFri, dom4thSat,
|
|
domLastSun, domLastMon, domLastTue, domLastWen, domLastThu, domLastFri,
|
|
domLastSat
|
|
} DayOfWeekType;
|
|
|
|
|
|
//************************************************************
|
|
//* Date and Time macros
|
|
//***********************************************************
|
|
|
|
// Convert a date in a DateType structure to an unsigned int.
|
|
#define DateToInt(date) (*(UInt *) &date)
|
|
|
|
|
|
// Convert a date in a DateType structure to an unsigned int.
|
|
#define TimeToInt(time) (*(Int *) &time)
|
|
|
|
|
|
|
|
//************************************************************
|
|
//* Date Time procedures
|
|
//************************************************************
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
|
|
void TimSecondsToDateTime(ULong seconds, DateTimePtr dateTimeP)
|
|
SYS_TRAP(sysTrapTimSecondsToDateTime);
|
|
|
|
ULong TimDateTimeToSeconds(DateTimePtr dateTimeP)
|
|
SYS_TRAP(sysTrapTimDateTimeToSeconds);
|
|
|
|
void TimAdjust(DateTimePtr dateTimeP, Long adjustment)
|
|
SYS_TRAP(sysTrapTimAdjust);
|
|
|
|
void TimeToAscii(Byte hours, Byte minutes, TimeFormatType timeFormat,
|
|
CharPtr pString)
|
|
SYS_TRAP(sysTrapTimeToAscii);
|
|
|
|
|
|
|
|
UInt DaysInMonth(UInt month, UInt year)
|
|
SYS_TRAP(sysTrapDaysInMonth);
|
|
|
|
UInt DayOfWeek (UInt month, UInt day, UInt year)
|
|
SYS_TRAP(sysTrapDayOfWeek);
|
|
|
|
UInt DayOfMonth (UInt month, UInt day, UInt year)
|
|
SYS_TRAP(sysTrapDayOfMonth);
|
|
|
|
|
|
|
|
// Date routines.
|
|
void DateSecondsToDate (ULong seconds, DatePtr date)
|
|
SYS_TRAP(sysTrapDateSecondsToDate);
|
|
|
|
void DateDaysToDate (ULong days, DatePtr date)
|
|
SYS_TRAP(sysTrapDateDaysToDate);
|
|
|
|
ULong DateToDays (DateType date)
|
|
SYS_TRAP(sysTrapDateToDays);
|
|
|
|
void DateAdjust (DatePtr dateP, Long adjustment)
|
|
SYS_TRAP(sysTrapDateAdjust);
|
|
|
|
void DateToAscii(Byte months, Byte days, Word years,
|
|
DateFormatType dateFormat, CharPtr pString)
|
|
SYS_TRAP(sysTrapDateToAscii);
|
|
|
|
void DateToDOWDMFormat(Byte months, Byte days, Word years,
|
|
DateFormatType dateFormat, CharPtr pString)
|
|
SYS_TRAP(sysTrapDateToDOWDMFormat);
|
|
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
|
|
#endif //__DATETIME_H__
|