/* -*-C-*-
-$Id: ntenv.c,v 1.8 1993/09/01 18:31:49 gjr Exp $
+$Id: ntenv.c,v 1.9 1993/09/03 17:54:57 gjr Exp $
Copyright (c) 1992-1993 Massachusetts Institute of Technology
#include "scheme.h"
#include "nt.h"
#include "osenv.h"
-#include <windows.h>
+#include "ntscreen.h"
#include <stdlib.h>
#include <string.h>
\f
This just provides three distinct timers.
*/
-#define TIMER_ID_BASE 0x100
#define TIMER_ID_REAL (TIMER_ID_BASE + 2)
#define TIMER_ID_PROFILE (TIMER_ID_BASE + 1)
#define TIMER_ID_PROCESS (TIMER_ID_BASE + 0)
-#if 0
+#ifdef USE_WM_TIMER
+
+#define TIMER_ID_BASE 0x100
+
enum timer_next
{
timer_next_none,
return;
}
\f
-extern VOID CALLBACK EXFUN (TimerProc, (HWND, UINT, UINT, DWORD));
+extern VOID /* CALLBACK */ EXFUN (TimerProc, (HWND, UINT, UINT, DWORD));
-#define THE_TIMER_PROC ((TIMERPROC) TimerProc)
+#define THE_TIMER_PROC ((TIMERPROC) NULL) /* TimerProc */
-VOID CALLBACK
+VOID /* CALLBACK */
DEFUN (TimerProc, (hwnd, umsg, timer_id, dwtime),
HWND hwnd AND UINT umsg AND UINT timer_id AND DWORD dwtime)
{
return;
}
-#else /* not 0 */
+#else /* not USE_WM_TIMER */
+\f
+#define TIMER_ID_BASE 0
+
+struct timer_state_s
+{
+ int counter;
+ int reload;
+};
+
+struct timer_state_s scheme_timers[3] = { { 0, 0, }, { 0, 0, }, { 0, 0, } };
+
+extern void EXFUN (low_level_timer_tick, (void));
+
+void
+DEFUN_VOID (low_level_timer_tick)
+{
+ int i;
+ int number_signalled = 0;
+
+ for (i = 0; i < 3; i++)
+ if (scheme_timers[i].counter != 0)
+ {
+ scheme_timers[i].counter -= 1;
+ if (scheme_timers[i].counter == 0)
+ {
+ scheme_timers[i].counter = scheme_timers[i].reload;
+ number_signalled += 1;
+ }
+ }
+
+ if (number_signalled != 0)
+ REQUEST_INTERRUPT (INT_Timer);
+ return;
+}
static void
DEFUN (set_timer, (timer_id, first, interval),
int timer_id AND clock_t first AND clock_t interval)
{
+ struct timer_state_s * timer = &scheme_timers[timer_id];
+
+ /* Round up. */
+ timer->counter = ((first + 49) / 50);
+ timer->reload = ((interval + 49) / 50);
return;
}
static void
DEFUN (clear_timer, (timer_id), int timer_id)
{
+ struct timer_state_s * timer = &scheme_timers[timer_id];
+
+ timer->counter = 0;
+ timer->reload = 0;
return;
}
-#endif /* 0 */
+#endif /* USE_WM_TIMER */
\f
void
DEFUN (OS_process_timer_set, (first, interval),
/* -*-C-*-
-$Id: ntgui.c,v 1.7 1993/09/01 18:34:46 gjr Exp $
+$Id: ntgui.c,v 1.8 1993/09/03 17:56:44 gjr Exp $
Copyright (c) 1993 Massachusetts Institute of Technology
if (PeekMessage (&close_msg,
master_tty_window,
+#if 0
WM_HOTKEY,
(WM_HOTKEY + 1),
- PM_NOREMOVE))
+#else
+ WM_CLOSE,
+ (WM_CLOSE + 1),
+#endif
+ PM_REMOVE))
{
MIT_TranslateMessage (&close_msg);
DispatchMessage (&close_msg);
Prim_microcode_poll_interrupt_handler, 2, 2,
"NT High-priority timer interrupt handler for Windows I/O.")
{
+#ifndef USE_WM_TIMER
+ extern void low_level_timer_tick (void);
+#endif
+
PRIMITIVE_HEADER (2);
if (((ARG_REF (1)) & (ARG_REF (2)) & INT_Global_GC) != 0)
{
else
{
nt_gui_default_poll ();
+#ifndef USE_WM_TIMER
+ low_level_timer_tick ();
+#endif
CLEAR_INTERRUPT (INT_Global_1);
}
PRIMITIVE_RETURN (UNSPECIFIC);
/* -*-C-*-
-$Id: ntscreen.h,v 1.6 1993/09/01 18:47:24 gjr Exp $
+$Id: ntscreen.h,v 1.7 1993/09/03 17:57:40 gjr Exp $
Copyright (c) 1993 Massachusetts Institute of Technology
int Screen_GetMode (HANDLE);
void Screen_GetSize (HANDLE, int *rows, int *columns);
-BOOL Screen_GetEvent (HANDLE, SCREEN_EVENT*); // return false on no events
-
+// The following return false on no events
+BOOL Screen_GetEvent (HANDLE, SCREEN_EVENT *);
+BOOL Screen_PeekEvent (HANDLE, SCREEN_EVENT *);
//---------------------------------------------------------------------------
// Messages
#define SCREEN_COMMAND_CLOSE 0x401
#define SCREEN_COMMAND_CHOOSEBACKCOLOR 0x402
-extern VOID init_MIT_TranslateMessage (VOID);
+// Do user-level timer interrupts by using WM_TIMER
+
+#define USE_WM_TIMER
//---------------------------------------------------------------------------
// End of File: screen.h