/****************************************************************************
- * Copyright (c) 1998-2003,2005 Free Software Foundation, Inc. *
+ * Copyright (c) 1998-2006,2007 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
#include <curses.priv.h>
-MODULE_ID("$Id: lib_getch.c,v 1.73 2005/06/11 18:08:57 tom Exp $")
+MODULE_ID("$Id: lib_getch.c,v 1.78 2007/03/10 19:22:28 tom Exp $")
#include <fifo_defs.h>
+#if USE_REENTRANT
+NCURSES_EXPORT(int)
+NCURSES_PUBLIC_VAR(ESCDELAY) (void)
+{
+ return SP ? SP->_ESCDELAY : 1000;
+}
+#else
NCURSES_EXPORT_VAR(int)
ESCDELAY = 1000; /* max interval betw. chars in funkeys, in millisecs */
+#endif
#ifdef NCURSES_WGETCH_EVENTS
#define TWAIT_MASK 7
return rc;
}
-static inline int
+static NCURSES_INLINE int
fifo_peek(void)
{
int ch = SP->_fifo[peek];
return ch;
}
-static inline int
+static NCURSES_INLINE int
fifo_pull(void)
{
int ch;
return ch;
}
-static inline int
+static NCURSES_INLINE int
fifo_push(EVENTLIST_0th(_nc_eventlist * evl))
{
int n;
return ch;
}
-static inline void
+static NCURSES_INLINE void
fifo_clear(void)
{
memset(SP->_fifo, 0, sizeof(SP->_fifo));
T((T_CALLED("_nc_wgetch(%p)"), win));
*result = 0;
- if (win == 0 || SP == 0)
+ if (win == 0 || SP == 0) {
returnCode(ERR);
+ }
if (cooked_key_in_fifo()) {
if (wgetch_should_refresh(win))
wrefresh(win);
*result = fifo_pull();
- returnCode(OK);
+ returnCode(*result >= KEY_MIN ? KEY_CODE_YES : OK);
}
#ifdef NCURSES_WGETCH_EVENTS
if (evl && (evl->count == 0))
/* Return it first */
if (rc == KEY_EVENT) {
*result = rc;
- returnCode(OK);
- }
+ } else
#endif
-
- *result = fifo_pull();
- returnCode(OK);
+ *result = fifo_pull();
+ returnCode(*result >= KEY_MIN ? KEY_CODE_YES : OK);
}
if (win->_use_keypad != SP->_keypad_on)
wrefresh(win);
if (!win->_notimeout && (win->_delay >= 0 || SP->_cbreak > 1)) {
- int delay;
+ if (head == -1) { /* fifo is empty */
+ int delay;
+ int rc;
- TR(TRACE_IEVENT, ("timed delay in wgetch()"));
- if (SP->_cbreak > 1)
- delay = (SP->_cbreak - 1) * 100;
- else
- delay = win->_delay;
+ TR(TRACE_IEVENT, ("timed delay in wgetch()"));
+ if (SP->_cbreak > 1)
+ delay = (SP->_cbreak - 1) * 100;
+ else
+ delay = win->_delay;
#ifdef NCURSES_WGETCH_EVENTS
- if (event_delay >= 0 && delay > event_delay)
- delay = event_delay;
+ if (event_delay >= 0 && delay > event_delay)
+ delay = event_delay;
#endif
- TR(TRACE_IEVENT, ("delay is %d milliseconds", delay));
+ TR(TRACE_IEVENT, ("delay is %d milliseconds", delay));
- if (head == -1) { /* fifo is empty */
- int rc = check_mouse_activity(delay EVENTLIST_2nd(evl));
+ rc = check_mouse_activity(delay EVENTLIST_2nd(evl));
#ifdef NCURSES_WGETCH_EVENTS
if (rc & 4) {
*result = KEY_EVENT;
- returnCode(OK);
+ returnCode(KEY_CODE_YES);
}
#endif
if (!rc)
static int
kgetch(EVENTLIST_0th(_nc_eventlist * evl))
{
- struct tries *ptr;
+ TRIES *ptr;
int ch = 0;
int timeleft = ESCDELAY;
#ifdef NCURSES_WGETCH_EVENTS
if (rc & 4) {
TR(TRACE_IEVENT, ("interrupted by a user event"));
- /* FIXME Should have preserved remainder timeleft for reusal... */
+ /* FIXME Should have preserved remainder timeleft for reuse... */
peek = head; /* Restart interpreting later */
return KEY_EVENT;
}