2 * xtimer.c -- timing functions for X front end of XBoard
4 * Copyright 1991 by Digital Equipment Corporation, Maynard,
7 * Enhancements Copyright 1992-2001, 2002, 2003, 2004, 2005, 2006,
8 * 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
10 * The following terms apply to Digital Equipment Corporation's copyright
12 * ------------------------------------------------------------------------
15 * Permission to use, copy, modify, and distribute this software and its
16 * documentation for any purpose and without fee is hereby granted,
17 * provided that the above copyright notice appear in all copies and that
18 * both that copyright notice and this permission notice appear in
19 * supporting documentation, and that the name of Digital not be
20 * used in advertising or publicity pertaining to distribution of the
21 * software without specific, written prior permission.
23 * DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
24 * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
25 * DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
26 * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
27 * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
28 * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
30 * ------------------------------------------------------------------------
32 * The following terms apply to the enhanced version of XBoard
33 * distributed by the Free Software Foundation:
34 * ------------------------------------------------------------------------
36 * GNU XBoard is free software: you can redistribute it and/or modify
37 * it under the terms of the GNU General Public License as published by
38 * the Free Software Foundation, either version 3 of the License, or (at
39 * your option) any later version.
41 * GNU XBoard is distributed in the hope that it will be useful, but
42 * WITHOUT ANY WARRANTY; without even the implied warranty of
43 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
44 * General Public License for more details.
46 * You should have received a copy of the GNU General Public License
47 * along with this program. If not, see http://www.gnu.org/licenses/. *
49 *------------------------------------------------------------------------
50 ** See the file ChangeLog for a revision history. */
58 #include <sys/types.h>
63 #else /* not STDC_HEADERS */
64 extern char *getenv();
67 # else /* not HAVE_STRING_H */
69 # endif /* not HAVE_STRING_H */
70 #endif /* not STDC_HEADERS */
72 #if HAVE_SYS_SYSTEMINFO_H
73 # include <sys/systeminfo.h>
74 #endif /* HAVE_SYS_SYSTEMINFO_H */
76 #if TIME_WITH_SYS_TIME
77 # include <sys/time.h>
81 # include <sys/time.h>
92 # include <sys/wait.h>
95 #include <X11/Intrinsic.h>
97 // [HGM] bitmaps: put before incuding the bitmaps / pixmaps, to know how many piece types there are.
101 #include "backendz.h"
111 #define usleep(t) _sleep2(((t)+500)/1000)
114 // in xboard.c (should go to xtimer.h ?)
115 extern XtAppContext appContext;
117 XtIntervalId delayedEventTimerXID = 0;
118 DelayedEventCallback delayedEventCallback = 0;
123 delayedEventTimerXID = 0;
124 delayedEventCallback();
128 ScheduleDelayedEvent (DelayedEventCallback cb, long millisec)
130 if(delayedEventTimerXID && delayedEventCallback == cb)
131 // [HGM] alive: replace, rather than add or flush identical event
132 XtRemoveTimeOut(delayedEventTimerXID);
133 delayedEventCallback = cb;
134 delayedEventTimerXID =
135 XtAppAddTimeOut(appContext, millisec,
136 (XtTimerCallbackProc) FireDelayedEvent, (XtPointer) 0);
142 if (delayedEventTimerXID) {
143 return delayedEventCallback;
150 CancelDelayedEvent ()
152 if (delayedEventTimerXID) {
153 XtRemoveTimeOut(delayedEventTimerXID);
154 delayedEventTimerXID = 0;
158 XtIntervalId loadGameTimerXID = 0;
161 LoadGameTimerRunning ()
163 return loadGameTimerXID != 0;
169 if (loadGameTimerXID != 0) {
170 XtRemoveTimeOut(loadGameTimerXID);
171 loadGameTimerXID = 0;
179 LoadGameTimerCallback (XtPointer arg, XtIntervalId *id)
181 loadGameTimerXID = 0;
186 StartLoadGameTimer (long millisec)
189 XtAppAddTimeOut(appContext, millisec,
190 (XtTimerCallbackProc) LoadGameTimerCallback,
194 XtIntervalId analysisClockXID = 0;
197 AnalysisClockCallback (XtPointer arg, XtIntervalId *id)
199 if (gameMode == AnalyzeMode || gameMode == AnalyzeFile
200 || appData.icsEngineAnalyze) { // [DM]
201 AnalysisPeriodicEvent(0);
202 StartAnalysisClock();
207 StartAnalysisClock ()
210 XtAppAddTimeOut(appContext, 2000,
211 (XtTimerCallbackProc) AnalysisClockCallback,
215 XtIntervalId clockTimerXID = 0;
220 return clockTimerXID != 0;
226 if (clockTimerXID != 0) {
227 XtRemoveTimeOut(clockTimerXID);
236 ClockTimerCallback (XtPointer arg, XtIntervalId *id)
243 StartClockTimer (long millisec)
246 XtAppAddTimeOut(appContext, millisec,
247 (XtTimerCallbackProc) ClockTimerCallback,