wineconsole: Portability fixes in the curses mouse support.

This commit is contained in:
Alexandre Julliard 2006-06-27 16:41:43 +02:00
parent fdb4c7e986
commit f5f37a8566
4 changed files with 189 additions and 25 deletions

130
configure vendored
View File

@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.59e for Wine 0.9.16.
# Generated by GNU Autoconf 2.60a for Wine 0.9.16.
#
# Report bugs to <wine-devel@winehq.org>.
#
@ -1443,7 +1443,7 @@ test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
Wine configure 0.9.16
generated by GNU Autoconf 2.59e
generated by GNU Autoconf 2.60a
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
@ -1457,7 +1457,7 @@ This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
It was created by Wine $as_me 0.9.16, which was
generated by GNU Autoconf 2.59e. Invocation command line was
generated by GNU Autoconf 2.60a. Invocation command line was
$ $0 $@
@ -2927,6 +2927,11 @@ static char *f (char * (*g) (char **, int), char **p, ...)
that's true only with -std. */
int osf4_cc_array ['\x00' == 0 ? 1 : -1];
/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
inside strings and character constants. */
#define FOO(x) 'x'
int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
int test (int i, double x);
struct s1 {int (*f) (int a);};
struct s2 {int (*f) (double a);};
@ -11793,6 +11798,119 @@ _ACEOF
fi
fi
ac_save_LIBS="$LIBS"
LIBS="$LIBS $CURSESLIBS"
for ac_func in mousemask
do
as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
{ echo "$as_me:$LINENO: checking for $ac_func" >&5
echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
For example, HP-UX 11i <limits.h> declares gettimeofday. */
#define $ac_func innocuous_$ac_func
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func (); below.
Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
<limits.h> exists even on freestanding compilers. */
#ifdef __STDC__
# include <limits.h>
#else
# include <assert.h>
#endif
#undef $ac_func
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
#ifdef __cplusplus
extern "C"
#endif
char $ac_func ();
/* The GNU C library defines this for functions which it implements
to always fail with ENOSYS. Some functions are actually named
something starting with __ and the normal name is an alias. */
#if defined __stub_$ac_func || defined __stub___$ac_func
choke me
#endif
int
main ()
{
return $ac_func ();
;
return 0;
}
_ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
if { (ac_try="$ac_link"
case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
(eval "$ac_link") 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
(eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; } &&
{ ac_try='test -s conftest$ac_exeext'
{ (case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
(eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
eval "$as_ac_var=yes"
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
eval "$as_ac_var=no"
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
fi
ac_res=`eval echo '${'$as_ac_var'}'`
{ echo "$as_me:$LINENO: result: $ac_res" >&5
echo "${ECHO_T}$ac_res" >&6; }
if test `eval echo '${'$as_ac_var'}'` = yes; then
cat >>confdefs.h <<_ACEOF
#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
_ACEOF
fi
done
LIBS="$ac_save_LIBS"
fi
@ -24601,7 +24719,7 @@ exec 6>&1
# values after options handling.
ac_log="
This file was extended by Wine $as_me 0.9.16, which was
generated by GNU Autoconf 2.59e. Invocation command line was
generated by GNU Autoconf 2.60a. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
CONFIG_HEADERS = $CONFIG_HEADERS
@ -24654,7 +24772,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF
ac_cs_version="\\
Wine config.status 0.9.16
configured by $0, generated by GNU Autoconf 2.59e,
configured by $0, generated by GNU Autoconf 2.60a,
with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
Copyright (C) 2006 Free Software Foundation, Inc.
@ -25644,7 +25762,7 @@ $ac_datarootdir_hack
test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
{ ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } &&
{ ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } &&
{ ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } &&
{ echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir'
which seems to be undefined. Please make sure it is defined." >&5
echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'

View File

@ -541,6 +541,10 @@ then
[AC_DEFINE(HAVE_LIBCURSES, 1, [Define if you have the curses library (-lcurses)])
CURSESLIBS="-lcurses"])
fi
ac_save_LIBS="$LIBS"
LIBS="$LIBS $CURSESLIBS"
AC_CHECK_FUNCS(mousemask)
LIBS="$ac_save_LIBS"
fi
AC_SUBST(CURSESLIBS)

View File

@ -437,6 +437,9 @@
/* Define to 1 if the system has the type `mode_t'. */
#undef HAVE_MODE_T
/* Define to 1 if you have the `mousemask' function. */
#undef HAVE_MOUSEMASK
/* Define if you have NAS including devel headers */
#undef HAVE_NAS

View File

@ -40,7 +40,10 @@
#elif defined(HAVE_CURSES_H)
# include <curses.h>
#endif
#undef KEY_EVENT /* avoid redefinition warning */
/* avoid redefinition warnings */
#undef KEY_EVENT
#undef MOUSE_MOVED
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
@ -67,7 +70,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(curses);
struct inner_data_curse
{
mmask_t initial_mouse_mask;
unsigned long initial_mouse_mask;
HANDLE hInput;
WINDOW* pad;
chtype* line;
@ -77,23 +80,30 @@ struct inner_data_curse
static void *nc_handle = NULL;
#ifdef initscr /* work around Solaris breakage */
#undef initscr
extern WINDOW *initscr(void);
#endif
#define MAKE_FUNCPTR(f) static typeof(f) * p_##f;
MAKE_FUNCPTR(curs_set)
MAKE_FUNCPTR(delwin)
MAKE_FUNCPTR(endwin)
#ifndef getmaxx
MAKE_FUNCPTR(getmaxx)
#endif
#ifndef getmaxy
MAKE_FUNCPTR(getmaxy)
#endif
MAKE_FUNCPTR(getmouse)
MAKE_FUNCPTR(has_colors)
MAKE_FUNCPTR(init_pair)
#ifndef initscr
MAKE_FUNCPTR(initscr)
#endif
#ifndef intrflush
MAKE_FUNCPTR(intrflush)
#endif
MAKE_FUNCPTR(keypad)
MAKE_FUNCPTR(mouseinterval)
MAKE_FUNCPTR(mousemask)
MAKE_FUNCPTR(newpad)
#ifndef nodelay
MAKE_FUNCPTR(nodelay)
@ -108,6 +118,10 @@ MAKE_FUNCPTR(stdscr)
MAKE_FUNCPTR(waddchnstr)
MAKE_FUNCPTR(wmove)
MAKE_FUNCPTR(wgetch)
#ifdef HAVE_MOUSEMASK
MAKE_FUNCPTR(mouseinterval)
MAKE_FUNCPTR(mousemask)
#endif
#undef MAKE_FUNCPTR
@ -139,18 +153,20 @@ static BOOL WCCURSES_bind_libcurses(void)
LOAD_FUNCPTR(curs_set)
LOAD_FUNCPTR(delwin)
LOAD_FUNCPTR(endwin)
#ifndef getmaxx
LOAD_FUNCPTR(getmaxx)
#endif
#ifndef getmaxy
LOAD_FUNCPTR(getmaxy)
#endif
LOAD_FUNCPTR(getmouse)
LOAD_FUNCPTR(has_colors)
LOAD_FUNCPTR(init_pair)
#ifndef initscr
LOAD_FUNCPTR(initscr)
#endif
#ifndef intrflush
LOAD_FUNCPTR(intrflush)
#endif
LOAD_FUNCPTR(keypad)
LOAD_FUNCPTR(mouseinterval)
LOAD_FUNCPTR(mousemask)
LOAD_FUNCPTR(newpad)
#ifndef nodelay
LOAD_FUNCPTR(nodelay)
@ -165,6 +181,10 @@ static BOOL WCCURSES_bind_libcurses(void)
LOAD_FUNCPTR(waddchnstr)
LOAD_FUNCPTR(wmove)
LOAD_FUNCPTR(wgetch)
#ifdef HAVE_MOUSEMASK
LOAD_FUNCPTR(mouseinterval)
LOAD_FUNCPTR(mousemask)
#endif
#undef LOAD_FUNCPTR
@ -183,12 +203,16 @@ sym_not_found:
#define curs_set p_curs_set
#define delwin p_delwin
#define endwin p_endwin
#ifndef getmaxx
#define getmaxx p_getmaxx
#endif
#ifndef getmaxy
#define getmaxy p_getmaxy
#endif
#define getmouse p_getmouse
#define has_colors p_has_colors
#define init_pair p_init_pair
#ifndef initscr
#define initscr p_initscr
#endif
#ifndef intrflush
#define intrflush p_intrflush
#endif
@ -551,6 +575,7 @@ static unsigned WCCURSES_FillComplexChar(INPUT_RECORD* ir, WORD vk, WORD kc, DWO
*/
static unsigned WCCURSES_FillMouse(INPUT_RECORD* ir)
{
#ifdef HAVE_MOUSEMASK
static unsigned bstate /* = 0 */;
static COORD pos /* = {0, 0} */;
@ -603,6 +628,9 @@ static unsigned WCCURSES_FillMouse(INPUT_RECORD* ir)
pos.X = mevt.x; pos.Y = mevt.y;
return 1;
#else
return 0;
#endif
}
/******************************************************************
@ -745,7 +773,6 @@ static unsigned WCCURSES_FillCode(struct inner_data* data, INPUT_RECORD* ir, int
case KEY_REFERENCE:
case KEY_REFRESH:
case KEY_REPLACE:
case KEY_RESIZE:
case KEY_RESTART:
case KEY_RESUME:
case KEY_SAVE:
@ -754,6 +781,9 @@ static unsigned WCCURSES_FillCode(struct inner_data* data, INPUT_RECORD* ir, int
case KEY_SCOMMAND:
case KEY_SCOPY:
case KEY_SCREATE:
#ifdef KEY_RESIZE
case KEY_RESIZE:
#endif
goto notFound;
case KEY_SDC:
@ -829,7 +859,7 @@ static void WCCURSES_GetEvents(struct inner_data* data)
WINE_TRACE("Got o%o (0x%x)\n", inchar,inchar);
if (inchar & KEY_CODE_YES)
if (inchar >= KEY_MIN && inchar <= KEY_MAX)
{
numEvent = WCCURSES_FillCode(data, ir, inchar);
}
@ -848,14 +878,17 @@ static void WCCURSES_GetEvents(struct inner_data* data)
*/
static void WCCURSES_DeleteBackend(struct inner_data* data)
{
mmask_t mm;
if (!PRIVATE(data)) return;
CloseHandle(PRIVATE(data)->hInput);
delwin(PRIVATE(data)->pad);
mousemask(PRIVATE(data)->initial_mouse_mask, &mm);
#ifdef HAVE_MOUSEMASK
{
mmask_t mm;
mousemask(PRIVATE(data)->initial_mouse_mask, &mm);
}
#endif
endwin();
HeapFree(GetProcessHeap(), 0, PRIVATE(data)->line);
@ -950,23 +983,29 @@ enum init_return WCCURSES_InitBackend(struct inner_data* data)
intrflush(stdscr, FALSE);
nodelay(stdscr, TRUE);
keypad(stdscr, TRUE);
#ifdef HAVE_MOUSEMASK
if (data->curcfg.quick_edit)
{
mmask_t mm;
mousemask(BUTTON1_PRESSED|BUTTON1_RELEASED|
BUTTON2_PRESSED|BUTTON2_RELEASED|
BUTTON3_PRESSED|BUTTON3_RELEASED|
BUTTON_SHIFT|BUTTON_CTRL|BUTTON_ALT|REPORT_MOUSE_POSITION,
&PRIVATE(data)->initial_mouse_mask);
&mm);
/* no click event generation... we just need button up/down events
* it doesn't seem that mouseinterval(-1) behaves as documented...
* 0 seems to be better value to disable click event generation
*/
mouseinterval(0);
PRIVATE(data)->initial_mouse_mask = mm;
}
else
{
mousemask(0, &PRIVATE(data)->initial_mouse_mask);
mmask_t mm;
mousemask(0, &mm);
PRIVATE(data)->initial_mouse_mask = mm;
}
#endif
return init_success;
}