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