Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-cw
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-cw
Commits
9557d1bf
Commit
9557d1bf
authored
Aug 20, 2003
by
Mike McCormack
Committed by
Alexandre Julliard
Aug 20, 2003
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Dlopen libncurses.so in wineconsole.
parent
e31fcdbe
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
289 additions
and
1 deletion
+289
-1
configure
configure
+130
-0
configure.ac
configure.ac
+2
-0
config.h.in
include/config.h.in
+6
-0
Makefile.in
programs/wineconsole/Makefile.in
+0
-1
curses.c
programs/wineconsole/curses.c
+151
-0
No files found.
configure
View file @
9557d1bf
...
...
@@ -12997,6 +12997,136 @@ cat >>confdefs.h <<_ACEOF
#define SONAME_LIBCRYPTO "
$ac_cv_lib_soname_crypto
"
_ACEOF
fi
echo
"
$as_me
:
$LINENO
: checking for -lncurses soname"
>
&5
echo
$ECHO_N
"checking for -lncurses soname...
$ECHO_C
"
>
&6
if
test
"
${
ac_cv_lib_soname_ncurses
+set
}
"
=
set
;
then
echo
$ECHO_N
"(cached)
$ECHO_C
"
>
&6
else
ac_get_soname_save_LIBS
=
$LIBS
LIBS
=
"-lncurses
$LIBS
"
cat
>
conftest.
$ac_ext
<<
_ACEOF
#line
$LINENO
"configure"
/* confdefs.h. */
_ACEOF
cat
confdefs.h
>>
conftest.
$ac_ext
cat
>>
conftest.
$ac_ext
<<
_ACEOF
/* end confdefs.h. */
/* Override any gcc2 internal prototype to avoid an error. */
#ifdef __cplusplus
extern "C"
#endif
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
char waddch ();
int
main ()
{
waddch ();
;
return 0;
}
_ACEOF
rm
-f
conftest.
$ac_objext
conftest
$ac_exeext
if
{
(
eval echo
"
$as_me
:
$LINENO
:
\"
$ac_link
\"
"
)
>
&5
(
eval
$ac_link
)
2>&5
ac_status
=
$?
echo
"
$as_me
:
$LINENO
:
\$
? =
$ac_status
"
>
&5
(
exit
$ac_status
)
;
}
&&
{
ac_try
=
'test -s conftest$ac_exeext'
{
(
eval echo
"
$as_me
:
$LINENO
:
\"
$ac_try
\"
"
)
>
&5
(
eval
$ac_try
)
2>&5
ac_status
=
$?
echo
"
$as_me
:
$LINENO
:
\$
? =
$ac_status
"
>
&5
(
exit
$ac_status
)
;
}
;
}
;
then
ac_cv_lib_soname_ncurses
=
`
$ac_cv_path_LDD
conftest
$ac_exeext
|
grep
libncurses
\\
.so |
sed
's/^.*\(libncurses\.so[^ ]*\).*$/\1/'
`
if
test
"x
$ac_cv_lib_soname_ncurses
"
=
"x"
then
ac_cv_lib_soname_ncurses
=
"libncurses.so"
fi
else
echo
"
$as_me
: failed program was:"
>
&5
sed
's/^/| /'
conftest.
$ac_ext
>
&5
ac_cv_lib_soname_ncurses
=
"libncurses.so"
fi
rm
-f
conftest.
$ac_objext
conftest
$ac_exeext
conftest.
$ac_ext
LIBS
=
$ac_get_soname_save_LIBS
fi
echo
"
$as_me
:
$LINENO
: result:
$ac_cv_lib_soname_ncurses
"
>
&5
echo
"
${
ECHO_T
}
$ac_cv_lib_soname_ncurses
"
>
&6
if
test
"x
$ac_cv_lib_soname_ncurses
"
!=
xNONE
then
cat
>>
confdefs.h
<<
_ACEOF
#define SONAME_LIBNCURSES "
$ac_cv_lib_soname_ncurses
"
_ACEOF
fi
echo
"
$as_me
:
$LINENO
: checking for -lcurses soname"
>
&5
echo
$ECHO_N
"checking for -lcurses soname...
$ECHO_C
"
>
&6
if
test
"
${
ac_cv_lib_soname_curses
+set
}
"
=
set
;
then
echo
$ECHO_N
"(cached)
$ECHO_C
"
>
&6
else
ac_get_soname_save_LIBS
=
$LIBS
LIBS
=
"-lcurses
$LIBS
"
cat
>
conftest.
$ac_ext
<<
_ACEOF
#line
$LINENO
"configure"
/* confdefs.h. */
_ACEOF
cat
confdefs.h
>>
conftest.
$ac_ext
cat
>>
conftest.
$ac_ext
<<
_ACEOF
/* end confdefs.h. */
/* Override any gcc2 internal prototype to avoid an error. */
#ifdef __cplusplus
extern "C"
#endif
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
char waddch ();
int
main ()
{
waddch ();
;
return 0;
}
_ACEOF
rm
-f
conftest.
$ac_objext
conftest
$ac_exeext
if
{
(
eval echo
"
$as_me
:
$LINENO
:
\"
$ac_link
\"
"
)
>
&5
(
eval
$ac_link
)
2>&5
ac_status
=
$?
echo
"
$as_me
:
$LINENO
:
\$
? =
$ac_status
"
>
&5
(
exit
$ac_status
)
;
}
&&
{
ac_try
=
'test -s conftest$ac_exeext'
{
(
eval echo
"
$as_me
:
$LINENO
:
\"
$ac_try
\"
"
)
>
&5
(
eval
$ac_try
)
2>&5
ac_status
=
$?
echo
"
$as_me
:
$LINENO
:
\$
? =
$ac_status
"
>
&5
(
exit
$ac_status
)
;
}
;
}
;
then
ac_cv_lib_soname_curses
=
`
$ac_cv_path_LDD
conftest
$ac_exeext
|
grep
libcurses
\\
.so |
sed
's/^.*\(libcurses\.so[^ ]*\).*$/\1/'
`
if
test
"x
$ac_cv_lib_soname_curses
"
=
"x"
then
ac_cv_lib_soname_curses
=
"libcurses.so"
fi
else
echo
"
$as_me
: failed program was:"
>
&5
sed
's/^/| /'
conftest.
$ac_ext
>
&5
ac_cv_lib_soname_curses
=
"libcurses.so"
fi
rm
-f
conftest.
$ac_objext
conftest
$ac_exeext
conftest.
$ac_ext
LIBS
=
$ac_get_soname_save_LIBS
fi
echo
"
$as_me
:
$LINENO
: result:
$ac_cv_lib_soname_curses
"
>
&5
echo
"
${
ECHO_T
}
$ac_cv_lib_soname_curses
"
>
&6
if
test
"x
$ac_cv_lib_soname_curses
"
!=
xNONE
then
cat
>>
confdefs.h
<<
_ACEOF
#define SONAME_LIBCURSES "
$ac_cv_lib_soname_curses
"
_ACEOF
fi
fi
...
...
configure.ac
View file @
9557d1bf
...
...
@@ -923,6 +923,8 @@ then
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,waddch)
WINE_GET_SONAME(curses,waddch)
fi
...
...
include/config.h.in
View file @
9557d1bf
...
...
@@ -755,6 +755,9 @@
/* Define to the soname of the libcups library. */
#undef SONAME_LIBCUPS
/* Define to the soname of the libcurses library. */
#undef SONAME_LIBCURSES
/* Define to the soname of the libfreetype library. */
#undef SONAME_LIBFREETYPE
...
...
@@ -764,6 +767,9 @@
/* Define to the soname of the libjack library. */
#undef SONAME_LIBJACK
/* Define to the soname of the libncurses library. */
#undef SONAME_LIBNCURSES
/* Define to the soname of the libssl library. */
#undef SONAME_LIBSSL
...
...
programs/wineconsole/Makefile.in
View file @
9557d1bf
...
...
@@ -4,7 +4,6 @@ TOPOBJDIR = ../..
SRCDIR
=
@srcdir@
VPATH
=
@srcdir@
MODULE
=
wineconsole.exe
EXTRALIBS
=
@CURSESLIBS@
APPMODE
=
gui
IMPORTS
=
advapi32 kernel32 ntdll
DELAYIMPORTS
=
comctl32 user32 gdi32
...
...
programs/wineconsole/curses.c
View file @
9557d1bf
...
...
@@ -30,6 +30,7 @@
*/
#include "config.h"
#include "wine/port.h"
#include <stdio.h>
#include <stdlib.h>
...
...
@@ -44,6 +45,7 @@
#include <winnls.h>
#include "winecon_private.h"
#include "wine/library.h"
#include "wine/server.h"
#include "wine/debug.h"
...
...
@@ -53,6 +55,12 @@ WINE_DEFAULT_DEBUG_CHANNEL(wineconsole);
#if defined(HAVE_CURSES_H) || defined(HAVE_NCURSES_H)
#ifdef HAVE_NCURSES_H
#define CURSES_NAME "ncurses"
#else
#define CURSES_NAME "curses"
#endif
struct
inner_data_curse
{
mmask_t
initial_mouse_mask
;
...
...
@@ -63,6 +71,146 @@ struct inner_data_curse
};
static
void
*
nc_handle
=
NULL
;
#define MAKE_FUNCPTR(f) static typeof(f) * p_##f;
MAKE_FUNCPTR
(
curs_set
)
MAKE_FUNCPTR
(
delwin
)
MAKE_FUNCPTR
(
endwin
)
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
)
#endif
#ifndef noecho
MAKE_FUNCPTR
(
noecho
)
#endif
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
(
void
)
{
#ifdef HAVE_NCURSES_H
static
const
char
*
ncname
=
SONAME_LIBNCURSES
;
#else
static
const
char
*
ncname
=
SONAME_LIBCURSES
;
#endif
nc_handle
=
wine_dlopen
(
ncname
,
RTLD_NOW
,
NULL
,
0
);
if
(
!
nc_handle
)
{
WINE_MESSAGE
(
"Wine cannot find the "
CURSES_NAME
" 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
)
#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
)
#endif
#ifndef noecho
LOAD_FUNCPTR
(
noecho
)
#endif
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 "
CURSES_NAME
"
\n
library. To enable Wine to use "
CURSES_NAME
" please upgrade your "
CURSES_NAME
"
\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
#ifndef initscr
#define initscr p_initscr
#endif
#ifndef intrflush
#define intrflush p_intrflush
#endif
#define keypad p_keypad
#define mouseinterval p_mouseinterval
#define mousemask p_mousemask
#define newpad p_newpad
#ifndef nodelay
#define nodelay p_nodelay
#endif
#ifndef noecho
#define noecho p_noecho
#endif
#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 +867,9 @@ static int WCCURSES_MainLoop(struct inner_data* data)
*/
enum
init_return
WCCURSES_InitBackend
(
struct
inner_data
*
data
)
{
if
(
!
WCCURSES_bind_libcurses
()
)
return
init_failed
;
data
->
private
=
HeapAlloc
(
GetProcessHeap
(),
HEAP_ZERO_MEMORY
,
sizeof
(
struct
inner_data_curse
));
if
(
!
data
->
private
)
return
init_failed
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment