dlopen libncurses.so in wineconsole
Mike McCormack
mike at codeweavers.com
Tue Aug 12 03:10:38 CDT 2003
This patch doesn't include changes to configure. Run autoconf to
regenerate it...
Mike
ChangeLog:
* dlopen libncurses.so in wineconsole
-------------- next part --------------
? programs/wineconsole/curses.diff
Index: configure.ac
===================================================================
RCS file: /home/wine/wine/configure.ac,v
retrieving revision 1.170
diff -u -r1.170 configure.ac
--- configure.ac 11 Aug 2003 18:37:13 -0000 1.170
+++ configure.ac 12 Aug 2003 07:51:11 -0000
@@ -919,6 +919,7 @@
WINE_GET_SONAME(jack,jack_client_new)
WINE_GET_SONAME(ssl,SSL_library_init)
WINE_GET_SONAME(crypto,BIO_new_socket)
+ WINE_GET_SONAME(ncurses,initscr)
fi
Index: include/config.h.in
===================================================================
RCS file: /home/wine/wine/include/config.h.in,v
retrieving revision 1.157
diff -u -r1.157 config.h.in
--- include/config.h.in 20 Jun 2003 23:26:56 -0000 1.157
+++ include/config.h.in 12 Aug 2003 07:51:12 -0000
@@ -791,6 +791,9 @@
/* Define to the soname of the libXrender library. */
#undef SONAME_LIBXRENDER
+/* Define to the soname of the libncurses library. */
+#undef SONAME_LIBNCURSES
+
/* If using the C implementation of alloca, define if you know the
direction of stack growth for your system; otherwise it will be
automatically deduced at run-time.
Index: programs/wineconsole/Makefile.in
===================================================================
RCS file: /home/wine/wine/programs/wineconsole/Makefile.in,v
retrieving revision 1.7
diff -u -r1.7 Makefile.in
--- programs/wineconsole/Makefile.in 13 Dec 2002 23:37:06 -0000 1.7
+++ programs/wineconsole/Makefile.in 12 Aug 2003 07:51:12 -0000
@@ -4,7 +4,7 @@
SRCDIR = @srcdir@
VPATH = @srcdir@
MODULE = wineconsole.exe
-EXTRALIBS = @CURSESLIBS@
+EXTRALIBS =
APPMODE = gui
IMPORTS = advapi32 kernel32 ntdll
DELAYIMPORTS = comctl32 user32 gdi32
Index: programs/wineconsole/curses.c
===================================================================
RCS file: /home/wine/wine/programs/wineconsole/curses.c,v
retrieving revision 1.10
diff -u -r1.10 curses.c
--- programs/wineconsole/curses.c 14 Jun 2003 01:34:53 -0000 1.10
+++ programs/wineconsole/curses.c 12 Aug 2003 07:51:12 -0000
@@ -44,6 +44,8 @@
#include <winnls.h>
#include "winecon_private.h"
+#include "wine/library.h"
+#include "wine/port.h"
#include "wine/server.h"
#include "wine/debug.h"
@@ -63,6 +65,117 @@
};
+static void *nc_handle = NULL;
+
+#define MAKE_FUNCPTR(f) typeof(f) * p_##f = NULL;
+
+MAKE_FUNCPTR(curs_set)
+MAKE_FUNCPTR(delwin)
+MAKE_FUNCPTR(endwin)
+MAKE_FUNCPTR(getmouse)
+MAKE_FUNCPTR(has_colors)
+MAKE_FUNCPTR(init_pair)
+MAKE_FUNCPTR(initscr)
+MAKE_FUNCPTR(intrflush)
+MAKE_FUNCPTR(keypad)
+MAKE_FUNCPTR(mouseinterval)
+MAKE_FUNCPTR(mousemask)
+MAKE_FUNCPTR(newpad)
+MAKE_FUNCPTR(nodelay)
+MAKE_FUNCPTR(noecho)
+MAKE_FUNCPTR(prefresh)
+MAKE_FUNCPTR(raw)
+MAKE_FUNCPTR(start_color)
+MAKE_FUNCPTR(stdscr)
+MAKE_FUNCPTR(waddchnstr)
+MAKE_FUNCPTR(wmove)
+MAKE_FUNCPTR(wgetch)
+
+#undef MAKE_FUNCPTR
+
+/**********************************************************************/
+
+typedef struct {
+ LPVOID lpCallback;
+ LPVOID lpContext;
+} DirectDrawEnumerateProcData;
+
+static BOOL WCCURSES_bind_libcurses()
+{
+ char *ncname = SONAME_LIBNCURSES;
+
+ nc_handle = wine_dlopen(ncname, RTLD_NOW, NULL, 0);
+ if(!nc_handle)
+ {
+ WINE_MESSAGE("Wine cannot find the ncurses library (%s).\n",ncname);
+ return FALSE;
+ }
+
+#define LOAD_FUNCPTR(f) \
+ if((p_##f = wine_dlsym(nc_handle, #f, NULL, 0)) == NULL) \
+ { \
+ WINE_WARN("Can't find symbol %s\n", #f); \
+ goto sym_not_found; \
+ }
+
+ LOAD_FUNCPTR(curs_set)
+ LOAD_FUNCPTR(delwin)
+ LOAD_FUNCPTR(endwin)
+ LOAD_FUNCPTR(getmouse)
+ LOAD_FUNCPTR(has_colors)
+ LOAD_FUNCPTR(init_pair)
+ LOAD_FUNCPTR(initscr)
+ LOAD_FUNCPTR(intrflush)
+ LOAD_FUNCPTR(keypad)
+ LOAD_FUNCPTR(mouseinterval)
+ LOAD_FUNCPTR(mousemask)
+ LOAD_FUNCPTR(newpad)
+ LOAD_FUNCPTR(nodelay)
+ LOAD_FUNCPTR(noecho)
+ LOAD_FUNCPTR(prefresh)
+ LOAD_FUNCPTR(raw)
+ LOAD_FUNCPTR(start_color)
+ LOAD_FUNCPTR(stdscr)
+ LOAD_FUNCPTR(waddchnstr)
+ LOAD_FUNCPTR(wmove)
+ LOAD_FUNCPTR(wgetch)
+
+#undef LOAD_FUNCPTR
+
+ return TRUE;
+
+sym_not_found:
+ WINE_MESSAGE(
+ "Wine cannot find certain functions that it needs inside the ncurses\n"
+ "library. To enable Wine to use ncurses please upgrade your ncurses\n"
+ "libraries\n");
+ wine_dlclose(nc_handle, NULL, 0);
+ nc_handle = NULL;
+ return FALSE;
+}
+
+#define curs_set p_curs_set
+#define delwin p_delwin
+#define endwin p_endwin
+#define getmouse p_getmouse
+#define has_colors p_has_colors
+#define init_pair p_init_pair
+#define initscr p_initscr
+#define intrflush p_intrflush
+#define keypad p_keypad
+#define mouseinterval p_mouseinterval
+#define mousemask p_mousemask
+#define newpad p_newpad
+#define nodelay p_nodelay
+#define noecho p_noecho
+#define prefresh p_prefresh
+#define raw p_raw
+#define start_color p_start_color
+#define stdscr (*p_stdscr)
+#define waddchnstr p_waddchnstr
+#define wmove p_wmove
+#define wgetch p_wgetch
+
/******************************************************************
* WCCURSES_ResizeScreenBuffer
*
@@ -719,6 +832,9 @@
*/
enum init_return WCCURSES_InitBackend(struct inner_data* data)
{
+ if( !WCCURSES_bind_libcurses() )
+ return FALSE;
+
data->private = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(struct inner_data_curse));
if (!data->private) return init_failed;
More information about the wine-patches
mailing list