4 * Copyright 1993 Alexandre Julliard
7 static char Copyright[] = "Copyright Alexandre Julliard, 1993";
9 #include <X11/Intrinsic.h>
13 extern XtAppContext XT_app_context;
19 WORD msg; /* WM_TIMER or WM_SYSTIMER */
27 #define NB_RESERVED_TIMERS 2 /* for SetSystemTimer */
29 static TIMER TimersArray[NB_TIMERS];
32 /***********************************************************************
35 static void TIMER_callback( XtPointer data, XtIntervalId * xtid )
37 TIMER * pTimer = (TIMER *) data;
39 pTimer->xtid = 0; /* In case the timer procedure calls KillTimer */
43 CallWindowProc(pTimer->proc, pTimer->hwnd, pTimer->msg,
44 pTimer->id, GetTickCount());
47 PostMessage( pTimer->hwnd, pTimer->msg, pTimer->id, 0 );
49 /* If timeout == 0, the timer has been removed by KillTimer */
51 pTimer->xtid = XtAppAddTimeOut( XT_app_context, pTimer->timeout,
52 TIMER_callback, pTimer );
56 /***********************************************************************
59 WORD TIMER_SetTimer( HWND hwnd, WORD id, WORD timeout, FARPROC proc, BOOL sys )
64 if (!timeout) return 0;
65 if (!hwnd && !proc) return 0;
67 /* Find a free timer */
69 for (i = 0, pTimer = TimersArray; i < NB_TIMERS; i++, pTimer++)
70 if (!pTimer->timeout) break;
72 if (i >= NB_TIMERS) return 0;
73 if (!sys && (i >= NB_TIMERS-NB_RESERVED_TIMERS)) return 0;
74 if (!hwnd) id = i + 1;
79 pTimer->msg = sys ? WM_SYSTIMER : WM_TIMER;
81 pTimer->timeout = timeout;
83 pTimer->xtid = XtAppAddTimeOut( XT_app_context, timeout,
84 TIMER_callback, pTimer );
89 /***********************************************************************
92 BOOL TIMER_KillTimer( HWND hwnd, WORD id, BOOL sys )
99 for (i = 0, pTimer = TimersArray; i < NB_TIMERS; i++, pTimer++)
100 if ((pTimer->hwnd == hwnd) && (pTimer->id == id) &&
101 (pTimer->timeout != 0)) break;
102 if (i >= NB_TIMERS) return FALSE;
103 if (!sys && (i >= NB_TIMERS-NB_RESERVED_TIMERS)) return FALSE;
104 if (!sys && (pTimer->msg != WM_TIMER)) return FALSE;
105 else if (sys && (pTimer->msg != WM_SYSTIMER)) return FALSE;
107 /* Delete the timer */
109 if (pTimer->xtid) XtRemoveTimeOut( pTimer->xtid );
120 /***********************************************************************
123 WORD SetTimer( HWND hwnd, WORD id, WORD timeout, FARPROC proc )
126 printf( "SetTimer: %d %d %d %08x\n", hwnd, id, timeout, proc );
128 return TIMER_SetTimer( hwnd, id, timeout, proc, FALSE );
132 /***********************************************************************
133 * SetSystemTimer (USER.11)
135 WORD SetSystemTimer( HWND hwnd, WORD id, WORD timeout, FARPROC proc )
138 printf( "SetSystemTimer: %d %d %d %08x\n", hwnd, id, timeout, proc );
140 return TIMER_SetTimer( hwnd, id, timeout, proc, TRUE );
144 /***********************************************************************
145 * KillTimer (USER.12)
147 BOOL KillTimer( HWND hwnd, WORD id )
150 printf( "KillTimer: %d %d\n", hwnd, id );
152 return TIMER_KillTimer( hwnd, id, FALSE );
156 /***********************************************************************
157 * KillSystemTimer (USER.182)
159 BOOL KillSystemTimer( HWND hwnd, WORD id )
162 printf( "KillSystemTimer: %d %d\n", hwnd, id );
164 return TIMER_KillTimer( hwnd, id, TRUE );