Mercurial > emacs
comparison src/systime.h @ 2921:37503f466755
Some time-handling patches from Paul Eggert:
* editfns.c (Fcurrent_time_zone): Take an optional argument specifying
what (absolute) time should be used to determine the current time zone.
Yield just offset and name of time zone, including DST correction.
Yield time zone offset in seconds, not minutes.
(lisp_time_argument, difftm): New functions.
(Fcurrent_time_string): Use lisp_time_argument.
* systime.h (EMACS_CURRENT_TIME_ZONE, EMACS_GET_TZ_OFFSET,
EMACS_GET_TZ_NAMES): Remove.
* config.h.in: Add HAVE_TM_ZONE.
author | Jim Blandy <jimb@redhat.com> |
---|---|
date | Thu, 20 May 1993 06:29:45 +0000 |
parents | ae964d7149a1 |
children | e94a593c3952 |
comparison
equal
deleted
inserted
replaced
2920:c47652dc3400 | 2921:37503f466755 |
---|---|
144 tv[1] = mtime; \ | 144 tv[1] = mtime; \ |
145 utimes ((path), tv); \ | 145 utimes ((path), tv); \ |
146 } | 146 } |
147 | 147 |
148 #endif /* ! defined (USE_UTIME) */ | 148 #endif /* ! defined (USE_UTIME) */ |
149 | |
150 | |
151 | |
152 /* EMACS_CURRENT_TIME_ZONE (int *OFFSET, int *SAVINGS_FLAG, | |
153 char *STANDARD_ABBR, char *SAVINGS_ABBR); | |
154 expands to a statement which stores information about the current | |
155 time zone in its arguments. | |
156 | |
157 *OFFSET is set to the number of minutes EAST of Greenwich at which | |
158 the site's time zone is located. This should describe the offset | |
159 to standard time only; if some sort of daylight savings time is in | |
160 effect, that should not affect this value. Note that the tm_gmtoff | |
161 member of the struct tm returned by localtime is adjusted for | |
162 daylight savings, so you don't want to use localtime to set | |
163 *OFFSET; gettimeofday does the right thing. | |
164 | |
165 *SAVINGS_FLAG is set to 1 if some sort of daylight savings time is | |
166 currently in effect, or 0 if no seasonal adjustment is currently | |
167 active. | |
168 | |
169 *STANDARD_ABBR points to an array of at least 10 characters, which | |
170 should be set to the standard abbreviation for the time zone name | |
171 when daylight savings time is not active. For example, EDT would | |
172 be appropriate for the Eastern time zone of the USA. | |
173 | |
174 *SAVINGS_ABBR points to an array of at least 10 characters, which | |
175 should be set to the standard abbreviation for the time zone name | |
176 when daylight savings time is active. For example, EST would be | |
177 appropriate for the Eastern time zone of the USA. | |
178 | |
179 If the operating system cannot provide all this information, then | |
180 this macro will not be defined. */ | |
181 | |
182 | |
183 /* The operating system configuration file can define | |
184 EMACS_CURRENT_TIME_ZONE. If not, we'll take a shot at it here. */ | |
185 | |
186 #ifndef EMACS_CURRENT_TIME_ZONE | |
187 | |
188 /* System V derivatives have a timezone global variable. */ | |
189 #if defined(USG) || defined(VMS) | |
190 #define EMACS_GET_TZ_OFFSET(offset) \ | |
191 do { \ | |
192 tzset (); \ | |
193 *(offset) = timezone; \ | |
194 } while (0) | |
195 #endif | |
196 | |
197 /* If we have timeval, then we have gettimeofday; that's half the battle. */ | |
198 #if defined (HAVE_TIMEVAL) && !defined (EMACS_GET_TZ_OFFSET) | |
199 #define EMACS_GET_TZ_OFFSET(offset) \ | |
200 do { \ | |
201 struct timeval dummy; \ | |
202 struct timezone zoneinfo; \ | |
203 \ | |
204 gettimeofday (&dummy, &zoneinfo); \ | |
205 *(offset) = -zoneinfo.tz_minuteswest; \ | |
206 } while (0) | |
207 #endif /* ! defined (HAVE_TIMEVAL) */ | |
208 | |
209 /* The following sane systems have a tzname array. The timezone function | |
210 is a stupid idea; timezone names can only be determined geographically, | |
211 not by Greenwich offset. */ | |
212 #if defined (ultrix) || defined (hpux) || defined (_AIX) || defined (USG) || defined(VMS) | |
213 | |
214 #define EMACS_GET_TZ_NAMES(standard, savings) \ | |
215 do { \ | |
216 extern char *tzname[2]; \ | |
217 strcpy ((standard), tzname[0]); \ | |
218 strcpy ((savings), tzname[1]); \ | |
219 } while (0) | |
220 | |
221 #else /* ! defined (ultrix) || defined (hpux) || defined (_AIX) */ | |
222 /* If we are running SunOS, Mt. Xinu BSD, or MACH 2.5, these systems have a | |
223 timezone function. */ | |
224 #if (defined (hp9000) && ! defined (hpux) && defined (unix)) || defined (MACH) || defined (sun) || defined (NeXT) | |
225 | |
226 #define EMACS_GET_TZ_NAMES(standard, savings) \ | |
227 do { \ | |
228 struct timeval dummy; \ | |
229 struct timezone zoneinfo; \ | |
230 extern char *timezone (); \ | |
231 \ | |
232 gettimeofday (&dummy, &zoneinfo); \ | |
233 strcpy ((standard), timezone (zoneinfo.tz_minuteswest, 0)); \ | |
234 strcpy ((savings), timezone (zoneinfo.tz_minuteswest, 1)); \ | |
235 } while (0) | |
236 | |
237 #endif /* ! (defined (hp9000) && ! defined (hpux) && defined (unix)) || defined (MACH) || defined (sun) */ | |
238 #endif /* ! defined (ultrix) || defined (hpux) || defined (_AIX) */ | |
239 | |
240 /* If we can get all the information we need, let's define the macro! */ | |
241 #if defined (EMACS_GET_TZ_OFFSET) && defined (EMACS_GET_TZ_NAMES) | |
242 | |
243 #define EMACS_CURRENT_TIME_ZONE(offset, savings_flag, standard, savings)\ | |
244 do { \ | |
245 EMACS_TIME t; \ | |
246 long secs; \ | |
247 struct tm *tmp; \ | |
248 \ | |
249 EMACS_GET_TIME (t); \ | |
250 secs = EMACS_SECS (t); \ | |
251 tmp = localtime (&secs); \ | |
252 *(savings_flag) = tmp->tm_isdst; \ | |
253 \ | |
254 EMACS_GET_TZ_OFFSET (offset); \ | |
255 EMACS_GET_TZ_NAMES (standard, savings); \ | |
256 } while (0) | |
257 #endif /* ! defined (EMACS_GET_TZ_OFFSET) && defined (EMACS_GET_TZ_NAMES) */ | |
258 | |
259 #endif /* EMACS_CURRENT_TIME_ZONE */ |