]>
Commit | Line | Data |
---|---|---|
b0d20a87 | 1 | /* Copyright (C) 1991, 92, 93, 94, 95, 96 Free Software Foundation, Inc. |
28f540f4 RM |
2 | This file is part of the GNU C Library. |
3 | ||
4 | The GNU C Library is free software; you can redistribute it and/or | |
5 | modify it under the terms of the GNU Library General Public License as | |
6 | published by the Free Software Foundation; either version 2 of the | |
7 | License, or (at your option) any later version. | |
8 | ||
9 | The GNU C Library is distributed in the hope that it will be useful, | |
10 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
12 | Library General Public License for more details. | |
13 | ||
14 | You should have received a copy of the GNU Library General Public | |
15 | License along with the GNU C Library; see the file COPYING.LIB. If | |
b0d20a87 | 16 | not, write to the Free Software Foundation, Inc., 675 Mass Ave, |
28f540f4 RM |
17 | Cambridge, MA 02139, USA. */ |
18 | ||
19 | /* | |
20 | * ANSI Standard: 4.12 DATE and TIME <time.h> | |
21 | */ | |
22 | ||
23 | #ifndef _TIME_H | |
24 | ||
25 | #if !defined(__need_time_t) && !defined(__need_clock_t) | |
26 | #define _TIME_H 1 | |
27 | #include <features.h> | |
28 | ||
29 | __BEGIN_DECLS | |
30 | ||
31 | #endif | |
32 | ||
33 | #ifdef _TIME_H | |
34 | /* Get size_t and NULL from <stddef.h>. */ | |
35 | #define __need_size_t | |
36 | #define __need_NULL | |
37 | #include <stddef.h> | |
38 | #endif /* <time.h> included. */ | |
39 | ||
40 | ||
41 | ||
42 | #ifdef _TIME_H | |
43 | /* Processor clock ticks per second. */ | |
44 | #define CLOCKS_PER_SEC 1 /* ??? */ | |
45 | ||
46 | #ifdef __USE_POSIX | |
47 | #define CLK_TCK 60 /* ??? */ | |
48 | #endif | |
49 | ||
50 | #endif /* <time.h> included. */ | |
51 | ||
52 | ||
53 | #if !defined(__clock_t_defined) && \ | |
54 | (defined(_TIME_H) || defined(__need_clock_t)) | |
55 | #define __clock_t_defined 1 | |
56 | ||
57 | /* Returned by `clock'. */ | |
58 | typedef long int clock_t; | |
59 | ||
60 | #endif /* clock_t not defined and <time.h> or need clock_t. */ | |
61 | #undef __need_clock_t | |
62 | ||
63 | #if !defined(__time_t_defined) && \ | |
64 | (defined(_TIME_H) || defined(__need_time_t)) | |
65 | #define __time_t_defined 1 | |
66 | ||
67 | #include <gnu/types.h> | |
68 | ||
69 | /* Returned by `time'. */ | |
70 | typedef __time_t time_t; | |
71 | ||
72 | #endif /* time_t not defined and <time.h> or need time_t. */ | |
73 | #undef __need_time_t | |
74 | ||
75 | ||
76 | #ifdef _TIME_H | |
77 | /* Used by other time functions. */ | |
78 | struct tm | |
79 | { | |
80 | int tm_sec; /* Seconds. [0-61] (2 leap seconds) */ | |
81 | int tm_min; /* Minutes. [0-59] */ | |
82 | int tm_hour; /* Hours. [0-23] */ | |
83 | int tm_mday; /* Day. [1-31] */ | |
84 | int tm_mon; /* Month. [0-11] */ | |
85 | int tm_year; /* Year - 1900. */ | |
86 | int tm_wday; /* Day of week. [0-6] */ | |
87 | int tm_yday; /* Days in year.[0-365] */ | |
88 | int tm_isdst; /* DST. [-1/0/1]*/ | |
89 | long int tm_gmtoff; /* Seconds west of UTC. */ | |
90 | __const char *tm_zone; /* Timezone abbreviation. */ | |
91 | }; | |
92 | ||
93 | #endif /* <time.h> included. */ | |
94 | ||
95 | ||
96 | #ifdef _TIME_H | |
97 | /* Time used by the program so far (user time + system time). | |
98 | The result / CLOCKS_PER_SECOND is program time in seconds. */ | |
99 | extern clock_t clock __P ((void)); | |
100 | ||
101 | /* Return the current time and put it in *TIMER if TIMER is not NULL. */ | |
102 | extern time_t time __P ((time_t *__timer)); | |
103 | ||
104 | /* Return the difference between TIME1 and TIME0. */ | |
105 | extern double difftime __P ((time_t __time1, time_t __time0)) | |
106 | __attribute__ ((__const__)); | |
107 | ||
108 | /* Return the `time_t' representation of TP and normalize TP. */ | |
109 | extern time_t mktime __P ((struct tm *__tp)); | |
110 | ||
111 | /* Subroutine of `mktime'. Return the `time_t' representation of TP and | |
112 | normalize TP, given that a `struct tm *' maps to a `time_t' as performed | |
80fd7387 | 113 | by FUNC. Keep track of next guess for time_t offset in *OFFSET. */ |
c2216480 RM |
114 | extern time_t __mktime_internal __P ((struct tm *__tp, |
115 | struct tm *(*__func) (const time_t *, | |
80fd7387 RM |
116 | struct tm *), |
117 | time_t *__offset)); | |
28f540f4 RM |
118 | |
119 | ||
120 | /* Format TP into S according to FORMAT. | |
121 | Write no more than MAXSIZE characters and return the number | |
122 | of characters written, or 0 if it would exceed MAXSIZE. */ | |
123 | extern size_t strftime __P ((char *__s, size_t __maxsize, | |
124 | __const char *__format, __const struct tm *__tp)); | |
125 | ||
126 | ||
127 | /* Return the `struct tm' representation of *TIMER | |
128 | in Universal Coordinated Time (aka Greenwich Mean Time). */ | |
129 | extern struct tm *gmtime __P ((__const time_t *__timer)); | |
130 | ||
131 | /* Return the `struct tm' representation | |
132 | of *TIMER in the local timezone. */ | |
133 | extern struct tm *localtime __P ((__const time_t *__timer)); | |
134 | ||
c2216480 RM |
135 | #ifdef __USE_REENTRANT |
136 | /* Return the `struct tm' representation of *TIMER in UTC, | |
137 | using *TP to store the result. */ | |
138 | extern struct tm *__gmtime_r __P ((__const time_t *__timer, | |
139 | struct tm *__tp)); | |
140 | extern struct tm *gmtime_r __P ((__const time_t *__timer, | |
141 | struct tm *__tp)); | |
142 | ||
143 | /* Return the `struct tm' representation of *TIMER in local time, | |
144 | using *TP to store the result. */ | |
145 | extern struct tm *__localtime_r __P ((__const time_t *__timer, | |
146 | struct tm *__tp)); | |
147 | extern struct tm *localtime_r __P ((__const time_t *__timer, | |
148 | struct tm *__tp)); | |
149 | #endif | |
150 | ||
151 | /* Compute the `struct tm' representation of *T, | |
152 | offset OFFSET seconds east of UTC, | |
153 | and store year, yday, mon, mday, wday, hour, min, sec into *TP. */ | |
154 | extern void __offtime __P ((__const time_t *__timer, | |
155 | long int __offset, | |
156 | struct tm *__TP)); | |
28f540f4 RM |
157 | |
158 | /* Return a string of the form "Day Mon dd hh:mm:ss yyyy\n" | |
159 | that is the representation of TP in this format. */ | |
160 | extern char *asctime __P ((__const struct tm *__tp)); | |
161 | ||
162 | /* Equivalent to `asctime(localtime(timer))'. */ | |
163 | extern char *ctime __P ((__const time_t *__timer)); | |
164 | ||
165 | ||
166 | /* Defined in localtime.c. */ | |
167 | extern char *__tzname[2]; /* Current timezone names. */ | |
168 | extern int __daylight; /* If it is daylight savings time. */ | |
169 | extern long int __timezone; /* Seconds west of UTC. */ | |
170 | ||
171 | /* Set time conversion information from the TZ environment variable. | |
172 | If TZ is not defined, a locale-dependent default is used. */ | |
173 | extern void __tzset __P ((void)); | |
174 | ||
175 | #ifdef __USE_POSIX | |
176 | /* Same as above. */ | |
177 | extern char *tzname[2]; | |
178 | ||
179 | /* Return the maximum length of a timezone name. | |
180 | This is what `sysconf (_SC_TZNAME_MAX)' does. */ | |
181 | extern long int __tzname_max __P ((void)); | |
182 | ||
183 | extern void tzset __P ((void)); | |
184 | #ifdef __OPTIMIZE__ | |
185 | #define tzset() __tzset() | |
186 | #endif /* Optimizing. */ | |
187 | #endif | |
188 | ||
189 | #ifdef __USE_SVID | |
190 | extern int daylight; | |
191 | extern long int timezone; | |
192 | ||
193 | /* Set the system time to *WHEN. | |
194 | This call is restricted to the superuser. */ | |
195 | extern int stime __P ((__const time_t *__when)); | |
196 | #endif | |
197 | ||
198 | ||
199 | /* Nonzero if YEAR is a leap year (every 4 years, | |
200 | except every 100th isn't, and every 400th is). */ | |
201 | #define __isleap(year) \ | |
202 | ((year) % 4 == 0 && ((year) % 100 != 0 || (year) % 400 == 0)) | |
203 | ||
204 | ||
205 | #ifdef __USE_MISC | |
206 | /* Miscellaneous functions many Unices inherited from the public domain | |
207 | localtime package. These are included only for compatibility. */ | |
208 | ||
209 | /* Like `mktime', but for TP represents Universal Time, not local time. */ | |
210 | extern time_t timegm __P ((struct tm *__tp)); | |
211 | ||
212 | /* Another name for `mktime'. */ | |
213 | extern time_t timelocal __P ((struct tm *__tp)); | |
214 | ||
215 | /* Return the number of days in YEAR. */ | |
216 | extern int dysize __P ((int __year)); | |
217 | #endif | |
218 | ||
219 | ||
7b3547eb RM |
220 | /* POSIX.4 structure for a time value. This is like a `struct timeval' but |
221 | has nanoseconds instead of microseconds. */ | |
222 | struct timespec | |
223 | { | |
224 | long int ts_sec; /* Seconds. */ | |
225 | long int ts_nsec; /* Nanoseconds. */ | |
226 | }; | |
227 | ||
228 | #ifdef __USE_POSIX | |
229 | /* Pause execution for a number of nanoseconds. */ | |
230 | extern int nanosleep __P ((__const struct timespec *__requested_time, | |
231 | struct timespec *__remaining)); | |
232 | #endif | |
233 | ||
234 | ||
28f540f4 RM |
235 | __END_DECLS |
236 | ||
237 | #endif /* <time.h> included. */ | |
238 | ||
239 | #endif /* <time.h> not already included. */ |