along with GNU Emacs; see the file COPYING. If not, write to
the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
-#ifdef NEED_TIME_H
-
-/* _h_BSDTYPES is checked because on ISC unix, socket.h includes
- both time.h and sys/time.h, and the later file is protected
- from repeated inclusion. We just hope that other systems will
- use this guard either not at all, or similarly. */
-#ifndef _h_BSDTYPES
+#ifdef TIME_WITH_SYS_TIME
+#include <sys/time.h>
#include <time.h>
-#endif /* _h_BSDTYPES */
-#else /* ! defined (NEED_TIME_H) */
-#ifdef HAVE_TIMEVAL
+#else
+#ifdef HAVE_SYS_TIME_H
#include <sys/time.h>
-#endif /* ! defined (HAVE_TIMEVAL) */
-#endif /* ! defined (NEED_TIME_H) */
+#else
+#include <time.h>
+#endif
+#endif
+
+/* SVr4 doesn't actually declare this in its #include files. */
+#ifdef USG5_4
+extern long timezone;
+#endif
+
+#ifdef VMS
+#ifdef VAXC
+#include "vmstime.h"
+#endif
+#endif
\f
/* EMACS_TIME is the type to use to represent temporal intervals -
struct timeval on some systems, int on others. It can be passed as
- the timeout argument to the select () system call.
+ the timeout argument to the select system call.
EMACS_SECS (TIME) is an rvalue for the seconds component of TIME.
EMACS_SET_SECS (TIME, SECONDS) sets that to SECONDS.
EMACS_HAS_USECS is defined iff EMACS_TIME has a usecs component.
- EMACS_USECS (TIME) is an rvalue for the milliseconds component of TIME.
- This returns zero if EMACS_TIME doesn't have a milliseconds component.
- EMACS_SET_USECS (TIME, MILLISECONDS) sets that to MILLISECONDS.
- This does nothing if EMACS_TIME doesn't have a milliseconds component.
+ EMACS_USECS (TIME) is an rvalue for the microseconds component of TIME.
+ This returns zero if EMACS_TIME doesn't have a microseconds component.
+ EMACS_SET_USECS (TIME, MICROSECONDS) sets that to MICROSECONDS.
+ This does nothing if EMACS_TIME doesn't have a microseconds component.
EMACS_SET_SECS_USECS (TIME, SECS, USECS) sets both components of TIME.
#ifdef HAVE_TIMEVAL
+#define EMACS_HAS_USECS
+
#define EMACS_TIME struct timeval
#define EMACS_SECS(time) ((time).tv_sec + 0)
#define EMACS_USECS(time) ((time).tv_usec + 0)
#define EMACS_SET_SECS(time, seconds) ((time).tv_sec = (seconds))
-#define EMACS_SET_USECS(time, milliseconds) ((time).tv_usec = (milliseconds))
+#define EMACS_SET_USECS(time, microseconds) ((time).tv_usec = (microseconds))
#define EMACS_GET_TIME(time) \
{ \
expands to a statement which stores information about the current
time zone in its arguments.
- *OFFSET is set to the number of minutes west of Greenwich at which
+ *OFFSET is set to the number of minutes EAST of Greenwich at which
the site's time zone is located. This should describe the offset
to standard time only; if some sort of daylight savings time is in
effect, that should not affect this value. Note that the tm_gmtoff
#ifndef EMACS_CURRENT_TIME_ZONE
+/* System V derivatives have a timezone global variable. */
+#if defined(USG) || defined(VMS)
+#define EMACS_GET_TZ_OFFSET(offset) \
+ do { \
+ tzset (); \
+ *(offset) = timezone; \
+ } while (0)
+#endif
+
/* If we have timeval, then we have gettimeofday; that's half the battle. */
-#ifdef HAVE_TIMEVAL
-#define EMACS_GET_TZ_OFFSET_AND_SAVINGS(offset, savings_flag) \
+#if defined (HAVE_TIMEVAL) && !defined (EMACS_GET_TZ_OFFSET)
+#define EMACS_GET_TZ_OFFSET(offset) \
do { \
struct timeval dummy; \
struct timezone zoneinfo; \
\
gettimeofday (&dummy, &zoneinfo); \
- *(offset) = zoneinfo.tz_minuteswest; \
- *(savings_flag) = zoneinfo.tz_dsttime; \
+ *(offset) = -zoneinfo.tz_minuteswest; \
} while (0)
#endif /* ! defined (HAVE_TIMEVAL) */
-
-/* The following sane systems have a tzname array. The timezone() function
+/* The following sane systems have a tzname array. The timezone function
is a stupid idea; timezone names can only be determined geographically,
not by Greenwich offset. */
-#if defined (ultrix) || defined (hpux) || defined (_AIX)
+#if defined (ultrix) || defined (hpux) || defined (_AIX) || defined (USG) || defined(VMS)
#define EMACS_GET_TZ_NAMES(standard, savings) \
do { \
#else /* ! defined (ultrix) || defined (hpux) || defined (_AIX) */
/* If we are running SunOS, Mt. Xinu BSD, or MACH 2.5, these systems have a
- timezone() function. */
-#if (defined (hp9000) && ! defined (hpux) && defined (unix)) || defined (MACH) || defined (sun)
+ timezone function. */
+#if (defined (hp9000) && ! defined (hpux) && defined (unix)) || defined (MACH) || defined (sun) || defined (NeXT)
#define EMACS_GET_TZ_NAMES(standard, savings) \
do { \
#endif /* ! defined (ultrix) || defined (hpux) || defined (_AIX) */
/* If we can get all the information we need, let's define the macro! */
-#if defined (EMACS_GET_TZ_OFFSET_AND_SAVINGS) && defined (EMACS_GET_TZ_NAMES)
+#if defined (EMACS_GET_TZ_OFFSET) && defined (EMACS_GET_TZ_NAMES)
#define EMACS_CURRENT_TIME_ZONE(offset, savings_flag, standard, savings)\
- do { \
- EMACS_GET_TZ_OFFSET_AND_SAVINGS (offset, savings_flag); \
+ do { \
+ EMACS_TIME t; \
+ long secs; \
+ struct tm *tmp; \
+ \
+ EMACS_GET_TIME (t); \
+ secs = EMACS_SECS (t); \
+ tmp = localtime (&secs); \
+ *(savings_flag) = tmp->tm_isdst; \
+ \
+ EMACS_GET_TZ_OFFSET (offset); \
EMACS_GET_TZ_NAMES (standard, savings); \
} while (0)
-
-#endif /* ! defined (EMACS_GET_TZ_OFFSET_AND_SAVINGS) && defined (EMACS_GET_TZ_NAMES) */
+#endif /* ! defined (EMACS_GET_TZ_OFFSET) && defined (EMACS_GET_TZ_NAMES) */
#endif /* EMACS_CURRENT_TIME_ZONE */