14887Schin /*********************************************************************** 24887Schin * * 34887Schin * This software is part of the ast package * 4*12068SRoger.Faulkner@Oracle.COM * Copyright (c) 1985-2010 AT&T Intellectual Property * 54887Schin * and is licensed under the * 64887Schin * Common Public License, Version 1.0 * 78462SApril.Chin@Sun.COM * by AT&T Intellectual Property * 84887Schin * * 94887Schin * A copy of the License is available at * 104887Schin * http://www.opensource.org/licenses/cpl1.0.txt * 114887Schin * (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) * 124887Schin * * 134887Schin * Information and Software Systems Research * 144887Schin * AT&T Research * 154887Schin * Florham Park NJ * 164887Schin * * 174887Schin * Glenn Fowler <gsf@research.att.com> * 184887Schin * David Korn <dgk@research.att.com> * 194887Schin * Phong Vo <kpv@research.att.com> * 204887Schin * * 214887Schin ***********************************************************************/ 224887Schin #pragma prototyped 234887Schin /* 244887Schin * Glenn Fowler 254887Schin * AT&T Research 264887Schin * 274887Schin * time conversion support definitions 284887Schin */ 294887Schin 304887Schin #ifndef _TM_H 314887Schin #define _TM_H 324887Schin 334887Schin #define TM_VERSION 20070319L 344887Schin 354887Schin #include <ast.h> 364887Schin #include <times.h> 374887Schin 384887Schin #undef daylight 394887Schin 404887Schin #define tmset(z) tminit(z) 414887Schin #define tmisleapyear(y) (!((y)%4)&&(((y)%100)||!((((y)<1900)?((y)+1900):(y))%400))) 424887Schin 434887Schin #define TM_ADJUST (1<<0) /* local doesn't do leap secs */ 444887Schin #define TM_LEAP (1<<1) /* do leap seconds */ 454887Schin #define TM_UTC (1<<2) /* universal coordinated ref */ 464887Schin 474887Schin #define TM_PEDANTIC (1<<3) /* pedantic date parse */ 484887Schin #define TM_DATESTYLE (1<<4) /* date(1) style mmddHHMMccyy */ 494887Schin #define TM_SUBSECOND (1<<5) /* <something>%S => ...%S.%P */ 504887Schin 514887Schin #define TM_DST (-60) /* default minutes for DST */ 524887Schin #define TM_LOCALZONE (25 * 60) /* use local time zone offset */ 534887Schin #define TM_UTCZONE (26 * 60) /* UTC "time zone" */ 544887Schin #define TM_MAXLEAP 1 /* max leap secs per leap */ 554887Schin #define TM_WINDOW 69 /* century windowing guard year */ 564887Schin 574887Schin /* 584887Schin * these indices must agree with tm_dform[] 594887Schin */ 604887Schin 614887Schin #define TM_MONTH_ABBREV 0 624887Schin #define TM_MONTH 12 634887Schin #define TM_DAY_ABBREV 24 644887Schin #define TM_DAY 31 654887Schin #define TM_TIME 38 664887Schin #define TM_DATE 39 674887Schin #define TM_DEFAULT 40 684887Schin #define TM_MERIDIAN 41 694887Schin 704887Schin #define TM_UT 43 714887Schin #define TM_DT 47 724887Schin #define TM_SUFFIXES 51 734887Schin #define TM_PARTS 55 744887Schin #define TM_HOURS 62 754887Schin #define TM_DAYS 66 764887Schin #define TM_LAST 69 774887Schin #define TM_THIS 72 784887Schin #define TM_NEXT 75 794887Schin #define TM_EXACT 78 804887Schin #define TM_NOISE 81 814887Schin #define TM_ORDINAL 85 824887Schin #define TM_DIGITS 95 834887Schin #define TM_CTIME 105 844887Schin #define TM_DATE_1 106 854887Schin #define TM_INTERNATIONAL 107 864887Schin #define TM_RECENT 108 874887Schin #define TM_DISTANT 109 884887Schin #define TM_MERIDIAN_TIME 110 894887Schin #define TM_ERA 111 904887Schin #define TM_ERA_DATE 112 914887Schin #define TM_ERA_TIME 113 924887Schin #define TM_ERA_DEFAULT 114 934887Schin #define TM_ERA_YEAR 115 944887Schin #define TM_ORDINALS 116 954887Schin #define TM_FINAL 126 9610898Sroland.mainz@nrubsig.org #define TM_WORK 129 974887Schin 9810898Sroland.mainz@nrubsig.org #define TM_NFORM 132 994887Schin 1004887Schin typedef struct /* leap second info */ 1014887Schin { 1024887Schin time_t time; /* the leap second event */ 1034887Schin int total; /* inclusive total since epoch */ 1044887Schin } Tm_leap_t; 1054887Schin 1064887Schin typedef struct /* time zone info */ 1074887Schin { 1084887Schin char* type; /* type name */ 1094887Schin char* standard; /* standard time name */ 1104887Schin char* daylight; /* daylight or summertime name */ 1114887Schin short west; /* minutes west of GMT */ 1124887Schin short dst; /* add to tz.west for DST */ 1134887Schin } Tm_zone_t; 1144887Schin 1154887Schin typedef struct /* tm library readonly data */ 1164887Schin { 1174887Schin char** format; /* default TM_* format strings */ 11810898Sroland.mainz@nrubsig.org unsigned char* lex; /* format lex type classes */ 1194887Schin char* digit; /* output digits */ 1204887Schin short* days; /* days in month i */ 1214887Schin short* sum; /* days in months before i */ 1224887Schin Tm_leap_t* leap; /* leap second table */ 1234887Schin Tm_zone_t* zone; /* alternate timezone table */ 1244887Schin } Tm_data_t; 1254887Schin 1264887Schin typedef struct /* tm library global info */ 1274887Schin { 1284887Schin char* deformat; /* TM_DEFAULT override */ 1294887Schin int flags; /* flags */ 1304887Schin char** format; /* current format strings */ 1314887Schin Tm_zone_t* date; /* timezone from last tmdate() */ 1324887Schin Tm_zone_t* local; /* local timezone */ 1334887Schin Tm_zone_t* zone; /* current timezone */ 1344887Schin } Tm_info_t; 1354887Schin 1364887Schin typedef struct Tm_s 1374887Schin { 1384887Schin int tm_sec; 1394887Schin int tm_min; 1404887Schin int tm_hour; 1414887Schin int tm_mday; 1424887Schin int tm_mon; 1434887Schin int tm_year; 1444887Schin int tm_wday; 1454887Schin int tm_yday; 1464887Schin int tm_isdst; 1474887Schin uint32_t tm_nsec; 1484887Schin Tm_zone_t* tm_zone; 1494887Schin } Tm_t; 1504887Schin 1514887Schin #if _BLD_ast && defined(__EXPORT__) 1524887Schin #define extern extern __EXPORT__ 1534887Schin #endif 1544887Schin #if !_BLD_ast && defined(__IMPORT__) 1554887Schin #define extern extern __IMPORT__ 1564887Schin #endif 1574887Schin 1584887Schin extern Tm_data_t* _tm_datap_; 1594887Schin extern Tm_info_t* _tm_infop_; 1604887Schin 1614887Schin #define tm_data (*_tm_datap_) 1624887Schin #define tm_info (*_tm_infop_) 1634887Schin 1644887Schin #undef extern 1654887Schin 1664887Schin #if _BLD_ast && defined(__EXPORT__) 1674887Schin #define extern __EXPORT__ 1684887Schin #endif 1694887Schin 1704887Schin extern time_t tmdate(const char*, char**, time_t*); 1714887Schin extern int tmequiv(Tm_t*); 1724887Schin extern Tm_t* tmfix(Tm_t*); 1734887Schin extern char* tmfmt(char*, size_t, const char*, time_t*); 1744887Schin extern char* tmform(char*, const char*, time_t*); 1754887Schin extern int tmgoff(const char*, char**, int); 1764887Schin extern void tminit(Tm_zone_t*); 1774887Schin extern time_t tmleap(time_t*); 1784887Schin extern int tmlex(const char*, char**, char**, int, char**, int); 1794887Schin extern char** tmlocale(void); 1804887Schin extern Tm_t* tmmake(time_t*); 1814887Schin extern char* tmpoff(char*, size_t, const char*, int, int); 1824887Schin extern time_t tmscan(const char*, char**, const char*, char**, time_t*, long); 1834887Schin extern int tmsleep(time_t, time_t); 1844887Schin extern time_t tmtime(Tm_t*, int); 1854887Schin extern Tm_zone_t* tmtype(const char*, char**); 1864887Schin extern int tmweek(Tm_t*, int, int, int); 1874887Schin extern int tmword(const char*, char**, const char*, char**, int); 1884887Schin extern Tm_zone_t* tmzone(const char*, char**, const char*, int*); 1894887Schin 1904887Schin #undef extern 1914887Schin 1924887Schin #endif 193