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 */