Mercurial > emacs
comparison src/systime.h @ 979:268c7b5da35b
*** empty log message ***
author | Jim Blandy <jimb@redhat.com> |
---|---|
date | Wed, 12 Aug 1992 15:19:32 +0000 |
parents | 431569b4466b |
children | d8d503897aa5 |
comparison
equal
deleted
inserted
replaced
978:431569b4466b | 979:268c7b5da35b |
---|---|
1 /* systerm.h - System-dependent definitions for time manipulations. | 1 /* systime.h - System-dependent definitions for time manipulations. |
2 Copyright (C) 1992 Free Software Foundation, Inc. | 2 Copyright (C) 1992 Free Software Foundation, Inc. |
3 | 3 |
4 This file is part of GNU Emacs. | 4 This file is part of GNU Emacs. |
5 | 5 |
6 GNU Emacs is free software; you can redistribute it and/or modify | 6 GNU Emacs is free software; you can redistribute it and/or modify |
23 both time.h and sys/time.h, and the later file is protected | 23 both time.h and sys/time.h, and the later file is protected |
24 from repeated inclusion. We just hope that other systems will | 24 from repeated inclusion. We just hope that other systems will |
25 use this guard either not at all, or similarly. */ | 25 use this guard either not at all, or similarly. */ |
26 #ifndef _h_BSDTYPES | 26 #ifndef _h_BSDTYPES |
27 #include <time.h> | 27 #include <time.h> |
28 #endif | 28 #endif /* _h_BSDTYPES */ |
29 #else /* not NEED_TIME_H */ | 29 #else /* ! defined (NEED_TIME_H) */ |
30 #ifdef HAVE_TIMEVAL | 30 #ifdef HAVE_TIMEVAL |
31 #include <sys/time.h> | 31 #include <sys/time.h> |
32 #endif /* HAVE_TIMEVAL */ | 32 #endif /* ! defined (HAVE_TIMEVAL) */ |
33 #endif /* not NEED_TIME_H */ | 33 #endif /* ! defined (NEED_TIME_H) */ |
34 | 34 |
35 | |
35 /* EMACS_TIME is the type to use to represent temporal intervals - | 36 /* EMACS_TIME is the type to use to represent temporal intervals - |
36 struct timeval on some systems, int on others. It can be passed as | 37 struct timeval on some systems, int on others. It can be passed as |
37 the timeout argument to the select () system call. | 38 the timeout argument to the select () system call. |
38 | 39 |
39 EMACS_SECS (TIME) is an rvalue for the seconds component of TIME. | 40 EMACS_SECS (TIME) is an rvalue for the seconds component of TIME. |
95 #define EMACS_TIME_NEG_P(time) \ | 96 #define EMACS_TIME_NEG_P(time) \ |
96 ((time).tv_sec < 0 \ | 97 ((time).tv_sec < 0 \ |
97 || ((time).tv_sec == 0 \ | 98 || ((time).tv_sec == 0 \ |
98 && (time).tv_usec < 0)) | 99 && (time).tv_usec < 0)) |
99 | 100 |
100 #else /* not def HAVE_TIMEVAL */ | 101 #else /* ! defined (HAVE_TIMEVAL) */ |
101 | 102 |
102 #define EMACS_TIME int | 103 #define EMACS_TIME int |
103 #define EMACS_SECS(time) (time) | 104 #define EMACS_SECS(time) (time) |
104 #define EMACS_SET_SECS(time, seconds) ((time) = (seconds)) | 105 #define EMACS_SET_SECS(time, seconds) ((time) = (seconds)) |
105 | 106 |
106 #define EMACS_GET_TIME(t) ((t) = time ((long *) 0)) | 107 #define EMACS_GET_TIME(t) ((t) = time ((long *) 0)) |
107 #define EMACS_ADD_TIME(dest, src1, src2) ((dest) = (src1) + (src2)) | 108 #define EMACS_ADD_TIME(dest, src1, src2) ((dest) = (src1) + (src2)) |
108 #define EMACS_SUB_TIME(dest, src1, src2) ((dest) = (src1) - (src2)) | 109 #define EMACS_SUB_TIME(dest, src1, src2) ((dest) = (src1) - (src2)) |
109 #define EMACS_TIME_NEG_P(t) ((t) < 0) | 110 #define EMACS_TIME_NEG_P(t) ((t) < 0) |
110 | 111 |
111 #endif /* def HAVE_TIMEVAL */ | 112 #endif /* ! defined (HAVE_TIMEVAL) */ |
112 | 113 |
113 #define EMACS_SET_SECS_USECS(time, secs, usecs) \ | 114 #define EMACS_SET_SECS_USECS(time, secs, usecs) \ |
114 (EMACS_SET_SECS (time, secs), EMACS_SET_USECS (time, usecs)) | 115 (EMACS_SET_SECS (time, secs), EMACS_SET_USECS (time, usecs)) |
115 | 116 |
116 #ifdef USE_UTIME | 117 #ifdef USE_UTIME |
121 tv[0] = EMACS_SECS (atime); \ | 122 tv[0] = EMACS_SECS (atime); \ |
122 tv[1] = EMACS_SECS (mtime); \ | 123 tv[1] = EMACS_SECS (mtime); \ |
123 utime ((path), tv); \ | 124 utime ((path), tv); \ |
124 } | 125 } |
125 | 126 |
126 #else | 127 #else /* ! defined (USE_UTIME) */ |
127 | 128 |
128 #define EMACS_SET_UTIMES(path, atime, mtime) \ | 129 #define EMACS_SET_UTIMES(path, atime, mtime) \ |
129 { \ | 130 { \ |
130 EMACS_TIME tv[2]; \ | 131 EMACS_TIME tv[2]; \ |
131 tv[0] = atime; \ | 132 tv[0] = atime; \ |
132 tv[1] = mtime; \ | 133 tv[1] = mtime; \ |
133 utimes ((path), tv); \ | 134 utimes ((path), tv); \ |
134 } | 135 } |
135 | 136 |
136 #endif | 137 #endif /* ! defined (USE_UTIME) */ |
138 | |
139 | |
140 | |
141 /* EMACS_CURRENT_TIME_ZONE (int *OFFSET, int *SAVINGS_FLAG, | |
142 char *STANDARD_ABBR, char *SAVINGS_ABBR); | |
143 expands to a statement which stores information about the current | |
144 time zone in its arguments. | |
145 | |
146 *OFFSET is set to the number of minutes west of Greenwich at which | |
147 the site's time zone is located. This should describe the offset | |
148 to standard time only; if some sort of daylight savings time is in | |
149 effect, that should not affect this value. Note that the tm_gmtoff | |
150 member of the struct tm returned by localtime is adjusted for | |
151 daylight savings, so you don't want to use localtime to set | |
152 *OFFSET; gettimeofday does the right thing. | |
153 | |
154 *SAVINGS_FLAG is set to 1 if some sort of daylight savings time is | |
155 currently in effect, or 0 if no seasonal adjustment is currently | |
156 active. | |
157 | |
158 *STANDARD_ABBR points to an array of at least 10 characters, which | |
159 should be set to the standard abbreviation for the time zone name | |
160 when daylight savings time is not active. For example, EDT would | |
161 be appropriate for the Eastern time zone of the USA. | |
162 | |
163 *SAVINGS_ABBR points to an array of at least 10 characters, which | |
164 should be set to the standard abbreviation for the time zone name | |
165 when daylight savings time is active. For example, EST would be | |
166 appropriate for the Eastern time zone of the USA. | |
167 | |
168 If the operating system cannot provide all this information, then | |
169 this macro will not be defined. */ | |
170 | |
171 | |
172 /* The operating system configuration file can define | |
173 EMACS_CURRENT_TIME_ZONE. If not, we'll take a shot at it here. */ | |
174 | |
175 #ifndef EMACS_CURRENT_TIME_ZONE | |
176 | |
177 /* If we have timeval, then we have gettimeofday; that's half the battle. */ | |
178 #ifdef HAVE_TIMEVAL | |
179 #define EMACS_GET_TZ_OFFSET_AND_SAVINGS(offset, savings_flag) \ | |
180 do { \ | |
181 struct timeval dummy; \ | |
182 struct timezone zoneinfo; \ | |
183 \ | |
184 gettimeofday (&dummy, &zoneinfo); \ | |
185 *(offset) = zoneinfo.tz_minuteswest; \ | |
186 *(savings_flag) = zoneinfo.tz_dsttime; \ | |
187 } while (0) | |
188 #endif /* ! defined (HAVE_TIMEVAL) */ | |
189 | |
190 | |
191 /* The following sane systems have a tzname array. The timezone() function | |
192 is a stupid idea; timezone names can only be determined geographically, | |
193 not by Greenwich offset. */ | |
194 #if defined (ultrix) || defined (hpux) || defined (_AIX) | |
195 | |
196 #define EMACS_GET_TZ_NAMES(standard, savings) \ | |
197 do { \ | |
198 extern char *tzname[2]; \ | |
199 strcpy ((standard), tzname[0]); \ | |
200 strcpy ((savings), tzname[1]); \ | |
201 } while (0) | |
202 | |
203 #else /* ! defined (ultrix) || defined (hpux) || defined (_AIX) */ | |
204 /* If we are running SunOS, Mt. Xinu BSD, or MACH 2.5, these systems have a | |
205 timezone() function. */ | |
206 #if (defined (hp9000) && ! defined (hpux) && defined (unix)) || defined (MACH) || defined (sun) | |
207 | |
208 #define EMACS_GET_TZ_NAMES(standard, savings) \ | |
209 do { \ | |
210 struct timeval dummy; \ | |
211 struct timezone zoneinfo; \ | |
212 extern char *timezone (); \ | |
213 \ | |
214 gettimeofday (&dummy, &zoneinfo); \ | |
215 strcpy ((standard), timezone (zoneinfo.tz_minuteswest, 0)); \ | |
216 strcpy ((savings), timezone (zoneinfo.tz_minuteswest, 1)); \ | |
217 } while (0) | |
218 | |
219 #endif /* ! (defined (hp9000) && ! defined (hpux) && defined (unix)) || defined (MACH) || defined (sun) */ | |
220 #endif /* ! defined (ultrix) || defined (hpux) || defined (_AIX) */ | |
221 | |
222 /* If we can get all the information we need, let's define the macro! */ | |
223 #if defined (EMACS_GET_TZ_OFFSET_AND_SAVINGS) && defined (EMACS_GET_TZ_NAMES) | |
224 | |
225 #define EMACS_CURRENT_TIME_ZONE(offset, savings_flag, standard, savings)\ | |
226 do { \ | |
227 EMACS_GET_TZ_OFFSET_AND_SAVINGS (offset, savings_flag); \ | |
228 EMACS_GET_TZ_NAMES (standard, savings); \ | |
229 } while (0) | |
230 | |
231 #endif /* ! defined (EMACS_GET_TZ_OFFSET_AND_SAVINGS) && defined (EMACS_GET_TZ_NAMES) */ | |
232 | |
233 #endif /* EMACS_CURRENT_TIME_ZONE */ |