1da2e3ebdSchin /*********************************************************************** 2da2e3ebdSchin * * 3da2e3ebdSchin * This software is part of the ast package * 4*b30d1939SAndy Fiddaman * Copyright (c) 1985-2011 AT&T Intellectual Property * 5da2e3ebdSchin * and is licensed under the * 6*b30d1939SAndy Fiddaman * Eclipse Public License, Version 1.0 * 77c2fbfb3SApril Chin * by AT&T Intellectual Property * 8da2e3ebdSchin * * 9da2e3ebdSchin * A copy of the License is available at * 10*b30d1939SAndy Fiddaman * http://www.eclipse.org/org/documents/epl-v10.html * 11*b30d1939SAndy Fiddaman * (with md5 checksum b35adb5213ca9657e911e9befb180842) * 12da2e3ebdSchin * * 13da2e3ebdSchin * Information and Software Systems Research * 14da2e3ebdSchin * AT&T Research * 15da2e3ebdSchin * Florham Park NJ * 16da2e3ebdSchin * * 17da2e3ebdSchin * Glenn Fowler <gsf@research.att.com> * 18da2e3ebdSchin * David Korn <dgk@research.att.com> * 19da2e3ebdSchin * Phong Vo <kpv@research.att.com> * 20da2e3ebdSchin * * 21da2e3ebdSchin ***********************************************************************/ 22da2e3ebdSchin #pragma prototyped 23da2e3ebdSchin /* 24da2e3ebdSchin * Glenn Fowler 25da2e3ebdSchin * AT&T Research 26da2e3ebdSchin * 27da2e3ebdSchin * time conversion support definitions 28da2e3ebdSchin */ 29da2e3ebdSchin 30da2e3ebdSchin #ifndef _TM_H 31da2e3ebdSchin #define _TM_H 32da2e3ebdSchin 33da2e3ebdSchin #define TM_VERSION 20070319L 34da2e3ebdSchin 35da2e3ebdSchin #include <ast.h> 36da2e3ebdSchin #include <times.h> 37da2e3ebdSchin 38da2e3ebdSchin #undef daylight 39da2e3ebdSchin 40da2e3ebdSchin #define tmset(z) tminit(z) 41da2e3ebdSchin #define tmisleapyear(y) (!((y)%4)&&(((y)%100)||!((((y)<1900)?((y)+1900):(y))%400))) 42da2e3ebdSchin 43da2e3ebdSchin #define TM_ADJUST (1<<0) /* local doesn't do leap secs */ 44da2e3ebdSchin #define TM_LEAP (1<<1) /* do leap seconds */ 45da2e3ebdSchin #define TM_UTC (1<<2) /* universal coordinated ref */ 46da2e3ebdSchin 47da2e3ebdSchin #define TM_PEDANTIC (1<<3) /* pedantic date parse */ 48da2e3ebdSchin #define TM_DATESTYLE (1<<4) /* date(1) style mmddHHMMccyy */ 49da2e3ebdSchin #define TM_SUBSECOND (1<<5) /* <something>%S => ...%S.%P */ 50da2e3ebdSchin 51da2e3ebdSchin #define TM_DST (-60) /* default minutes for DST */ 52da2e3ebdSchin #define TM_LOCALZONE (25 * 60) /* use local time zone offset */ 53da2e3ebdSchin #define TM_UTCZONE (26 * 60) /* UTC "time zone" */ 54da2e3ebdSchin #define TM_MAXLEAP 1 /* max leap secs per leap */ 55da2e3ebdSchin #define TM_WINDOW 69 /* century windowing guard year */ 56da2e3ebdSchin 57da2e3ebdSchin /* 58da2e3ebdSchin * these indices must agree with tm_dform[] 59da2e3ebdSchin */ 60da2e3ebdSchin 61da2e3ebdSchin #define TM_MONTH_ABBREV 0 62da2e3ebdSchin #define TM_MONTH 12 63da2e3ebdSchin #define TM_DAY_ABBREV 24 64da2e3ebdSchin #define TM_DAY 31 65da2e3ebdSchin #define TM_TIME 38 66da2e3ebdSchin #define TM_DATE 39 67da2e3ebdSchin #define TM_DEFAULT 40 68da2e3ebdSchin #define TM_MERIDIAN 41 69da2e3ebdSchin 70da2e3ebdSchin #define TM_UT 43 71da2e3ebdSchin #define TM_DT 47 72da2e3ebdSchin #define TM_SUFFIXES 51 73da2e3ebdSchin #define TM_PARTS 55 74da2e3ebdSchin #define TM_HOURS 62 75da2e3ebdSchin #define TM_DAYS 66 76da2e3ebdSchin #define TM_LAST 69 77da2e3ebdSchin #define TM_THIS 72 78da2e3ebdSchin #define TM_NEXT 75 79da2e3ebdSchin #define TM_EXACT 78 80da2e3ebdSchin #define TM_NOISE 81 81da2e3ebdSchin #define TM_ORDINAL 85 82da2e3ebdSchin #define TM_DIGITS 95 83da2e3ebdSchin #define TM_CTIME 105 84da2e3ebdSchin #define TM_DATE_1 106 85da2e3ebdSchin #define TM_INTERNATIONAL 107 86da2e3ebdSchin #define TM_RECENT 108 87da2e3ebdSchin #define TM_DISTANT 109 88da2e3ebdSchin #define TM_MERIDIAN_TIME 110 89da2e3ebdSchin #define TM_ERA 111 90da2e3ebdSchin #define TM_ERA_DATE 112 91da2e3ebdSchin #define TM_ERA_TIME 113 92da2e3ebdSchin #define TM_ERA_DEFAULT 114 93da2e3ebdSchin #define TM_ERA_YEAR 115 94da2e3ebdSchin #define TM_ORDINALS 116 95da2e3ebdSchin #define TM_FINAL 126 9634f9b3eeSRoland Mainz #define TM_WORK 129 97da2e3ebdSchin 9834f9b3eeSRoland Mainz #define TM_NFORM 132 99da2e3ebdSchin 100da2e3ebdSchin typedef struct /* leap second info */ 101da2e3ebdSchin { 102da2e3ebdSchin time_t time; /* the leap second event */ 103da2e3ebdSchin int total; /* inclusive total since epoch */ 104da2e3ebdSchin } Tm_leap_t; 105da2e3ebdSchin 106da2e3ebdSchin typedef struct /* time zone info */ 107da2e3ebdSchin { 108da2e3ebdSchin char* type; /* type name */ 109da2e3ebdSchin char* standard; /* standard time name */ 110da2e3ebdSchin char* daylight; /* daylight or summertime name */ 111da2e3ebdSchin short west; /* minutes west of GMT */ 112da2e3ebdSchin short dst; /* add to tz.west for DST */ 113da2e3ebdSchin } Tm_zone_t; 114da2e3ebdSchin 115da2e3ebdSchin typedef struct /* tm library readonly data */ 116da2e3ebdSchin { 117da2e3ebdSchin char** format; /* default TM_* format strings */ 11834f9b3eeSRoland Mainz unsigned char* lex; /* format lex type classes */ 119da2e3ebdSchin char* digit; /* output digits */ 120da2e3ebdSchin short* days; /* days in month i */ 121da2e3ebdSchin short* sum; /* days in months before i */ 122da2e3ebdSchin Tm_leap_t* leap; /* leap second table */ 123da2e3ebdSchin Tm_zone_t* zone; /* alternate timezone table */ 124da2e3ebdSchin } Tm_data_t; 125da2e3ebdSchin 126da2e3ebdSchin typedef struct /* tm library global info */ 127da2e3ebdSchin { 128da2e3ebdSchin char* deformat; /* TM_DEFAULT override */ 129da2e3ebdSchin int flags; /* flags */ 130da2e3ebdSchin char** format; /* current format strings */ 131da2e3ebdSchin Tm_zone_t* date; /* timezone from last tmdate() */ 132da2e3ebdSchin Tm_zone_t* local; /* local timezone */ 133da2e3ebdSchin Tm_zone_t* zone; /* current timezone */ 134da2e3ebdSchin } Tm_info_t; 135da2e3ebdSchin 136da2e3ebdSchin typedef struct Tm_s 137da2e3ebdSchin { 138da2e3ebdSchin int tm_sec; 139da2e3ebdSchin int tm_min; 140da2e3ebdSchin int tm_hour; 141da2e3ebdSchin int tm_mday; 142da2e3ebdSchin int tm_mon; 143da2e3ebdSchin int tm_year; 144da2e3ebdSchin int tm_wday; 145da2e3ebdSchin int tm_yday; 146da2e3ebdSchin int tm_isdst; 147da2e3ebdSchin uint32_t tm_nsec; 148da2e3ebdSchin Tm_zone_t* tm_zone; 149da2e3ebdSchin } Tm_t; 150da2e3ebdSchin 151da2e3ebdSchin #if _BLD_ast && defined(__EXPORT__) 152da2e3ebdSchin #define extern extern __EXPORT__ 153da2e3ebdSchin #endif 154da2e3ebdSchin #if !_BLD_ast && defined(__IMPORT__) 155da2e3ebdSchin #define extern extern __IMPORT__ 156da2e3ebdSchin #endif 157da2e3ebdSchin 158da2e3ebdSchin extern Tm_data_t* _tm_datap_; 159da2e3ebdSchin extern Tm_info_t* _tm_infop_; 160da2e3ebdSchin 161da2e3ebdSchin #define tm_data (*_tm_datap_) 162da2e3ebdSchin #define tm_info (*_tm_infop_) 163da2e3ebdSchin 164da2e3ebdSchin #undef extern 165da2e3ebdSchin 166da2e3ebdSchin #if _BLD_ast && defined(__EXPORT__) 167da2e3ebdSchin #define extern __EXPORT__ 168da2e3ebdSchin #endif 169da2e3ebdSchin 170da2e3ebdSchin extern time_t tmdate(const char*, char**, time_t*); 171da2e3ebdSchin extern int tmequiv(Tm_t*); 172da2e3ebdSchin extern Tm_t* tmfix(Tm_t*); 173da2e3ebdSchin extern char* tmfmt(char*, size_t, const char*, time_t*); 174da2e3ebdSchin extern char* tmform(char*, const char*, time_t*); 175da2e3ebdSchin extern int tmgoff(const char*, char**, int); 176da2e3ebdSchin extern void tminit(Tm_zone_t*); 177da2e3ebdSchin extern time_t tmleap(time_t*); 178da2e3ebdSchin extern int tmlex(const char*, char**, char**, int, char**, int); 179da2e3ebdSchin extern char** tmlocale(void); 180da2e3ebdSchin extern Tm_t* tmmake(time_t*); 181da2e3ebdSchin extern char* tmpoff(char*, size_t, const char*, int, int); 182da2e3ebdSchin extern time_t tmscan(const char*, char**, const char*, char**, time_t*, long); 183da2e3ebdSchin extern int tmsleep(time_t, time_t); 184da2e3ebdSchin extern time_t tmtime(Tm_t*, int); 185da2e3ebdSchin extern Tm_zone_t* tmtype(const char*, char**); 186da2e3ebdSchin extern int tmweek(Tm_t*, int, int, int); 187da2e3ebdSchin extern int tmword(const char*, char**, const char*, char**, int); 188da2e3ebdSchin extern Tm_zone_t* tmzone(const char*, char**, const char*, int*); 189da2e3ebdSchin 190da2e3ebdSchin #undef extern 191da2e3ebdSchin 192da2e3ebdSchin #endif 193