annotate src/systime.h @ 771:943eaba38521

[xemacs-hg @ 2002-03-13 08:51:24 by ben] The big ben-mule-21-5 check-in! Various files were added and deleted. See CHANGES-ben-mule. There are still some test suite failures. No crashes, though. Many of the failures have to do with problems in the test suite itself rather than in the actual code. I'll be addressing these in the next day or so -- none of the test suite failures are at all critical. Meanwhile I'll be trying to address the biggest issues -- i.e. build or run failures, which will almost certainly happen on various platforms. All comments should be sent to ben@xemacs.org -- use a Cc: if necessary when sending to mailing lists. There will be pre- and post- tags, something like pre-ben-mule-21-5-merge-in, and post-ben-mule-21-5-merge-in.
author ben
date Wed, 13 Mar 2002 08:54:06 +0000
parents af57a77cbc92
children e65d9cf16707
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1 /* systime.h - System-dependent definitions for time manipulations.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2 Copyright (C) 1992, 1993, 1994 Free Software Foundation, Inc.
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 617
diff changeset
3 Copyright (C) 2001 Ben Wing.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5 This file is part of XEmacs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
7 XEmacs is free software; you can redistribute it and/or modify it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
8 under the terms of the GNU General Public License as published by the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
9 Free Software Foundation; either version 2, or (at your option) any
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
10 later version.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
11
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
12 XEmacs is distributed in the hope that it will be useful, but WITHOUT
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
15 for more details.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
16
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
17 You should have received a copy of the GNU General Public License
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
18 along with XEmacs; see the file COPYING. If not, write to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
20 Boston, MA 02111-1307, USA. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
21
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
22 /* Synched up with: FSF 19.30. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
23
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
24 #ifndef INCLUDED_systime_h_
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
25 #define INCLUDED_systime_h_
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
26
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
27 #ifdef TIME_WITH_SYS_TIME
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
28 # include <sys/time.h>
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
29 # include <time.h>
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
30 #else
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
31 # ifdef HAVE_SYS_TIME_H
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
32 # include <sys/time.h>
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
33 # else
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
34 # include <time.h>
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
35 # endif
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
36 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
37
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 617
diff changeset
38 #if defined (CYGWIN) || defined (LINUX)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 617
diff changeset
39 /* #### why don't other systems have problems with this? need this
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 617
diff changeset
40 for struct tms */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 617
diff changeset
41 # include <sys/times.h>
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 617
diff changeset
42 #endif
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 617
diff changeset
43
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
44 /* select() is supposed to be (Unix98) defined in sys/time.h,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
45 but FreeBSD and Irix 5 put it in unistd.h instead.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
46 If we have it, including it can't hurt. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
47 #ifdef HAVE_UNISTD_H
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
48 #include <unistd.h>
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
49 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
50
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
51 #ifdef WIN32_NATIVE
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
52
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
53 /* This defines struct timeval */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
54 #include <winsock.h>
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
55
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
56 struct timezone
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
57 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
58 int tz_minuteswest; /* minutes west of Greenwich */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
59 int tz_dsttime; /* type of dst correction */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
60 };
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
61
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
62 #ifdef HAVE_X_WINDOWS
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
63 /* Provides gettimeofday etc */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
64 #include <X11/Xw32defs.h>
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
65 #include <X11/Xos.h>
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
66 #else
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
67 /* X11R6 on NT provides the single parameter version of this command */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
68 void gettimeofday (struct timeval *, struct timezone *);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
69 #endif /* HAVE_X_WINDOWS */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
70
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
71 #endif /* WIN32_NATIVE */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
72
592
4f6ba8f1fb3d [xemacs-hg @ 2001-05-31 12:03:37 by adrian]
adrian
parents: 558
diff changeset
73 /* struct utimbuf */
4f6ba8f1fb3d [xemacs-hg @ 2001-05-31 12:03:37 by adrian]
adrian
parents: 558
diff changeset
74
460
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
75 #ifdef HAVE_UTIME
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
76 # include <utime.h>
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
77 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
78
592
4f6ba8f1fb3d [xemacs-hg @ 2001-05-31 12:03:37 by adrian]
adrian
parents: 558
diff changeset
79 #ifdef WIN32_NATIVE
4f6ba8f1fb3d [xemacs-hg @ 2001-05-31 12:03:37 by adrian]
adrian
parents: 558
diff changeset
80 # include <sys/utime.h>
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 617
diff changeset
81 #ifdef emacs
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 617
diff changeset
82 int mswindows_utime (Lisp_Object path, struct utimbuf *thymes);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 617
diff changeset
83 #endif
592
4f6ba8f1fb3d [xemacs-hg @ 2001-05-31 12:03:37 by adrian]
adrian
parents: 558
diff changeset
84 #endif
4f6ba8f1fb3d [xemacs-hg @ 2001-05-31 12:03:37 by adrian]
adrian
parents: 558
diff changeset
85
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
86 #if defined(HAVE_TZNAME) && !defined(WIN32_NATIVE) && !defined(CYGWIN)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
87 #ifndef tzname /* For SGI. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
88 extern char *tzname[]; /* RS6000 and others want it this way. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
89 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
90 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
91
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
92 /* On some configurations (hpux8.0, X11R4), sys/time.h and X11/Xos.h
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
93 disagree about the name of the guard symbol. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
94 #ifdef HPUX
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
95 #ifdef _STRUCT_TIMEVAL
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
96 #ifndef __TIMEVAL__
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
97 #define __TIMEVAL__
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
98 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
99 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
100 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
101
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
102 /* EMACS_TIME is the type to use to represent temporal intervals.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
103 At one point this was 'struct timeval' on some systems, int on others.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
104 But this is stupid. Other things than select() code like to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
105 manipulate time values, and so microsecond precision should be
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
106 maintained. Separate typedefs and conversion functions are provided
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
107 for select().
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
108
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
109 EMACS_SECS (TIME) is an rvalue for the seconds component of TIME.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
110 EMACS_SET_SECS (TIME, SECONDS) sets that to SECONDS.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
111
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
112 EMACS_USECS (TIME) is an rvalue for the microseconds component of TIME.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
113 EMACS_SET_USECS (TIME, MICROSECONDS) sets that to MICROSECONDS.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
114
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
115 Note that all times are returned in "normalized" format (i.e. the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
116 usecs value is in the range 0 <= value < 1000000) and are assumed
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
117 to be passed in in this format.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
118
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
119 EMACS_SET_SECS_USECS (TIME, SECS, USECS) sets both components of TIME.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
120
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
121 EMACS_GET_TIME (TIME) stores the current system time in TIME, which
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
122 should be an lvalue.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
123
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
124 set_file_times (PATH, ATIME, MTIME) changes the last-access and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
125 last-modification times of the file named PATH to ATIME and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
126 MTIME, which are EMACS_TIMEs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
127
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
128 EMACS_NORMALIZE_TIME (TIME) coerces TIME into normalized format.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
129
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
130 EMACS_ADD_TIME (DEST, SRC1, SRC2) adds SRC1 to SRC2 and stores the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
131 result in DEST. Either or both may be negative.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
132
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
133 EMACS_SUB_TIME (DEST, SRC1, SRC2) subtracts SRC2 from SRC1 and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
134 stores the result in DEST. Either or both may be negative.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
135
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
136 EMACS_TIME_NEG_P (TIME) is true iff TIME is negative.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
137
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
138 EMACS_TIME_EQUAL (TIME1, TIME2) is true iff TIME1 is the same as TIME2.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
139 EMACS_TIME_GREATER (TIME1, TIME2) is true iff TIME1 is greater than
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
140 TIME2.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
141 EMACS_TIME_EQUAL_OR_GREATER (TIME1, TIME2) is true iff TIME1 is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
142 greater than or equal to TIME2.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
143
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
144 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
145
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
146 #ifdef HAVE_TIMEVAL
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
147
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
148 #define EMACS_SELECT_TIME struct timeval
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
149 #define EMACS_TIME_TO_SELECT_TIME(time, select_time) ((select_time) = (time))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
150
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
151 #else /* not HAVE_TIMEVAL */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
152
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
153 struct timeval
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
154 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
155 long tv_sec; /* seconds */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
156 long tv_usec; /* microseconds */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
157 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
158
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
159 #define EMACS_SELECT_TIME int
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
160 #define EMACS_TIME_TO_SELECT_TIME(time, select_time) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
161 EMACS_TIME_TO_INT (time, select_time)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
162
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
163 #endif /* not HAVE_TIMEVAL */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
164
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
165 #define EMACS_TIME_TO_INT(time, intvar) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
166 do { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
167 EMACS_TIME tmptime = time; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
168 \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
169 if (tmptime.tv_usec > 0) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
170 (intvar) = tmptime.tv_sec + 1; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
171 else \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
172 (intvar) = tmptime.tv_sec; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
173 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
174
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
175 #define EMACS_TIME struct timeval
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
176 #define EMACS_SECS(time) ((time).tv_sec + 0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
177 #define EMACS_USECS(time) ((time).tv_usec + 0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
178 #define EMACS_SET_SECS(time, seconds) ((time).tv_sec = (seconds))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
179 #define EMACS_SET_USECS(time, microseconds) ((time).tv_usec = (microseconds))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
180
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
181 #if !defined (HAVE_GETTIMEOFDAY)
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
182 int gettimeofday (struct timeval *, void *);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
183 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
184
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
185 /* On SVR4, the compiler may complain if given this extra BSD arg. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
186 #ifdef GETTIMEOFDAY_ONE_ARGUMENT
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
187 #define EMACS_GETTIMEOFDAY(time) gettimeofday(time)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
188 #else
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
189 #define EMACS_GETTIMEOFDAY(time) gettimeofday(time,0)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
190 #endif
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
191
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
192 /* According to the Xt sources, some NTP daemons on some systems may
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
193 return non-normalized values. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
194 #define EMACS_GET_TIME(time) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
195 do { \
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
196 EMACS_GETTIMEOFDAY (&(time)); \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
197 EMACS_NORMALIZE_TIME (time); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
198 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
199
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
200 #define EMACS_NORMALIZE_TIME(time) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
201 do { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
202 while ((time).tv_usec >= 1000000) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
203 { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
204 (time).tv_usec -= 1000000; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
205 (time).tv_sec++; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
206 } \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
207 while ((time).tv_usec < 0) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
208 { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
209 (time).tv_usec += 1000000; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
210 (time).tv_sec--; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
211 } \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
212 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
213
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
214 #define EMACS_ADD_TIME(dest, src1, src2) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
215 do { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
216 (dest).tv_sec = (src1).tv_sec + (src2).tv_sec; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
217 (dest).tv_usec = (src1).tv_usec + (src2).tv_usec; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
218 EMACS_NORMALIZE_TIME (dest); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
219 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
220
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
221 #define EMACS_SUB_TIME(dest, src1, src2) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
222 do { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
223 (dest).tv_sec = (src1).tv_sec - (src2).tv_sec; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
224 (dest).tv_usec = (src1).tv_usec - (src2).tv_usec; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
225 EMACS_NORMALIZE_TIME (dest); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
226 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
227
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
228 #define EMACS_TIME_NEG_P(time) ((long)(time).tv_sec < 0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
229
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
230 #define EMACS_TIME_EQUAL(time1, time2) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
231 ((time1).tv_sec == (time2).tv_sec && \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
232 (time1).tv_usec == (time2).tv_usec)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
233
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
234 #define EMACS_TIME_GREATER(time1, time2) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
235 ((time1).tv_sec > (time2).tv_sec || \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
236 ((time1).tv_sec == (time2).tv_sec && \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
237 (time1).tv_usec > (time2).tv_usec))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
238
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
239 #define EMACS_TIME_EQUAL_OR_GREATER(time1, time2) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
240 ((time1).tv_sec > (time2).tv_sec || \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
241 ((time1).tv_sec == (time2).tv_sec && \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
242 (time1).tv_usec >= (time2).tv_usec))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
243
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
244 #define EMACS_SET_SECS_USECS(time, secs, usecs) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
245 (EMACS_SET_SECS (time, secs), EMACS_SET_USECS (time, usecs))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
246
592
4f6ba8f1fb3d [xemacs-hg @ 2001-05-31 12:03:37 by adrian]
adrian
parents: 558
diff changeset
247 #ifdef emacs
4f6ba8f1fb3d [xemacs-hg @ 2001-05-31 12:03:37 by adrian]
adrian
parents: 558
diff changeset
248 int set_file_times (Lisp_Object path, EMACS_TIME atime, EMACS_TIME mtime);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
249 void get_process_times (double *user_time, double *system_time,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
250 double *real_time);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 617
diff changeset
251 Intbyte *qxe_ctime (const time_t *value);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 617
diff changeset
252
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 617
diff changeset
253 #endif
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
254
611
38db05db9cb5 [xemacs-hg @ 2001-06-08 12:21:09 by ben]
ben
parents: 592
diff changeset
255 #ifdef WIN32_NATIVE
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
256
611
38db05db9cb5 [xemacs-hg @ 2001-06-08 12:21:09 by ben]
ben
parents: 592
diff changeset
257 /* setitimer emulation for Win32 (see win32.c) */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
258
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
259 struct itimerval
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
260 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
261 struct timeval it_value;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
262 struct timeval it_interval;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
263 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
264
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
265 #define ITIMER_REAL 1
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
266 #define ITIMER_PROF 2
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
267
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
268 #endif /* WIN32_NATIVE */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
269
611
38db05db9cb5 [xemacs-hg @ 2001-06-08 12:21:09 by ben]
ben
parents: 592
diff changeset
270 #if defined (WIN32_NATIVE) || defined (CYGWIN)
38db05db9cb5 [xemacs-hg @ 2001-06-08 12:21:09 by ben]
ben
parents: 592
diff changeset
271
38db05db9cb5 [xemacs-hg @ 2001-06-08 12:21:09 by ben]
ben
parents: 592
diff changeset
272 int mswindows_setitimer (int kind, const struct itimerval *itnew,
38db05db9cb5 [xemacs-hg @ 2001-06-08 12:21:09 by ben]
ben
parents: 592
diff changeset
273 struct itimerval *itold);
38db05db9cb5 [xemacs-hg @ 2001-06-08 12:21:09 by ben]
ben
parents: 592
diff changeset
274
38db05db9cb5 [xemacs-hg @ 2001-06-08 12:21:09 by ben]
ben
parents: 592
diff changeset
275 #endif /* defined (WIN32_NATIVE) || defined (CYGWIN) */
38db05db9cb5 [xemacs-hg @ 2001-06-08 12:21:09 by ben]
ben
parents: 592
diff changeset
276
38db05db9cb5 [xemacs-hg @ 2001-06-08 12:21:09 by ben]
ben
parents: 592
diff changeset
277 /* #### Move this comment elsewhere when we figure out the place.
38db05db9cb5 [xemacs-hg @ 2001-06-08 12:21:09 by ben]
ben
parents: 592
diff changeset
278
38db05db9cb5 [xemacs-hg @ 2001-06-08 12:21:09 by ben]
ben
parents: 592
diff changeset
279 "qxe" is a unique prefix used to identify encapsulations of standard
38db05db9cb5 [xemacs-hg @ 2001-06-08 12:21:09 by ben]
ben
parents: 592
diff changeset
280 library functions. We used to play pre-processing games but in
38db05db9cb5 [xemacs-hg @ 2001-06-08 12:21:09 by ben]
ben
parents: 592
diff changeset
281 general this leads to nothing but trouble because someone first
38db05db9cb5 [xemacs-hg @ 2001-06-08 12:21:09 by ben]
ben
parents: 592
diff changeset
282 encountering the code will have no idea that what appears to be a
38db05db9cb5 [xemacs-hg @ 2001-06-08 12:21:09 by ben]
ben
parents: 592
diff changeset
283 call to a library function has actually been redefined to be a call
38db05db9cb5 [xemacs-hg @ 2001-06-08 12:21:09 by ben]
ben
parents: 592
diff changeset
284 somewhere else. This is doubly true when the redefinition occurs
38db05db9cb5 [xemacs-hg @ 2001-06-08 12:21:09 by ben]
ben
parents: 592
diff changeset
285 in out-of-the way s+m files and only on certainly systems.
38db05db9cb5 [xemacs-hg @ 2001-06-08 12:21:09 by ben]
ben
parents: 592
diff changeset
286
617
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 611
diff changeset
287 The name "qxe" was chosen because it is a unique string that is not
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 611
diff changeset
288 going to be found anywhere else in the sources (unlike, for example,
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 611
diff changeset
289 the prefixes "xemacs" or "sys") and is easy to type. Alternative
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 611
diff changeset
290 names are certainly possible, and suggestions are welcome.
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 611
diff changeset
291
611
38db05db9cb5 [xemacs-hg @ 2001-06-08 12:21:09 by ben]
ben
parents: 592
diff changeset
292 By making the encapsulation explicit we might be making the code
38db05db9cb5 [xemacs-hg @ 2001-06-08 12:21:09 by ben]
ben
parents: 592
diff changeset
293 that uses is slightly less pretty, but this is more than compensated
38db05db9cb5 [xemacs-hg @ 2001-06-08 12:21:09 by ben]
ben
parents: 592
diff changeset
294 for by the huge increase in clarity.
38db05db9cb5 [xemacs-hg @ 2001-06-08 12:21:09 by ben]
ben
parents: 592
diff changeset
295
38db05db9cb5 [xemacs-hg @ 2001-06-08 12:21:09 by ben]
ben
parents: 592
diff changeset
296 "Standard library function" can refer to any function in any
38db05db9cb5 [xemacs-hg @ 2001-06-08 12:21:09 by ben]
ben
parents: 592
diff changeset
297 standard library. If we are explicitly changing the semantics
38db05db9cb5 [xemacs-hg @ 2001-06-08 12:21:09 by ben]
ben
parents: 592
diff changeset
298 (e.g. Mule-encapsulating), we should use an extended version of
38db05db9cb5 [xemacs-hg @ 2001-06-08 12:21:09 by ben]
ben
parents: 592
diff changeset
299 the prefix, e.g. perhaps "qxe_xlat_" for functions that Mule-
38db05db9cb5 [xemacs-hg @ 2001-06-08 12:21:09 by ben]
ben
parents: 592
diff changeset
300 encapsulate, or "qxe_retry_" for functions that automatically
38db05db9cb5 [xemacs-hg @ 2001-06-08 12:21:09 by ben]
ben
parents: 592
diff changeset
301 retry a system call interrupted by EINTR. In general, if there
38db05db9cb5 [xemacs-hg @ 2001-06-08 12:21:09 by ben]
ben
parents: 592
diff changeset
302 is no prefix extension, it means the function is trying to
38db05db9cb5 [xemacs-hg @ 2001-06-08 12:21:09 by ben]
ben
parents: 592
diff changeset
303 provide (more or less) the same semantics as the standard library
38db05db9cb5 [xemacs-hg @ 2001-06-08 12:21:09 by ben]
ben
parents: 592
diff changeset
304 function; but be aware that the reimplementation may be incomplete
38db05db9cb5 [xemacs-hg @ 2001-06-08 12:21:09 by ben]
ben
parents: 592
diff changeset
305 or differ in important respects. This is especially the case
38db05db9cb5 [xemacs-hg @ 2001-06-08 12:21:09 by ben]
ben
parents: 592
diff changeset
306 when attempts are made to implement Unix functions on MS Windows.
617
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 611
diff changeset
307
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 611
diff changeset
308 (The comment on the particular encapsulation should describe what
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 611
diff changeset
309 standard function is being emulated, if this is not obvious, and
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 611
diff changeset
310 what the differences, if any, from that standard function are.)
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 611
diff changeset
311
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 611
diff changeset
312 An example of this is the qxe_setitimer() function. This attempts
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 611
diff changeset
313 to emulate the POSIX (Unix98?) standard setitimer(), as found on
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 611
diff changeset
314 all modern versions of Unix. Normally, we just call the system-
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 611
diff changeset
315 provided setitimer() function. When emulated on MS Windows and
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 611
diff changeset
316 Cygwin, however, the ITNEW and ITOLD values cannot be different
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 611
diff changeset
317 from each other if both are non-zero, due to limitations in the
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 611
diff changeset
318 underlying multimedia-timer API. By simply using setitimer() with
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 611
diff changeset
319 preprocessor tricks, a programmer would almost have to be a
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 611
diff changeset
320 mind-reader to figure this out. With the explicit encapsulation, a
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 611
diff changeset
321 programmer need only look at the definition of qxe_setitimer() to
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 611
diff changeset
322 see what its semantics are.
611
38db05db9cb5 [xemacs-hg @ 2001-06-08 12:21:09 by ben]
ben
parents: 592
diff changeset
323 */
38db05db9cb5 [xemacs-hg @ 2001-06-08 12:21:09 by ben]
ben
parents: 592
diff changeset
324
38db05db9cb5 [xemacs-hg @ 2001-06-08 12:21:09 by ben]
ben
parents: 592
diff changeset
325 int qxe_setitimer (int kind, const struct itimerval *itnew,
38db05db9cb5 [xemacs-hg @ 2001-06-08 12:21:09 by ben]
ben
parents: 592
diff changeset
326 struct itimerval *itold);
38db05db9cb5 [xemacs-hg @ 2001-06-08 12:21:09 by ben]
ben
parents: 592
diff changeset
327
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
328 #endif /* INCLUDED_systime_h_ */