Release 980301
Sun Mar 1 10:45:23 1998 Andreas Mohr <100.30936@germany.net> * [loader/ne_image.c] Fixed problem with weird DLLs (NE_FFLAGS_SINGLEDATA && DGROUP = 0). * [msdos/dosmem.c] Export address for __0000H, too. * [msdos/dpmi.c] Changed MemAlloc functions to return less fragmented addresses. Sat Feb 28 18:50:12 1998 Alexandre Julliard <julliard@lrc.epfl.ch> * [scheduler/process.c] [scheduler/sysdeps.c] Don't use %fs register before threading initialization. Sat Feb 28 14:04:56 1998 Kristian Nielsen <kristian.nielsen@risoe.dk> * [configure.in] [include/acconfig.h] Autoconf macro to check for non-reentrant X libraries. * [windows/winpos.c] In SetWindowPos32(), do not cause WM_SIZE messages when the SWP_NOSIZE flag is specified. This fixes the division-by-zero in Borland C++ 4.0 "Open Project" menu item. Sat Feb 28 13:11:26 1998 James Moody <013263m@dragon.acadiau.ca> * [ole/ole2nls.c] Changed "English" values from German to English. * [files/dos_fs.c] Fixed off-by-one month bug. Fri Feb 27 22:12:01 1998 Douglas Ridgway <ridgway@winehq.com> * [windows/win.c] Fix winelib class menu loading bug. * [include/module.h] [loader/module.c] LoadModule32 should be implemented in terms of CreateProcess. * [programs/view/*] Metafile viewer sample program. * [documentation/wine.texinfo] [documentation/Makefile.in] Improvements and additions, HTML target. Fri Feb 27 04:27:48 1998 Dimitrie O. Paun <dimi@cs.toronto.edu> * [*/*] Switched to the new debug messages interface. For more information please refer to documentation/debug-msgs. Because the new scheme introduces a new semantic level, I had to manually do through about 530 dprintf_xxx! The rest of about 2400 where transformed via a script. Because of the large number of changes that I had to do, some may have not come out as nicely as I wanted them. If this is the case, please let me know. There is a lot of work left to do: -- a few hundred printf's to be converted -- about 2300 fprintf's to be converted -- about 600 FIXME's to be transformed The problem is that in the above mentioned cases, a lot of manual intervention is required because a lot of the information is missing. There are also a lot of other things to be done to the interface and so forth. I have now ideas for a at least a month worth of full time work :) I will proceed with many changes in the next few releases, so please do not start modifing things because there will be a hell of a lot of conflicts. If you have ideas that you want to integrate or you want to work on different things, please coordinate with me. Thu Feb 26 13:04:29 1998 David Lee Lambert <lamber45@egr.msu.edu> * [ole/ole2nls.c] [include/windows.h] First try at OLE date- and time-formatting functions. Wed Feb 25 11:20:35 1998 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de> * [files/*.c] Changed dos device handling, added 'CON' devicehandling. * [graphics/ddraw.c] Bug fixes, some additions. * [if1632/builtin.c][loader/module.c][library/winestub.c] Small hack so we don't need a dummy BUILTIN_LoadModule in winestub.c. * [ole/*][relay32/ole32.spec][if1632/storage.spec] storage.dll started. winword loads documents (saving doesn't work yet, dunno why). Several ole additions, some cleanups and bugfixes. IMalloc16 implemented. * [loader/pe_image.c] Added some comments, fixed circular dll references, fixed modref ordering, fixed tls allocation. * [memory/global.c] Added validity checks before every GET_ARENA_PTR. (several functions rely on Global* return values on invalid handles, like IsTask). Implemented GlobalUnlockFree16. * [memory/virtual.c] Replaced dprintf_virtual by fprintf, so we can do 'info map' again in the debugger. Increase read linesize for Linux2.1 cases. * [misc/cpu.c][misc/registry.c] Moved cpu registry initialization to misc/cpu.c. * [multimedia/dsound.c] Enhanced, replaced GETOSPACE bufferingcheck by SETFRAGMENT. * [relay32/crtdll.spec][relay32/ntdll.spec] Replaced some ptr by respective 'str' and 'wstr' arguments for libc functions. * [scheduler/thread.c] Added some sanity checks to stackallocation, tlshandling fixed. * [tools/build.c] Fixed cdecl argumenttype order (was reversed). * [win32/ordinals.c] Implemented KERNEL_449. * [windows/dinput.c] Some fixes, needs much more work. Tomb Raider2 works with keyboard ;) Tue Feb 24 20:46:37 1998 James Juran <jrj120@psu.edu> * [windows/win.c] Fixed USER32 ordinal numbers in documentation. Sat Feb 21 12:30:38 1998 John Richardson <jrichard@zko.dec.com> * [files/file.c] [include/k32obj.h] [memory/virtual.c] [scheduler/critsection.c] [scheduler/event.c] [scheduler/handle.c] [scheduler/k32obj.c] [scheduler/mutex.c] [scheduler/process.c] [scheduler/semaphore.c] [scheduler/thread.c] Added generic k32obj read and write routines for k32objs that support I/O. * [documentation/console] Updated console docs. * [win32/console.c] Make console work like a k32obj that supports I/O. * [include/windows.h] Make WriteFile and ReadFile take HANDLE32 for handle. Sun Feb 15 14:07:07 1998 Dimitrie O. Paun <dimi@mail.cs.toronto.edu> * [controls/menu.c] [misc/ver.c] [multimedia/dsound.c] [multimedia/joystick.c] [windows/dialog.c] Modified some dprintf_xxx's to prepare them for a new dprintf_ scheme. Basically, I changed the dprintf's that outputed a line with many dprintf calls to do just one dprintf call.
This commit is contained in:
parent
03468f7d4b
commit
a11d7b1a68
16
ANNOUNCE
16
ANNOUNCE
|
@ -1,13 +1,13 @@
|
||||||
This is release 980215 of Wine, the MS Windows emulator. This is still a
|
This is release 980301 of Wine, the MS Windows emulator. This is still a
|
||||||
developer's only release. There are many bugs and many unimplemented API
|
developer's only release. There are many bugs and many unimplemented API
|
||||||
features. Most applications still do not work correctly.
|
features. Most applications still do not work correctly.
|
||||||
|
|
||||||
Patches should be submitted to "julliard@lrc.epfl.ch". Please don't
|
Patches should be submitted to "julliard@lrc.epfl.ch". Please don't
|
||||||
forget to include a ChangeLog entry.
|
forget to include a ChangeLog entry.
|
||||||
|
|
||||||
WHAT'S NEW with Wine-980215: (see ChangeLog for details)
|
WHAT'S NEW with Wine-980301: (see ChangeLog for details)
|
||||||
- Preliminary console allocation support.
|
- New debugging printfs scheme.
|
||||||
- Hopefully no more Xlib errno problems.
|
- Better DOS device handling.
|
||||||
- Lots of bug fixes.
|
- Lots of bug fixes.
|
||||||
|
|
||||||
See the README file in the distribution for installation instructions.
|
See the README file in the distribution for installation instructions.
|
||||||
|
@ -16,10 +16,10 @@ Because of lags created by using mirror, this message may reach you before
|
||||||
the release is available at the ftp sites. The sources will be available
|
the release is available at the ftp sites. The sources will be available
|
||||||
from the following locations:
|
from the following locations:
|
||||||
|
|
||||||
ftp://sunsite.unc.edu/pub/Linux/ALPHA/wine/development/Wine-980215.tar.gz
|
ftp://sunsite.unc.edu/pub/Linux/ALPHA/wine/development/Wine-980301.tar.gz
|
||||||
ftp://tsx-11.mit.edu/pub/linux/ALPHA/Wine/development/Wine-980215.tar.gz
|
ftp://tsx-11.mit.edu/pub/linux/ALPHA/Wine/development/Wine-980301.tar.gz
|
||||||
ftp://ftp.infomagic.com/pub/mirrors/linux/wine/development/Wine-980215.tar.gz
|
ftp://ftp.infomagic.com/pub/mirrors/linux/wine/development/Wine-980301.tar.gz
|
||||||
ftp://ftp.progsoc.uts.edu.au/pub/Wine/development/Wine-980215.tar.gz
|
ftp://ftp.progsoc.uts.edu.au/pub/Wine/development/Wine-980301.tar.gz
|
||||||
|
|
||||||
It should also be available from any site that mirrors tsx-11 or sunsite.
|
It should also be available from any site that mirrors tsx-11 or sunsite.
|
||||||
|
|
||||||
|
|
1
AUTHORS
1
AUTHORS
|
@ -10,6 +10,7 @@ Dag Asheim,
|
||||||
Martin Ayotte,
|
Martin Ayotte,
|
||||||
Karl Backström,
|
Karl Backström,
|
||||||
Peter Bajusz,
|
Peter Bajusz,
|
||||||
|
Marcel Baur,
|
||||||
Georg Beyerle,
|
Georg Beyerle,
|
||||||
Ross Biro,
|
Ross Biro,
|
||||||
Martin Boehme,
|
Martin Boehme,
|
||||||
|
|
163
ChangeLog
163
ChangeLog
|
@ -1,4 +1,167 @@
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
Sun Feb 29 10:45:23 1997 Andreas Mohr <100.30936@germany.net>
|
||||||
|
|
||||||
|
* [loader/ne_image.c]
|
||||||
|
Fixed problem with weird DLLs (NE_FFLAGS_SINGLEDATA && DGROUP = 0).
|
||||||
|
|
||||||
|
* [msdos/dosmem.c]
|
||||||
|
Export address for __0000H, too.
|
||||||
|
|
||||||
|
* [msdos/dpmi.c]
|
||||||
|
Changed MemAlloc functions to return less fragmented addresses.
|
||||||
|
|
||||||
|
Sat Feb 28 18:50:12 1998 Alexandre Julliard <julliard@lrc.epfl.ch>
|
||||||
|
|
||||||
|
* [scheduler/process.c] [scheduler/sysdeps.c]
|
||||||
|
Don't use %fs register before threading initialization.
|
||||||
|
|
||||||
|
Sat Feb 28 14:04:56 1998 Kristian Nielsen <kristian.nielsen@risoe.dk>
|
||||||
|
|
||||||
|
* [configure.in] [include/acconfig.h]
|
||||||
|
Autoconf macro to check for non-reentrant X libraries.
|
||||||
|
|
||||||
|
* [windows/winpos.c]
|
||||||
|
In SetWindowPos32(), do not cause WM_SIZE messages when the
|
||||||
|
SWP_NOSIZE flag is specified. This fixes the division-by-zero in
|
||||||
|
Borland C++ 4.0 "Open Project" menu item.
|
||||||
|
|
||||||
|
Sat Feb 28 13:11:26 1998 James Moody <013263m@dragon.acadiau.ca>
|
||||||
|
|
||||||
|
* [ole/ole2nls.c]
|
||||||
|
Changed "English" values from German to English.
|
||||||
|
|
||||||
|
* [files/dos_fs.c]
|
||||||
|
Fixed off-by-one month bug.
|
||||||
|
|
||||||
|
Fri Feb 27 22:12:01 1998 Douglas Ridgway <ridgway@winehq.com>
|
||||||
|
|
||||||
|
* [windows/win.c]
|
||||||
|
Fix winelib class menu loading bug.
|
||||||
|
|
||||||
|
* [include/module.h] [loader/module.c]
|
||||||
|
LoadModule32 should be implemented in terms of CreateProcess.
|
||||||
|
|
||||||
|
* [programs/view/*]
|
||||||
|
Metafile viewer sample program.
|
||||||
|
|
||||||
|
* [documentation/wine.texinfo] [documentation/Makefile.in]
|
||||||
|
Improvements and additions, HTML target.
|
||||||
|
|
||||||
|
Fri Feb 27 04:27:48 1998 Dimitrie O. Paun <dimi@cs.toronto.edu>
|
||||||
|
|
||||||
|
* [*/*]
|
||||||
|
Switched to the new debug messages interface. For more information
|
||||||
|
please refer to documentation/debug-msgs. Because the new scheme
|
||||||
|
introduces a new semantic level, I had to manually do through
|
||||||
|
about 530 dprintf_xxx! The rest of about 2400 where transformed
|
||||||
|
via a script. Because of the large number of changes that I had
|
||||||
|
to do, some may have not come out as nicely as I wanted them. If
|
||||||
|
this is the case, please let me know. There is a lot of work left
|
||||||
|
to do: -- a few hundred printf's to be converted -- about 2300
|
||||||
|
fprintf's to be converted -- about 600 FIXME's to be transformed
|
||||||
|
The problem is that in the above mentioned cases, a lot of manual
|
||||||
|
intervention is required because a lot of the information is
|
||||||
|
missing. There are also a lot of other things to be done to the
|
||||||
|
interface and so forth. I have now ideas for a at least a month
|
||||||
|
worth of full time work :) I will proceed with many changes in the
|
||||||
|
next few releases, so please do not start modifing things because
|
||||||
|
there will be a hell of a lot of conflicts. If you have ideas that
|
||||||
|
you want to integrate or you want to work on different things,
|
||||||
|
please coordinate with me.
|
||||||
|
|
||||||
|
Thu Feb 26 13:04:29 1998 David Lee Lambert <lamber45@egr.msu.edu>
|
||||||
|
|
||||||
|
* [ole/ole2nls.c] [include/windows.h]
|
||||||
|
First try at OLE date- and time-formatting functions.
|
||||||
|
|
||||||
|
Wed Feb 25 11:20:35 1998 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>
|
||||||
|
|
||||||
|
* [files/*.c]
|
||||||
|
Changed dos device handling, added 'CON' devicehandling.
|
||||||
|
|
||||||
|
* [graphics/ddraw.c]
|
||||||
|
Bug fixes, some additions.
|
||||||
|
|
||||||
|
* [if1632/builtin.c][loader/module.c][library/winestub.c]
|
||||||
|
Small hack so we don't need a dummy BUILTIN_LoadModule
|
||||||
|
in winestub.c.
|
||||||
|
|
||||||
|
* [ole/*][relay32/ole32.spec][if1632/storage.spec]
|
||||||
|
storage.dll started. winword loads documents (saving
|
||||||
|
doesn't work yet, dunno why).
|
||||||
|
Several ole additions, some cleanups and bugfixes.
|
||||||
|
IMalloc16 implemented.
|
||||||
|
|
||||||
|
* [loader/pe_image.c]
|
||||||
|
Added some comments, fixed circular dll references,
|
||||||
|
fixed modref ordering, fixed tls allocation.
|
||||||
|
|
||||||
|
* [memory/global.c]
|
||||||
|
Added validity checks before every GET_ARENA_PTR.
|
||||||
|
(several functions rely on Global* return values
|
||||||
|
on invalid handles, like IsTask).
|
||||||
|
Implemented GlobalUnlockFree16.
|
||||||
|
|
||||||
|
* [memory/virtual.c]
|
||||||
|
Replaced dprintf_virtual by fprintf, so we can
|
||||||
|
do 'info map' again in the debugger. Increase read
|
||||||
|
linesize for Linux2.1 cases.
|
||||||
|
|
||||||
|
* [misc/cpu.c][misc/registry.c]
|
||||||
|
Moved cpu registry initialization to misc/cpu.c.
|
||||||
|
|
||||||
|
* [multimedia/dsound.c]
|
||||||
|
Enhanced, replaced GETOSPACE bufferingcheck by SETFRAGMENT.
|
||||||
|
|
||||||
|
* [relay32/crtdll.spec][relay32/ntdll.spec]
|
||||||
|
Replaced some ptr by respective 'str' and 'wstr' arguments
|
||||||
|
for libc functions.
|
||||||
|
|
||||||
|
* [scheduler/thread.c]
|
||||||
|
Added some sanity checks to stackallocation, tlshandling fixed.
|
||||||
|
|
||||||
|
* [tools/build.c]
|
||||||
|
Fixed cdecl argumenttype order (was reversed).
|
||||||
|
|
||||||
|
* [win32/ordinals.c]
|
||||||
|
Implemented KERNEL_449.
|
||||||
|
|
||||||
|
* [windows/dinput.c]
|
||||||
|
Some fixes, needs much more work. Tomb Raider2 works with keyboard ;)
|
||||||
|
|
||||||
|
Tue Feb 24 20:46:37 1998 James Juran <jrj120@psu.edu>
|
||||||
|
|
||||||
|
* [windows/win.c]
|
||||||
|
Fixed USER32 ordinal numbers in documentation.
|
||||||
|
|
||||||
|
Sat Feb 21 12:30:38 1998 John Richardson <jrichard@zko.dec.com>
|
||||||
|
|
||||||
|
* [files/file.c] [include/k32obj.h] [memory/virtual.c]
|
||||||
|
[scheduler/critsection.c] [scheduler/event.c] [scheduler/handle.c]
|
||||||
|
[scheduler/k32obj.c] [scheduler/mutex.c] [scheduler/process.c]
|
||||||
|
[scheduler/semaphore.c] [scheduler/thread.c]
|
||||||
|
Added generic k32obj read and write routines for k32objs that
|
||||||
|
support I/O.
|
||||||
|
|
||||||
|
* [documentation/console]
|
||||||
|
Updated console docs.
|
||||||
|
|
||||||
|
* [win32/console.c]
|
||||||
|
Make console work like a k32obj that supports I/O.
|
||||||
|
|
||||||
|
* [include/windows.h]
|
||||||
|
Make WriteFile and ReadFile take HANDLE32 for handle.
|
||||||
|
|
||||||
|
----------------------------------------------------------------------
|
||||||
|
Sun Feb 15 14:07:07 1998 Dimitrie O. Paun <dimi@mail.cs.toronto.edu>
|
||||||
|
|
||||||
|
* [controls/menu.c] [misc/ver.c] [multimedia/dsound.c]
|
||||||
|
[multimedia/joystick.c] [windows/dialog.c]
|
||||||
|
Modified some dprintf_xxx's to prepare them for a new
|
||||||
|
dprintf_ scheme. Basically, I changed the dprintf's that
|
||||||
|
outputed a line with many dprintf calls to do just one
|
||||||
|
dprintf call.
|
||||||
|
|
||||||
Sun Feb 15 12:02:59 1998 Alexandre Julliard <julliard@lrc.epfl.ch>
|
Sun Feb 15 12:02:59 1998 Alexandre Julliard <julliard@lrc.epfl.ch>
|
||||||
|
|
||||||
* [graphics/x11drv/*.c] [objects/*.c]
|
* [graphics/x11drv/*.c] [objects/*.c]
|
||||||
|
|
|
@ -16,6 +16,8 @@ ac_help="$ac_help
|
||||||
--disable-emulator build only the Wine library, not the emulator"
|
--disable-emulator build only the Wine library, not the emulator"
|
||||||
ac_help="$ac_help
|
ac_help="$ac_help
|
||||||
--enable-dll build the Wine library as a DLL"
|
--enable-dll build the Wine library as a DLL"
|
||||||
|
ac_help="$ac_help
|
||||||
|
--without-reentrant-x Compile for use with non-reentrant X libraries"
|
||||||
ac_help="$ac_help
|
ac_help="$ac_help
|
||||||
--with-x use the X Window System"
|
--with-x use the X Window System"
|
||||||
|
|
||||||
|
@ -569,13 +571,20 @@ fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Check whether --with-reentrant-x or --without-reentrant-x was given.
|
||||||
|
if test "${with_reentrant_x+set}" = set; then
|
||||||
|
withval="$with_reentrant_x"
|
||||||
|
:
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
|
echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
|
||||||
echo "configure:579: checking whether ${MAKE-make} sets \${MAKE}" >&5
|
echo "configure:588: checking whether ${MAKE-make} sets \${MAKE}" >&5
|
||||||
set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
|
set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
|
||||||
if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
|
@ -604,7 +613,7 @@ fi
|
||||||
# Extract the first word of "gcc", so it can be a program name with args.
|
# Extract the first word of "gcc", so it can be a program name with args.
|
||||||
set dummy gcc; ac_word=$2
|
set dummy gcc; ac_word=$2
|
||||||
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
||||||
echo "configure:608: checking for $ac_word" >&5
|
echo "configure:617: checking for $ac_word" >&5
|
||||||
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
|
@ -633,7 +642,7 @@ if test -z "$CC"; then
|
||||||
# Extract the first word of "cc", so it can be a program name with args.
|
# Extract the first word of "cc", so it can be a program name with args.
|
||||||
set dummy cc; ac_word=$2
|
set dummy cc; ac_word=$2
|
||||||
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
||||||
echo "configure:637: checking for $ac_word" >&5
|
echo "configure:646: checking for $ac_word" >&5
|
||||||
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
|
@ -681,7 +690,7 @@ fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
|
echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
|
||||||
echo "configure:685: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
|
echo "configure:694: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
|
||||||
|
|
||||||
ac_ext=c
|
ac_ext=c
|
||||||
# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
|
# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
|
||||||
|
@ -691,11 +700,11 @@ ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS
|
||||||
cross_compiling=$ac_cv_prog_cc_cross
|
cross_compiling=$ac_cv_prog_cc_cross
|
||||||
|
|
||||||
cat > conftest.$ac_ext <<EOF
|
cat > conftest.$ac_ext <<EOF
|
||||||
#line 695 "configure"
|
#line 704 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
main(){return(0);}
|
main(){return(0);}
|
||||||
EOF
|
EOF
|
||||||
if { (eval echo configure:699: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
|
if { (eval echo configure:708: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
|
||||||
ac_cv_prog_cc_works=yes
|
ac_cv_prog_cc_works=yes
|
||||||
# If we can't run a trivial program, we are probably using a cross compiler.
|
# If we can't run a trivial program, we are probably using a cross compiler.
|
||||||
if (./conftest; exit) 2>/dev/null; then
|
if (./conftest; exit) 2>/dev/null; then
|
||||||
|
@ -715,12 +724,12 @@ if test $ac_cv_prog_cc_works = no; then
|
||||||
{ echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
|
{ echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
|
||||||
fi
|
fi
|
||||||
echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
|
echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
|
||||||
echo "configure:719: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
|
echo "configure:728: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
|
||||||
echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
|
echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
|
||||||
cross_compiling=$ac_cv_prog_cc_cross
|
cross_compiling=$ac_cv_prog_cc_cross
|
||||||
|
|
||||||
echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
|
echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
|
||||||
echo "configure:724: checking whether we are using GNU C" >&5
|
echo "configure:733: checking whether we are using GNU C" >&5
|
||||||
if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
|
@ -729,7 +738,7 @@ else
|
||||||
yes;
|
yes;
|
||||||
#endif
|
#endif
|
||||||
EOF
|
EOF
|
||||||
if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:733: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
|
if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:742: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
|
||||||
ac_cv_prog_gcc=yes
|
ac_cv_prog_gcc=yes
|
||||||
else
|
else
|
||||||
ac_cv_prog_gcc=no
|
ac_cv_prog_gcc=no
|
||||||
|
@ -744,7 +753,7 @@ if test $ac_cv_prog_gcc = yes; then
|
||||||
ac_save_CFLAGS="$CFLAGS"
|
ac_save_CFLAGS="$CFLAGS"
|
||||||
CFLAGS=
|
CFLAGS=
|
||||||
echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
|
echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
|
||||||
echo "configure:748: checking whether ${CC-cc} accepts -g" >&5
|
echo "configure:757: checking whether ${CC-cc} accepts -g" >&5
|
||||||
if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
|
@ -772,7 +781,7 @@ else
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
|
echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
|
||||||
echo "configure:776: checking how to run the C preprocessor" >&5
|
echo "configure:785: checking how to run the C preprocessor" >&5
|
||||||
# On Suns, sometimes $CPP names a directory.
|
# On Suns, sometimes $CPP names a directory.
|
||||||
if test -n "$CPP" && test -d "$CPP"; then
|
if test -n "$CPP" && test -d "$CPP"; then
|
||||||
CPP=
|
CPP=
|
||||||
|
@ -787,13 +796,13 @@ else
|
||||||
# On the NeXT, cc -E runs the code through the compiler's parser,
|
# On the NeXT, cc -E runs the code through the compiler's parser,
|
||||||
# not just through cpp.
|
# not just through cpp.
|
||||||
cat > conftest.$ac_ext <<EOF
|
cat > conftest.$ac_ext <<EOF
|
||||||
#line 791 "configure"
|
#line 800 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
Syntax Error
|
Syntax Error
|
||||||
EOF
|
EOF
|
||||||
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
|
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
|
||||||
{ (eval echo configure:797: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
|
{ (eval echo configure:806: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
|
||||||
ac_err=`grep -v '^ *+' conftest.out`
|
ac_err=`grep -v '^ *+' conftest.out`
|
||||||
if test -z "$ac_err"; then
|
if test -z "$ac_err"; then
|
||||||
:
|
:
|
||||||
|
@ -804,13 +813,13 @@ else
|
||||||
rm -rf conftest*
|
rm -rf conftest*
|
||||||
CPP="${CC-cc} -E -traditional-cpp"
|
CPP="${CC-cc} -E -traditional-cpp"
|
||||||
cat > conftest.$ac_ext <<EOF
|
cat > conftest.$ac_ext <<EOF
|
||||||
#line 808 "configure"
|
#line 817 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
Syntax Error
|
Syntax Error
|
||||||
EOF
|
EOF
|
||||||
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
|
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
|
||||||
{ (eval echo configure:814: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
|
{ (eval echo configure:823: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
|
||||||
ac_err=`grep -v '^ *+' conftest.out`
|
ac_err=`grep -v '^ *+' conftest.out`
|
||||||
if test -z "$ac_err"; then
|
if test -z "$ac_err"; then
|
||||||
:
|
:
|
||||||
|
@ -837,7 +846,7 @@ echo "$ac_t""$CPP" 1>&6
|
||||||
# Uses ac_ vars as temps to allow command line to override cache and checks.
|
# Uses ac_ vars as temps to allow command line to override cache and checks.
|
||||||
# --without-x overrides everything else, but does not touch the cache.
|
# --without-x overrides everything else, but does not touch the cache.
|
||||||
echo $ac_n "checking for X""... $ac_c" 1>&6
|
echo $ac_n "checking for X""... $ac_c" 1>&6
|
||||||
echo "configure:841: checking for X" >&5
|
echo "configure:850: checking for X" >&5
|
||||||
|
|
||||||
# Check whether --with-x or --without-x was given.
|
# Check whether --with-x or --without-x was given.
|
||||||
if test "${with_x+set}" = set; then
|
if test "${with_x+set}" = set; then
|
||||||
|
@ -899,12 +908,12 @@ if test "$ac_x_includes" = NO; then
|
||||||
|
|
||||||
# First, try using that file with no special directory specified.
|
# First, try using that file with no special directory specified.
|
||||||
cat > conftest.$ac_ext <<EOF
|
cat > conftest.$ac_ext <<EOF
|
||||||
#line 903 "configure"
|
#line 912 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
#include <$x_direct_test_include>
|
#include <$x_direct_test_include>
|
||||||
EOF
|
EOF
|
||||||
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
|
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
|
||||||
{ (eval echo configure:908: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
|
{ (eval echo configure:917: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
|
||||||
ac_err=`grep -v '^ *+' conftest.out`
|
ac_err=`grep -v '^ *+' conftest.out`
|
||||||
if test -z "$ac_err"; then
|
if test -z "$ac_err"; then
|
||||||
rm -rf conftest*
|
rm -rf conftest*
|
||||||
|
@ -973,14 +982,14 @@ if test "$ac_x_libraries" = NO; then
|
||||||
ac_save_LIBS="$LIBS"
|
ac_save_LIBS="$LIBS"
|
||||||
LIBS="-l$x_direct_test_library $LIBS"
|
LIBS="-l$x_direct_test_library $LIBS"
|
||||||
cat > conftest.$ac_ext <<EOF
|
cat > conftest.$ac_ext <<EOF
|
||||||
#line 977 "configure"
|
#line 986 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
${x_direct_test_function}()
|
${x_direct_test_function}()
|
||||||
; return 0; }
|
; return 0; }
|
||||||
EOF
|
EOF
|
||||||
if { (eval echo configure:984: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
|
if { (eval echo configure:993: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
|
||||||
rm -rf conftest*
|
rm -rf conftest*
|
||||||
LIBS="$ac_save_LIBS"
|
LIBS="$ac_save_LIBS"
|
||||||
# We can link X programs with no special library path.
|
# We can link X programs with no special library path.
|
||||||
|
@ -1086,17 +1095,17 @@ else
|
||||||
case "`(uname -sr) 2>/dev/null`" in
|
case "`(uname -sr) 2>/dev/null`" in
|
||||||
"SunOS 5"*)
|
"SunOS 5"*)
|
||||||
echo $ac_n "checking whether -R must be followed by a space""... $ac_c" 1>&6
|
echo $ac_n "checking whether -R must be followed by a space""... $ac_c" 1>&6
|
||||||
echo "configure:1090: checking whether -R must be followed by a space" >&5
|
echo "configure:1099: checking whether -R must be followed by a space" >&5
|
||||||
ac_xsave_LIBS="$LIBS"; LIBS="$LIBS -R$x_libraries"
|
ac_xsave_LIBS="$LIBS"; LIBS="$LIBS -R$x_libraries"
|
||||||
cat > conftest.$ac_ext <<EOF
|
cat > conftest.$ac_ext <<EOF
|
||||||
#line 1093 "configure"
|
#line 1102 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
|
|
||||||
; return 0; }
|
; return 0; }
|
||||||
EOF
|
EOF
|
||||||
if { (eval echo configure:1100: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
|
if { (eval echo configure:1109: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
|
||||||
rm -rf conftest*
|
rm -rf conftest*
|
||||||
ac_R_nospace=yes
|
ac_R_nospace=yes
|
||||||
else
|
else
|
||||||
|
@ -1112,14 +1121,14 @@ rm -f conftest*
|
||||||
else
|
else
|
||||||
LIBS="$ac_xsave_LIBS -R $x_libraries"
|
LIBS="$ac_xsave_LIBS -R $x_libraries"
|
||||||
cat > conftest.$ac_ext <<EOF
|
cat > conftest.$ac_ext <<EOF
|
||||||
#line 1116 "configure"
|
#line 1125 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
|
|
||||||
; return 0; }
|
; return 0; }
|
||||||
EOF
|
EOF
|
||||||
if { (eval echo configure:1123: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
|
if { (eval echo configure:1132: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
|
||||||
rm -rf conftest*
|
rm -rf conftest*
|
||||||
ac_R_space=yes
|
ac_R_space=yes
|
||||||
else
|
else
|
||||||
|
@ -1151,7 +1160,7 @@ rm -f conftest*
|
||||||
# libraries were built with DECnet support. And karl@cs.umb.edu says
|
# libraries were built with DECnet support. And karl@cs.umb.edu says
|
||||||
# the Alpha needs dnet_stub (dnet does not exist).
|
# the Alpha needs dnet_stub (dnet does not exist).
|
||||||
echo $ac_n "checking for dnet_ntoa in -ldnet""... $ac_c" 1>&6
|
echo $ac_n "checking for dnet_ntoa in -ldnet""... $ac_c" 1>&6
|
||||||
echo "configure:1155: checking for dnet_ntoa in -ldnet" >&5
|
echo "configure:1164: checking for dnet_ntoa in -ldnet" >&5
|
||||||
ac_lib_var=`echo dnet'_'dnet_ntoa | sed 'y%./+-%__p_%'`
|
ac_lib_var=`echo dnet'_'dnet_ntoa | sed 'y%./+-%__p_%'`
|
||||||
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
|
@ -1159,7 +1168,7 @@ else
|
||||||
ac_save_LIBS="$LIBS"
|
ac_save_LIBS="$LIBS"
|
||||||
LIBS="-ldnet $LIBS"
|
LIBS="-ldnet $LIBS"
|
||||||
cat > conftest.$ac_ext <<EOF
|
cat > conftest.$ac_ext <<EOF
|
||||||
#line 1163 "configure"
|
#line 1172 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
/* Override any gcc2 internal prototype to avoid an error. */
|
/* Override any gcc2 internal prototype to avoid an error. */
|
||||||
/* We use char because int might match the return type of a gcc2
|
/* We use char because int might match the return type of a gcc2
|
||||||
|
@ -1170,7 +1179,7 @@ int main() {
|
||||||
dnet_ntoa()
|
dnet_ntoa()
|
||||||
; return 0; }
|
; return 0; }
|
||||||
EOF
|
EOF
|
||||||
if { (eval echo configure:1174: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
|
if { (eval echo configure:1183: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
|
||||||
rm -rf conftest*
|
rm -rf conftest*
|
||||||
eval "ac_cv_lib_$ac_lib_var=yes"
|
eval "ac_cv_lib_$ac_lib_var=yes"
|
||||||
else
|
else
|
||||||
|
@ -1192,7 +1201,7 @@ fi
|
||||||
|
|
||||||
if test $ac_cv_lib_dnet_dnet_ntoa = no; then
|
if test $ac_cv_lib_dnet_dnet_ntoa = no; then
|
||||||
echo $ac_n "checking for dnet_ntoa in -ldnet_stub""... $ac_c" 1>&6
|
echo $ac_n "checking for dnet_ntoa in -ldnet_stub""... $ac_c" 1>&6
|
||||||
echo "configure:1196: checking for dnet_ntoa in -ldnet_stub" >&5
|
echo "configure:1205: checking for dnet_ntoa in -ldnet_stub" >&5
|
||||||
ac_lib_var=`echo dnet_stub'_'dnet_ntoa | sed 'y%./+-%__p_%'`
|
ac_lib_var=`echo dnet_stub'_'dnet_ntoa | sed 'y%./+-%__p_%'`
|
||||||
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
|
@ -1200,7 +1209,7 @@ else
|
||||||
ac_save_LIBS="$LIBS"
|
ac_save_LIBS="$LIBS"
|
||||||
LIBS="-ldnet_stub $LIBS"
|
LIBS="-ldnet_stub $LIBS"
|
||||||
cat > conftest.$ac_ext <<EOF
|
cat > conftest.$ac_ext <<EOF
|
||||||
#line 1204 "configure"
|
#line 1213 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
/* Override any gcc2 internal prototype to avoid an error. */
|
/* Override any gcc2 internal prototype to avoid an error. */
|
||||||
/* We use char because int might match the return type of a gcc2
|
/* We use char because int might match the return type of a gcc2
|
||||||
|
@ -1211,7 +1220,7 @@ int main() {
|
||||||
dnet_ntoa()
|
dnet_ntoa()
|
||||||
; return 0; }
|
; return 0; }
|
||||||
EOF
|
EOF
|
||||||
if { (eval echo configure:1215: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
|
if { (eval echo configure:1224: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
|
||||||
rm -rf conftest*
|
rm -rf conftest*
|
||||||
eval "ac_cv_lib_$ac_lib_var=yes"
|
eval "ac_cv_lib_$ac_lib_var=yes"
|
||||||
else
|
else
|
||||||
|
@ -1240,12 +1249,12 @@ fi
|
||||||
# The nsl library prevents programs from opening the X display
|
# The nsl library prevents programs from opening the X display
|
||||||
# on Irix 5.2, according to dickey@clark.net.
|
# on Irix 5.2, according to dickey@clark.net.
|
||||||
echo $ac_n "checking for gethostbyname""... $ac_c" 1>&6
|
echo $ac_n "checking for gethostbyname""... $ac_c" 1>&6
|
||||||
echo "configure:1244: checking for gethostbyname" >&5
|
echo "configure:1253: checking for gethostbyname" >&5
|
||||||
if eval "test \"`echo '$''{'ac_cv_func_gethostbyname'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_func_gethostbyname'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
cat > conftest.$ac_ext <<EOF
|
cat > conftest.$ac_ext <<EOF
|
||||||
#line 1249 "configure"
|
#line 1258 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
/* System header to define __stub macros and hopefully few prototypes,
|
/* System header to define __stub macros and hopefully few prototypes,
|
||||||
which can conflict with char gethostbyname(); below. */
|
which can conflict with char gethostbyname(); below. */
|
||||||
|
@ -1268,7 +1277,7 @@ gethostbyname();
|
||||||
|
|
||||||
; return 0; }
|
; return 0; }
|
||||||
EOF
|
EOF
|
||||||
if { (eval echo configure:1272: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
|
if { (eval echo configure:1281: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
|
||||||
rm -rf conftest*
|
rm -rf conftest*
|
||||||
eval "ac_cv_func_gethostbyname=yes"
|
eval "ac_cv_func_gethostbyname=yes"
|
||||||
else
|
else
|
||||||
|
@ -1289,7 +1298,7 @@ fi
|
||||||
|
|
||||||
if test $ac_cv_func_gethostbyname = no; then
|
if test $ac_cv_func_gethostbyname = no; then
|
||||||
echo $ac_n "checking for gethostbyname in -lnsl""... $ac_c" 1>&6
|
echo $ac_n "checking for gethostbyname in -lnsl""... $ac_c" 1>&6
|
||||||
echo "configure:1293: checking for gethostbyname in -lnsl" >&5
|
echo "configure:1302: checking for gethostbyname in -lnsl" >&5
|
||||||
ac_lib_var=`echo nsl'_'gethostbyname | sed 'y%./+-%__p_%'`
|
ac_lib_var=`echo nsl'_'gethostbyname | sed 'y%./+-%__p_%'`
|
||||||
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
|
@ -1297,7 +1306,7 @@ else
|
||||||
ac_save_LIBS="$LIBS"
|
ac_save_LIBS="$LIBS"
|
||||||
LIBS="-lnsl $LIBS"
|
LIBS="-lnsl $LIBS"
|
||||||
cat > conftest.$ac_ext <<EOF
|
cat > conftest.$ac_ext <<EOF
|
||||||
#line 1301 "configure"
|
#line 1310 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
/* Override any gcc2 internal prototype to avoid an error. */
|
/* Override any gcc2 internal prototype to avoid an error. */
|
||||||
/* We use char because int might match the return type of a gcc2
|
/* We use char because int might match the return type of a gcc2
|
||||||
|
@ -1308,7 +1317,7 @@ int main() {
|
||||||
gethostbyname()
|
gethostbyname()
|
||||||
; return 0; }
|
; return 0; }
|
||||||
EOF
|
EOF
|
||||||
if { (eval echo configure:1312: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
|
if { (eval echo configure:1321: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
|
||||||
rm -rf conftest*
|
rm -rf conftest*
|
||||||
eval "ac_cv_lib_$ac_lib_var=yes"
|
eval "ac_cv_lib_$ac_lib_var=yes"
|
||||||
else
|
else
|
||||||
|
@ -1338,12 +1347,12 @@ fi
|
||||||
# -lsocket must be given before -lnsl if both are needed.
|
# -lsocket must be given before -lnsl if both are needed.
|
||||||
# We assume that if connect needs -lnsl, so does gethostbyname.
|
# We assume that if connect needs -lnsl, so does gethostbyname.
|
||||||
echo $ac_n "checking for connect""... $ac_c" 1>&6
|
echo $ac_n "checking for connect""... $ac_c" 1>&6
|
||||||
echo "configure:1342: checking for connect" >&5
|
echo "configure:1351: checking for connect" >&5
|
||||||
if eval "test \"`echo '$''{'ac_cv_func_connect'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_func_connect'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
cat > conftest.$ac_ext <<EOF
|
cat > conftest.$ac_ext <<EOF
|
||||||
#line 1347 "configure"
|
#line 1356 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
/* System header to define __stub macros and hopefully few prototypes,
|
/* System header to define __stub macros and hopefully few prototypes,
|
||||||
which can conflict with char connect(); below. */
|
which can conflict with char connect(); below. */
|
||||||
|
@ -1366,7 +1375,7 @@ connect();
|
||||||
|
|
||||||
; return 0; }
|
; return 0; }
|
||||||
EOF
|
EOF
|
||||||
if { (eval echo configure:1370: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
|
if { (eval echo configure:1379: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
|
||||||
rm -rf conftest*
|
rm -rf conftest*
|
||||||
eval "ac_cv_func_connect=yes"
|
eval "ac_cv_func_connect=yes"
|
||||||
else
|
else
|
||||||
|
@ -1387,7 +1396,7 @@ fi
|
||||||
|
|
||||||
if test $ac_cv_func_connect = no; then
|
if test $ac_cv_func_connect = no; then
|
||||||
echo $ac_n "checking for connect in -lsocket""... $ac_c" 1>&6
|
echo $ac_n "checking for connect in -lsocket""... $ac_c" 1>&6
|
||||||
echo "configure:1391: checking for connect in -lsocket" >&5
|
echo "configure:1400: checking for connect in -lsocket" >&5
|
||||||
ac_lib_var=`echo socket'_'connect | sed 'y%./+-%__p_%'`
|
ac_lib_var=`echo socket'_'connect | sed 'y%./+-%__p_%'`
|
||||||
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
|
@ -1395,7 +1404,7 @@ else
|
||||||
ac_save_LIBS="$LIBS"
|
ac_save_LIBS="$LIBS"
|
||||||
LIBS="-lsocket $X_EXTRA_LIBS $LIBS"
|
LIBS="-lsocket $X_EXTRA_LIBS $LIBS"
|
||||||
cat > conftest.$ac_ext <<EOF
|
cat > conftest.$ac_ext <<EOF
|
||||||
#line 1399 "configure"
|
#line 1408 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
/* Override any gcc2 internal prototype to avoid an error. */
|
/* Override any gcc2 internal prototype to avoid an error. */
|
||||||
/* We use char because int might match the return type of a gcc2
|
/* We use char because int might match the return type of a gcc2
|
||||||
|
@ -1406,7 +1415,7 @@ int main() {
|
||||||
connect()
|
connect()
|
||||||
; return 0; }
|
; return 0; }
|
||||||
EOF
|
EOF
|
||||||
if { (eval echo configure:1410: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
|
if { (eval echo configure:1419: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
|
||||||
rm -rf conftest*
|
rm -rf conftest*
|
||||||
eval "ac_cv_lib_$ac_lib_var=yes"
|
eval "ac_cv_lib_$ac_lib_var=yes"
|
||||||
else
|
else
|
||||||
|
@ -1430,12 +1439,12 @@ fi
|
||||||
|
|
||||||
# gomez@mi.uni-erlangen.de says -lposix is necessary on A/UX.
|
# gomez@mi.uni-erlangen.de says -lposix is necessary on A/UX.
|
||||||
echo $ac_n "checking for remove""... $ac_c" 1>&6
|
echo $ac_n "checking for remove""... $ac_c" 1>&6
|
||||||
echo "configure:1434: checking for remove" >&5
|
echo "configure:1443: checking for remove" >&5
|
||||||
if eval "test \"`echo '$''{'ac_cv_func_remove'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_func_remove'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
cat > conftest.$ac_ext <<EOF
|
cat > conftest.$ac_ext <<EOF
|
||||||
#line 1439 "configure"
|
#line 1448 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
/* System header to define __stub macros and hopefully few prototypes,
|
/* System header to define __stub macros and hopefully few prototypes,
|
||||||
which can conflict with char remove(); below. */
|
which can conflict with char remove(); below. */
|
||||||
|
@ -1458,7 +1467,7 @@ remove();
|
||||||
|
|
||||||
; return 0; }
|
; return 0; }
|
||||||
EOF
|
EOF
|
||||||
if { (eval echo configure:1462: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
|
if { (eval echo configure:1471: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
|
||||||
rm -rf conftest*
|
rm -rf conftest*
|
||||||
eval "ac_cv_func_remove=yes"
|
eval "ac_cv_func_remove=yes"
|
||||||
else
|
else
|
||||||
|
@ -1479,7 +1488,7 @@ fi
|
||||||
|
|
||||||
if test $ac_cv_func_remove = no; then
|
if test $ac_cv_func_remove = no; then
|
||||||
echo $ac_n "checking for remove in -lposix""... $ac_c" 1>&6
|
echo $ac_n "checking for remove in -lposix""... $ac_c" 1>&6
|
||||||
echo "configure:1483: checking for remove in -lposix" >&5
|
echo "configure:1492: checking for remove in -lposix" >&5
|
||||||
ac_lib_var=`echo posix'_'remove | sed 'y%./+-%__p_%'`
|
ac_lib_var=`echo posix'_'remove | sed 'y%./+-%__p_%'`
|
||||||
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
|
@ -1487,7 +1496,7 @@ else
|
||||||
ac_save_LIBS="$LIBS"
|
ac_save_LIBS="$LIBS"
|
||||||
LIBS="-lposix $LIBS"
|
LIBS="-lposix $LIBS"
|
||||||
cat > conftest.$ac_ext <<EOF
|
cat > conftest.$ac_ext <<EOF
|
||||||
#line 1491 "configure"
|
#line 1500 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
/* Override any gcc2 internal prototype to avoid an error. */
|
/* Override any gcc2 internal prototype to avoid an error. */
|
||||||
/* We use char because int might match the return type of a gcc2
|
/* We use char because int might match the return type of a gcc2
|
||||||
|
@ -1498,7 +1507,7 @@ int main() {
|
||||||
remove()
|
remove()
|
||||||
; return 0; }
|
; return 0; }
|
||||||
EOF
|
EOF
|
||||||
if { (eval echo configure:1502: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
|
if { (eval echo configure:1511: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
|
||||||
rm -rf conftest*
|
rm -rf conftest*
|
||||||
eval "ac_cv_lib_$ac_lib_var=yes"
|
eval "ac_cv_lib_$ac_lib_var=yes"
|
||||||
else
|
else
|
||||||
|
@ -1522,12 +1531,12 @@ fi
|
||||||
|
|
||||||
# BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay.
|
# BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay.
|
||||||
echo $ac_n "checking for shmat""... $ac_c" 1>&6
|
echo $ac_n "checking for shmat""... $ac_c" 1>&6
|
||||||
echo "configure:1526: checking for shmat" >&5
|
echo "configure:1535: checking for shmat" >&5
|
||||||
if eval "test \"`echo '$''{'ac_cv_func_shmat'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_func_shmat'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
cat > conftest.$ac_ext <<EOF
|
cat > conftest.$ac_ext <<EOF
|
||||||
#line 1531 "configure"
|
#line 1540 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
/* System header to define __stub macros and hopefully few prototypes,
|
/* System header to define __stub macros and hopefully few prototypes,
|
||||||
which can conflict with char shmat(); below. */
|
which can conflict with char shmat(); below. */
|
||||||
|
@ -1550,7 +1559,7 @@ shmat();
|
||||||
|
|
||||||
; return 0; }
|
; return 0; }
|
||||||
EOF
|
EOF
|
||||||
if { (eval echo configure:1554: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
|
if { (eval echo configure:1563: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
|
||||||
rm -rf conftest*
|
rm -rf conftest*
|
||||||
eval "ac_cv_func_shmat=yes"
|
eval "ac_cv_func_shmat=yes"
|
||||||
else
|
else
|
||||||
|
@ -1571,7 +1580,7 @@ fi
|
||||||
|
|
||||||
if test $ac_cv_func_shmat = no; then
|
if test $ac_cv_func_shmat = no; then
|
||||||
echo $ac_n "checking for shmat in -lipc""... $ac_c" 1>&6
|
echo $ac_n "checking for shmat in -lipc""... $ac_c" 1>&6
|
||||||
echo "configure:1575: checking for shmat in -lipc" >&5
|
echo "configure:1584: checking for shmat in -lipc" >&5
|
||||||
ac_lib_var=`echo ipc'_'shmat | sed 'y%./+-%__p_%'`
|
ac_lib_var=`echo ipc'_'shmat | sed 'y%./+-%__p_%'`
|
||||||
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
|
@ -1579,7 +1588,7 @@ else
|
||||||
ac_save_LIBS="$LIBS"
|
ac_save_LIBS="$LIBS"
|
||||||
LIBS="-lipc $LIBS"
|
LIBS="-lipc $LIBS"
|
||||||
cat > conftest.$ac_ext <<EOF
|
cat > conftest.$ac_ext <<EOF
|
||||||
#line 1583 "configure"
|
#line 1592 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
/* Override any gcc2 internal prototype to avoid an error. */
|
/* Override any gcc2 internal prototype to avoid an error. */
|
||||||
/* We use char because int might match the return type of a gcc2
|
/* We use char because int might match the return type of a gcc2
|
||||||
|
@ -1590,7 +1599,7 @@ int main() {
|
||||||
shmat()
|
shmat()
|
||||||
; return 0; }
|
; return 0; }
|
||||||
EOF
|
EOF
|
||||||
if { (eval echo configure:1594: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
|
if { (eval echo configure:1603: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
|
||||||
rm -rf conftest*
|
rm -rf conftest*
|
||||||
eval "ac_cv_lib_$ac_lib_var=yes"
|
eval "ac_cv_lib_$ac_lib_var=yes"
|
||||||
else
|
else
|
||||||
|
@ -1623,7 +1632,7 @@ fi
|
||||||
# libraries we check for below, so use a different variable.
|
# libraries we check for below, so use a different variable.
|
||||||
# --interran@uluru.Stanford.EDU, kb@cs.umb.edu.
|
# --interran@uluru.Stanford.EDU, kb@cs.umb.edu.
|
||||||
echo $ac_n "checking for IceConnectionNumber in -lICE""... $ac_c" 1>&6
|
echo $ac_n "checking for IceConnectionNumber in -lICE""... $ac_c" 1>&6
|
||||||
echo "configure:1627: checking for IceConnectionNumber in -lICE" >&5
|
echo "configure:1636: checking for IceConnectionNumber in -lICE" >&5
|
||||||
ac_lib_var=`echo ICE'_'IceConnectionNumber | sed 'y%./+-%__p_%'`
|
ac_lib_var=`echo ICE'_'IceConnectionNumber | sed 'y%./+-%__p_%'`
|
||||||
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
|
@ -1631,7 +1640,7 @@ else
|
||||||
ac_save_LIBS="$LIBS"
|
ac_save_LIBS="$LIBS"
|
||||||
LIBS="-lICE $LIBS"
|
LIBS="-lICE $LIBS"
|
||||||
cat > conftest.$ac_ext <<EOF
|
cat > conftest.$ac_ext <<EOF
|
||||||
#line 1635 "configure"
|
#line 1644 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
/* Override any gcc2 internal prototype to avoid an error. */
|
/* Override any gcc2 internal prototype to avoid an error. */
|
||||||
/* We use char because int might match the return type of a gcc2
|
/* We use char because int might match the return type of a gcc2
|
||||||
|
@ -1642,7 +1651,7 @@ int main() {
|
||||||
IceConnectionNumber()
|
IceConnectionNumber()
|
||||||
; return 0; }
|
; return 0; }
|
||||||
EOF
|
EOF
|
||||||
if { (eval echo configure:1646: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
|
if { (eval echo configure:1655: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
|
||||||
rm -rf conftest*
|
rm -rf conftest*
|
||||||
eval "ac_cv_lib_$ac_lib_var=yes"
|
eval "ac_cv_lib_$ac_lib_var=yes"
|
||||||
else
|
else
|
||||||
|
@ -1671,7 +1680,7 @@ do
|
||||||
# Extract the first word of "$ac_prog", so it can be a program name with args.
|
# Extract the first word of "$ac_prog", so it can be a program name with args.
|
||||||
set dummy $ac_prog; ac_word=$2
|
set dummy $ac_prog; ac_word=$2
|
||||||
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
||||||
echo "configure:1675: checking for $ac_word" >&5
|
echo "configure:1684: checking for $ac_word" >&5
|
||||||
if eval "test \"`echo '$''{'ac_cv_prog_YACC'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_prog_YACC'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
|
@ -1703,7 +1712,7 @@ test -n "$YACC" || YACC="yacc"
|
||||||
# Extract the first word of "flex", so it can be a program name with args.
|
# Extract the first word of "flex", so it can be a program name with args.
|
||||||
set dummy flex; ac_word=$2
|
set dummy flex; ac_word=$2
|
||||||
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
||||||
echo "configure:1707: checking for $ac_word" >&5
|
echo "configure:1716: checking for $ac_word" >&5
|
||||||
if eval "test \"`echo '$''{'ac_cv_prog_LEX'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_prog_LEX'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
|
@ -1736,7 +1745,7 @@ then
|
||||||
*) ac_lib=l ;;
|
*) ac_lib=l ;;
|
||||||
esac
|
esac
|
||||||
echo $ac_n "checking for yywrap in -l$ac_lib""... $ac_c" 1>&6
|
echo $ac_n "checking for yywrap in -l$ac_lib""... $ac_c" 1>&6
|
||||||
echo "configure:1740: checking for yywrap in -l$ac_lib" >&5
|
echo "configure:1749: checking for yywrap in -l$ac_lib" >&5
|
||||||
ac_lib_var=`echo $ac_lib'_'yywrap | sed 'y%./+-%__p_%'`
|
ac_lib_var=`echo $ac_lib'_'yywrap | sed 'y%./+-%__p_%'`
|
||||||
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
|
@ -1744,7 +1753,7 @@ else
|
||||||
ac_save_LIBS="$LIBS"
|
ac_save_LIBS="$LIBS"
|
||||||
LIBS="-l$ac_lib $LIBS"
|
LIBS="-l$ac_lib $LIBS"
|
||||||
cat > conftest.$ac_ext <<EOF
|
cat > conftest.$ac_ext <<EOF
|
||||||
#line 1748 "configure"
|
#line 1757 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
/* Override any gcc2 internal prototype to avoid an error. */
|
/* Override any gcc2 internal prototype to avoid an error. */
|
||||||
/* We use char because int might match the return type of a gcc2
|
/* We use char because int might match the return type of a gcc2
|
||||||
|
@ -1755,7 +1764,7 @@ int main() {
|
||||||
yywrap()
|
yywrap()
|
||||||
; return 0; }
|
; return 0; }
|
||||||
EOF
|
EOF
|
||||||
if { (eval echo configure:1759: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
|
if { (eval echo configure:1768: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
|
||||||
rm -rf conftest*
|
rm -rf conftest*
|
||||||
eval "ac_cv_lib_$ac_lib_var=yes"
|
eval "ac_cv_lib_$ac_lib_var=yes"
|
||||||
else
|
else
|
||||||
|
@ -1780,7 +1789,7 @@ fi
|
||||||
# Extract the first word of "ranlib", so it can be a program name with args.
|
# Extract the first word of "ranlib", so it can be a program name with args.
|
||||||
set dummy ranlib; ac_word=$2
|
set dummy ranlib; ac_word=$2
|
||||||
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
||||||
echo "configure:1784: checking for $ac_word" >&5
|
echo "configure:1793: checking for $ac_word" >&5
|
||||||
if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
|
@ -1817,7 +1826,7 @@ fi
|
||||||
# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
|
# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
|
||||||
# ./install, which can be erroneously created by make from ./install.sh.
|
# ./install, which can be erroneously created by make from ./install.sh.
|
||||||
echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
|
echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
|
||||||
echo "configure:1821: checking for a BSD compatible install" >&5
|
echo "configure:1830: checking for a BSD compatible install" >&5
|
||||||
if test -z "$INSTALL"; then
|
if test -z "$INSTALL"; then
|
||||||
if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
|
@ -1867,7 +1876,7 @@ test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
|
||||||
test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
|
test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
|
||||||
|
|
||||||
echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6
|
echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6
|
||||||
echo "configure:1871: checking whether ln -s works" >&5
|
echo "configure:1880: checking whether ln -s works" >&5
|
||||||
if eval "test \"`echo '$''{'ac_cv_prog_LN_S'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_prog_LN_S'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
|
@ -1890,7 +1899,7 @@ fi
|
||||||
|
|
||||||
|
|
||||||
echo $ac_n "checking for i386_set_ldt in -li386""... $ac_c" 1>&6
|
echo $ac_n "checking for i386_set_ldt in -li386""... $ac_c" 1>&6
|
||||||
echo "configure:1894: checking for i386_set_ldt in -li386" >&5
|
echo "configure:1903: checking for i386_set_ldt in -li386" >&5
|
||||||
ac_lib_var=`echo i386'_'i386_set_ldt | sed 'y%./+-%__p_%'`
|
ac_lib_var=`echo i386'_'i386_set_ldt | sed 'y%./+-%__p_%'`
|
||||||
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
|
@ -1898,7 +1907,7 @@ else
|
||||||
ac_save_LIBS="$LIBS"
|
ac_save_LIBS="$LIBS"
|
||||||
LIBS="-li386 $LIBS"
|
LIBS="-li386 $LIBS"
|
||||||
cat > conftest.$ac_ext <<EOF
|
cat > conftest.$ac_ext <<EOF
|
||||||
#line 1902 "configure"
|
#line 1911 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
/* Override any gcc2 internal prototype to avoid an error. */
|
/* Override any gcc2 internal prototype to avoid an error. */
|
||||||
/* We use char because int might match the return type of a gcc2
|
/* We use char because int might match the return type of a gcc2
|
||||||
|
@ -1909,7 +1918,7 @@ int main() {
|
||||||
i386_set_ldt()
|
i386_set_ldt()
|
||||||
; return 0; }
|
; return 0; }
|
||||||
EOF
|
EOF
|
||||||
if { (eval echo configure:1913: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
|
if { (eval echo configure:1922: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
|
||||||
rm -rf conftest*
|
rm -rf conftest*
|
||||||
eval "ac_cv_lib_$ac_lib_var=yes"
|
eval "ac_cv_lib_$ac_lib_var=yes"
|
||||||
else
|
else
|
||||||
|
@ -1937,7 +1946,7 @@ else
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo $ac_n "checking for iswalnum in -lw""... $ac_c" 1>&6
|
echo $ac_n "checking for iswalnum in -lw""... $ac_c" 1>&6
|
||||||
echo "configure:1941: checking for iswalnum in -lw" >&5
|
echo "configure:1950: checking for iswalnum in -lw" >&5
|
||||||
ac_lib_var=`echo w'_'iswalnum | sed 'y%./+-%__p_%'`
|
ac_lib_var=`echo w'_'iswalnum | sed 'y%./+-%__p_%'`
|
||||||
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
|
@ -1945,7 +1954,7 @@ else
|
||||||
ac_save_LIBS="$LIBS"
|
ac_save_LIBS="$LIBS"
|
||||||
LIBS="-lw $LIBS"
|
LIBS="-lw $LIBS"
|
||||||
cat > conftest.$ac_ext <<EOF
|
cat > conftest.$ac_ext <<EOF
|
||||||
#line 1949 "configure"
|
#line 1958 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
/* Override any gcc2 internal prototype to avoid an error. */
|
/* Override any gcc2 internal prototype to avoid an error. */
|
||||||
/* We use char because int might match the return type of a gcc2
|
/* We use char because int might match the return type of a gcc2
|
||||||
|
@ -1956,7 +1965,7 @@ int main() {
|
||||||
iswalnum()
|
iswalnum()
|
||||||
; return 0; }
|
; return 0; }
|
||||||
EOF
|
EOF
|
||||||
if { (eval echo configure:1960: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
|
if { (eval echo configure:1969: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
|
||||||
rm -rf conftest*
|
rm -rf conftest*
|
||||||
eval "ac_cv_lib_$ac_lib_var=yes"
|
eval "ac_cv_lib_$ac_lib_var=yes"
|
||||||
else
|
else
|
||||||
|
@ -1984,7 +1993,7 @@ else
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo $ac_n "checking for XF86DGAQueryExtension in -lXxf86dga""... $ac_c" 1>&6
|
echo $ac_n "checking for XF86DGAQueryExtension in -lXxf86dga""... $ac_c" 1>&6
|
||||||
echo "configure:1988: checking for XF86DGAQueryExtension in -lXxf86dga" >&5
|
echo "configure:1997: checking for XF86DGAQueryExtension in -lXxf86dga" >&5
|
||||||
ac_lib_var=`echo Xxf86dga'_'XF86DGAQueryExtension | sed 'y%./+-%__p_%'`
|
ac_lib_var=`echo Xxf86dga'_'XF86DGAQueryExtension | sed 'y%./+-%__p_%'`
|
||||||
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
|
@ -1992,7 +2001,7 @@ else
|
||||||
ac_save_LIBS="$LIBS"
|
ac_save_LIBS="$LIBS"
|
||||||
LIBS="-lXxf86dga $X_LIBS -lXext -lX11 $LIBS"
|
LIBS="-lXxf86dga $X_LIBS -lXext -lX11 $LIBS"
|
||||||
cat > conftest.$ac_ext <<EOF
|
cat > conftest.$ac_ext <<EOF
|
||||||
#line 1996 "configure"
|
#line 2005 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
/* Override any gcc2 internal prototype to avoid an error. */
|
/* Override any gcc2 internal prototype to avoid an error. */
|
||||||
/* We use char because int might match the return type of a gcc2
|
/* We use char because int might match the return type of a gcc2
|
||||||
|
@ -2003,7 +2012,7 @@ int main() {
|
||||||
XF86DGAQueryExtension()
|
XF86DGAQueryExtension()
|
||||||
; return 0; }
|
; return 0; }
|
||||||
EOF
|
EOF
|
||||||
if { (eval echo configure:2007: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
|
if { (eval echo configure:2016: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
|
||||||
rm -rf conftest*
|
rm -rf conftest*
|
||||||
eval "ac_cv_lib_$ac_lib_var=yes"
|
eval "ac_cv_lib_$ac_lib_var=yes"
|
||||||
else
|
else
|
||||||
|
@ -2029,12 +2038,12 @@ fi
|
||||||
|
|
||||||
|
|
||||||
echo $ac_n "checking "for Open Sound System"""... $ac_c" 1>&6
|
echo $ac_n "checking "for Open Sound System"""... $ac_c" 1>&6
|
||||||
echo "configure:2033: checking "for Open Sound System"" >&5
|
echo "configure:2042: checking "for Open Sound System"" >&5
|
||||||
if eval "test \"`echo '$''{'ac_cv_c_opensoundsystem'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_c_opensoundsystem'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
cat > conftest.$ac_ext <<EOF
|
cat > conftest.$ac_ext <<EOF
|
||||||
#line 2038 "configure"
|
#line 2047 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
#include <sys/soundcard.h>
|
#include <sys/soundcard.h>
|
||||||
int main() {
|
int main() {
|
||||||
|
@ -2046,7 +2055,7 @@ int main() {
|
||||||
|
|
||||||
; return 0; }
|
; return 0; }
|
||||||
EOF
|
EOF
|
||||||
if { (eval echo configure:2050: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
|
if { (eval echo configure:2059: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
|
||||||
rm -rf conftest*
|
rm -rf conftest*
|
||||||
ac_cv_c_opensoundsystem="yes"
|
ac_cv_c_opensoundsystem="yes"
|
||||||
else
|
else
|
||||||
|
@ -2070,12 +2079,12 @@ fi
|
||||||
|
|
||||||
|
|
||||||
echo $ac_n "checking "for union semun"""... $ac_c" 1>&6
|
echo $ac_n "checking "for union semun"""... $ac_c" 1>&6
|
||||||
echo "configure:2074: checking "for union semun"" >&5
|
echo "configure:2083: checking "for union semun"" >&5
|
||||||
if eval "test \"`echo '$''{'ac_cv_c_union_semun'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_c_union_semun'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
cat > conftest.$ac_ext <<EOF
|
cat > conftest.$ac_ext <<EOF
|
||||||
#line 2079 "configure"
|
#line 2088 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/sem.h>
|
#include <sys/sem.h>
|
||||||
|
@ -2083,7 +2092,7 @@ int main() {
|
||||||
union semun foo
|
union semun foo
|
||||||
; return 0; }
|
; return 0; }
|
||||||
EOF
|
EOF
|
||||||
if { (eval echo configure:2087: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
|
if { (eval echo configure:2096: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
|
||||||
rm -rf conftest*
|
rm -rf conftest*
|
||||||
ac_cv_c_union_semun="yes"
|
ac_cv_c_union_semun="yes"
|
||||||
else
|
else
|
||||||
|
@ -2111,7 +2120,7 @@ if test "x${GCC}" = "xyes"
|
||||||
then
|
then
|
||||||
CFLAGS="$CFLAGS -Wall"
|
CFLAGS="$CFLAGS -Wall"
|
||||||
echo $ac_n "checking "for gcc strength-reduce bug"""... $ac_c" 1>&6
|
echo $ac_n "checking "for gcc strength-reduce bug"""... $ac_c" 1>&6
|
||||||
echo "configure:2115: checking "for gcc strength-reduce bug"" >&5
|
echo "configure:2124: checking "for gcc strength-reduce bug"" >&5
|
||||||
if eval "test \"`echo '$''{'ac_cv_c_gcc_strength_bug'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_c_gcc_strength_bug'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
|
@ -2119,7 +2128,7 @@ else
|
||||||
ac_cv_c_gcc_strength_bug="yes"
|
ac_cv_c_gcc_strength_bug="yes"
|
||||||
else
|
else
|
||||||
cat > conftest.$ac_ext <<EOF
|
cat > conftest.$ac_ext <<EOF
|
||||||
#line 2123 "configure"
|
#line 2132 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
|
|
||||||
int main(void) {
|
int main(void) {
|
||||||
|
@ -2130,7 +2139,7 @@ int main(void) {
|
||||||
exit( Array[1] != -2 );
|
exit( Array[1] != -2 );
|
||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
if { (eval echo configure:2134: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
|
if { (eval echo configure:2143: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
|
||||||
then
|
then
|
||||||
ac_cv_c_gcc_strength_bug="no"
|
ac_cv_c_gcc_strength_bug="no"
|
||||||
else
|
else
|
||||||
|
@ -2153,7 +2162,7 @@ fi
|
||||||
|
|
||||||
|
|
||||||
echo $ac_n "checking "whether external symbols need an underscore prefix"""... $ac_c" 1>&6
|
echo $ac_n "checking "whether external symbols need an underscore prefix"""... $ac_c" 1>&6
|
||||||
echo "configure:2157: checking "whether external symbols need an underscore prefix"" >&5
|
echo "configure:2166: checking "whether external symbols need an underscore prefix"" >&5
|
||||||
if eval "test \"`echo '$''{'ac_cv_c_extern_prefix'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_c_extern_prefix'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
|
@ -2165,14 +2174,14 @@ _ac_test:
|
||||||
.long 0
|
.long 0
|
||||||
EOF
|
EOF
|
||||||
cat > conftest.$ac_ext <<EOF
|
cat > conftest.$ac_ext <<EOF
|
||||||
#line 2169 "configure"
|
#line 2178 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
extern int ac_test;
|
extern int ac_test;
|
||||||
int main() {
|
int main() {
|
||||||
if (ac_test) return 1
|
if (ac_test) return 1
|
||||||
; return 0; }
|
; return 0; }
|
||||||
EOF
|
EOF
|
||||||
if { (eval echo configure:2176: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
|
if { (eval echo configure:2185: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
|
||||||
rm -rf conftest*
|
rm -rf conftest*
|
||||||
ac_cv_c_extern_prefix="yes"
|
ac_cv_c_extern_prefix="yes"
|
||||||
else
|
else
|
||||||
|
@ -2196,7 +2205,7 @@ fi
|
||||||
|
|
||||||
|
|
||||||
echo $ac_n "checking "whether assembler accepts .string"""... $ac_c" 1>&6
|
echo $ac_n "checking "whether assembler accepts .string"""... $ac_c" 1>&6
|
||||||
echo "configure:2200: checking "whether assembler accepts .string"" >&5
|
echo "configure:2209: checking "whether assembler accepts .string"" >&5
|
||||||
if eval "test \"`echo '$''{'ac_cv_c_asm_string'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_c_asm_string'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
|
@ -2206,14 +2215,14 @@ cat > conftest_asm.s <<EOF
|
||||||
.string "test"
|
.string "test"
|
||||||
EOF
|
EOF
|
||||||
cat > conftest.$ac_ext <<EOF
|
cat > conftest.$ac_ext <<EOF
|
||||||
#line 2210 "configure"
|
#line 2219 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
|
|
||||||
; return 0; }
|
; return 0; }
|
||||||
EOF
|
EOF
|
||||||
if { (eval echo configure:2217: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
|
if { (eval echo configure:2226: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
|
||||||
rm -rf conftest*
|
rm -rf conftest*
|
||||||
ac_cv_c_asm_string="yes"
|
ac_cv_c_asm_string="yes"
|
||||||
else
|
else
|
||||||
|
@ -2240,21 +2249,21 @@ DLLFLAGS=""
|
||||||
if test "$LIB_TARGET" = "libwine.so.1.0"
|
if test "$LIB_TARGET" = "libwine.so.1.0"
|
||||||
then
|
then
|
||||||
echo $ac_n "checking "whether we can build a dll"""... $ac_c" 1>&6
|
echo $ac_n "checking "whether we can build a dll"""... $ac_c" 1>&6
|
||||||
echo "configure:2244: checking "whether we can build a dll"" >&5
|
echo "configure:2253: checking "whether we can build a dll"" >&5
|
||||||
if eval "test \"`echo '$''{'ac_cv_c_dll'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_c_dll'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
saved_cflags=$CFLAGS
|
saved_cflags=$CFLAGS
|
||||||
CFLAGS="$CFLAGS -fPIC -shared -Wl,-soname,conftest.so.1.0"
|
CFLAGS="$CFLAGS -fPIC -shared -Wl,-soname,conftest.so.1.0"
|
||||||
cat > conftest.$ac_ext <<EOF
|
cat > conftest.$ac_ext <<EOF
|
||||||
#line 2251 "configure"
|
#line 2260 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
return 1
|
return 1
|
||||||
; return 0; }
|
; return 0; }
|
||||||
EOF
|
EOF
|
||||||
if { (eval echo configure:2258: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
|
if { (eval echo configure:2267: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
|
||||||
rm -rf conftest*
|
rm -rf conftest*
|
||||||
ac_cv_c_dll="yes"
|
ac_cv_c_dll="yes"
|
||||||
else
|
else
|
||||||
|
@ -2279,15 +2288,57 @@ fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
echo $ac_n "checking "for reentrant X libraries"""... $ac_c" 1>&6
|
||||||
|
echo "configure:2293: checking "for reentrant X libraries"" >&5
|
||||||
|
if eval "test \"`echo '$''{'wine_cv_x_reentrant'+set}'`\" = set"; then
|
||||||
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
|
else
|
||||||
|
if test "x$with_reentrant_x" = "xno"
|
||||||
|
then
|
||||||
|
wine_cv_x_reentrant=no
|
||||||
|
else
|
||||||
|
libX11_ckeck=none
|
||||||
|
for dir in "$x_libraries" /usr/lib /usr/local/lib /lib; do
|
||||||
|
if test -e $dir/libX11.so; then
|
||||||
|
libX11_check="-D $dir/libX11.so"
|
||||||
|
break 1
|
||||||
|
fi
|
||||||
|
if test -e $dir/libX11.a; then
|
||||||
|
libX11_check="$dir/libX11.a"
|
||||||
|
break 1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
if test "$libX11_check" != "none"; then
|
||||||
|
if nm $libX11_check | grep -q __errno_location; then
|
||||||
|
wine_cv_x_reentrant=yes
|
||||||
|
else
|
||||||
|
wine_cv_x_reentrant=no
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
wine_cv_x_reentrant=unknown
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "$ac_t""$wine_cv_x_reentrant" 1>&6
|
||||||
|
if test "$wine_cv_x_reentrant" = "no"
|
||||||
|
then
|
||||||
|
cat >> confdefs.h <<\EOF
|
||||||
|
#define NO_REENTRANT_X11 1
|
||||||
|
EOF
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
for ac_func in clone memmove strerror tcgetattr usleep wait4 waitpid
|
for ac_func in clone memmove strerror tcgetattr usleep wait4 waitpid
|
||||||
do
|
do
|
||||||
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
|
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
|
||||||
echo "configure:2286: checking for $ac_func" >&5
|
echo "configure:2337: checking for $ac_func" >&5
|
||||||
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
cat > conftest.$ac_ext <<EOF
|
cat > conftest.$ac_ext <<EOF
|
||||||
#line 2291 "configure"
|
#line 2342 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
/* System header to define __stub macros and hopefully few prototypes,
|
/* System header to define __stub macros and hopefully few prototypes,
|
||||||
which can conflict with char $ac_func(); below. */
|
which can conflict with char $ac_func(); below. */
|
||||||
|
@ -2310,7 +2361,7 @@ $ac_func();
|
||||||
|
|
||||||
; return 0; }
|
; return 0; }
|
||||||
EOF
|
EOF
|
||||||
if { (eval echo configure:2314: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
|
if { (eval echo configure:2365: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
|
||||||
rm -rf conftest*
|
rm -rf conftest*
|
||||||
eval "ac_cv_func_$ac_func=yes"
|
eval "ac_cv_func_$ac_func=yes"
|
||||||
else
|
else
|
||||||
|
@ -2338,17 +2389,17 @@ for ac_hdr in wctype.h
|
||||||
do
|
do
|
||||||
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
|
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
|
||||||
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
|
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
|
||||||
echo "configure:2342: checking for $ac_hdr" >&5
|
echo "configure:2393: checking for $ac_hdr" >&5
|
||||||
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
cat > conftest.$ac_ext <<EOF
|
cat > conftest.$ac_ext <<EOF
|
||||||
#line 2347 "configure"
|
#line 2398 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
#include <$ac_hdr>
|
#include <$ac_hdr>
|
||||||
EOF
|
EOF
|
||||||
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
|
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
|
||||||
{ (eval echo configure:2352: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
|
{ (eval echo configure:2403: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
|
||||||
ac_err=`grep -v '^ *+' conftest.out`
|
ac_err=`grep -v '^ *+' conftest.out`
|
||||||
if test -z "$ac_err"; then
|
if test -z "$ac_err"; then
|
||||||
rm -rf conftest*
|
rm -rf conftest*
|
||||||
|
@ -2375,12 +2426,12 @@ fi
|
||||||
done
|
done
|
||||||
|
|
||||||
echo $ac_n "checking whether stat file-mode macros are broken""... $ac_c" 1>&6
|
echo $ac_n "checking whether stat file-mode macros are broken""... $ac_c" 1>&6
|
||||||
echo "configure:2379: checking whether stat file-mode macros are broken" >&5
|
echo "configure:2430: checking whether stat file-mode macros are broken" >&5
|
||||||
if eval "test \"`echo '$''{'ac_cv_header_stat_broken'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_header_stat_broken'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
cat > conftest.$ac_ext <<EOF
|
cat > conftest.$ac_ext <<EOF
|
||||||
#line 2384 "configure"
|
#line 2435 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
|
@ -2431,12 +2482,12 @@ EOF
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo $ac_n "checking for working const""... $ac_c" 1>&6
|
echo $ac_n "checking for working const""... $ac_c" 1>&6
|
||||||
echo "configure:2435: checking for working const" >&5
|
echo "configure:2486: checking for working const" >&5
|
||||||
if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
cat > conftest.$ac_ext <<EOF
|
cat > conftest.$ac_ext <<EOF
|
||||||
#line 2440 "configure"
|
#line 2491 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
|
@ -2485,7 +2536,7 @@ ccp = (char const *const *) p;
|
||||||
|
|
||||||
; return 0; }
|
; return 0; }
|
||||||
EOF
|
EOF
|
||||||
if { (eval echo configure:2489: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
|
if { (eval echo configure:2540: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
|
||||||
rm -rf conftest*
|
rm -rf conftest*
|
||||||
ac_cv_c_const=yes
|
ac_cv_c_const=yes
|
||||||
else
|
else
|
||||||
|
@ -2506,12 +2557,12 @@ EOF
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
|
echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
|
||||||
echo "configure:2510: checking for ANSI C header files" >&5
|
echo "configure:2561: checking for ANSI C header files" >&5
|
||||||
if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
cat > conftest.$ac_ext <<EOF
|
cat > conftest.$ac_ext <<EOF
|
||||||
#line 2515 "configure"
|
#line 2566 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
|
@ -2519,7 +2570,7 @@ else
|
||||||
#include <float.h>
|
#include <float.h>
|
||||||
EOF
|
EOF
|
||||||
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
|
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
|
||||||
{ (eval echo configure:2523: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
|
{ (eval echo configure:2574: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
|
||||||
ac_err=`grep -v '^ *+' conftest.out`
|
ac_err=`grep -v '^ *+' conftest.out`
|
||||||
if test -z "$ac_err"; then
|
if test -z "$ac_err"; then
|
||||||
rm -rf conftest*
|
rm -rf conftest*
|
||||||
|
@ -2536,7 +2587,7 @@ rm -f conftest*
|
||||||
if test $ac_cv_header_stdc = yes; then
|
if test $ac_cv_header_stdc = yes; then
|
||||||
# SunOS 4.x string.h does not declare mem*, contrary to ANSI.
|
# SunOS 4.x string.h does not declare mem*, contrary to ANSI.
|
||||||
cat > conftest.$ac_ext <<EOF
|
cat > conftest.$ac_ext <<EOF
|
||||||
#line 2540 "configure"
|
#line 2591 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
EOF
|
EOF
|
||||||
|
@ -2554,7 +2605,7 @@ fi
|
||||||
if test $ac_cv_header_stdc = yes; then
|
if test $ac_cv_header_stdc = yes; then
|
||||||
# ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
|
# ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
|
||||||
cat > conftest.$ac_ext <<EOF
|
cat > conftest.$ac_ext <<EOF
|
||||||
#line 2558 "configure"
|
#line 2609 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
EOF
|
EOF
|
||||||
|
@ -2575,7 +2626,7 @@ if test "$cross_compiling" = yes; then
|
||||||
:
|
:
|
||||||
else
|
else
|
||||||
cat > conftest.$ac_ext <<EOF
|
cat > conftest.$ac_ext <<EOF
|
||||||
#line 2579 "configure"
|
#line 2630 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
|
#define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
|
||||||
|
@ -2586,7 +2637,7 @@ if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2);
|
||||||
exit (0); }
|
exit (0); }
|
||||||
|
|
||||||
EOF
|
EOF
|
||||||
if { (eval echo configure:2590: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
|
if { (eval echo configure:2641: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
|
||||||
then
|
then
|
||||||
:
|
:
|
||||||
else
|
else
|
||||||
|
@ -2610,12 +2661,12 @@ EOF
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo $ac_n "checking for size_t""... $ac_c" 1>&6
|
echo $ac_n "checking for size_t""... $ac_c" 1>&6
|
||||||
echo "configure:2614: checking for size_t" >&5
|
echo "configure:2665: checking for size_t" >&5
|
||||||
if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
cat > conftest.$ac_ext <<EOF
|
cat > conftest.$ac_ext <<EOF
|
||||||
#line 2619 "configure"
|
#line 2670 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#if STDC_HEADERS
|
#if STDC_HEADERS
|
||||||
|
@ -2772,8 +2823,10 @@ multimedia/Makefile
|
||||||
objects/Makefile
|
objects/Makefile
|
||||||
ole/Makefile
|
ole/Makefile
|
||||||
programs/Makefile
|
programs/Makefile
|
||||||
|
programs/clock/Makefile
|
||||||
programs/notepad/Makefile
|
programs/notepad/Makefile
|
||||||
programs/progman/Makefile
|
programs/progman/Makefile
|
||||||
|
programs/view/Makefile
|
||||||
programs/winhelp/Makefile
|
programs/winhelp/Makefile
|
||||||
programs/winver/Makefile
|
programs/winver/Makefile
|
||||||
rc/Makefile
|
rc/Makefile
|
||||||
|
@ -2898,8 +2951,10 @@ multimedia/Makefile
|
||||||
objects/Makefile
|
objects/Makefile
|
||||||
ole/Makefile
|
ole/Makefile
|
||||||
programs/Makefile
|
programs/Makefile
|
||||||
|
programs/clock/Makefile
|
||||||
programs/notepad/Makefile
|
programs/notepad/Makefile
|
||||||
programs/progman/Makefile
|
programs/progman/Makefile
|
||||||
|
programs/view/Makefile
|
||||||
programs/winhelp/Makefile
|
programs/winhelp/Makefile
|
||||||
programs/winver/Makefile
|
programs/winver/Makefile
|
||||||
rc/Makefile
|
rc/Makefile
|
||||||
|
|
42
configure.in
42
configure.in
|
@ -28,6 +28,9 @@ dnl AC_ARG_WITH(ipc,
|
||||||
dnl [ --enable-ipc use inter-process communication for DDE],
|
dnl [ --enable-ipc use inter-process communication for DDE],
|
||||||
dnl [if test "$enableval" = "no"; then : ; else OPTIONS="-DCONFIG_IPC"; fi])
|
dnl [if test "$enableval" = "no"; then : ; else OPTIONS="-DCONFIG_IPC"; fi])
|
||||||
|
|
||||||
|
AC_ARG_WITH(reentrant-x,
|
||||||
|
[ --without-reentrant-x Compile for use with non-reentrant X libraries])
|
||||||
|
|
||||||
AC_SUBST(MAIN_TARGET)
|
AC_SUBST(MAIN_TARGET)
|
||||||
AC_SUBST(LIB_TARGET)
|
AC_SUBST(LIB_TARGET)
|
||||||
AC_SUBST(OPTIONS)
|
AC_SUBST(OPTIONS)
|
||||||
|
@ -162,6 +165,43 @@ then
|
||||||
fi
|
fi
|
||||||
AC_SUBST(DLLFLAGS)
|
AC_SUBST(DLLFLAGS)
|
||||||
|
|
||||||
|
dnl **** Check for reentrant X libraries ****
|
||||||
|
dnl
|
||||||
|
dnl This may fail to determine whether X libraries are reentrant if
|
||||||
|
dnl AC_PATH_XTRA does not set x_libraries. In this case manual configuration
|
||||||
|
dnl is possible with the --without-reentrant-x option.
|
||||||
|
|
||||||
|
AC_CACHE_CHECK( "for reentrant X libraries", wine_cv_x_reentrant,
|
||||||
|
[ if test "x$with_reentrant_x" = "xno"
|
||||||
|
then
|
||||||
|
wine_cv_x_reentrant=no
|
||||||
|
else
|
||||||
|
libX11_ckeck=none
|
||||||
|
for dir in "$x_libraries" /usr/lib /usr/local/lib /lib; do
|
||||||
|
if test -e $dir/libX11.so; then
|
||||||
|
libX11_check="-D $dir/libX11.so"
|
||||||
|
break 1
|
||||||
|
fi
|
||||||
|
if test -e $dir/libX11.a; then
|
||||||
|
libX11_check="$dir/libX11.a"
|
||||||
|
break 1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
if test "$libX11_check" != "none"; then
|
||||||
|
if nm $libX11_check | grep -q __errno_location; then
|
||||||
|
wine_cv_x_reentrant=yes
|
||||||
|
else
|
||||||
|
wine_cv_x_reentrant=no
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
wine_cv_x_reentrant=unknown
|
||||||
|
fi
|
||||||
|
fi ] )
|
||||||
|
if test "$wine_cv_x_reentrant" = "no"
|
||||||
|
then
|
||||||
|
AC_DEFINE(NO_REENTRANT_X11)
|
||||||
|
fi
|
||||||
|
|
||||||
dnl **** Check for functions and header files ****
|
dnl **** Check for functions and header files ****
|
||||||
|
|
||||||
AC_CHECK_FUNCS(clone memmove strerror tcgetattr usleep wait4 waitpid)
|
AC_CHECK_FUNCS(clone memmove strerror tcgetattr usleep wait4 waitpid)
|
||||||
|
@ -199,8 +239,10 @@ multimedia/Makefile
|
||||||
objects/Makefile
|
objects/Makefile
|
||||||
ole/Makefile
|
ole/Makefile
|
||||||
programs/Makefile
|
programs/Makefile
|
||||||
|
programs/clock/Makefile
|
||||||
programs/notepad/Makefile
|
programs/notepad/Makefile
|
||||||
programs/progman/Makefile
|
programs/progman/Makefile
|
||||||
|
programs/view/Makefile
|
||||||
programs/winhelp/Makefile
|
programs/winhelp/Makefile
|
||||||
programs/winver/Makefile
|
programs/winver/Makefile
|
||||||
rc/Makefile
|
rc/Makefile
|
||||||
|
|
|
@ -18,7 +18,6 @@
|
||||||
#include "heap.h"
|
#include "heap.h"
|
||||||
#include "combo.h"
|
#include "combo.h"
|
||||||
#include "drive.h"
|
#include "drive.h"
|
||||||
#include "stddebug.h"
|
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
|
||||||
/* bits in the dwKeyData */
|
/* bits in the dwKeyData */
|
||||||
|
@ -63,7 +62,7 @@ static BOOL32 COMBO_Init()
|
||||||
CBitHeight = bm.bmHeight;
|
CBitHeight = bm.bmHeight;
|
||||||
CBitWidth = bm.bmWidth;
|
CBitWidth = bm.bmWidth;
|
||||||
|
|
||||||
dprintf_combo(stddeb, "combo bitmap [%i,%i]\n", CBitWidth, CBitHeight );
|
dprintf_info(combo, "combo bitmap [%i,%i]\n", CBitWidth, CBitHeight );
|
||||||
|
|
||||||
hPrevB = SelectObject16( hDC, hComboBmp);
|
hPrevB = SelectObject16( hDC, hComboBmp);
|
||||||
SetRect16( &r, 0, 0, CBitWidth, CBitHeight );
|
SetRect16( &r, 0, 0, CBitWidth, CBitHeight );
|
||||||
|
@ -102,7 +101,7 @@ static LRESULT COMBO_NCCreate(WND* wnd, LPARAM lParam)
|
||||||
if( !(wnd->dwExStyle & WS_EX_NOPARENTNOTIFY) )
|
if( !(wnd->dwExStyle & WS_EX_NOPARENTNOTIFY) )
|
||||||
lphc->wState |= CBF_NOTIFY;
|
lphc->wState |= CBF_NOTIFY;
|
||||||
|
|
||||||
dprintf_combo(stddeb, "COMBO_NCCreate: [0x%08x], style = %08x\n",
|
dprintf_info(combo, "COMBO_NCCreate: [0x%08x], style = %08x\n",
|
||||||
(UINT32)lphc, lphc->dwStyle );
|
(UINT32)lphc, lphc->dwStyle );
|
||||||
|
|
||||||
return (LRESULT)(UINT32)wnd->hwndSelf;
|
return (LRESULT)(UINT32)wnd->hwndSelf;
|
||||||
|
@ -120,7 +119,7 @@ static LRESULT COMBO_NCDestroy( LPHEADCOMBO lphc )
|
||||||
{
|
{
|
||||||
WND* wnd = lphc->self;
|
WND* wnd = lphc->self;
|
||||||
|
|
||||||
dprintf_combo(stddeb,"Combo [%04x]: freeing storage\n", CB_HWND(lphc));
|
dprintf_info(combo,"Combo [%04x]: freeing storage\n", CB_HWND(lphc));
|
||||||
|
|
||||||
if( (CB_GETTYPE(lphc) != CBS_SIMPLE) && lphc->hWndLBox )
|
if( (CB_GETTYPE(lphc) != CBS_SIMPLE) && lphc->hWndLBox )
|
||||||
DestroyWindow32( lphc->hWndLBox );
|
DestroyWindow32( lphc->hWndLBox );
|
||||||
|
@ -219,7 +218,7 @@ static void CBCalcPlacement( LPHEADCOMBO lphc,
|
||||||
if( lphc->droppedWidth > (lprLB->right - lprLB->left) )
|
if( lphc->droppedWidth > (lprLB->right - lprLB->left) )
|
||||||
lprLB->right = lprLB->left + (INT16)lphc->droppedWidth;
|
lprLB->right = lprLB->left + (INT16)lphc->droppedWidth;
|
||||||
|
|
||||||
dprintf_combo(stddeb,"Combo [%04x]: (%i,%i-%i,%i) placement\n\ttext\t= (%i,%i-%i,%i)\
|
dprintf_info(combo,"Combo [%04x]: (%i,%i-%i,%i) placement\n\ttext\t= (%i,%i-%i,%i)\
|
||||||
\n\tbutton\t= (%i,%i-%i,%i)\n\tlbox\t= (%i,%i-%i,%i)\n", CB_HWND(lphc),
|
\n\tbutton\t= (%i,%i-%i,%i)\n\tlbox\t= (%i,%i-%i,%i)\n", CB_HWND(lphc),
|
||||||
lphc->RectCombo.left, lphc->RectCombo.top, lphc->RectCombo.right, lphc->RectCombo.bottom,
|
lphc->RectCombo.left, lphc->RectCombo.top, lphc->RectCombo.right, lphc->RectCombo.bottom,
|
||||||
lprEdit->left, lprEdit->top, lprEdit->right, lprEdit->bottom,
|
lprEdit->left, lprEdit->top, lprEdit->right, lprEdit->bottom,
|
||||||
|
@ -338,12 +337,12 @@ static LRESULT COMBO_Create( LPHEADCOMBO lphc, WND* wnd, LPARAM lParam)
|
||||||
SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE );
|
SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE );
|
||||||
lphc->wState &= ~CBF_NORESIZE;
|
lphc->wState &= ~CBF_NORESIZE;
|
||||||
}
|
}
|
||||||
dprintf_combo(stddeb,"COMBO_Create: init done\n");
|
dprintf_info(combo,"COMBO_Create: init done\n");
|
||||||
return wnd->hwndSelf;
|
return wnd->hwndSelf;
|
||||||
}
|
}
|
||||||
dprintf_combo(stderr, "COMBO_Create: edit control failure.\n");
|
dprintf_err(combo, "COMBO_Create: edit control failure.\n");
|
||||||
} else dprintf_combo(stderr, "COMBO_Create: listbox failure.\n");
|
} else dprintf_err(combo, "COMBO_Create: listbox failure.\n");
|
||||||
} else dprintf_combo(stderr, "COMBO_Create: no owner for visible combo.\n");
|
} else dprintf_err(combo, "COMBO_Create: no owner for visible combo.\n");
|
||||||
|
|
||||||
/* CreateWindow() will send WM_NCDESTROY to cleanup */
|
/* CreateWindow() will send WM_NCDESTROY to cleanup */
|
||||||
|
|
||||||
|
@ -562,7 +561,7 @@ static INT32 CBUpdateLBox( LPHEADCOMBO lphc )
|
||||||
if( length > 0 )
|
if( length > 0 )
|
||||||
pText = (LPSTR) HeapAlloc( GetProcessHeap(), 0, length + 1);
|
pText = (LPSTR) HeapAlloc( GetProcessHeap(), 0, length + 1);
|
||||||
|
|
||||||
dprintf_combo(stddeb,"\tCBUpdateLBox: edit text length %i\n", length );
|
dprintf_info(combo,"\tCBUpdateLBox: edit text length %i\n", length );
|
||||||
|
|
||||||
if( pText )
|
if( pText )
|
||||||
{
|
{
|
||||||
|
@ -598,7 +597,7 @@ static void CBUpdateEdit( LPHEADCOMBO lphc , INT32 index )
|
||||||
INT32 length;
|
INT32 length;
|
||||||
LPSTR pText = NULL;
|
LPSTR pText = NULL;
|
||||||
|
|
||||||
dprintf_combo(stddeb,"\tCBUpdateEdit: %i\n", index );
|
dprintf_info(combo,"\tCBUpdateEdit: %i\n", index );
|
||||||
|
|
||||||
if( index == -1 )
|
if( index == -1 )
|
||||||
{
|
{
|
||||||
|
@ -643,7 +642,7 @@ static void CBDropDown( LPHEADCOMBO lphc )
|
||||||
RECT16 rect;
|
RECT16 rect;
|
||||||
LPRECT16 pRect = NULL;
|
LPRECT16 pRect = NULL;
|
||||||
|
|
||||||
dprintf_combo(stddeb,"Combo [%04x]: drop down\n", CB_HWND(lphc));
|
dprintf_info(combo,"Combo [%04x]: drop down\n", CB_HWND(lphc));
|
||||||
|
|
||||||
CB_NOTIFY( lphc, CBN_DROPDOWN );
|
CB_NOTIFY( lphc, CBN_DROPDOWN );
|
||||||
|
|
||||||
|
@ -699,7 +698,7 @@ static void CBRollUp( LPHEADCOMBO lphc, BOOL32 ok, BOOL32 bButton )
|
||||||
if( IsWindow32( hWnd ) && CB_GETTYPE(lphc) != CBS_SIMPLE )
|
if( IsWindow32( hWnd ) && CB_GETTYPE(lphc) != CBS_SIMPLE )
|
||||||
{
|
{
|
||||||
|
|
||||||
dprintf_combo(stddeb,"Combo [%04x]: roll up [%i]\n", CB_HWND(lphc), (INT32)ok );
|
dprintf_info(combo,"Combo [%04x]: roll up [%i]\n", CB_HWND(lphc), (INT32)ok );
|
||||||
|
|
||||||
/* always send WM_LBUTTONUP? */
|
/* always send WM_LBUTTONUP? */
|
||||||
SendMessage32A( lphc->hWndLBox, WM_LBUTTONUP, 0, (LPARAM)(-1) );
|
SendMessage32A( lphc->hWndLBox, WM_LBUTTONUP, 0, (LPARAM)(-1) );
|
||||||
|
@ -840,7 +839,7 @@ static LRESULT COMBO_Command( LPHEADCOMBO lphc, WPARAM32 wParam, HWND32 hWnd )
|
||||||
{
|
{
|
||||||
case (EN_SETFOCUS >> 8):
|
case (EN_SETFOCUS >> 8):
|
||||||
|
|
||||||
dprintf_combo(stddeb,"Combo [%04x]: edit [%04x] got focus\n",
|
dprintf_info(combo,"Combo [%04x]: edit [%04x] got focus\n",
|
||||||
CB_HWND(lphc), (HWND16)lphc->hWndEdit );
|
CB_HWND(lphc), (HWND16)lphc->hWndEdit );
|
||||||
|
|
||||||
if( !(lphc->wState & CBF_FOCUSED) ) COMBO_SetFocus( lphc );
|
if( !(lphc->wState & CBF_FOCUSED) ) COMBO_SetFocus( lphc );
|
||||||
|
@ -848,7 +847,7 @@ static LRESULT COMBO_Command( LPHEADCOMBO lphc, WPARAM32 wParam, HWND32 hWnd )
|
||||||
|
|
||||||
case (EN_KILLFOCUS >> 8):
|
case (EN_KILLFOCUS >> 8):
|
||||||
|
|
||||||
dprintf_combo(stddeb,"Combo [%04x]: edit [%04x] lost focus\n",
|
dprintf_info(combo,"Combo [%04x]: edit [%04x] lost focus\n",
|
||||||
CB_HWND(lphc), (HWND16)lphc->hWndEdit );
|
CB_HWND(lphc), (HWND16)lphc->hWndEdit );
|
||||||
|
|
||||||
/* NOTE: it seems that Windows' edit control sends an
|
/* NOTE: it seems that Windows' edit control sends an
|
||||||
|
@ -889,7 +888,7 @@ static LRESULT COMBO_Command( LPHEADCOMBO lphc, WPARAM32 wParam, HWND32 hWnd )
|
||||||
case LBN_SELCHANGE:
|
case LBN_SELCHANGE:
|
||||||
case LBN_SELCANCEL:
|
case LBN_SELCANCEL:
|
||||||
|
|
||||||
dprintf_combo(stddeb,"Combo [%04x]: lbox selection change [%04x]\n",
|
dprintf_info(combo,"Combo [%04x]: lbox selection change [%04x]\n",
|
||||||
CB_HWND(lphc), lphc->wState );
|
CB_HWND(lphc), lphc->wState );
|
||||||
|
|
||||||
/* do not roll up if selection is being tracked
|
/* do not roll up if selection is being tracked
|
||||||
|
@ -923,7 +922,7 @@ static LRESULT COMBO_ItemOp32( LPHEADCOMBO lphc, UINT32 msg,
|
||||||
{
|
{
|
||||||
HWND32 hWnd = lphc->self->hwndSelf;
|
HWND32 hWnd = lphc->self->hwndSelf;
|
||||||
|
|
||||||
dprintf_combo(stddeb,"Combo [%04x]: ownerdraw op %04x\n",
|
dprintf_info(combo,"Combo [%04x]: ownerdraw op %04x\n",
|
||||||
CB_HWND(lphc), (UINT16)msg );
|
CB_HWND(lphc), (UINT16)msg );
|
||||||
|
|
||||||
#define lpIS ((LPDELETEITEMSTRUCT32)lParam)
|
#define lpIS ((LPDELETEITEMSTRUCT32)lParam)
|
||||||
|
@ -1061,7 +1060,7 @@ static void COMBO_Size( LPHEADCOMBO lphc )
|
||||||
GetWindowRect16( lphc->self->hwndSelf, &rect );
|
GetWindowRect16( lphc->self->hwndSelf, &rect );
|
||||||
w = rect.right - rect.left; h = rect.bottom - rect.top;
|
w = rect.right - rect.left; h = rect.bottom - rect.top;
|
||||||
|
|
||||||
dprintf_combo(stddeb,"COMBO_Size: w = %i, h = %i\n", w, h );
|
dprintf_info(combo,"COMBO_Size: w = %i, h = %i\n", w, h );
|
||||||
|
|
||||||
/* CreateWindow() may send a bogus WM_SIZE, ignore it */
|
/* CreateWindow() may send a bogus WM_SIZE, ignore it */
|
||||||
|
|
||||||
|
@ -1258,7 +1257,7 @@ LRESULT WINAPI ComboWndProc( HWND32 hwnd, UINT32 message,
|
||||||
{
|
{
|
||||||
LPHEADCOMBO lphc = CB_GETPTR(pWnd);
|
LPHEADCOMBO lphc = CB_GETPTR(pWnd);
|
||||||
|
|
||||||
dprintf_combo( stddeb, "Combo [%04x]: msg %s wp %08x lp %08lx\n",
|
dprintf_info(combo, "Combo [%04x]: msg %s wp %08x lp %08lx\n",
|
||||||
pWnd->hwndSelf, SPY_GetMsgName(message), wParam, lParam );
|
pWnd->hwndSelf, SPY_GetMsgName(message), wParam, lParam );
|
||||||
|
|
||||||
if( lphc || message == WM_NCCREATE )
|
if( lphc || message == WM_NCCREATE )
|
||||||
|
@ -1560,7 +1559,7 @@ LRESULT WINAPI ComboWndProc( HWND32 hwnd, UINT32 message,
|
||||||
return (lphc->wState & CBF_EUI) ? TRUE : FALSE;
|
return (lphc->wState & CBF_EUI) ? TRUE : FALSE;
|
||||||
|
|
||||||
case (WM_USER + 0x1B):
|
case (WM_USER + 0x1B):
|
||||||
dprintf_combo(stddeb,"Combo [%04x]: undocumented msg!\n", (HWND16)hwnd );
|
dprintf_warn(combo, "Combo [%04x]: undocumented msg!\n", (HWND16)hwnd );
|
||||||
}
|
}
|
||||||
return DefWindowProc32A(hwnd, message, wParam, lParam);
|
return DefWindowProc32A(hwnd, message, wParam, lParam);
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,7 +18,6 @@
|
||||||
#include "combo.h"
|
#include "combo.h"
|
||||||
#include "local.h"
|
#include "local.h"
|
||||||
#include "resource.h"
|
#include "resource.h"
|
||||||
#include "stddebug.h"
|
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
#include "callback.h"
|
#include "callback.h"
|
||||||
|
|
||||||
|
@ -110,7 +109,7 @@ typedef struct
|
||||||
#define ORDER_UINT32(x,y) do { if ((UINT32)(y) < (UINT32)(x)) SWAP_UINT32((x),(y)); } while(0)
|
#define ORDER_UINT32(x,y) do { if ((UINT32)(y) < (UINT32)(x)) SWAP_UINT32((x),(y)); } while(0)
|
||||||
|
|
||||||
#define DPRINTF_EDIT_NOTIFY(hwnd, str) \
|
#define DPRINTF_EDIT_NOTIFY(hwnd, str) \
|
||||||
({dprintf_edit(stddeb, \
|
({dprintf_info(edit, \
|
||||||
"edit: notification " str " sent to hwnd=%08x\n", \
|
"edit: notification " str " sent to hwnd=%08x\n", \
|
||||||
(UINT32)(hwnd));})
|
(UINT32)(hwnd));})
|
||||||
|
|
||||||
|
@ -123,11 +122,11 @@ typedef struct
|
||||||
MAKEWPARAM((wnd)->wIDmenu, wNotifyCode), \
|
MAKEWPARAM((wnd)->wIDmenu, wNotifyCode), \
|
||||||
(LPARAM)(wnd)->hwndSelf))
|
(LPARAM)(wnd)->hwndSelf))
|
||||||
#define DPRINTF_EDIT_MSG16(str) \
|
#define DPRINTF_EDIT_MSG16(str) \
|
||||||
dprintf_edit(stddeb, \
|
dprintf_info(edit, \
|
||||||
"edit: 16 bit : " str ": hwnd=%08x, wParam=%08x, lParam=%08x\n", \
|
"edit: 16 bit : " str ": hwnd=%08x, wParam=%08x, lParam=%08x\n", \
|
||||||
(UINT32)hwnd, (UINT32)wParam, (UINT32)lParam)
|
(UINT32)hwnd, (UINT32)wParam, (UINT32)lParam)
|
||||||
#define DPRINTF_EDIT_MSG32(str) \
|
#define DPRINTF_EDIT_MSG32(str) \
|
||||||
dprintf_edit(stddeb, \
|
dprintf_info(edit, \
|
||||||
"edit: 32 bit : " str ": hwnd=%08x, wParam=%08x, lParam=%08x\n", \
|
"edit: 32 bit : " str ": hwnd=%08x, wParam=%08x, lParam=%08x\n", \
|
||||||
(UINT32)hwnd, (UINT32)wParam, (UINT32)lParam)
|
(UINT32)hwnd, (UINT32)wParam, (UINT32)lParam)
|
||||||
|
|
||||||
|
@ -987,7 +986,7 @@ static INT32 EDIT_CallWordBreakProc(WND *wnd, EDITSTATE *es, INT32 start, INT32
|
||||||
}
|
}
|
||||||
else if (es->word_break_proc32A)
|
else if (es->word_break_proc32A)
|
||||||
{
|
{
|
||||||
dprintf_relay( stddeb, "CallTo32(wordbrk=%p,str='%s',idx=%d,cnt=%d,act=%d)\n",
|
dprintf_info(relay, "CallTo32(wordbrk=%p,str='%s',idx=%d,cnt=%d,act=%d)\n",
|
||||||
es->word_break_proc32A, es->text + start, index,
|
es->word_break_proc32A, es->text + start, index,
|
||||||
count, action );
|
count, action );
|
||||||
return (INT32)es->word_break_proc32A( es->text + start, index,
|
return (INT32)es->word_break_proc32A( es->text + start, index,
|
||||||
|
@ -1319,7 +1318,7 @@ static BOOL32 EDIT_MakeFit(WND *wnd, EDITSTATE *es, INT32 size)
|
||||||
if (size > es->buffer_limit)
|
if (size > es->buffer_limit)
|
||||||
size = es->buffer_limit;
|
size = es->buffer_limit;
|
||||||
|
|
||||||
dprintf_edit(stddeb, "edit: EDIT_MakeFit: trying to ReAlloc to %d+1\n", size);
|
dprintf_info(edit, "edit: EDIT_MakeFit: trying to ReAlloc to %d+1\n", size);
|
||||||
|
|
||||||
EDIT_UnlockBuffer(wnd, es, TRUE);
|
EDIT_UnlockBuffer(wnd, es, TRUE);
|
||||||
if (es->text) {
|
if (es->text) {
|
||||||
|
@ -1329,25 +1328,25 @@ static BOOL32 EDIT_MakeFit(WND *wnd, EDITSTATE *es, INT32 size)
|
||||||
es->buffer_size = 0;
|
es->buffer_size = 0;
|
||||||
} else if (es->hloc32) {
|
} else if (es->hloc32) {
|
||||||
if ((hNew32 = LocalReAlloc32(es->hloc32, size + 1, 0))) {
|
if ((hNew32 = LocalReAlloc32(es->hloc32, size + 1, 0))) {
|
||||||
dprintf_edit(stddeb, "edit: EDIT_MakeFit: Old 32 bit handle %08x, new handle %08x\n", es->hloc32, hNew32);
|
dprintf_info(edit, "edit: EDIT_MakeFit: Old 32 bit handle %08x, new handle %08x\n", es->hloc32, hNew32);
|
||||||
es->hloc32 = hNew32;
|
es->hloc32 = hNew32;
|
||||||
es->buffer_size = MIN(LocalSize32(es->hloc32) - 1, es->buffer_limit);
|
es->buffer_size = MIN(LocalSize32(es->hloc32) - 1, es->buffer_limit);
|
||||||
}
|
}
|
||||||
} else if (es->hloc16) {
|
} else if (es->hloc16) {
|
||||||
if ((hNew16 = LOCAL_ReAlloc(wnd->hInstance, es->hloc16, size + 1, LMEM_MOVEABLE))) {
|
if ((hNew16 = LOCAL_ReAlloc(wnd->hInstance, es->hloc16, size + 1, LMEM_MOVEABLE))) {
|
||||||
dprintf_edit(stddeb, "edit: EDIT_MakeFit: Old 16 bit handle %08x, new handle %08x\n", es->hloc16, hNew16);
|
dprintf_info(edit, "edit: EDIT_MakeFit: Old 16 bit handle %08x, new handle %08x\n", es->hloc16, hNew16);
|
||||||
es->hloc16 = hNew16;
|
es->hloc16 = hNew16;
|
||||||
es->buffer_size = MIN(LOCAL_Size(wnd->hInstance, es->hloc16) - 1, es->buffer_limit);
|
es->buffer_size = MIN(LOCAL_Size(wnd->hInstance, es->hloc16) - 1, es->buffer_limit);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (es->buffer_size < size) {
|
if (es->buffer_size < size) {
|
||||||
EDIT_LockBuffer(wnd, es);
|
EDIT_LockBuffer(wnd, es);
|
||||||
dprintf_edit(stddeb, "edit: EDIT_MakeFit: FAILED ! We now have %d+1\n", es->buffer_size);
|
dprintf_warn(edit, "edit: EDIT_MakeFit: FAILED ! We now have %d+1\n", es->buffer_size);
|
||||||
EDIT_NOTIFY_PARENT(wnd, EN_ERRSPACE, "EN_ERRSPACE");
|
EDIT_NOTIFY_PARENT(wnd, EN_ERRSPACE, "EN_ERRSPACE");
|
||||||
return FALSE;
|
return FALSE;
|
||||||
} else {
|
} else {
|
||||||
EDIT_LockBuffer(wnd, es);
|
EDIT_LockBuffer(wnd, es);
|
||||||
dprintf_edit(stddeb, "edit: EDIT_MakeFit: We now have %d+1\n", es->buffer_size);
|
dprintf_info(edit, "edit: EDIT_MakeFit: We now have %d+1\n", es->buffer_size);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1366,12 +1365,12 @@ static BOOL32 EDIT_MakeUndoFit(WND *wnd, EDITSTATE *es, INT32 size)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
size = ((size / GROWLENGTH) + 1) * GROWLENGTH;
|
size = ((size / GROWLENGTH) + 1) * GROWLENGTH;
|
||||||
|
|
||||||
dprintf_edit(stddeb, "edit: EDIT_MakeUndoFit: trying to ReAlloc to %d+1\n", size);
|
dprintf_info(edit, "edit: EDIT_MakeUndoFit: trying to ReAlloc to %d+1\n", size);
|
||||||
|
|
||||||
if ((es->undo_text = HeapReAlloc(es->heap, 0, es->undo_text, size + 1))) {
|
if ((es->undo_text = HeapReAlloc(es->heap, 0, es->undo_text, size + 1))) {
|
||||||
es->undo_buffer_size = HeapSize(es->heap, 0, es->undo_text) - 1;
|
es->undo_buffer_size = HeapSize(es->heap, 0, es->undo_text) - 1;
|
||||||
if (es->undo_buffer_size < size) {
|
if (es->undo_buffer_size < size) {
|
||||||
dprintf_edit(stddeb, "edit: EDIT_MakeUndoFit: FAILED ! We now have %d+1\n", es->undo_buffer_size);
|
dprintf_warn(edit, "edit: EDIT_MakeUndoFit: FAILED ! We now have %d+1\n", es->undo_buffer_size);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
@ -1659,7 +1658,7 @@ static void EDIT_PaintLine(WND *wnd, EDITSTATE *es, HDC32 dc, INT32 line, BOOL32
|
||||||
} else if (line)
|
} else if (line)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
dprintf_edit(stddeb, "edit: EDIT_PaintLine: line=%d\n", line);
|
dprintf_info(edit, "edit: EDIT_PaintLine: line=%d\n", line);
|
||||||
|
|
||||||
pos = EDIT_EM_PosFromChar(wnd, es, EDIT_EM_LineIndex(wnd, es, line), FALSE);
|
pos = EDIT_EM_PosFromChar(wnd, es, EDIT_EM_LineIndex(wnd, es, line), FALSE);
|
||||||
x = SLOWORD(pos);
|
x = SLOWORD(pos);
|
||||||
|
@ -1868,7 +1867,7 @@ static INT32 EDIT_WordBreakProc(LPSTR s, INT32 index, INT32 count, INT32 action)
|
||||||
{
|
{
|
||||||
INT32 ret = 0;
|
INT32 ret = 0;
|
||||||
|
|
||||||
dprintf_edit(stddeb, "edit: EDIT_WordBreakProc: s=%p, index=%u"
|
dprintf_info(edit, "edit: EDIT_WordBreakProc: s=%p, index=%u"
|
||||||
", count=%u, action=%d\n", s, index, count, action);
|
", count=%u, action=%d\n", s, index, count, action);
|
||||||
|
|
||||||
switch (action) {
|
switch (action) {
|
||||||
|
@ -2008,7 +2007,7 @@ static HLOCAL32 EDIT_EM_GetHandle(WND *wnd, EDITSTATE *es)
|
||||||
es->buffer_size = newSize;
|
es->buffer_size = newSize;
|
||||||
es->text = newText;
|
es->text = newText;
|
||||||
EDIT_LockBuffer(wnd, es);
|
EDIT_LockBuffer(wnd, es);
|
||||||
dprintf_edit(stddeb, "edit: EM_GETHANDLE: switched to 32 bit local heap\n");
|
dprintf_info(edit, "edit: EM_GETHANDLE: switched to 32 bit local heap\n");
|
||||||
|
|
||||||
return es->hloc32;
|
return es->hloc32;
|
||||||
}
|
}
|
||||||
|
@ -2047,7 +2046,7 @@ static HLOCAL16 EDIT_EM_GetHandle16(WND *wnd, EDITSTATE *es)
|
||||||
fprintf(stderr, "edit: EM_GETHANDLE: could not initialize local heap\n");
|
fprintf(stderr, "edit: EM_GETHANDLE: could not initialize local heap\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
dprintf_edit(stddeb, "edit: EM_GETHANDLE: local heap initialized\n");
|
dprintf_info(edit, "edit: EM_GETHANDLE: local heap initialized\n");
|
||||||
}
|
}
|
||||||
if (!(newBuf = LOCAL_Alloc(wnd->hInstance, LMEM_MOVEABLE, lstrlen32A(es->text) + 1))) {
|
if (!(newBuf = LOCAL_Alloc(wnd->hInstance, LMEM_MOVEABLE, lstrlen32A(es->text) + 1))) {
|
||||||
fprintf(stderr, "edit: EM_GETHANDLE: could not allocate new 16 bit buffer\n");
|
fprintf(stderr, "edit: EM_GETHANDLE: could not allocate new 16 bit buffer\n");
|
||||||
|
@ -2072,7 +2071,7 @@ static HLOCAL16 EDIT_EM_GetHandle16(WND *wnd, EDITSTATE *es)
|
||||||
es->buffer_size = newSize;
|
es->buffer_size = newSize;
|
||||||
es->text = newText;
|
es->text = newText;
|
||||||
EDIT_LockBuffer(wnd, es);
|
EDIT_LockBuffer(wnd, es);
|
||||||
dprintf_edit(stddeb, "edit: EM_GETHANDLE: switched to 16 bit buffer\n");
|
dprintf_info(edit, "edit: EM_GETHANDLE: switched to 16 bit buffer\n");
|
||||||
|
|
||||||
return es->hloc16;
|
return es->hloc16;
|
||||||
}
|
}
|
||||||
|
@ -2624,7 +2623,7 @@ static void EDIT_EM_SetMargins(WND *wnd, EDITSTATE *es, INT32 action, INT32 left
|
||||||
if (action & EC_RIGHTMARGIN)
|
if (action & EC_RIGHTMARGIN)
|
||||||
es->right_margin = right;
|
es->right_margin = right;
|
||||||
}
|
}
|
||||||
dprintf_edit(stddeb, "EDIT_EM_SetMargins: left=%d, right=%d\n", es->left_margin, es->right_margin);
|
dprintf_info(edit, "EDIT_EM_SetMargins: left=%d, right=%d\n", es->left_margin, es->right_margin);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -2810,7 +2809,7 @@ static BOOL32 EDIT_EM_Undo(WND *wnd, EDITSTATE *es)
|
||||||
|
|
||||||
lstrcpy32A(utext, es->undo_text);
|
lstrcpy32A(utext, es->undo_text);
|
||||||
|
|
||||||
dprintf_edit(stddeb, "edit: before UNDO:insertion length = %d, deletion buffer = %s\n",
|
dprintf_info(edit, "edit: before UNDO:insertion length = %d, deletion buffer = %s\n",
|
||||||
es->undo_insert_count, utext);
|
es->undo_insert_count, utext);
|
||||||
|
|
||||||
EDIT_EM_SetSel(wnd, es, es->undo_position, es->undo_position + es->undo_insert_count, FALSE);
|
EDIT_EM_SetSel(wnd, es, es->undo_position, es->undo_position + es->undo_insert_count, FALSE);
|
||||||
|
@ -2819,7 +2818,7 @@ static BOOL32 EDIT_EM_Undo(WND *wnd, EDITSTATE *es)
|
||||||
EDIT_EM_SetSel(wnd, es, es->undo_position, es->undo_position + es->undo_insert_count, FALSE);
|
EDIT_EM_SetSel(wnd, es, es->undo_position, es->undo_position + es->undo_insert_count, FALSE);
|
||||||
HeapFree(es->heap, 0, utext);
|
HeapFree(es->heap, 0, utext);
|
||||||
|
|
||||||
dprintf_edit(stddeb, "edit: after UNDO: insertion length = %d, deletion buffer = %s\n",
|
dprintf_info(edit, "edit: after UNDO: insertion length = %d, deletion buffer = %s\n",
|
||||||
es->undo_insert_count, es->undo_text);
|
es->undo_insert_count, es->undo_text);
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
@ -2891,7 +2890,7 @@ static void EDIT_WM_Command(WND *wnd, EDITSTATE *es, INT32 code, INT32 id, HWND3
|
||||||
EDIT_EM_ScrollCaret(wnd, es);
|
EDIT_EM_ScrollCaret(wnd, es);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
dprintf_edit(stddeb, "edit: unknown menu item, please report\n");
|
dprintf_err(edit, "edit: unknown menu item, please report\n");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3193,7 +3192,7 @@ static LRESULT EDIT_HScroll_Hack(WND *wnd, EDITSTATE *es, INT32 action, INT32 po
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
dprintf_edit(stddeb, "edit: undocumented (hacked) WM_HSCROLL parameter, please report\n");
|
dprintf_err(edit, "edit: undocumented (hacked) WM_HSCROLL parameter, please report\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if (dx)
|
if (dx)
|
||||||
|
@ -3286,7 +3285,7 @@ static BOOL32 EDIT_CheckCombo(WND *wnd, UINT32 msg, INT32 key, DWORD key_data)
|
||||||
HWND32 hCombo = wnd->parent->hwndSelf;
|
HWND32 hCombo = wnd->parent->hwndSelf;
|
||||||
BOOL32 bUIFlip = TRUE;
|
BOOL32 bUIFlip = TRUE;
|
||||||
|
|
||||||
dprintf_combo(stddeb, "EDIT_CheckCombo [%04x]: handling msg %04x (%04x)\n",
|
dprintf_info(combo, "EDIT_CheckCombo [%04x]: handling msg %04x (%04x)\n",
|
||||||
wnd->hwndSelf, (UINT16)msg, (UINT16)key);
|
wnd->hwndSelf, (UINT16)msg, (UINT16)key);
|
||||||
|
|
||||||
switch (msg) {
|
switch (msg) {
|
||||||
|
@ -3719,7 +3718,7 @@ static void EDIT_WM_SetText(WND *wnd, EDITSTATE *es, LPCSTR text)
|
||||||
{
|
{
|
||||||
EDIT_EM_SetSel(wnd, es, 0, -1, FALSE);
|
EDIT_EM_SetSel(wnd, es, 0, -1, FALSE);
|
||||||
if (text) {
|
if (text) {
|
||||||
dprintf_edit(stddeb, "\t'%s'\n", text);
|
dprintf_info(edit, "\t'%s'\n", text);
|
||||||
EDIT_EM_ReplaceSel(wnd, es, FALSE, text);
|
EDIT_EM_ReplaceSel(wnd, es, FALSE, text);
|
||||||
es->x_offset = 0;
|
es->x_offset = 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,7 +13,6 @@
|
||||||
#include "spy.h"
|
#include "spy.h"
|
||||||
#include "win.h"
|
#include "win.h"
|
||||||
#include "combo.h"
|
#include "combo.h"
|
||||||
#include "stddebug.h"
|
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
|
||||||
/* Unimplemented yet:
|
/* Unimplemented yet:
|
||||||
|
@ -309,7 +308,7 @@ static void LISTBOX_UpdateSize( WND *wnd, LB_DESCR *descr )
|
||||||
if ((descr->height > descr->item_height) &&
|
if ((descr->height > descr->item_height) &&
|
||||||
(descr->height % descr->item_height))
|
(descr->height % descr->item_height))
|
||||||
{
|
{
|
||||||
dprintf_listbox(stddeb, "Listbox %04x: changing height %d -> %d\n",
|
dprintf_info(listbox, "Listbox %04x: changing height %d -> %d\n",
|
||||||
wnd->hwndSelf, descr->height,
|
wnd->hwndSelf, descr->height,
|
||||||
descr->height - descr->height%descr->item_height );
|
descr->height - descr->height%descr->item_height );
|
||||||
SetWindowPos32( wnd->hwndSelf, 0, 0, 0,
|
SetWindowPos32( wnd->hwndSelf, 0, 0, 0,
|
||||||
|
@ -320,7 +319,7 @@ static void LISTBOX_UpdateSize( WND *wnd, LB_DESCR *descr )
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
dprintf_listbox( stddeb, "Listbox %04x: new size = %d,%d\n",
|
dprintf_info(listbox, "Listbox %04x: new size = %d,%d\n",
|
||||||
wnd->hwndSelf, descr->width, descr->height );
|
wnd->hwndSelf, descr->width, descr->height );
|
||||||
LISTBOX_UpdatePage( wnd, descr );
|
LISTBOX_UpdatePage( wnd, descr );
|
||||||
LISTBOX_UpdateScroll( wnd, descr );
|
LISTBOX_UpdateScroll( wnd, descr );
|
||||||
|
@ -458,7 +457,7 @@ static void LISTBOX_PaintItem( WND *wnd, LB_DESCR *descr, HDC32 hdc,
|
||||||
if (wnd->dwStyle & WS_DISABLED) dis.itemState |= ODS_DISABLED;
|
if (wnd->dwStyle & WS_DISABLED) dis.itemState |= ODS_DISABLED;
|
||||||
dis.itemData = item ? item->data : 0;
|
dis.itemData = item ? item->data : 0;
|
||||||
dis.rcItem = *rect;
|
dis.rcItem = *rect;
|
||||||
dprintf_listbox( stddeb, "Listbox %04x: drawitem %d (%s) action=%02x "
|
dprintf_info(listbox, "Listbox %04x: drawitem %d (%s) action=%02x "
|
||||||
"state=%02x rect=%d,%d-%d,%d\n",
|
"state=%02x rect=%d,%d-%d,%d\n",
|
||||||
wnd->hwndSelf, index, item ? item->str : "", action,
|
wnd->hwndSelf, index, item ? item->str : "", action,
|
||||||
dis.itemState, rect->left, rect->top,
|
dis.itemState, rect->left, rect->top,
|
||||||
|
@ -480,7 +479,7 @@ static void LISTBOX_PaintItem( WND *wnd, LB_DESCR *descr, HDC32 hdc,
|
||||||
oldText = SetTextColor32( hdc, GetSysColor32(COLOR_HIGHLIGHTTEXT));
|
oldText = SetTextColor32( hdc, GetSysColor32(COLOR_HIGHLIGHTTEXT));
|
||||||
}
|
}
|
||||||
|
|
||||||
dprintf_listbox( stddeb, "Listbox %04x: painting %d (%s) action=%02x "
|
dprintf_info(listbox, "Listbox %04x: painting %d (%s) action=%02x "
|
||||||
"rect=%d,%d-%d,%d\n",
|
"rect=%d,%d-%d,%d\n",
|
||||||
wnd->hwndSelf, index, item ? item->str : "", action,
|
wnd->hwndSelf, index, item ? item->str : "", action,
|
||||||
rect->left, rect->top, rect->right, rect->bottom );
|
rect->left, rect->top, rect->right, rect->bottom );
|
||||||
|
@ -603,12 +602,15 @@ static BOOL32 LISTBOX_SetTabStops( WND *wnd, LB_DESCR *descr, INT32 count,
|
||||||
{
|
{
|
||||||
INT32 i;
|
INT32 i;
|
||||||
LPINT16 p = (LPINT16)tabs;
|
LPINT16 p = (LPINT16)tabs;
|
||||||
dprintf_listbox( stddeb, "Listbox %04x: settabstops ", wnd->hwndSelf);
|
dbg_decl_str(listbox, 256);
|
||||||
|
|
||||||
for (i = 0; i < descr->nb_tabs; i++) {
|
for (i = 0; i < descr->nb_tabs; i++) {
|
||||||
descr->tabs[i] = *p++<<1; /* FIXME */
|
descr->tabs[i] = *p++<<1; /* FIXME */
|
||||||
dprintf_listbox( stddeb, "%hd ", descr->tabs[i]);
|
if(debugging_info(listbox))
|
||||||
|
dsprintf(listbox, "%hd ", descr->tabs[i]);
|
||||||
}
|
}
|
||||||
dprintf_listbox( stddeb, "\n");
|
dprintf_info(listbox, "Listbox %04x: settabstops %s\n",
|
||||||
|
wnd->hwndSelf, dbg_str(listbox));
|
||||||
}
|
}
|
||||||
else memcpy( descr->tabs, tabs, descr->nb_tabs * sizeof(INT32) );
|
else memcpy( descr->tabs, tabs, descr->nb_tabs * sizeof(INT32) );
|
||||||
/* FIXME: repaint the window? */
|
/* FIXME: repaint the window? */
|
||||||
|
@ -986,7 +988,7 @@ static LRESULT LISTBOX_SetItemHeight( WND *wnd, LB_DESCR *descr, INT32 index,
|
||||||
if (descr->style & LBS_OWNERDRAWVARIABLE)
|
if (descr->style & LBS_OWNERDRAWVARIABLE)
|
||||||
{
|
{
|
||||||
if ((index < 0) || (index >= descr->nb_items)) return LB_ERR;
|
if ((index < 0) || (index >= descr->nb_items)) return LB_ERR;
|
||||||
dprintf_listbox( stddeb, "Listbox %04x: item %d height = %d\n",
|
dprintf_info(listbox, "Listbox %04x: item %d height = %d\n",
|
||||||
wnd->hwndSelf, index, height );
|
wnd->hwndSelf, index, height );
|
||||||
descr->items[index].height = height;
|
descr->items[index].height = height;
|
||||||
LISTBOX_UpdateScroll( wnd, descr );
|
LISTBOX_UpdateScroll( wnd, descr );
|
||||||
|
@ -994,7 +996,7 @@ static LRESULT LISTBOX_SetItemHeight( WND *wnd, LB_DESCR *descr, INT32 index,
|
||||||
}
|
}
|
||||||
else if (height != descr->item_height)
|
else if (height != descr->item_height)
|
||||||
{
|
{
|
||||||
dprintf_listbox( stddeb, "Listbox %04x: new height = %d\n",
|
dprintf_info(listbox, "Listbox %04x: new height = %d\n",
|
||||||
wnd->hwndSelf, height );
|
wnd->hwndSelf, height );
|
||||||
descr->item_height = height;
|
descr->item_height = height;
|
||||||
LISTBOX_UpdatePage( wnd, descr );
|
LISTBOX_UpdatePage( wnd, descr );
|
||||||
|
@ -1016,7 +1018,7 @@ static void LISTBOX_SetHorizontalPos( WND *wnd, LB_DESCR *descr, INT32 pos )
|
||||||
pos = descr->horz_extent - descr->width;
|
pos = descr->horz_extent - descr->width;
|
||||||
if (pos < 0) pos = 0;
|
if (pos < 0) pos = 0;
|
||||||
if (!(diff = descr->horz_pos - pos)) return;
|
if (!(diff = descr->horz_pos - pos)) return;
|
||||||
dprintf_listbox( stddeb, "Listbox %04x: new horz pos = %d\n",
|
dprintf_info(listbox, "Listbox %04x: new horz pos = %d\n",
|
||||||
wnd->hwndSelf, pos );
|
wnd->hwndSelf, pos );
|
||||||
descr->horz_pos = pos;
|
descr->horz_pos = pos;
|
||||||
LISTBOX_UpdateScroll( wnd, descr );
|
LISTBOX_UpdateScroll( wnd, descr );
|
||||||
|
@ -1038,7 +1040,7 @@ static LRESULT LISTBOX_SetHorizontalExtent( WND *wnd, LB_DESCR *descr,
|
||||||
return LB_OKAY;
|
return LB_OKAY;
|
||||||
if (extent <= 0) extent = 1;
|
if (extent <= 0) extent = 1;
|
||||||
if (extent == descr->horz_extent) return LB_OKAY;
|
if (extent == descr->horz_extent) return LB_OKAY;
|
||||||
dprintf_listbox( stddeb, "Listbox %04x: new horz extent = %d\n",
|
dprintf_info(listbox, "Listbox %04x: new horz extent = %d\n",
|
||||||
wnd->hwndSelf, extent );
|
wnd->hwndSelf, extent );
|
||||||
descr->horz_extent = extent;
|
descr->horz_extent = extent;
|
||||||
if (descr->horz_pos > extent - descr->width)
|
if (descr->horz_pos > extent - descr->width)
|
||||||
|
@ -1056,7 +1058,7 @@ static LRESULT LISTBOX_SetColumnWidth( WND *wnd, LB_DESCR *descr, UINT32 width)
|
||||||
{
|
{
|
||||||
width += 2; /* For left and right margin */
|
width += 2; /* For left and right margin */
|
||||||
if (width == descr->column_width) return LB_OKAY;
|
if (width == descr->column_width) return LB_OKAY;
|
||||||
dprintf_listbox( stddeb, "Listbox %04x: new column width = %d\n",
|
dprintf_info(listbox, "Listbox %04x: new column width = %d\n",
|
||||||
wnd->hwndSelf, width );
|
wnd->hwndSelf, width );
|
||||||
descr->column_width = width;
|
descr->column_width = width;
|
||||||
LISTBOX_UpdatePage( wnd, descr );
|
LISTBOX_UpdatePage( wnd, descr );
|
||||||
|
@ -1305,7 +1307,7 @@ static LRESULT LISTBOX_InsertItem( WND *wnd, LB_DESCR *descr, INT32 index,
|
||||||
mis.itemHeight = descr->item_height;
|
mis.itemHeight = descr->item_height;
|
||||||
SendMessage32A( descr->owner, WM_MEASUREITEM, id, (LPARAM)&mis );
|
SendMessage32A( descr->owner, WM_MEASUREITEM, id, (LPARAM)&mis );
|
||||||
item->height = mis.itemHeight ? mis.itemHeight : 1;
|
item->height = mis.itemHeight ? mis.itemHeight : 1;
|
||||||
dprintf_listbox( stddeb, "Listbox %04x: measure item %d (%s) = %d\n",
|
dprintf_info(listbox, "Listbox %04x: measure item %d (%s) = %d\n",
|
||||||
wnd->hwndSelf, index, str ? str : "", item->height );
|
wnd->hwndSelf, index, str ? str : "", item->height );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1357,7 +1359,7 @@ static LRESULT LISTBOX_InsertString( WND *wnd, LB_DESCR *descr, INT32 index,
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
dprintf_listbox( stddeb, "Listbox %04x: added item %d '%s'\n",
|
dprintf_info(listbox, "Listbox %04x: added item %d '%s'\n",
|
||||||
wnd->hwndSelf, index, HAS_STRINGS(descr) ? new_str : "" );
|
wnd->hwndSelf, index, HAS_STRINGS(descr) ? new_str : "" );
|
||||||
return index;
|
return index;
|
||||||
}
|
}
|
||||||
|
@ -1694,7 +1696,7 @@ static LRESULT LISTBOX_HandleLButtonDown( WND *wnd, LB_DESCR *descr,
|
||||||
WPARAM32 wParam, INT32 x, INT32 y )
|
WPARAM32 wParam, INT32 x, INT32 y )
|
||||||
{
|
{
|
||||||
INT32 index = LISTBOX_GetItemFromPoint( wnd, descr, x, y );
|
INT32 index = LISTBOX_GetItemFromPoint( wnd, descr, x, y );
|
||||||
dprintf_listbox( stddeb, "Listbox %04x: lbuttondown %d,%d item %d\n",
|
dprintf_info(listbox, "Listbox %04x: lbuttondown %d,%d item %d\n",
|
||||||
wnd->hwndSelf, x, y, index );
|
wnd->hwndSelf, x, y, index );
|
||||||
if (!descr->caret_on && (GetFocus32() == wnd->hwndSelf)) return 0;
|
if (!descr->caret_on && (GetFocus32() == wnd->hwndSelf)) return 0;
|
||||||
if (index != -1)
|
if (index != -1)
|
||||||
|
@ -2029,7 +2031,7 @@ static BOOL32 LISTBOX_Create( WND *wnd, LPHEADCOMBO lphc )
|
||||||
|
|
||||||
if( lphc )
|
if( lphc )
|
||||||
{
|
{
|
||||||
dprintf_combo(stddeb,"ComboLBox [%04x]: resetting owner %04x -> %04x\n",
|
dprintf_info(combo,"ComboLBox [%04x]: resetting owner %04x -> %04x\n",
|
||||||
wnd->hwndSelf, descr->owner, lphc->self->hwndSelf );
|
wnd->hwndSelf, descr->owner, lphc->self->hwndSelf );
|
||||||
descr->owner = lphc->self->hwndSelf;
|
descr->owner = lphc->self->hwndSelf;
|
||||||
}
|
}
|
||||||
|
@ -2098,7 +2100,7 @@ LRESULT WINAPI ListBoxWndProc( HWND32 hwnd, UINT32 msg,
|
||||||
if (msg == WM_CREATE)
|
if (msg == WM_CREATE)
|
||||||
{
|
{
|
||||||
if (!LISTBOX_Create( wnd, NULL )) return -1;
|
if (!LISTBOX_Create( wnd, NULL )) return -1;
|
||||||
dprintf_listbox( stddeb, "Listbox: creating wnd=%04x descr=%p\n",
|
dprintf_info(listbox, "Listbox: creating wnd=%04x descr=%p\n",
|
||||||
hwnd, *(LB_DESCR **)wnd->wExtra );
|
hwnd, *(LB_DESCR **)wnd->wExtra );
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -2106,7 +2108,7 @@ LRESULT WINAPI ListBoxWndProc( HWND32 hwnd, UINT32 msg,
|
||||||
return DefWindowProc32A( hwnd, msg, wParam, lParam );
|
return DefWindowProc32A( hwnd, msg, wParam, lParam );
|
||||||
}
|
}
|
||||||
|
|
||||||
dprintf_listbox( stddeb, "Listbox %04x: msg %s wp %08x lp %08lx\n",
|
dprintf_info(listbox, "Listbox %04x: msg %s wp %08x lp %08lx\n",
|
||||||
wnd->hwndSelf, SPY_GetMsgName(msg), wParam, lParam );
|
wnd->hwndSelf, SPY_GetMsgName(msg), wParam, lParam );
|
||||||
switch(msg)
|
switch(msg)
|
||||||
{
|
{
|
||||||
|
@ -2476,7 +2478,7 @@ LRESULT WINAPI ListBoxWndProc( HWND32 hwnd, UINT32 msg,
|
||||||
|
|
||||||
default:
|
default:
|
||||||
if ((msg >= WM_USER) && (msg < 0xc000))
|
if ((msg >= WM_USER) && (msg < 0xc000))
|
||||||
dprintf_listbox(stddeb,"Listbox %04x: unknown msg %04x wp %08x lp %08lx\n",
|
dprintf_warn(listbox, "Listbox %04x: unknown msg %04x wp %08x lp %08lx\n",
|
||||||
hwnd, msg, wParam, lParam );
|
hwnd, msg, wParam, lParam );
|
||||||
return DefWindowProc32A( hwnd, msg, wParam, lParam );
|
return DefWindowProc32A( hwnd, msg, wParam, lParam );
|
||||||
}
|
}
|
||||||
|
@ -2521,7 +2523,7 @@ LRESULT WINAPI ComboLBWndProc( HWND32 hwnd, UINT32 msg,
|
||||||
{
|
{
|
||||||
LB_DESCR *descr = *(LB_DESCR **)wnd->wExtra;
|
LB_DESCR *descr = *(LB_DESCR **)wnd->wExtra;
|
||||||
|
|
||||||
dprintf_combo( stddeb, "ComboLBox [%04x]: msg %s wp %08x lp %08lx\n",
|
dprintf_info(combo, "ComboLBox [%04x]: msg %s wp %08x lp %08lx\n",
|
||||||
wnd->hwndSelf, SPY_GetMsgName(msg), wParam, lParam );
|
wnd->hwndSelf, SPY_GetMsgName(msg), wParam, lParam );
|
||||||
|
|
||||||
if( descr || msg == WM_CREATE )
|
if( descr || msg == WM_CREATE )
|
||||||
|
@ -2532,7 +2534,7 @@ LRESULT WINAPI ComboLBWndProc( HWND32 hwnd, UINT32 msg,
|
||||||
{
|
{
|
||||||
case WM_CREATE:
|
case WM_CREATE:
|
||||||
#define lpcs ((LPCREATESTRUCT32A)lParam)
|
#define lpcs ((LPCREATESTRUCT32A)lParam)
|
||||||
dprintf_combo(stddeb, "\tpassed parent handle = 0x%08x\n",
|
dprintf_info(combo, "\tpassed parent handle = 0x%08x\n",
|
||||||
(UINT32)lpcs->lpCreateParams);
|
(UINT32)lpcs->lpCreateParams);
|
||||||
|
|
||||||
lphc = (LPHEADCOMBO)(lpcs->lpCreateParams);
|
lphc = (LPHEADCOMBO)(lpcs->lpCreateParams);
|
||||||
|
@ -2578,7 +2580,7 @@ LRESULT WINAPI ComboLBWndProc( HWND32 hwnd, UINT32 msg,
|
||||||
}
|
}
|
||||||
lRet = DefWindowProc32A( hwnd, msg, wParam, lParam );
|
lRet = DefWindowProc32A( hwnd, msg, wParam, lParam );
|
||||||
|
|
||||||
dprintf_combo(stddeb,"\tComboLBox: default on msg [%04x]\n", (UINT16)msg );
|
dprintf_info(combo,"\tComboLBox: default on msg [%04x]\n", (UINT16)msg );
|
||||||
}
|
}
|
||||||
|
|
||||||
return lRet;
|
return lRet;
|
||||||
|
|
143
controls/menu.c
143
controls/menu.c
|
@ -32,7 +32,6 @@
|
||||||
#include "message.h"
|
#include "message.h"
|
||||||
#include "graphics.h"
|
#include "graphics.h"
|
||||||
#include "resource.h"
|
#include "resource.h"
|
||||||
#include "stddebug.h"
|
|
||||||
#include "tweak.h"
|
#include "tweak.h"
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
|
||||||
|
@ -165,10 +164,10 @@ static BOOL32 fEndMenu = FALSE;
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define debug_print_menuitem(pre, mp, post) \
|
#define debug_print_menuitem(pre, mp, post) \
|
||||||
if(debugging_menu) do_debug_print_menuitem(pre, mp, post)
|
if(!debugging_info(menu)) ; else do_debug_print_menuitem(pre, mp, post)
|
||||||
|
|
||||||
#define MENUOUT(text) \
|
#define MENUOUT(text) \
|
||||||
p+=sprintf(p, "%s%s", (count++ ? "," : ""), (text))
|
dsprintf(menu, "%s%s", (count++ ? "," : ""), (text))
|
||||||
|
|
||||||
#define MENUFLAG(bit,text) \
|
#define MENUFLAG(bit,text) \
|
||||||
do { \
|
do { \
|
||||||
|
@ -178,19 +177,17 @@ static BOOL32 fEndMenu = FALSE;
|
||||||
static void do_debug_print_menuitem(const char *prefix, MENUITEM * mp,
|
static void do_debug_print_menuitem(const char *prefix, MENUITEM * mp,
|
||||||
const char *postfix)
|
const char *postfix)
|
||||||
{
|
{
|
||||||
char buff[256];
|
dbg_decl_str(menu, 256);
|
||||||
char *p;
|
|
||||||
|
|
||||||
p = buff;
|
|
||||||
if (mp) {
|
if (mp) {
|
||||||
UINT32 flags = mp->fType;
|
UINT32 flags = mp->fType;
|
||||||
int typ = MENU_ITEM_TYPE(flags);
|
int typ = MENU_ITEM_TYPE(flags);
|
||||||
p+=sprintf(p, "{ ID=0x%x", mp->wID);
|
dsprintf(menu, "{ ID=0x%x", mp->wID);
|
||||||
if (flags & MF_POPUP)
|
if (flags & MF_POPUP)
|
||||||
p+=sprintf(p, ", Sub=0x%x", mp->hSubMenu);
|
dsprintf(menu, ", Sub=0x%x", mp->hSubMenu);
|
||||||
if (flags) {
|
if (flags) {
|
||||||
int count = 0;
|
int count = 0;
|
||||||
p+=sprintf(p, ", Typ=");
|
dsprintf(menu, ", Typ=");
|
||||||
if (typ == MFT_STRING)
|
if (typ == MFT_STRING)
|
||||||
/* Nothing */ ;
|
/* Nothing */ ;
|
||||||
else if (typ == MFT_SEPARATOR)
|
else if (typ == MFT_SEPARATOR)
|
||||||
|
@ -212,12 +209,12 @@ static void do_debug_print_menuitem(const char *prefix, MENUITEM * mp,
|
||||||
MENUFLAG(MFT_RIGHTJUSTIFY, "right");
|
MENUFLAG(MFT_RIGHTJUSTIFY, "right");
|
||||||
|
|
||||||
if (flags)
|
if (flags)
|
||||||
p+=sprintf(p, "+0x%x", flags);
|
dsprintf(menu, "+0x%x", flags);
|
||||||
}
|
}
|
||||||
flags = mp->fState;
|
flags = mp->fState;
|
||||||
if (flags) {
|
if (flags) {
|
||||||
int count = 0;
|
int count = 0;
|
||||||
p+=sprintf(p, ", State=");
|
dsprintf(menu, ", State=");
|
||||||
MENUFLAG(MFS_GRAYED, "grey");
|
MENUFLAG(MFS_GRAYED, "grey");
|
||||||
MENUFLAG(MFS_DISABLED, "dis");
|
MENUFLAG(MFS_DISABLED, "dis");
|
||||||
MENUFLAG(MFS_CHECKED, "check");
|
MENUFLAG(MFS_CHECKED, "check");
|
||||||
|
@ -225,28 +222,28 @@ static void do_debug_print_menuitem(const char *prefix, MENUITEM * mp,
|
||||||
MENUFLAG(MF_USECHECKBITMAPS, "usebit");
|
MENUFLAG(MF_USECHECKBITMAPS, "usebit");
|
||||||
MENUFLAG(MF_MOUSESELECT, "mouse");
|
MENUFLAG(MF_MOUSESELECT, "mouse");
|
||||||
if (flags)
|
if (flags)
|
||||||
p+=sprintf(p, "+0x%x", flags);
|
dsprintf(menu, "+0x%x", flags);
|
||||||
}
|
}
|
||||||
if (mp->hCheckBit)
|
if (mp->hCheckBit)
|
||||||
p+=sprintf(p, ", Chk=0x%x", mp->hCheckBit);
|
dsprintf(menu, ", Chk=0x%x", mp->hCheckBit);
|
||||||
if (mp->hUnCheckBit)
|
if (mp->hUnCheckBit)
|
||||||
p+=sprintf(p, ", Unc=0x%x", mp->hUnCheckBit);
|
dsprintf(menu, ", Unc=0x%x", mp->hUnCheckBit);
|
||||||
|
|
||||||
if (typ == MFT_STRING) {
|
if (typ == MFT_STRING) {
|
||||||
if (mp->text)
|
if (mp->text)
|
||||||
p+=sprintf(p, ", Text=\"%s\"", mp->text);
|
dsprintf(menu, ", Text=\"%s\"", mp->text);
|
||||||
else
|
else
|
||||||
p+=sprintf(p, ", Text=Null");
|
dsprintf(menu, ", Text=Null");
|
||||||
} else if (mp->text == NULL)
|
} else if (mp->text == NULL)
|
||||||
/* Nothing */ ;
|
/* Nothing */ ;
|
||||||
else
|
else
|
||||||
p+=sprintf(p, ", Text=%p", mp->text);
|
dsprintf(menu, ", Text=%p", mp->text);
|
||||||
p+=sprintf(p, " }");
|
dsprintf(menu, " }");
|
||||||
} else {
|
} else {
|
||||||
p+=sprintf(p, "NULL");
|
dsprintf(menu, "NULL");
|
||||||
}
|
}
|
||||||
|
|
||||||
dprintf_menu(stddeb, "%s %s %s\n", prefix, buff, postfix);
|
dprintf_info(menu, "%s %s %s\n", prefix, dbg_str(menu), postfix);
|
||||||
}
|
}
|
||||||
|
|
||||||
#undef MENUOUT
|
#undef MENUOUT
|
||||||
|
@ -270,7 +267,7 @@ static HMENU32 MENU_CopySysPopup(void)
|
||||||
fprintf( stderr, "Unable to load default system menu\n" );
|
fprintf( stderr, "Unable to load default system menu\n" );
|
||||||
}
|
}
|
||||||
|
|
||||||
dprintf_menu( stddeb, "MENU_CopySysPopup: returning %x.\n", hMenu );
|
dprintf_info(menu, "MENU_CopySysPopup: returning %x.\n", hMenu );
|
||||||
|
|
||||||
return hMenu;
|
return hMenu;
|
||||||
}
|
}
|
||||||
|
@ -308,7 +305,7 @@ HMENU32 MENU_GetSysMenu( HWND32 hWnd, HMENU32 hPopupMenu )
|
||||||
menu = (POPUPMENU*) USER_HEAP_LIN_ADDR(hPopupMenu);
|
menu = (POPUPMENU*) USER_HEAP_LIN_ADDR(hPopupMenu);
|
||||||
menu->wFlags |= MF_SYSMENU;
|
menu->wFlags |= MF_SYSMENU;
|
||||||
|
|
||||||
dprintf_menu(stddeb,"GetSysMenu hMenu=%04x (%04x)\n", hMenu, hPopupMenu );
|
dprintf_info(menu,"GetSysMenu hMenu=%04x (%04x)\n", hMenu, hPopupMenu );
|
||||||
return hMenu;
|
return hMenu;
|
||||||
}
|
}
|
||||||
DestroyMenu32( hMenu );
|
DestroyMenu32( hMenu );
|
||||||
|
@ -456,7 +453,7 @@ static UINT32 MENU_GetStartOfPrevColumn(
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
dprintf_menu( stddeb, "MENU_GetStartOfPrevColumn: ret %d.\n", i );
|
dprintf_info(menu, "MENU_GetStartOfPrevColumn: ret %d.\n", i );
|
||||||
|
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
|
@ -555,7 +552,7 @@ static MENUITEM *MENU_FindItemByCoords( POPUPMENU *menu,
|
||||||
static UINT32 MENU_FindItemByKey( HWND32 hwndOwner, HMENU32 hmenu,
|
static UINT32 MENU_FindItemByKey( HWND32 hwndOwner, HMENU32 hmenu,
|
||||||
UINT32 key, BOOL32 forceMenuChar )
|
UINT32 key, BOOL32 forceMenuChar )
|
||||||
{
|
{
|
||||||
dprintf_menu(stddeb,"\tlooking for '%c' in [%04x]\n", (char)key, (UINT16)hmenu );
|
dprintf_info(menu,"\tlooking for '%c' in [%04x]\n", (char)key, (UINT16)hmenu );
|
||||||
|
|
||||||
if (!IsMenu32( hmenu ))
|
if (!IsMenu32( hmenu ))
|
||||||
{
|
{
|
||||||
|
@ -576,7 +573,7 @@ static UINT32 MENU_FindItemByKey( HWND32 hwndOwner, HMENU32 hmenu,
|
||||||
key = toupper(key);
|
key = toupper(key);
|
||||||
for (i = 0; i < menu->nItems; i++, item++)
|
for (i = 0; i < menu->nItems; i++, item++)
|
||||||
{
|
{
|
||||||
if (IS_STRING_ITEM(item->fType))
|
if (item->text && (IS_STRING_ITEM(item->fType)))
|
||||||
{
|
{
|
||||||
char *p = strchr( item->text, '&' );
|
char *p = strchr( item->text, '&' );
|
||||||
if (p && (p[1] != '&') && (toupper(p[1]) == key)) return i;
|
if (p && (p[1] != '&') && (toupper(p[1]) == key)) return i;
|
||||||
|
@ -603,7 +600,7 @@ static void MENU_CalcItemSize( HDC32 hdc, MENUITEM *lpitem, HWND32 hwndOwner,
|
||||||
DWORD dwSize;
|
DWORD dwSize;
|
||||||
char *p;
|
char *p;
|
||||||
|
|
||||||
dprintf_menu(stddeb, "MENU_CalcItemSize: HDC 0x%x at (%d,%d)\n",
|
dprintf_info(menu, "MENU_CalcItemSize: HDC 0x%x at (%d,%d)\n",
|
||||||
hdc, orgX, orgY);
|
hdc, orgX, orgY);
|
||||||
debug_print_menuitem("MENU_CalcItemSize: menuitem:", lpitem,
|
debug_print_menuitem("MENU_CalcItemSize: menuitem:", lpitem,
|
||||||
(menuBar ? " (MenuBar)" : ""));
|
(menuBar ? " (MenuBar)" : ""));
|
||||||
|
@ -621,7 +618,7 @@ static void MENU_CalcItemSize( HDC32 hdc, MENUITEM *lpitem, HWND32 hwndOwner,
|
||||||
SendMessage32A( hwndOwner, WM_MEASUREITEM, 0, (LPARAM)&mis );
|
SendMessage32A( hwndOwner, WM_MEASUREITEM, 0, (LPARAM)&mis );
|
||||||
lpitem->rect.bottom += mis.itemHeight;
|
lpitem->rect.bottom += mis.itemHeight;
|
||||||
lpitem->rect.right += mis.itemWidth;
|
lpitem->rect.right += mis.itemWidth;
|
||||||
dprintf_menu(stddeb, "MENU_CalcItemSize: %08x %dx%d\n",
|
dprintf_info(menu, "MENU_CalcItemSize: %08x %dx%d\n",
|
||||||
lpitem->wID, mis.itemWidth, mis.itemHeight);
|
lpitem->wID, mis.itemWidth, mis.itemHeight);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -756,7 +753,7 @@ static void MENU_MenuBarCalcSize( HDC32 hdc, LPRECT32 lprect,
|
||||||
|
|
||||||
if ((lprect == NULL) || (lppop == NULL)) return;
|
if ((lprect == NULL) || (lppop == NULL)) return;
|
||||||
if (lppop->nItems == 0) return;
|
if (lppop->nItems == 0) return;
|
||||||
dprintf_menu(stddeb,"MENU_MenuBarCalcSize left=%d top=%d right=%d bottom=%d\n",
|
dprintf_info(menu,"MENU_MenuBarCalcSize left=%d top=%d right=%d bottom=%d\n",
|
||||||
lprect->left, lprect->top, lprect->right, lprect->bottom);
|
lprect->left, lprect->top, lprect->right, lprect->bottom);
|
||||||
lppop->Width = lprect->right - lprect->left;
|
lppop->Width = lprect->right - lprect->left;
|
||||||
lppop->Height = 0;
|
lppop->Height = 0;
|
||||||
|
@ -776,7 +773,7 @@ static void MENU_MenuBarCalcSize( HDC32 hdc, LPRECT32 lprect,
|
||||||
if ((i != start) &&
|
if ((i != start) &&
|
||||||
(lpitem->fType & (MF_MENUBREAK | MF_MENUBARBREAK))) break;
|
(lpitem->fType & (MF_MENUBREAK | MF_MENUBARBREAK))) break;
|
||||||
|
|
||||||
dprintf_menu( stddeb,
|
dprintf_info(menu,
|
||||||
"MENU_MenuBarCalcSize: calling MENU_CalcItemSize"
|
"MENU_MenuBarCalcSize: calling MENU_CalcItemSize"
|
||||||
" org=(%d, %d)\n", orgX, orgY );
|
" org=(%d, %d)\n", orgX, orgY );
|
||||||
debug_print_menuitem (" item: ", lpitem, "");
|
debug_print_menuitem (" item: ", lpitem, "");
|
||||||
|
@ -847,7 +844,7 @@ static void MENU_DrawMenuItem( HWND32 hwnd, HDC32 hdc, MENUITEM *lpitem,
|
||||||
{
|
{
|
||||||
DRAWITEMSTRUCT32 dis;
|
DRAWITEMSTRUCT32 dis;
|
||||||
|
|
||||||
dprintf_menu( stddeb, "DrawMenuItem: Ownerdraw!\n" );
|
dprintf_info(menu, "DrawMenuItem: Ownerdraw!\n" );
|
||||||
dis.CtlType = ODT_MENU;
|
dis.CtlType = ODT_MENU;
|
||||||
dis.itemID = lpitem->wID;
|
dis.itemID = lpitem->wID;
|
||||||
dis.itemData = (DWORD)lpitem->text;
|
dis.itemData = (DWORD)lpitem->text;
|
||||||
|
@ -1140,7 +1137,7 @@ UINT32 MENU_DrawMenuBar( HDC32 hDC, LPRECT32 lprect, HWND32 hwnd,
|
||||||
|
|
||||||
lppop = (LPPOPUPMENU) USER_HEAP_LIN_ADDR( (HMENU16)wndPtr->wIDmenu );
|
lppop = (LPPOPUPMENU) USER_HEAP_LIN_ADDR( (HMENU16)wndPtr->wIDmenu );
|
||||||
if (lppop == NULL || lprect == NULL) return SYSMETRICS_CYMENU;
|
if (lppop == NULL || lprect == NULL) return SYSMETRICS_CYMENU;
|
||||||
dprintf_menu(stddeb,"MENU_DrawMenuBar(%04x, %p, %p); !\n",
|
dprintf_info(menu,"MENU_DrawMenuBar(%04x, %p, %p); !\n",
|
||||||
hDC, lprect, lppop);
|
hDC, lprect, lppop);
|
||||||
if (lppop->Height == 0) MENU_MenuBarCalcSize(hDC, lprect, lppop, hwnd);
|
if (lppop->Height == 0) MENU_MenuBarCalcSize(hDC, lprect, lppop, hwnd);
|
||||||
lprect->bottom = lprect->top + lppop->Height;
|
lprect->bottom = lprect->top + lppop->Height;
|
||||||
|
@ -1175,7 +1172,7 @@ BOOL32 MENU_PatchResidentPopup( HQUEUE16 checkQueue, WND* checkWnd )
|
||||||
{
|
{
|
||||||
HTASK16 hTask = 0;
|
HTASK16 hTask = 0;
|
||||||
|
|
||||||
dprintf_menu(stddeb,"patching resident popup: %04x %04x [%04x %04x]\n",
|
dprintf_info(menu,"patching resident popup: %04x %04x [%04x %04x]\n",
|
||||||
checkQueue, checkWnd ? checkWnd->hwndSelf : 0, pTopPopupWnd->hmemTaskQ,
|
checkQueue, checkWnd ? checkWnd->hwndSelf : 0, pTopPopupWnd->hmemTaskQ,
|
||||||
pTopPopupWnd->owner ? pTopPopupWnd->owner->hwndSelf : 0);
|
pTopPopupWnd->owner ? pTopPopupWnd->owner->hwndSelf : 0);
|
||||||
|
|
||||||
|
@ -1213,7 +1210,7 @@ BOOL32 MENU_PatchResidentPopup( HQUEUE16 checkQueue, WND* checkWnd )
|
||||||
pTopPopupWnd->hmemTaskQ = task->hQueue;
|
pTopPopupWnd->hmemTaskQ = task->hQueue;
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
else dprintf_menu(stddeb,"failed to patch resident popup.\n");
|
else dprintf_warn(menu,"failed to patch resident popup.\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
@ -1491,7 +1488,7 @@ static MENUITEM *MENU_InsertItem( HMENU32 hMenu, UINT32 pos, UINT32 flags )
|
||||||
|
|
||||||
if (!(menu = (POPUPMENU *)USER_HEAP_LIN_ADDR(hMenu)))
|
if (!(menu = (POPUPMENU *)USER_HEAP_LIN_ADDR(hMenu)))
|
||||||
{
|
{
|
||||||
dprintf_menu( stddeb, "MENU_InsertItem: %04x not a menu handle\n",
|
dprintf_warn(menu, "MENU_InsertItem: %04x not a menu handle\n",
|
||||||
hMenu );
|
hMenu );
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -1509,13 +1506,13 @@ static MENUITEM *MENU_InsertItem( HMENU32 hMenu, UINT32 pos, UINT32 flags )
|
||||||
{
|
{
|
||||||
if (!MENU_FindItem( &hMenu, &pos, flags ))
|
if (!MENU_FindItem( &hMenu, &pos, flags ))
|
||||||
{
|
{
|
||||||
dprintf_menu( stddeb, "MENU_InsertItem: item %x not found\n",
|
dprintf_warn(menu, "MENU_InsertItem: item %x not found\n",
|
||||||
pos );
|
pos );
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
if (!(menu = (LPPOPUPMENU) USER_HEAP_LIN_ADDR(hMenu)))
|
if (!(menu = (LPPOPUPMENU) USER_HEAP_LIN_ADDR(hMenu)))
|
||||||
{
|
{
|
||||||
dprintf_menu(stddeb,"MENU_InsertItem: %04x not a menu handle\n",
|
dprintf_warn(menu,"MENU_InsertItem: %04x not a menu handle\n",
|
||||||
hMenu);
|
hMenu);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -1526,7 +1523,7 @@ static MENUITEM *MENU_InsertItem( HMENU32 hMenu, UINT32 pos, UINT32 flags )
|
||||||
newItems = HeapAlloc( SystemHeap, 0, sizeof(MENUITEM) * (menu->nItems+1) );
|
newItems = HeapAlloc( SystemHeap, 0, sizeof(MENUITEM) * (menu->nItems+1) );
|
||||||
if (!newItems)
|
if (!newItems)
|
||||||
{
|
{
|
||||||
dprintf_menu( stddeb, "MENU_InsertItem: allocation failed\n" );
|
dprintf_warn(menu, "MENU_InsertItem: allocation failed\n" );
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
if (menu->nItems > 0)
|
if (menu->nItems > 0)
|
||||||
|
@ -1623,7 +1620,7 @@ static LPCSTR MENUEX_ParseResource( LPCSTR res, HMENU32 hMenu)
|
||||||
{
|
{
|
||||||
LPSTR newstr = HEAP_strdupWtoA(GetProcessHeap(),
|
LPSTR newstr = HEAP_strdupWtoA(GetProcessHeap(),
|
||||||
0, mii.dwTypeData);
|
0, mii.dwTypeData);
|
||||||
dprintf_menu(stddeb, "Menu item: [%08x,%08x,%04x,%04x,%s]\n",
|
dprintf_info(menu, "Menu item: [%08x,%08x,%04x,%04x,%s]\n",
|
||||||
mii.fType, mii.fState, mii.wID, resinfo, newstr);
|
mii.fType, mii.fState, mii.wID, resinfo, newstr);
|
||||||
HeapFree( GetProcessHeap(), 0, newstr );
|
HeapFree( GetProcessHeap(), 0, newstr );
|
||||||
}
|
}
|
||||||
|
@ -1837,7 +1834,7 @@ static BOOL32 MENU_ExecFocusedItem( MTRACKER* pmt, HMENU32 hMenu )
|
||||||
|
|
||||||
item = &menu->items[menu->FocusedItem];
|
item = &menu->items[menu->FocusedItem];
|
||||||
|
|
||||||
dprintf_menu(stddeb, "MENU_ExecFocusedItem: %08x %08x %08x\n",
|
dprintf_info(menu, "MENU_ExecFocusedItem: %08x %08x %08x\n",
|
||||||
hMenu, item->wID, item->hSubMenu);
|
hMenu, item->wID, item->hSubMenu);
|
||||||
|
|
||||||
if (!(item->fType & MF_POPUP))
|
if (!(item->fType & MF_POPUP))
|
||||||
|
@ -1932,7 +1929,7 @@ static BOOL32 MENU_ButtonDown( MTRACKER* pmt, HMENU32 hPtMenu )
|
||||||
pmt->hCurrentMenu = MENU_ShowSubPopup( pmt->hOwnerWnd, hPtMenu, FALSE );
|
pmt->hCurrentMenu = MENU_ShowSubPopup( pmt->hOwnerWnd, hPtMenu, FALSE );
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
else dprintf_menu(stddeb,"\tunable to find clicked item!\n");
|
else dprintf_warn(menu, "\tunable to find clicked item!\n");
|
||||||
}
|
}
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
@ -2026,7 +2023,7 @@ static LRESULT MENU_DoNextMenu( MTRACKER* pmt, UINT32 vk )
|
||||||
LRESULT l = SendMessage16( pmt->hOwnerWnd, WM_NEXTMENU, (WPARAM16)vk,
|
LRESULT l = SendMessage16( pmt->hOwnerWnd, WM_NEXTMENU, (WPARAM16)vk,
|
||||||
(IS_SYSTEM_MENU(menu)) ? GetSubMenu16(pmt->hTopMenu,0) : pmt->hTopMenu );
|
(IS_SYSTEM_MENU(menu)) ? GetSubMenu16(pmt->hTopMenu,0) : pmt->hTopMenu );
|
||||||
|
|
||||||
dprintf_menu(stddeb,"NextMenu: %04x [%04x] -> %04x [%04x]\n",
|
dprintf_info(menu,"NextMenu: %04x [%04x] -> %04x [%04x]\n",
|
||||||
(UINT16)pmt->hCurrentMenu, (UINT16)pmt->hOwnerWnd, LOWORD(l), HIWORD(l) );
|
(UINT16)pmt->hCurrentMenu, (UINT16)pmt->hOwnerWnd, LOWORD(l), HIWORD(l) );
|
||||||
|
|
||||||
if( l == 0 )
|
if( l == 0 )
|
||||||
|
@ -2074,7 +2071,7 @@ static LRESULT MENU_DoNextMenu( MTRACKER* pmt, UINT32 vk )
|
||||||
/* FIXME: Not sure what to do here, perhaps,
|
/* FIXME: Not sure what to do here, perhaps,
|
||||||
* try to track hNewMenu as a popup? */
|
* try to track hNewMenu as a popup? */
|
||||||
|
|
||||||
dprintf_menu(stddeb,"MENU_DoNextMenu() got confused.\n");
|
dprintf_info(menu,"MENU_DoNextMenu() got confused.\n");
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2205,7 +2202,7 @@ static void MENU_KeyRight( MTRACKER* pmt )
|
||||||
POPUPMENU *menu = (POPUPMENU *) USER_HEAP_LIN_ADDR( pmt->hTopMenu );
|
POPUPMENU *menu = (POPUPMENU *) USER_HEAP_LIN_ADDR( pmt->hTopMenu );
|
||||||
UINT32 nextcol;
|
UINT32 nextcol;
|
||||||
|
|
||||||
dprintf_menu( stddeb, "MENU_KeyRight called, cur %x (%s), top %x (%s).\n",
|
dprintf_info(menu, "MENU_KeyRight called, cur %x (%s), top %x (%s).\n",
|
||||||
pmt->hCurrentMenu,
|
pmt->hCurrentMenu,
|
||||||
((POPUPMENU *)USER_HEAP_LIN_ADDR(pmt->hCurrentMenu))->
|
((POPUPMENU *)USER_HEAP_LIN_ADDR(pmt->hCurrentMenu))->
|
||||||
items[0].text,
|
items[0].text,
|
||||||
|
@ -2225,7 +2222,7 @@ static void MENU_KeyRight( MTRACKER* pmt )
|
||||||
/* Check to see if there's another column */
|
/* Check to see if there's another column */
|
||||||
if( (nextcol = MENU_GetStartOfNextColumn( pmt->hCurrentMenu )) !=
|
if( (nextcol = MENU_GetStartOfNextColumn( pmt->hCurrentMenu )) !=
|
||||||
NO_SELECTED_ITEM ) {
|
NO_SELECTED_ITEM ) {
|
||||||
dprintf_menu( stddeb, "KeyRight: Going to %d.\n", nextcol );
|
dprintf_info(menu, "KeyRight: Going to %d.\n", nextcol );
|
||||||
MENU_SelectItem( pmt->hOwnerWnd, pmt->hCurrentMenu,
|
MENU_SelectItem( pmt->hOwnerWnd, pmt->hCurrentMenu,
|
||||||
nextcol, TRUE );
|
nextcol, TRUE );
|
||||||
return;
|
return;
|
||||||
|
@ -2614,7 +2611,7 @@ LRESULT WINAPI PopupMenuWndProc( HWND32 hwnd, UINT32 message, WPARAM32 wParam,
|
||||||
|
|
||||||
if( hwnd == pTopPopupWnd->hwndSelf )
|
if( hwnd == pTopPopupWnd->hwndSelf )
|
||||||
{
|
{
|
||||||
dprintf_menu(stddeb,"resident popup destroyed!\n");
|
dprintf_err(menu, "resident popup destroyed!\n");
|
||||||
|
|
||||||
pTopPopupWnd = NULL;
|
pTopPopupWnd = NULL;
|
||||||
uSubPWndLevel = 0;
|
uSubPWndLevel = 0;
|
||||||
|
@ -2663,7 +2660,7 @@ UINT32 MENU_GetMenuBarHeight( HWND32 hwnd, UINT32 menubarWidth,
|
||||||
WND *wndPtr;
|
WND *wndPtr;
|
||||||
LPPOPUPMENU lppop;
|
LPPOPUPMENU lppop;
|
||||||
|
|
||||||
dprintf_menu( stddeb, "MENU_GetMenuBarHeight: HWND 0x%x, width %d, "
|
dprintf_info(menu, "MENU_GetMenuBarHeight: HWND 0x%x, width %d, "
|
||||||
"at (%d, %d).\n", hwnd, menubarWidth, orgX, orgY );
|
"at (%d, %d).\n", hwnd, menubarWidth, orgX, orgY );
|
||||||
|
|
||||||
if (!(wndPtr = WIN_FindWndPtr( hwnd ))) return 0;
|
if (!(wndPtr = WIN_FindWndPtr( hwnd ))) return 0;
|
||||||
|
@ -2683,7 +2680,7 @@ UINT32 MENU_GetMenuBarHeight( HWND32 hwnd, UINT32 menubarWidth,
|
||||||
BOOL16 WINAPI ChangeMenu16( HMENU16 hMenu, UINT16 pos, SEGPTR data,
|
BOOL16 WINAPI ChangeMenu16( HMENU16 hMenu, UINT16 pos, SEGPTR data,
|
||||||
UINT16 id, UINT16 flags )
|
UINT16 id, UINT16 flags )
|
||||||
{
|
{
|
||||||
dprintf_menu( stddeb,"ChangeMenu16: menu=%04x pos=%d data=%08lx id=%04x flags=%04x\n",
|
dprintf_info(menu,"ChangeMenu16: menu=%04x pos=%d data=%08lx id=%04x flags=%04x\n",
|
||||||
hMenu, pos, (DWORD)data, id, flags );
|
hMenu, pos, (DWORD)data, id, flags );
|
||||||
if (flags & MF_APPEND) return AppendMenu16( hMenu, flags & ~MF_APPEND,
|
if (flags & MF_APPEND) return AppendMenu16( hMenu, flags & ~MF_APPEND,
|
||||||
id, data );
|
id, data );
|
||||||
|
@ -2709,7 +2706,7 @@ BOOL16 WINAPI ChangeMenu16( HMENU16 hMenu, UINT16 pos, SEGPTR data,
|
||||||
BOOL32 WINAPI ChangeMenu32A( HMENU32 hMenu, UINT32 pos, LPCSTR data,
|
BOOL32 WINAPI ChangeMenu32A( HMENU32 hMenu, UINT32 pos, LPCSTR data,
|
||||||
UINT32 id, UINT32 flags )
|
UINT32 id, UINT32 flags )
|
||||||
{
|
{
|
||||||
dprintf_menu( stddeb,"ChangeMenu32A: menu=%08x pos=%d data=%08lx id=%08x flags=%08x\n",
|
dprintf_info(menu,"ChangeMenu32A: menu=%08x pos=%d data=%08lx id=%08x flags=%08x\n",
|
||||||
hMenu, pos, (DWORD)data, id, flags );
|
hMenu, pos, (DWORD)data, id, flags );
|
||||||
if (flags & MF_APPEND) return AppendMenu32A( hMenu, flags & ~MF_APPEND,
|
if (flags & MF_APPEND) return AppendMenu32A( hMenu, flags & ~MF_APPEND,
|
||||||
id, data );
|
id, data );
|
||||||
|
@ -2730,7 +2727,7 @@ BOOL32 WINAPI ChangeMenu32A( HMENU32 hMenu, UINT32 pos, LPCSTR data,
|
||||||
BOOL32 WINAPI ChangeMenu32W( HMENU32 hMenu, UINT32 pos, LPCWSTR data,
|
BOOL32 WINAPI ChangeMenu32W( HMENU32 hMenu, UINT32 pos, LPCWSTR data,
|
||||||
UINT32 id, UINT32 flags )
|
UINT32 id, UINT32 flags )
|
||||||
{
|
{
|
||||||
dprintf_menu( stddeb,"ChangeMenu32W: menu=%08x pos=%d data=%08lx id=%08x flags=%08x\n",
|
dprintf_info(menu,"ChangeMenu32W: menu=%08x pos=%d data=%08lx id=%08x flags=%08x\n",
|
||||||
hMenu, pos, (DWORD)data, id, flags );
|
hMenu, pos, (DWORD)data, id, flags );
|
||||||
if (flags & MF_APPEND) return AppendMenu32W( hMenu, flags & ~MF_APPEND,
|
if (flags & MF_APPEND) return AppendMenu32W( hMenu, flags & ~MF_APPEND,
|
||||||
id, data );
|
id, data );
|
||||||
|
@ -2762,7 +2759,7 @@ DWORD WINAPI CheckMenuItem32( HMENU32 hMenu, UINT32 id, UINT32 flags )
|
||||||
MENUITEM *item;
|
MENUITEM *item;
|
||||||
DWORD ret;
|
DWORD ret;
|
||||||
|
|
||||||
dprintf_menu( stddeb,"CheckMenuItem: %04x %04x %04x\n", hMenu, id, flags );
|
dprintf_info(menu,"CheckMenuItem: %04x %04x %04x\n", hMenu, id, flags );
|
||||||
if (!(item = MENU_FindItem( &hMenu, &id, flags ))) return -1;
|
if (!(item = MENU_FindItem( &hMenu, &id, flags ))) return -1;
|
||||||
ret = item->fState & MF_CHECKED;
|
ret = item->fState & MF_CHECKED;
|
||||||
if (flags & MF_CHECKED) item->fState |= MF_CHECKED;
|
if (flags & MF_CHECKED) item->fState |= MF_CHECKED;
|
||||||
|
@ -2788,7 +2785,7 @@ BOOL32 WINAPI EnableMenuItem32( HMENU32 hMenu, UINT32 wItemID, UINT32 wFlags )
|
||||||
BOOL32 bRet = FALSE;
|
BOOL32 bRet = FALSE;
|
||||||
MENUITEM *item, *first = NULL;
|
MENUITEM *item, *first = NULL;
|
||||||
|
|
||||||
dprintf_menu(stddeb,"EnableMenuItem (%04x, %04X, %04X) !\n",
|
dprintf_info(menu,"EnableMenuItem (%04x, %04X, %04X) !\n",
|
||||||
hMenu, wItemID, wFlags);
|
hMenu, wItemID, wFlags);
|
||||||
|
|
||||||
while( (item = MENU_FindItem( &hMenu, &wItemID, wFlags )) )
|
while( (item = MENU_FindItem( &hMenu, &wItemID, wFlags )) )
|
||||||
|
@ -2836,14 +2833,14 @@ INT32 WINAPI GetMenuString32A( HMENU32 hMenu, UINT32 wItemID,
|
||||||
{
|
{
|
||||||
MENUITEM *item;
|
MENUITEM *item;
|
||||||
|
|
||||||
dprintf_menu( stddeb, "GetMenuString32A: menu=%04x item=%04x ptr=%p len=%d flags=%04x\n",
|
dprintf_info(menu, "GetMenuString32A: menu=%04x item=%04x ptr=%p len=%d flags=%04x\n",
|
||||||
hMenu, wItemID, str, nMaxSiz, wFlags );
|
hMenu, wItemID, str, nMaxSiz, wFlags );
|
||||||
if (!str || !nMaxSiz) return 0;
|
if (!str || !nMaxSiz) return 0;
|
||||||
str[0] = '\0';
|
str[0] = '\0';
|
||||||
if (!(item = MENU_FindItem( &hMenu, &wItemID, wFlags ))) return 0;
|
if (!(item = MENU_FindItem( &hMenu, &wItemID, wFlags ))) return 0;
|
||||||
if (!IS_STRING_ITEM(item->fType)) return 0;
|
if (!IS_STRING_ITEM(item->fType)) return 0;
|
||||||
lstrcpyn32A( str, item->text, nMaxSiz );
|
lstrcpyn32A( str, item->text, nMaxSiz );
|
||||||
dprintf_menu( stddeb, "GetMenuString32A: returning '%s'\n", str );
|
dprintf_info(menu, "GetMenuString32A: returning '%s'\n", str );
|
||||||
return strlen(str);
|
return strlen(str);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2856,7 +2853,7 @@ INT32 WINAPI GetMenuString32W( HMENU32 hMenu, UINT32 wItemID,
|
||||||
{
|
{
|
||||||
MENUITEM *item;
|
MENUITEM *item;
|
||||||
|
|
||||||
dprintf_menu( stddeb, "GetMenuString32W: menu=%04x item=%04x ptr=%p len=%d flags=%04x\n",
|
dprintf_info(menu, "GetMenuString32W: menu=%04x item=%04x ptr=%p len=%d flags=%04x\n",
|
||||||
hMenu, wItemID, str, nMaxSiz, wFlags );
|
hMenu, wItemID, str, nMaxSiz, wFlags );
|
||||||
if (!str || !nMaxSiz) return 0;
|
if (!str || !nMaxSiz) return 0;
|
||||||
str[0] = '\0';
|
str[0] = '\0';
|
||||||
|
@ -2884,7 +2881,7 @@ BOOL32 WINAPI HiliteMenuItem32( HWND32 hWnd, HMENU32 hMenu, UINT32 wItemID,
|
||||||
UINT32 wHilite )
|
UINT32 wHilite )
|
||||||
{
|
{
|
||||||
LPPOPUPMENU menu;
|
LPPOPUPMENU menu;
|
||||||
dprintf_menu(stddeb,"HiliteMenuItem(%04x, %04x, %04x, %04x);\n",
|
dprintf_info(menu,"HiliteMenuItem(%04x, %04x, %04x, %04x);\n",
|
||||||
hWnd, hMenu, wItemID, wHilite);
|
hWnd, hMenu, wItemID, wHilite);
|
||||||
if (!MENU_FindItem( &hMenu, &wItemID, wHilite )) return FALSE;
|
if (!MENU_FindItem( &hMenu, &wItemID, wHilite )) return FALSE;
|
||||||
if (!(menu = (LPPOPUPMENU) USER_HEAP_LIN_ADDR(hMenu))) return FALSE;
|
if (!(menu = (LPPOPUPMENU) USER_HEAP_LIN_ADDR(hMenu))) return FALSE;
|
||||||
|
@ -2910,7 +2907,7 @@ UINT16 WINAPI GetMenuState16( HMENU16 hMenu, UINT16 wItemID, UINT16 wFlags )
|
||||||
UINT32 WINAPI GetMenuState32( HMENU32 hMenu, UINT32 wItemID, UINT32 wFlags )
|
UINT32 WINAPI GetMenuState32( HMENU32 hMenu, UINT32 wItemID, UINT32 wFlags )
|
||||||
{
|
{
|
||||||
MENUITEM *item;
|
MENUITEM *item;
|
||||||
dprintf_menu(stddeb,"GetMenuState(%04x, %04x, %04x);\n",
|
dprintf_info(menu,"GetMenuState(%04x, %04x, %04x);\n",
|
||||||
hMenu, wItemID, wFlags);
|
hMenu, wItemID, wFlags);
|
||||||
if (!(item = MENU_FindItem( &hMenu, &wItemID, wFlags ))) return -1;
|
if (!(item = MENU_FindItem( &hMenu, &wItemID, wFlags ))) return -1;
|
||||||
debug_print_menuitem (" item: ", item, "");
|
debug_print_menuitem (" item: ", item, "");
|
||||||
|
@ -2937,7 +2934,7 @@ INT16 WINAPI GetMenuItemCount16( HMENU16 hMenu )
|
||||||
{
|
{
|
||||||
LPPOPUPMENU menu = (LPPOPUPMENU) USER_HEAP_LIN_ADDR(hMenu);
|
LPPOPUPMENU menu = (LPPOPUPMENU) USER_HEAP_LIN_ADDR(hMenu);
|
||||||
if (!IS_A_MENU(menu)) return -1;
|
if (!IS_A_MENU(menu)) return -1;
|
||||||
dprintf_menu( stddeb,"GetMenuItemCount16(%04x) returning %d\n",
|
dprintf_info(menu,"GetMenuItemCount16(%04x) returning %d\n",
|
||||||
hMenu, menu->nItems );
|
hMenu, menu->nItems );
|
||||||
return menu->nItems;
|
return menu->nItems;
|
||||||
}
|
}
|
||||||
|
@ -2950,7 +2947,7 @@ INT32 WINAPI GetMenuItemCount32( HMENU32 hMenu )
|
||||||
{
|
{
|
||||||
LPPOPUPMENU menu = (LPPOPUPMENU) USER_HEAP_LIN_ADDR(hMenu);
|
LPPOPUPMENU menu = (LPPOPUPMENU) USER_HEAP_LIN_ADDR(hMenu);
|
||||||
if (!IS_A_MENU(menu)) return -1;
|
if (!IS_A_MENU(menu)) return -1;
|
||||||
dprintf_menu( stddeb,"GetMenuItemCount32(%04x) returning %d\n",
|
dprintf_info(menu,"GetMenuItemCount32(%04x) returning %d\n",
|
||||||
hMenu, menu->nItems );
|
hMenu, menu->nItems );
|
||||||
return menu->nItems;
|
return menu->nItems;
|
||||||
}
|
}
|
||||||
|
@ -3007,10 +3004,10 @@ BOOL32 WINAPI InsertMenu32A( HMENU32 hMenu, UINT32 pos, UINT32 flags,
|
||||||
MENUITEM *item;
|
MENUITEM *item;
|
||||||
|
|
||||||
if (IS_STRING_ITEM(flags) && str)
|
if (IS_STRING_ITEM(flags) && str)
|
||||||
dprintf_menu( stddeb, "InsertMenu: hMenu %04x, pos %d, flags %08x, "
|
dprintf_info(menu, "InsertMenu: hMenu %04x, pos %d, flags %08x, "
|
||||||
"id %04x, str '%s'\n",
|
"id %04x, str '%s'\n",
|
||||||
hMenu, pos, flags, id, str );
|
hMenu, pos, flags, id, str );
|
||||||
else dprintf_menu( stddeb, "InsertMenu: hMenu %04x, pos %d, flags %08x, "
|
else dprintf_info(menu, "InsertMenu: hMenu %04x, pos %d, flags %08x, "
|
||||||
"id %04x, str %08lx (not a string)\n",
|
"id %04x, str %08lx (not a string)\n",
|
||||||
hMenu, pos, flags, id, (DWORD)str );
|
hMenu, pos, flags, id, (DWORD)str );
|
||||||
|
|
||||||
|
@ -3096,7 +3093,7 @@ BOOL32 WINAPI RemoveMenu32( HMENU32 hMenu, UINT32 nPos, UINT32 wFlags )
|
||||||
LPPOPUPMENU menu;
|
LPPOPUPMENU menu;
|
||||||
MENUITEM *item;
|
MENUITEM *item;
|
||||||
|
|
||||||
dprintf_menu(stddeb,"RemoveMenu (%04x, %04x, %04x)\n",hMenu, nPos, wFlags);
|
dprintf_info(menu,"RemoveMenu (%04x, %04x, %04x)\n",hMenu, nPos, wFlags);
|
||||||
if (!(item = MENU_FindItem( &hMenu, &nPos, wFlags ))) return FALSE;
|
if (!(item = MENU_FindItem( &hMenu, &nPos, wFlags ))) return FALSE;
|
||||||
if (!(menu = (LPPOPUPMENU) USER_HEAP_LIN_ADDR(hMenu))) return FALSE;
|
if (!(menu = (LPPOPUPMENU) USER_HEAP_LIN_ADDR(hMenu))) return FALSE;
|
||||||
|
|
||||||
|
@ -3170,13 +3167,13 @@ BOOL32 WINAPI ModifyMenu32A( HMENU32 hMenu, UINT32 pos, UINT32 flags,
|
||||||
|
|
||||||
if (IS_STRING_ITEM(flags))
|
if (IS_STRING_ITEM(flags))
|
||||||
{
|
{
|
||||||
dprintf_menu( stddeb, "ModifyMenu: %04x %d %04x %04x '%s'\n",
|
dprintf_info(menu, "ModifyMenu: %04x %d %04x %04x '%s'\n",
|
||||||
hMenu, pos, flags, id, str ? str : "#NULL#" );
|
hMenu, pos, flags, id, str ? str : "#NULL#" );
|
||||||
if (!str) return FALSE;
|
if (!str) return FALSE;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
dprintf_menu( stddeb, "ModifyMenu: %04x %d %04x %04x %08lx\n",
|
dprintf_info(menu, "ModifyMenu: %04x %d %04x %04x %08lx\n",
|
||||||
hMenu, pos, flags, id, (DWORD)str );
|
hMenu, pos, flags, id, (DWORD)str );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3254,7 +3251,7 @@ BOOL32 WINAPI SetMenuItemBitmaps32( HMENU32 hMenu, UINT32 nPos, UINT32 wFlags,
|
||||||
HBITMAP32 hNewUnCheck, HBITMAP32 hNewCheck)
|
HBITMAP32 hNewUnCheck, HBITMAP32 hNewCheck)
|
||||||
{
|
{
|
||||||
MENUITEM *item;
|
MENUITEM *item;
|
||||||
dprintf_menu(stddeb,"SetMenuItemBitmaps(%04x, %04x, %04x, %04x, %04x)\n",
|
dprintf_info(menu,"SetMenuItemBitmaps(%04x, %04x, %04x, %04x, %04x)\n",
|
||||||
hMenu, nPos, wFlags, hNewCheck, hNewUnCheck);
|
hMenu, nPos, wFlags, hNewCheck, hNewUnCheck);
|
||||||
if (!(item = MENU_FindItem( &hMenu, &nPos, wFlags ))) return FALSE;
|
if (!(item = MENU_FindItem( &hMenu, &nPos, wFlags ))) return FALSE;
|
||||||
|
|
||||||
|
@ -3299,7 +3296,7 @@ HMENU32 WINAPI CreateMenu32(void)
|
||||||
menu->hWnd = 0;
|
menu->hWnd = 0;
|
||||||
menu->items = NULL;
|
menu->items = NULL;
|
||||||
menu->FocusedItem = NO_SELECTED_ITEM;
|
menu->FocusedItem = NO_SELECTED_ITEM;
|
||||||
dprintf_menu( stddeb, "CreateMenu: return %04x\n", hMenu );
|
dprintf_info(menu, "CreateMenu: return %04x\n", hMenu );
|
||||||
return hMenu;
|
return hMenu;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3318,7 +3315,7 @@ BOOL16 WINAPI DestroyMenu16( HMENU16 hMenu )
|
||||||
*/
|
*/
|
||||||
BOOL32 WINAPI DestroyMenu32( HMENU32 hMenu )
|
BOOL32 WINAPI DestroyMenu32( HMENU32 hMenu )
|
||||||
{
|
{
|
||||||
dprintf_menu(stddeb,"DestroyMenu(%04x)\n", hMenu);
|
dprintf_info(menu,"DestroyMenu(%04x)\n", hMenu);
|
||||||
|
|
||||||
/* Silently ignore attempts to destroy default system popup */
|
/* Silently ignore attempts to destroy default system popup */
|
||||||
|
|
||||||
|
@ -3466,7 +3463,7 @@ BOOL32 WINAPI SetMenu32( HWND32 hWnd, HMENU32 hMenu )
|
||||||
{
|
{
|
||||||
WND * wndPtr = WIN_FindWndPtr(hWnd);
|
WND * wndPtr = WIN_FindWndPtr(hWnd);
|
||||||
|
|
||||||
dprintf_menu(stddeb,"SetMenu(%04x, %04x);\n", hWnd, hMenu);
|
dprintf_info(menu,"SetMenu(%04x, %04x);\n", hWnd, hMenu);
|
||||||
|
|
||||||
if (wndPtr && !(wndPtr->dwStyle & WS_CHILD))
|
if (wndPtr && !(wndPtr->dwStyle & WS_CHILD))
|
||||||
{
|
{
|
||||||
|
@ -3578,11 +3575,11 @@ HMENU16 WINAPI LoadMenu16( HINSTANCE16 instance, SEGPTR name )
|
||||||
if (HIWORD(name))
|
if (HIWORD(name))
|
||||||
{
|
{
|
||||||
char *str = (char *)PTR_SEG_TO_LIN( name );
|
char *str = (char *)PTR_SEG_TO_LIN( name );
|
||||||
dprintf_menu( stddeb, "LoadMenu(%04x,'%s')\n", instance, str );
|
dprintf_info(menu, "LoadMenu(%04x,'%s')\n", instance, str );
|
||||||
if (str[0] == '#') name = (SEGPTR)atoi( str + 1 );
|
if (str[0] == '#') name = (SEGPTR)atoi( str + 1 );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
dprintf_resource(stddeb,"LoadMenu(%04x,%04x)\n",instance,LOWORD(name));
|
dprintf_info(resource,"LoadMenu(%04x,%04x)\n",instance,LOWORD(name));
|
||||||
|
|
||||||
if (!name) return 0;
|
if (!name) return 0;
|
||||||
|
|
||||||
|
@ -3630,7 +3627,7 @@ HMENU16 WINAPI LoadMenuIndirect16( LPCVOID template )
|
||||||
WORD version, offset;
|
WORD version, offset;
|
||||||
LPCSTR p = (LPCSTR)template;
|
LPCSTR p = (LPCSTR)template;
|
||||||
|
|
||||||
dprintf_menu(stddeb,"LoadMenuIndirect16: %p\n", template );
|
dprintf_info(menu,"LoadMenuIndirect16: %p\n", template );
|
||||||
version = GET_WORD(p);
|
version = GET_WORD(p);
|
||||||
p += sizeof(WORD);
|
p += sizeof(WORD);
|
||||||
if (version)
|
if (version)
|
||||||
|
@ -3659,7 +3656,7 @@ HMENU32 WINAPI LoadMenuIndirect32A( LPCVOID template )
|
||||||
WORD version, offset;
|
WORD version, offset;
|
||||||
LPCSTR p = (LPCSTR)template;
|
LPCSTR p = (LPCSTR)template;
|
||||||
|
|
||||||
dprintf_menu(stddeb,"LoadMenuIndirect32A: %p\n", template );
|
dprintf_info(menu,"LoadMenuIndirect32A: %p\n", template );
|
||||||
version = GET_WORD(p);
|
version = GET_WORD(p);
|
||||||
p += sizeof(WORD);
|
p += sizeof(WORD);
|
||||||
switch (version)
|
switch (version)
|
||||||
|
@ -3934,7 +3931,7 @@ BOOL32 WINAPI CheckMenuRadioItem32(HMENU32 hMenu,
|
||||||
MENUITEM *mifirst, *milast, *micheck;
|
MENUITEM *mifirst, *milast, *micheck;
|
||||||
HMENU32 mfirst = hMenu, mlast = hMenu, mcheck = hMenu;
|
HMENU32 mfirst = hMenu, mlast = hMenu, mcheck = hMenu;
|
||||||
|
|
||||||
dprintf_menu (stddeb,
|
dprintf_info(menu,
|
||||||
"CheckMenuRadioItem32: ox%x: %d-%d, check %d, bypos=%d\n",
|
"CheckMenuRadioItem32: ox%x: %d-%d, check %d, bypos=%d\n",
|
||||||
hMenu, first, last, check, bypos);
|
hMenu, first, last, check, bypos);
|
||||||
|
|
||||||
|
@ -3988,7 +3985,7 @@ BOOL32 WINAPI GetMenuItemRect32 (HWND32 hwnd, HMENU32 hMenu, UINT32 uItem,
|
||||||
MENUITEM *item;
|
MENUITEM *item;
|
||||||
HMENU32 orghMenu = hMenu;
|
HMENU32 orghMenu = hMenu;
|
||||||
|
|
||||||
dprintf_menu (stddeb, "GetMenuItemRect32 (0x%x,0x%x,%d,%p)\n",
|
dprintf_info(menu, "GetMenuItemRect32 (0x%x,0x%x,%d,%p)\n",
|
||||||
hwnd, hMenu, uItem, rect);
|
hwnd, hMenu, uItem, rect);
|
||||||
|
|
||||||
item = MENU_FindItem (&hMenu, &uItem, MF_BYPOSITION);
|
item = MENU_FindItem (&hMenu, &uItem, MF_BYPOSITION);
|
||||||
|
|
|
@ -17,7 +17,6 @@
|
||||||
#include "graphics.h"
|
#include "graphics.h"
|
||||||
#include "heap.h"
|
#include "heap.h"
|
||||||
#include "win.h"
|
#include "win.h"
|
||||||
#include "stddebug.h"
|
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
|
||||||
/* Control configuration constants */
|
/* Control configuration constants */
|
||||||
|
@ -27,7 +26,7 @@
|
||||||
|
|
||||||
/* Work constants */
|
/* Work constants */
|
||||||
|
|
||||||
#define UNKNOWN_PARAM(msg, wParam, lParam) dprintf_progress(stddeb, \
|
#define UNKNOWN_PARAM(msg, wParam, lParam) dprintf_warn(progress, \
|
||||||
"Progress Ctrl: Unknown parameter(s) for message " #msg \
|
"Progress Ctrl: Unknown parameter(s) for message " #msg \
|
||||||
"(%04x): wp=%04x lp=%08lx\n", msg, wParam, lParam);
|
"(%04x): wp=%04x lp=%08lx\n", msg, wParam, lParam);
|
||||||
|
|
||||||
|
@ -48,7 +47,7 @@ static void PROGRESS_Paint(WND *wndPtr, HDC32 dc)
|
||||||
RECT32 rect;
|
RECT32 rect;
|
||||||
HDC32 hdc;
|
HDC32 hdc;
|
||||||
|
|
||||||
dprintf_progress(stddeb, "Progress Bar: paint pos=%d min=%d, max=%d\n",
|
dprintf_info(progress, "Progress Bar: paint pos=%d min=%d, max=%d\n",
|
||||||
infoPtr->CurVal, infoPtr->MinVal, infoPtr->MaxVal);
|
infoPtr->CurVal, infoPtr->MinVal, infoPtr->MaxVal);
|
||||||
|
|
||||||
/* get a dc */
|
/* get a dc */
|
||||||
|
@ -115,11 +114,11 @@ LRESULT WINAPI ProgressWindowProc(HWND32 hwnd, UINT32 message,
|
||||||
infoPtr->MaxVal=100;
|
infoPtr->MaxVal=100;
|
||||||
infoPtr->CurVal=0;
|
infoPtr->CurVal=0;
|
||||||
infoPtr->Step=10;
|
infoPtr->Step=10;
|
||||||
dprintf_updown(stddeb, "Progress Ctrl creation, hwnd=%04x\n", hwnd);
|
dprintf_info(updown, "Progress Ctrl creation, hwnd=%04x\n", hwnd);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WM_DESTROY:
|
case WM_DESTROY:
|
||||||
dprintf_updown(stddeb, "Progress Ctrl destruction, hwnd=%04x\n", hwnd);
|
dprintf_info(updown, "Progress Ctrl destruction, hwnd=%04x\n", hwnd);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WM_ERASEBKGND:
|
case WM_ERASEBKGND:
|
||||||
|
|
|
@ -15,7 +15,6 @@
|
||||||
#include "graphics.h"
|
#include "graphics.h"
|
||||||
#include "heap.h"
|
#include "heap.h"
|
||||||
#include "win.h"
|
#include "win.h"
|
||||||
#include "stddebug.h"
|
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
|
||||||
|
|
||||||
|
@ -616,7 +615,7 @@ void SCROLL_HandleScrollEvent( HWND32 hwnd, INT32 nBar, UINT32 msg, POINT32 pt)
|
||||||
return; /* Should never happen */
|
return; /* Should never happen */
|
||||||
}
|
}
|
||||||
|
|
||||||
dprintf_scroll( stddeb, "ScrollBar Event: hwnd=%04x bar=%d msg=%x pt=%d,%d hit=%d\n",
|
dprintf_info(scroll, "ScrollBar Event: hwnd=%04x bar=%d msg=%x pt=%d,%d hit=%d\n",
|
||||||
hwnd, nBar, msg, pt.x, pt.y, hittest );
|
hwnd, nBar, msg, pt.x, pt.y, hittest );
|
||||||
|
|
||||||
switch(trackHitTest)
|
switch(trackHitTest)
|
||||||
|
@ -795,7 +794,7 @@ LRESULT WINAPI ScrollBarWndProc( HWND32 hwnd, UINT32 message, WPARAM32 wParam,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!hUpArrow) SCROLL_LoadBitmaps();
|
if (!hUpArrow) SCROLL_LoadBitmaps();
|
||||||
dprintf_scroll( stddeb, "ScrollBar creation, hwnd=%04x\n", hwnd );
|
dprintf_info(scroll, "ScrollBar creation, hwnd=%04x\n", hwnd );
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
case WM_LBUTTONDOWN:
|
case WM_LBUTTONDOWN:
|
||||||
|
@ -910,19 +909,18 @@ INT32 WINAPI SetScrollInfo32( HWND32 hwnd, INT32 nBar, const SCROLLINFO *info,
|
||||||
SCROLLBAR_INFO *infoPtr;
|
SCROLLBAR_INFO *infoPtr;
|
||||||
UINT32 new_flags;
|
UINT32 new_flags;
|
||||||
BOOL32 repaint_arrows = FALSE;
|
BOOL32 repaint_arrows = FALSE;
|
||||||
|
dbg_decl_str(scroll, 256);
|
||||||
|
|
||||||
if (!(infoPtr = SCROLL_GetScrollInfo(hwnd, nBar))) return 0;
|
if (!(infoPtr = SCROLL_GetScrollInfo(hwnd, nBar))) return 0;
|
||||||
if (info->fMask & ~(SIF_ALL | SIF_DISABLENOSCROLL)) return 0;
|
if (info->fMask & ~(SIF_ALL | SIF_DISABLENOSCROLL)) return 0;
|
||||||
if ((info->cbSize != sizeof(*info)) &&
|
if ((info->cbSize != sizeof(*info)) &&
|
||||||
(info->cbSize != sizeof(*info)-sizeof(info->nTrackPos))) return 0;
|
(info->cbSize != sizeof(*info)-sizeof(info->nTrackPos))) return 0;
|
||||||
|
|
||||||
dprintf_scroll( stddeb, "SetScrollInfo: hwnd=%04x bar=%d", hwnd, nBar );
|
|
||||||
|
|
||||||
/* Set the page size */
|
/* Set the page size */
|
||||||
|
|
||||||
if (info->fMask & SIF_PAGE)
|
if (info->fMask & SIF_PAGE)
|
||||||
{
|
{
|
||||||
dprintf_scroll( stddeb, " page=%d", info->nPage );
|
dsprintf(scroll, " page=%d", info->nPage );
|
||||||
infoPtr->Page = info->nPage;
|
infoPtr->Page = info->nPage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -930,7 +928,7 @@ INT32 WINAPI SetScrollInfo32( HWND32 hwnd, INT32 nBar, const SCROLLINFO *info,
|
||||||
|
|
||||||
if (info->fMask & SIF_POS)
|
if (info->fMask & SIF_POS)
|
||||||
{
|
{
|
||||||
dprintf_scroll( stddeb, " pos=%d", info->nPos );
|
dsprintf(scroll, " pos=%d", info->nPos );
|
||||||
infoPtr->CurVal = info->nPos;
|
infoPtr->CurVal = info->nPos;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -938,7 +936,7 @@ INT32 WINAPI SetScrollInfo32( HWND32 hwnd, INT32 nBar, const SCROLLINFO *info,
|
||||||
|
|
||||||
if (info->fMask & SIF_RANGE)
|
if (info->fMask & SIF_RANGE)
|
||||||
{
|
{
|
||||||
dprintf_scroll( stddeb, " min=%d max=%d", info->nMin, info->nMax );
|
dsprintf(scroll, " min=%d max=%d", info->nMin, info->nMax );
|
||||||
|
|
||||||
/* Invalid range -> range is set to (0,0) */
|
/* Invalid range -> range is set to (0,0) */
|
||||||
if ((info->nMin > info->nMax) ||
|
if ((info->nMin > info->nMax) ||
|
||||||
|
@ -954,6 +952,9 @@ INT32 WINAPI SetScrollInfo32( HWND32 hwnd, INT32 nBar, const SCROLLINFO *info,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dprintf_info(scroll, "SetScrollInfo: hwnd=%04x bar=%d %s\n",
|
||||||
|
hwnd, nBar, dbg_str(scroll));
|
||||||
|
|
||||||
/* Make sure the page size is valid */
|
/* Make sure the page size is valid */
|
||||||
|
|
||||||
if (infoPtr->Page < 0) infoPtr->Page = 0;
|
if (infoPtr->Page < 0) infoPtr->Page = 0;
|
||||||
|
@ -967,7 +968,7 @@ INT32 WINAPI SetScrollInfo32( HWND32 hwnd, INT32 nBar, const SCROLLINFO *info,
|
||||||
else if (infoPtr->CurVal > infoPtr->MaxVal - MAX( infoPtr->Page-1, 0 ))
|
else if (infoPtr->CurVal > infoPtr->MaxVal - MAX( infoPtr->Page-1, 0 ))
|
||||||
infoPtr->CurVal = infoPtr->MaxVal - MAX( infoPtr->Page-1, 0 );
|
infoPtr->CurVal = infoPtr->MaxVal - MAX( infoPtr->Page-1, 0 );
|
||||||
|
|
||||||
dprintf_scroll( stddeb, "\n new values: page=%d pos=%d min=%d max=%d\n",
|
dprintf_info(scroll, "\n new values: page=%d pos=%d min=%d max=%d\n",
|
||||||
infoPtr->Page, infoPtr->CurVal,
|
infoPtr->Page, infoPtr->CurVal,
|
||||||
infoPtr->MinVal, infoPtr->MaxVal );
|
infoPtr->MinVal, infoPtr->MaxVal );
|
||||||
|
|
||||||
|
@ -1208,7 +1209,7 @@ BOOL32 WINAPI ShowScrollBar32( HWND32 hwnd, INT32 nBar, BOOL32 fShow )
|
||||||
WND *wndPtr = WIN_FindWndPtr( hwnd );
|
WND *wndPtr = WIN_FindWndPtr( hwnd );
|
||||||
|
|
||||||
if (!wndPtr) return FALSE;
|
if (!wndPtr) return FALSE;
|
||||||
dprintf_scroll( stddeb, "ShowScrollBar: hwnd=%04x bar=%d on=%d\n",
|
dprintf_info(scroll, "ShowScrollBar: hwnd=%04x bar=%d on=%d\n",
|
||||||
hwnd, nBar, fShow );
|
hwnd, nBar, fShow );
|
||||||
|
|
||||||
switch(nBar)
|
switch(nBar)
|
||||||
|
@ -1284,7 +1285,7 @@ BOOL32 WINAPI EnableScrollBar32( HWND32 hwnd, INT32 nBar, UINT32 flags )
|
||||||
SCROLLBAR_INFO *infoPtr;
|
SCROLLBAR_INFO *infoPtr;
|
||||||
|
|
||||||
if (!(infoPtr = SCROLL_GetScrollInfo( hwnd, nBar ))) return FALSE;
|
if (!(infoPtr = SCROLL_GetScrollInfo( hwnd, nBar ))) return FALSE;
|
||||||
dprintf_scroll( stddeb, "EnableScrollBar: %04x %d %d\n",
|
dprintf_info(scroll, "EnableScrollBar: %04x %d %d\n",
|
||||||
hwnd, nBar, flags );
|
hwnd, nBar, flags );
|
||||||
flags &= ESB_DISABLE_BOTH;
|
flags &= ESB_DISABLE_BOTH;
|
||||||
if (infoPtr->flags == flags) return FALSE;
|
if (infoPtr->flags == flags) return FALSE;
|
||||||
|
|
|
@ -574,7 +574,7 @@ BOOL16 WINAPI DrawEdge16( HDC16 hdc, LPRECT16 rc, UINT16 edge, UINT16 flags )
|
||||||
*/
|
*/
|
||||||
BOOL32 WINAPI DrawEdge32( HDC32 hdc, LPRECT32 rc, UINT32 edge, UINT32 flags )
|
BOOL32 WINAPI DrawEdge32( HDC32 hdc, LPRECT32 rc, UINT32 edge, UINT32 flags )
|
||||||
{
|
{
|
||||||
dprintf_graphics( stddeb, "DrawEdge: %04x %d,%d-%d,%d %04x %04x\n",
|
dprintf_info(graphics, "DrawEdge: %04x %d,%d-%d,%d %04x %04x\n",
|
||||||
hdc, rc->left, rc->top, rc->right, rc->bottom,
|
hdc, rc->left, rc->top, rc->right, rc->bottom,
|
||||||
edge, flags );
|
edge, flags );
|
||||||
|
|
||||||
|
|
|
@ -35,8 +35,6 @@
|
||||||
#include "graphics.h"
|
#include "graphics.h"
|
||||||
#include "heap.h"
|
#include "heap.h"
|
||||||
#include "win.h"
|
#include "win.h"
|
||||||
#include "stddebug.h"
|
|
||||||
/*#define DEBUG_UPDOWN*/
|
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
|
||||||
/* Control configuration constants */
|
/* Control configuration constants */
|
||||||
|
@ -62,7 +60,7 @@
|
||||||
|
|
||||||
static int accelIndex = -1;
|
static int accelIndex = -1;
|
||||||
|
|
||||||
#define UNKNOWN_PARAM(msg, wParam, lParam) dprintf_updown(stddeb, \
|
#define UNKNOWN_PARAM(msg, wParam, lParam) dprintf_warn(updown, \
|
||||||
"UpDown Ctrl: Unknown parameter(s) for message " #msg \
|
"UpDown Ctrl: Unknown parameter(s) for message " #msg \
|
||||||
"(%04x): wp=%04x lp=%08lx\n", msg, wParam, lParam);
|
"(%04x): wp=%04x lp=%08lx\n", msg, wParam, lParam);
|
||||||
|
|
||||||
|
@ -209,7 +207,7 @@ static BOOL32 UPDOWN_GetBuddyInt(WND *wndPtr)
|
||||||
if(*src || !UPDOWN_InBounds(wndPtr, newVal))
|
if(*src || !UPDOWN_InBounds(wndPtr, newVal))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
dprintf_updown(stddeb, "UpDown Ctrl: new value(%d) read from buddy "
|
dprintf_info(updown, "UpDown Ctrl: new value(%d) read from buddy "
|
||||||
"(old=%d)\n", newVal, infoPtr->CurVal);
|
"(old=%d)\n", newVal, infoPtr->CurVal);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -234,7 +232,7 @@ static BOOL32 UPDOWN_SetBuddyInt(WND *wndPtr)
|
||||||
if (!IsWindow32(infoPtr->Buddy))
|
if (!IsWindow32(infoPtr->Buddy))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
dprintf_updown(stddeb, "UpDown Ctrl: set new value(%d) to buddy.\n",
|
dprintf_info(updown, "UpDown Ctrl: set new value(%d) to buddy.\n",
|
||||||
infoPtr->CurVal);
|
infoPtr->CurVal);
|
||||||
|
|
||||||
/*if the buddy is a list window, we must set curr index */
|
/*if the buddy is a list window, we must set curr index */
|
||||||
|
@ -381,7 +379,7 @@ static void UPDOWN_DoAction(WND *wndPtr, int delta, BOOL32 incr)
|
||||||
int old_val = infoPtr->CurVal;
|
int old_val = infoPtr->CurVal;
|
||||||
NM_UPDOWN ni;
|
NM_UPDOWN ni;
|
||||||
|
|
||||||
dprintf_updown(stddeb, "UpDown Ctrl action: %s by %d\n",
|
dprintf_info(updown, "UpDown Ctrl action: %s by %d\n",
|
||||||
incr ? "inc" : "dec", delta);
|
incr ? "inc" : "dec", delta);
|
||||||
|
|
||||||
/* check if we can do the modification first */
|
/* check if we can do the modification first */
|
||||||
|
@ -583,13 +581,13 @@ LRESULT WINAPI UpDownWindowProc(HWND32 hwnd, UINT32 message, WPARAM32 wParam,
|
||||||
if(wndPtr->dwStyle & UDS_AUTOBUDDY)
|
if(wndPtr->dwStyle & UDS_AUTOBUDDY)
|
||||||
UPDOWN_SetBuddy(wndPtr, GetWindow32(wndPtr->hwndSelf, GW_HWNDPREV));
|
UPDOWN_SetBuddy(wndPtr, GetWindow32(wndPtr->hwndSelf, GW_HWNDPREV));
|
||||||
|
|
||||||
dprintf_updown(stddeb, "UpDown Ctrl creation, hwnd=%04x\n", hwnd);
|
dprintf_info(updown, "UpDown Ctrl creation, hwnd=%04x\n", hwnd);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WM_DESTROY:
|
case WM_DESTROY:
|
||||||
if(infoPtr->AccelVect)
|
if(infoPtr->AccelVect)
|
||||||
free(infoPtr->AccelVect);
|
free(infoPtr->AccelVect);
|
||||||
dprintf_updown(stddeb, "UpDown Ctrl destruction, hwnd=%04x\n", hwnd);
|
dprintf_info(updown, "UpDown Ctrl destruction, hwnd=%04x\n", hwnd);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WM_ENABLE:
|
case WM_ENABLE:
|
||||||
|
@ -679,7 +677,7 @@ LRESULT WINAPI UpDownWindowProc(HWND32 hwnd, UINT32 message, WPARAM32 wParam,
|
||||||
return temp;
|
return temp;
|
||||||
|
|
||||||
case UDM_SETACCEL:
|
case UDM_SETACCEL:
|
||||||
dprintf_updown(stddeb, "UpDown Ctrl new accel info, hwnd=%04x\n", hwnd);
|
dprintf_info(updown, "UpDown Ctrl new accel info, hwnd=%04x\n", hwnd);
|
||||||
if(infoPtr->AccelVect){
|
if(infoPtr->AccelVect){
|
||||||
free(infoPtr->AccelVect);
|
free(infoPtr->AccelVect);
|
||||||
infoPtr->AccelCount = 0;
|
infoPtr->AccelCount = 0;
|
||||||
|
@ -699,7 +697,7 @@ LRESULT WINAPI UpDownWindowProc(HWND32 hwnd, UINT32 message, WPARAM32 wParam,
|
||||||
return infoPtr->Base;
|
return infoPtr->Base;
|
||||||
|
|
||||||
case UDM_SETBASE:
|
case UDM_SETBASE:
|
||||||
dprintf_updown(stddeb, "UpDown Ctrl new base(%d), hwnd=%04x\n",
|
dprintf_info(updown, "UpDown Ctrl new base(%d), hwnd=%04x\n",
|
||||||
wParam, hwnd);
|
wParam, hwnd);
|
||||||
if ( !(wParam==10 || wParam==16) || lParam)
|
if ( !(wParam==10 || wParam==16) || lParam)
|
||||||
UNKNOWN_PARAM(UDM_SETBASE, wParam, lParam);
|
UNKNOWN_PARAM(UDM_SETBASE, wParam, lParam);
|
||||||
|
@ -721,7 +719,7 @@ LRESULT WINAPI UpDownWindowProc(HWND32 hwnd, UINT32 message, WPARAM32 wParam,
|
||||||
temp = infoPtr->Buddy;
|
temp = infoPtr->Buddy;
|
||||||
infoPtr->Buddy = wParam;
|
infoPtr->Buddy = wParam;
|
||||||
UPDOWN_SetBuddy(wndPtr, wParam);
|
UPDOWN_SetBuddy(wndPtr, wParam);
|
||||||
dprintf_updown(stddeb, "UpDown Ctrl new buddy(%04x), hwnd=%04x\n",
|
dprintf_info(updown, "UpDown Ctrl new buddy(%04x), hwnd=%04x\n",
|
||||||
infoPtr->Buddy, hwnd);
|
infoPtr->Buddy, hwnd);
|
||||||
return temp;
|
return temp;
|
||||||
|
|
||||||
|
@ -735,7 +733,7 @@ LRESULT WINAPI UpDownWindowProc(HWND32 hwnd, UINT32 message, WPARAM32 wParam,
|
||||||
if (wParam || HIWORD(lParam))
|
if (wParam || HIWORD(lParam))
|
||||||
UNKNOWN_PARAM(UDM_GETPOS, wParam, lParam);
|
UNKNOWN_PARAM(UDM_GETPOS, wParam, lParam);
|
||||||
temp = SLOWORD(lParam);
|
temp = SLOWORD(lParam);
|
||||||
dprintf_updown(stddeb, "UpDown Ctrl new value(%d), hwnd=%04x\n",
|
dprintf_info(updown, "UpDown Ctrl new value(%d), hwnd=%04x\n",
|
||||||
temp, hwnd);
|
temp, hwnd);
|
||||||
if(!UPDOWN_InBounds(wndPtr, temp)){
|
if(!UPDOWN_InBounds(wndPtr, temp)){
|
||||||
if(temp < infoPtr->MinVal)
|
if(temp < infoPtr->MinVal)
|
||||||
|
@ -760,7 +758,7 @@ LRESULT WINAPI UpDownWindowProc(HWND32 hwnd, UINT32 message, WPARAM32 wParam,
|
||||||
infoPtr->MaxVal = SLOWORD(lParam); /* UD_MINVAL <= Max <= UD_MAXVAL */
|
infoPtr->MaxVal = SLOWORD(lParam); /* UD_MINVAL <= Max <= UD_MAXVAL */
|
||||||
infoPtr->MinVal = SHIWORD(lParam); /* UD_MINVAL <= Min <= UD_MAXVAL */
|
infoPtr->MinVal = SHIWORD(lParam); /* UD_MINVAL <= Min <= UD_MAXVAL */
|
||||||
/* |Max-Min| <= UD_MAXVAL */
|
/* |Max-Min| <= UD_MAXVAL */
|
||||||
dprintf_updown(stddeb, "UpDown Ctrl new range(%d to %d), hwnd=%04x\n",
|
dprintf_info(updown, "UpDown Ctrl new range(%d to %d), hwnd=%04x\n",
|
||||||
infoPtr->MinVal, infoPtr->MaxVal, hwnd);
|
infoPtr->MinVal, infoPtr->MaxVal, hwnd);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
|
@ -18,14 +18,21 @@ INFOFILES = \
|
||||||
wine.info-1 \
|
wine.info-1 \
|
||||||
wine.info-2
|
wine.info-2
|
||||||
|
|
||||||
|
HTMLFILES = \
|
||||||
|
wine_toc.html \
|
||||||
|
wine.html
|
||||||
|
|
||||||
DVIFILES = wine.dvi
|
DVIFILES = wine.dvi
|
||||||
|
|
||||||
all: $(INFOFILES) $(DVIFILES)
|
|
||||||
|
all: $(INFOFILES) $(DVIFILES) $(HTMLFILES)
|
||||||
|
|
||||||
info: $(INFOFILES)
|
info: $(INFOFILES)
|
||||||
|
|
||||||
dvi: $(DVIFILES)
|
dvi: $(DVIFILES)
|
||||||
|
|
||||||
|
html: $(HTMLFILES)
|
||||||
|
|
||||||
@MAKE_RULES@
|
@MAKE_RULES@
|
||||||
|
|
||||||
$(INFOFILES): $(SOURCES)
|
$(INFOFILES): $(SOURCES)
|
||||||
|
@ -34,6 +41,10 @@ $(INFOFILES): $(SOURCES)
|
||||||
$(DVIFILES): $(SOURCES)
|
$(DVIFILES): $(SOURCES)
|
||||||
texi2dvi $(SRCDIR)/wine.texinfo
|
texi2dvi $(SRCDIR)/wine.texinfo
|
||||||
|
|
||||||
|
$(HTMLFILES): $(SOURCES)
|
||||||
|
makeinfo -E wine.texi $(SRCDIR)/wine.texinfo
|
||||||
|
texi2html wine.texi
|
||||||
|
|
||||||
$(INCLUDES):
|
$(INCLUDES):
|
||||||
$(RM) $(INCLUDES)
|
$(RM) $(INCLUDES)
|
||||||
for i in $(INCLUDES); do $(LN_S) $(TOPSRCDIR)/$$i $$i || exit 1; done
|
for i in $(INCLUDES); do $(LN_S) $(TOPSRCDIR)/$$i $$i || exit 1; done
|
||||||
|
@ -48,7 +59,8 @@ install_info: $(INFOFILES)
|
||||||
clean::
|
clean::
|
||||||
$(RM) $(INFOFILES) $(DVIFILES) $(INCLUDES)
|
$(RM) $(INFOFILES) $(DVIFILES) $(INCLUDES)
|
||||||
$(RM) wine.aux wine.cp wine.cps wine.fn wine.fns wine.ky wine.log \
|
$(RM) wine.aux wine.cp wine.cps wine.fn wine.fns wine.ky wine.log \
|
||||||
wine.pg wine.toc wine.tp wine.tps wine.vr wine.vrs
|
wine.pg wine.toc wine.tp wine.tps wine.vr wine.vrs \
|
||||||
|
wine.texi
|
||||||
$(RM) -r man3w
|
$(RM) -r man3w
|
||||||
|
|
||||||
### Dependencies:
|
### Dependencies:
|
||||||
|
|
|
@ -4,12 +4,17 @@ Console - First Pass
|
||||||
|
|
||||||
Consoles are just xterms created with the -Sxxn switch.
|
Consoles are just xterms created with the -Sxxn switch.
|
||||||
A pty is opened and the master goes to the xterm side
|
A pty is opened and the master goes to the xterm side
|
||||||
and the slave is held by the wine side. The slave fd
|
and the slave is held by the wine side. The console
|
||||||
is changed into a HANDLE32 and this HANDLE32 is set
|
itself it turned into a few HANDLE32s and is set
|
||||||
to the STD_*_HANDLES.
|
to the STD_*_HANDLES.
|
||||||
|
|
||||||
For now writing/reading to a console just calls FileWrite/FileRead.
|
It is possible to use the WriteFile and ReadFile commands
|
||||||
|
to write to a win32 console. To accomplish this, all K32OBJs
|
||||||
|
that support I/O have a read and write function pointer.
|
||||||
|
So, WriteFile calls K32OBJ_WriteFile which calls the K32OBJ's
|
||||||
|
write function pointer, which then finally calls write.
|
||||||
|
|
||||||
|
[this paragraph is now out of date]
|
||||||
If the command line console is to be inheirited or
|
If the command line console is to be inheirited or
|
||||||
a process inherits it's parents console (-- can that happen???),
|
a process inherits it's parents console (-- can that happen???),
|
||||||
the console is created at process init time via PROCESS_InheritConsole.
|
the console is created at process init time via PROCESS_InheritConsole.
|
||||||
|
@ -23,20 +28,55 @@ pdb->console is set to NULL. This helps indicate when
|
||||||
it is possible to create a new console (via AllocConsole).
|
it is possible to create a new console (via AllocConsole).
|
||||||
|
|
||||||
|
|
||||||
Like most k32 objects, when the FreeConsole is called, the
|
When FreeConsole is called, all handles that the process has
|
||||||
ref count is decremented and the console is freed when
|
open to the console are closed. Like most k32objs, if the
|
||||||
it reaches zero. The free kills the xterm and closes
|
console's refcount reaches zero, its k32obj destroy function
|
||||||
the master/slave fds.
|
is called. The destroy kills the xterm if one was open.
|
||||||
|
|
||||||
Also like most k32 objects, we assume that (K32OBJ) header is the
|
Also like most k32 objects, we assume that (K32OBJ) header is the
|
||||||
first field so the casting (from K32OBJ *to CONSOLE *)
|
first field so the casting (from K32OBJ *to CONSOLE *)
|
||||||
works correctly.
|
works correctly.
|
||||||
|
|
||||||
|
FreeConsole is called on process exit (in ExitProcess) if
|
||||||
|
pdb->console is not NULL.
|
||||||
|
|
||||||
BUGS
|
BUGS
|
||||||
----
|
----
|
||||||
|
Console processes do not inherit their parent's handles. I think
|
||||||
|
there needs to be two cases, one where they have to inherit
|
||||||
|
the stdin/stdout/stderr from unix, and one where they have to
|
||||||
|
inherit from another windows app.
|
||||||
|
|
||||||
A exit handler needs to be added. If the process exits
|
|
||||||
without calling FreeConsole, the xterm continues on...
|
|
||||||
But... there should probably be a generic exit handler in
|
|
||||||
wine for this kind of stuff (K32OBJs).
|
|
||||||
|
|
||||||
|
================================================================
|
||||||
|
|
||||||
|
experimentation with NT4 yields that:
|
||||||
|
|
||||||
|
WriteFile
|
||||||
|
---------
|
||||||
|
o does not truncate file on 0 length write
|
||||||
|
o 0 length write or error on write changes numcharswritten to 0
|
||||||
|
o 0 length write returns TRUE
|
||||||
|
o works with console handles
|
||||||
|
|
||||||
|
_lwrite
|
||||||
|
-------
|
||||||
|
o does truncate/expand file at current position on 0 length write
|
||||||
|
o returns 0 on a zero length write
|
||||||
|
o works with console handles (typecasted)
|
||||||
|
|
||||||
|
WriteConsole
|
||||||
|
------------
|
||||||
|
o expects only console handles
|
||||||
|
|
||||||
|
|
||||||
|
SetFilePointer
|
||||||
|
--------------
|
||||||
|
o returns -1 (err 6) when used with a console handle
|
||||||
|
|
||||||
|
|
||||||
|
FreeConsole
|
||||||
|
-----------
|
||||||
|
o even when all the handles to it are freed, the win32 console
|
||||||
|
stays visible, the only way I could find to free it
|
||||||
|
was via the FreeConsole
|
||||||
|
|
|
@ -0,0 +1,351 @@
|
||||||
|
Note: the debugging interface is under development. Please do not make
|
||||||
|
changes to it yet as I will do major changes in the next few weeks.
|
||||||
|
To make my life easier, PLEASE follow the guidelines described in
|
||||||
|
this document. If you have some ideas that you would like to
|
||||||
|
incorporate, please contact me first.
|
||||||
|
Please read the document before writing new code.
|
||||||
|
Also, DO NOT USE fprintf (or printf) to output things. All these
|
||||||
|
will have to be translated to dprintf_ calls and there are already
|
||||||
|
about 3000 of them! Also, instead of writing FIXMEs in the source,
|
||||||
|
output a dprintf_fixme message. But read on...
|
||||||
|
25 Feb 1998, Dimitrie O. Paun <dimi@cs.toronto.edu>
|
||||||
|
|
||||||
|
|
||||||
|
Debugging classes
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
The debugging messages are divided into 4 classes:
|
||||||
|
|
||||||
|
fixme -- Messages in this class relate to behavior of Wine that does
|
||||||
|
not correspond to standard Windows behavior and that should
|
||||||
|
be fixed.
|
||||||
|
Examples: stubs, semi-implemented features, etc.
|
||||||
|
|
||||||
|
err -- Messages in this class relate to serious errors in Wine.
|
||||||
|
This sort of messages are close to asserts -- that is,
|
||||||
|
you should output a 'err' message when the code detects a
|
||||||
|
condition which should not happen.
|
||||||
|
Examples: unexpected change in internal state, etc.
|
||||||
|
|
||||||
|
warn -- This are warning messages. You should report a warning when
|
||||||
|
something unwanted happen but the function behaves properly.
|
||||||
|
That is, output a warning when you encounter something
|
||||||
|
unexpected (ex: could not open a file) but the function deals
|
||||||
|
correctly with the situation (that is, according to the docs).
|
||||||
|
If you do not deal correctly with it, output a fixme.
|
||||||
|
Examples: fail to access a resource required by the app, etc.
|
||||||
|
|
||||||
|
info -- This are detailed debugging messages that are mainly useful
|
||||||
|
to debug a component. This are usually turned off.
|
||||||
|
Examples: everything else that does not fall in one of the
|
||||||
|
above mentioned categories and the user does not
|
||||||
|
need to know about it. This sort of messages simply
|
||||||
|
outputs something about the state of some component
|
||||||
|
that is of interest mainly to the developer of that
|
||||||
|
component.
|
||||||
|
|
||||||
|
We will refer to a generic class as yyy.
|
||||||
|
|
||||||
|
The user has the capability to turn on or off messages in a particular
|
||||||
|
class. You can expect the following patters of usage (but note that
|
||||||
|
any combination is possible):
|
||||||
|
-- when you debug a component, all classes (info,warn,err,fixme)
|
||||||
|
will be enabled.
|
||||||
|
-- during the pre-alpha (maybe alpha) stage of Wine, most likely
|
||||||
|
the info class will be disabled by default, but all others
|
||||||
|
(warn,err,fixme) will be enabled by default.
|
||||||
|
-- when Wine will become stable, most likely the info and warn
|
||||||
|
classes will be disabled by default, but all err and fixme
|
||||||
|
will be enabled by default.
|
||||||
|
-- in some installations that want the smallest footprint
|
||||||
|
and where the debug information is of no interest,
|
||||||
|
all classes may be disabled by default.
|
||||||
|
|
||||||
|
Of course, the user will have the runtime ability to override these
|
||||||
|
defaults. However, this ability may be turned off and certain classes
|
||||||
|
of messages may be completely disabled at compile time to reduce the
|
||||||
|
size of Wine.
|
||||||
|
|
||||||
|
Debugging channels
|
||||||
|
------------------
|
||||||
|
|
||||||
|
Also, we divide the debugging messages per component. Each component
|
||||||
|
is assigned a debugging channel (or type). The identifier of the
|
||||||
|
channel must be a valid C identifier but note that it may also be a
|
||||||
|
reserve word like int or static.
|
||||||
|
|
||||||
|
Examples of debugging channels/types:
|
||||||
|
reg, updown, string
|
||||||
|
|
||||||
|
We will refer to a generic channel as xxx.
|
||||||
|
|
||||||
|
Note: for those who know the old interface, the channel/type is
|
||||||
|
what followed the _ in the dprintf_xxx statements.
|
||||||
|
For example, to output a message on the debugging channel
|
||||||
|
reg in the old interface you would have to write:
|
||||||
|
|
||||||
|
dprintf_reg(stddeb, "Could not access key!\n");
|
||||||
|
|
||||||
|
In the new interface, we drop the stddeb as it is implicit.
|
||||||
|
However, we add an orthogonal piece of information to the
|
||||||
|
message: its class. This is very important as it will allow
|
||||||
|
us to selectively turn on or off certain messages based on
|
||||||
|
type of information they report. For this reason it is VERY
|
||||||
|
important to choose the right class for the message.
|
||||||
|
Anyhow, suppose we figured that this message should belong
|
||||||
|
in the warn class, so in the new interface, you write:
|
||||||
|
|
||||||
|
dprintf_warn(reg, "Could not access key!\n");
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
How to use it
|
||||||
|
-------------
|
||||||
|
|
||||||
|
So, to output a message (class yyy) on channel xxx, do:
|
||||||
|
|
||||||
|
#include "debug.h"
|
||||||
|
|
||||||
|
....
|
||||||
|
|
||||||
|
dprintf_yyy(xxx, "<message>", ...);
|
||||||
|
|
||||||
|
|
||||||
|
Some examples from the code:
|
||||||
|
|
||||||
|
#include "debug.h"
|
||||||
|
|
||||||
|
...
|
||||||
|
|
||||||
|
dprintf_info(crtdll,
|
||||||
|
"CRTDLL_setbuf(file %p buf %p)\n",
|
||||||
|
file, buf);
|
||||||
|
|
||||||
|
dprintf_warn(aspi, "Error opening device errno=%d\n", save_error);
|
||||||
|
|
||||||
|
|
||||||
|
If you need to declare a new debugging channel, do:
|
||||||
|
%tools/make_debug
|
||||||
|
in the root directory of Wine.
|
||||||
|
|
||||||
|
Note that this will result in almost complete recompilation of Wine.
|
||||||
|
|
||||||
|
Notes:
|
||||||
|
1. Please pay attention to which class you assign the message.
|
||||||
|
It is very, Very, VERY important to get the class right.
|
||||||
|
There are only 4 classes, so it is not hard. The reason
|
||||||
|
it is important to get it right is that too much information
|
||||||
|
is no information. For example, if you put things into the
|
||||||
|
warn class that should really be in the info class, the
|
||||||
|
output will be too big and this will force the user to
|
||||||
|
turn of warnings. But this way he will fail to see the important
|
||||||
|
ones. Also, if you put warnings into the info class lets say,
|
||||||
|
he will most likely miss those because usually the info class
|
||||||
|
is turned off. A similar argument can be made if you mix any
|
||||||
|
other two classes.
|
||||||
|
2. ALL LINES MUST END WITH A NEWLINE!!! If you can NOT output
|
||||||
|
everything that you want in the line with only one dprintf_xxx
|
||||||
|
statement, then you need to build the string in memory.
|
||||||
|
Please read the section below "In-memory messages" on the
|
||||||
|
preferred way to do it. PLEASE USE THAT INTERFACE TO BUILD
|
||||||
|
MESSAGES IN MEMORY. The reason is that we are not sure that
|
||||||
|
we like it and having everything in one format will facilitate
|
||||||
|
the (automatic) translation to a better interface.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Are we debugging?
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
To test whether the debugging output of class yyy on channel xxx is
|
||||||
|
enabled, do:
|
||||||
|
|
||||||
|
debugging_yyy(xxx)
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
|
||||||
|
if(debugging_info(atom)){
|
||||||
|
...blah...
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
In-memory messages
|
||||||
|
------------------
|
||||||
|
|
||||||
|
If you NEED to build the message from multiple calls, you need to
|
||||||
|
build it in memory. To do that, you should use the following
|
||||||
|
interface:
|
||||||
|
|
||||||
|
- declare a string (where you are allowed to declare C variables)
|
||||||
|
as follows:
|
||||||
|
dbg_decl_str(name, len);
|
||||||
|
where name is the name of the string (you should use the channel
|
||||||
|
name on which you are going to output it)
|
||||||
|
|
||||||
|
- print in it with:
|
||||||
|
dsprintf(name, "<message>", ...);
|
||||||
|
which is just like a sprintf function but instead of a C string as
|
||||||
|
first parameter it takes the name you used to declare it.
|
||||||
|
|
||||||
|
- obtain a pointer to the string with:
|
||||||
|
dbg_str(name)
|
||||||
|
|
||||||
|
- reset the string (if you want to reuse it with):
|
||||||
|
dbg_reset_str(name);
|
||||||
|
|
||||||
|
Example (modified from the code):
|
||||||
|
|
||||||
|
void some_func(tabs)
|
||||||
|
{
|
||||||
|
INT32 i;
|
||||||
|
LPINT16 p = (LPINT16)tabs;
|
||||||
|
dbg_decl_str(listbox, 256); /* declare the string */
|
||||||
|
|
||||||
|
for (i = 0; i < descr->nb_tabs; i++) {
|
||||||
|
descr->tabs[i] = *p++<<1;
|
||||||
|
if(debugging_info(listbox)) /* write in it only if
|
||||||
|
dsprintf(listbox, "%hd ", descr->tabs[i]); /* we are gonna output it */
|
||||||
|
}
|
||||||
|
dprintf_info(listbox, "Listbox %04x: settabstops %s\n",
|
||||||
|
wnd->hwndSelf, dbg_str(listbox)); /* output the whole thing */
|
||||||
|
}
|
||||||
|
|
||||||
|
If you need to use it two times in the same scope do like this:
|
||||||
|
|
||||||
|
void some_func(tabs)
|
||||||
|
{
|
||||||
|
INT32 i;
|
||||||
|
LPINT16 p = (LPINT16)tabs;
|
||||||
|
dbg_decl_str(listbox, 256); /* declare the string */
|
||||||
|
|
||||||
|
for (i = 0; i < descr->nb_tabs; i++) {
|
||||||
|
descr->tabs[i] = *p++<<1;
|
||||||
|
if(debugging_info(listbox)) /* write in it only if
|
||||||
|
dsprintf(listbox, "%hd ", descr->tabs[i]); /* we are gonna output it */
|
||||||
|
}
|
||||||
|
dprintf_info(listbox, "Listbox %04x: settabstops %s\n",
|
||||||
|
wnd->hwndSelf, dbg_str(listbox)); /* output the whole thing */
|
||||||
|
|
||||||
|
dbg_reset_str(listbox); /* !!!reset the string!!! */
|
||||||
|
for (i = 0; i < descr->extrainfo_nr; i++) {
|
||||||
|
descr->extrainfo = *p+1;
|
||||||
|
if(debugging_info(listbox)) /* write in it only if
|
||||||
|
dsprintf(listbox,"%3d ",descr->extrainfo); /* we are gonna output it */
|
||||||
|
}
|
||||||
|
|
||||||
|
dprintf_info(listbox, "Listbox %04x: extrainfo %s\n",
|
||||||
|
wnd->hwndSelf, dbg_str(listbox)); /* output the whole thing */
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
IMPORTANT NOTE:
|
||||||
|
As I already stated, I do not think this will be the ultimate interface
|
||||||
|
for building in-memory debugging messages. In fact, I do have better ideas
|
||||||
|
which I hope to have time to implement for the next release. For this
|
||||||
|
reason, please try not to use it. However, if you need to output a line
|
||||||
|
in more than one dprintf_xxx calls, then USE THIS INTERFACE. DO NOT use
|
||||||
|
other methods. This way, I will easily translate everything to the new
|
||||||
|
interface (when it will become available). So, if you need to use if,
|
||||||
|
then follow the following guidelines:
|
||||||
|
-- wrap calls to dsprintf with a
|
||||||
|
if(debugging_yyy(xxx))
|
||||||
|
dsprintf(xxx,...);
|
||||||
|
Of course, if the call to dsprintf is made from within a function
|
||||||
|
which you know is called only if debugging_yyy(xxx) is true
|
||||||
|
(say you call it only like this:
|
||||||
|
if(debugging_yyy(xxx))
|
||||||
|
print_some_debug_info();
|
||||||
|
)
|
||||||
|
then you need not (and should not) wrap calls to dsprintf with
|
||||||
|
the before mentioned if.
|
||||||
|
-- name the string EXACTLY like the debugging channel on which
|
||||||
|
is going to be output. Please see the above example.
|
||||||
|
|
||||||
|
|
||||||
|
Resource identifiers
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
Resource identifiers can be either strings or numbers. To make life a bit
|
||||||
|
easier for outputting this beasts (and to help you avoid the need to build
|
||||||
|
the message in memory), I introduced a new function called:
|
||||||
|
|
||||||
|
debugres
|
||||||
|
|
||||||
|
The function is defined in debugstr.h
|
||||||
|
and has the following prototype:
|
||||||
|
|
||||||
|
LPSTR debugres(const void *id);
|
||||||
|
|
||||||
|
It takes a pointer to the resource id and returns a nicely formatted
|
||||||
|
string of the identifier.
|
||||||
|
|
||||||
|
It the high word of the pointer is 0, then it assumes that the
|
||||||
|
identifier is a number and thus returns a string of the form:
|
||||||
|
|
||||||
|
#xxxx
|
||||||
|
|
||||||
|
where xxxx are 4 hex-digits representing the low word of id.
|
||||||
|
|
||||||
|
It the high word of the pointer is not 0, then it assumes that the
|
||||||
|
identifier is a string and thus returns a string of the form:
|
||||||
|
|
||||||
|
'<identifier>'
|
||||||
|
|
||||||
|
Thus, to use it, do something on the following lines:
|
||||||
|
|
||||||
|
#include "debugstr.h"
|
||||||
|
|
||||||
|
...
|
||||||
|
|
||||||
|
dprintf_yyy(xxx, "resource is %s", debugres(myresource));
|
||||||
|
|
||||||
|
|
||||||
|
The -debugmsg command line option
|
||||||
|
---------------------------------
|
||||||
|
|
||||||
|
So, the -debugmsg command line option has been changed as follows:
|
||||||
|
- the new syntax is: -debugmsg [yyy]#xxx[,[yyy1]#xxx1]*
|
||||||
|
where # is either + or -
|
||||||
|
|
||||||
|
- when the optional class argument (yyy) is not present,
|
||||||
|
then the statement will enable(+)/disable(-) all messages for
|
||||||
|
the given channel (xxx) on all classes. For example:
|
||||||
|
|
||||||
|
-debugmsg +reg,-file
|
||||||
|
|
||||||
|
enables all messages on the reg channel and disables all
|
||||||
|
messages on the file channel.
|
||||||
|
This is very close (actually identical) to the old semantics.
|
||||||
|
|
||||||
|
- when the optional class argument (yyy) is present,
|
||||||
|
then the statement will enable(+)/disable(-) messages for
|
||||||
|
the given channel (xxx) only on the given class. For example:
|
||||||
|
|
||||||
|
-debugmsg info+reg,warn-file
|
||||||
|
|
||||||
|
enables info messages on the reg channel and disables warning
|
||||||
|
messages on the file channel.
|
||||||
|
|
||||||
|
- also, the pseudo-channel all is also supported and it has the
|
||||||
|
intuitive semantics:
|
||||||
|
|
||||||
|
-debugmsg +all -- enables all debug messages
|
||||||
|
-debugmsg -all -- disables all debug messages
|
||||||
|
-debugmsg yyy+all -- enables debug messages for class yyy on all
|
||||||
|
channels.
|
||||||
|
-debugmsg yyy-all -- disables debug messages for class yyy on all
|
||||||
|
channels.
|
||||||
|
|
||||||
|
So, for example:
|
||||||
|
|
||||||
|
-debugmsg warn-all -- disables all warning messages.
|
||||||
|
|
||||||
|
|
||||||
|
Also, note that at the moment:
|
||||||
|
- the fixme, err, warn classes are all enabled by default
|
||||||
|
- the info class is disabled by default
|
||||||
|
- there is no way to compile out the messages. All are
|
||||||
|
runtime configurable. This will come next release.
|
||||||
|
|
||||||
|
|
|
@ -51,18 +51,19 @@ relevant developer as feasonable.
|
||||||
the reason is located in the last call(s). Those lines usually look like
|
the reason is located in the last call(s). Those lines usually look like
|
||||||
this:
|
this:
|
||||||
|
|
||||||
|Call KERNEL.90: LSTRLEN(0227:0692) ret=01e7:2ce7 ds=0227
|
|Call KERNEL.90: LSTRLEN(0227:0692 "text") ret=01e7:2ce7 ds=0227
|
||||||
^^^^^^^^^ ^ ^^^^^^^^^ ^^^^^^^^^ ^^^^
|
^^^^^^^^^ ^ ^^^^^^^^^ ^^^^^^ ^^^^^^^^^ ^^^^
|
||||||
| | | | |Datasegment on entry
|
| | | | | |Datasegment
|
||||||
| | | |Return address.
|
| | | | |Return address
|
||||||
|
| | | |textual parameter
|
||||||
| | |
|
| | |
|
||||||
| | |Argument(s). This one is a win16 segmented pointer.
|
| | |Argument(s). This one is a win16 segmented pointer.
|
||||||
| |Function called.
|
| |Function called.
|
||||||
|The module, the function is called in. In this case it is KERNEL.
|
|The module, the function is called in. In this case it is KERNEL.
|
||||||
|
|
||||||
|Ret KERNEL.90: LSTRLEN() retval=0x0007 ret=01e7:2ce7 ds=0227
|
|Ret KERNEL.90: LSTRLEN() retval=0x0004 ret=01e7:2ce7 ds=0227
|
||||||
^^^^^^
|
^^^^^^
|
||||||
|Returnvalue is 16 bit and has the value 7.
|
|Returnvalue is 16 bit and has the value 4.
|
||||||
|
|
||||||
|
|
||||||
3. If you have found a misbehaving function, try to find out why it
|
3. If you have found a misbehaving function, try to find out why it
|
||||||
|
@ -119,18 +120,28 @@ Program reports an error with a Messagebox
|
||||||
"continue". With "-debugmsg +all" Wine will now stop directly directly
|
"continue". With "-debugmsg +all" Wine will now stop directly directly
|
||||||
before setting up the Messagebox. Proceed as explained above.
|
before setting up the Messagebox. Proceed as explained above.
|
||||||
|
|
||||||
|
You can also run wine using "wine -debugmsg +relay program.exe 2>&1|less -i"
|
||||||
|
and in less search for messagebox.
|
||||||
|
|
||||||
Disassembling programs:
|
Disassembling programs:
|
||||||
=======================
|
=======================
|
||||||
You may also try to disassemble the offending program to check for
|
You may also try to disassemble the offending program to check for
|
||||||
undocumented features and/or use of them.
|
undocumented features and/or use of them.
|
||||||
The best, freely available, disassembler for win16 programs is
|
|
||||||
|
The best, freely available, disassembler for Win16 programs is
|
||||||
Windows Codeback, archivename wcbxxx.zip, which usually can be found
|
Windows Codeback, archivename wcbxxx.zip, which usually can be found
|
||||||
in the Cica-Mirror subdirectory on the WINE ftpsites. (See ANNOUNCE).
|
in the Cica-Mirror subdirectory on the WINE ftpsites. (See ANNOUNCE).
|
||||||
Disassembling win32 programs is currenty only possible using
|
Disassembling win32 programs is possible using the Windows Disassembler 32,
|
||||||
Windows Disassembler 32, archivename something like wdasm32x.zip on
|
archivename something like w32dasm.zip on ftp.winsite.com and mirrors.
|
||||||
ftp.winsite.com and mirrors.
|
The shareware version does not allow saving of disassembly listings.
|
||||||
|
|
||||||
|
[It also has a bug, it disassembles the dll and immediately after that
|
||||||
|
crashes, leaving a very large file caled 'winsys' in the directory of the
|
||||||
|
disassembled file. This file contains nothing of value (just the disassembly)
|
||||||
|
and can be safely deleted.]
|
||||||
|
|
||||||
Understanding disassembled code is just a question of exercise.
|
Understanding disassembled code is just a question of exercise.
|
||||||
|
|
||||||
Most code out there uses standard C function entries (for it is usually
|
Most code out there uses standard C function entries (for it is usually
|
||||||
written in C). Win16 function entries usually look like that:
|
written in C). Win16 function entries usually look like that:
|
||||||
| push bp
|
| push bp
|
||||||
|
@ -157,7 +168,6 @@ Disassembling programs:
|
||||||
| call KERNEL.LSTRLEN
|
| call KERNEL.LSTRLEN
|
||||||
Here first the selector and then the offset to the passed string are pushed.
|
Here first the selector and then the offset to the passed string are pushed.
|
||||||
|
|
||||||
|
|
||||||
Sample debugging session:
|
Sample debugging session:
|
||||||
=========================
|
=========================
|
||||||
|
|
||||||
|
@ -171,88 +181,78 @@ Sample debugging session:
|
||||||
|
|
||||||
|
|
||||||
|marcus@jet $ wine winword.exe -debugmsg +relay -debug
|
|marcus@jet $ wine winword.exe -debugmsg +relay -debug
|
||||||
|CallTo32(func=08007e00,000001c4,00000081,00000000,00000000)
|
|CallTo32(wndproc=0x40065bc0,hwnd=000001ac,msg=00000081,wp=00000000,lp=00000000)
|
||||||
|CallTo32(func=08007e00,000001c4,00000014,000006d0,00000000)
|
|Win16 task 'winword': Breakpoint 1 at 0x01d7:0x001a
|
||||||
|Win16 task 'winword': Breakpoint 1 at 0x0157:0x001a
|
|CallTo16(func=0127:0070,ds=0927)
|
||||||
|CallTo16(func=0097:0130,ds=0000)
|
|Call WPROCS.24: TASK_RESCHEDULE() ret=00b7:1456 ds=0927
|
||||||
|Call WPROCS.24: TASK_RESCHEDULE() ret=003f:0759 ds=0000
|
|Ret WPROCS.24: TASK_RESCHEDULE() retval=0x8672 ret=00b7:1456 ds=0927
|
||||||
|Ret WPROCS.24: TASK_RESCHEDULE() retval=0x0000 ret=003f:0759 ds=08a7
|
|CallTo16(func=01d7:001a,ds=0927)
|
||||||
|CallTo16(func=0157:001a,ds=08a7,0x11d7,0x0000,0x0000,0x3cb4,0x1f40,0x0000,0x0000,0x08a7)
|
| AX=0000 BX=3cb4 CX=1f40 DX=0000 SI=0000 DI=0927 BP=0000 ES=11f7
|
||||||
|Loading symbols from ELF file /home/marcus/wine/wine...
|
|Loading symbols: /home/marcus/wine/wine...
|
||||||
|...more Loading symbols ...
|
|Stopped on breakpoint 1 at 0x01d7:0x001a
|
||||||
|Stopped on breakpoint 1 at 0x0157:0x001a (WPROCS_VXD_PAGEFILE+0xffffeeea)
|
|
||||||
|In 16 bit mode.
|
|In 16 bit mode.
|
||||||
|Wine-dbg>break MessageBox32A <---- Set Breakpoint
|
|Wine-dbg>break MessageBox32A <---- Set Breakpoint
|
||||||
|Breakpoint 2 at 0x080e792c (MessageBox32A [msgbox.c:198])
|
|Breakpoint 2 at 0x40189100 (MessageBox32A [msgbox.c:190])
|
||||||
|Wine-dbg>c <---- Continue
|
|Wine-dbg>c <---- Continue
|
||||||
|Call KERNEL.91: INITTASK() ret=0157:0022 ds=08a7
|
|Call KERNEL.91: INITTASK() ret=0157:0022 ds=08a7
|
||||||
| AX=0000 BX=3cb4 CX=1f40 DX=0000 SI=0000 DI=08a7 ES=11d7 EFL=00000286
|
| AX=0000 BX=3cb4 CX=1f40 DX=0000 SI=0000 DI=08a7 ES=11d7 EFL=00000286
|
||||||
|CallTo16(func=090f:085c,ds=0dcf,0x0000,0x0000,0x0000,0x0000,0x0800,0x0000,0x0000,0x0dcf)
|
|CallTo16(func=090f:085c,ds=0dcf,0x0000,0x0000,0x0000,0x0000,0x0800,0x0000,0x0000,0x0dcf)
|
||||||
|... <----- Much debugoutput
|
|... <----- Much debugoutput
|
||||||
|Call KERNEL.97: GETTEMPFILENAME(0x00c3,08a7:8350,0x0000,08a7:8234) ret=058f:09b1 ds=08a7
|
|Call KERNEL.136: GETDRIVETYPE(0x0000) ret=060f:097b ds=0927
|
||||||
^ ^ ^ ^
|
^^^^^^ Drive 0 (A:)
|
||||||
| | | |LPSTR buffer
|
|Ret KERNEL.136: GETDRIVETYPE() retval=0x0002 ret=060f:097b ds=0927
|
||||||
| | |UINT16 unique
|
^^^^^^ DRIVE_REMOVEABLE
|
||||||
| |LPCSTR prefix
|
(It is a floppy diskdrive.)
|
||||||
|BYTE drive
|
|
||||||
|
|
||||||
|Ret KERNEL.97: GETTEMPFILENAME() retval=0xce3f ret=058f:09b1 ds=08a7
|
|Call KERNEL.136: GETDRIVETYPE(0x0001) ret=060f:097b ds=0927
|
||||||
^
|
^^^^^^ Drive 1 (B:)
|
||||||
|new unique number
|
|Ret KERNEL.136: GETDRIVETYPE() retval=0x0000 ret=060f:097b ds=0927
|
||||||
|
^^^^^^ DRIVE_CANNOTDETERMINE
|
||||||
|
(I don't have drive B: assigned)
|
||||||
|
|
||||||
|Call KERNEL.74: OPENFILE(08a7:8234,08a7:82c6,0x1012) ret=058f:09d8 ds=08a7
|
|Call KERNEL.136: GETDRIVETYPE(0x0002) ret=060f:097b ds=0927
|
||||||
^ ^ ^
|
^^^^^^^ Drive 2 (C:)
|
||||||
| | |UINT32 mode
|
|Ret KERNEL.136: GETDRIVETYPE() retval=0x0003 ret=060f:097b ds=0927
|
||||||
| |OFSTRUCT *ofs
|
^^^^^^ DRIVE_FIXED
|
||||||
|LPCSTR name
|
(specified as a harddisk)
|
||||||
|
|
||||||
|Ret KERNEL.74: OPENFILE() retval=0xffff ret=058f:09d8 ds=08a7
|
|Call KERNEL.97: GETTEMPFILENAME(0x00c3,0x09278364"doc",0x0000,0927:8248) ret=060f:09b1 ds=0927
|
||||||
^
|
^^^^^^ ^^^^^ ^^^^^^^^^
|
||||||
| -1 aka. HFILE_ERROR
|
| | |buffer for fname
|
||||||
|
| |temporary name ~docXXXX.tmp
|
||||||
|
|Force use of Drive C:.
|
||||||
|
|
||||||
|Call USER.1: MESSAGEBOX(0x0000,08ef:8362,0000:0000,0x1030) ret=05d7:084f ds=08efStopped on breakpoint 2 at 0x080e792c (MessageBox32A [msgbox.c:198])
|
|Warning: GetTempFileName returns 'C:~doc9281.tmp', which doesn't seem to be writeable.
|
||||||
|198 {
|
|
||||||
|In 32 bit mode.
|
|
||||||
|Wine-dbg> _
|
|
||||||
|
|
||||||
Now, we see that OPENFILE seem to have returned 0xFFFF (or -1). Checking
|
|
||||||
the implementation of OpenFile in files/file.c, this signals an error.
|
|
||||||
The mode flags (OF_READWRITE|OF_SHARE_EXCLUSIVE|OF_CREATE) seems to
|
|
||||||
indicate, that WinWord wants to open the file for writing, so we check
|
|
||||||
the filename. Since we don't see the filename in this debugoutput, we use
|
|
||||||
the dprintf_file() in OpenFile to print out more information by adding
|
|
||||||
"-debugmsg +relay" to the commandline.
|
|
||||||
|
|
||||||
(In fact, we see that the filename has been returned by the GetTempFileName
|
|
||||||
function above, but we check it anyway.)
|
|
||||||
|
|
||||||
|marcus@jet $ wine winword.exe -debugmsg +relay,+file -debug
|
|
||||||
|.....much more debugoutput .....
|
|
||||||
|
|
|
||||||
|
|
||||||
|Call KERNEL.97: GETTEMPFILENAME(0x00c3,08ef:8350,0x0000,08ef:8234) ret=05d7:09b1 ds=08ef
|
|
||||||
|FILE_Create: 'C:\~doc8b93.tmp' 01b6 1
|
|
||||||
|FILE_SetDosError: errno = 13
|
|
||||||
|
|
||||||
|Warning: GetTempFileName returns 'C:\~doc8b93.tmp', which doesn't seem to be writeable.
|
|
||||||
|Please check your configuration file if this generates a failure.
|
|Please check your configuration file if this generates a failure.
|
||||||
^ Warning message
|
|
||||||
|
|
||||||
|GetTempFileName: returning C:\~doc8b93.tmp
|
Whoops, it even detects that something is wrong!
|
||||||
|Ret KERNEL.97: GETTEMPFILENAME() retval=0x8b93 ret=05d7:09b1 ds=08ef
|
|
||||||
|Call KERNEL.74: OPENFILE(08ef:8234,08ef:82c6,0x1012) ret=05d7:09d8 ds=08ef
|
|
||||||
|OpenFile: C:\~doc8b93.tmp 1012
|
|
||||||
|FILE_Create: 'C:\~doc8b93.tmp' 01b6 0
|
|
||||||
|FILE_SetDosError: errno = 13
|
|
||||||
|OpenFile(C:\~doc8b93.tmp): return = HFILE_ERROR
|
|
||||||
|Ret KERNEL.74: OPENFILE() retval=0xffff ret=05d7:09d8 ds=08ef
|
|
||||||
|
|
||||||
|
|Ret KERNEL.97: GETTEMPFILENAME() retval=0x9281 ret=060f:09b1 ds=0927
|
||||||
|
^^^^^^ Temporary storage ID
|
||||||
|
|
||||||
The filename is "C:\~docd03d.tmp". Of course, C:\ is writeable for the
|
|Call KERNEL.74: OPENFILE(0x09278248"C:~doc9281.tmp",0927:82da,0x1012) ret=060f:09d8 ds=0927
|
||||||
superuser only, so the open fails for a normal user and OpenFile returns
|
^^^^^^^^^^^^^^^^ ^^^^^^^^^ ^^^^^^^
|
||||||
-1, which in turn generates this messagebox. (As said by the warning
|
|filename |OFSTRUCT |open mode:
|
||||||
message.)
|
|
||||||
|
|
||||||
|
OF_CREATE|OF_SHARE_EXCLUSIVE|OF_READWRITE
|
||||||
|
|
||||||
|
This fails, since my C: drive is in this case mounted readonly.
|
||||||
|
|
||||||
|
|Ret KERNEL.74: OPENFILE() retval=0xffff ret=060f:09d8 ds=0927
|
||||||
|
^^^^^^ HFILE_ERROR16, yes, it failed.
|
||||||
|
|
||||||
|
|Call USER.1: MESSAGEBOX(0x0000,0x09278376"Sie müssen Windows verlassen und SHARE.EXE laden bevor Sie Word starten.",0x00000000,0x1030) ret=060f:084f ds=0927
|
||||||
|
|
||||||
|
And MessageBox'ed.
|
||||||
|
|
||||||
|
|Stopped on breakpoint 2 at 0x40189100 (MessageBox32A [msgbox.c:190])
|
||||||
|
|190 { <- the sourceline
|
||||||
|
In 32 bit mode.
|
||||||
|
Wine-dbg>
|
||||||
|
|
||||||
|
The code seems to find a writeable harddisk and tries to create a file
|
||||||
|
there. To work around this bug, you can define C: as a networkdrive,
|
||||||
|
which is ignored by the code above.
|
||||||
|
|
||||||
Written by Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>,
|
Written by Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>,
|
||||||
additions welcome.
|
additions welcome.
|
||||||
|
|
|
@ -23,7 +23,7 @@ END-INFO-DIR-ENTRY
|
||||||
This file documents Wine, the Windows Emulator.
|
This file documents Wine, the Windows Emulator.
|
||||||
|
|
||||||
@c
|
@c
|
||||||
Copyright @copyright{} 1997 The Wine authors. @*
|
Copyright @copyright{} 1997,1998 The Wine authors. @*
|
||||||
@xref{Authors, The Wine Authors, The Wine Authors},
|
@xref{Authors, The Wine Authors, The Wine Authors},
|
||||||
for a list of the copyright holders.
|
for a list of the copyright holders.
|
||||||
|
|
||||||
|
@ -44,8 +44,8 @@ versions of this manual under the conditions stated in
|
||||||
the section entitled ``License, Warranty, and Authors of Wine''.
|
the section entitled ``License, Warranty, and Authors of Wine''.
|
||||||
|
|
||||||
@sp 4
|
@sp 4
|
||||||
FIXME: UNIX and POSIX trademarks. @*
|
FIXME: X11 and POSIX trademarks. @*
|
||||||
X11 @*
|
UNIX is a registered trademark of the Open Group.
|
||||||
Microsoft, Windows, MS-Windows, Windows-NT, Windows 95, and MS-DOS are
|
Microsoft, Windows, MS-Windows, Windows-NT, Windows 95, and MS-DOS are
|
||||||
registered trademarks of Microsoft Corporation.
|
registered trademarks of Microsoft Corporation.
|
||||||
NT is a trademark of Northern Telecom Limited.
|
NT is a trademark of Northern Telecom Limited.
|
||||||
|
@ -59,17 +59,16 @@ be registered in certain jurisdictions.
|
||||||
@setchapternewpage odd
|
@setchapternewpage odd
|
||||||
|
|
||||||
@titlepage
|
@titlepage
|
||||||
@sp 10
|
|
||||||
|
|
||||||
@center @titlefont{The Wine Reference Manual}
|
|
||||||
@center Edition 0.0.3, 14 August 1997
|
|
||||||
|
|
||||||
|
@title{The Wine Reference Manual}
|
||||||
|
@subtitle{Edition 0.0.5, February 1998}
|
||||||
|
|
||||||
|
@author{The Wine Team}
|
||||||
@c The following two commands start the copyright page.
|
@c The following two commands start the copyright page.
|
||||||
@page
|
@page
|
||||||
@vskip 0pt plus 1filll
|
@vskip 0pt plus 1filll
|
||||||
|
|
||||||
Copyright @copyright{} 1997 The Wine authors. @*
|
Copyright @copyright{} 1997, 1998 The Wine authors. @*
|
||||||
@xref{Authors, The Wine Authors, The Wine Authors},
|
@xref{Authors, The Wine Authors, The Wine Authors},
|
||||||
for a list of the copyright holders.
|
for a list of the copyright holders.
|
||||||
|
|
||||||
|
@ -101,12 +100,12 @@ be registered in certain jurisdictions.
|
||||||
|
|
||||||
@c Edit this macro manually in the above parts of the document
|
@c Edit this macro manually in the above parts of the document
|
||||||
@macro winemanualversion
|
@macro winemanualversion
|
||||||
0.0.3
|
0.0.4
|
||||||
@end macro
|
@end macro
|
||||||
|
|
||||||
@c Edit this macro manually in the above parts of the document
|
@c Edit this macro manually in the above parts of the document
|
||||||
@macro winemanualdate
|
@macro winemanualdate
|
||||||
14 August 1997
|
February 1998
|
||||||
@end macro
|
@end macro
|
||||||
|
|
||||||
@c Edit this macro manually into the TeX titlepage
|
@c Edit this macro manually into the TeX titlepage
|
||||||
|
@ -122,12 +121,12 @@ Winelib
|
||||||
@c MICROSOFT
|
@c MICROSOFT
|
||||||
@c
|
@c
|
||||||
|
|
||||||
@c FIXME: automatical trademark reference
|
@c FIXME: automatic trademark reference
|
||||||
@macro mswindows
|
@macro mswindows
|
||||||
MS-Windows
|
MS-Windows
|
||||||
@end macro
|
@end macro
|
||||||
|
|
||||||
@c FIXME: automatical trademark reference
|
@c FIXME: automatic trademark reference
|
||||||
@c spell it always the same
|
@c spell it always the same
|
||||||
@macro WIN32
|
@macro WIN32
|
||||||
WIN32
|
WIN32
|
||||||
|
@ -136,17 +135,17 @@ WIN32
|
||||||
WIN16
|
WIN16
|
||||||
@end macro
|
@end macro
|
||||||
|
|
||||||
@c FIXME: automatical trademark reference
|
@c FIXME: automatic trademark reference
|
||||||
@macro WINNT
|
@macro WINNT
|
||||||
Windows NT
|
Windows NT
|
||||||
@end macro
|
@end macro
|
||||||
|
|
||||||
@c FIXME: automatical trademark reference
|
@c FIXME: automatic trademark reference
|
||||||
@macro WINNT40
|
@macro WINNT40
|
||||||
Windows NT 4.0
|
Windows NT 4.0
|
||||||
@end macro
|
@end macro
|
||||||
|
|
||||||
@c FIXME: automatical trademark reference
|
@c FIXME: automatic trademark reference
|
||||||
@macro WIN95
|
@macro WIN95
|
||||||
Windows 95
|
Windows 95
|
||||||
@end macro
|
@end macro
|
||||||
|
@ -155,12 +154,12 @@ Windows 95
|
||||||
@c
|
@c
|
||||||
@c THE OTHERS
|
@c THE OTHERS
|
||||||
@c
|
@c
|
||||||
@c FIXME: automatical trademark reference
|
@c FIXME: automatic trademark reference
|
||||||
@macro unix
|
@macro unix
|
||||||
UNIX
|
UNIX
|
||||||
@end macro
|
@end macro
|
||||||
|
|
||||||
@c FIXME: automatical trademark reference
|
@c FIXME: automatic trademark reference
|
||||||
@macro posix
|
@macro posix
|
||||||
POSIX
|
POSIX
|
||||||
@end macro
|
@end macro
|
||||||
|
@ -1203,7 +1202,14 @@ FIXME: write installation guide
|
||||||
@section Applying patches
|
@section Applying patches
|
||||||
@xref{Creating patches}, for instructions on creating patches.
|
@xref{Creating patches}, for instructions on creating patches.
|
||||||
|
|
||||||
FIXME: write patch instructions
|
@kbd{cd} to the top source directory for Wine, and run
|
||||||
|
@code{patch -p1 < @var{patchfile}}.
|
||||||
|
What needs to be done next depends to some extent on what the
|
||||||
|
patch touches. For small patches which only alter C source, it can be
|
||||||
|
enough to rerun @code{make}. In general, the sequence @code{configure},
|
||||||
|
@code{make depend}, @code{make} is sufficient, unless the patch alters
|
||||||
|
@code{[config.in]}, in which case you must regenerate @code{configure}
|
||||||
|
via @code{make configure} (which just runs @code{autoconf}).
|
||||||
|
|
||||||
|
|
||||||
@node The Wine Project, , Installation, Top
|
@node The Wine Project, , Installation, Top
|
||||||
|
@ -1842,7 +1848,7 @@ compiled as a library, they will be defined; if Wine is compiled as an
|
||||||
emulator, they won't.
|
emulator, they won't.
|
||||||
|
|
||||||
You therefore have to access all functions and data types by their full
|
You therefore have to access all functions and data types by their full
|
||||||
names, with the proper suffix explicitely appended. In Wine, the 16 bit
|
names, with the proper suffix explicitly appended. In Wine, the 16 bit
|
||||||
and 32 bit versions of the functions are distinct entities, which might
|
and 32 bit versions of the functions are distinct entities, which might
|
||||||
(theoretically) show a completely different behaviour. They may even
|
(theoretically) show a completely different behaviour. They may even
|
||||||
call each other (and they will quite frequently).
|
call each other (and they will quite frequently).
|
||||||
|
@ -1858,7 +1864,20 @@ The 16-to-32 bit mapping is done on exporting the DLL functions.
|
||||||
@section Creating patches
|
@section Creating patches
|
||||||
@xref{Applying patches}, for instructions on applying patches.
|
@xref{Applying patches}, for instructions on applying patches.
|
||||||
|
|
||||||
FIXME: how to create patches
|
Patches are created with the program @code{diff}. You need a copy
|
||||||
|
of clean source tree to diff against. The @samp{-u} option, to create
|
||||||
|
unified diffs, is popular but not obligatory.
|
||||||
|
For changes to a single file,
|
||||||
|
@code{diff -u wine990101/windows/win.c mywine/windows/win.c > win_patch}
|
||||||
|
is sufficient.
|
||||||
|
To generate a complete diff between your tree and the distribution,
|
||||||
|
use @code{diff -uR wine990101 mywine}.
|
||||||
|
|
||||||
|
This assumes that the original distribution and your personal tree
|
||||||
|
have the same parent directory, from which you make the diff.
|
||||||
|
This ensures a consistent format for the diffs, which in turn
|
||||||
|
is necessary so that they can be applied consistently as described in
|
||||||
|
@xref{Applying patches}.
|
||||||
|
|
||||||
@node Adding Documentation, File names, Creating patches, The Wine Project
|
@node Adding Documentation, File names, Creating patches, The Wine Project
|
||||||
@section Adding Documentation
|
@section Adding Documentation
|
||||||
|
|
|
@ -18,7 +18,6 @@
|
||||||
#include "heap.h"
|
#include "heap.h"
|
||||||
#include "msdos.h"
|
#include "msdos.h"
|
||||||
#include "options.h"
|
#include "options.h"
|
||||||
#include "stddebug.h"
|
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
|
||||||
#define MAX_PATH_ELEMENTS 20
|
#define MAX_PATH_ELEMENTS 20
|
||||||
|
@ -97,10 +96,10 @@ void DIR_ParseWindowsPath( char *path )
|
||||||
DIR_PathElements++;
|
DIR_PathElements++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (debugging_dosfs)
|
if (debugging_info(dosfs))
|
||||||
for (i = 0; i < DIR_PathElements; i++)
|
for (i = 0; i < DIR_PathElements; i++)
|
||||||
{
|
{
|
||||||
dprintf_dosfs( stddeb, "Path[%d]: %s = %s\n",
|
dprintf_info(dosfs, "Path[%d]: %s = %s\n",
|
||||||
i, DIR_DosPath[i], DIR_UnixPath[i] );
|
i, DIR_DosPath[i], DIR_UnixPath[i] );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -156,9 +155,9 @@ int DIR_Init(void)
|
||||||
path, sizeof(path) );
|
path, sizeof(path) );
|
||||||
DIR_ParseWindowsPath( path );
|
DIR_ParseWindowsPath( path );
|
||||||
|
|
||||||
dprintf_dosfs( stddeb, "WindowsDir = %s\nSystemDir = %s\n",
|
dprintf_info(dosfs, "WindowsDir = %s\nSystemDir = %s\n",
|
||||||
DIR_WindowsDosDir, DIR_SystemDosDir );
|
DIR_WindowsDosDir, DIR_SystemDosDir );
|
||||||
dprintf_dosfs( stddeb, "TempDir = %s\nCwd = %c:\\%s\n",
|
dprintf_info(dosfs, "TempDir = %s\nCwd = %c:\\%s\n",
|
||||||
DIR_TempDosDir, 'A' + drive, DRIVE_GetDosCwd( drive ) );
|
DIR_TempDosDir, 'A' + drive, DRIVE_GetDosCwd( drive ) );
|
||||||
|
|
||||||
/* Put the temp and Windows and system directories into the environment */
|
/* Put the temp and Windows and system directories into the environment */
|
||||||
|
@ -328,7 +327,7 @@ UINT32 WINAPI GetSystemDirectory32W( LPWSTR path, UINT32 count )
|
||||||
*/
|
*/
|
||||||
BOOL16 WINAPI CreateDirectory16( LPCSTR path, LPVOID dummy )
|
BOOL16 WINAPI CreateDirectory16( LPCSTR path, LPVOID dummy )
|
||||||
{
|
{
|
||||||
dprintf_file( stddeb,"CreateDirectory16(%s,%p)\n", path, dummy );
|
dprintf_info(file,"CreateDirectory16(%s,%p)\n", path, dummy );
|
||||||
return (BOOL16)CreateDirectory32A( path, NULL );
|
return (BOOL16)CreateDirectory32A( path, NULL );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -340,12 +339,11 @@ BOOL32 WINAPI CreateDirectory32A( LPCSTR path,
|
||||||
LPSECURITY_ATTRIBUTES lpsecattribs )
|
LPSECURITY_ATTRIBUTES lpsecattribs )
|
||||||
{
|
{
|
||||||
DOS_FULL_NAME full_name;
|
DOS_FULL_NAME full_name;
|
||||||
LPCSTR unixName;
|
|
||||||
|
|
||||||
dprintf_file( stddeb, "CreateDirectory32A(%s,%p)\n", path, lpsecattribs );
|
dprintf_info(file, "CreateDirectory32A(%s,%p)\n", path, lpsecattribs );
|
||||||
if ((unixName = DOSFS_IsDevice( path )) != NULL)
|
if (DOSFS_IsDevice( path ))
|
||||||
{
|
{
|
||||||
dprintf_file(stddeb, "CreateDirectory: device '%s'!\n", unixName);
|
dprintf_info(file, "CreateDirectory: cannot use device '%s'!\n",path);
|
||||||
DOS_ERROR( ER_AccessDenied, EC_AccessDenied, SA_Abort, EL_Disk );
|
DOS_ERROR( ER_AccessDenied, EC_AccessDenied, SA_Abort, EL_Disk );
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
@ -407,13 +405,12 @@ BOOL16 WINAPI RemoveDirectory16( LPCSTR path )
|
||||||
BOOL32 WINAPI RemoveDirectory32A( LPCSTR path )
|
BOOL32 WINAPI RemoveDirectory32A( LPCSTR path )
|
||||||
{
|
{
|
||||||
DOS_FULL_NAME full_name;
|
DOS_FULL_NAME full_name;
|
||||||
LPCSTR unixName;
|
|
||||||
|
|
||||||
dprintf_file(stddeb, "RemoveDirectory: '%s'\n", path );
|
dprintf_info(file, "RemoveDirectory: '%s'\n", path );
|
||||||
|
|
||||||
if ((unixName = DOSFS_IsDevice( path )) != NULL)
|
if (DOSFS_IsDevice( path ))
|
||||||
{
|
{
|
||||||
dprintf_file(stddeb, "RemoveDirectory: device '%s'!\n", unixName);
|
dprintf_info(file, "RemoveDirectory: cannot remove device '%s'!\n", path);
|
||||||
DOS_ERROR( ER_FileNotFound, EC_NotFound, SA_Abort, EL_Disk );
|
DOS_ERROR( ER_FileNotFound, EC_NotFound, SA_Abort, EL_Disk );
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
103
files/dos_fs.c
103
files/dos_fs.c
|
@ -27,7 +27,6 @@
|
||||||
#include "file.h"
|
#include "file.h"
|
||||||
#include "heap.h"
|
#include "heap.h"
|
||||||
#include "msdos.h"
|
#include "msdos.h"
|
||||||
#include "stddebug.h"
|
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
|
||||||
/* Define the VFAT ioctl to get both short and long file names */
|
/* Define the VFAT ioctl to get both short and long file names */
|
||||||
|
@ -50,20 +49,8 @@ typedef struct
|
||||||
/* Chars we don't want to see in DOS file names */
|
/* Chars we don't want to see in DOS file names */
|
||||||
#define INVALID_DOS_CHARS "*?<>|\"+=,;[] \345"
|
#define INVALID_DOS_CHARS "*?<>|\"+=,;[] \345"
|
||||||
|
|
||||||
static const char *DOSFS_Devices[][2] =
|
static const char *DOSFS_Devices[] = {
|
||||||
{
|
"CON","PRN","NUL","AUX","LPT1","LPT2","LPT3","LPT4","COM1","COM2","COM3","COM4",
|
||||||
{ "CON", "" },
|
|
||||||
{ "PRN", "" },
|
|
||||||
{ "NUL", "/dev/null" },
|
|
||||||
{ "AUX", "" },
|
|
||||||
{ "LPT1", "" },
|
|
||||||
{ "LPT2", "" },
|
|
||||||
{ "LPT3", "" },
|
|
||||||
{ "LPT4", "" },
|
|
||||||
{ "COM1", "" },
|
|
||||||
{ "COM2", "" },
|
|
||||||
{ "COM3", "" },
|
|
||||||
{ "COM4", "" }
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -513,13 +500,13 @@ BOOL32 DOSFS_FindUnixName( LPCSTR path, LPCSTR name, LPSTR long_buf,
|
||||||
if ((p = strchr( name, '\\' ))) len = MIN( (int)(p - name), len );
|
if ((p = strchr( name, '\\' ))) len = MIN( (int)(p - name), len );
|
||||||
if (long_len < len + 1) return FALSE;
|
if (long_len < len + 1) return FALSE;
|
||||||
|
|
||||||
dprintf_dosfs( stddeb, "DOSFS_FindUnixName: %s,%s\n", path, name );
|
dprintf_info(dosfs, "DOSFS_FindUnixName: %s,%s\n", path, name );
|
||||||
|
|
||||||
if (!DOSFS_ToDosFCBFormat( name, dos_name )) dos_name[0] = '\0';
|
if (!DOSFS_ToDosFCBFormat( name, dos_name )) dos_name[0] = '\0';
|
||||||
|
|
||||||
if (!(dir = DOSFS_OpenDir( path )))
|
if (!(dir = DOSFS_OpenDir( path )))
|
||||||
{
|
{
|
||||||
dprintf_dosfs( stddeb, "DOSFS_FindUnixName(%s,%s): can't open dir: %s\n",
|
dprintf_warn(dosfs, "DOSFS_FindUnixName(%s,%s): can't open dir: %s\n",
|
||||||
path, name, strerror(errno) );
|
path, name, strerror(errno) );
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
@ -559,12 +546,11 @@ BOOL32 DOSFS_FindUnixName( LPCSTR path, LPCSTR name, LPSTR long_buf,
|
||||||
else
|
else
|
||||||
DOSFS_Hash( long_name, short_buf, FALSE, ignore_case );
|
DOSFS_Hash( long_name, short_buf, FALSE, ignore_case );
|
||||||
}
|
}
|
||||||
dprintf_dosfs( stddeb, "DOSFS_FindUnixName(%s,%s) -> %s (%s)\n",
|
dprintf_info(dosfs, "(%s,%s) -> %s (%s)\n",
|
||||||
path, name, long_name, short_buf ? short_buf : "***");
|
path, name, long_name, short_buf ? short_buf : "***");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
dprintf_dosfs(stddeb,"DOSFS_FindUnixName(%s,%s) -> ** Not found **\n",
|
dprintf_warn(dosfs, "file: '%s' NOT FOUND in dir: '%s'\n", name, path);
|
||||||
path, name );
|
|
||||||
DOSFS_CloseDir( dir );
|
DOSFS_CloseDir( dir );
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -573,10 +559,9 @@ BOOL32 DOSFS_FindUnixName( LPCSTR path, LPCSTR name, LPSTR long_buf,
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* DOSFS_IsDevice
|
* DOSFS_IsDevice
|
||||||
*
|
*
|
||||||
* Check if a DOS file name represents a DOS device. Returns the name
|
* Check if a DOS file name represents a DOS device.
|
||||||
* of the associated Unix device, or NULL if not found.
|
|
||||||
*/
|
*/
|
||||||
const char *DOSFS_IsDevice( const char *name )
|
BOOL32 DOSFS_IsDevice( const char *name )
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
const char *p;
|
const char *p;
|
||||||
|
@ -586,16 +571,62 @@ const char *DOSFS_IsDevice( const char *name )
|
||||||
if ((p = strrchr( name, '\\' ))) name = p + 1;
|
if ((p = strrchr( name, '\\' ))) name = p + 1;
|
||||||
for (i = 0; i < sizeof(DOSFS_Devices)/sizeof(DOSFS_Devices[0]); i++)
|
for (i = 0; i < sizeof(DOSFS_Devices)/sizeof(DOSFS_Devices[0]); i++)
|
||||||
{
|
{
|
||||||
const char *dev = DOSFS_Devices[i][0];
|
const char *dev = DOSFS_Devices[i];
|
||||||
if (!lstrncmpi32A( dev, name, strlen(dev) ))
|
if (!lstrncmpi32A( dev, name, strlen(dev) ))
|
||||||
{
|
{
|
||||||
p = name + strlen( dev );
|
p = name + strlen( dev );
|
||||||
if (!*p || (*p == '.')) return DOSFS_Devices[i][1];
|
if (!*p || (*p == '.')) return TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return NULL;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* DOSFS_OpenDevice
|
||||||
|
*
|
||||||
|
* Open a DOS device. This might not map 1:1 into the UNIX device concept.
|
||||||
|
*/
|
||||||
|
HFILE32 DOSFS_OpenDevice( const char *name, int unixmode )
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
const char *p;
|
||||||
|
|
||||||
|
if (name[0] && (name[1] == ':')) name += 2;
|
||||||
|
if ((p = strrchr( name, '/' ))) name = p + 1;
|
||||||
|
if ((p = strrchr( name, '\\' ))) name = p + 1;
|
||||||
|
for (i = 0; i < sizeof(DOSFS_Devices)/sizeof(DOSFS_Devices[0]); i++)
|
||||||
|
{
|
||||||
|
const char *dev = DOSFS_Devices[i];
|
||||||
|
if (!lstrncmpi32A( dev, name, strlen(dev) ))
|
||||||
|
{
|
||||||
|
p = name + strlen( dev );
|
||||||
|
if (!*p || (*p == '.')) {
|
||||||
|
/* got it */
|
||||||
|
if (!strcmp(DOSFS_Devices[i],"NUL"))
|
||||||
|
return FILE_OpenUnixFile("/dev/null",unixmode);
|
||||||
|
if (!strcmp(DOSFS_Devices[i],"CON")) {
|
||||||
|
switch (unixmode) {
|
||||||
|
case O_RDONLY:
|
||||||
|
return GetStdHandle( STD_INPUT_HANDLE );
|
||||||
|
break;
|
||||||
|
case O_WRONLY:
|
||||||
|
return GetStdHandle( STD_OUTPUT_HANDLE );
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
fprintf(stderr,"DOSFS_OpenDevice: CON cannot be opened read/write currently, FIXME.\n");
|
||||||
|
return HFILE_ERROR32;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* FIXME: the rest of the devices ... lptX, comX et.al. */
|
||||||
|
return HFILE_ERROR32;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return HFILE_ERROR32;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* DOSFS_GetPathDrive
|
* DOSFS_GetPathDrive
|
||||||
*
|
*
|
||||||
|
@ -648,7 +679,7 @@ BOOL32 DOSFS_GetFullName( LPCSTR name, BOOL32 check_last, DOS_FULL_NAME *full )
|
||||||
UINT32 flags;
|
UINT32 flags;
|
||||||
char *p_l, *p_s, *root;
|
char *p_l, *p_s, *root;
|
||||||
|
|
||||||
dprintf_dosfs( stddeb, "DOSFS_GetFullName: %s (last=%d)\n",
|
dprintf_info(dosfs, "DOSFS_GetFullName: %s (last=%d)\n",
|
||||||
name, check_last );
|
name, check_last );
|
||||||
|
|
||||||
if ((full->drive = DOSFS_GetPathDrive( &name )) == -1) return FALSE;
|
if ((full->drive = DOSFS_GetPathDrive( &name )) == -1) return FALSE;
|
||||||
|
@ -756,7 +787,7 @@ BOOL32 DOSFS_GetFullName( LPCSTR name, BOOL32 check_last, DOS_FULL_NAME *full )
|
||||||
}
|
}
|
||||||
if (!full->long_name[0]) strcpy( full->long_name, "/" );
|
if (!full->long_name[0]) strcpy( full->long_name, "/" );
|
||||||
if (!full->short_name[2]) strcpy( full->short_name + 2, "\\" );
|
if (!full->short_name[2]) strcpy( full->short_name + 2, "\\" );
|
||||||
dprintf_dosfs( stddeb, "DOSFS_GetFullName: returning %s = %s\n",
|
dprintf_info(dosfs, "DOSFS_GetFullName: returning %s = %s\n",
|
||||||
full->long_name, full->short_name );
|
full->long_name, full->short_name );
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
@ -846,7 +877,7 @@ static DWORD DOSFS_DoGetFullPathName( LPCSTR name, DWORD len, LPSTR result,
|
||||||
int drive;
|
int drive;
|
||||||
char *p;
|
char *p;
|
||||||
|
|
||||||
dprintf_dosfs( stddeb, "GetFullPathName: converting %s\n", name );
|
dprintf_info(dosfs, "GetFullPathName: converting %s\n", name );
|
||||||
|
|
||||||
if (!name || !result) return 0;
|
if (!name || !result) return 0;
|
||||||
|
|
||||||
|
@ -910,7 +941,7 @@ static DWORD DOSFS_DoGetFullPathName( LPCSTR name, DWORD len, LPSTR result,
|
||||||
if (unicode) lstrcpynAtoW( (LPWSTR)result, buffer, len );
|
if (unicode) lstrcpynAtoW( (LPWSTR)result, buffer, len );
|
||||||
else lstrcpyn32A( result, buffer, len );
|
else lstrcpyn32A( result, buffer, len );
|
||||||
|
|
||||||
dprintf_dosfs( stddeb, "GetFullPathName: returning %s\n", buffer );
|
dprintf_info(dosfs, "GetFullPathName: returning %s\n", buffer );
|
||||||
return strlen(buffer);
|
return strlen(buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -995,7 +1026,7 @@ int DOSFS_FindNext( const char *path, const char *short_mask,
|
||||||
else /* Not in the cache, open it anew */
|
else /* Not in the cache, open it anew */
|
||||||
{
|
{
|
||||||
const char *drive_path;
|
const char *drive_path;
|
||||||
dprintf_dosfs( stddeb, "DOSFS_FindNext: cache miss, path=%s skip=%d buf=%s cur=%d\n",
|
dprintf_info(dosfs, "DOSFS_FindNext: cache miss, path=%s skip=%d buf=%s cur=%d\n",
|
||||||
path, skip, buffer, cur_pos );
|
path, skip, buffer, cur_pos );
|
||||||
cur_pos = skip;
|
cur_pos = skip;
|
||||||
if (dir) DOSFS_CloseDir(dir);
|
if (dir) DOSFS_CloseDir(dir);
|
||||||
|
@ -1004,7 +1035,7 @@ int DOSFS_FindNext( const char *path, const char *short_mask,
|
||||||
drive_path = path + strlen(DRIVE_GetRoot(drive));
|
drive_path = path + strlen(DRIVE_GetRoot(drive));
|
||||||
while ((*drive_path == '/') || (*drive_path == '\\')) drive_path++;
|
while ((*drive_path == '/') || (*drive_path == '\\')) drive_path++;
|
||||||
drive_root = !*drive_path;
|
drive_root = !*drive_path;
|
||||||
dprintf_dosfs(stddeb, "DOSFS_FindNext: drive_root = %d\n", drive_root);
|
dprintf_info(dosfs, "DOSFS_FindNext: drive_root = %d\n", drive_root);
|
||||||
lstrcpyn32A( buffer, path, sizeof(buffer) - 1 );
|
lstrcpyn32A( buffer, path, sizeof(buffer) - 1 );
|
||||||
}
|
}
|
||||||
strcat( buffer, "/" );
|
strcat( buffer, "/" );
|
||||||
|
@ -1070,7 +1101,7 @@ int DOSFS_FindNext( const char *path, const char *short_mask,
|
||||||
|
|
||||||
lstrcpyn32A( entry->cFileName, long_name, sizeof(entry->cFileName) );
|
lstrcpyn32A( entry->cFileName, long_name, sizeof(entry->cFileName) );
|
||||||
if (!(flags & DRIVE_CASE_PRESERVING)) CharLower32A( entry->cFileName );
|
if (!(flags & DRIVE_CASE_PRESERVING)) CharLower32A( entry->cFileName );
|
||||||
dprintf_dosfs( stddeb, "DOSFS_FindNext: returning %s (%s) %02lx %ld\n",
|
dprintf_info(dosfs, "DOSFS_FindNext: returning %s (%s) %02lx %ld\n",
|
||||||
entry->cFileName, entry->cAlternateFileName,
|
entry->cFileName, entry->cAlternateFileName,
|
||||||
entry->dwFileAttributes, entry->nFileSizeLow );
|
entry->dwFileAttributes, entry->nFileSizeLow );
|
||||||
cur_pos += count;
|
cur_pos += count;
|
||||||
|
@ -1537,7 +1568,7 @@ BOOL32 WINAPI FileTimeToSystemTime( const FILETIME *ft, LPSYSTEMTIME syst )
|
||||||
time_t xtime = DOSFS_FileTimeToUnixTime( ft, &remainder );
|
time_t xtime = DOSFS_FileTimeToUnixTime( ft, &remainder );
|
||||||
xtm = gmtime(&xtime);
|
xtm = gmtime(&xtime);
|
||||||
syst->wYear = xtm->tm_year;
|
syst->wYear = xtm->tm_year;
|
||||||
syst->wMonth = xtm->tm_mon;
|
syst->wMonth = xtm->tm_mon + 1;
|
||||||
syst->wDayOfWeek = xtm->tm_wday;
|
syst->wDayOfWeek = xtm->tm_wday;
|
||||||
syst->wDay = xtm->tm_mday;
|
syst->wDay = xtm->tm_mday;
|
||||||
syst->wHour = xtm->tm_hour;
|
syst->wHour = xtm->tm_hour;
|
||||||
|
@ -1557,7 +1588,7 @@ DWORD WINAPI QueryDosDevice32A(LPCSTR devname,LPSTR target,DWORD bufsize)
|
||||||
LPSTR s;
|
LPSTR s;
|
||||||
char buffer[200];
|
char buffer[200];
|
||||||
|
|
||||||
dprintf_dosfs(stddeb,"QueryDosDevice(%s,...)\n",devname?devname:"<null>");
|
dprintf_info(dosfs,"QueryDosDevice(%s,...)\n",devname?devname:"<null>");
|
||||||
if (!devname) {
|
if (!devname) {
|
||||||
/* return known MSDOS devices */
|
/* return known MSDOS devices */
|
||||||
lstrcpy32A(buffer,"CON COM1 COM2 LPT1 NUL ");
|
lstrcpy32A(buffer,"CON COM1 COM2 LPT1 NUL ");
|
||||||
|
@ -1601,7 +1632,7 @@ BOOL32 WINAPI SystemTimeToFileTime( const SYSTEMTIME *syst, LPFILETIME ft )
|
||||||
struct tm xtm;
|
struct tm xtm;
|
||||||
|
|
||||||
xtm.tm_year = syst->wYear;
|
xtm.tm_year = syst->wYear;
|
||||||
xtm.tm_mon = syst->wMonth;
|
xtm.tm_mon = syst->wMonth - 1;
|
||||||
xtm.tm_wday = syst->wDayOfWeek;
|
xtm.tm_wday = syst->wDayOfWeek;
|
||||||
xtm.tm_mday = syst->wDay;
|
xtm.tm_mday = syst->wDay;
|
||||||
xtm.tm_hour = syst->wHour;
|
xtm.tm_hour = syst->wHour;
|
||||||
|
|
|
@ -33,7 +33,6 @@
|
||||||
#include "msdos.h"
|
#include "msdos.h"
|
||||||
#include "options.h"
|
#include "options.h"
|
||||||
#include "task.h"
|
#include "task.h"
|
||||||
#include "stddebug.h"
|
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
|
@ -194,12 +193,12 @@ int DRIVE_Init(void)
|
||||||
DRIVE_CurDrive = i;
|
DRIVE_CurDrive = i;
|
||||||
|
|
||||||
count++;
|
count++;
|
||||||
dprintf_dosfs( stddeb, "%s: path=%s type=%s label='%s' serial=%08lx flags=%08x dev=%x ino=%x\n",
|
dprintf_info(dosfs, "%s: path=%s type=%s label='%s' serial=%08lx flags=%08x dev=%x ino=%x\n",
|
||||||
name, path, DRIVE_Types[drive->type],
|
name, path, DRIVE_Types[drive->type],
|
||||||
drive->label, drive->serial, drive->flags,
|
drive->label, drive->serial, drive->flags,
|
||||||
(int)drive->dev, (int)drive->ino );
|
(int)drive->dev, (int)drive->ino );
|
||||||
}
|
}
|
||||||
else dprintf_dosfs( stddeb, "%s: not defined\n", name );
|
else dprintf_warn(dosfs, "%s: not defined\n", name );
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!count)
|
if (!count)
|
||||||
|
@ -266,7 +265,7 @@ int DRIVE_SetCurrentDrive( int drive )
|
||||||
DOS_ERROR( ER_InvalidDrive, EC_MediaError, SA_Abort, EL_Disk );
|
DOS_ERROR( ER_InvalidDrive, EC_MediaError, SA_Abort, EL_Disk );
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
dprintf_dosfs( stddeb, "DRIVE_SetCurrentDrive: %c:\n", 'A' + drive );
|
dprintf_info(dosfs, "DRIVE_SetCurrentDrive: %c:\n", 'A' + drive );
|
||||||
DRIVE_CurDrive = drive;
|
DRIVE_CurDrive = drive;
|
||||||
if (pTask) pTask->curdrive = drive | 0x80;
|
if (pTask) pTask->curdrive = drive | 0x80;
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -326,7 +325,7 @@ int DRIVE_FindDriveRoot( const char **path )
|
||||||
*next = 0;
|
*next = 0;
|
||||||
|
|
||||||
if (rootdrive != -1)
|
if (rootdrive != -1)
|
||||||
dprintf_dosfs( stddeb, "DRIVE_FindDriveRoot: %s -> drive %c:, root='%s', name='%s'\n",
|
dprintf_info(dosfs, "DRIVE_FindDriveRoot: %s -> drive %c:, root='%s', name='%s'\n",
|
||||||
buffer, 'A' + rootdrive,
|
buffer, 'A' + rootdrive,
|
||||||
DOSDrives[rootdrive].root, *path );
|
DOSDrives[rootdrive].root, *path );
|
||||||
return rootdrive;
|
return rootdrive;
|
||||||
|
@ -447,7 +446,7 @@ int DRIVE_Chdir( int drive, const char *path )
|
||||||
BY_HANDLE_FILE_INFORMATION info;
|
BY_HANDLE_FILE_INFORMATION info;
|
||||||
TDB *pTask = (TDB *)GlobalLock16( GetCurrentTask() );
|
TDB *pTask = (TDB *)GlobalLock16( GetCurrentTask() );
|
||||||
|
|
||||||
dprintf_dosfs( stddeb, "DRIVE_Chdir(%c:,%s)\n", 'A' + drive, path );
|
dprintf_info(dosfs, "DRIVE_Chdir(%c:,%s)\n", 'A' + drive, path );
|
||||||
strcpy( buffer, "A:" );
|
strcpy( buffer, "A:" );
|
||||||
buffer[0] += drive;
|
buffer[0] += drive;
|
||||||
lstrcpyn32A( buffer + 2, path, sizeof(buffer) - 2 );
|
lstrcpyn32A( buffer + 2, path, sizeof(buffer) - 2 );
|
||||||
|
@ -462,7 +461,7 @@ int DRIVE_Chdir( int drive, const char *path )
|
||||||
unix_cwd = full_name.long_name + strlen( DOSDrives[drive].root );
|
unix_cwd = full_name.long_name + strlen( DOSDrives[drive].root );
|
||||||
while (*unix_cwd == '/') unix_cwd++;
|
while (*unix_cwd == '/') unix_cwd++;
|
||||||
|
|
||||||
dprintf_dosfs( stddeb, "DRIVE_Chdir(%c:): unix_cwd=%s dos_cwd=%s\n",
|
dprintf_info(dosfs, "DRIVE_Chdir(%c:): unix_cwd=%s dos_cwd=%s\n",
|
||||||
'A' + drive, unix_cwd, full_name.short_name + 3 );
|
'A' + drive, unix_cwd, full_name.short_name + 3 );
|
||||||
|
|
||||||
HeapFree( SystemHeap, 0, DOSDrives[drive].dos_cwd );
|
HeapFree( SystemHeap, 0, DOSDrives[drive].dos_cwd );
|
||||||
|
@ -535,7 +534,7 @@ int DRIVE_SetLogicalMapping ( int existing_drive, int new_drive )
|
||||||
|
|
||||||
if ( new->root )
|
if ( new->root )
|
||||||
{
|
{
|
||||||
dprintf_dosfs ( stddeb, "Can\'t map drive %c to drive %c - "
|
dprintf_info(dosfs, "Can\'t map drive %c to drive %c - "
|
||||||
"drive %c already exists\n",
|
"drive %c already exists\n",
|
||||||
'A' + existing_drive, 'A' + new_drive,
|
'A' + existing_drive, 'A' + new_drive,
|
||||||
'A' + new_drive );
|
'A' + new_drive );
|
||||||
|
@ -552,7 +551,7 @@ int DRIVE_SetLogicalMapping ( int existing_drive, int new_drive )
|
||||||
new->dev = old->dev;
|
new->dev = old->dev;
|
||||||
new->ino = old->ino;
|
new->ino = old->ino;
|
||||||
|
|
||||||
dprintf_dosfs ( stddeb, "Drive %c is now equal to drive %c\n",
|
dprintf_info(dosfs, "Drive %c is now equal to drive %c\n",
|
||||||
'A' + new_drive, 'A' + existing_drive );
|
'A' + new_drive, 'A' + existing_drive );
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -566,7 +565,7 @@ int DRIVE_SetLogicalMapping ( int existing_drive, int new_drive )
|
||||||
*/
|
*/
|
||||||
int DRIVE_OpenDevice( int drive, int flags )
|
int DRIVE_OpenDevice( int drive, int flags )
|
||||||
{
|
{
|
||||||
if (!DRIVE_IsValid( drive )) return NULL;
|
if (!DRIVE_IsValid( drive )) return -1;
|
||||||
return open( DOSDrives[drive].device, flags );
|
return open( DOSDrives[drive].device, flags );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -735,7 +734,7 @@ BOOL32 WINAPI GetDiskFreeSpaceEx32W( LPCWSTR root, LPULARGE_INTEGER avail,
|
||||||
*/
|
*/
|
||||||
UINT16 WINAPI GetDriveType16( UINT16 drive )
|
UINT16 WINAPI GetDriveType16( UINT16 drive )
|
||||||
{
|
{
|
||||||
dprintf_dosfs( stddeb, "GetDriveType16(%c:)\n", 'A' + drive );
|
dprintf_info(dosfs, "GetDriveType16(%c:)\n", 'A' + drive );
|
||||||
switch(DRIVE_GetType(drive))
|
switch(DRIVE_GetType(drive))
|
||||||
{
|
{
|
||||||
case TYPE_FLOPPY: return DRIVE_REMOVABLE;
|
case TYPE_FLOPPY: return DRIVE_REMOVABLE;
|
||||||
|
@ -753,7 +752,7 @@ UINT16 WINAPI GetDriveType16( UINT16 drive )
|
||||||
*/
|
*/
|
||||||
UINT32 WINAPI GetDriveType32A( LPCSTR root )
|
UINT32 WINAPI GetDriveType32A( LPCSTR root )
|
||||||
{
|
{
|
||||||
dprintf_dosfs( stddeb, "GetDriveType32A(%s)\n", root );
|
dprintf_info(dosfs, "GetDriveType32A(%s)\n", root );
|
||||||
if ((root[1]) && (root[1] != ':'))
|
if ((root[1]) && (root[1] != ':'))
|
||||||
{
|
{
|
||||||
fprintf( stderr, "GetDriveType32A: invalid root '%s'\n", root );
|
fprintf( stderr, "GetDriveType32A: invalid root '%s'\n", root );
|
||||||
|
|
238
files/file.c
238
files/file.c
|
@ -31,13 +31,16 @@
|
||||||
#include "ldt.h"
|
#include "ldt.h"
|
||||||
#include "process.h"
|
#include "process.h"
|
||||||
#include "task.h"
|
#include "task.h"
|
||||||
#include "stddebug.h"
|
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
|
||||||
#if defined(MAP_ANONYMOUS) && !defined(MAP_ANON)
|
#if defined(MAP_ANONYMOUS) && !defined(MAP_ANON)
|
||||||
#define MAP_ANON MAP_ANONYMOUS
|
#define MAP_ANON MAP_ANONYMOUS
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static BOOL32 FILE_Read(K32OBJ *ptr, LPVOID lpBuffer, DWORD nNumberOfChars,
|
||||||
|
LPDWORD lpNumberOfChars, LPOVERLAPPED lpOverlapped);
|
||||||
|
static BOOL32 FILE_Write(K32OBJ *ptr, LPCVOID lpBuffer, DWORD nNumberOfChars,
|
||||||
|
LPDWORD lpNumberOfChars, LPOVERLAPPED lpOverlapped);
|
||||||
static void FILE_Destroy( K32OBJ *obj );
|
static void FILE_Destroy( K32OBJ *obj );
|
||||||
|
|
||||||
const K32OBJ_OPS FILE_Ops =
|
const K32OBJ_OPS FILE_Ops =
|
||||||
|
@ -47,6 +50,8 @@ const K32OBJ_OPS FILE_Ops =
|
||||||
NULL, /* satisfied */
|
NULL, /* satisfied */
|
||||||
NULL, /* add_wait */
|
NULL, /* add_wait */
|
||||||
NULL, /* remove_wait */
|
NULL, /* remove_wait */
|
||||||
|
FILE_Read, /* read */
|
||||||
|
FILE_Write, /* write */
|
||||||
FILE_Destroy /* destroy */
|
FILE_Destroy /* destroy */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -92,6 +97,70 @@ static HFILE32 FILE_Alloc( FILE_OBJECT **file )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* FIXME: lpOverlapped is ignored */
|
||||||
|
static BOOL32 FILE_Read(K32OBJ *ptr, LPVOID lpBuffer, DWORD nNumberOfChars,
|
||||||
|
LPDWORD lpNumberOfChars, LPOVERLAPPED lpOverlapped)
|
||||||
|
{
|
||||||
|
FILE_OBJECT *file = (FILE_OBJECT *)ptr;
|
||||||
|
int result;
|
||||||
|
|
||||||
|
dprintf_info(file, "FILE_Read: %p %p %ld\n", ptr, lpBuffer,
|
||||||
|
nNumberOfChars);
|
||||||
|
|
||||||
|
if (nNumberOfChars == 0) {
|
||||||
|
*lpNumberOfChars = 0; /* FIXME: does this change */
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((result = read(file->unix_handle, lpBuffer, nNumberOfChars)) == -1)
|
||||||
|
{
|
||||||
|
FILE_SetDosError();
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
*lpNumberOfChars = result;
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* experimentation yields that WriteFile:
|
||||||
|
* o does not truncate on write of 0
|
||||||
|
* o always changes the *lpNumberOfChars to actual number of
|
||||||
|
* characters written
|
||||||
|
* o write of 0 nNumberOfChars returns TRUE
|
||||||
|
*/
|
||||||
|
static BOOL32 FILE_Write(K32OBJ *ptr, LPCVOID lpBuffer, DWORD nNumberOfChars,
|
||||||
|
LPDWORD lpNumberOfChars, LPOVERLAPPED lpOverlapped)
|
||||||
|
{
|
||||||
|
FILE_OBJECT *file = (FILE_OBJECT *)ptr;
|
||||||
|
int result;
|
||||||
|
|
||||||
|
dprintf_info(file, "FILE_Write: %p %p %ld\n", ptr, lpBuffer,
|
||||||
|
nNumberOfChars);
|
||||||
|
|
||||||
|
*lpNumberOfChars = 0;
|
||||||
|
|
||||||
|
/* FIXME: there was a loop here before that
|
||||||
|
* retried writes after EAGAIN, why??? -- I assume
|
||||||
|
* it is because win32 doesn't have interrupted
|
||||||
|
* system calls
|
||||||
|
*/
|
||||||
|
|
||||||
|
for (;;)
|
||||||
|
{
|
||||||
|
result = write(file->unix_handle, lpBuffer, nNumberOfChars);
|
||||||
|
if (result != -1) {
|
||||||
|
*lpNumberOfChars = result;
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
if (errno != EINTR) {
|
||||||
|
FILE_SetDosError();
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* FILE_Destroy
|
* FILE_Destroy
|
||||||
*
|
*
|
||||||
|
@ -160,8 +229,7 @@ void FILE_SetDosError(void)
|
||||||
{
|
{
|
||||||
int save_errno = errno; /* errno gets overwritten by printf */
|
int save_errno = errno; /* errno gets overwritten by printf */
|
||||||
|
|
||||||
dprintf_file(stddeb, "FILE_SetDosError: errno = %d %s\n", errno,
|
dprintf_info(file, "FILE_SetDosError: errno = %d %s\n", errno, strerror(errno));
|
||||||
strerror(errno) );
|
|
||||||
switch (save_errno)
|
switch (save_errno)
|
||||||
{
|
{
|
||||||
case EAGAIN:
|
case EAGAIN:
|
||||||
|
@ -235,7 +303,7 @@ HFILE32 FILE_DupUnixHandle( int fd )
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* FILE_OpenUnixFile
|
* FILE_OpenUnixFile
|
||||||
*/
|
*/
|
||||||
static HFILE32 FILE_OpenUnixFile( const char *name, int mode )
|
HFILE32 FILE_OpenUnixFile( const char *name, int mode )
|
||||||
{
|
{
|
||||||
HFILE32 handle;
|
HFILE32 handle;
|
||||||
FILE_OBJECT *file;
|
FILE_OBJECT *file;
|
||||||
|
@ -277,19 +345,24 @@ HFILE32 FILE_Open( LPCSTR path, INT32 mode )
|
||||||
DOS_FULL_NAME full_name;
|
DOS_FULL_NAME full_name;
|
||||||
const char *unixName;
|
const char *unixName;
|
||||||
|
|
||||||
dprintf_file(stddeb, "FILE_Open: '%s' %04x\n", path, mode );
|
dprintf_info(file, "FILE_Open: '%s' %04x\n", path, mode );
|
||||||
|
|
||||||
if (!path) return HFILE_ERROR32;
|
if (!path) return HFILE_ERROR32;
|
||||||
|
|
||||||
if ((unixName = DOSFS_IsDevice( path )) != NULL)
|
if (DOSFS_IsDevice( path ))
|
||||||
{
|
{
|
||||||
dprintf_file( stddeb, "FILE_Open: opening device '%s'\n", unixName );
|
HFILE32 ret;
|
||||||
if (!unixName[0]) /* Non-existing device */
|
|
||||||
{
|
dprintf_info(file, "FILE_Open: opening device '%s'\n", path );
|
||||||
dprintf_file(stddeb, "FILE_Open: Non-existing device\n");
|
|
||||||
|
if (HFILE_ERROR32!=(ret=DOSFS_OpenDevice( path, mode )))
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
/* Do not silence this please. It is a critical error. -MM */
|
||||||
|
fprintf(stderr, "FILE_Open: Couldn't open device '%s'!\n",path);
|
||||||
DOS_ERROR( ER_FileNotFound, EC_NotFound, SA_Abort, EL_Disk );
|
DOS_ERROR( ER_FileNotFound, EC_NotFound, SA_Abort, EL_Disk );
|
||||||
return HFILE_ERROR32;
|
return HFILE_ERROR32;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else /* check for filename, don't check for last entry if creating */
|
else /* check for filename, don't check for last entry if creating */
|
||||||
{
|
{
|
||||||
|
@ -308,16 +381,15 @@ static HFILE32 FILE_Create( LPCSTR path, int mode, int unique )
|
||||||
{
|
{
|
||||||
HFILE32 handle;
|
HFILE32 handle;
|
||||||
FILE_OBJECT *file;
|
FILE_OBJECT *file;
|
||||||
const char *unixName;
|
|
||||||
DOS_FULL_NAME full_name;
|
DOS_FULL_NAME full_name;
|
||||||
|
|
||||||
dprintf_file(stddeb, "FILE_Create: '%s' %04x %d\n", path, mode, unique );
|
dprintf_info(file, "FILE_Create: '%s' %04x %d\n", path, mode, unique );
|
||||||
|
|
||||||
if (!path) return INVALID_HANDLE_VALUE32;
|
if (!path) return INVALID_HANDLE_VALUE32;
|
||||||
|
|
||||||
if ((unixName = DOSFS_IsDevice( path )) != NULL)
|
if (DOSFS_IsDevice( path ))
|
||||||
{
|
{
|
||||||
dprintf_file(stddeb, "FILE_Create: creating device '%s'!\n", unixName);
|
fprintf(stderr, "FILE_Create: cannot create DOS device '%s'!\n", path);
|
||||||
DOS_ERROR( ER_AccessDenied, EC_NotFound, SA_Abort, EL_Disk );
|
DOS_ERROR( ER_AccessDenied, EC_NotFound, SA_Abort, EL_Disk );
|
||||||
return INVALID_HANDLE_VALUE32;
|
return INVALID_HANDLE_VALUE32;
|
||||||
}
|
}
|
||||||
|
@ -510,11 +582,11 @@ HFILE32 FILE_Dup( HFILE32 hFile )
|
||||||
FILE_OBJECT *file;
|
FILE_OBJECT *file;
|
||||||
HFILE32 handle;
|
HFILE32 handle;
|
||||||
|
|
||||||
dprintf_file( stddeb, "FILE_Dup for handle %d\n", hFile );
|
dprintf_info(file, "FILE_Dup for handle %d\n", hFile );
|
||||||
if (!(file = FILE_GetFile( hFile ))) return HFILE_ERROR32;
|
if (!(file = FILE_GetFile( hFile ))) return HFILE_ERROR32;
|
||||||
handle = HANDLE_Alloc( &file->header, FILE_ALL_ACCESS /*FIXME*/, FALSE );
|
handle = HANDLE_Alloc( &file->header, FILE_ALL_ACCESS /*FIXME*/, FALSE );
|
||||||
FILE_ReleaseFile( file );
|
FILE_ReleaseFile( file );
|
||||||
dprintf_file( stddeb, "FILE_Dup return handle %d\n", handle );
|
dprintf_info(file, "FILE_Dup return handle %d\n", handle );
|
||||||
return handle;
|
return handle;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -528,7 +600,7 @@ HFILE32 FILE_Dup2( HFILE32 hFile1, HFILE32 hFile2 )
|
||||||
{
|
{
|
||||||
FILE_OBJECT *file;
|
FILE_OBJECT *file;
|
||||||
|
|
||||||
dprintf_file( stddeb, "FILE_Dup2 for handle %d\n", hFile1 );
|
dprintf_info(file, "FILE_Dup2 for handle %d\n", hFile1 );
|
||||||
/* FIXME: should use DuplicateHandle */
|
/* FIXME: should use DuplicateHandle */
|
||||||
if (!(file = FILE_GetFile( hFile1 ))) return HFILE_ERROR32;
|
if (!(file = FILE_GetFile( hFile1 ))) return HFILE_ERROR32;
|
||||||
if (!HANDLE_SetObjPtr( hFile2, &file->header, 0 )) hFile2 = HFILE_ERROR32;
|
if (!HANDLE_SetObjPtr( hFile2, &file->header, 0 )) hFile2 = HFILE_ERROR32;
|
||||||
|
@ -600,7 +672,7 @@ UINT32 WINAPI GetTempFileName32A( LPCSTR path, LPCSTR prefix, UINT32 unique,
|
||||||
HFILE32 handle = FILE_Create( buffer, 0666, TRUE );
|
HFILE32 handle = FILE_Create( buffer, 0666, TRUE );
|
||||||
if (handle != INVALID_HANDLE_VALUE32)
|
if (handle != INVALID_HANDLE_VALUE32)
|
||||||
{ /* We created it */
|
{ /* We created it */
|
||||||
dprintf_file( stddeb, "GetTempFileName32A: created %s\n",
|
dprintf_info(file, "GetTempFileName32A: created %s\n",
|
||||||
buffer);
|
buffer);
|
||||||
CloseHandle( handle );
|
CloseHandle( handle );
|
||||||
break;
|
break;
|
||||||
|
@ -624,7 +696,7 @@ UINT32 WINAPI GetTempFileName32A( LPCSTR path, LPCSTR prefix, UINT32 unique,
|
||||||
"Please check your configuration file if this generates a failure.\n",
|
"Please check your configuration file if this generates a failure.\n",
|
||||||
buffer);
|
buffer);
|
||||||
}
|
}
|
||||||
dprintf_file( stddeb, "GetTempFileName32A: returning %s\n", buffer );
|
dprintf_info(file, "GetTempFileName32A: returning %s\n", buffer );
|
||||||
return unique ? unique : num;
|
return unique ? unique : num;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -678,7 +750,7 @@ static HFILE32 FILE_DoOpenFile( LPCSTR name, OFSTRUCT *ofs, UINT32 mode,
|
||||||
return HFILE_ERROR32;
|
return HFILE_ERROR32;
|
||||||
}
|
}
|
||||||
|
|
||||||
dprintf_file( stddeb, "OpenFile: %s %04x\n", name, mode );
|
dprintf_info(file, "OpenFile: %s %04x\n", name, mode );
|
||||||
|
|
||||||
/* the watcom 10.6 IDE relies on a valid path returned in ofs->szPathName
|
/* the watcom 10.6 IDE relies on a valid path returned in ofs->szPathName
|
||||||
Are there any cases where getting the path here is wrong?
|
Are there any cases where getting the path here is wrong?
|
||||||
|
@ -692,7 +764,7 @@ static HFILE32 FILE_DoOpenFile( LPCSTR name, OFSTRUCT *ofs, UINT32 mode,
|
||||||
{
|
{
|
||||||
ofs->fFixedDisk = (GetDriveType16( ofs->szPathName[0]-'A' )
|
ofs->fFixedDisk = (GetDriveType16( ofs->szPathName[0]-'A' )
|
||||||
!= DRIVE_REMOVABLE);
|
!= DRIVE_REMOVABLE);
|
||||||
dprintf_file( stddeb, "OpenFile(%s): OF_PARSE, res = '%s'\n",
|
dprintf_info(file, "OpenFile(%s): OF_PARSE, res = '%s'\n",
|
||||||
name, ofs->szPathName );
|
name, ofs->szPathName );
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -725,7 +797,7 @@ static HFILE32 FILE_DoOpenFile( LPCSTR name, OFSTRUCT *ofs, UINT32 mode,
|
||||||
if (!DIR_SearchPath( NULL, name, NULL, &full_name, win32 )) goto not_found;
|
if (!DIR_SearchPath( NULL, name, NULL, &full_name, win32 )) goto not_found;
|
||||||
|
|
||||||
found:
|
found:
|
||||||
dprintf_file( stddeb, "OpenFile: found %s = %s\n",
|
dprintf_info(file, "OpenFile: found %s = %s\n",
|
||||||
full_name.long_name, full_name.short_name );
|
full_name.long_name, full_name.short_name );
|
||||||
lstrcpyn32A( ofs->szPathName, full_name.short_name,
|
lstrcpyn32A( ofs->szPathName, full_name.short_name,
|
||||||
sizeof(ofs->szPathName) );
|
sizeof(ofs->szPathName) );
|
||||||
|
@ -733,7 +805,7 @@ found:
|
||||||
if (mode & OF_DELETE)
|
if (mode & OF_DELETE)
|
||||||
{
|
{
|
||||||
if (unlink( full_name.long_name ) == -1) goto not_found;
|
if (unlink( full_name.long_name ) == -1) goto not_found;
|
||||||
dprintf_file( stddeb, "OpenFile(%s): OF_DELETE return = OK\n", name);
|
dprintf_info(file, "OpenFile(%s): OF_DELETE return = OK\n", name);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -757,7 +829,7 @@ found:
|
||||||
if (memcmp( ofs->reserved, filedatetime, sizeof(ofs->reserved) ))
|
if (memcmp( ofs->reserved, filedatetime, sizeof(ofs->reserved) ))
|
||||||
{
|
{
|
||||||
CloseHandle( hFileRet );
|
CloseHandle( hFileRet );
|
||||||
dprintf_file( stddeb, "OpenFile(%s): OF_VERIFY failed\n", name );
|
dprintf_warn(file, "OpenFile(%s): OF_VERIFY failed\n", name );
|
||||||
/* FIXME: what error here? */
|
/* FIXME: what error here? */
|
||||||
DOS_ERROR( ER_FileNotFound, EC_NotFound, SA_Abort, EL_Disk );
|
DOS_ERROR( ER_FileNotFound, EC_NotFound, SA_Abort, EL_Disk );
|
||||||
goto error;
|
goto error;
|
||||||
|
@ -766,19 +838,19 @@ found:
|
||||||
memcpy( ofs->reserved, filedatetime, sizeof(ofs->reserved) );
|
memcpy( ofs->reserved, filedatetime, sizeof(ofs->reserved) );
|
||||||
|
|
||||||
success: /* We get here if the open was successful */
|
success: /* We get here if the open was successful */
|
||||||
dprintf_file( stddeb, "OpenFile(%s): OK, return = %d\n", name, hFileRet );
|
dprintf_info(file, "OpenFile(%s): OK, return = %d\n", name, hFileRet );
|
||||||
if (mode & OF_EXIST) /* Return the handle, but close it first */
|
if (mode & OF_EXIST) /* Return the handle, but close it first */
|
||||||
CloseHandle( hFileRet );
|
CloseHandle( hFileRet );
|
||||||
return hFileRet;
|
return hFileRet;
|
||||||
|
|
||||||
not_found: /* We get here if the file does not exist */
|
not_found: /* We get here if the file does not exist */
|
||||||
dprintf_file( stddeb, "OpenFile: '%s' not found\n", name );
|
dprintf_warn(file, "OpenFile: '%s' not found\n", name );
|
||||||
DOS_ERROR( ER_FileNotFound, EC_NotFound, SA_Abort, EL_Disk );
|
DOS_ERROR( ER_FileNotFound, EC_NotFound, SA_Abort, EL_Disk );
|
||||||
/* fall through */
|
/* fall through */
|
||||||
|
|
||||||
error: /* We get here if there was an error opening the file */
|
error: /* We get here if there was an error opening the file */
|
||||||
ofs->nErrCode = DOS_ExtendedError;
|
ofs->nErrCode = DOS_ExtendedError;
|
||||||
dprintf_file( stddeb, "OpenFile(%s): return = HFILE_ERROR error= %d\n",
|
dprintf_warn(file, "OpenFile(%s): return = HFILE_ERROR error= %d\n",
|
||||||
name,ofs->nErrCode );
|
name,ofs->nErrCode );
|
||||||
return HFILE_ERROR32;
|
return HFILE_ERROR32;
|
||||||
}
|
}
|
||||||
|
@ -807,7 +879,7 @@ HFILE32 WINAPI OpenFile32( LPCSTR name, OFSTRUCT *ofs, UINT32 mode )
|
||||||
*/
|
*/
|
||||||
HFILE16 WINAPI _lclose16( HFILE16 hFile )
|
HFILE16 WINAPI _lclose16( HFILE16 hFile )
|
||||||
{
|
{
|
||||||
dprintf_file( stddeb, "_lclose16: handle %d\n", hFile );
|
dprintf_info(file, "_lclose16: handle %d\n", hFile );
|
||||||
return CloseHandle( hFile ) ? 0 : HFILE_ERROR16;
|
return CloseHandle( hFile ) ? 0 : HFILE_ERROR16;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -817,7 +889,7 @@ HFILE16 WINAPI _lclose16( HFILE16 hFile )
|
||||||
*/
|
*/
|
||||||
HFILE32 WINAPI _lclose32( HFILE32 hFile )
|
HFILE32 WINAPI _lclose32( HFILE32 hFile )
|
||||||
{
|
{
|
||||||
dprintf_file( stddeb, "_lclose32: handle %d\n", hFile );
|
dprintf_info(file, "_lclose32: handle %d\n", hFile );
|
||||||
return CloseHandle( hFile ) ? 0 : HFILE_ERROR32;
|
return CloseHandle( hFile ) ? 0 : HFILE_ERROR32;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -829,7 +901,7 @@ LONG WINAPI WIN16_hread( HFILE16 hFile, SEGPTR buffer, LONG count )
|
||||||
{
|
{
|
||||||
LONG maxlen;
|
LONG maxlen;
|
||||||
|
|
||||||
dprintf_file( stddeb, "WIN16_hread: %d %08lx %ld\n",
|
dprintf_info(file, "WIN16_hread: %d %08lx %ld\n",
|
||||||
hFile, (DWORD)buffer, count );
|
hFile, (DWORD)buffer, count );
|
||||||
|
|
||||||
/* Some programs pass a count larger than the allocated buffer */
|
/* Some programs pass a count larger than the allocated buffer */
|
||||||
|
@ -851,18 +923,19 @@ UINT16 WINAPI WIN16_lread( HFILE16 hFile, SEGPTR buffer, UINT16 count )
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* _lread32 (KERNEL32.596)
|
* _lread32 (KERNEL32.596)
|
||||||
*/
|
*/
|
||||||
UINT32 WINAPI _lread32( HFILE32 hFile, LPVOID buffer, UINT32 count )
|
UINT32 WINAPI _lread32( HFILE32 handle, LPVOID buffer, UINT32 count )
|
||||||
{
|
{
|
||||||
FILE_OBJECT *file;
|
K32OBJ *ptr;
|
||||||
UINT32 result;
|
DWORD numWritten;
|
||||||
|
BOOL32 result = FALSE;
|
||||||
|
|
||||||
dprintf_file( stddeb, "_lread32: %d %p %d\n", hFile, buffer, count );
|
dprintf_info( file, "_lread32: %d %p %d\n", handle, buffer, count);
|
||||||
if (!(file = FILE_GetFile( hFile ))) return -1;
|
if (!(ptr = HANDLE_GetObjPtr( handle, K32OBJ_UNKNOWN, 0))) return -1;
|
||||||
if (!count) result = 0;
|
if (K32OBJ_OPS(ptr)->read)
|
||||||
else if ((result = read( file->unix_handle, buffer, count )) == -1)
|
result = K32OBJ_OPS(ptr)->read(ptr, buffer, count, &numWritten, NULL);
|
||||||
FILE_SetDosError();
|
K32OBJ_DecCount( ptr );
|
||||||
FILE_ReleaseFile( file );
|
if (!result) return -1;
|
||||||
return result;
|
return (UINT32)numWritten;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -881,7 +954,7 @@ UINT16 WINAPI _lread16( HFILE16 hFile, LPVOID buffer, UINT16 count )
|
||||||
HFILE16 WINAPI _lcreat16( LPCSTR path, INT16 attr )
|
HFILE16 WINAPI _lcreat16( LPCSTR path, INT16 attr )
|
||||||
{
|
{
|
||||||
int mode = (attr & 1) ? 0444 : 0666;
|
int mode = (attr & 1) ? 0444 : 0666;
|
||||||
dprintf_file( stddeb, "_lcreat16: %s %02x\n", path, attr );
|
dprintf_info(file, "_lcreat16: %s %02x\n", path, attr );
|
||||||
return (HFILE16)FILE_Create( path, mode, FALSE );
|
return (HFILE16)FILE_Create( path, mode, FALSE );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -892,7 +965,7 @@ HFILE16 WINAPI _lcreat16( LPCSTR path, INT16 attr )
|
||||||
HFILE32 WINAPI _lcreat32( LPCSTR path, INT32 attr )
|
HFILE32 WINAPI _lcreat32( LPCSTR path, INT32 attr )
|
||||||
{
|
{
|
||||||
int mode = (attr & 1) ? 0444 : 0666;
|
int mode = (attr & 1) ? 0444 : 0666;
|
||||||
dprintf_file( stddeb, "_lcreat32: %s %02x\n", path, attr );
|
dprintf_info(file, "_lcreat32: %s %02x\n", path, attr );
|
||||||
return FILE_Create( path, mode, FALSE );
|
return FILE_Create( path, mode, FALSE );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -903,7 +976,7 @@ HFILE32 WINAPI _lcreat32( LPCSTR path, INT32 attr )
|
||||||
HFILE32 _lcreat_uniq( LPCSTR path, INT32 attr )
|
HFILE32 _lcreat_uniq( LPCSTR path, INT32 attr )
|
||||||
{
|
{
|
||||||
int mode = (attr & 1) ? 0444 : 0666;
|
int mode = (attr & 1) ? 0444 : 0666;
|
||||||
dprintf_file( stddeb, "_lcreat_uniq: %s %02x\n", path, attr );
|
dprintf_info(file, "_lcreat_uniq: %s %02x\n", path, attr );
|
||||||
return FILE_Create( path, mode, TRUE );
|
return FILE_Create( path, mode, TRUE );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -923,7 +996,7 @@ DWORD WINAPI SetFilePointer( HFILE32 hFile, LONG distance, LONG *highword,
|
||||||
SetLastError( ERROR_INVALID_PARAMETER );
|
SetLastError( ERROR_INVALID_PARAMETER );
|
||||||
return 0xffffffff;
|
return 0xffffffff;
|
||||||
}
|
}
|
||||||
dprintf_file( stddeb, "SetFilePointer: handle %d offset %ld origin %ld\n",
|
dprintf_info(file, "SetFilePointer: handle %d offset %ld origin %ld\n",
|
||||||
hFile, distance, method );
|
hFile, distance, method );
|
||||||
|
|
||||||
if (!(file = FILE_GetFile( hFile ))) return 0xffffffff;
|
if (!(file = FILE_GetFile( hFile ))) return 0xffffffff;
|
||||||
|
@ -975,7 +1048,7 @@ HFILE32 WINAPI _lopen32( LPCSTR path, INT32 mode )
|
||||||
{
|
{
|
||||||
INT32 unixMode;
|
INT32 unixMode;
|
||||||
|
|
||||||
dprintf_file(stddeb, "_lopen32('%s',%04x)\n", path, mode );
|
dprintf_info(file, "_lopen32('%s',%04x)\n", path, mode );
|
||||||
|
|
||||||
switch(mode & 3)
|
switch(mode & 3)
|
||||||
{
|
{
|
||||||
|
@ -1040,30 +1113,42 @@ LONG WINAPI _hwrite16( HFILE16 hFile, LPCSTR buffer, LONG count )
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* _hwrite32 (KERNEL32.591)
|
* _hwrite32 (KERNEL32.591)
|
||||||
|
*
|
||||||
|
* experimenation yields that _lwrite:
|
||||||
|
* o truncates the file at the current position with
|
||||||
|
* a 0 len write
|
||||||
|
* o returns 0 on a 0 length write
|
||||||
|
* o works with console handles
|
||||||
|
*
|
||||||
*/
|
*/
|
||||||
LONG WINAPI _hwrite32( HFILE32 hFile, LPCSTR buffer, LONG count )
|
LONG WINAPI _hwrite32( HFILE32 handle, LPCSTR buffer, LONG count )
|
||||||
{
|
{
|
||||||
FILE_OBJECT *file;
|
K32OBJ *ioptr;
|
||||||
LONG result;
|
DWORD result;
|
||||||
|
BOOL32 status = FALSE;
|
||||||
|
|
||||||
dprintf_file( stddeb, "_hwrite32: %d %p %ld\n", hFile, buffer, count );
|
dprintf_info(file, "_hwrite32: %d %p %ld\n", handle, buffer, count );
|
||||||
|
|
||||||
if (!(file = FILE_GetFile( hFile ))) return HFILE_ERROR32;
|
if (count == 0) { /* Expand or truncate at current position */
|
||||||
if (count == 0) /* Expand or truncate at current position */
|
FILE_OBJECT *file = FILE_GetFile(handle);
|
||||||
result = ftruncate( file->unix_handle,
|
|
||||||
lseek( file->unix_handle, 0, SEEK_CUR ) );
|
if ( ftruncate(file->unix_handle,
|
||||||
else for (;;)
|
lseek( file->unix_handle, 0, SEEK_CUR)) == 0 ) {
|
||||||
{
|
FILE_ReleaseFile(file);
|
||||||
result = write( file->unix_handle, buffer, count );
|
return 0;
|
||||||
if (result != -1) break;
|
} else {
|
||||||
if (errno != EINTR)
|
|
||||||
{
|
|
||||||
FILE_SetDosError();
|
FILE_SetDosError();
|
||||||
break;
|
FILE_ReleaseFile(file);
|
||||||
|
return HFILE_ERROR32;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
FILE_ReleaseFile( file );
|
if (!(ioptr = HANDLE_GetObjPtr( handle, K32OBJ_UNKNOWN, 0 )))
|
||||||
|
return HFILE_ERROR32;
|
||||||
|
if (K32OBJ_OPS(ioptr)->write)
|
||||||
|
status = K32OBJ_OPS(ioptr)->write(ioptr, buffer, count, &result, NULL);
|
||||||
|
K32OBJ_DecCount( ioptr );
|
||||||
|
if (!status) result = HFILE_ERROR32;
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1077,7 +1162,7 @@ UINT16 WINAPI SetHandleCount16( UINT16 count )
|
||||||
PDB *pdb = (PDB *)GlobalLock16( hPDB );
|
PDB *pdb = (PDB *)GlobalLock16( hPDB );
|
||||||
BYTE *files = PTR_SEG_TO_LIN( pdb->fileHandlesPtr );
|
BYTE *files = PTR_SEG_TO_LIN( pdb->fileHandlesPtr );
|
||||||
|
|
||||||
dprintf_file( stddeb, "SetHandleCount16(%d)\n", count );
|
dprintf_info(file, "SetHandleCount16(%d)\n", count );
|
||||||
|
|
||||||
if (count < 20) count = 20; /* No point in going below 20 */
|
if (count < 20) count = 20; /* No point in going below 20 */
|
||||||
else if (count > 254) count = 254;
|
else if (count > 254) count = 254;
|
||||||
|
@ -1137,7 +1222,7 @@ BOOL32 WINAPI FlushFileBuffers( HFILE32 hFile )
|
||||||
FILE_OBJECT *file;
|
FILE_OBJECT *file;
|
||||||
BOOL32 ret;
|
BOOL32 ret;
|
||||||
|
|
||||||
dprintf_file( stddeb, "FlushFileBuffers(%d)\n", hFile );
|
dprintf_info(file, "FlushFileBuffers(%d)\n", hFile );
|
||||||
if (!(file = FILE_GetFile( hFile ))) return FALSE;
|
if (!(file = FILE_GetFile( hFile ))) return FALSE;
|
||||||
if (fsync( file->unix_handle ) != -1) ret = TRUE;
|
if (fsync( file->unix_handle ) != -1) ret = TRUE;
|
||||||
else
|
else
|
||||||
|
@ -1158,7 +1243,7 @@ BOOL32 WINAPI SetEndOfFile( HFILE32 hFile )
|
||||||
FILE_OBJECT *file;
|
FILE_OBJECT *file;
|
||||||
BOOL32 ret = TRUE;
|
BOOL32 ret = TRUE;
|
||||||
|
|
||||||
dprintf_file( stddeb, "SetEndOfFile(%d)\n", hFile );
|
dprintf_info(file, "SetEndOfFile(%d)\n", hFile );
|
||||||
if (!(file = FILE_GetFile( hFile ))) return FALSE;
|
if (!(file = FILE_GetFile( hFile ))) return FALSE;
|
||||||
if (ftruncate( file->unix_handle,
|
if (ftruncate( file->unix_handle,
|
||||||
lseek( file->unix_handle, 0, SEEK_CUR ) ))
|
lseek( file->unix_handle, 0, SEEK_CUR ) ))
|
||||||
|
@ -1186,13 +1271,12 @@ BOOL16 WINAPI DeleteFile16( LPCSTR path )
|
||||||
BOOL32 WINAPI DeleteFile32A( LPCSTR path )
|
BOOL32 WINAPI DeleteFile32A( LPCSTR path )
|
||||||
{
|
{
|
||||||
DOS_FULL_NAME full_name;
|
DOS_FULL_NAME full_name;
|
||||||
const char *unixName;
|
|
||||||
|
|
||||||
dprintf_file(stddeb, "DeleteFile: '%s'\n", path );
|
dprintf_info(file, "DeleteFile: '%s'\n", path );
|
||||||
|
|
||||||
if ((unixName = DOSFS_IsDevice( path )) != NULL)
|
if (DOSFS_IsDevice( path ))
|
||||||
{
|
{
|
||||||
dprintf_file(stddeb, "DeleteFile: removing device '%s'!\n", unixName);
|
fprintf(stderr, "DeleteFile: cannot remove DOS device '%s'!\n", path);
|
||||||
DOS_ERROR( ER_FileNotFound, EC_NotFound, SA_Abort, EL_Disk );
|
DOS_ERROR( ER_FileNotFound, EC_NotFound, SA_Abort, EL_Disk );
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
@ -1361,7 +1445,7 @@ BOOL32 WINAPI MoveFileEx32A( LPCSTR fn1, LPCSTR fn2, DWORD flag )
|
||||||
DOS_FULL_NAME full_name1, full_name2;
|
DOS_FULL_NAME full_name1, full_name2;
|
||||||
int mode=0; /* mode == 1: use copy */
|
int mode=0; /* mode == 1: use copy */
|
||||||
|
|
||||||
dprintf_file( stddeb, "MoveFileEx32A(%s,%s,%04lx)\n", fn1, fn2, flag);
|
dprintf_info(file, "MoveFileEx32A(%s,%s,%04lx)\n", fn1, fn2, flag);
|
||||||
|
|
||||||
if (!DOSFS_GetFullName( fn1, TRUE, &full_name1 )) return FALSE;
|
if (!DOSFS_GetFullName( fn1, TRUE, &full_name1 )) return FALSE;
|
||||||
if (fn2) { /* !fn2 means delete fn1 */
|
if (fn2) { /* !fn2 means delete fn1 */
|
||||||
|
@ -1461,7 +1545,7 @@ BOOL32 WINAPI MoveFile32A( LPCSTR fn1, LPCSTR fn2 )
|
||||||
DOS_FULL_NAME full_name1, full_name2;
|
DOS_FULL_NAME full_name1, full_name2;
|
||||||
struct stat fstat;
|
struct stat fstat;
|
||||||
|
|
||||||
dprintf_file( stddeb, "MoveFile32A(%s,%s)\n", fn1, fn2 );
|
dprintf_info(file, "MoveFile32A(%s,%s)\n", fn1, fn2 );
|
||||||
|
|
||||||
if (!DOSFS_GetFullName( fn1, TRUE, &full_name1 )) return FALSE;
|
if (!DOSFS_GetFullName( fn1, TRUE, &full_name1 )) return FALSE;
|
||||||
if (DOSFS_GetFullName( fn2, TRUE, &full_name2 ))
|
if (DOSFS_GetFullName( fn2, TRUE, &full_name2 ))
|
||||||
|
@ -1479,7 +1563,7 @@ BOOL32 WINAPI MoveFile32A( LPCSTR fn1, LPCSTR fn2 )
|
||||||
else /*copy */ {
|
else /*copy */ {
|
||||||
if (stat( full_name1.long_name, &fstat ))
|
if (stat( full_name1.long_name, &fstat ))
|
||||||
{
|
{
|
||||||
dprintf_file( stddeb, "Invalid source file %s\n",
|
dprintf_warn(file, "Invalid source file %s\n",
|
||||||
full_name1.long_name);
|
full_name1.long_name);
|
||||||
FILE_SetDosError();
|
FILE_SetDosError();
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
@ -1580,7 +1664,7 @@ BOOL32 WINAPI SetFileTime( HFILE32 hFile,
|
||||||
struct utimbuf utimbuf;
|
struct utimbuf utimbuf;
|
||||||
|
|
||||||
if (!file) return FILE_TYPE_UNKNOWN; /* FIXME: correct? */
|
if (!file) return FILE_TYPE_UNKNOWN; /* FIXME: correct? */
|
||||||
dprintf_file(stddeb,"SetFileTime(%s,%p,%p,%p)\n",
|
dprintf_info(file,"SetFileTime(%s,%p,%p,%p)\n",
|
||||||
file->unix_name,
|
file->unix_name,
|
||||||
lpCreationTime,
|
lpCreationTime,
|
||||||
lpLastAccessTime,
|
lpLastAccessTime,
|
||||||
|
@ -1697,12 +1781,12 @@ BOOL32 WINAPI LockFile(
|
||||||
struct flock f;
|
struct flock f;
|
||||||
FILE_OBJECT *file;
|
FILE_OBJECT *file;
|
||||||
|
|
||||||
dprintf_file(stddeb, "LockFile32: handle %d offsetlow=%ld offsethigh=%ld nbyteslow=%ld nbyteshigh=%ld\n",
|
dprintf_info(file, "LockFile32: handle %d offsetlow=%ld offsethigh=%ld nbyteslow=%ld nbyteshigh=%ld\n",
|
||||||
hFile, dwFileOffsetLow, dwFileOffsetHigh,
|
hFile, dwFileOffsetLow, dwFileOffsetHigh,
|
||||||
nNumberOfBytesToLockLow, nNumberOfBytesToLockHigh);
|
nNumberOfBytesToLockLow, nNumberOfBytesToLockHigh);
|
||||||
|
|
||||||
if (dwFileOffsetHigh || nNumberOfBytesToLockHigh) {
|
if (dwFileOffsetHigh || nNumberOfBytesToLockHigh) {
|
||||||
dprintf_file(stddeb, "LockFile32: Unimplemented bytes > 32bits\n");
|
dprintf_fixme(file, "LockFile32: Unimplemented bytes > 32bits\n");
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1748,12 +1832,12 @@ BOOL32 WINAPI UnlockFile(
|
||||||
FILE_OBJECT *file;
|
FILE_OBJECT *file;
|
||||||
struct flock f;
|
struct flock f;
|
||||||
|
|
||||||
dprintf_file(stddeb, "UnlockFile32: handle %d offsetlow=%ld offsethigh=%ld nbyteslow=%ld nbyteshigh=%ld\n",
|
dprintf_info(file, "UnlockFile32: handle %d offsetlow=%ld offsethigh=%ld nbyteslow=%ld nbyteshigh=%ld\n",
|
||||||
hFile, dwFileOffsetLow, dwFileOffsetHigh,
|
hFile, dwFileOffsetLow, dwFileOffsetHigh,
|
||||||
nNumberOfBytesToUnlockLow, nNumberOfBytesToUnlockHigh);
|
nNumberOfBytesToUnlockLow, nNumberOfBytesToUnlockHigh);
|
||||||
|
|
||||||
if (dwFileOffsetHigh || nNumberOfBytesToUnlockHigh) {
|
if (dwFileOffsetHigh || nNumberOfBytesToUnlockHigh) {
|
||||||
dprintf_file(stddeb, "UnlockFile32: Unimplemented bytes > 32bits\n");
|
dprintf_warn(file, "UnlockFile32: Unimplemented bytes > 32bits\n");
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -13,7 +13,6 @@
|
||||||
#include "windows.h"
|
#include "windows.h"
|
||||||
#include "file.h"
|
#include "file.h"
|
||||||
#include "heap.h"
|
#include "heap.h"
|
||||||
#include "stddebug.h"
|
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
|
||||||
typedef struct tagPROFILEKEY
|
typedef struct tagPROFILEKEY
|
||||||
|
@ -216,11 +215,12 @@ static PROFILESECTION *PROFILE_Load( FILE *file )
|
||||||
*prev_key = key;
|
*prev_key = key;
|
||||||
prev_key = &key->next;
|
prev_key = &key->next;
|
||||||
}
|
}
|
||||||
if (debugging_profile)
|
if (debugging_info(profile))
|
||||||
{
|
{
|
||||||
fprintf( stddeb, "PROFILE_Load:\n" );
|
dprintf_info(profile, "PROFILE_Load:\n" );
|
||||||
PROFILE_Save( stddeb, first_section );
|
/* FIXME: improper use of stddeb! */
|
||||||
fprintf( stddeb, "PROFILE_Load finished.\n" );
|
PROFILE_Save(stddeb, first_section );
|
||||||
|
dprintf_info(profile, "PROFILE_Load finished.\n" );
|
||||||
}
|
}
|
||||||
return first_section;
|
return first_section;
|
||||||
}
|
}
|
||||||
|
@ -357,7 +357,7 @@ static BOOL32 PROFILE_FlushFile(void)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
dprintf_profile( stddeb, "Saving '%s' into '%s'\n",
|
dprintf_info(profile, "Saving '%s' into '%s'\n",
|
||||||
CurProfile.dos_name, unix_name );
|
CurProfile.dos_name, unix_name );
|
||||||
PROFILE_Save( file, CurProfile.section );
|
PROFILE_Save( file, CurProfile.section );
|
||||||
fclose( file );
|
fclose( file );
|
||||||
|
@ -380,7 +380,7 @@ static BOOL32 PROFILE_Open( LPCSTR filename )
|
||||||
|
|
||||||
if (CurProfile.filename && !strcmp( filename, CurProfile.filename ))
|
if (CurProfile.filename && !strcmp( filename, CurProfile.filename ))
|
||||||
{
|
{
|
||||||
dprintf_profile( stddeb, "PROFILE_Open(%s): already opened\n",
|
dprintf_info(profile, "PROFILE_Open(%s): already opened\n",
|
||||||
filename );
|
filename );
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
@ -400,7 +400,7 @@ static BOOL32 PROFILE_Open( LPCSTR filename )
|
||||||
if (CurProfile.dos_name &&
|
if (CurProfile.dos_name &&
|
||||||
!strcmp( full_name.short_name, CurProfile.dos_name ))
|
!strcmp( full_name.short_name, CurProfile.dos_name ))
|
||||||
{
|
{
|
||||||
dprintf_profile( stddeb, "PROFILE_Open(%s): already opened\n",
|
dprintf_info(profile, "PROFILE_Open(%s): already opened\n",
|
||||||
filename );
|
filename );
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
@ -429,7 +429,7 @@ static BOOL32 PROFILE_Open( LPCSTR filename )
|
||||||
CharLower32A( p );
|
CharLower32A( p );
|
||||||
if ((file = fopen( buffer, "r" )))
|
if ((file = fopen( buffer, "r" )))
|
||||||
{
|
{
|
||||||
dprintf_profile( stddeb, "PROFILE_Open(%s): found it in %s\n",
|
dprintf_info(profile, "PROFILE_Open(%s): found it in %s\n",
|
||||||
filename, buffer );
|
filename, buffer );
|
||||||
CurProfile.unix_name = HEAP_strdupA( SystemHeap, 0, buffer );
|
CurProfile.unix_name = HEAP_strdupA( SystemHeap, 0, buffer );
|
||||||
}
|
}
|
||||||
|
@ -440,7 +440,7 @@ static BOOL32 PROFILE_Open( LPCSTR filename )
|
||||||
CurProfile.unix_name = HEAP_strdupA( SystemHeap, 0,
|
CurProfile.unix_name = HEAP_strdupA( SystemHeap, 0,
|
||||||
full_name.long_name );
|
full_name.long_name );
|
||||||
if ((file = fopen( full_name.long_name, "r" )))
|
if ((file = fopen( full_name.long_name, "r" )))
|
||||||
dprintf_profile( stddeb, "PROFILE_Open(%s): found it in %s\n",
|
dprintf_info(profile, "PROFILE_Open(%s): found it in %s\n",
|
||||||
filename, full_name.long_name );
|
filename, full_name.long_name );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -506,7 +506,7 @@ static INT32 PROFILE_GetString( LPCSTR section, LPCSTR key_name,
|
||||||
key = PROFILE_Find( &CurProfile.section, section, key_name, FALSE );
|
key = PROFILE_Find( &CurProfile.section, section, key_name, FALSE );
|
||||||
PROFILE_CopyEntry( buffer, (key && key->value) ? key->value : def_val,
|
PROFILE_CopyEntry( buffer, (key && key->value) ? key->value : def_val,
|
||||||
len, FALSE );
|
len, FALSE );
|
||||||
dprintf_profile( stddeb, "PROFILE_GetString('%s','%s','%s'): returning '%s'\n",
|
dprintf_info(profile, "PROFILE_GetString('%s','%s','%s'): returning '%s'\n",
|
||||||
section, key_name, def_val, buffer );
|
section, key_name, def_val, buffer );
|
||||||
return strlen( buffer );
|
return strlen( buffer );
|
||||||
}
|
}
|
||||||
|
@ -524,7 +524,7 @@ static BOOL32 PROFILE_SetString( LPCSTR section_name, LPCSTR key_name,
|
||||||
{
|
{
|
||||||
if (!key_name) /* Delete a whole section */
|
if (!key_name) /* Delete a whole section */
|
||||||
{
|
{
|
||||||
dprintf_profile(stddeb, "PROFILE_DeleteSection('%s')\n", section_name);
|
dprintf_info(profile, "PROFILE_DeleteSection('%s')\n", section_name);
|
||||||
CurProfile.changed |= PROFILE_DeleteSection( &CurProfile.section,
|
CurProfile.changed |= PROFILE_DeleteSection( &CurProfile.section,
|
||||||
section_name );
|
section_name );
|
||||||
return TRUE; /* Even if PROFILE_DeleteSection() has failed,
|
return TRUE; /* Even if PROFILE_DeleteSection() has failed,
|
||||||
|
@ -532,7 +532,7 @@ static BOOL32 PROFILE_SetString( LPCSTR section_name, LPCSTR key_name,
|
||||||
}
|
}
|
||||||
else if (!value) /* Delete a key */
|
else if (!value) /* Delete a key */
|
||||||
{
|
{
|
||||||
dprintf_profile( stddeb, "PROFILE_DeleteKey('%s','%s')\n",
|
dprintf_info(profile, "PROFILE_DeleteKey('%s','%s')\n",
|
||||||
section_name, key_name );
|
section_name, key_name );
|
||||||
CurProfile.changed |= PROFILE_DeleteKey( &CurProfile.section,
|
CurProfile.changed |= PROFILE_DeleteKey( &CurProfile.section,
|
||||||
section_name, key_name );
|
section_name, key_name );
|
||||||
|
@ -542,20 +542,20 @@ static BOOL32 PROFILE_SetString( LPCSTR section_name, LPCSTR key_name,
|
||||||
{
|
{
|
||||||
PROFILEKEY *key = PROFILE_Find( &CurProfile.section, section_name,
|
PROFILEKEY *key = PROFILE_Find( &CurProfile.section, section_name,
|
||||||
key_name, TRUE );
|
key_name, TRUE );
|
||||||
dprintf_profile( stddeb, "PROFILE_SetString('%s','%s','%s'): ",
|
dprintf_info(profile, "PROFILE_SetString('%s','%s','%s'): \n",
|
||||||
section_name, key_name, value );
|
section_name, key_name, value );
|
||||||
if (!key) return FALSE;
|
if (!key) return FALSE;
|
||||||
if (key->value)
|
if (key->value)
|
||||||
{
|
{
|
||||||
if (!strcmp( key->value, value ))
|
if (!strcmp( key->value, value ))
|
||||||
{
|
{
|
||||||
dprintf_profile( stddeb, "no change needed\n" );
|
dprintf_info(profile, " no change needed\n" );
|
||||||
return TRUE; /* No change needed */
|
return TRUE; /* No change needed */
|
||||||
}
|
}
|
||||||
dprintf_profile( stddeb, "replacing '%s'\n", key->value );
|
dprintf_info(profile, " replacing '%s'\n", key->value );
|
||||||
HeapFree( SystemHeap, 0, key->value );
|
HeapFree( SystemHeap, 0, key->value );
|
||||||
}
|
}
|
||||||
else dprintf_profile( stddeb, "creating key\n" );
|
else dprintf_info(profile, " creating key\n" );
|
||||||
key->value = HEAP_strdupA( SystemHeap, 0, value );
|
key->value = HEAP_strdupA( SystemHeap, 0, value );
|
||||||
CurProfile.changed = TRUE;
|
CurProfile.changed = TRUE;
|
||||||
}
|
}
|
||||||
|
@ -576,7 +576,7 @@ int PROFILE_GetWineIniString( const char *section, const char *key_name,
|
||||||
PROFILEKEY *key = PROFILE_Find(&WineProfile, section, key_name, FALSE);
|
PROFILEKEY *key = PROFILE_Find(&WineProfile, section, key_name, FALSE);
|
||||||
PROFILE_CopyEntry( buffer, (key && key->value) ? key->value : def,
|
PROFILE_CopyEntry( buffer, (key && key->value) ? key->value : def,
|
||||||
len, TRUE );
|
len, TRUE );
|
||||||
dprintf_profile( stddeb, "PROFILE_GetWineIniString('%s','%s','%s'): returning '%s'\n",
|
dprintf_info(profile, "PROFILE_GetWineIniString('%s','%s','%s'): returning '%s'\n",
|
||||||
section, key_name, def, buffer );
|
section, key_name, def, buffer );
|
||||||
return strlen( buffer );
|
return strlen( buffer );
|
||||||
}
|
}
|
||||||
|
@ -707,7 +707,7 @@ int PROFILE_GetWineIniBool(
|
||||||
retval = def;
|
retval = def;
|
||||||
}
|
}
|
||||||
|
|
||||||
dprintf_profile(stddeb, "PROFILE_GetWineIniBool(\"%s\", \"%s\", %s), "
|
dprintf_info(profile, "PROFILE_GetWineIniBool(\"%s\", \"%s\", %s), "
|
||||||
"[%c], ret %s.\n", section, key_name,
|
"[%c], ret %s.\n", section, key_name,
|
||||||
def ? "TRUE" : "FALSE", key_value[0],
|
def ? "TRUE" : "FALSE", key_value[0],
|
||||||
retval ? "TRUE" : "FALSE");
|
retval ? "TRUE" : "FALSE");
|
||||||
|
@ -1031,11 +1031,11 @@ BOOL32 WINAPI WritePrivateProfileSection32A( LPCSTR section,
|
||||||
{
|
{
|
||||||
char *p =(char*)string;
|
char *p =(char*)string;
|
||||||
|
|
||||||
fprintf( stdnimp,"WritePrivateProfileSection32A empty stup\n");
|
dprintf_fixme(profile, "WritePrivateProfileSection32A empty stup\n");
|
||||||
if (debugging_profile) {
|
if (debugging_info(profile)) {
|
||||||
fprintf(stddeb,"file(%s) => [%s]\n", filename,section);
|
dprintf_info(profile, "file(%s) => [%s]\n", filename, section);
|
||||||
while (*(p+1)) {
|
while (*(p+1)) {
|
||||||
fprintf(stddeb,"%s\n",p);
|
dprintf_info(profile, "%s\n", p);
|
||||||
p += strlen(p);
|
p += strlen(p);
|
||||||
p += 1;
|
p += 1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,7 +5,6 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "dc.h"
|
#include "dc.h"
|
||||||
#include "stddebug.h"
|
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
|
||||||
|
|
||||||
|
@ -18,7 +17,7 @@ BOOL16 WINAPI PatBlt16( HDC16 hdc, INT16 left, INT16 top,
|
||||||
DC * dc = DC_GetDCPtr( hdc );
|
DC * dc = DC_GetDCPtr( hdc );
|
||||||
if (!dc || !dc->funcs->pPatBlt) return FALSE;
|
if (!dc || !dc->funcs->pPatBlt) return FALSE;
|
||||||
|
|
||||||
dprintf_bitblt( stddeb, "PatBlt16: %04x %d,%d %dx%d %06lx\n",
|
dprintf_info(bitblt, "PatBlt16: %04x %d,%d %dx%d %06lx\n",
|
||||||
hdc, left, top, width, height, rop );
|
hdc, left, top, width, height, rop );
|
||||||
return dc->funcs->pPatBlt( dc, left, top, width, height, rop );
|
return dc->funcs->pPatBlt( dc, left, top, width, height, rop );
|
||||||
}
|
}
|
||||||
|
@ -33,7 +32,7 @@ BOOL32 WINAPI PatBlt32( HDC32 hdc, INT32 left, INT32 top,
|
||||||
DC * dc = DC_GetDCPtr( hdc );
|
DC * dc = DC_GetDCPtr( hdc );
|
||||||
if (!dc || !dc->funcs->pPatBlt) return FALSE;
|
if (!dc || !dc->funcs->pPatBlt) return FALSE;
|
||||||
|
|
||||||
dprintf_bitblt( stddeb, "PatBlt32: %04x %d,%d %dx%d %06lx\n",
|
dprintf_info(bitblt, "PatBlt32: %04x %d,%d %dx%d %06lx\n",
|
||||||
hdc, left, top, width, height, rop );
|
hdc, left, top, width, height, rop );
|
||||||
return dc->funcs->pPatBlt( dc, left, top, width, height, rop );
|
return dc->funcs->pPatBlt( dc, left, top, width, height, rop );
|
||||||
}
|
}
|
||||||
|
@ -52,7 +51,7 @@ BOOL16 WINAPI BitBlt16( HDC16 hdcDst, INT16 xDst, INT16 yDst, INT16 width,
|
||||||
if (!dcDst->funcs->pBitBlt) return FALSE;
|
if (!dcDst->funcs->pBitBlt) return FALSE;
|
||||||
dcSrc = DC_GetDCPtr( hdcSrc );
|
dcSrc = DC_GetDCPtr( hdcSrc );
|
||||||
|
|
||||||
dprintf_bitblt(stddeb,
|
dprintf_info(bitblt,
|
||||||
"BitBlt16: hdcSrc=%04x %d,%d %d bpp -> hdcDest=%04x %d,%d %dx%dx%d rop=%06lx\n",
|
"BitBlt16: hdcSrc=%04x %d,%d %d bpp -> hdcDest=%04x %d,%d %dx%dx%d rop=%06lx\n",
|
||||||
hdcSrc, xSrc, ySrc, dcSrc ? dcSrc->w.bitsPerPixel : 0,
|
hdcSrc, xSrc, ySrc, dcSrc ? dcSrc->w.bitsPerPixel : 0,
|
||||||
hdcDst, xDst, yDst, width, height, dcDst->w.bitsPerPixel, rop);
|
hdcDst, xDst, yDst, width, height, dcDst->w.bitsPerPixel, rop);
|
||||||
|
@ -74,7 +73,7 @@ BOOL32 WINAPI BitBlt32( HDC32 hdcDst, INT32 xDst, INT32 yDst, INT32 width,
|
||||||
if (!dcDst->funcs->pBitBlt) return FALSE;
|
if (!dcDst->funcs->pBitBlt) return FALSE;
|
||||||
dcSrc = DC_GetDCPtr( hdcSrc );
|
dcSrc = DC_GetDCPtr( hdcSrc );
|
||||||
|
|
||||||
dprintf_bitblt(stddeb,
|
dprintf_info(bitblt,
|
||||||
"BitBlt32: hdcSrc=%04x %d,%d %d bpp -> hdcDest=%04x %d,%d %dx%dx%d rop=%06lx\n",
|
"BitBlt32: hdcSrc=%04x %d,%d %d bpp -> hdcDest=%04x %d,%d %dx%dx%d rop=%06lx\n",
|
||||||
hdcSrc, xSrc, ySrc, dcSrc ? dcSrc->w.bitsPerPixel : 0,
|
hdcSrc, xSrc, ySrc, dcSrc ? dcSrc->w.bitsPerPixel : 0,
|
||||||
hdcDst, xDst, yDst, width, height, dcDst->w.bitsPerPixel, rop);
|
hdcDst, xDst, yDst, width, height, dcDst->w.bitsPerPixel, rop);
|
||||||
|
@ -97,7 +96,7 @@ BOOL16 WINAPI StretchBlt16( HDC16 hdcDst, INT16 xDst, INT16 yDst,
|
||||||
if (!dcDst->funcs->pStretchBlt) return FALSE;
|
if (!dcDst->funcs->pStretchBlt) return FALSE;
|
||||||
dcSrc = DC_GetDCPtr( hdcSrc );
|
dcSrc = DC_GetDCPtr( hdcSrc );
|
||||||
|
|
||||||
dprintf_bitblt(stddeb,
|
dprintf_info(bitblt,
|
||||||
"StretchBlt16: %04x %d,%d %dx%dx%d -> %04x %d,%d %dx%dx%d rop=%06lx\n",
|
"StretchBlt16: %04x %d,%d %dx%dx%d -> %04x %d,%d %dx%dx%d rop=%06lx\n",
|
||||||
hdcSrc, xSrc, ySrc, widthSrc, heightSrc,
|
hdcSrc, xSrc, ySrc, widthSrc, heightSrc,
|
||||||
dcSrc ? dcSrc->w.bitsPerPixel : 0, hdcDst, xDst, yDst,
|
dcSrc ? dcSrc->w.bitsPerPixel : 0, hdcDst, xDst, yDst,
|
||||||
|
@ -122,7 +121,7 @@ BOOL32 WINAPI StretchBlt32( HDC32 hdcDst, INT32 xDst, INT32 yDst,
|
||||||
if (!dcDst->funcs->pStretchBlt) return FALSE;
|
if (!dcDst->funcs->pStretchBlt) return FALSE;
|
||||||
dcSrc = DC_GetDCPtr( hdcSrc );
|
dcSrc = DC_GetDCPtr( hdcSrc );
|
||||||
|
|
||||||
dprintf_bitblt(stddeb,
|
dprintf_info(bitblt,
|
||||||
"StretchBlt32: %04x %d,%d %dx%dx%d -> %04x %d,%d %dx%dx%d rop=%06lx\n",
|
"StretchBlt32: %04x %d,%d %dx%dx%d -> %04x %d,%d %dx%dx%d rop=%06lx\n",
|
||||||
hdcSrc, xSrc, ySrc, widthSrc, heightSrc,
|
hdcSrc, xSrc, ySrc, widthSrc, heightSrc,
|
||||||
dcSrc ? dcSrc->w.bitsPerPixel : 0, hdcDst, xDst, yDst,
|
dcSrc ? dcSrc->w.bitsPerPixel : 0, hdcDst, xDst, yDst,
|
||||||
|
|
239
graphics/ddraw.c
239
graphics/ddraw.c
|
@ -1,4 +1,4 @@
|
||||||
/* DirectDraw
|
/* DirectDraw using DGA
|
||||||
*
|
*
|
||||||
* Copyright 1997,1998 Marcus Meissner
|
* Copyright 1997,1998 Marcus Meissner
|
||||||
*/
|
*/
|
||||||
|
@ -14,7 +14,8 @@
|
||||||
/* Progress on following programs:
|
/* Progress on following programs:
|
||||||
*
|
*
|
||||||
* - Diablo [640x480x8]:
|
* - Diablo [640x480x8]:
|
||||||
* The movies play. The game doesn't work yet.
|
* The movies play. The game doesn't work, it somehow tries to write
|
||||||
|
* into 2 lines _BEFORE_ the start of the surface. Don't know why.
|
||||||
*
|
*
|
||||||
* - WingCommander 4 / Win95 Patch [640x480x8]:
|
* - WingCommander 4 / Win95 Patch [640x480x8]:
|
||||||
* The intromovie plays, in 8 bit mode (to reconfigure wc4, run wine
|
* The intromovie plays, in 8 bit mode (to reconfigure wc4, run wine
|
||||||
|
@ -22,22 +23,26 @@
|
||||||
* my Matrox Mystique which uses 565 (rgb) colorweight instead of the usual
|
* my Matrox Mystique which uses 565 (rgb) colorweight instead of the usual
|
||||||
* 555. Specifying it in DDPIXELFORMAT didn't help.
|
* 555. Specifying it in DDPIXELFORMAT didn't help.
|
||||||
* Requires to be run in 640x480xdepth mode (doesn't seem to heed
|
* Requires to be run in 640x480xdepth mode (doesn't seem to heed
|
||||||
* DDSURFACEDESC.lPitch).
|
* DDSURFACEDESC.lPitch). You can fly the first mission with Maniac, but
|
||||||
|
* it crashes as soon as you arrive at Blue Point Station...
|
||||||
*
|
*
|
||||||
* - Monkey Island 3 [640x480x8]:
|
* - Monkey Island 3 [640x480x8]:
|
||||||
* Goes to the easy/hard selection screen, then hangs due to not MT safe
|
* Goes to the easy/hard selection screen, then hangs due to MT problems.
|
||||||
* XLibs.
|
|
||||||
*
|
*
|
||||||
* - DiscWorld 2 [640x480x8]:
|
* - DiscWorld 2 [640x480x8]:
|
||||||
* Plays through nearly all intro movies. Sound and animation a bit broken.
|
* [Crashes with 'cli' in released version. Yes. Privileged instructions
|
||||||
|
* in 32bit code. Will they ever learn...]
|
||||||
|
* Plays through nearly all intro movies. Sound and animation skip a lot of
|
||||||
|
* stuff (possible DirectSound problem).
|
||||||
*
|
*
|
||||||
* - XvT [640x480x16]:
|
* - XvT [640x480x16]:
|
||||||
* Shows the splash screen, then fails with missing Joystick.
|
* Shows the splash screen, then fails with missing Joystick.
|
||||||
*
|
*
|
||||||
* - Tomb Raider 2 Demo (using 8 bit renderer) [640x480x8]:
|
* - Tomb Raider 2 Demo (using 8 bit renderer) [640x480x8]:
|
||||||
* Shows selection screen, but keyboard input doesn't work.
|
* Playable. Sound is weird.
|
||||||
*
|
*
|
||||||
* - WingCommander Prophecy Demo (using software renderer) [640x480x16]:
|
* - WingCommander Prophecy Demo (using software renderer) [640x480x16]:
|
||||||
|
* [Crashes with an invalid opcode (outb) in the release version.]
|
||||||
* Plays intromovie, hangs in selection screen (no keyboard input, probably
|
* Plays intromovie, hangs in selection screen (no keyboard input, probably
|
||||||
* DirectInput problem).
|
* DirectInput problem).
|
||||||
*/
|
*/
|
||||||
|
@ -58,10 +63,8 @@
|
||||||
#include "dc.h"
|
#include "dc.h"
|
||||||
#include "win.h"
|
#include "win.h"
|
||||||
#include "miscemu.h"
|
#include "miscemu.h"
|
||||||
#include "mmsystem.h"
|
|
||||||
#include "ddraw.h"
|
#include "ddraw.h"
|
||||||
#include "d3d.h"
|
#include "d3d.h"
|
||||||
#include "stddebug.h"
|
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
|
||||||
#ifdef HAVE_LIBXXF86DGA
|
#ifdef HAVE_LIBXXF86DGA
|
||||||
|
@ -301,15 +304,16 @@ static int _getpixelformat(LPDIRECTDRAW ddraw,LPDDPIXELFORMAT pf) {
|
||||||
int nitems;
|
int nitems;
|
||||||
|
|
||||||
if (!vi)
|
if (!vi)
|
||||||
vi = XGetVisualInfo(display,VisualNoMask,&vt,&nitems);
|
vi = TSXGetVisualInfo(display,VisualNoMask,&vt,&nitems);
|
||||||
|
|
||||||
pf->dwFourCC = mmioFOURCC('R','G','B',' ');
|
pf->dwFourCC = 0;
|
||||||
if (ddraw->d.depth==8) {
|
if (ddraw->d.depth==8) {
|
||||||
pf->dwFlags = DDPF_RGB|DDPF_PALETTEINDEXED8;
|
pf->dwFlags = DDPF_RGB|DDPF_PALETTEINDEXED8;
|
||||||
pf->x.dwRGBBitCount = 8;
|
pf->x.dwRGBBitCount = 8;
|
||||||
pf->y.dwRBitMask = 0;
|
pf->y.dwRBitMask = 0;
|
||||||
pf->z.dwGBitMask = 0;
|
pf->z.dwGBitMask = 0;
|
||||||
pf->xx.dwBBitMask = 0;
|
pf->xx.dwBBitMask = 0;
|
||||||
|
pf->xy.dwRGBAlphaBitMask= 0;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if (ddraw->d.depth==16) {
|
if (ddraw->d.depth==16) {
|
||||||
|
@ -318,6 +322,7 @@ static int _getpixelformat(LPDIRECTDRAW ddraw,LPDDPIXELFORMAT pf) {
|
||||||
pf->y.dwRBitMask = vi[0].red_mask;
|
pf->y.dwRBitMask = vi[0].red_mask;
|
||||||
pf->z.dwGBitMask = vi[0].green_mask;
|
pf->z.dwGBitMask = vi[0].green_mask;
|
||||||
pf->xx.dwBBitMask = vi[0].blue_mask;
|
pf->xx.dwBBitMask = vi[0].blue_mask;
|
||||||
|
pf->xy.dwRGBAlphaBitMask= 0;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
fprintf(stderr,"_getpixelformat:oops?\n");
|
fprintf(stderr,"_getpixelformat:oops?\n");
|
||||||
|
@ -331,22 +336,22 @@ static int _getpixelformat(LPDIRECTDRAW ddraw,LPDDPIXELFORMAT pf) {
|
||||||
static HRESULT WINAPI IDirectDrawSurface_Lock(
|
static HRESULT WINAPI IDirectDrawSurface_Lock(
|
||||||
LPDIRECTDRAWSURFACE this,LPRECT32 lprect,LPDDSURFACEDESC lpddsd,DWORD flags, HANDLE32 hnd
|
LPDIRECTDRAWSURFACE this,LPRECT32 lprect,LPDDSURFACEDESC lpddsd,DWORD flags, HANDLE32 hnd
|
||||||
) {
|
) {
|
||||||
if (debugging_ddraw || (flags & ~(DDLOCK_WAIT|DDLOCK_READONLY|DDLOCK_WRITEONLY)))
|
dprintf_info(ddraw, "IDirectDrawSurface(%p)->Lock(%p,%p,%08lx,%08lx)\n",
|
||||||
fprintf(stderr,"IDirectDrawSurface(%p)->Lock(%p,%p,%08lx,%08lx)\n",
|
this,lprect,lpddsd,flags,(DWORD)hnd);
|
||||||
this,lprect,lpddsd,flags,(DWORD)hnd
|
if (flags & ~(DDLOCK_WAIT|DDLOCK_READONLY|DDLOCK_WRITEONLY))
|
||||||
);
|
dprintf_warn(ddraw, "IDirectDrawSurface(%p)->Lock(%p,%p,%08lx,%08lx)\n",
|
||||||
|
this,lprect,lpddsd,flags,(DWORD)hnd);
|
||||||
|
|
||||||
if (lprect) {
|
if (lprect) {
|
||||||
/*
|
dprintf_info(ddraw," lprect: %dx%d-%dx%d\n",
|
||||||
fprintf(stderr," lprect: %dx%d-%dx%d\n",
|
|
||||||
lprect->top,lprect->left,lprect->bottom,lprect->right
|
lprect->top,lprect->left,lprect->bottom,lprect->right
|
||||||
);
|
);
|
||||||
*/
|
|
||||||
lpddsd->y.lpSurface = this->s.surface+
|
lpddsd->y.lpSurface = this->s.surface+
|
||||||
(lprect->top*this->s.lpitch)+
|
(lprect->top*this->s.lpitch)+
|
||||||
(lprect->left*(this->s.ddraw->d.depth/8));
|
(lprect->left*(this->s.ddraw->d.depth/8));
|
||||||
} else
|
} else
|
||||||
lpddsd->y.lpSurface = this->s.surface;
|
lpddsd->y.lpSurface = this->s.surface;
|
||||||
|
lpddsd->dwFlags = DDSD_WIDTH|DDSD_HEIGHT|DDSD_PIXELFORMAT|DDSD_PITCH|DDSD_LPSURFACE;
|
||||||
lpddsd->dwWidth = this->s.width;
|
lpddsd->dwWidth = this->s.width;
|
||||||
lpddsd->dwHeight = this->s.height;
|
lpddsd->dwHeight = this->s.height;
|
||||||
lpddsd->lPitch = this->s.lpitch;
|
lpddsd->lPitch = this->s.lpitch;
|
||||||
|
@ -357,14 +362,14 @@ static HRESULT WINAPI IDirectDrawSurface_Lock(
|
||||||
static HRESULT WINAPI IDirectDrawSurface_Unlock(
|
static HRESULT WINAPI IDirectDrawSurface_Unlock(
|
||||||
LPDIRECTDRAWSURFACE this,LPVOID surface
|
LPDIRECTDRAWSURFACE this,LPVOID surface
|
||||||
) {
|
) {
|
||||||
dprintf_ddraw(stderr,"IDirectDrawSurface(%p)->Unlock(%p)\n",this,surface);
|
dprintf_info(ddraw,"IDirectDrawSurface(%p)->Unlock(%p)\n",this,surface);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI IDirectDrawSurface_Flip(
|
static HRESULT WINAPI IDirectDrawSurface_Flip(
|
||||||
LPDIRECTDRAWSURFACE this,LPDIRECTDRAWSURFACE flipto,DWORD dwFlags
|
LPDIRECTDRAWSURFACE this,LPDIRECTDRAWSURFACE flipto,DWORD dwFlags
|
||||||
) {
|
) {
|
||||||
dprintf_ddraw(stderr,"IDirectDrawSurface(%p)->Flip(%p,%08lx)\n",this,flipto,dwFlags);
|
dprintf_info(ddraw,"IDirectDrawSurface(%p)->Flip(%p,%08lx)\n",this,flipto,dwFlags);
|
||||||
if (!flipto) {
|
if (!flipto) {
|
||||||
if (this->s.backbuffer)
|
if (this->s.backbuffer)
|
||||||
flipto = this->s.backbuffer;
|
flipto = this->s.backbuffer;
|
||||||
|
@ -394,7 +399,7 @@ static HRESULT WINAPI IDirectDrawSurface_Flip(
|
||||||
static HRESULT WINAPI IDirectDrawSurface_SetPalette(
|
static HRESULT WINAPI IDirectDrawSurface_SetPalette(
|
||||||
LPDIRECTDRAWSURFACE this,LPDIRECTDRAWPALETTE pal
|
LPDIRECTDRAWSURFACE this,LPDIRECTDRAWPALETTE pal
|
||||||
) {
|
) {
|
||||||
dprintf_ddraw(stderr,"IDirectDrawSurface(%p)->SetPalette(%p)\n",this,pal);
|
dprintf_info(ddraw,"IDirectDrawSurface(%p)->SetPalette(%p)\n",this,pal);
|
||||||
this->s.palette = pal; /* probably addref it too */
|
this->s.palette = pal; /* probably addref it too */
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -470,11 +475,13 @@ static HRESULT WINAPI IDirectDrawSurface_BltFast(
|
||||||
LPDIRECTDRAWSURFACE this,DWORD dstx,DWORD dsty,LPDIRECTDRAWSURFACE src,LPRECT32 rsrc,DWORD trans
|
LPDIRECTDRAWSURFACE this,DWORD dstx,DWORD dsty,LPDIRECTDRAWSURFACE src,LPRECT32 rsrc,DWORD trans
|
||||||
) {
|
) {
|
||||||
int i,bpp;
|
int i,bpp;
|
||||||
|
if (debugging_info(ddraw)) {
|
||||||
fprintf(stderr,"IDirectDrawSurface(%p)->BltFast(%ld,%ld,%p,%p,%08lx),stub!\n",
|
fprintf(stderr,"IDirectDrawSurface(%p)->BltFast(%ld,%ld,%p,%p,%08lx),stub!\n",
|
||||||
this,dstx,dsty,src,rsrc,trans
|
this,dstx,dsty,src,rsrc,trans
|
||||||
);
|
);
|
||||||
fprintf(stderr," trans:");_dump_DDBLTFAST(trans);fprintf(stderr,"\n");
|
fprintf(stderr," trans:");_dump_DDBLTFAST(trans);fprintf(stderr,"\n");
|
||||||
fprintf(stderr," srcrect: %dx%d-%dx%d\n",rsrc->left,rsrc->top,rsrc->right,rsrc->bottom);
|
fprintf(stderr," srcrect: %dx%d-%dx%d\n",rsrc->left,rsrc->top,rsrc->right,rsrc->bottom);
|
||||||
|
}
|
||||||
bpp = this->s.ddraw->d.depth/8;
|
bpp = this->s.ddraw->d.depth/8;
|
||||||
for (i=0;i<rsrc->bottom-rsrc->top;i++) {
|
for (i=0;i<rsrc->bottom-rsrc->top;i++) {
|
||||||
memcpy( this->s.surface+((i+dsty)*this->s.width*bpp)+dstx*bpp,
|
memcpy( this->s.surface+((i+dsty)*this->s.width*bpp)+dstx*bpp,
|
||||||
|
@ -497,7 +504,7 @@ static HRESULT WINAPI IDirectDrawSurface_BltBatch(
|
||||||
static HRESULT WINAPI IDirectDrawSurface_GetCaps(
|
static HRESULT WINAPI IDirectDrawSurface_GetCaps(
|
||||||
LPDIRECTDRAWSURFACE this,LPDDSCAPS caps
|
LPDIRECTDRAWSURFACE this,LPDDSCAPS caps
|
||||||
) {
|
) {
|
||||||
dprintf_ddraw(stderr,"IDirectDrawSurface(%p)->GetCaps(%p)\n",this,caps);
|
dprintf_info(ddraw,"IDirectDrawSurface(%p)->GetCaps(%p)\n",this,caps);
|
||||||
caps->dwCaps = DDCAPS_PALETTE; /* probably more */
|
caps->dwCaps = DDCAPS_PALETTE; /* probably more */
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -505,8 +512,9 @@ static HRESULT WINAPI IDirectDrawSurface_GetCaps(
|
||||||
static HRESULT WINAPI IDirectDrawSurface_GetSurfaceDesc(
|
static HRESULT WINAPI IDirectDrawSurface_GetSurfaceDesc(
|
||||||
LPDIRECTDRAWSURFACE this,LPDDSURFACEDESC ddsd
|
LPDIRECTDRAWSURFACE this,LPDDSURFACEDESC ddsd
|
||||||
) {
|
) {
|
||||||
if (debugging_ddraw) {
|
if (debugging_info(ddraw)) {
|
||||||
fprintf(stderr,"IDirectDrawSurface(%p)->GetSurfaceDesc(%p)\n",this,ddsd);
|
dprintf_info(ddraw, "IDirectDrawSurface(%p)->GetSurfaceDesc(%p)\n",
|
||||||
|
this,ddsd);
|
||||||
fprintf(stderr," flags: ");
|
fprintf(stderr," flags: ");
|
||||||
_dump_DDSD(ddsd->dwFlags);
|
_dump_DDSD(ddsd->dwFlags);
|
||||||
fprintf(stderr,"\n");
|
fprintf(stderr,"\n");
|
||||||
|
@ -526,16 +534,20 @@ static HRESULT WINAPI IDirectDrawSurface_GetSurfaceDesc(
|
||||||
}
|
}
|
||||||
|
|
||||||
static ULONG WINAPI IDirectDrawSurface_AddRef(LPDIRECTDRAWSURFACE this) {
|
static ULONG WINAPI IDirectDrawSurface_AddRef(LPDIRECTDRAWSURFACE this) {
|
||||||
dprintf_ddraw(stderr,"IDirectDrawSurface(%p)->AddRef()\n",this);
|
dprintf_info(ddraw,"IDirectDrawSurface(%p)->AddRef()\n",this);
|
||||||
return ++(this->ref);
|
return ++(this->ref);
|
||||||
}
|
}
|
||||||
|
|
||||||
static ULONG WINAPI IDirectDrawSurface_Release(LPDIRECTDRAWSURFACE this) {
|
static ULONG WINAPI IDirectDrawSurface_Release(LPDIRECTDRAWSURFACE this) {
|
||||||
dprintf_ddraw(stderr,"IDirectDrawSurface(%p)->Release()\n",this);
|
dprintf_info(ddraw,"IDirectDrawSurface(%p)->Release()\n",this);
|
||||||
if (!--(this->ref)) {
|
if (!--(this->ref)) {
|
||||||
this->s.ddraw->lpvtbl->fnRelease(this->s.ddraw);
|
this->s.ddraw->lpvtbl->fnRelease(this->s.ddraw);
|
||||||
/* clear out of surface list */
|
/* clear out of surface list */
|
||||||
|
if (this->s.fb_height == -1) {
|
||||||
|
HeapFree(GetProcessHeap(),0,this->s.surface);
|
||||||
|
} else {
|
||||||
this->s.ddraw->d.vpmask &= ~(1<<(this->s.fb_height/this->s.ddraw->d.fb_height));
|
this->s.ddraw->d.vpmask &= ~(1<<(this->s.fb_height/this->s.ddraw->d.fb_height));
|
||||||
|
}
|
||||||
HeapFree(GetProcessHeap(),0,this);
|
HeapFree(GetProcessHeap(),0,this);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -545,9 +557,12 @@ static ULONG WINAPI IDirectDrawSurface_Release(LPDIRECTDRAWSURFACE this) {
|
||||||
static HRESULT WINAPI IDirectDrawSurface_GetAttachedSurface(
|
static HRESULT WINAPI IDirectDrawSurface_GetAttachedSurface(
|
||||||
LPDIRECTDRAWSURFACE this,LPDDSCAPS lpddsd,LPDIRECTDRAWSURFACE *lpdsf
|
LPDIRECTDRAWSURFACE this,LPDDSCAPS lpddsd,LPDIRECTDRAWSURFACE *lpdsf
|
||||||
) {
|
) {
|
||||||
if (debugging_ddraw) {
|
dprintf_info(ddraw, "IDirectDrawSurface(%p)->GetAttachedSurface(%p,%p)\n",
|
||||||
fprintf(stderr,"IDirectDrawSurface(%p)->GetAttachedSurface(%p,%p)\n",this,lpddsd,lpdsf);
|
this, lpddsd, lpdsf);
|
||||||
fprintf(stderr," caps ");_dump_DDSCAPS(lpddsd->dwCaps);fprintf(stderr,"\n");
|
if (debugging_info(ddraw)) {
|
||||||
|
fprintf(stderr," caps ");
|
||||||
|
_dump_DDSCAPS(lpddsd->dwCaps);
|
||||||
|
fprintf(stderr,"\n");
|
||||||
}
|
}
|
||||||
if (!(lpddsd->dwCaps & DDSCAPS_BACKBUFFER)) {
|
if (!(lpddsd->dwCaps & DDSCAPS_BACKBUFFER)) {
|
||||||
fprintf(stderr,"IDirectDrawSurface::GetAttachedSurface():whoops, can only handle backbuffers for now\n");
|
fprintf(stderr,"IDirectDrawSurface::GetAttachedSurface():whoops, can only handle backbuffers for now\n");
|
||||||
|
@ -609,8 +624,8 @@ static HRESULT WINAPI IDirectDrawSurface_GetDC(LPDIRECTDRAWSURFACE this,HDC32* l
|
||||||
static HRESULT WINAPI IDirectDrawSurface_QueryInterface(LPDIRECTDRAWSURFACE this,REFIID refiid,LPVOID *obj) {
|
static HRESULT WINAPI IDirectDrawSurface_QueryInterface(LPDIRECTDRAWSURFACE this,REFIID refiid,LPVOID *obj) {
|
||||||
char xrefiid[50];
|
char xrefiid[50];
|
||||||
|
|
||||||
StringFromCLSID((LPCLSID)refiid,xrefiid);
|
WINE_StringFromCLSID((LPCLSID)refiid,xrefiid);
|
||||||
dprintf_ddraw(stderr,"IDirectDrawSurface(%p)->QueryInterface(%s,%p)\n",this,xrefiid,obj);
|
dprintf_info(ddraw,"IDirectDrawSurface(%p)->QueryInterface(%s,%p)\n",this,xrefiid,obj);
|
||||||
|
|
||||||
/* thats version 3 (DirectX 5) */
|
/* thats version 3 (DirectX 5) */
|
||||||
if ( !memcmp(&IID_IDirectDrawSurface3,refiid,sizeof(IID_IDirectDrawSurface3))) {
|
if ( !memcmp(&IID_IDirectDrawSurface3,refiid,sizeof(IID_IDirectDrawSurface3))) {
|
||||||
|
@ -693,7 +708,7 @@ static HRESULT WINAPI IDirectDrawSurface2_Lock(
|
||||||
static HRESULT WINAPI IDirectDrawSurface2_Unlock(
|
static HRESULT WINAPI IDirectDrawSurface2_Unlock(
|
||||||
LPDIRECTDRAWSURFACE2 this,LPVOID surface
|
LPDIRECTDRAWSURFACE2 this,LPVOID surface
|
||||||
) {
|
) {
|
||||||
dprintf_ddraw(stderr,"IDirectDrawSurface2(%p)->Unlock(%p)\n",this,surface);
|
dprintf_info(ddraw,"IDirectDrawSurface2(%p)->Unlock(%p)\n",this,surface);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -704,19 +719,12 @@ static HRESULT WINAPI IDirectDrawSurface2_SetPalette(
|
||||||
}
|
}
|
||||||
|
|
||||||
static ULONG WINAPI IDirectDrawSurface2_AddRef(LPDIRECTDRAWSURFACE2 this) {
|
static ULONG WINAPI IDirectDrawSurface2_AddRef(LPDIRECTDRAWSURFACE2 this) {
|
||||||
dprintf_ddraw(stderr,"IDirectDrawSurface2(%p)->AddRef()\n",this);
|
dprintf_info(ddraw,"IDirectDrawSurface2(%p)->AddRef()\n",this);
|
||||||
return ++(this->ref);
|
return ++(this->ref);
|
||||||
}
|
}
|
||||||
|
|
||||||
static ULONG WINAPI IDirectDrawSurface2_Release(LPDIRECTDRAWSURFACE2 this) {
|
static ULONG WINAPI IDirectDrawSurface2_Release(LPDIRECTDRAWSURFACE2 this) {
|
||||||
dprintf_ddraw(stderr,"IDirectDrawSurface2(%p)->Release()\n",this);
|
return IDirectDrawSurface_Release((LPDIRECTDRAWSURFACE)this);
|
||||||
if (!--(this->ref)) {
|
|
||||||
this->s.ddraw->lpvtbl->fnRelease(this->s.ddraw);
|
|
||||||
this->s.ddraw->d.vpmask &= ~(1<<(this->s.fb_height/this->s.ddraw->d.fb_height));
|
|
||||||
HeapFree(GetProcessHeap(),0,this);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return this->ref;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI IDirectDrawSurface2_GetAttachedSurface(
|
static HRESULT WINAPI IDirectDrawSurface2_GetAttachedSurface(
|
||||||
|
@ -813,12 +821,12 @@ static HRESULT WINAPI IDirectDrawSurface3_GetAttachedSurface(
|
||||||
}
|
}
|
||||||
|
|
||||||
static ULONG WINAPI IDirectDrawSurface3_AddRef(LPDIRECTDRAWSURFACE3 this) {
|
static ULONG WINAPI IDirectDrawSurface3_AddRef(LPDIRECTDRAWSURFACE3 this) {
|
||||||
dprintf_ddraw(stderr,"IDirectDrawSurface3(%p)->AddRef()\n",this);
|
dprintf_info(ddraw,"IDirectDrawSurface3(%p)->AddRef()\n",this);
|
||||||
return ++(this->ref);
|
return ++(this->ref);
|
||||||
}
|
}
|
||||||
|
|
||||||
static ULONG WINAPI IDirectDrawSurface3_Release(LPDIRECTDRAWSURFACE3 this) {
|
static ULONG WINAPI IDirectDrawSurface3_Release(LPDIRECTDRAWSURFACE3 this) {
|
||||||
dprintf_ddraw(stderr,"IDirectDrawSurface3(%p)->Release()\n",this);
|
dprintf_info(ddraw,"IDirectDrawSurface3(%p)->Release()\n",this);
|
||||||
if (!--(this->ref)) {
|
if (!--(this->ref)) {
|
||||||
this->s.ddraw->lpvtbl->fnRelease(this->s.ddraw);
|
this->s.ddraw->lpvtbl->fnRelease(this->s.ddraw);
|
||||||
this->s.ddraw->d.vpmask &= ~(1<<(this->s.fb_height/this->s.ddraw->d.fb_height));
|
this->s.ddraw->d.vpmask &= ~(1<<(this->s.fb_height/this->s.ddraw->d.fb_height));
|
||||||
|
@ -962,11 +970,18 @@ static struct IDirectDrawClipper_VTable ddclipvt = {
|
||||||
* IDirectDrawPalette
|
* IDirectDrawPalette
|
||||||
*/
|
*/
|
||||||
static HRESULT WINAPI IDirectDrawPalette_GetEntries(
|
static HRESULT WINAPI IDirectDrawPalette_GetEntries(
|
||||||
LPDIRECTDRAWPALETTE this,DWORD x,DWORD y,DWORD z,LPPALETTEENTRY palent
|
LPDIRECTDRAWPALETTE this,DWORD x,DWORD start,DWORD end,LPPALETTEENTRY palent
|
||||||
) {
|
) {
|
||||||
fprintf(stderr,"IDirectDrawPalette(%p)->GetEntries(%08lx,%08lx,%08lx,%p),stub!\n",
|
int i;
|
||||||
this,x,y,z,palent
|
|
||||||
|
fprintf(stderr,"IDirectDrawPalette(%p)->GetEntries(%08lx,%ld,%ld,%p),stub!\n",
|
||||||
|
this,x,start,end,palent
|
||||||
);
|
);
|
||||||
|
for (i=start;i<end;i++) {
|
||||||
|
palent[i-start].peRed = i;
|
||||||
|
palent[i-start].peGreen = i;
|
||||||
|
palent[i-start].peBlue = i;
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -976,7 +991,7 @@ static HRESULT WINAPI IDirectDrawPalette_SetEntries(
|
||||||
XColor xc;
|
XColor xc;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
dprintf_ddraw(stderr,"IDirectDrawPalette(%p)->SetEntries(%08lx,%ld,%ld,%p)\n",
|
dprintf_info(ddraw,"IDirectDrawPalette(%p)->SetEntries(%08lx,%ld,%ld,%p)\n",
|
||||||
this,x,start,end,palent
|
this,x,start,end,palent
|
||||||
);
|
);
|
||||||
if (!this->cm) /* should not happen */ {
|
if (!this->cm) /* should not happen */ {
|
||||||
|
@ -984,13 +999,19 @@ static HRESULT WINAPI IDirectDrawPalette_SetEntries(
|
||||||
return DDERR_GENERIC;
|
return DDERR_GENERIC;
|
||||||
}
|
}
|
||||||
/* FIXME: free colorcells instead of freeing whole map */
|
/* FIXME: free colorcells instead of freeing whole map */
|
||||||
XFreeColormap(display,this->cm);
|
TSXFreeColormap(display,this->cm);
|
||||||
this->cm = TSXCreateColormap(display,DefaultRootWindow(display),DefaultVisualOfScreen(screen),AllocAll);
|
this->cm = TSXCreateColormap(display,DefaultRootWindow(display),DefaultVisualOfScreen(screen),AllocAll);
|
||||||
if (start>0) {
|
if (start>0) {
|
||||||
xc.red = xc.blue = xc.green = 0; xc.flags = DoRed|DoGreen|DoBlue; xc.pixel = 0; TSXStoreColor(display,this->cm,&xc);
|
xc.red = xc.blue = xc.green = 0; xc.flags = DoRed|DoGreen|DoBlue; xc.pixel = 0; TSXStoreColor(display,this->cm,&xc);
|
||||||
|
this->palents[0].peRed = 0;
|
||||||
|
this->palents[0].peBlue = 0;
|
||||||
|
this->palents[0].peGreen = 0;
|
||||||
}
|
}
|
||||||
if (end<256) {
|
if (end<256) {
|
||||||
xc.red = xc.blue = xc.green = 0xffff; xc.flags = DoRed|DoGreen|DoBlue; xc.pixel = 255; TSXStoreColor(display,this->cm,&xc);
|
xc.red = xc.blue = xc.green = 0xffff; xc.flags = DoRed|DoGreen|DoBlue; xc.pixel = 255; TSXStoreColor(display,this->cm,&xc);
|
||||||
|
this->palents[255].peRed = 255;
|
||||||
|
this->palents[255].peBlue = 255;
|
||||||
|
this->palents[255].peGreen = 255;
|
||||||
}
|
}
|
||||||
for (i=start;i<end;i++) {
|
for (i=start;i<end;i++) {
|
||||||
xc.red = palent[i-start].peRed<<8;
|
xc.red = palent[i-start].peRed<<8;
|
||||||
|
@ -999,6 +1020,9 @@ static HRESULT WINAPI IDirectDrawPalette_SetEntries(
|
||||||
xc.flags = DoRed|DoBlue|DoGreen;
|
xc.flags = DoRed|DoBlue|DoGreen;
|
||||||
xc.pixel = i;
|
xc.pixel = i;
|
||||||
TSXStoreColor(display,this->cm,&xc);
|
TSXStoreColor(display,this->cm,&xc);
|
||||||
|
this->palents[i].peRed = palent[i-start].peRed;
|
||||||
|
this->palents[i].peBlue = palent[i-start].peBlue;
|
||||||
|
this->palents[i].peGreen = palent[i-start].peGreen;
|
||||||
}
|
}
|
||||||
XF86DGAInstallColormap(display,DefaultScreen(display),this->cm);
|
XF86DGAInstallColormap(display,DefaultScreen(display),this->cm);
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -1007,7 +1031,7 @@ static HRESULT WINAPI IDirectDrawPalette_SetEntries(
|
||||||
static ULONG WINAPI IDirectDrawPalette_Release(LPDIRECTDRAWPALETTE this) {
|
static ULONG WINAPI IDirectDrawPalette_Release(LPDIRECTDRAWPALETTE this) {
|
||||||
if (!--(this->ref)) {
|
if (!--(this->ref)) {
|
||||||
if (this->cm) {
|
if (this->cm) {
|
||||||
XFreeColormap(display,this->cm);
|
TSXFreeColormap(display,this->cm);
|
||||||
this->cm = 0;
|
this->cm = 0;
|
||||||
}
|
}
|
||||||
HeapFree(GetProcessHeap(),0,this);
|
HeapFree(GetProcessHeap(),0,this);
|
||||||
|
@ -1099,9 +1123,10 @@ static HRESULT WINAPI IDirectDraw_CreateSurface(
|
||||||
) {
|
) {
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if (debugging_ddraw) {
|
dprintf_info(ddraw, "IDirectDraw(%p)->CreateSurface(%p,%p,%p)\n",
|
||||||
fprintf(stderr,"IDirectDraw(%p)->CreateSurface(%p,%p,%p)\n",this,lpddsd,lpdsf,lpunk);
|
this,lpddsd,lpdsf,lpunk);
|
||||||
fprintf(stderr," [w=%ld,h=%ld,flags ",lpddsd->dwWidth,lpddsd->dwHeight);
|
if (debugging_info(ddraw)) {
|
||||||
|
fprintf(stderr,"[w=%ld,h=%ld,flags ",lpddsd->dwWidth,lpddsd->dwHeight);
|
||||||
_dump_DDSD(lpddsd->dwFlags);
|
_dump_DDSD(lpddsd->dwFlags);
|
||||||
fprintf(stderr,"caps ");
|
fprintf(stderr,"caps ");
|
||||||
_dump_DDSCAPS(lpddsd->ddsCaps.dwCaps);
|
_dump_DDSCAPS(lpddsd->ddsCaps.dwCaps);
|
||||||
|
@ -1112,19 +1137,34 @@ static HRESULT WINAPI IDirectDraw_CreateSurface(
|
||||||
this->lpvtbl->fnAddRef(this);
|
this->lpvtbl->fnAddRef(this);
|
||||||
(*lpdsf)->ref = 1;
|
(*lpdsf)->ref = 1;
|
||||||
(*lpdsf)->lpvtbl = &ddsvt;
|
(*lpdsf)->lpvtbl = &ddsvt;
|
||||||
|
if ( (lpddsd->dwFlags & DDSD_CAPS) &&
|
||||||
|
(lpddsd->ddsCaps.dwCaps & DDSCAPS_OFFSCREENPLAIN)
|
||||||
|
) {
|
||||||
|
if (!(lpddsd->dwFlags & DDSD_WIDTH))
|
||||||
|
lpddsd->dwWidth = this->d.fb_width;
|
||||||
|
if (!(lpddsd->dwFlags & DDSD_HEIGHT))
|
||||||
|
lpddsd->dwWidth = this->d.fb_height;
|
||||||
|
(*lpdsf)->s.surface = (LPBYTE)HeapAlloc(GetProcessHeap(),0,lpddsd->dwWidth*lpddsd->dwHeight*this->d.depth/8);
|
||||||
|
(*lpdsf)->s.fb_height = -1;
|
||||||
|
(*lpdsf)->s.lpitch = lpddsd->dwWidth*this->d.depth/8;
|
||||||
|
dprintf_info(ddraw,"using system memory for a primary surface\n");
|
||||||
|
} else {
|
||||||
for (i=0;i<32;i++)
|
for (i=0;i<32;i++)
|
||||||
if (!(this->d.vpmask & (1<<i)))
|
if (!(this->d.vpmask & (1<<i)))
|
||||||
break;
|
break;
|
||||||
dprintf_ddraw(stderr,"using viewport %d for a primary surface\n",i);
|
dprintf_info(ddraw,"using viewport %d for a primary surface\n",i);
|
||||||
/* if i == 32 or maximum ... return error */
|
/* if i == 32 or maximum ... return error */
|
||||||
this->d.vpmask|=(1<<i);
|
this->d.vpmask|=(1<<i);
|
||||||
(*lpdsf)->s.surface = this->d.fb_addr+((i*this->d.vp_height)*this->d.fb_width*this->d.depth/8);
|
(*lpdsf)->s.surface = this->d.fb_addr+((i*this->d.fb_height)*this->d.fb_width*this->d.depth/8);
|
||||||
(*lpdsf)->s.fb_height = i*this->d.fb_height;
|
(*lpdsf)->s.fb_height = i*this->d.fb_height;
|
||||||
|
(*lpdsf)->s.lpitch = this->d.fb_width*this->d.depth/8;
|
||||||
|
}
|
||||||
|
|
||||||
|
lpddsd->lPitch = (*lpdsf)->s.lpitch;
|
||||||
|
|
||||||
(*lpdsf)->s.width = this->d.width;
|
(*lpdsf)->s.width = this->d.width;
|
||||||
(*lpdsf)->s.height = this->d.height;
|
(*lpdsf)->s.height = this->d.height;
|
||||||
(*lpdsf)->s.ddraw = this;
|
(*lpdsf)->s.ddraw = this;
|
||||||
(*lpdsf)->s.lpitch = this->d.fb_width*this->d.depth/8;
|
|
||||||
(*lpdsf)->s.backbuffer = NULL;
|
(*lpdsf)->s.backbuffer = NULL;
|
||||||
if (lpddsd->dwFlags & DDSD_BACKBUFFERCOUNT) {
|
if (lpddsd->dwFlags & DDSD_BACKBUFFERCOUNT) {
|
||||||
LPDIRECTDRAWSURFACE back;
|
LPDIRECTDRAWSURFACE back;
|
||||||
|
@ -1139,10 +1179,10 @@ static HRESULT WINAPI IDirectDraw_CreateSurface(
|
||||||
for (i=0;i<32;i++)
|
for (i=0;i<32;i++)
|
||||||
if (!(this->d.vpmask & (1<<i)))
|
if (!(this->d.vpmask & (1<<i)))
|
||||||
break;
|
break;
|
||||||
dprintf_ddraw(stderr,"using viewport %d for backbuffer\n",i);
|
dprintf_info(ddraw,"using viewport %d for backbuffer\n",i);
|
||||||
/* if i == 32 or maximum ... return error */
|
/* if i == 32 or maximum ... return error */
|
||||||
this->d.vpmask|=(1<<i);
|
this->d.vpmask|=(1<<i);
|
||||||
back->s.surface = this->d.fb_addr+((i*this->d.vp_height)*this->d.fb_width*this->d.depth/8);
|
back->s.surface = this->d.fb_addr+((i*this->d.fb_height)*this->d.fb_width*this->d.depth/8);
|
||||||
back->s.fb_height = i*this->d.fb_height;
|
back->s.fb_height = i*this->d.fb_height;
|
||||||
|
|
||||||
back->s.width = this->d.width;
|
back->s.width = this->d.width;
|
||||||
|
@ -1182,14 +1222,16 @@ static HRESULT WINAPI IDirectDraw_SetCooperativeLevel(
|
||||||
FE(DDSCL_CREATEDEVICEWINDOW)
|
FE(DDSCL_CREATEDEVICEWINDOW)
|
||||||
};
|
};
|
||||||
|
|
||||||
dprintf_ddraw(stderr,"IDirectDraw(%p)->SetCooperativeLevel(%08lx,%08lx)\n",
|
dprintf_info(ddraw,"IDirectDraw(%p)->SetCooperativeLevel(%08lx,%08lx)\n",
|
||||||
this,(DWORD)hwnd,cooplevel
|
this,(DWORD)hwnd,cooplevel
|
||||||
);
|
);
|
||||||
dprintf_ddraw(stderr," cooperative level ");
|
if(debugging_info(ddraw)){
|
||||||
|
dbg_decl_str(ddraw, 512);
|
||||||
for (i=0;i<sizeof(flagmap)/sizeof(flagmap[0]);i++)
|
for (i=0;i<sizeof(flagmap)/sizeof(flagmap[0]);i++)
|
||||||
if (flagmap[i].mask & cooplevel)
|
if (flagmap[i].mask & cooplevel)
|
||||||
dprintf_ddraw(stderr,"%s ",flagmap[i].name);
|
dsprintf(ddraw, "%s ", flagmap[i].name);
|
||||||
dprintf_ddraw(stderr,"\n");
|
dprintf_info(ddraw," cooperative level %s\n", dbg_str(ddraw));
|
||||||
|
}
|
||||||
this->d.mainwindow = hwnd;
|
this->d.mainwindow = hwnd;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -1201,7 +1243,8 @@ static HRESULT WINAPI IDirectDraw_SetDisplayMode(
|
||||||
int i,*depths,depcount;
|
int i,*depths,depcount;
|
||||||
char buf[200];
|
char buf[200];
|
||||||
|
|
||||||
dprintf_ddraw(stderr,"IDirectDraw(%p)->SetDisplayMode(%ld,%ld,%ld),stub!\n",this,width,height,depth);
|
dprintf_fixme(ddraw, "IDirectDraw(%p)->SetDisplayMode(%ld,%ld,%ld),stub!\n",
|
||||||
|
this, width, height, depth);
|
||||||
|
|
||||||
depths = TSXListDepths(display,DefaultScreen(display),&depcount);
|
depths = TSXListDepths(display,DefaultScreen(display),&depcount);
|
||||||
for (i=0;i<depcount;i++)
|
for (i=0;i<depcount;i++)
|
||||||
|
@ -1230,6 +1273,7 @@ static HRESULT WINAPI IDirectDraw_SetDisplayMode(
|
||||||
* it works for the library too?
|
* it works for the library too?
|
||||||
*/
|
*/
|
||||||
XF86DGADirectVideo(display,DefaultScreen(display),XF86DGADirectGraphics);
|
XF86DGADirectVideo(display,DefaultScreen(display),XF86DGADirectGraphics);
|
||||||
|
XF86DGASetViewPort(display,DefaultScreen(display),0,this->d.fb_height);
|
||||||
#ifdef RESTORE_SIGNALS
|
#ifdef RESTORE_SIGNALS
|
||||||
SIGNAL_InitEmulator();
|
SIGNAL_InitEmulator();
|
||||||
#endif
|
#endif
|
||||||
|
@ -1239,7 +1283,7 @@ static HRESULT WINAPI IDirectDraw_SetDisplayMode(
|
||||||
static HRESULT WINAPI IDirectDraw_GetCaps(
|
static HRESULT WINAPI IDirectDraw_GetCaps(
|
||||||
LPDIRECTDRAW this,LPDDCAPS caps1,LPDDCAPS caps2
|
LPDIRECTDRAW this,LPDDCAPS caps1,LPDDCAPS caps2
|
||||||
) {
|
) {
|
||||||
dprintf_ddraw(stderr,"IDirectDraw(%p)->GetCaps(%p,%p)\n",this,caps1,caps2);
|
dprintf_info(ddraw,"IDirectDraw(%p)->GetCaps(%p,%p)\n",this,caps1,caps2);
|
||||||
caps1->dwVidMemTotal = this->d.fb_memsize;
|
caps1->dwVidMemTotal = this->d.fb_memsize;
|
||||||
caps1->dwCaps = 0xffffffff&~(DDCAPS_BANKSWITCHED); /* we can do anything */
|
caps1->dwCaps = 0xffffffff&~(DDCAPS_BANKSWITCHED); /* we can do anything */
|
||||||
caps1->ddsCaps.dwCaps = 0xffffffff; /* we can do anything */
|
caps1->ddsCaps.dwCaps = 0xffffffff; /* we can do anything */
|
||||||
|
@ -1266,7 +1310,7 @@ static HRESULT WINAPI IDirectDraw_CreateClipper(
|
||||||
static HRESULT WINAPI IDirectDraw_CreatePalette(
|
static HRESULT WINAPI IDirectDraw_CreatePalette(
|
||||||
LPDIRECTDRAW this,DWORD x,LPPALETTEENTRY palent,LPDIRECTDRAWPALETTE *lpddpal,LPUNKNOWN lpunk
|
LPDIRECTDRAW this,DWORD x,LPPALETTEENTRY palent,LPDIRECTDRAWPALETTE *lpddpal,LPUNKNOWN lpunk
|
||||||
) {
|
) {
|
||||||
dprintf_ddraw(stderr,"IDirectDraw(%p)->CreatePalette(%08lx,%p,%p,%p)\n",
|
dprintf_info(ddraw,"IDirectDraw(%p)->CreatePalette(%08lx,%p,%p,%p)\n",
|
||||||
this,x,palent,lpddpal,lpunk
|
this,x,palent,lpddpal,lpunk
|
||||||
);
|
);
|
||||||
*lpddpal = (LPDIRECTDRAWPALETTE)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(IDirectDrawPalette));
|
*lpddpal = (LPDIRECTDRAWPALETTE)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(IDirectDrawPalette));
|
||||||
|
@ -1282,7 +1326,8 @@ static HRESULT WINAPI IDirectDraw_CreatePalette(
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI IDirectDraw_RestoreDisplayMode(LPDIRECTDRAW this) {
|
static HRESULT WINAPI IDirectDraw_RestoreDisplayMode(LPDIRECTDRAW this) {
|
||||||
dprintf_ddraw(stderr,"IDirectDraw(%p)->RestoreDisplayMode(),stub!\n",this);
|
dprintf_fixme(ddraw, "IDirectDraw(%p)->RestoreDisplayMode(),stub!\n",
|
||||||
|
this);
|
||||||
Sleep(1000);
|
Sleep(1000);
|
||||||
XF86DGADirectVideo(display,DefaultScreen(display),0);
|
XF86DGADirectVideo(display,DefaultScreen(display),0);
|
||||||
#ifdef RESTORE_SIGNALS
|
#ifdef RESTORE_SIGNALS
|
||||||
|
@ -1295,7 +1340,7 @@ static HRESULT WINAPI IDirectDraw_RestoreDisplayMode(LPDIRECTDRAW this) {
|
||||||
static HRESULT WINAPI IDirectDraw_WaitForVerticalBlank(
|
static HRESULT WINAPI IDirectDraw_WaitForVerticalBlank(
|
||||||
LPDIRECTDRAW this,DWORD x,HANDLE32 h
|
LPDIRECTDRAW this,DWORD x,HANDLE32 h
|
||||||
) {
|
) {
|
||||||
fprintf(stderr,"IDirectDraw(%p)->WaitForVerticalBlank(0x%08lx,0x%08x),stub!\n",this,x,h);
|
dprintf_info(ddraw,"IDirectDraw(%p)->WaitForVerticalBlank(0x%08lx,0x%08x),stub!\n",this,x,h);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1320,8 +1365,8 @@ static HRESULT WINAPI IDirectDraw_QueryInterface(
|
||||||
) {
|
) {
|
||||||
char xrefiid[50];
|
char xrefiid[50];
|
||||||
|
|
||||||
StringFromCLSID((LPCLSID)refiid,xrefiid);
|
WINE_StringFromCLSID((LPCLSID)refiid,xrefiid);
|
||||||
dprintf_ddraw(stderr,"IDirectDraw(%p)->QueryInterface(%s,%p)\n",this,xrefiid,obj);
|
dprintf_info(ddraw,"IDirectDraw(%p)->QueryInterface(%s,%p)\n",this,xrefiid,obj);
|
||||||
if (!memcmp(&IID_IUnknown,refiid,sizeof(IID_IUnknown))) {
|
if (!memcmp(&IID_IUnknown,refiid,sizeof(IID_IUnknown))) {
|
||||||
*obj = this;
|
*obj = this;
|
||||||
this->lpvtbl->fnAddRef(this);
|
this->lpvtbl->fnAddRef(this);
|
||||||
|
@ -1367,7 +1412,7 @@ static HRESULT WINAPI IDirectDraw_QueryInterface(
|
||||||
static HRESULT WINAPI IDirectDraw_GetVerticalBlankStatus(
|
static HRESULT WINAPI IDirectDraw_GetVerticalBlankStatus(
|
||||||
LPDIRECTDRAW this,BOOL32 *status
|
LPDIRECTDRAW this,BOOL32 *status
|
||||||
) {
|
) {
|
||||||
fprintf(stderr,"IDirectDraw(%p)->GetVerticalBlankSatus(%p)\n",this,status);
|
dprintf_info(ddraw,"IDirectDraw(%p)->GetVerticalBlankSatus(%p)\n",this,status);
|
||||||
*status = TRUE;
|
*status = TRUE;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -1377,7 +1422,7 @@ static HRESULT WINAPI IDirectDraw_EnumDisplayModes(
|
||||||
) {
|
) {
|
||||||
DDSURFACEDESC ddsfd;
|
DDSURFACEDESC ddsfd;
|
||||||
|
|
||||||
dprintf_ddraw(stderr,"IDirectDraw(%p)->EnumDisplayModes(0x%08lx,%p,%p,%p)\n",this,dwFlags,lpddsfd,context,modescb);
|
dprintf_info(ddraw,"IDirectDraw(%p)->EnumDisplayModes(0x%08lx,%p,%p,%p)\n",this,dwFlags,lpddsfd,context,modescb);
|
||||||
|
|
||||||
|
|
||||||
_getpixelformat(this,&(ddsfd.ddpfPixelFormat));
|
_getpixelformat(this,&(ddsfd.ddpfPixelFormat));
|
||||||
|
@ -1412,10 +1457,10 @@ static HRESULT WINAPI IDirectDraw_EnumDisplayModes(
|
||||||
static HRESULT WINAPI IDirectDraw_GetDisplayMode(
|
static HRESULT WINAPI IDirectDraw_GetDisplayMode(
|
||||||
LPDIRECTDRAW this,LPDDSURFACEDESC lpddsfd
|
LPDIRECTDRAW this,LPDDSURFACEDESC lpddsfd
|
||||||
) {
|
) {
|
||||||
dprintf_ddraw(stderr,"IDirectDraw(%p)->GetDisplayMode(%p)\n",this,lpddsfd);
|
dprintf_info(ddraw,"IDirectDraw(%p)->GetDisplayMode(%p)\n",this,lpddsfd);
|
||||||
lpddsfd->dwFlags = DDSD_HEIGHT|DDSD_WIDTH|DDSD_PITCH|DDSD_BACKBUFFERCOUNT|DDSD_PIXELFORMAT|DDSD_CAPS;
|
lpddsfd->dwFlags = DDSD_HEIGHT|DDSD_WIDTH|DDSD_PITCH|DDSD_BACKBUFFERCOUNT|DDSD_PIXELFORMAT|DDSD_CAPS;
|
||||||
lpddsfd->dwHeight = this->d.vp_height;
|
lpddsfd->dwHeight = screenHeight;
|
||||||
lpddsfd->dwWidth = this->d.vp_width;
|
lpddsfd->dwWidth = screenWidth;
|
||||||
lpddsfd->lPitch = this->d.fb_width*this->d.depth/8;
|
lpddsfd->lPitch = this->d.fb_width*this->d.depth/8;
|
||||||
lpddsfd->dwBackBufferCount = 1;
|
lpddsfd->dwBackBufferCount = 1;
|
||||||
lpddsfd->x.dwRefreshRate = 60;
|
lpddsfd->x.dwRefreshRate = 60;
|
||||||
|
@ -1429,6 +1474,13 @@ static HRESULT WINAPI IDirectDraw_FlipToGDISurface(LPDIRECTDRAW this) {
|
||||||
return DD_OK;
|
return DD_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI IDirectDraw_GetMonitorFrequency(
|
||||||
|
LPDIRECTDRAW this,LPDWORD freq
|
||||||
|
) {
|
||||||
|
fprintf(stderr,"IDirectDraw(%p)->GetMonitorFrequency(%p)\n",this,freq);
|
||||||
|
*freq = 60*100; /* 60 Hz */
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static IDirectDraw_VTable ddvt = {
|
static IDirectDraw_VTable ddvt = {
|
||||||
IDirectDraw_QueryInterface,
|
IDirectDraw_QueryInterface,
|
||||||
|
@ -1446,7 +1498,7 @@ static IDirectDraw_VTable ddvt = {
|
||||||
IDirectDraw_GetDisplayMode,
|
IDirectDraw_GetDisplayMode,
|
||||||
(void*)14,
|
(void*)14,
|
||||||
(void*)15,
|
(void*)15,
|
||||||
(void*)16,
|
IDirectDraw_GetMonitorFrequency,
|
||||||
(void*)17,
|
(void*)17,
|
||||||
IDirectDraw_GetVerticalBlankStatus,
|
IDirectDraw_GetVerticalBlankStatus,
|
||||||
(void*)19,
|
(void*)19,
|
||||||
|
@ -1508,7 +1560,8 @@ static HRESULT WINAPI IDirectDraw2_CreatePalette(
|
||||||
static HRESULT WINAPI IDirectDraw2_SetDisplayMode(
|
static HRESULT WINAPI IDirectDraw2_SetDisplayMode(
|
||||||
LPDIRECTDRAW2 this,DWORD width,DWORD height,DWORD depth,DWORD xx,DWORD yy
|
LPDIRECTDRAW2 this,DWORD width,DWORD height,DWORD depth,DWORD xx,DWORD yy
|
||||||
) {
|
) {
|
||||||
dprintf_ddraw(stderr,"IDirectDraw2(%p)->SetDisplayMode(%ld,%ld,%ld,%08lx,%08lx),stub!\n",this,width,height,depth,xx,yy);
|
dprintf_fixme(ddraw,"IDirectDraw2(%p)->SetDisplayMode(%ld,%ld,%ld,%08lx,%08lx),stub!\n",
|
||||||
|
this, width, height, depth, xx, yy);
|
||||||
|
|
||||||
return IDirectDraw_SetDisplayMode((LPDIRECTDRAW)this,width,height,depth);
|
return IDirectDraw_SetDisplayMode((LPDIRECTDRAW)this,width,height,depth);
|
||||||
}
|
}
|
||||||
|
@ -1539,7 +1592,7 @@ static HRESULT WINAPI IDirectDraw2_GetDisplayMode(
|
||||||
static HRESULT WINAPI IDirectDraw2_GetAvailableVidMem(
|
static HRESULT WINAPI IDirectDraw2_GetAvailableVidMem(
|
||||||
LPDIRECTDRAW2 this,LPDDSCAPS ddscaps,LPDWORD total,LPDWORD free
|
LPDIRECTDRAW2 this,LPDDSCAPS ddscaps,LPDWORD total,LPDWORD free
|
||||||
) {
|
) {
|
||||||
fprintf(stderr,"IDirectDraw2(%p)->GetAvailableVidMem(%p,%p,%p),stub!\n",
|
fprintf(stderr,"IDirectDraw2(%p)->GetAvailableVidMem(%p,%p,%p)\n",
|
||||||
this,ddscaps,total,free
|
this,ddscaps,total,free
|
||||||
);
|
);
|
||||||
if (total) *total = this->d.fb_memsize * 1024;
|
if (total) *total = this->d.fb_memsize * 1024;
|
||||||
|
@ -1550,9 +1603,19 @@ static HRESULT WINAPI IDirectDraw2_GetAvailableVidMem(
|
||||||
static HRESULT WINAPI IDirectDraw2_GetMonitorFrequency(
|
static HRESULT WINAPI IDirectDraw2_GetMonitorFrequency(
|
||||||
LPDIRECTDRAW2 this,LPDWORD freq
|
LPDIRECTDRAW2 this,LPDWORD freq
|
||||||
) {
|
) {
|
||||||
fprintf(stderr,"IDirectDraw2(%p)->GetMonitorFrequency(%p)\n",this,freq);
|
return IDirectDraw_GetMonitorFrequency((LPDIRECTDRAW)this,freq);
|
||||||
*freq = 60;
|
}
|
||||||
return 0;
|
|
||||||
|
static HRESULT WINAPI IDirectDraw2_GetVerticalBlankStatus(
|
||||||
|
LPDIRECTDRAW2 this,BOOL32 *status
|
||||||
|
) {
|
||||||
|
return IDirectDraw_GetVerticalBlankStatus((LPDIRECTDRAW)this,status);
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI IDirectDraw2_WaitForVerticalBlank(
|
||||||
|
LPDIRECTDRAW2 this,DWORD x,HANDLE32 h
|
||||||
|
) {
|
||||||
|
return IDirectDraw_WaitForVerticalBlank((LPDIRECTDRAW)this,x,h);
|
||||||
}
|
}
|
||||||
|
|
||||||
static IDirectDraw2_VTable dd2vt = {
|
static IDirectDraw2_VTable dd2vt = {
|
||||||
|
@ -1573,12 +1636,12 @@ static IDirectDraw2_VTable dd2vt = {
|
||||||
(void*)15,
|
(void*)15,
|
||||||
IDirectDraw2_GetMonitorFrequency,
|
IDirectDraw2_GetMonitorFrequency,
|
||||||
(void*)17,
|
(void*)17,
|
||||||
(void*)18,
|
IDirectDraw2_GetVerticalBlankStatus,
|
||||||
(void*)19,
|
(void*)19,
|
||||||
IDirectDraw2_RestoreDisplayMode,
|
IDirectDraw2_RestoreDisplayMode,
|
||||||
IDirectDraw2_SetCooperativeLevel,
|
IDirectDraw2_SetCooperativeLevel,
|
||||||
IDirectDraw2_SetDisplayMode,
|
IDirectDraw2_SetDisplayMode,
|
||||||
(void*)23/*IDirectDraw_WaitForVerticalBlank*/,
|
IDirectDraw2_WaitForVerticalBlank,
|
||||||
IDirectDraw2_GetAvailableVidMem
|
IDirectDraw2_GetAvailableVidMem
|
||||||
|
|
||||||
};
|
};
|
||||||
|
@ -1594,11 +1657,11 @@ HRESULT WINAPI DirectDrawCreate( LPGUID lpGUID, LPDIRECTDRAW *lplpDD, LPUNKNOWN
|
||||||
char *addr;
|
char *addr;
|
||||||
|
|
||||||
if (lpGUID)
|
if (lpGUID)
|
||||||
StringFromCLSID(lpGUID,xclsid);
|
WINE_StringFromCLSID(lpGUID,xclsid);
|
||||||
else
|
else
|
||||||
strcpy(xclsid,"<null>");
|
strcpy(xclsid,"<null>");
|
||||||
|
|
||||||
dprintf_ddraw(stderr,"DirectDrawCreate(%s,%p,%p)\n",xclsid,lplpDD,pUnkOuter);
|
dprintf_info(ddraw,"DirectDrawCreate(%s,%p,%p)\n",xclsid,lplpDD,pUnkOuter);
|
||||||
if (getuid()) {
|
if (getuid()) {
|
||||||
MessageBox32A(0,"Using the XF86DGA extension requires the program to be run using UID 0.","WINE DirectDraw",MB_OK|MB_ICONSTOP);
|
MessageBox32A(0,"Using the XF86DGA extension requires the program to be run using UID 0.","WINE DirectDraw",MB_OK|MB_ICONSTOP);
|
||||||
return E_UNEXPECTED;
|
return E_UNEXPECTED;
|
||||||
|
@ -1611,12 +1674,12 @@ HRESULT WINAPI DirectDrawCreate( LPGUID lpGUID, LPDIRECTDRAW *lplpDD, LPUNKNOWN
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
XF86DGAQueryVersion(display,&major,&minor);
|
XF86DGAQueryVersion(display,&major,&minor);
|
||||||
dprintf_ddraw(stderr,"XF86DGA is version %d.%d\n",major,minor);
|
dprintf_info(ddraw,"XF86DGA is version %d.%d\n",major,minor);
|
||||||
XF86DGAQueryDirectVideo(display,DefaultScreen(display),&flags);
|
XF86DGAQueryDirectVideo(display,DefaultScreen(display),&flags);
|
||||||
if (!(flags & XF86DGADirectPresent))
|
if (!(flags & XF86DGADirectPresent))
|
||||||
fprintf(stderr,"direct video is NOT ENABLED.\n");
|
fprintf(stderr,"direct video is NOT ENABLED.\n");
|
||||||
XF86DGAGetVideo(display,DefaultScreen(display),&addr,&width,&banksize,&memsize);
|
XF86DGAGetVideo(display,DefaultScreen(display),&addr,&width,&banksize,&memsize);
|
||||||
dprintf_ddraw(stderr,"video framebuffer: begin %p, width %d,banksize %d,memsize %d\n",
|
dprintf_info(ddraw,"video framebuffer: begin %p, width %d,banksize %d,memsize %d\n",
|
||||||
addr,width,banksize,memsize
|
addr,width,banksize,memsize
|
||||||
);
|
);
|
||||||
(*lplpDD)->d.fb_width = width;
|
(*lplpDD)->d.fb_width = width;
|
||||||
|
@ -1624,12 +1687,12 @@ HRESULT WINAPI DirectDrawCreate( LPGUID lpGUID, LPDIRECTDRAW *lplpDD, LPUNKNOWN
|
||||||
(*lplpDD)->d.fb_memsize = memsize;
|
(*lplpDD)->d.fb_memsize = memsize;
|
||||||
(*lplpDD)->d.fb_banksize = banksize;
|
(*lplpDD)->d.fb_banksize = banksize;
|
||||||
|
|
||||||
XF86DGASetViewPort(display,DefaultScreen(display),0,0);
|
|
||||||
XF86DGAGetViewPortSize(display,DefaultScreen(display),&width,&height);
|
XF86DGAGetViewPortSize(display,DefaultScreen(display),&width,&height);
|
||||||
|
XF86DGASetViewPort(display,DefaultScreen(display),0,0);
|
||||||
(*lplpDD)->d.vp_width = width;
|
(*lplpDD)->d.vp_width = width;
|
||||||
(*lplpDD)->d.vp_height = height;
|
(*lplpDD)->d.vp_height = height;
|
||||||
(*lplpDD)->d.fb_height = height;
|
(*lplpDD)->d.fb_height = screenHeight;
|
||||||
(*lplpDD)->d.vpmask = 0;
|
(*lplpDD)->d.vpmask = 1;
|
||||||
|
|
||||||
/* just assume the default depth is the DGA depth too */
|
/* just assume the default depth is the DGA depth too */
|
||||||
(*lplpDD)->d.depth = DefaultDepthOfScreen(screen);
|
(*lplpDD)->d.depth = DefaultDepthOfScreen(screen);
|
||||||
|
|
|
@ -9,7 +9,6 @@
|
||||||
#include "windows.h"
|
#include "windows.h"
|
||||||
#include "gdi.h"
|
#include "gdi.h"
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
#include "stddebug.h"
|
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* GetEnvironment (GDI.134)
|
* GetEnvironment (GDI.134)
|
||||||
|
|
|
@ -6,7 +6,6 @@
|
||||||
|
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include "dc.h"
|
#include "dc.h"
|
||||||
#include "stddebug.h"
|
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
|
||||||
|
|
||||||
|
@ -164,7 +163,7 @@ INT32 WINAPI SetMapMode32( HDC32 hdc, INT32 mode )
|
||||||
if (!dc) return 0;
|
if (!dc) return 0;
|
||||||
if (dc->funcs->pSetMapMode) return dc->funcs->pSetMapMode( dc, mode );
|
if (dc->funcs->pSetMapMode) return dc->funcs->pSetMapMode( dc, mode );
|
||||||
|
|
||||||
dprintf_gdi(stddeb, "SetMapMode: %04x %d\n", hdc, mode );
|
dprintf_info(gdi, "SetMapMode: %04x %d\n", hdc, mode );
|
||||||
|
|
||||||
prevMode = dc->w.MapMode;
|
prevMode = dc->w.MapMode;
|
||||||
switch(mode)
|
switch(mode)
|
||||||
|
|
|
@ -12,7 +12,6 @@
|
||||||
#include "region.h"
|
#include "region.h"
|
||||||
#include "xmalloc.h"
|
#include "xmalloc.h"
|
||||||
#include "metafiledrv.h"
|
#include "metafiledrv.h"
|
||||||
#include "stddebug.h"
|
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
|
|
|
@ -9,7 +9,6 @@
|
||||||
#include "heap.h"
|
#include "heap.h"
|
||||||
#include "global.h"
|
#include "global.h"
|
||||||
#include "metafile.h"
|
#include "metafile.h"
|
||||||
#include "stddebug.h"
|
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
|
||||||
static const DC_FUNCTIONS MFDRV_Funcs =
|
static const DC_FUNCTIONS MFDRV_Funcs =
|
||||||
|
@ -151,7 +150,7 @@ HDC16 WINAPI CreateMetaFile16(
|
||||||
METAFILEDRV_PDEVICE *physDev;
|
METAFILEDRV_PDEVICE *physDev;
|
||||||
HFILE32 hFile;
|
HFILE32 hFile;
|
||||||
|
|
||||||
dprintf_metafile( stddeb, "CreateMetaFile16: '%s'\n", filename );
|
dprintf_info(metafile, "CreateMetaFile16: '%s'\n", filename );
|
||||||
|
|
||||||
if (!(dc = MFDRV_AllocMetaFile())) return 0;
|
if (!(dc = MFDRV_AllocMetaFile())) return 0;
|
||||||
physDev = (METAFILEDRV_PDEVICE *)dc->physDev;
|
physDev = (METAFILEDRV_PDEVICE *)dc->physDev;
|
||||||
|
@ -176,7 +175,7 @@ HDC16 WINAPI CreateMetaFile16(
|
||||||
else /* memory based metafile */
|
else /* memory based metafile */
|
||||||
physDev->mh->mtType = METAFILE_MEMORY;
|
physDev->mh->mtType = METAFILE_MEMORY;
|
||||||
|
|
||||||
dprintf_metafile( stddeb, "CreateMetaFile16: returning %04x\n", dc->hSelf);
|
dprintf_info(metafile, "CreateMetaFile16: returning %04x\n", dc->hSelf);
|
||||||
return dc->hSelf;
|
return dc->hSelf;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -199,7 +198,7 @@ HMETAFILE16 WINAPI CloseMetaFile16(
|
||||||
HFILE32 hFile;
|
HFILE32 hFile;
|
||||||
METAFILEDRV_PDEVICE *physDev;
|
METAFILEDRV_PDEVICE *physDev;
|
||||||
|
|
||||||
dprintf_metafile( stddeb, "CloseMetaFile(%04x)\n", hdc );
|
dprintf_info(metafile, "CloseMetaFile(%04x)\n", hdc );
|
||||||
|
|
||||||
if (!(dc = (DC *) GDI_GetObjPtr( hdc, METAFILE_DC_MAGIC ))) return 0;
|
if (!(dc = (DC *) GDI_GetObjPtr( hdc, METAFILE_DC_MAGIC ))) return 0;
|
||||||
physDev = (METAFILEDRV_PDEVICE *)dc->physDev;
|
physDev = (METAFILEDRV_PDEVICE *)dc->physDev;
|
||||||
|
|
|
@ -12,7 +12,6 @@
|
||||||
#include "metafile.h"
|
#include "metafile.h"
|
||||||
#include "metafiledrv.h"
|
#include "metafiledrv.h"
|
||||||
#include "pen.h"
|
#include "pen.h"
|
||||||
#include "stddebug.h"
|
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
|
||||||
|
|
||||||
|
@ -86,7 +85,7 @@ HGDIOBJ32 MFDRV_SelectObject( DC *dc, HGDIOBJ32 handle )
|
||||||
HGDIOBJ32 ret = 0;
|
HGDIOBJ32 ret = 0;
|
||||||
|
|
||||||
if (!ptr) return 0;
|
if (!ptr) return 0;
|
||||||
dprintf_gdi(stddeb, "SelectObject: hdc=%04x %04x\n", dc->hSelf, handle );
|
dprintf_info(gdi, "SelectObject: hdc=%04x %04x\n", dc->hSelf, handle );
|
||||||
|
|
||||||
switch(ptr->wMagic)
|
switch(ptr->wMagic)
|
||||||
{
|
{
|
||||||
|
|
|
@ -13,7 +13,6 @@
|
||||||
#include "heap.h"
|
#include "heap.h"
|
||||||
#include "metafile.h"
|
#include "metafile.h"
|
||||||
#include "metafiledrv.h"
|
#include "metafiledrv.h"
|
||||||
#include "stddebug.h"
|
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
#include "xmalloc.h"
|
#include "xmalloc.h"
|
||||||
|
|
||||||
|
|
|
@ -24,7 +24,6 @@
|
||||||
#include "color.h"
|
#include "color.h"
|
||||||
#include "region.h"
|
#include "region.h"
|
||||||
#include "path.h"
|
#include "path.h"
|
||||||
#include "stddebug.h"
|
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
|
|
|
@ -8,7 +8,6 @@
|
||||||
#include "brush.h"
|
#include "brush.h"
|
||||||
#include "win16drv.h"
|
#include "win16drv.h"
|
||||||
#include "heap.h"
|
#include "heap.h"
|
||||||
#include "stddebug.h"
|
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
|
||||||
HBRUSH32 WIN16DRV_BRUSH_SelectObject( DC * dc, HBRUSH32 hbrush,
|
HBRUSH32 WIN16DRV_BRUSH_SelectObject( DC * dc, HBRUSH32 hbrush,
|
||||||
|
@ -26,7 +25,7 @@ HBRUSH32 WIN16DRV_BRUSH_SelectObject( DC * dc, HBRUSH32 hbrush,
|
||||||
|
|
||||||
if ( physDev->BrushInfo )
|
if ( physDev->BrushInfo )
|
||||||
{
|
{
|
||||||
dprintf_win16drv(stddeb, "UnRealizing BrushInfo\n");
|
dprintf_info(win16drv, "UnRealizing BrushInfo\n");
|
||||||
nSize = PRTDRV_RealizeObject (physDev->segptrPDEVICE, -DRVOBJ_BRUSH,
|
nSize = PRTDRV_RealizeObject (physDev->segptrPDEVICE, -DRVOBJ_BRUSH,
|
||||||
physDev->BrushInfo,
|
physDev->BrushInfo,
|
||||||
physDev->BrushInfo, 0);
|
physDev->BrushInfo, 0);
|
||||||
|
|
|
@ -12,7 +12,6 @@
|
||||||
#include "module.h"
|
#include "module.h"
|
||||||
#include "font.h"
|
#include "font.h"
|
||||||
#include "heap.h"
|
#include "heap.h"
|
||||||
#include "stddebug.h"
|
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
|
||||||
|
|
||||||
|
@ -25,7 +24,7 @@ BOOL32 WIN16DRV_GetTextExtentPoint( DC *dc, LPCSTR str, INT32 count,
|
||||||
WIN16DRV_PDEVICE *physDev = (WIN16DRV_PDEVICE *)dc->physDev;
|
WIN16DRV_PDEVICE *physDev = (WIN16DRV_PDEVICE *)dc->physDev;
|
||||||
DWORD dwRet;
|
DWORD dwRet;
|
||||||
|
|
||||||
dprintf_win16drv(stddeb, "WIN16DRV_GetTextExtPoint: %04x %s %d %p\n",
|
dprintf_info(win16drv, "WIN16DRV_GetTextExtPoint: %04x %s %d %p\n",
|
||||||
dc->hSelf, str, count, size);
|
dc->hSelf, str, count, size);
|
||||||
|
|
||||||
dwRet = PRTDRV_ExtTextOut(physDev->segptrPDEVICE, 0, 0,
|
dwRet = PRTDRV_ExtTextOut(physDev->segptrPDEVICE, 0, 0,
|
||||||
|
@ -35,7 +34,7 @@ BOOL32 WIN16DRV_GetTextExtentPoint( DC *dc, LPCSTR str, INT32 count,
|
||||||
win16drv_SegPtr_TextXForm, NULL, NULL, 0);
|
win16drv_SegPtr_TextXForm, NULL, NULL, 0);
|
||||||
size->cx = XDSTOLS(dc,LOWORD(dwRet));
|
size->cx = XDSTOLS(dc,LOWORD(dwRet));
|
||||||
size->cy = YDSTOLS(dc,HIWORD(dwRet));
|
size->cy = YDSTOLS(dc,HIWORD(dwRet));
|
||||||
dprintf_win16drv(stddeb, "WIN16DRV_GetTextExtPoint: cx=0x%x, cy=0x%x\n",
|
dprintf_info(win16drv, "WIN16DRV_GetTextExtPoint: cx=0x%x, cy=0x%x\n",
|
||||||
size->cx, size->cy );
|
size->cx, size->cy );
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
@ -48,11 +47,11 @@ BOOL32 WIN16DRV_GetTextMetrics( DC *dc, TEXTMETRIC32A *metrics )
|
||||||
{
|
{
|
||||||
WIN16DRV_PDEVICE *physDev = (WIN16DRV_PDEVICE *)dc->physDev;
|
WIN16DRV_PDEVICE *physDev = (WIN16DRV_PDEVICE *)dc->physDev;
|
||||||
|
|
||||||
dprintf_win16drv(stddeb, "WIN16DRV_GetTextMetrics: %04x \n", dc->hSelf);
|
dprintf_info(win16drv, "WIN16DRV_GetTextMetrics: %04x \n", dc->hSelf);
|
||||||
|
|
||||||
FONT_TextMetric16to32A( &physDev->tm, metrics );
|
FONT_TextMetric16to32A( &physDev->tm, metrics );
|
||||||
|
|
||||||
dprintf_win16drv(stddeb,
|
dprintf_info(win16drv,
|
||||||
"H %d, A %d, D %d, Int %d, Ext %d, AW %d, MW %d, W %d\n",
|
"H %d, A %d, D %d, Int %d, Ext %d, AW %d, MW %d, W %d\n",
|
||||||
metrics->tmHeight,
|
metrics->tmHeight,
|
||||||
metrics->tmAscent,
|
metrics->tmAscent,
|
||||||
|
@ -74,13 +73,13 @@ HFONT32 WIN16DRV_FONT_SelectObject( DC * dc, HFONT32 hfont, FONTOBJ * font)
|
||||||
|
|
||||||
dc->w.hFont = hfont;
|
dc->w.hFont = hfont;
|
||||||
|
|
||||||
dprintf_win16drv(stddeb, "WIN16DRV_FONT_SelectObject '%s' h=%d\n",
|
dprintf_info(win16drv, "WIN16DRV_FONT_SelectObject '%s' h=%d\n",
|
||||||
font->logfont.lfFaceName, font->logfont.lfHeight);
|
font->logfont.lfFaceName, font->logfont.lfHeight);
|
||||||
|
|
||||||
|
|
||||||
if( physDev->FontInfo )
|
if( physDev->FontInfo )
|
||||||
{
|
{
|
||||||
dprintf_win16drv(stddeb, "UnRealizing FontInfo\n");
|
dprintf_info(win16drv, "UnRealizing FontInfo\n");
|
||||||
nSize = PRTDRV_RealizeObject (physDev->segptrPDEVICE, -DRVOBJ_FONT,
|
nSize = PRTDRV_RealizeObject (physDev->segptrPDEVICE, -DRVOBJ_FONT,
|
||||||
physDev->FontInfo,
|
physDev->FontInfo,
|
||||||
physDev->FontInfo, 0);
|
physDev->FontInfo, 0);
|
||||||
|
@ -130,7 +129,7 @@ HFONT32 WIN16DRV_FONT_SelectObject( DC * dc, HFONT32 hfont, FONTOBJ * font)
|
||||||
physDev->tm.tmCharSet = fi->dfCharSet;
|
physDev->tm.tmCharSet = fi->dfCharSet;
|
||||||
#undef fi
|
#undef fi
|
||||||
|
|
||||||
dprintf_win16drv(stddeb,
|
dprintf_info(win16drv,
|
||||||
"H %d, A %d, D %d, Int %d, Ext %d, AW %d, MW %d, W %d\n",
|
"H %d, A %d, D %d, Int %d, Ext %d, AW %d, MW %d, W %d\n",
|
||||||
physDev->tm.tmHeight,
|
physDev->tm.tmHeight,
|
||||||
physDev->tm.tmAscent,
|
physDev->tm.tmAscent,
|
||||||
|
@ -155,17 +154,18 @@ BOOL32 WIN16DRV_GetCharWidth( DC *dc, UINT32 firstChar, UINT32 lastChar,
|
||||||
|
|
||||||
WIN16DRV_PDEVICE *physDev = (WIN16DRV_PDEVICE *)dc->physDev;
|
WIN16DRV_PDEVICE *physDev = (WIN16DRV_PDEVICE *)dc->physDev;
|
||||||
|
|
||||||
dprintf_win16drv( stddeb, "WIN16DRV_GetCharWidth: %d - %d into %p\n",
|
dprintf_info(win16drv, "WIN16DRV_GetCharWidth: %d - %d into %p\n",
|
||||||
firstChar, lastChar, buffer );
|
firstChar, lastChar, buffer );
|
||||||
|
|
||||||
wRet = PRTDRV_GetCharWidth( physDev->segptrPDEVICE, buffer, firstChar,
|
wRet = PRTDRV_GetCharWidth( physDev->segptrPDEVICE, buffer, firstChar,
|
||||||
lastChar, physDev->FontInfo,
|
lastChar, physDev->FontInfo,
|
||||||
win16drv_SegPtr_DrawMode,
|
win16drv_SegPtr_DrawMode,
|
||||||
win16drv_SegPtr_TextXForm );
|
win16drv_SegPtr_TextXForm );
|
||||||
if( debugging_win16drv )
|
if( debugging_info(win16drv) ){
|
||||||
for(i = 0; i <= lastChar - firstChar; i++)
|
for(i = 0; i <= lastChar - firstChar; i++)
|
||||||
dprintf_win16drv(stddeb, "Char %x: width %d\n", i + firstChar,
|
dprintf_info(win16drv, "Char %x: width %d\n", i + firstChar,
|
||||||
buffer[i]);
|
buffer[i]);
|
||||||
|
}
|
||||||
|
|
||||||
return wRet;
|
return wRet;
|
||||||
}
|
}
|
||||||
|
@ -207,7 +207,7 @@ WORD WINAPI WineEnumDFontCallback(LPLOGFONT16 lpLogFont,
|
||||||
LPTEXTMETRIC16 lpTextMetrics,
|
LPTEXTMETRIC16 lpTextMetrics,
|
||||||
WORD wFontType, LONG lpClientData)
|
WORD wFontType, LONG lpClientData)
|
||||||
{
|
{
|
||||||
dprintf_win16drv(stddeb, "In WineEnumDFontCallback plf=%p\n", lpLogFont);
|
dprintf_info(win16drv, "In WineEnumDFontCallback plf=%p\n", lpLogFont);
|
||||||
return (*(((WEPFC *)lpClientData)->proc))( lpLogFont, lpTextMetrics,
|
return (*(((WEPFC *)lpClientData)->proc))( lpLogFont, lpTextMetrics,
|
||||||
wFontType, ((WEPFC *)lpClientData)->lp );
|
wFontType, ((WEPFC *)lpClientData)->lp );
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,7 +7,6 @@
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include "heap.h"
|
#include "heap.h"
|
||||||
#include "win16drv.h"
|
#include "win16drv.h"
|
||||||
#include "stddebug.h"
|
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
|
@ -61,9 +60,9 @@ WIN16DRV_Rectangle(DC *dc, INT32 left, INT32 top, INT32 right, INT32 bottom)
|
||||||
BOOL32 bRet = 0;
|
BOOL32 bRet = 0;
|
||||||
POINT16 points[2];
|
POINT16 points[2];
|
||||||
|
|
||||||
dprintf_win16drv(stddeb, "In WIN16DRV_Rectangle, x %d y %d DCOrgX %d y %d\n",
|
dprintf_info(win16drv, "In WIN16DRV_Rectangle, x %d y %d DCOrgX %d y %d\n",
|
||||||
left, top, dc->w.DCOrgX, dc->w.DCOrgY);
|
left, top, dc->w.DCOrgX, dc->w.DCOrgY);
|
||||||
dprintf_win16drv(stddeb, "In WIN16DRV_Rectangle, VPortOrgX %d y %d\n",
|
dprintf_info(win16drv, "In WIN16DRV_Rectangle, VPortOrgX %d y %d\n",
|
||||||
dc->vportOrgX, dc->vportOrgY);
|
dc->vportOrgX, dc->vportOrgY);
|
||||||
points[0].x = XLPTODP(dc, left);
|
points[0].x = XLPTODP(dc, left);
|
||||||
points[0].y = YLPTODP(dc, top);
|
points[0].y = YLPTODP(dc, top);
|
||||||
|
@ -153,9 +152,9 @@ WIN16DRV_Ellipse(DC *dc, INT32 left, INT32 top, INT32 right, INT32 bottom)
|
||||||
WIN16DRV_PDEVICE *physDev = (WIN16DRV_PDEVICE *)dc->physDev;
|
WIN16DRV_PDEVICE *physDev = (WIN16DRV_PDEVICE *)dc->physDev;
|
||||||
BOOL32 bRet = 0;
|
BOOL32 bRet = 0;
|
||||||
POINT16 points[2];
|
POINT16 points[2];
|
||||||
dprintf_win16drv(stddeb, "In WIN16DRV_Ellipse, x %d y %d DCOrgX %d y %d\n",
|
dprintf_info(win16drv, "In WIN16DRV_Ellipse, x %d y %d DCOrgX %d y %d\n",
|
||||||
left, top, dc->w.DCOrgX, dc->w.DCOrgY);
|
left, top, dc->w.DCOrgX, dc->w.DCOrgY);
|
||||||
dprintf_win16drv(stddeb, "In WIN16DRV_Ellipse, VPortOrgX %d y %d\n",
|
dprintf_info(win16drv, "In WIN16DRV_Ellipse, VPortOrgX %d y %d\n",
|
||||||
dc->vportOrgX, dc->vportOrgY);
|
dc->vportOrgX, dc->vportOrgY);
|
||||||
points[0].x = XLPTODP(dc, left);
|
points[0].x = XLPTODP(dc, left);
|
||||||
points[0].y = YLPTODP(dc, top);
|
points[0].y = YLPTODP(dc, top);
|
||||||
|
|
|
@ -21,7 +21,6 @@
|
||||||
#include "font.h"
|
#include "font.h"
|
||||||
#include "callback.h"
|
#include "callback.h"
|
||||||
#include "options.h"
|
#include "options.h"
|
||||||
#include "stddebug.h"
|
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
|
||||||
#define SUPPORT_REALIZED_FONTS 1
|
#define SUPPORT_REALIZED_FONTS 1
|
||||||
|
@ -178,7 +177,7 @@ BOOL32 WIN16DRV_CreateDC( DC *dc, LPCSTR driver, LPCSTR device, LPCSTR output,
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
dprintf_win16drv(stddeb, "In creatdc for (%s,%s,%s) initData 0x%p\n",driver, device, output, initData);
|
dprintf_info(win16drv, "In creatdc for (%s,%s,%s) initData 0x%p\n",driver, device, output, initData);
|
||||||
|
|
||||||
physDev = (WIN16DRV_PDEVICE *)HeapAlloc( SystemHeap, 0, sizeof(*physDev) );
|
physDev = (WIN16DRV_PDEVICE *)HeapAlloc( SystemHeap, 0, sizeof(*physDev) );
|
||||||
if (!physDev) return FALSE;
|
if (!physDev) return FALSE;
|
||||||
|
@ -187,11 +186,11 @@ BOOL32 WIN16DRV_CreateDC( DC *dc, LPCSTR driver, LPCSTR device, LPCSTR output,
|
||||||
pLPD = LoadPrinterDriver(driver);
|
pLPD = LoadPrinterDriver(driver);
|
||||||
if (pLPD == NULL)
|
if (pLPD == NULL)
|
||||||
{
|
{
|
||||||
dprintf_win16drv(stddeb, "LPGDI_CreateDC: Failed to find printer driver\n");
|
dprintf_warn(win16drv, "LPGDI_CreateDC: Failed to find printer driver\n");
|
||||||
HeapFree( SystemHeap, 0, physDev );
|
HeapFree( SystemHeap, 0, physDev );
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
dprintf_win16drv(stddeb, "windevCreateDC pLPD 0x%p\n", pLPD);
|
dprintf_info(win16drv, "windevCreateDC pLPD 0x%p\n", pLPD);
|
||||||
|
|
||||||
/* Now Get the device capabilities from the printer driver */
|
/* Now Get the device capabilities from the printer driver */
|
||||||
|
|
||||||
|
@ -227,7 +226,7 @@ BOOL32 WIN16DRV_CreateDC( DC *dc, LPCSTR driver, LPCSTR device, LPCSTR output,
|
||||||
pPDH = (PDEVICE_HEADER *)((BYTE*)PTR_SEG_TO_LIN(physDev->segptrPDEVICE) - sizeof(PDEVICE_HEADER));
|
pPDH = (PDEVICE_HEADER *)((BYTE*)PTR_SEG_TO_LIN(physDev->segptrPDEVICE) - sizeof(PDEVICE_HEADER));
|
||||||
pPDH->pLPD = pLPD;
|
pPDH->pLPD = pLPD;
|
||||||
|
|
||||||
dprintf_win16drv(stddeb, "PRTDRV_Enable: PDEVICE allocated %08lx\n",(DWORD)(physDev->segptrPDEVICE));
|
dprintf_info(win16drv, "PRTDRV_Enable: PDEVICE allocated %08lx\n",(DWORD)(physDev->segptrPDEVICE));
|
||||||
|
|
||||||
/* Now get the printer driver to initialise this data */
|
/* Now get the printer driver to initialise this data */
|
||||||
wRet = PRTDRV_Enable((LPVOID)physDev->segptrPDEVICE, INITPDEVICE, device, driver, output, NULL);
|
wRet = PRTDRV_Enable((LPVOID)physDev->segptrPDEVICE, INITPDEVICE, device, driver, output, NULL);
|
||||||
|
@ -539,7 +538,7 @@ HANDLE16 WINAPI OpenJob(LPSTR lpOutput, LPSTR lpTitle, HDC16 hDC)
|
||||||
HANDLE16 hHandle = (HANDLE16)SP_ERROR;
|
HANDLE16 hHandle = (HANDLE16)SP_ERROR;
|
||||||
PPRINTJOB pPrintJob;
|
PPRINTJOB pPrintJob;
|
||||||
|
|
||||||
dprintf_win16drv(stddeb, "OpenJob: \"%s\" \"%s\" %04x\n", lpOutput, lpTitle, hDC);
|
dprintf_info(win16drv, "OpenJob: \"%s\" \"%s\" %04x\n", lpOutput, lpTitle, hDC);
|
||||||
|
|
||||||
pPrintJob = gPrintJobsTable[0];
|
pPrintJob = gPrintJobsTable[0];
|
||||||
if (pPrintJob == NULL)
|
if (pPrintJob == NULL)
|
||||||
|
@ -564,7 +563,7 @@ HANDLE16 WINAPI OpenJob(LPSTR lpOutput, LPSTR lpTitle, HDC16 hDC)
|
||||||
gPrintJobsTable[pPrintJob->nIndex] = pPrintJob;
|
gPrintJobsTable[pPrintJob->nIndex] = pPrintJob;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
dprintf_win16drv(stddeb, "OpenJob: return %04x\n", hHandle);
|
dprintf_info(win16drv, "OpenJob: return %04x\n", hHandle);
|
||||||
return hHandle;
|
return hHandle;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -573,7 +572,7 @@ int WINAPI CloseJob(HANDLE16 hJob)
|
||||||
int nRet = SP_ERROR;
|
int nRet = SP_ERROR;
|
||||||
PPRINTJOB pPrintJob = NULL;
|
PPRINTJOB pPrintJob = NULL;
|
||||||
|
|
||||||
dprintf_win16drv(stddeb, "CloseJob: %04x\n", hJob);
|
dprintf_info(win16drv, "CloseJob: %04x\n", hJob);
|
||||||
|
|
||||||
pPrintJob = FindPrintJobFromHandle(hJob);
|
pPrintJob = FindPrintJobFromHandle(hJob);
|
||||||
if (pPrintJob != NULL)
|
if (pPrintJob != NULL)
|
||||||
|
@ -591,7 +590,7 @@ int WINAPI WriteSpool(HANDLE16 hJob, LPSTR lpData, WORD cch)
|
||||||
int nRet = SP_ERROR;
|
int nRet = SP_ERROR;
|
||||||
PPRINTJOB pPrintJob = NULL;
|
PPRINTJOB pPrintJob = NULL;
|
||||||
|
|
||||||
dprintf_win16drv(stddeb, "WriteSpool: %04x %08lx %04x\n", hJob, (DWORD)lpData, cch);
|
dprintf_info(win16drv, "WriteSpool: %04x %08lx %04x\n", hJob, (DWORD)lpData, cch);
|
||||||
|
|
||||||
pPrintJob = FindPrintJobFromHandle(hJob);
|
pPrintJob = FindPrintJobFromHandle(hJob);
|
||||||
if (pPrintJob != NULL && pPrintJob->fd >= 0 && cch)
|
if (pPrintJob != NULL && pPrintJob->fd >= 0 && cch)
|
||||||
|
@ -608,7 +607,7 @@ int WINAPI WriteDialog(HANDLE16 hJob, LPSTR lpMsg, WORD cchMsg)
|
||||||
{
|
{
|
||||||
int nRet = 0;
|
int nRet = 0;
|
||||||
|
|
||||||
dprintf_win16drv(stddeb, "WriteDialog: %04x %04x \"%s\"\n", hJob, cchMsg, lpMsg);
|
dprintf_info(win16drv, "WriteDialog: %04x %04x \"%s\"\n", hJob, cchMsg, lpMsg);
|
||||||
|
|
||||||
nRet = MessageBox16(0, lpMsg, "Printing Error", MB_OKCANCEL);
|
nRet = MessageBox16(0, lpMsg, "Printing Error", MB_OKCANCEL);
|
||||||
return nRet;
|
return nRet;
|
||||||
|
@ -618,7 +617,7 @@ int WINAPI DeleteJob(HANDLE16 hJob, WORD wNotUsed)
|
||||||
{
|
{
|
||||||
int nRet;
|
int nRet;
|
||||||
|
|
||||||
dprintf_win16drv(stddeb, "DeleteJob: %04x\n", hJob);
|
dprintf_info(win16drv, "DeleteJob: %04x\n", hJob);
|
||||||
|
|
||||||
nRet = FreePrintJob(hJob);
|
nRet = FreePrintJob(hJob);
|
||||||
return nRet;
|
return nRet;
|
||||||
|
@ -631,13 +630,13 @@ int WINAPI DeleteJob(HANDLE16 hJob, WORD wNotUsed)
|
||||||
*/
|
*/
|
||||||
int WINAPI StartSpoolPage(HANDLE16 hJob)
|
int WINAPI StartSpoolPage(HANDLE16 hJob)
|
||||||
{
|
{
|
||||||
dprintf_win16drv(stddeb, "StartSpoolPage GDI.246 unimplemented\n");
|
dprintf_fixme(win16drv, "StartSpoolPage GDI.246 unimplemented\n");
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
}
|
}
|
||||||
int WINAPI EndSpoolPage(HANDLE16 hJob)
|
int WINAPI EndSpoolPage(HANDLE16 hJob)
|
||||||
{
|
{
|
||||||
dprintf_win16drv(stddeb, "EndSpoolPage GDI.247 unimplemented\n");
|
dprintf_fixme(win16drv, "EndSpoolPage GDI.247 unimplemented\n");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -645,6 +644,6 @@ int WINAPI EndSpoolPage(HANDLE16 hJob)
|
||||||
DWORD WINAPI GetSpoolJob(int nOption, LONG param)
|
DWORD WINAPI GetSpoolJob(int nOption, LONG param)
|
||||||
{
|
{
|
||||||
DWORD retval = 0;
|
DWORD retval = 0;
|
||||||
dprintf_win16drv(stddeb, "In GetSpoolJob param 0x%lx noption %d\n",param, nOption);
|
dprintf_info(win16drv, "In GetSpoolJob param 0x%lx noption %d\n",param, nOption);
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,7 +10,6 @@
|
||||||
#include "brush.h"
|
#include "brush.h"
|
||||||
#include "font.h"
|
#include "font.h"
|
||||||
#include "pen.h"
|
#include "pen.h"
|
||||||
#include "stddebug.h"
|
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
|
||||||
|
|
||||||
|
@ -32,7 +31,7 @@ HGDIOBJ32 WIN16DRV_SelectObject( DC *dc, HGDIOBJ32 handle )
|
||||||
HGDIOBJ32 ret = 0;
|
HGDIOBJ32 ret = 0;
|
||||||
|
|
||||||
if (!ptr) return 0;
|
if (!ptr) return 0;
|
||||||
dprintf_gdi(stddeb, "SelectObject: hdc=%04x %04x\n", dc->hSelf, handle );
|
dprintf_info(gdi, "SelectObject: hdc=%04x %04x\n", dc->hSelf, handle );
|
||||||
|
|
||||||
switch(ptr->wMagic)
|
switch(ptr->wMagic)
|
||||||
{
|
{
|
||||||
|
|
|
@ -8,7 +8,6 @@
|
||||||
#include "color.h"
|
#include "color.h"
|
||||||
#include "win16drv.h"
|
#include "win16drv.h"
|
||||||
#include "heap.h"
|
#include "heap.h"
|
||||||
#include "stddebug.h"
|
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
|
@ -21,7 +20,7 @@ HPEN32 WIN16DRV_PEN_SelectObject( DC * dc, HPEN32 hpen, PENOBJ * pen )
|
||||||
int nSize;
|
int nSize;
|
||||||
LOGPEN16 lPen16;
|
LOGPEN16 lPen16;
|
||||||
dc->w.hPen = hpen;
|
dc->w.hPen = hpen;
|
||||||
dprintf_win16drv(stddeb, "In WIN16DRV_PEN_SelectObject\n");
|
dprintf_info(win16drv, "In WIN16DRV_PEN_SelectObject\n");
|
||||||
lPen16.lopnStyle = pen->logpen.lopnStyle;
|
lPen16.lopnStyle = pen->logpen.lopnStyle;
|
||||||
lPen16.lopnWidth.x = pen->logpen.lopnWidth.x;
|
lPen16.lopnWidth.x = pen->logpen.lopnWidth.x;
|
||||||
lPen16.lopnWidth.y = pen->logpen.lopnWidth.y;
|
lPen16.lopnWidth.y = pen->logpen.lopnWidth.y;
|
||||||
|
@ -29,7 +28,7 @@ HPEN32 WIN16DRV_PEN_SelectObject( DC * dc, HPEN32 hpen, PENOBJ * pen )
|
||||||
|
|
||||||
if ( physDev->PenInfo )
|
if ( physDev->PenInfo )
|
||||||
{
|
{
|
||||||
dprintf_win16drv(stddeb, "UnRealizing PenInfo\n");
|
dprintf_info(win16drv, "UnRealizing PenInfo\n");
|
||||||
nSize = PRTDRV_RealizeObject (physDev->segptrPDEVICE, -DRVOBJ_PEN,
|
nSize = PRTDRV_RealizeObject (physDev->segptrPDEVICE, -DRVOBJ_PEN,
|
||||||
physDev->PenInfo,
|
physDev->PenInfo,
|
||||||
physDev->PenInfo, 0);
|
physDev->PenInfo, 0);
|
||||||
|
|
|
@ -15,7 +15,6 @@
|
||||||
#include "heap.h"
|
#include "heap.h"
|
||||||
#include "brush.h"
|
#include "brush.h"
|
||||||
#include "callback.h"
|
#include "callback.h"
|
||||||
#include "stddebug.h"
|
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
#include "bitmap.h"
|
#include "bitmap.h"
|
||||||
#include "pen.h"
|
#include "pen.h"
|
||||||
|
@ -56,7 +55,7 @@ static void GetPrinterDriverFunctions(HINSTANCE16 hInst, LOADED_PRINTER_DRIVER *
|
||||||
LoadPrinterDrvFunc(ADVANCEDSETUPDIALOG);
|
LoadPrinterDrvFunc(ADVANCEDSETUPDIALOG);
|
||||||
LoadPrinterDrvFunc(DIALOGFN);
|
LoadPrinterDrvFunc(DIALOGFN);
|
||||||
LoadPrinterDrvFunc(PSEUDOEDIT);
|
LoadPrinterDrvFunc(PSEUDOEDIT);
|
||||||
dprintf_win16drv (stddeb,"got func CONTROL 0x%p enable 0x%p enumDfonts 0x%p realizeobject 0x%p extextout 0x%p\n",
|
dprintf_info(win16drv,"got func CONTROL 0x%p enable 0x%p enumDfonts 0x%p realizeobject 0x%p extextout 0x%p\n",
|
||||||
pLPD->fn[FUNC_CONTROL],
|
pLPD->fn[FUNC_CONTROL],
|
||||||
pLPD->fn[FUNC_ENABLE],
|
pLPD->fn[FUNC_ENABLE],
|
||||||
pLPD->fn[FUNC_ENUMDFONTS],
|
pLPD->fn[FUNC_ENUMDFONTS],
|
||||||
|
@ -79,7 +78,7 @@ static LOADED_PRINTER_DRIVER *FindPrinterDriverFromName(const char *pszDriver)
|
||||||
ptmpLPD = gapLoadedPrinterDrivers[nDriverSlot++];
|
ptmpLPD = gapLoadedPrinterDrivers[nDriverSlot++];
|
||||||
if (ptmpLPD != NULL)
|
if (ptmpLPD != NULL)
|
||||||
{
|
{
|
||||||
dprintf_win16drv(stddeb, "Comparing %s,%s\n",ptmpLPD->szDriver,pszDriver);
|
dprintf_info(win16drv, "Comparing %s,%s\n",ptmpLPD->szDriver,pszDriver);
|
||||||
/* Found driver store info, exit loop */
|
/* Found driver store info, exit loop */
|
||||||
if (lstrcmpi32A(ptmpLPD->szDriver, pszDriver) == 0)
|
if (lstrcmpi32A(ptmpLPD->szDriver, pszDriver) == 0)
|
||||||
pLPD = ptmpLPD;
|
pLPD = ptmpLPD;
|
||||||
|
@ -151,7 +150,7 @@ LOADED_PRINTER_DRIVER *LoadPrinterDriver(const char *pszDriver)
|
||||||
/* Failed to load driver */
|
/* Failed to load driver */
|
||||||
fprintf(stderr, "Failed to load printer driver %s\n", pszDriver);
|
fprintf(stderr, "Failed to load printer driver %s\n", pszDriver);
|
||||||
} else {
|
} else {
|
||||||
dprintf_win16drv(stddeb, "Loaded the library\n");
|
dprintf_info(win16drv, "Loaded the library\n");
|
||||||
/* Allocate some memory for printer driver info */
|
/* Allocate some memory for printer driver info */
|
||||||
pLPD = malloc(sizeof(LOADED_PRINTER_DRIVER));
|
pLPD = malloc(sizeof(LOADED_PRINTER_DRIVER));
|
||||||
memset(pLPD, 0 , sizeof(LOADED_PRINTER_DRIVER));
|
memset(pLPD, 0 , sizeof(LOADED_PRINTER_DRIVER));
|
||||||
|
@ -162,7 +161,7 @@ LOADED_PRINTER_DRIVER *LoadPrinterDriver(const char *pszDriver)
|
||||||
/* Get DS for the printer module */
|
/* Get DS for the printer module */
|
||||||
pLPD->ds_reg = hInst;
|
pLPD->ds_reg = hInst;
|
||||||
|
|
||||||
dprintf_win16drv(stddeb, "DS for %s is %x\n", pszDriver, pLPD->ds_reg);
|
dprintf_info(win16drv, "DS for %s is %x\n", pszDriver, pLPD->ds_reg);
|
||||||
|
|
||||||
/* Get address of printer driver functions */
|
/* Get address of printer driver functions */
|
||||||
GetPrinterDriverFunctions(hInst, pLPD);
|
GetPrinterDriverFunctions(hInst, pLPD);
|
||||||
|
@ -189,20 +188,20 @@ INT16 PRTDRV_Control(LPPDEVICE lpDestDev, WORD wfunction, SEGPTR lpInData, SEGPT
|
||||||
WORD wRet = 0;
|
WORD wRet = 0;
|
||||||
LOADED_PRINTER_DRIVER *pLPD = NULL;
|
LOADED_PRINTER_DRIVER *pLPD = NULL;
|
||||||
|
|
||||||
dprintf_win16drv(stddeb, "PRTDRV_Control: %08x 0x%x %08lx %08lx\n", (unsigned int)lpDestDev, wfunction, lpInData, lpOutData);
|
dprintf_info(win16drv, "PRTDRV_Control: %08x 0x%x %08lx %08lx\n", (unsigned int)lpDestDev, wfunction, lpInData, lpOutData);
|
||||||
|
|
||||||
if ((pLPD = FindPrinterDriverFromPDEVICE(lpDestDev)) != NULL)
|
if ((pLPD = FindPrinterDriverFromPDEVICE(lpDestDev)) != NULL)
|
||||||
{
|
{
|
||||||
if (pLPD->fn[FUNC_CONTROL] == NULL)
|
if (pLPD->fn[FUNC_CONTROL] == NULL)
|
||||||
{
|
{
|
||||||
dprintf_win16drv(stddeb, "PRTDRV_Control: Not supported by driver\n");
|
dprintf_warn(win16drv, "PRTDRV_Control: Not supported by driver\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
wRet = Callbacks->CallDrvControlProc( pLPD->fn[FUNC_CONTROL],
|
wRet = Callbacks->CallDrvControlProc( pLPD->fn[FUNC_CONTROL],
|
||||||
(SEGPTR)lpDestDev, wfunction,
|
(SEGPTR)lpDestDev, wfunction,
|
||||||
lpInData, lpOutData );
|
lpInData, lpOutData );
|
||||||
}
|
}
|
||||||
dprintf_win16drv(stddeb, "PRTDRV_Control: return %x\n", wRet);
|
dprintf_info(win16drv, "PRTDRV_Control: return %x\n", wRet);
|
||||||
return wRet;
|
return wRet;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -215,7 +214,7 @@ WORD PRTDRV_Enable(LPVOID lpDevInfo, WORD wStyle, LPCSTR lpDestDevType,
|
||||||
WORD wRet = 0;
|
WORD wRet = 0;
|
||||||
LOADED_PRINTER_DRIVER *pLPD = NULL;
|
LOADED_PRINTER_DRIVER *pLPD = NULL;
|
||||||
|
|
||||||
dprintf_win16drv(stddeb, "PRTDRV_Enable: %s %s\n",lpDestDevType, lpOutputFile);
|
dprintf_info(win16drv, "PRTDRV_Enable: %s %s\n",lpDestDevType, lpOutputFile);
|
||||||
|
|
||||||
/* Get the printer driver info */
|
/* Get the printer driver info */
|
||||||
if (wStyle == INITPDEVICE)
|
if (wStyle == INITPDEVICE)
|
||||||
|
@ -229,7 +228,7 @@ WORD PRTDRV_Enable(LPVOID lpDevInfo, WORD wStyle, LPCSTR lpDestDevType,
|
||||||
WORD wP2;
|
WORD wP2;
|
||||||
|
|
||||||
if (!pLPD->fn[FUNC_ENABLE]) {
|
if (!pLPD->fn[FUNC_ENABLE]) {
|
||||||
dprintf_win16drv(stddeb, "PRTDRV_Enable: Not supported by driver\n");
|
dprintf_warn(win16drv, "PRTDRV_Enable: Not supported by driver\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -260,7 +259,7 @@ WORD PRTDRV_Enable(LPVOID lpDevInfo, WORD wStyle, LPCSTR lpDestDevType,
|
||||||
SEGPTR_FREE(lP1);
|
SEGPTR_FREE(lP1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
dprintf_win16drv(stddeb, "PRTDRV_Enable: return %x\n", wRet);
|
dprintf_info(win16drv, "PRTDRV_Enable: return %x\n", wRet);
|
||||||
return wRet;
|
return wRet;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -274,7 +273,7 @@ WORD PRTDRV_EnumDFonts(LPPDEVICE lpDestDev, LPSTR lpFaceName,
|
||||||
WORD wRet = 0;
|
WORD wRet = 0;
|
||||||
LOADED_PRINTER_DRIVER *pLPD = NULL;
|
LOADED_PRINTER_DRIVER *pLPD = NULL;
|
||||||
|
|
||||||
dprintf_win16drv(stddeb, "PRTDRV_EnumDFonts: %08lx %s %p %p\n",
|
dprintf_info(win16drv, "PRTDRV_EnumDFonts: %08lx %s %p %p\n",
|
||||||
lpDestDev, lpFaceName, lpCallbackFunc, lpClientData);
|
lpDestDev, lpFaceName, lpCallbackFunc, lpClientData);
|
||||||
|
|
||||||
if ((pLPD = FindPrinterDriverFromPDEVICE(lpDestDev)) != NULL)
|
if ((pLPD = FindPrinterDriverFromPDEVICE(lpDestDev)) != NULL)
|
||||||
|
@ -283,7 +282,7 @@ WORD PRTDRV_EnumDFonts(LPPDEVICE lpDestDev, LPSTR lpFaceName,
|
||||||
LPBYTE lP2;
|
LPBYTE lP2;
|
||||||
|
|
||||||
if (pLPD->fn[FUNC_ENUMDFONTS] == NULL) {
|
if (pLPD->fn[FUNC_ENUMDFONTS] == NULL) {
|
||||||
dprintf_win16drv(stddeb, "PRTDRV_EnumDFonts: Not supported by driver\n");
|
dprintf_warn(win16drv, "PRTDRV_EnumDFonts: Not supported by driver\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -300,7 +299,7 @@ WORD PRTDRV_EnumDFonts(LPPDEVICE lpDestDev, LPSTR lpFaceName,
|
||||||
} else
|
} else
|
||||||
fprintf(stderr,"Failed to find device\n");
|
fprintf(stderr,"Failed to find device\n");
|
||||||
|
|
||||||
dprintf_win16drv(stddeb, "PRTDRV_EnumDFonts: return %x\n", wRet);
|
dprintf_info(win16drv, "PRTDRV_EnumDFonts: return %x\n", wRet);
|
||||||
return wRet;
|
return wRet;
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
|
@ -312,7 +311,7 @@ BOOL16 PRTDRV_EnumObj(LPPDEVICE lpDestDev, WORD iStyle,
|
||||||
WORD wRet = 0;
|
WORD wRet = 0;
|
||||||
LOADED_PRINTER_DRIVER *pLPD = NULL;
|
LOADED_PRINTER_DRIVER *pLPD = NULL;
|
||||||
|
|
||||||
dprintf_win16drv(stddeb, "PRTDRV_EnumObj:\n");
|
dprintf_info(win16drv, "PRTDRV_EnumObj:\n");
|
||||||
|
|
||||||
if ((pLPD = FindPrinterDriverFromPDEVICE(lpDestDev)) != NULL)
|
if ((pLPD = FindPrinterDriverFromPDEVICE(lpDestDev)) != NULL)
|
||||||
{
|
{
|
||||||
|
@ -322,7 +321,7 @@ BOOL16 PRTDRV_EnumObj(LPPDEVICE lpDestDev, WORD iStyle,
|
||||||
|
|
||||||
if (pLPD->fn[FUNC_ENUMOBJ] == NULL)
|
if (pLPD->fn[FUNC_ENUMOBJ] == NULL)
|
||||||
{
|
{
|
||||||
dprintf_win16drv(stddeb, "PRTDRV_EnumObj: Not supported by driver\n");
|
dprintf_warn(win16drv, "PRTDRV_EnumObj: Not supported by driver\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -343,7 +342,7 @@ BOOL16 PRTDRV_EnumObj(LPPDEVICE lpDestDev, WORD iStyle,
|
||||||
else
|
else
|
||||||
fprintf(stderr,"Failed to find device\n");
|
fprintf(stderr,"Failed to find device\n");
|
||||||
|
|
||||||
dprintf_win16drv(stddeb, "PRTDRV_EnumObj: return %x\n", wRet);
|
dprintf_info(win16drv, "PRTDRV_EnumObj: return %x\n", wRet);
|
||||||
return wRet;
|
return wRet;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -362,7 +361,7 @@ WORD PRTDRV_Output(LPPDEVICE lpDestDev,
|
||||||
WORD wRet = 0;
|
WORD wRet = 0;
|
||||||
LOADED_PRINTER_DRIVER *pLPD = NULL;
|
LOADED_PRINTER_DRIVER *pLPD = NULL;
|
||||||
|
|
||||||
dprintf_win16drv(stddeb, "PRTDRV_OUTPUT %d\n", wStyle );
|
dprintf_info(win16drv, "PRTDRV_OUTPUT %d\n", wStyle );
|
||||||
|
|
||||||
if ((pLPD = FindPrinterDriverFromPDEVICE(lpDestDev)) != NULL)
|
if ((pLPD = FindPrinterDriverFromPDEVICE(lpDestDev)) != NULL)
|
||||||
{
|
{
|
||||||
|
@ -373,7 +372,7 @@ WORD PRTDRV_Output(LPPDEVICE lpDestDev,
|
||||||
int nSize;
|
int nSize;
|
||||||
if (pLPD->fn[FUNC_OUTPUT] == NULL)
|
if (pLPD->fn[FUNC_OUTPUT] == NULL)
|
||||||
{
|
{
|
||||||
dprintf_win16drv(stddeb, "PRTDRV_Output: Not supported by driver\n");
|
dprintf_warn(win16drv, "PRTDRV_Output: Not supported by driver\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -416,7 +415,7 @@ WORD PRTDRV_Output(LPPDEVICE lpDestDev,
|
||||||
{
|
{
|
||||||
CONV_RECT32TO16( pRect, lP8 );
|
CONV_RECT32TO16( pRect, lP8 );
|
||||||
|
|
||||||
dprintf_win16drv(stddeb, "rect = %d,%d - %d,%d\n",
|
dprintf_info(win16drv, "rect = %d,%d - %d,%d\n",
|
||||||
lP8->left, lP8->top, lP8->right, lP8->bottom );
|
lP8->left, lP8->top, lP8->right, lP8->bottom );
|
||||||
wRet = Callbacks->CallDrvOutputProc(pLPD->fn[FUNC_OUTPUT],
|
wRet = Callbacks->CallDrvOutputProc(pLPD->fn[FUNC_OUTPUT],
|
||||||
lP1, wP2, wP3, SEGPTR_GET(lP4),
|
lP1, wP2, wP3, SEGPTR_GET(lP4),
|
||||||
|
@ -434,7 +433,7 @@ WORD PRTDRV_Output(LPPDEVICE lpDestDev,
|
||||||
}
|
}
|
||||||
SEGPTR_FREE(lP4);
|
SEGPTR_FREE(lP4);
|
||||||
}
|
}
|
||||||
dprintf_win16drv(stddeb, "PRTDRV_Output return %d\n", wRet);
|
dprintf_info(win16drv, "PRTDRV_Output return %d\n", wRet);
|
||||||
return wRet;
|
return wRet;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -448,7 +447,7 @@ DWORD PRTDRV_RealizeObject(LPPDEVICE lpDestDev, WORD wStyle,
|
||||||
WORD dwRet = 0;
|
WORD dwRet = 0;
|
||||||
LOADED_PRINTER_DRIVER *pLPD = NULL;
|
LOADED_PRINTER_DRIVER *pLPD = NULL;
|
||||||
|
|
||||||
dprintf_win16drv(stddeb,
|
dprintf_info(win16drv,
|
||||||
"PRTDRV_RealizeObject: %08lx %04x %p %p %08lx\n",
|
"PRTDRV_RealizeObject: %08lx %04x %p %p %08lx\n",
|
||||||
lpDestDev, wStyle, lpInObj, lpOutObj, lpTextXForm);
|
lpDestDev, wStyle, lpInObj, lpOutObj, lpTextXForm);
|
||||||
|
|
||||||
|
@ -461,7 +460,7 @@ DWORD PRTDRV_RealizeObject(LPPDEVICE lpDestDev, WORD wStyle,
|
||||||
|
|
||||||
if (pLPD->fn[FUNC_REALIZEOBJECT] == NULL)
|
if (pLPD->fn[FUNC_REALIZEOBJECT] == NULL)
|
||||||
{
|
{
|
||||||
dprintf_win16drv(stddeb,
|
dprintf_warn(win16drv,
|
||||||
"PRTDRV_RealizeObject: Not supported by driver\n");
|
"PRTDRV_RealizeObject: Not supported by driver\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -507,7 +506,7 @@ DWORD PRTDRV_RealizeObject(LPPDEVICE lpDestDev, WORD wStyle,
|
||||||
lP4 = SEGPTR_GET( lpOutObj );
|
lP4 = SEGPTR_GET( lpOutObj );
|
||||||
|
|
||||||
lP5 = lpTextXForm;
|
lP5 = lpTextXForm;
|
||||||
dprintf_win16drv(stddeb,
|
dprintf_info(win16drv,
|
||||||
"Calling Realize %08lx %04x %08lx %08lx %08lx\n",
|
"Calling Realize %08lx %04x %08lx %08lx %08lx\n",
|
||||||
lP1, wP2, lP3, lP4, lP5);
|
lP1, wP2, lP3, lP4, lP5);
|
||||||
dwRet = Callbacks->CallDrvRealizeProc(pLPD->fn[FUNC_REALIZEOBJECT],
|
dwRet = Callbacks->CallDrvRealizeProc(pLPD->fn[FUNC_REALIZEOBJECT],
|
||||||
|
@ -516,7 +515,7 @@ DWORD PRTDRV_RealizeObject(LPPDEVICE lpDestDev, WORD wStyle,
|
||||||
SEGPTR_FREE(lpBuf);
|
SEGPTR_FREE(lpBuf);
|
||||||
|
|
||||||
}
|
}
|
||||||
dprintf_win16drv(stddeb, "PRTDRV_RealizeObject: return %x\n", dwRet);
|
dprintf_info(win16drv, "PRTDRV_RealizeObject: return %x\n", dwRet);
|
||||||
return dwRet;
|
return dwRet;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -537,7 +536,7 @@ DWORD PRTDRV_StretchBlt(LPPDEVICE lpDestDev,
|
||||||
WORD wRet = 0;
|
WORD wRet = 0;
|
||||||
LOADED_PRINTER_DRIVER *pLPD = NULL;
|
LOADED_PRINTER_DRIVER *pLPD = NULL;
|
||||||
|
|
||||||
dprintf_win16drv(stddeb, "PRTDRV_StretchBlt:\n");
|
dprintf_info(win16drv, "PRTDRV_StretchBlt:\n");
|
||||||
|
|
||||||
if ((pLPD = FindPrinterDriverFromPDEVICE(lpDestDev)) != NULL)
|
if ((pLPD = FindPrinterDriverFromPDEVICE(lpDestDev)) != NULL)
|
||||||
{
|
{
|
||||||
|
@ -547,7 +546,7 @@ DWORD PRTDRV_StretchBlt(LPPDEVICE lpDestDev,
|
||||||
|
|
||||||
if (pLPD->fn[FUNC_STRETCHBLT] == NULL)
|
if (pLPD->fn[FUNC_STRETCHBLT] == NULL)
|
||||||
{
|
{
|
||||||
dprintf_win16drv(stddeb, "PRTDRV_StretchBlt: Not supported by driver\n");
|
dprintf_warn(win16drv, "PRTDRV_StretchBlt: Not supported by driver\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
lP1 = lpDestDev;
|
lP1 = lpDestDev;
|
||||||
|
@ -591,7 +590,7 @@ DWORD PRTDRV_ExtTextOut(LPPDEVICE lpDestDev, WORD wDestXOrg, WORD wDestYOrg,
|
||||||
DWORD dwRet = 0;
|
DWORD dwRet = 0;
|
||||||
LOADED_PRINTER_DRIVER *pLPD = NULL;
|
LOADED_PRINTER_DRIVER *pLPD = NULL;
|
||||||
|
|
||||||
dprintf_win16drv(stddeb, "PRTDRV_ExtTextOut:\n");
|
dprintf_info(win16drv, "PRTDRV_ExtTextOut:\n");
|
||||||
|
|
||||||
if ((pLPD = FindPrinterDriverFromPDEVICE(lpDestDev)) != NULL)
|
if ((pLPD = FindPrinterDriverFromPDEVICE(lpDestDev)) != NULL)
|
||||||
{
|
{
|
||||||
|
@ -604,7 +603,7 @@ DWORD PRTDRV_ExtTextOut(LPPDEVICE lpDestDev, WORD wDestXOrg, WORD wDestYOrg,
|
||||||
|
|
||||||
if (pLPD->fn[FUNC_EXTTEXTOUT] == NULL)
|
if (pLPD->fn[FUNC_EXTTEXTOUT] == NULL)
|
||||||
{
|
{
|
||||||
dprintf_win16drv(stddeb, "PRTDRV_ExtTextOut: Not supported by driver\n");
|
dprintf_warn(win16drv, "PRTDRV_ExtTextOut: Not supported by driver\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -614,7 +613,7 @@ DWORD PRTDRV_ExtTextOut(LPPDEVICE lpDestDev, WORD wDestXOrg, WORD wDestYOrg,
|
||||||
|
|
||||||
if (lpClipRect != NULL) {
|
if (lpClipRect != NULL) {
|
||||||
lP4 = SEGPTR_NEW(RECT16);
|
lP4 = SEGPTR_NEW(RECT16);
|
||||||
dprintf_win16drv(stddeb, "Adding lpClipRect\n");
|
dprintf_info(win16drv, "Adding lpClipRect\n");
|
||||||
memcpy(lP4,lpClipRect,sizeof(RECT16));
|
memcpy(lP4,lpClipRect,sizeof(RECT16));
|
||||||
} else
|
} else
|
||||||
lP4 = 0L;
|
lP4 = 0L;
|
||||||
|
@ -624,7 +623,7 @@ DWORD PRTDRV_ExtTextOut(LPPDEVICE lpDestDev, WORD wDestXOrg, WORD wDestYOrg,
|
||||||
if (nSize>abs(wCount))
|
if (nSize>abs(wCount))
|
||||||
nSize = abs(wCount);
|
nSize = abs(wCount);
|
||||||
lP5 = SEGPTR_ALLOC(nSize+1);
|
lP5 = SEGPTR_ALLOC(nSize+1);
|
||||||
dprintf_win16drv(stddeb, "Adding lpString (nSize is %d)\n",nSize);
|
dprintf_info(win16drv, "Adding lpString (nSize is %d)\n",nSize);
|
||||||
memcpy(lP5,lpString,nSize);
|
memcpy(lP5,lpString,nSize);
|
||||||
*((char *)lP5 + nSize) = '\0';
|
*((char *)lP5 + nSize) = '\0';
|
||||||
} else
|
} else
|
||||||
|
@ -638,18 +637,18 @@ DWORD PRTDRV_ExtTextOut(LPPDEVICE lpDestDev, WORD wDestXOrg, WORD wDestYOrg,
|
||||||
lP9 = lpTextXForm;
|
lP9 = lpTextXForm;
|
||||||
|
|
||||||
if (lpCharWidths != NULL)
|
if (lpCharWidths != NULL)
|
||||||
dprintf_win16drv(stddeb, "PRTDRV_ExtTextOut: Char widths not supported\n");
|
dprintf_fixme(win16drv, "PRTDRV_ExtTextOut: Char widths not supported\n");
|
||||||
lP10 = 0;
|
lP10 = 0;
|
||||||
|
|
||||||
if (lpOpaqueRect != NULL) {
|
if (lpOpaqueRect != NULL) {
|
||||||
lP11 = SEGPTR_NEW(RECT16);
|
lP11 = SEGPTR_NEW(RECT16);
|
||||||
dprintf_win16drv(stddeb, "Adding lpOpaqueRect\n");
|
dprintf_info(win16drv, "Adding lpOpaqueRect\n");
|
||||||
memcpy(lP11,lpOpaqueRect,sizeof(RECT16));
|
memcpy(lP11,lpOpaqueRect,sizeof(RECT16));
|
||||||
} else
|
} else
|
||||||
lP11 = 0L;
|
lP11 = 0L;
|
||||||
|
|
||||||
wP12 = wOptions;
|
wP12 = wOptions;
|
||||||
dprintf_win16drv(stddeb, "Calling ExtTextOut 0x%lx 0x%x 0x%x %p\n%*s 0x%x 0x%lx 0x%lx\n"
|
dprintf_info(win16drv, "Calling ExtTextOut 0x%lx 0x%x 0x%x %p\n%*s 0x%x 0x%lx 0x%lx\n"
|
||||||
"0x%lx 0x%lx %p 0x%x\n",lP1, wP2, wP3, lP4,
|
"0x%lx 0x%lx %p 0x%x\n",lP1, wP2, wP3, lP4,
|
||||||
nSize,lP5, iP6, lP7, lP8, lP9, lP10,
|
nSize,lP5, iP6, lP7, lP8, lP9, lP10,
|
||||||
lP11, wP12);
|
lP11, wP12);
|
||||||
|
@ -660,7 +659,7 @@ DWORD PRTDRV_ExtTextOut(LPPDEVICE lpDestDev, WORD wDestXOrg, WORD wDestYOrg,
|
||||||
lP8, lP9, lP10,
|
lP8, lP9, lP10,
|
||||||
SEGPTR_GET(lP11), wP12);
|
SEGPTR_GET(lP11), wP12);
|
||||||
}
|
}
|
||||||
dprintf_win16drv(stddeb, "PRTDRV_ExtTextOut: return %lx\n", dwRet);
|
dprintf_info(win16drv, "PRTDRV_ExtTextOut: return %lx\n", dwRet);
|
||||||
return dwRet;
|
return dwRet;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -757,7 +756,7 @@ WORD PRTDRV_GetCharWidth(LPPDEVICE lpDestDev, LPINT32 lpBuffer,
|
||||||
WORD wRet = 0;
|
WORD wRet = 0;
|
||||||
LOADED_PRINTER_DRIVER *pLPD = NULL;
|
LOADED_PRINTER_DRIVER *pLPD = NULL;
|
||||||
|
|
||||||
dprintf_win16drv(stddeb, "PRTDRV_GetCharWidth:\n");
|
dprintf_info(win16drv, "PRTDRV_GetCharWidth:\n");
|
||||||
|
|
||||||
if ((pLPD = FindPrinterDriverFromPDEVICE(lpDestDev)) != NULL)
|
if ((pLPD = FindPrinterDriverFromPDEVICE(lpDestDev)) != NULL)
|
||||||
{
|
{
|
||||||
|
@ -767,7 +766,7 @@ WORD PRTDRV_GetCharWidth(LPPDEVICE lpDestDev, LPINT32 lpBuffer,
|
||||||
|
|
||||||
if (pLPD->fn[FUNC_GETCHARWIDTH] == NULL)
|
if (pLPD->fn[FUNC_GETCHARWIDTH] == NULL)
|
||||||
{
|
{
|
||||||
dprintf_win16drv(stddeb,
|
dprintf_warn(win16drv,
|
||||||
"PRTDRV_GetCharWidth: Not supported by driver\n");
|
"PRTDRV_GetCharWidth: Not supported by driver\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,7 +10,6 @@
|
||||||
#include "win16drv.h"
|
#include "win16drv.h"
|
||||||
#include "dc.h"
|
#include "dc.h"
|
||||||
#include "gdi.h"
|
#include "gdi.h"
|
||||||
#include "stddebug.h"
|
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
|
@ -32,7 +31,7 @@ BOOL32 WIN16DRV_ExtTextOut( DC *dc, INT32 x, INT32 y, UINT32 flags,
|
||||||
if (count == 0)
|
if (count == 0)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
dprintf_win16drv(stddeb, "WIN16DRV_ExtTextOut: %04x %d %d %x %p %*s %p\n",
|
dprintf_info(win16drv, "WIN16DRV_ExtTextOut: %04x %d %d %x %p %*s %p\n",
|
||||||
dc->hSelf, x, y, flags, lprect, count > 0 ? count : 8, str, lpDx);
|
dc->hSelf, x, y, flags, lprect, count > 0 ? count : 8, str, lpDx);
|
||||||
|
|
||||||
|
|
||||||
|
@ -55,7 +54,7 @@ BOOL32 WIN16DRV_ExtTextOut( DC *dc, INT32 x, INT32 y, UINT32 flags,
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
dprintf_win16drv(stddeb, "textalign = %d\n", dc->w.textAlign);
|
dprintf_info(win16drv, "textalign = %d\n", dc->w.textAlign);
|
||||||
|
|
||||||
if (dc->w.textAlign & TA_UPDATECP)
|
if (dc->w.textAlign & TA_UPDATECP)
|
||||||
{
|
{
|
||||||
|
|
|
@ -17,7 +17,6 @@
|
||||||
#include "dc.h"
|
#include "dc.h"
|
||||||
#include "gdi.h"
|
#include "gdi.h"
|
||||||
#include "xmalloc.h"
|
#include "xmalloc.h"
|
||||||
#include "stddebug.h"
|
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
|
||||||
extern void CLIPPING_UpdateGCRegion(DC* );
|
extern void CLIPPING_UpdateGCRegion(DC* );
|
||||||
|
|
|
@ -16,7 +16,6 @@
|
||||||
#include "metafile.h"
|
#include "metafile.h"
|
||||||
#include "options.h"
|
#include "options.h"
|
||||||
#include "x11drv.h"
|
#include "x11drv.h"
|
||||||
#include "stddebug.h"
|
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
#include "xmalloc.h"
|
#include "xmalloc.h"
|
||||||
|
|
||||||
|
@ -1120,12 +1119,12 @@ static BOOL32 BITBLT_InternalStretchBlt( DC *dcDst, INT32 xDst, INT32 yDst,
|
||||||
widthDst = widthDst * dcDst->vportExtX / dcDst->wndExtX;
|
widthDst = widthDst * dcDst->vportExtX / dcDst->wndExtX;
|
||||||
heightDst = heightDst * dcDst->vportExtY / dcDst->wndExtY;
|
heightDst = heightDst * dcDst->vportExtY / dcDst->wndExtY;
|
||||||
|
|
||||||
dprintf_bitblt( stddeb, " vportdst=%d,%d-%d,%d wnddst=%d,%d-%d,%d\n",
|
dprintf_info(bitblt, " vportdst=%d,%d-%d,%d wnddst=%d,%d-%d,%d\n",
|
||||||
dcDst->vportOrgX, dcDst->vportOrgY,
|
dcDst->vportOrgX, dcDst->vportOrgY,
|
||||||
dcDst->vportExtX, dcDst->vportExtY,
|
dcDst->vportExtX, dcDst->vportExtY,
|
||||||
dcDst->wndOrgX, dcDst->wndOrgY,
|
dcDst->wndOrgX, dcDst->wndOrgY,
|
||||||
dcDst->wndExtX, dcDst->wndExtY );
|
dcDst->wndExtX, dcDst->wndExtY );
|
||||||
dprintf_bitblt( stddeb, " rectdst=%d,%d-%d,%d orgdst=%d,%d\n",
|
dprintf_info(bitblt, " rectdst=%d,%d-%d,%d orgdst=%d,%d\n",
|
||||||
xDst, yDst, widthDst, heightDst,
|
xDst, yDst, widthDst, heightDst,
|
||||||
dcDst->w.DCOrgX, dcDst->w.DCOrgY );
|
dcDst->w.DCOrgX, dcDst->w.DCOrgY );
|
||||||
|
|
||||||
|
@ -1136,19 +1135,19 @@ static BOOL32 BITBLT_InternalStretchBlt( DC *dcDst, INT32 xDst, INT32 yDst,
|
||||||
widthSrc = widthSrc * dcSrc->vportExtX / dcSrc->wndExtX;
|
widthSrc = widthSrc * dcSrc->vportExtX / dcSrc->wndExtX;
|
||||||
heightSrc = heightSrc * dcSrc->vportExtY / dcSrc->wndExtY;
|
heightSrc = heightSrc * dcSrc->vportExtY / dcSrc->wndExtY;
|
||||||
fStretch = (widthSrc != widthDst) || (heightSrc != heightDst);
|
fStretch = (widthSrc != widthDst) || (heightSrc != heightDst);
|
||||||
dprintf_bitblt( stddeb," vportsrc=%d,%d-%d,%d wndsrc=%d,%d-%d,%d\n",
|
dprintf_info(bitblt," vportsrc=%d,%d-%d,%d wndsrc=%d,%d-%d,%d\n",
|
||||||
dcSrc->vportOrgX, dcSrc->vportOrgY,
|
dcSrc->vportOrgX, dcSrc->vportOrgY,
|
||||||
dcSrc->vportExtX, dcSrc->vportExtY,
|
dcSrc->vportExtX, dcSrc->vportExtY,
|
||||||
dcSrc->wndOrgX, dcSrc->wndOrgY,
|
dcSrc->wndOrgX, dcSrc->wndOrgY,
|
||||||
dcSrc->wndExtX, dcSrc->wndExtY );
|
dcSrc->wndExtX, dcSrc->wndExtY );
|
||||||
dprintf_bitblt( stddeb, " rectsrc=%d,%d-%d,%d orgsrc=%d,%d\n",
|
dprintf_info(bitblt, " rectsrc=%d,%d-%d,%d orgsrc=%d,%d\n",
|
||||||
xSrc, ySrc, widthSrc, heightSrc,
|
xSrc, ySrc, widthSrc, heightSrc,
|
||||||
dcSrc->w.DCOrgX, dcSrc->w.DCOrgY );
|
dcSrc->w.DCOrgX, dcSrc->w.DCOrgY );
|
||||||
if (!BITBLT_GetVisRectangles( dcDst, xDst, yDst, widthDst, heightDst,
|
if (!BITBLT_GetVisRectangles( dcDst, xDst, yDst, widthDst, heightDst,
|
||||||
dcSrc, xSrc, ySrc, widthSrc, heightSrc,
|
dcSrc, xSrc, ySrc, widthSrc, heightSrc,
|
||||||
&visRectSrc, &visRectDst ))
|
&visRectSrc, &visRectDst ))
|
||||||
return TRUE;
|
return TRUE;
|
||||||
dprintf_bitblt( stddeb, " vissrc=%d,%d-%d,%d visdst=%d,%d-%d,%d\n",
|
dprintf_info(bitblt, " vissrc=%d,%d-%d,%d visdst=%d,%d-%d,%d\n",
|
||||||
visRectSrc.left, visRectSrc.top,
|
visRectSrc.left, visRectSrc.top,
|
||||||
visRectSrc.right, visRectSrc.bottom,
|
visRectSrc.right, visRectSrc.bottom,
|
||||||
visRectDst.left, visRectDst.top,
|
visRectDst.left, visRectDst.top,
|
||||||
|
@ -1160,7 +1159,7 @@ static BOOL32 BITBLT_InternalStretchBlt( DC *dcDst, INT32 xDst, INT32 yDst,
|
||||||
if (!BITBLT_GetVisRectangles( dcDst, xDst, yDst, widthDst, heightDst,
|
if (!BITBLT_GetVisRectangles( dcDst, xDst, yDst, widthDst, heightDst,
|
||||||
NULL, 0, 0, 0, 0, NULL, &visRectDst ))
|
NULL, 0, 0, 0, 0, NULL, &visRectDst ))
|
||||||
return TRUE;
|
return TRUE;
|
||||||
dprintf_bitblt( stddeb, " vissrc=none visdst=%d,%d-%d,%d\n",
|
dprintf_info(bitblt, " vissrc=none visdst=%d,%d-%d,%d\n",
|
||||||
visRectDst.left, visRectDst.top,
|
visRectDst.left, visRectDst.top,
|
||||||
visRectDst.right, visRectDst.bottom );
|
visRectDst.right, visRectDst.bottom );
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,7 +13,6 @@
|
||||||
#include "dc.h"
|
#include "dc.h"
|
||||||
#include "bitmap.h"
|
#include "bitmap.h"
|
||||||
#include "heap.h"
|
#include "heap.h"
|
||||||
#include "stddebug.h"
|
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
|
||||||
extern void CLIPPING_UpdateGCRegion(DC* );
|
extern void CLIPPING_UpdateGCRegion(DC* );
|
||||||
|
|
|
@ -9,7 +9,6 @@
|
||||||
#include "bitmap.h"
|
#include "bitmap.h"
|
||||||
#include "color.h"
|
#include "color.h"
|
||||||
#include "x11drv.h"
|
#include "x11drv.h"
|
||||||
#include "stddebug.h"
|
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
|
||||||
static const char HatchBrushes[NB_HATCH_STYLES + 1][8] =
|
static const char HatchBrushes[NB_HATCH_STYLES + 1][8] =
|
||||||
|
@ -209,7 +208,7 @@ HBRUSH32 X11DRV_BRUSH_SelectObject( DC * dc, HBRUSH32 hbrush, BRUSHOBJ * brush )
|
||||||
BITMAPINFO * bmpInfo;
|
BITMAPINFO * bmpInfo;
|
||||||
HBRUSH16 prevHandle = dc->w.hBrush;
|
HBRUSH16 prevHandle = dc->w.hBrush;
|
||||||
|
|
||||||
dprintf_gdi(stddeb, "Brush_SelectObject: hdc=%04x hbrush=%04x\n",
|
dprintf_info(gdi, "Brush_SelectObject: hdc=%04x hbrush=%04x\n",
|
||||||
dc->hSelf,hbrush);
|
dc->hSelf,hbrush);
|
||||||
#ifdef NOTDEF
|
#ifdef NOTDEF
|
||||||
if (dc->header.wMagic == METAFILE_DC_MAGIC)
|
if (dc->header.wMagic == METAFILE_DC_MAGIC)
|
||||||
|
@ -244,16 +243,16 @@ HBRUSH32 X11DRV_BRUSH_SelectObject( DC * dc, HBRUSH32 hbrush, BRUSHOBJ * brush )
|
||||||
switch(brush->logbrush.lbStyle)
|
switch(brush->logbrush.lbStyle)
|
||||||
{
|
{
|
||||||
case BS_NULL:
|
case BS_NULL:
|
||||||
dprintf_gdi( stddeb,"BS_NULL\n" );
|
dprintf_info(gdi,"BS_NULL\n" );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case BS_SOLID:
|
case BS_SOLID:
|
||||||
dprintf_gdi( stddeb,"BS_SOLID\n" );
|
dprintf_info(gdi,"BS_SOLID\n" );
|
||||||
BRUSH_SelectSolidBrush( dc, brush->logbrush.lbColor );
|
BRUSH_SelectSolidBrush( dc, brush->logbrush.lbColor );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case BS_HATCHED:
|
case BS_HATCHED:
|
||||||
dprintf_gdi( stddeb, "BS_HATCHED\n" );
|
dprintf_info(gdi, "BS_HATCHED\n" );
|
||||||
dc->u.x.brush.pixel = COLOR_ToPhysical( dc, brush->logbrush.lbColor );
|
dc->u.x.brush.pixel = COLOR_ToPhysical( dc, brush->logbrush.lbColor );
|
||||||
dc->u.x.brush.pixmap = TSXCreateBitmapFromData( display, rootWindow,
|
dc->u.x.brush.pixmap = TSXCreateBitmapFromData( display, rootWindow,
|
||||||
HatchBrushes[brush->logbrush.lbHatch], 8, 8 );
|
HatchBrushes[brush->logbrush.lbHatch], 8, 8 );
|
||||||
|
@ -261,12 +260,12 @@ HBRUSH32 X11DRV_BRUSH_SelectObject( DC * dc, HBRUSH32 hbrush, BRUSHOBJ * brush )
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case BS_PATTERN:
|
case BS_PATTERN:
|
||||||
dprintf_gdi( stddeb, "BS_PATTERN\n");
|
dprintf_info(gdi, "BS_PATTERN\n");
|
||||||
BRUSH_SelectPatternBrush( dc, (HBRUSH16)brush->logbrush.lbHatch );
|
BRUSH_SelectPatternBrush( dc, (HBRUSH16)brush->logbrush.lbHatch );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case BS_DIBPATTERN:
|
case BS_DIBPATTERN:
|
||||||
dprintf_gdi( stddeb, "BS_DIBPATTERN\n");
|
dprintf_info(gdi, "BS_DIBPATTERN\n");
|
||||||
if ((bmpInfo = (BITMAPINFO *) GlobalLock16( (HGLOBAL16)brush->logbrush.lbHatch )))
|
if ((bmpInfo = (BITMAPINFO *) GlobalLock16( (HGLOBAL16)brush->logbrush.lbHatch )))
|
||||||
{
|
{
|
||||||
int size = DIB_BitmapInfoSize( bmpInfo, brush->logbrush.lbColor );
|
int size = DIB_BitmapInfoSize( bmpInfo, brush->logbrush.lbColor );
|
||||||
|
|
|
@ -8,7 +8,6 @@
|
||||||
#include "dc.h"
|
#include "dc.h"
|
||||||
#include "x11drv.h"
|
#include "x11drv.h"
|
||||||
#include "region.h"
|
#include "region.h"
|
||||||
#include "stddebug.h"
|
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
#include "heap.h"
|
#include "heap.h"
|
||||||
|
|
||||||
|
|
|
@ -25,7 +25,6 @@
|
||||||
#include "bitmap.h"
|
#include "bitmap.h"
|
||||||
#include "callback.h"
|
#include "callback.h"
|
||||||
#include "metafile.h"
|
#include "metafile.h"
|
||||||
#include "stddebug.h"
|
|
||||||
#include "palette.h"
|
#include "palette.h"
|
||||||
#include "color.h"
|
#include "color.h"
|
||||||
#include "region.h"
|
#include "region.h"
|
||||||
|
@ -271,7 +270,7 @@ BOOL32
|
||||||
X11DRV_RoundRect( DC *dc, INT32 left, INT32 top, INT32 right,
|
X11DRV_RoundRect( DC *dc, INT32 left, INT32 top, INT32 right,
|
||||||
INT32 bottom, INT32 ell_width, INT32 ell_height )
|
INT32 bottom, INT32 ell_width, INT32 ell_height )
|
||||||
{
|
{
|
||||||
dprintf_graphics(stddeb, "X11DRV_RoundRect(%d %d %d %d %d %d\n",
|
dprintf_info(graphics, "X11DRV_RoundRect(%d %d %d %d %d %d\n",
|
||||||
left, top, right, bottom, ell_width, ell_height);
|
left, top, right, bottom, ell_width, ell_height);
|
||||||
|
|
||||||
left = XLPTODP( dc, left );
|
left = XLPTODP( dc, left );
|
||||||
|
@ -695,7 +694,7 @@ X11DRV_ExtFloodFill( DC *dc, INT32 x, INT32 y, COLORREF color,
|
||||||
BOOL32 result;
|
BOOL32 result;
|
||||||
struct FloodFill_params params = { dc, x, y, color, fillType };
|
struct FloodFill_params params = { dc, x, y, color, fillType };
|
||||||
|
|
||||||
dprintf_graphics( stddeb, "X11DRV_ExtFloodFill %d,%d %06lx %d\n",
|
dprintf_info(graphics, "X11DRV_ExtFloodFill %d,%d %06lx %d\n",
|
||||||
x, y, color, fillType );
|
x, y, color, fillType );
|
||||||
|
|
||||||
if (!PtVisible32( dc->hSelf, x, y )) return FALSE;
|
if (!PtVisible32( dc->hSelf, x, y )) return FALSE;
|
||||||
|
|
|
@ -10,7 +10,6 @@
|
||||||
#include "brush.h"
|
#include "brush.h"
|
||||||
#include "font.h"
|
#include "font.h"
|
||||||
#include "pen.h"
|
#include "pen.h"
|
||||||
#include "stddebug.h"
|
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
|
||||||
|
|
||||||
|
@ -32,7 +31,7 @@ HGDIOBJ32 X11DRV_SelectObject( DC *dc, HGDIOBJ32 handle )
|
||||||
HGDIOBJ32 ret = 0;
|
HGDIOBJ32 ret = 0;
|
||||||
|
|
||||||
if (!ptr) return 0;
|
if (!ptr) return 0;
|
||||||
dprintf_gdi(stddeb, "SelectObject: hdc=%04x %04x\n", dc->hSelf, handle );
|
dprintf_info(gdi, "SelectObject: hdc=%04x %04x\n", dc->hSelf, handle );
|
||||||
|
|
||||||
switch(ptr->wMagic)
|
switch(ptr->wMagic)
|
||||||
{
|
{
|
||||||
|
|
|
@ -6,7 +6,6 @@
|
||||||
|
|
||||||
#include "pen.h"
|
#include "pen.h"
|
||||||
#include "color.h"
|
#include "color.h"
|
||||||
#include "stddebug.h"
|
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
|
||||||
static const char PEN_dash[] = { 5,3 }; /* ----- ----- ----- */
|
static const char PEN_dash[] = { 5,3 }; /* ----- ----- ----- */
|
||||||
|
|
|
@ -13,8 +13,6 @@
|
||||||
/*#include "callback.h"*/
|
/*#include "callback.h"*/
|
||||||
#include "heap.h"
|
#include "heap.h"
|
||||||
#include "x11font.h"
|
#include "x11font.h"
|
||||||
#include "stddebug.h"
|
|
||||||
/* #define DEBUG_TEXT */
|
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
|
||||||
#define SWAP_INT(a,b) { int t = a; a = b; b = t; }
|
#define SWAP_INT(a,b) { int t = a; a = b; b = t; }
|
||||||
|
@ -45,10 +43,10 @@ X11DRV_ExtTextOut( DC *dc, INT32 x, INT32 y, UINT32 flags,
|
||||||
lfUnderline = (pfo->fo_flags & FO_SYNTH_UNDERLINE) ? 1 : 0;
|
lfUnderline = (pfo->fo_flags & FO_SYNTH_UNDERLINE) ? 1 : 0;
|
||||||
lfStrikeOut = (pfo->fo_flags & FO_SYNTH_STRIKEOUT) ? 1 : 0;
|
lfStrikeOut = (pfo->fo_flags & FO_SYNTH_STRIKEOUT) ? 1 : 0;
|
||||||
|
|
||||||
dprintf_text(stddeb,"ExtTextOut: hdc=%04x df=%04x %d,%d '%.*s', %d flags=%d\n",
|
dprintf_info(text,"ExtTextOut: hdc=%04x df=%04x %d,%d '%.*s', %d flags=%d\n",
|
||||||
dc->hSelf, (UINT16)(dc->u.x.font), x, y, (int)count, str, count, flags);
|
dc->hSelf, (UINT16)(dc->u.x.font), x, y, (int)count, str, count, flags);
|
||||||
|
|
||||||
if (lprect != NULL) dprintf_text(stddeb, "\trect=(%d,%d- %d,%d)\n",
|
if (lprect != NULL) dprintf_info(text, "\trect=(%d,%d- %d,%d)\n",
|
||||||
lprect->left, lprect->top,
|
lprect->left, lprect->top,
|
||||||
lprect->right, lprect->bottom );
|
lprect->right, lprect->bottom );
|
||||||
/* Setup coordinates */
|
/* Setup coordinates */
|
||||||
|
@ -87,7 +85,7 @@ X11DRV_ExtTextOut( DC *dc, INT32 x, INT32 y, UINT32 flags,
|
||||||
x = XLPTODP( dc, x );
|
x = XLPTODP( dc, x );
|
||||||
y = YLPTODP( dc, y );
|
y = YLPTODP( dc, y );
|
||||||
|
|
||||||
dprintf_text(stddeb,"\treal coord: x=%i, y=%i, rect=(%d,%d-%d,%d)\n",
|
dprintf_info(text,"\treal coord: x=%i, y=%i, rect=(%d,%d-%d,%d)\n",
|
||||||
x, y, rect.left, rect.top, rect.right, rect.bottom);
|
x, y, rect.left, rect.top, rect.right, rect.bottom);
|
||||||
|
|
||||||
/* Draw the rectangle */
|
/* Draw the rectangle */
|
||||||
|
|
|
@ -22,7 +22,6 @@
|
||||||
#include "options.h"
|
#include "options.h"
|
||||||
#include "x11font.h"
|
#include "x11font.h"
|
||||||
#include "font.h"
|
#include "font.h"
|
||||||
#include "stddebug.h"
|
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
|
||||||
#define DEBUG_FONT_INIT 1
|
#define DEBUG_FONT_INIT 1
|
||||||
|
@ -524,7 +523,7 @@ static BOOL32 LFD_ComposeLFD( fontObject* fo,
|
||||||
sprintf( lpch, "%i-*-*-*-*-*-%s*", fo->fi->lfd_height, lpEncoding );
|
sprintf( lpch, "%i-*-*-*-*-*-%s*", fo->fi->lfd_height, lpEncoding );
|
||||||
}
|
}
|
||||||
|
|
||||||
dprintf_font(stddeb,"\tLFD: %s\n", lpLFD );
|
dprintf_info(font,"\tLFD: %s\n", lpLFD );
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -826,7 +825,7 @@ static void XFONT_WindowsNames( char* buffer )
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef DEBUG_FONT_INIT
|
#ifdef DEBUG_FONT_INIT
|
||||||
dprintf_font(stddeb,"typeface \'%s\'\n", fr->lfFaceName);
|
dprintf_info(font,"typeface \'%s\'\n", fr->lfFaceName);
|
||||||
#endif
|
#endif
|
||||||
fr->fr_flags |= FR_NAMESET;
|
fr->fr_flags |= FR_NAMESET;
|
||||||
}
|
}
|
||||||
|
@ -867,7 +866,7 @@ static fontAlias* XFONT_CreateAlias( LPCSTR lpTypeFace, LPCSTR lpAlias )
|
||||||
if( !lstrcmpi32A( pfa->faTypeFace, lpAlias ) )
|
if( !lstrcmpi32A( pfa->faTypeFace, lpAlias ) )
|
||||||
{
|
{
|
||||||
#ifdef DEBUG_FONT_INIT
|
#ifdef DEBUG_FONT_INIT
|
||||||
dprintf_font(stddeb,"\tredundant alias '%s' -> '%s'\n", lpAlias, lpTypeFace );
|
dprintf_info(font,"\tredundant alias '%s' -> '%s'\n", lpAlias, lpTypeFace );
|
||||||
#endif
|
#endif
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -887,7 +886,7 @@ static fontAlias* XFONT_CreateAlias( LPCSTR lpTypeFace, LPCSTR lpAlias )
|
||||||
lstrcpy32A( pfa->faAlias, lpAlias );
|
lstrcpy32A( pfa->faAlias, lpAlias );
|
||||||
|
|
||||||
#ifdef DEBUG_FONT_INIT
|
#ifdef DEBUG_FONT_INIT
|
||||||
dprintf_font(stddeb, "\tadded alias '%s' for %s\n", lpAlias, lpTypeFace );
|
dprintf_info(font, "\tadded alias '%s' for %s\n", lpAlias, lpTypeFace );
|
||||||
#endif
|
#endif
|
||||||
return pfa;
|
return pfa;
|
||||||
}
|
}
|
||||||
|
@ -989,7 +988,7 @@ static void XFONT_LoadAliases( char** buffer, int buf_size )
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef DEBUG_FONT_INIT
|
#ifdef DEBUG_FONT_INIT
|
||||||
dprintf_font(stddeb, "\tsubstituted '%s' with %s\n",
|
dprintf_info(font, "\tsubstituted '%s' with %s\n",
|
||||||
frMatch->lfFaceName, lpAlias );
|
frMatch->lfFaceName, lpAlias );
|
||||||
#endif
|
#endif
|
||||||
lstrcpyn32A( frMatch->lfFaceName, lpAlias, LF_FACESIZE );
|
lstrcpyn32A( frMatch->lfFaceName, lpAlias, LF_FACESIZE );
|
||||||
|
@ -1063,7 +1062,7 @@ static BOOL32 XFONT_ReadCachedMetrics( int fd, int res, unsigned x_checksum, int
|
||||||
fontResource* pfr = fontList;
|
fontResource* pfr = fontList;
|
||||||
fontInfo* pfi = NULL;
|
fontInfo* pfi = NULL;
|
||||||
|
|
||||||
dprintf_font(stddeb,"Reading cached font metrics:\n");
|
dprintf_info(font,"Reading cached font metrics:\n");
|
||||||
|
|
||||||
read( fd, fontList, i); /* read all metrics at once */
|
read( fd, fontList, i); /* read all metrics at once */
|
||||||
while( offset < length )
|
while( offset < length )
|
||||||
|
@ -1103,7 +1102,7 @@ static BOOL32 XFONT_ReadCachedMetrics( int fd, int res, unsigned x_checksum, int
|
||||||
offset += sizeof(int);
|
offset += sizeof(int);
|
||||||
for( pfr = fontList; pfr; pfr = pfr->next )
|
for( pfr = fontList; pfr; pfr = pfr->next )
|
||||||
{
|
{
|
||||||
dprintf_font(stddeb,"\t%s, %i instances\n", lpch, pfr->count );
|
dprintf_info(font,"\t%s, %i instances\n", lpch, pfr->count );
|
||||||
pfr->resource = lpch;
|
pfr->resource = lpch;
|
||||||
while( TRUE )
|
while( TRUE )
|
||||||
{
|
{
|
||||||
|
@ -1159,13 +1158,13 @@ static BOOL32 XFONT_WriteCachedMetrics( int fd, unsigned x_checksum, int x_count
|
||||||
i += n_ff * sizeof(fontResource) + j * sizeof(fontInfo) + sizeof(int);
|
i += n_ff * sizeof(fontResource) + j * sizeof(fontInfo) + sizeof(int);
|
||||||
write( fd, &i, sizeof(int) );
|
write( fd, &i, sizeof(int) );
|
||||||
|
|
||||||
dprintf_font(stddeb,"Writing font cache:\n");
|
dprintf_info(font,"Writing font cache:\n");
|
||||||
|
|
||||||
for( pfr = fontList; pfr; pfr = pfr->next )
|
for( pfr = fontList; pfr; pfr = pfr->next )
|
||||||
{
|
{
|
||||||
fontInfo fi;
|
fontInfo fi;
|
||||||
|
|
||||||
dprintf_font(stddeb,"\t%s, %i instances\n", pfr->resource, pfr->count );
|
dprintf_info(font,"\t%s, %i instances\n", pfr->resource, pfr->count );
|
||||||
|
|
||||||
i = write( fd, pfr, sizeof(fontResource) );
|
i = write( fd, pfr, sizeof(fontResource) );
|
||||||
if( i == sizeof(fontResource) )
|
if( i == sizeof(fontResource) )
|
||||||
|
@ -1324,7 +1323,7 @@ BOOL32 X11DRV_FONT_Init( DeviceCaps* pDevCaps )
|
||||||
|
|
||||||
x_pattern = TSXListFonts(display, "*", MAX_FONT_FAMILIES * 16, &x_count );
|
x_pattern = TSXListFonts(display, "*", MAX_FONT_FAMILIES * 16, &x_count );
|
||||||
|
|
||||||
dprintf_font(stddeb,"Font Mapper: initializing %i fonts [LPY=%i, XDR=%i, DR=%i]\n",
|
dprintf_info(font,"Font Mapper: initializing %i fonts [LPY=%i, XDR=%i, DR=%i]\n",
|
||||||
x_count, pDevCaps->logPixelsY, DefResolution, res);
|
x_count, pDevCaps->logPixelsY, DefResolution, res);
|
||||||
for( i = x_checksum = 0; i < x_count; i++ )
|
for( i = x_checksum = 0; i < x_count; i++ )
|
||||||
{
|
{
|
||||||
|
@ -1397,7 +1396,7 @@ BOOL32 X11DRV_FONT_Init( DeviceCaps* pDevCaps )
|
||||||
lstrcpyn32A( fr->resource, typeface, j + 1 );
|
lstrcpyn32A( fr->resource, typeface, j + 1 );
|
||||||
|
|
||||||
#ifdef DEBUG_FONT_INIT
|
#ifdef DEBUG_FONT_INIT
|
||||||
dprintf_font(stddeb," family: %s\n", fr->resource );
|
dprintf_info(font," family: %s\n", fr->resource );
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if( pfr ) pfr->next = fr;
|
if( pfr ) pfr->next = fr;
|
||||||
|
@ -1441,7 +1440,7 @@ BOOL32 X11DRV_FONT_Init( DeviceCaps* pDevCaps )
|
||||||
TSXFreeFont( display, x_fs );
|
TSXFreeFont( display, x_fs );
|
||||||
|
|
||||||
#ifdef DEBUG_FONT_INIT
|
#ifdef DEBUG_FONT_INIT
|
||||||
dprintf_font(stddeb,"\t[% 2ipt] '%s'\n", fi->df.dfPoints, typeface );
|
dprintf_info(font,"\t[% 2ipt] '%s'\n", fi->df.dfPoints, typeface );
|
||||||
#endif
|
#endif
|
||||||
XFONT_CheckFIList( fr, fi, REMOVE_SUBSETS );
|
XFONT_CheckFIList( fr, fi, REMOVE_SUBSETS );
|
||||||
fi = NULL; /* preventing reuse */
|
fi = NULL; /* preventing reuse */
|
||||||
|
@ -1486,7 +1485,7 @@ BOOL32 X11DRV_FONT_Init( DeviceCaps* pDevCaps )
|
||||||
XFONT_GrowFreeList(0, fontCacheSize - 1);
|
XFONT_GrowFreeList(0, fontCacheSize - 1);
|
||||||
|
|
||||||
#ifdef DEBUG_FONT_INIT
|
#ifdef DEBUG_FONT_INIT
|
||||||
dprintf_font(stddeb,"done!\n");
|
dprintf_info(font,"done!\n");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* update text caps parameter */
|
/* update text caps parameter */
|
||||||
|
@ -1550,7 +1549,7 @@ static UINT32 XFONT_Match( fontMatch* pfm )
|
||||||
BOOL32 bScale = pfi->fi_flags & FI_SCALABLE;
|
BOOL32 bScale = pfi->fi_flags & FI_SCALABLE;
|
||||||
INT32 d, h;
|
INT32 d, h;
|
||||||
|
|
||||||
dprintf_font( stddeb,"\t[ %-2ipt h=%-3i w=%-3i %s%s]", pfi->df.dfPoints,
|
dprintf_info(font,"\t[ %-2ipt h=%-3i w=%-3i %s%s]\n", pfi->df.dfPoints,
|
||||||
pfi->df.dfPixHeight, pfi->df.dfAvgWidth,
|
pfi->df.dfPixHeight, pfi->df.dfAvgWidth,
|
||||||
(pfi->df.dfWeight > 400) ? "Bold " : "Normal ",
|
(pfi->df.dfWeight > 400) ? "Bold " : "Normal ",
|
||||||
(pfi->df.dfItalic) ? "Italic" : "" );
|
(pfi->df.dfItalic) ? "Italic" : "" );
|
||||||
|
@ -1640,7 +1639,7 @@ static UINT32 XFONT_Match( fontMatch* pfm )
|
||||||
if( penalty && pfi->lfd_resolution != DefResolution )
|
if( penalty && pfi->lfd_resolution != DefResolution )
|
||||||
penalty++;
|
penalty++;
|
||||||
|
|
||||||
dprintf_font(stddeb,"-> %i\n", penalty );
|
dprintf_info(font," returning %i\n", penalty );
|
||||||
|
|
||||||
return penalty;
|
return penalty;
|
||||||
}
|
}
|
||||||
|
@ -1718,7 +1717,7 @@ static void XFONT_CheckFIList( fontResource* fr, fontInfo* fi, int action)
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef DEBUG_FONT_INIT
|
#ifdef DEBUG_FONT_INIT
|
||||||
if( i ) dprintf_font(stddeb,"\t purged %i subsets [%i]\n", i , fr->count);
|
if( i ) dprintf_info(font,"\t purged %i subsets [%i]\n", i , fr->count);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1761,7 +1760,7 @@ static BOOL32 XFONT_MatchDeviceFont( fontResource* start, fontMatch* pfm )
|
||||||
|
|
||||||
if( fm.pfr ) /* match family */
|
if( fm.pfr ) /* match family */
|
||||||
{
|
{
|
||||||
dprintf_font(stddeb, "%s\n", fm.pfr->lfFaceName );
|
dprintf_info(font, "%s\n", fm.pfr->lfFaceName );
|
||||||
|
|
||||||
XFONT_MatchFIList( &fm );
|
XFONT_MatchFIList( &fm );
|
||||||
*pfm = fm;
|
*pfm = fm;
|
||||||
|
@ -1775,7 +1774,7 @@ static BOOL32 XFONT_MatchDeviceFont( fontResource* start, fontMatch* pfm )
|
||||||
for( start = fontList; start && score; start = start->next )
|
for( start = fontList; start && score; start = start->next )
|
||||||
{
|
{
|
||||||
fm.pfr = start;
|
fm.pfr = start;
|
||||||
dprintf_font(stddeb, "%s\n", fm.pfr->lfFaceName );
|
dprintf_info(font, "%s\n", fm.pfr->lfFaceName );
|
||||||
|
|
||||||
current_score = XFONT_MatchFIList( &fm );
|
current_score = XFONT_MatchFIList( &fm );
|
||||||
if( current_score < score )
|
if( current_score < score )
|
||||||
|
@ -1850,7 +1849,7 @@ static fontObject* XFONT_GetCacheEntry()
|
||||||
{
|
{
|
||||||
int prev_i, prev_j, j;
|
int prev_i, prev_j, j;
|
||||||
|
|
||||||
dprintf_font(stddeb,"font cache is full\n");
|
dprintf_info(font,"font cache is full\n");
|
||||||
|
|
||||||
/* lookup the least recently used font */
|
/* lookup the least recently used font */
|
||||||
|
|
||||||
|
@ -1869,7 +1868,7 @@ static fontObject* XFONT_GetCacheEntry()
|
||||||
{
|
{
|
||||||
/* detach from the lru list */
|
/* detach from the lru list */
|
||||||
|
|
||||||
dprintf_font(stddeb,"\tfreeing entry %i\n", j );
|
dprintf_info(font,"\tfreeing entry %i\n", j );
|
||||||
|
|
||||||
if( prev_j >= 0 )
|
if( prev_j >= 0 )
|
||||||
fontCache[prev_j].lru = fontCache[j].lru;
|
fontCache[prev_j].lru = fontCache[j].lru;
|
||||||
|
@ -1887,7 +1886,7 @@ static fontObject* XFONT_GetCacheEntry()
|
||||||
|
|
||||||
prev_i = fontCacheSize + FONTCACHE;
|
prev_i = fontCacheSize + FONTCACHE;
|
||||||
|
|
||||||
dprintf_font(stddeb,"\tgrowing font cache from %i to %i\n", fontCacheSize, prev_i );
|
dprintf_info(font,"\tgrowing font cache from %i to %i\n", fontCacheSize, prev_i );
|
||||||
|
|
||||||
if( (newCache = (fontObject*)HeapReAlloc(SystemHeap, 0,
|
if( (newCache = (fontObject*)HeapReAlloc(SystemHeap, 0,
|
||||||
fontCache, prev_i)) )
|
fontCache, prev_i)) )
|
||||||
|
@ -1942,7 +1941,7 @@ static X_PHYSFONT XFONT_RealizeFont( LPLOGFONT16 plf )
|
||||||
{
|
{
|
||||||
UINT32 uRelaxLevel = 0;
|
UINT32 uRelaxLevel = 0;
|
||||||
|
|
||||||
dprintf_font(stddeb,"XRealizeFont: (%u) '%s' h=%i weight=%i %s\n",
|
dprintf_info(font,"XRealizeFont: (%u) '%s' h=%i weight=%i %s\n",
|
||||||
plf->lfCharSet, plf->lfFaceName, plf->lfHeight,
|
plf->lfCharSet, plf->lfFaceName, plf->lfHeight,
|
||||||
plf->lfWeight, (plf->lfItalic) ? "Italic" : "" );
|
plf->lfWeight, (plf->lfItalic) ? "Italic" : "" );
|
||||||
|
|
||||||
|
@ -2020,7 +2019,7 @@ static X_PHYSFONT XFONT_RealizeFont( LPLOGFONT16 plf )
|
||||||
pfo->lru = fontMRU;
|
pfo->lru = fontMRU;
|
||||||
fontMRU = (pfo - fontCache);
|
fontMRU = (pfo - fontCache);
|
||||||
|
|
||||||
dprintf_font(stddeb,"physfont %i\n", fontMRU);
|
dprintf_info(font,"physfont %i\n", fontMRU);
|
||||||
|
|
||||||
return (X_PHYSFONT)(X_PFONT_MAGIC | fontMRU);
|
return (X_PHYSFONT)(X_PFONT_MAGIC | fontMRU);
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,7 +18,6 @@
|
||||||
#include "stackframe.h"
|
#include "stackframe.h"
|
||||||
#include "user.h"
|
#include "user.h"
|
||||||
#include "process.h"
|
#include "process.h"
|
||||||
#include "stddebug.h"
|
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
|
||||||
/* Built-in modules descriptors */
|
/* Built-in modules descriptors */
|
||||||
|
@ -142,7 +141,7 @@ static HMODULE16 BUILTIN_DoLoadModule16( const WIN16_DESCRIPTOR *descr )
|
||||||
if (!hModule) return 0;
|
if (!hModule) return 0;
|
||||||
FarSetOwner( hModule, hModule );
|
FarSetOwner( hModule, hModule );
|
||||||
|
|
||||||
dprintf_module( stddeb, "Built-in %s: hmodule=%04x\n",
|
dprintf_info(module, "Built-in %s: hmodule=%04x\n",
|
||||||
descr->name, hModule );
|
descr->name, hModule );
|
||||||
pModule = (NE_MODULE *)GlobalLock16( hModule );
|
pModule = (NE_MODULE *)GlobalLock16( hModule );
|
||||||
pModule->self = hModule;
|
pModule->self = hModule;
|
||||||
|
@ -186,6 +185,8 @@ BOOL32 BUILTIN_Init(void)
|
||||||
WORD vector;
|
WORD vector;
|
||||||
HMODULE16 hModule;
|
HMODULE16 hModule;
|
||||||
|
|
||||||
|
fnBUILTIN_LoadModule = BUILTIN_LoadModule;
|
||||||
|
|
||||||
for (dll = BuiltinDLLs; dll->descr; dll++)
|
for (dll = BuiltinDLLs; dll->descr; dll++)
|
||||||
{
|
{
|
||||||
if (dll->flags & DLL_FLAG_ALWAYS_USED)
|
if (dll->flags & DLL_FLAG_ALWAYS_USED)
|
||||||
|
|
|
@ -2,10 +2,10 @@ name compobj
|
||||||
type win16
|
type win16
|
||||||
|
|
||||||
1 pascal CoBuildVersion() CoBuildVersion
|
1 pascal CoBuildVersion() CoBuildVersion
|
||||||
2 pascal CoInitialize(long) CoInitialize
|
2 pascal CoInitialize(long) CoInitialize16
|
||||||
3 pascal CoUninitialize() CoUnitialize
|
3 pascal CoUninitialize() CoUnitialize
|
||||||
4 pascal CoGetMalloc(long ptr) CoGetMalloc
|
4 pascal CoGetMalloc(long ptr) CoGetMalloc16
|
||||||
5 pascal CoRegisterClassObject(ptr ptr long long ptr) CoRegisterClassObject
|
5 pascal CoRegisterClassObject(ptr ptr long long ptr) CoRegisterClassObject16
|
||||||
6 stub COREVOKECLASSOBJECT
|
6 stub COREVOKECLASSOBJECT
|
||||||
7 stub COGETCLASSOBJECT
|
7 stub COGETCLASSOBJECT
|
||||||
8 stub COMARSHALINTERFACE
|
8 stub COMARSHALINTERFACE
|
||||||
|
@ -19,8 +19,8 @@ type win16
|
||||||
16 stub CORELEASEMARSHALDATA
|
16 stub CORELEASEMARSHALDATA
|
||||||
17 pascal16 COFREEUNUSEDLIBRARIES() CoFreeUnusedLibraries
|
17 pascal16 COFREEUNUSEDLIBRARIES() CoFreeUnusedLibraries
|
||||||
18 pascal16 IsEqualGUID(ptr ptr) IsEqualGUID
|
18 pascal16 IsEqualGUID(ptr ptr) IsEqualGUID
|
||||||
19 pascal StringFromCLSID(ptr ptr) StringFromCLSID
|
19 pascal StringFromCLSID(ptr ptr) StringFromCLSID16
|
||||||
20 pascal CLSIDFromString(str ptr) CLSIDFromString
|
20 pascal CLSIDFromString(str ptr) CLSIDFromString16
|
||||||
21 stub ISVALIDPTRIN
|
21 stub ISVALIDPTRIN
|
||||||
22 stub ISVALIDPTROUT
|
22 stub ISVALIDPTROUT
|
||||||
23 stub ISVALIDINTERFACE
|
23 stub ISVALIDINTERFACE
|
||||||
|
@ -61,7 +61,7 @@ type win16
|
||||||
58 stub _IID_IDFRESERVED2
|
58 stub _IID_IDFRESERVED2
|
||||||
59 stub _IID_IDFRESERVED3
|
59 stub _IID_IDFRESERVED3
|
||||||
60 stub _IID_IMESSAGEFILTER
|
60 stub _IID_IMESSAGEFILTER
|
||||||
61 pascal CLSIDFromProgID(str ptr) CLSIDFromProgID
|
61 pascal CLSIDFromProgID(str ptr) CLSIDFromProgID16
|
||||||
62 stub PROGIDFROMCLSID
|
62 stub PROGIDFROMCLSID
|
||||||
63 stub COLOCKOBJECTEXTERNAL
|
63 stub COLOCKOBJECTEXTERNAL
|
||||||
64 stub _CLSID_STDMARSHAL
|
64 stub _CLSID_STDMARSHAL
|
||||||
|
@ -147,3 +147,14 @@ type win16
|
||||||
201 pascal CALLOBJECTINWOW(ptr ptr) CallObjectInWOW
|
201 pascal CALLOBJECTINWOW(ptr ptr) CallObjectInWOW
|
||||||
204 stub COMPOBJ_204
|
204 stub COMPOBJ_204
|
||||||
207 stub COMPOBJ_207
|
207 stub COMPOBJ_207
|
||||||
|
|
||||||
|
# WINE internal relays (for Win16 interfaces)
|
||||||
|
500 cdecl IMalloc16_QueryInterface(ptr ptr ptr) IMalloc16_QueryInterface
|
||||||
|
501 cdecl IMalloc16_AddRef(ptr) IMalloc16_AddRef
|
||||||
|
502 cdecl IMalloc16_Release(ptr) IMalloc16_Release
|
||||||
|
503 cdecl IMalloc16_Alloc(ptr long) IMalloc16_Alloc
|
||||||
|
504 cdecl IMalloc16_Realloc(ptr segptr long) IMalloc16_Realloc
|
||||||
|
505 cdecl IMalloc16_Free(ptr segptr) IMalloc16_Free
|
||||||
|
506 cdecl IMalloc16_GetSize(ptr segptr) IMalloc16_GetSize
|
||||||
|
507 cdecl IMalloc16_DidAlloc(ptr segptr) IMalloc16_DidAlloc
|
||||||
|
508 cdecl IMalloc16_HeapMinimize(ptr) IMalloc16_HeapMinimize
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#include "wintypes.h"
|
#include "wintypes.h"
|
||||||
long WINAPI stub_GDI_379(void) { fprintf(stderr, "Warning: GDI_379:STARTPAGE unimplemented stub\n"); return 1; }
|
long WINAPI stub_GDI_379(void) { fprintf(stderr, "Warning: GDI_379:STARTPAGE unimplemented stub\n"); return 1; }
|
||||||
long WINAPI stub_GDI_380(void) { fprintf(stderr, "Warning: GDI_380:ENDPAGE unimplemented stub\n"); return 1; }
|
long WINAPI stub_GDI_380(void) { fprintf(stderr, "Warning: GDI_380:ENDPAGE unimplemented stub\n"); return 1; }
|
||||||
long WINAPI stub_GDI_381(void) { fprintf(stderr, "Warning: GDI_381:SETABORTPROC unimplemented stub\n"); return 1; }
|
long WINAPI stub_GDI_381(HDC16 hdc, SEGPTR proc) { fprintf(stderr, "Warning: GDI_381:SETABORTPROC unimplemented stub\n"); return 1; }
|
||||||
long WINAPI stub_GDI_382(void) { fprintf(stderr, "Warning: GDI_382:ABORTPROC unimplemented stub\n"); return 1; }
|
long WINAPI stub_GDI_382(void) { fprintf(stderr, "Warning: GDI_382:ABORTPROC unimplemented stub\n"); return 1; }
|
||||||
long WINAPI stub_GDI_530(void) { fprintf(stderr, "Warning: GDI_530: unimplemented stub\n"); return 0; }
|
long WINAPI stub_GDI_530(void) { fprintf(stderr, "Warning: GDI_530: unimplemented stub\n"); return 0; }
|
||||||
long WINAPI stub_GDI_531(void) { fprintf(stderr, "Warning: GDI_531: unimplemented stub\n"); return 0; }
|
long WINAPI stub_GDI_531(void) { fprintf(stderr, "Warning: GDI_531: unimplemented stub\n"); return 0; }
|
||||||
|
@ -46,4 +46,3 @@ long WINAPI stub_USER_920(void) { fprintf(stderr, "Warning: USER_920: unimplemen
|
||||||
long WINAPI stub_USER_922(void) { fprintf(stderr, "Warning: USER_922: unimplemented stub\n"); return 0; }
|
long WINAPI stub_USER_922(void) { fprintf(stderr, "Warning: USER_922: unimplemented stub\n"); return 0; }
|
||||||
long WINAPI stub_USER_923(void) { fprintf(stderr, "Warning: USER_923: unimplemented stub\n"); return 0; }
|
long WINAPI stub_USER_923(void) { fprintf(stderr, "Warning: USER_923: unimplemented stub\n"); return 0; }
|
||||||
long WINAPI stub_KERNEL_700(void) { fprintf(stderr, "Warning: KERNEL_700: unimplemented stub\n"); return 1; }
|
long WINAPI stub_KERNEL_700(void) { fprintf(stderr, "Warning: KERNEL_700: unimplemented stub\n"); return 1; }
|
||||||
long WINAPI stub_KERNEL_449(void) { fprintf(stderr, "Warning: KERNEL_449: unimplemented stub\n"); return 0; }
|
|
||||||
|
|
|
@ -260,7 +260,7 @@ file gdi.exe
|
||||||
378 pascal16 EndDoc(word) EndDoc16
|
378 pascal16 EndDoc(word) EndDoc16
|
||||||
379 pascal16 StartPage() stub_GDI_379
|
379 pascal16 StartPage() stub_GDI_379
|
||||||
380 pascal16 EndPage() stub_GDI_380
|
380 pascal16 EndPage() stub_GDI_380
|
||||||
381 pascal16 SetAbortProc() stub_GDI_381
|
381 pascal16 SetAbortProc(word segptr) stub_GDI_381
|
||||||
382 pascal16 AbortDoc() stub_GDI_382
|
382 pascal16 AbortDoc() stub_GDI_382
|
||||||
400 pascal16 FastWindowFrame(word ptr s_word s_word long) FastWindowFrame
|
400 pascal16 FastWindowFrame(word ptr s_word s_word long) FastWindowFrame
|
||||||
401 stub GDIMOVEBITMAP
|
401 stub GDIMOVEBITMAP
|
||||||
|
|
|
@ -260,7 +260,7 @@ file krnl386.exe
|
||||||
337 pascal16 IsBadStringPtr(segptr word) IsBadStringPtr16
|
337 pascal16 IsBadStringPtr(segptr word) IsBadStringPtr16
|
||||||
338 stub HasGPHandler
|
338 stub HasGPHandler
|
||||||
339 pascal16 DiagQuery() DiagQuery
|
339 pascal16 DiagQuery() DiagQuery
|
||||||
340 pascal16 DiagOutput() DiagOutput
|
340 pascal16 DiagOutput(str) DiagOutput
|
||||||
341 pascal ToolHelpHook(ptr) ToolHelpHook
|
341 pascal ToolHelpHook(ptr) ToolHelpHook
|
||||||
342 stub __GP
|
342 stub __GP
|
||||||
343 stub RegisterWinOldApHook
|
343 stub RegisterWinOldApHook
|
||||||
|
@ -308,14 +308,16 @@ file krnl386.exe
|
||||||
445 stub KERNEL_445
|
445 stub KERNEL_445
|
||||||
446 stub KERNEL_446
|
446 stub KERNEL_446
|
||||||
447 stub KERNEL_447
|
447 stub KERNEL_447
|
||||||
449 pascal KERNEL_449() stub_KERNEL_449
|
449 pascal KERNEL_449() KERNEL_449
|
||||||
450 pascal16 KERNEL_450() stub_KERNEL_450
|
450 pascal16 KERNEL_450() stub_KERNEL_450
|
||||||
454 stub KERNEL_454
|
454 stub KERNEL_454
|
||||||
455 stub KERNEL_455
|
455 stub KERNEL_455
|
||||||
471 stub KERNEL_471
|
471 pascal KERNEL_471() _KERNEL_471
|
||||||
472 register KERNEL_472() _KERNEL_472
|
472 register KERNEL_472() _KERNEL_472
|
||||||
473 stub KERNEL_473
|
473 stub KERNEL_473
|
||||||
475 stub KERNEL_475
|
475 stub KERNEL_475
|
||||||
|
480 stub KERNEL_480
|
||||||
|
481 stub KERNEL_481
|
||||||
482 stub KERNEL_482
|
482 stub KERNEL_482
|
||||||
485 stub KERNEL_485
|
485 stub KERNEL_485
|
||||||
491 stub RegisterServiceProcess
|
491 stub RegisterServiceProcess
|
||||||
|
|
|
@ -13,13 +13,11 @@
|
||||||
#include "module.h"
|
#include "module.h"
|
||||||
#include "stackframe.h"
|
#include "stackframe.h"
|
||||||
#include "task.h"
|
#include "task.h"
|
||||||
#include "stddebug.h"
|
|
||||||
/* #define DEBUG_RELAY */
|
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
/* Make make_debug think these were really used */
|
/* Make make_debug think these were really used */
|
||||||
dprintf_relay
|
dprintf_info(relay, "test - dummy");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
@ -83,7 +81,7 @@ void RELAY_DebugCallFrom16( int func_type, char *args,
|
||||||
char *args16;
|
char *args16;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if (!debugging_relay) return;
|
if (!debugging_info(relay)) return;
|
||||||
|
|
||||||
frame = CURRENT_STACK16;
|
frame = CURRENT_STACK16;
|
||||||
printf( "Call %s(", BUILTIN_GetEntryPoint16( frame->entry_cs,
|
printf( "Call %s(", BUILTIN_GetEntryPoint16( frame->entry_cs,
|
||||||
|
@ -201,7 +199,7 @@ void RELAY_DebugCallFrom16Ret( int func_type, int ret_val, CONTEXT *context)
|
||||||
STACK16FRAME *frame;
|
STACK16FRAME *frame;
|
||||||
WORD ordinal;
|
WORD ordinal;
|
||||||
|
|
||||||
if (!debugging_relay) return;
|
if (!debugging_info(relay)) return;
|
||||||
frame = CURRENT_STACK16;
|
frame = CURRENT_STACK16;
|
||||||
printf( "Ret %s() ", BUILTIN_GetEntryPoint16( frame->entry_cs,
|
printf( "Ret %s() ", BUILTIN_GetEntryPoint16( frame->entry_cs,
|
||||||
frame->entry_ip,
|
frame->entry_ip,
|
||||||
|
@ -259,7 +257,7 @@ void RELAY_DebugCallTo16( int* stack, int nb_args )
|
||||||
{
|
{
|
||||||
THDB *thdb;
|
THDB *thdb;
|
||||||
|
|
||||||
if (!debugging_relay) return;
|
if (!debugging_info(relay)) return;
|
||||||
thdb = THREAD_Current();
|
thdb = THREAD_Current();
|
||||||
|
|
||||||
if (nb_args == -1) /* Register function */
|
if (nb_args == -1) /* Register function */
|
||||||
|
@ -385,7 +383,7 @@ void WINAPI Throw( CONTEXT *context )
|
||||||
if (lpbuf[8] != SS_reg(context))
|
if (lpbuf[8] != SS_reg(context))
|
||||||
fprintf( stderr, "Switching stack segment with Throw() not supported; expect crash now\n" );
|
fprintf( stderr, "Switching stack segment with Throw() not supported; expect crash now\n" );
|
||||||
|
|
||||||
if (debugging_relay) /* Make sure we have a valid entry point address */
|
if (debugging_info(relay)) /* Make sure we have a valid entry point address */
|
||||||
{
|
{
|
||||||
static FARPROC16 entryPoint = NULL;
|
static FARPROC16 entryPoint = NULL;
|
||||||
|
|
||||||
|
@ -410,12 +408,13 @@ static DWORD RELAY_CallProc32W(int Ex)
|
||||||
DWORD *args, ret;
|
DWORD *args, ret;
|
||||||
VA_LIST16 valist;
|
VA_LIST16 valist;
|
||||||
int i;
|
int i;
|
||||||
|
dbg_decl_str(relay, 1024);
|
||||||
|
|
||||||
VA_START16( valist );
|
VA_START16( valist );
|
||||||
nrofargs = VA_ARG16( valist, DWORD );
|
nrofargs = VA_ARG16( valist, DWORD );
|
||||||
argconvmask = VA_ARG16( valist, DWORD );
|
argconvmask = VA_ARG16( valist, DWORD );
|
||||||
proc32 = VA_ARG16( valist, FARPROC32 );
|
proc32 = VA_ARG16( valist, FARPROC32 );
|
||||||
dprintf_relay(stddeb,"CallProc32W(%ld,%ld,%p, Ex%d args[",nrofargs,argconvmask,proc32,Ex);
|
dsprintf(relay, "CallProc32W(%ld,%ld,%p, Ex%d args[",nrofargs,argconvmask,proc32,Ex);
|
||||||
args = (DWORD*)HEAP_xalloc( GetProcessHeap(), 0,
|
args = (DWORD*)HEAP_xalloc( GetProcessHeap(), 0,
|
||||||
sizeof(DWORD)*nrofargs );
|
sizeof(DWORD)*nrofargs );
|
||||||
for (i=0;i<nrofargs;i++) {
|
for (i=0;i<nrofargs;i++) {
|
||||||
|
@ -423,15 +422,15 @@ static DWORD RELAY_CallProc32W(int Ex)
|
||||||
{
|
{
|
||||||
SEGPTR ptr = VA_ARG16( valist, SEGPTR );
|
SEGPTR ptr = VA_ARG16( valist, SEGPTR );
|
||||||
args[nrofargs-i-1] = (DWORD)PTR_SEG_TO_LIN(ptr);
|
args[nrofargs-i-1] = (DWORD)PTR_SEG_TO_LIN(ptr);
|
||||||
dprintf_relay(stddeb,"%08lx(%p),",ptr,PTR_SEG_TO_LIN(ptr));
|
dsprintf(relay,"%08lx(%p),",ptr,PTR_SEG_TO_LIN(ptr));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
args[nrofargs-i-1] = VA_ARG16( valist, DWORD );
|
args[nrofargs-i-1] = VA_ARG16( valist, DWORD );
|
||||||
dprintf_relay(stddeb,"%ld,",args[nrofargs-i-1]);
|
dsprintf(relay,"%ld,",args[nrofargs-i-1]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
dprintf_relay(stddeb,"]) - ");
|
dsprintf(relay,"])");
|
||||||
VA_END16( valist );
|
VA_END16( valist );
|
||||||
|
|
||||||
switch (nrofargs) {
|
switch (nrofargs) {
|
||||||
|
@ -469,7 +468,7 @@ static DWORD RELAY_CallProc32W(int Ex)
|
||||||
if (!Ex) STACK16_POP( THREAD_Current(),
|
if (!Ex) STACK16_POP( THREAD_Current(),
|
||||||
(3 + nrofargs) * sizeof(DWORD) );
|
(3 + nrofargs) * sizeof(DWORD) );
|
||||||
|
|
||||||
dprintf_relay(stddeb,"returns %08lx\n",ret);
|
dprintf_info(relay,"%s - returns %08lx\n",dbg_str(relay),ret);
|
||||||
HeapFree( GetProcessHeap(), 0, args );
|
HeapFree( GetProcessHeap(), 0, args );
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,13 +1,60 @@
|
||||||
|
# Compound Storage DLL.
|
||||||
|
# (FIXME: some methods are commented out. Commenting them in _WILL_
|
||||||
|
# result in dataloss. Do it at your own risk.)
|
||||||
name storage
|
name storage
|
||||||
type win16
|
type win16
|
||||||
|
|
||||||
1 stub StgCreateDocFile
|
1 pascal StgCreateDocFileA(str long long ptr) StgCreateDocFile16
|
||||||
2 stub StgCreateDocFileOnILockBytes
|
2 stub StgCreateDocFileOnILockBytes
|
||||||
3 stub StgOpenStorage
|
3 pascal StgOpenStorage(str ptr long ptr long ptr) StgOpenStorage16
|
||||||
4 stub StgOpenStorageOnILockBytes
|
4 stub StgOpenStorageOnILockBytes
|
||||||
5 stub StgIsStorageFile
|
5 pascal StgIsStorageFile(str) StgIsStorageFile16
|
||||||
6 stub StgIsStorageILockBytes
|
6 stub StgIsStorageILockBytes
|
||||||
7 stub StgSetTimes
|
7 stub StgSetTimes
|
||||||
#8 WEP
|
#8 WEP
|
||||||
#9 ___EXPORTEDSTUB
|
#9 ___EXPORTEDSTUB
|
||||||
103 stub DllGetClassObject
|
103 stub DllGetClassObject
|
||||||
|
|
||||||
|
# Storage Interface functions. Starting at 500
|
||||||
|
# these are not exported in the real storage.dll, we use them
|
||||||
|
# as 16->32 relays. They use the cdecl calling convention.
|
||||||
|
|
||||||
|
# IStorage
|
||||||
|
500 cdecl IStorage16_QueryInterface(ptr ptr ptr) IStorage16_QueryInterface
|
||||||
|
501 cdecl IStorage16_AddRef(ptr) IStorage16_AddRef
|
||||||
|
502 cdecl IStorage16_Release(ptr) IStorage16_Release
|
||||||
|
#503 cdecl IStorage16_CreateStream(ptr str long long long ptr) IStorage16_CreateStream
|
||||||
|
503 stub IStorage16_CreateStream
|
||||||
|
|
||||||
|
504 cdecl IStorage16_OpenStream(ptr str ptr long long ptr) IStorage16_OpenStream
|
||||||
|
#505 cdecl IStorage16_CreateStorage(ptr str long long long ptr) IStorage16_CreateStorage
|
||||||
|
505 stub IStorage16_CreateStorage
|
||||||
|
506 cdecl IStorage16_OpenStorage(ptr str ptr long ptr long ptr) IStorage16_OpenStorage
|
||||||
|
507 cdecl IStorage16_CopyTo(ptr long ptr ptr ptr) IStorage16_CopyTo
|
||||||
|
508 stub IStorage16_MoveElementTo
|
||||||
|
509 cdecl IStorage16_Commit(ptr long) IStorage16_Commit
|
||||||
|
510 stub IStorage16_Revert
|
||||||
|
511 stub IStorage16_EnumElements
|
||||||
|
512 stub IStorage16_DestroyElement
|
||||||
|
513 stub IStorage16_RenameElement
|
||||||
|
514 stub IStorage16_SetElementTimes
|
||||||
|
515 stub IStorage16_SetClass
|
||||||
|
516 stub IStorage16_SetStateBits
|
||||||
|
517 cdecl IStorage16_Stat(ptr ptr long) IStorage16_Stat
|
||||||
|
|
||||||
|
# IStream
|
||||||
|
518 cdecl IStream16_QueryInterface(ptr ptr ptr) IStream16_QueryInterface
|
||||||
|
519 cdecl IStream16_AddRef(ptr) IStream16_AddRef
|
||||||
|
520 cdecl IStream16_Release(ptr) IStream16_Release
|
||||||
|
521 cdecl IStream16_Read(ptr ptr long ptr) IStream16_Read
|
||||||
|
#522 cdecl IStream16_Write(ptr ptr long ptr) IStream16_Write
|
||||||
|
522 stub IStream16_Write
|
||||||
|
523 cdecl IStream16_Seek(ptr long long long ptr) IStream16_Seek
|
||||||
|
524 stub IStream16_SetSize
|
||||||
|
525 stub IStream16_CopyTo
|
||||||
|
526 stub IStream16_Commit
|
||||||
|
527 stub IStream16_Revert
|
||||||
|
528 stub IStream16_LockRegion
|
||||||
|
529 stub IStream16_UnlockRegion
|
||||||
|
530 stub IStream16_Stat
|
||||||
|
531 stub IStream16_Clone
|
||||||
|
|
|
@ -18,7 +18,6 @@
|
||||||
#include "task.h"
|
#include "task.h"
|
||||||
#include "except.h"
|
#include "except.h"
|
||||||
#include "win.h"
|
#include "win.h"
|
||||||
#include "stddebug.h"
|
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
|
||||||
|
|
||||||
|
@ -227,7 +226,7 @@ static void THUNK_Free( THUNK *thunk )
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
dprintf_thunk( stddeb, "THUNK_Free: invalid thunk addr %p\n", thunk );
|
dprintf_err(thunk, "THUNK_Free: invalid thunk addr %p\n", thunk );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -626,7 +625,7 @@ static BOOL32 WINAPI THUNK_WOWCallback16Ex(
|
||||||
LPDWORD args = (LPDWORD)xargs;
|
LPDWORD args = (LPDWORD)xargs;
|
||||||
DWORD ret,i;
|
DWORD ret,i;
|
||||||
|
|
||||||
dprintf_relay(stddeb,"WOWCallback16Ex(%p,0x%08lx,%ld,%p,%p)\n",
|
dprintf_info(relay,"WOWCallback16Ex(%p,0x%08lx,%ld,%p,%p)\n",
|
||||||
proc,dwFlags,cbArgs,xargs,pdwret
|
proc,dwFlags,cbArgs,xargs,pdwret
|
||||||
);
|
);
|
||||||
if (dwFlags == WCB16_CDECL) {
|
if (dwFlags == WCB16_CDECL) {
|
||||||
|
|
|
@ -5,7 +5,7 @@ type win16
|
||||||
2 stub ISPEFORMAT
|
2 stub ISPEFORMAT
|
||||||
3 stub EXECPE
|
3 stub EXECPE
|
||||||
4 stub GETPEEXEINFO
|
4 stub GETPEEXEINFO
|
||||||
5 stub GETW32SYSVERSION
|
5 return GETW32SYSVERSION 0 0x100
|
||||||
6 stub LOADPERESOURCE
|
6 stub LOADPERESOURCE
|
||||||
7 stub GETPERESOURCETABLE
|
7 stub GETPERESOURCETABLE
|
||||||
8 stub EXECPEEX
|
8 stub EXECPEEX
|
||||||
|
|
|
@ -17,3 +17,6 @@
|
||||||
|
|
||||||
/* Define if you have the Open Sound system. */
|
/* Define if you have the Open Sound system. */
|
||||||
#undef HAVE_OSS
|
#undef HAVE_OSS
|
||||||
|
|
||||||
|
/* Define if X libraries are not reentrant (compiled without -D_REENTRANT). */
|
||||||
|
#undef NO_REENTRANT_X11
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#if !defined(COMPOBJ_H)
|
#ifndef COMPOBJ_H
|
||||||
#define COMPOBJ_H
|
#define COMPOBJ_H
|
||||||
|
|
||||||
#include "ole.h"
|
#include "ole.h"
|
||||||
|
@ -15,9 +15,14 @@ typedef struct tagGUID GUID,*LPGUID,*REFGUID;
|
||||||
typedef struct tagGUID CLSID,*LPCLSID,*REFCLSID;
|
typedef struct tagGUID CLSID,*LPCLSID,*REFCLSID;
|
||||||
typedef struct tagGUID IID,*REFIID,*LPIID;
|
typedef struct tagGUID IID,*REFIID,*LPIID;
|
||||||
|
|
||||||
OLESTATUS WINAPI StringFromCLSID(const CLSID *id, LPSTR);
|
OLESTATUS WINAPI StringFromCLSID16(const CLSID *id, LPOLESTR16*);
|
||||||
OLESTATUS WINAPI CLSIDFromString(const LPCSTR, CLSID *);
|
OLESTATUS WINAPI StringFromCLSID32(const CLSID *id, LPOLESTR32*);
|
||||||
|
#define StringFromCLSID WINELIB_NAME(StringFromCLSID)
|
||||||
|
OLESTATUS WINAPI CLSIDFromString16(LPCOLESTR16, CLSID *);
|
||||||
|
OLESTATUS WINAPI CLSIDFromString32(LPCOLESTR32, CLSID *);
|
||||||
|
#define CLSIDFromString WINELIB_NAME(CLSIDFromString)
|
||||||
|
|
||||||
|
OLESTATUS WINAPI WINE_StringFromCLSID(const CLSID *id, LPSTR);
|
||||||
|
|
||||||
#ifdef INITGUID
|
#ifdef INITGUID
|
||||||
#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
|
#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
|
||||||
|
|
|
@ -30,6 +30,9 @@
|
||||||
/* Define if you have the Open Sound system. */
|
/* Define if you have the Open Sound system. */
|
||||||
#undef HAVE_OSS
|
#undef HAVE_OSS
|
||||||
|
|
||||||
|
/* Define if X libraries are not reentrant (compiled without -D_REENTRANT). */
|
||||||
|
#undef NO_REENTRANT_X11
|
||||||
|
|
||||||
/* Define if you have the clone function. */
|
/* Define if you have the clone function. */
|
||||||
#undef HAVE_CLONE
|
#undef HAVE_CLONE
|
||||||
|
|
||||||
|
|
|
@ -813,6 +813,7 @@ struct IDirectDrawPalette {
|
||||||
DWORD ref;
|
DWORD ref;
|
||||||
LPDIRECTDRAW ddraw;
|
LPDIRECTDRAW ddraw;
|
||||||
Colormap cm;
|
Colormap cm;
|
||||||
|
PALETTEENTRY palents[256];
|
||||||
};
|
};
|
||||||
#undef THIS
|
#undef THIS
|
||||||
|
|
||||||
|
|
1953
include/debug.h
1953
include/debug.h
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,197 @@
|
||||||
|
/* Do not modify this file -- it is automatically generated! */
|
||||||
|
|
||||||
|
#ifndef __DEBUGTOOLS_H
|
||||||
|
#include "debugtools.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define DEBUG_CHANNEL_COUNT 89
|
||||||
|
#ifdef DEBUG_RUNTIME
|
||||||
|
short debug_msg_enabled[][DEBUG_CLASS_COUNT] = {
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
{1, 1, 0, 0},
|
||||||
|
};
|
||||||
|
const char* debug_ch_name[] = {
|
||||||
|
"accel",
|
||||||
|
"aspi",
|
||||||
|
"atom",
|
||||||
|
"bitblt",
|
||||||
|
"bitmap",
|
||||||
|
"caret",
|
||||||
|
"cdaudio",
|
||||||
|
"class",
|
||||||
|
"clipboard",
|
||||||
|
"clipping",
|
||||||
|
"combo",
|
||||||
|
"comm",
|
||||||
|
"commdlg",
|
||||||
|
"console",
|
||||||
|
"crtdll",
|
||||||
|
"cursor",
|
||||||
|
"dc",
|
||||||
|
"dde",
|
||||||
|
"ddraw",
|
||||||
|
"dialog",
|
||||||
|
"dll",
|
||||||
|
"dosfs",
|
||||||
|
"driver",
|
||||||
|
"dsound",
|
||||||
|
"edit",
|
||||||
|
"event",
|
||||||
|
"exec",
|
||||||
|
"file",
|
||||||
|
"fixup",
|
||||||
|
"font",
|
||||||
|
"gdi",
|
||||||
|
"global",
|
||||||
|
"graphics",
|
||||||
|
"heap",
|
||||||
|
"hook",
|
||||||
|
"icon",
|
||||||
|
"int",
|
||||||
|
"key",
|
||||||
|
"keyboard",
|
||||||
|
"ldt",
|
||||||
|
"listbox",
|
||||||
|
"local",
|
||||||
|
"mci",
|
||||||
|
"mcianim",
|
||||||
|
"mciwave",
|
||||||
|
"mdi",
|
||||||
|
"menu",
|
||||||
|
"message",
|
||||||
|
"metafile",
|
||||||
|
"midi",
|
||||||
|
"mmaux",
|
||||||
|
"mmio",
|
||||||
|
"mmsys",
|
||||||
|
"mmtime",
|
||||||
|
"module",
|
||||||
|
"msg",
|
||||||
|
"nonclient",
|
||||||
|
"ole",
|
||||||
|
"palette",
|
||||||
|
"profile",
|
||||||
|
"progress",
|
||||||
|
"prop",
|
||||||
|
"reg",
|
||||||
|
"region",
|
||||||
|
"relay",
|
||||||
|
"resource",
|
||||||
|
"scroll",
|
||||||
|
"selector",
|
||||||
|
"sem",
|
||||||
|
"sendmsg",
|
||||||
|
"shm",
|
||||||
|
"stddeb",
|
||||||
|
"stress",
|
||||||
|
"string",
|
||||||
|
"task",
|
||||||
|
"text",
|
||||||
|
"thunk",
|
||||||
|
"timer",
|
||||||
|
"toolhelp",
|
||||||
|
"tweak",
|
||||||
|
"updown",
|
||||||
|
"ver",
|
||||||
|
"virtual",
|
||||||
|
"vxd",
|
||||||
|
"win",
|
||||||
|
"win16drv",
|
||||||
|
"win32",
|
||||||
|
"winsock",
|
||||||
|
"x11",
|
||||||
|
};
|
||||||
|
|
||||||
|
const char* debug_cl_name[] =
|
||||||
|
{ "fixme", "err", "warn", "info" };
|
||||||
|
|
||||||
|
#endif /*DEBUG_RUNTIME*/
|
||||||
|
|
||||||
|
/* end of automatically generated debug.h */
|
|
@ -11,5 +11,8 @@ LPSTR debugstr_an (LPCSTR s, int n);
|
||||||
LPSTR debugstr_a (LPCSTR s);
|
LPSTR debugstr_a (LPCSTR s);
|
||||||
LPSTR debugstr_wn (LPCWSTR s, int n);
|
LPSTR debugstr_wn (LPCWSTR s, int n);
|
||||||
LPSTR debugstr_w (LPCWSTR s);
|
LPSTR debugstr_w (LPCWSTR s);
|
||||||
|
LPSTR debugres (const void *res);
|
||||||
|
|
||||||
#endif /* __WINE_DEBUGSTR_H */
|
#endif /* __WINE_DEBUGSTR_H */
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,66 @@
|
||||||
|
|
||||||
|
#ifndef __DEBUGTOOLS_H
|
||||||
|
#define __DEBUGTOOLS_H
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#define DEBUG_RUNTIME
|
||||||
|
#define stddeb stdout
|
||||||
|
#define stdnimp stdout
|
||||||
|
|
||||||
|
#define DEBUG_CLASS_COUNT 4
|
||||||
|
|
||||||
|
extern short debug_msg_enabled[][DEBUG_CLASS_COUNT];
|
||||||
|
extern const char* debug_ch_name[];
|
||||||
|
extern const char* debug_cl_name[];
|
||||||
|
|
||||||
|
#define dbg_str(name) debug_str_##name
|
||||||
|
#define dbg_buf(name) debug_buf_##name
|
||||||
|
|
||||||
|
#define dbg_decl_str(name, size) \
|
||||||
|
char dbg_str(name)[size], *dbg_buf(name)=dbg_str(name)
|
||||||
|
|
||||||
|
#define dbg_reset_str(name) \
|
||||||
|
dbg_buf(name)=dbg_str(name)
|
||||||
|
|
||||||
|
#define dsprintf(name, format, args...) \
|
||||||
|
dbg_buf(name)+=sprintf(dbg_buf(name), format, ## args)
|
||||||
|
|
||||||
|
#define dbg_ch_index(ch) (dbch_##ch)
|
||||||
|
#define dbg_cl_index(cl) (dbcl_##cl)
|
||||||
|
|
||||||
|
#define debugging_(cl, ch) \
|
||||||
|
(dbg_ch_index(ch) >=0 && dbg_cl_index(cl) >= 0 && \
|
||||||
|
debug_msg_enabled[dbg_ch_index(ch)][dbg_cl_index(cl)])
|
||||||
|
|
||||||
|
#define dprintf(format, args...) \
|
||||||
|
fprintf(stddeb, format, ## args)
|
||||||
|
|
||||||
|
#define dprintf_(cl, ch, format, args...) \
|
||||||
|
if(!debugging_(cl, ch)) ; \
|
||||||
|
else dprintf("%s:%s:%s:%d:%s: "format, \
|
||||||
|
debug_cl_name[dbg_cl_index(cl)], \
|
||||||
|
debug_ch_name[dbg_ch_index(ch)], \
|
||||||
|
__FILE__, __LINE__, __FUNCTION__ , ## args)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#define debugging_fixme(ch) debugging_(fixme, ch)
|
||||||
|
#define debugging_err(ch) debugging_(err, ch)
|
||||||
|
#define debugging_warn(ch) debugging_(warn, ch)
|
||||||
|
#define debugging_info(ch) debugging_(info, ch)
|
||||||
|
|
||||||
|
#define dprintf_fixme(ch, format, args...) dprintf_(fixme, ch, format, ## args)
|
||||||
|
#define dprintf_err(ch, format, args...) dprintf_(err, ch, format, ## args)
|
||||||
|
#define dprintf_warn(ch, format, args...) dprintf_(warn, ch, format, ## args)
|
||||||
|
#define dprintf_info(ch, format, args...) dprintf_(info, ch, format, ## args)
|
||||||
|
|
||||||
|
#define dbcl_fixme 0
|
||||||
|
#define dbcl_err 1
|
||||||
|
#define dbcl_warn 2
|
||||||
|
#define dbcl_info 3
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
126
include/dinput.h
126
include/dinput.h
|
@ -58,6 +58,63 @@ DEFINE_GUID(GUID_CustomForce, 0x13541C2B,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,
|
||||||
|
|
||||||
typedef struct IDirectInput32A IDirectInput32A,*LPDIRECTINPUT32A;
|
typedef struct IDirectInput32A IDirectInput32A,*LPDIRECTINPUT32A;
|
||||||
typedef struct IDirectInputDevice32A IDirectInputDevice32A,*LPDIRECTINPUTDEVICE32A;
|
typedef struct IDirectInputDevice32A IDirectInputDevice32A,*LPDIRECTINPUTDEVICE32A;
|
||||||
|
typedef struct SysKeyboard32A SysKeyboard32A,*LPSYSKEYBOARD32A;
|
||||||
|
|
||||||
|
#define DI_OK S_OK
|
||||||
|
#define DI_NOTATTACHED S_FALSE
|
||||||
|
#define DI_BUFFEROVERFLOW S_FALSE
|
||||||
|
#define DI_PROPNOEFFECT S_FALSE
|
||||||
|
#define DI_NOEFFECT S_FALSE
|
||||||
|
#define DI_POLLEDDEVICE ((HRESULT)0x00000002L)
|
||||||
|
#define DI_DOWNLOADSKIPPED ((HRESULT)0x00000003L)
|
||||||
|
#define DI_EFFECTRESTARTED ((HRESULT)0x00000004L)
|
||||||
|
#define DI_TRUNCATED ((HRESULT)0x00000008L)
|
||||||
|
#define DI_TRUNCATEDANDRESTARTED ((HRESULT)0x0000000CL)
|
||||||
|
|
||||||
|
#define DIERR_OLDDIRECTINPUTVERSION \
|
||||||
|
MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_OLD_WIN_VERSION)
|
||||||
|
#define DIERR_BETADIRECTINPUTVERSION \
|
||||||
|
MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_RMODE_APP)
|
||||||
|
#define DIERR_BADDRIVERVER \
|
||||||
|
MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_BAD_DRIVER_LEVEL)
|
||||||
|
#define DIERR_DEVICENOTREG REGDB_E_CLASSNOTREG
|
||||||
|
#define DIERR_NOTFOUND \
|
||||||
|
MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_FILE_NOT_FOUND)
|
||||||
|
#define DIERR_OBJECTNOTFOUND \
|
||||||
|
MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_FILE_NOT_FOUND)
|
||||||
|
#define DIERR_INVALIDPARAM E_INVALIDARG
|
||||||
|
#define DIERR_NOINTERFACE E_NOINTERFACE
|
||||||
|
#define DIERR_GENERIC E_FAIL
|
||||||
|
#define DIERR_OUTOFMEMORY E_OUTOFMEMORY
|
||||||
|
#define DIERR_UNSUPPORTED E_NOTIMPL
|
||||||
|
#define DIERR_NOTINITIALIZED \
|
||||||
|
MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_NOT_READY)
|
||||||
|
#define DIERR_ALREADYINITIALIZED \
|
||||||
|
MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_ALREADY_INITIALIZED)
|
||||||
|
#define DIERR_NOAGGREGATION CLASS_E_NOAGGREGATION
|
||||||
|
#define DIERR_OTHERAPPHASPRIO E_ACCESSDENIED
|
||||||
|
#define DIERR_INPUTLOST \
|
||||||
|
MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_READ_FAULT)
|
||||||
|
#define DIERR_ACQUIRED \
|
||||||
|
MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_BUSY)
|
||||||
|
#define DIERR_NOTACQUIRED \
|
||||||
|
MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_INVALID_ACCESS)
|
||||||
|
#define DIERR_READONLY E_ACCESSDENIED
|
||||||
|
#define DIERR_HANDLEEXISTS E_ACCESSDENIED
|
||||||
|
#ifndef E_PENDING
|
||||||
|
#define E_PENDING 0x8000000AL
|
||||||
|
#endif
|
||||||
|
#define DIERR_INSUFFICIENTPRIVS 0x80040200L
|
||||||
|
#define DIERR_DEVICEFULL 0x80040201L
|
||||||
|
#define DIERR_MOREDATA 0x80040202L
|
||||||
|
#define DIERR_NOTDOWNLOADED 0x80040203L
|
||||||
|
#define DIERR_HASEFFECTS 0x80040204L
|
||||||
|
#define DIERR_NOTEXCLUSIVEACQUIRED 0x80040205L
|
||||||
|
#define DIERR_INCOMPLETEEFFECT 0x80040206L
|
||||||
|
#define DIERR_NOTBUFFERED 0x80040207L
|
||||||
|
#define DIERR_EFFECTPLAYING 0x80040208L
|
||||||
|
#define DIERR_UNPLUGGED 0x80040209L
|
||||||
|
#define DIERR_REPORTFULL 0x8004020AL
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
DWORD dwSize;
|
DWORD dwSize;
|
||||||
|
@ -303,6 +360,8 @@ DECL_WINELIB_TYPE_AW(LPDIENUMDEVICEOBJECTSCALLBACK);
|
||||||
#define DIDF_ABSAXIS 0x00000001
|
#define DIDF_ABSAXIS 0x00000001
|
||||||
#define DIDF_RELAXIS 0x00000002
|
#define DIDF_RELAXIS 0x00000002
|
||||||
|
|
||||||
|
#define DIGDD_PEEK 0x00000001
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
DWORD dwOfs;
|
DWORD dwOfs;
|
||||||
DWORD dwData;
|
DWORD dwData;
|
||||||
|
@ -338,6 +397,66 @@ typedef struct {
|
||||||
#define DIPH_BYID 2
|
#define DIPH_BYID 2
|
||||||
#define DIPH_BYUSAGE 3
|
#define DIPH_BYUSAGE 3
|
||||||
|
|
||||||
|
#define DIMAKEUSAGEDWORD(UsagePage, Usage) (DWORD)MAKELONG(Usage, UsagePage)
|
||||||
|
|
||||||
|
typedef struct DIPROPDWORD {
|
||||||
|
DIPROPHEADER diph;
|
||||||
|
DWORD dwData;
|
||||||
|
} DIPROPDWORD, *LPDIPROPDWORD;
|
||||||
|
typedef const DIPROPDWORD *LPCDIPROPDWORD;
|
||||||
|
|
||||||
|
typedef struct DIPROPRANGE {
|
||||||
|
DIPROPHEADER diph;
|
||||||
|
LONG lMin;
|
||||||
|
LONG lMax;
|
||||||
|
} DIPROPRANGE, *LPDIPROPRANGE;
|
||||||
|
typedef const DIPROPRANGE *LPCDIPROPRANGE;
|
||||||
|
|
||||||
|
#define DIPROPRANGE_NOMIN ((LONG)0x80000000)
|
||||||
|
#define DIPROPRANGE_NOMAX ((LONG)0x7FFFFFFF)
|
||||||
|
|
||||||
|
typedef struct DIPROPCAL {
|
||||||
|
DIPROPHEADER diph;
|
||||||
|
LONG lMin;
|
||||||
|
LONG lCenter;
|
||||||
|
LONG lMax;
|
||||||
|
} DIPROPCAL, *LPDIPROPCAL;
|
||||||
|
typedef const DIPROPCAL *LPCDIPROPCAL;
|
||||||
|
|
||||||
|
typedef struct DIPROPGUIDANDPATH {
|
||||||
|
DIPROPHEADER diph;
|
||||||
|
GUID guidClass;
|
||||||
|
WCHAR wszPath[MAX_PATH];
|
||||||
|
} DIPROPGUIDANDPATH, *LPDIPROPGUIDANDPATH,*LPCDIPROPGUIDANDPATH;
|
||||||
|
|
||||||
|
/* special property GUIDs */
|
||||||
|
#define MAKEDIPROP(prop) ((REFGUID)(prop))
|
||||||
|
#define DIPROP_BUFFERSIZE MAKEDIPROP(1)
|
||||||
|
#define DIPROP_AXISMODE MAKEDIPROP(2)
|
||||||
|
|
||||||
|
#define DIPROPAXISMODE_ABS 0
|
||||||
|
#define DIPROPAXISMODE_REL 1
|
||||||
|
|
||||||
|
#define DIPROP_GRANULARITY MAKEDIPROP(3)
|
||||||
|
#define DIPROP_RANGE MAKEDIPROP(4)
|
||||||
|
#define DIPROP_DEADZONE MAKEDIPROP(5)
|
||||||
|
#define DIPROP_SATURATION MAKEDIPROP(6)
|
||||||
|
#define DIPROP_FFGAIN MAKEDIPROP(7)
|
||||||
|
#define DIPROP_FFLOAD MAKEDIPROP(8)
|
||||||
|
#define DIPROP_AUTOCENTER MAKEDIPROP(9)
|
||||||
|
|
||||||
|
#define DIPROPAUTOCENTER_OFF 0
|
||||||
|
#define DIPROPAUTOCENTER_ON 1
|
||||||
|
|
||||||
|
#define DIPROP_CALIBRATIONMODE MAKEDIPROP(10)
|
||||||
|
|
||||||
|
#define DIPROPCALIBRATIONMODE_COOKED 0
|
||||||
|
#define DIPROPCALIBRATIONMODE_RAW 1
|
||||||
|
|
||||||
|
#define DIPROP_CALIBRATION MAKEDIPROP(11)
|
||||||
|
#define DIPROP_GUIDANDPATH MAKEDIPROP(12)
|
||||||
|
|
||||||
|
|
||||||
typedef struct DIDEVCAPS {
|
typedef struct DIDEVCAPS {
|
||||||
DWORD dwSize;
|
DWORD dwSize;
|
||||||
DWORD dwFlags;
|
DWORD dwFlags;
|
||||||
|
@ -402,6 +521,13 @@ struct IDirectInputDevice32A {
|
||||||
DWORD ref;
|
DWORD ref;
|
||||||
GUID guid;
|
GUID guid;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct SysKeyboard32A {
|
||||||
|
LPDIRECTINPUTDEVICEA_VTABLE lpvtbl;
|
||||||
|
DWORD ref;
|
||||||
|
GUID guid;
|
||||||
|
BYTE keystate[256];
|
||||||
|
};
|
||||||
#undef THIS
|
#undef THIS
|
||||||
|
|
||||||
#define THIS LPDIRECTINPUT32A this
|
#define THIS LPDIRECTINPUT32A this
|
||||||
|
|
|
@ -225,6 +225,7 @@ struct IDirectSoundBuffer {
|
||||||
DSBUFFERDESC dsbd;
|
DSBUFFERDESC dsbd;
|
||||||
LPDSBPOSITIONNOTIFY notifies;
|
LPDSBPOSITIONNOTIFY notifies;
|
||||||
int nrofnotifies;
|
int nrofnotifies;
|
||||||
|
double volfac;
|
||||||
};
|
};
|
||||||
#undef THIS
|
#undef THIS
|
||||||
|
|
||||||
|
|
|
@ -41,6 +41,7 @@ extern BOOL32 FILE_Stat( LPCSTR unixName, BY_HANDLE_FILE_INFORMATION *info );
|
||||||
extern HFILE32 FILE_Dup( HFILE32 hFile );
|
extern HFILE32 FILE_Dup( HFILE32 hFile );
|
||||||
extern HFILE32 FILE_Dup2( HFILE32 hFile1, HFILE32 hFile2 );
|
extern HFILE32 FILE_Dup2( HFILE32 hFile1, HFILE32 hFile2 );
|
||||||
extern HFILE32 FILE_Open( LPCSTR path, INT32 mode );
|
extern HFILE32 FILE_Open( LPCSTR path, INT32 mode );
|
||||||
|
extern HFILE32 FILE_OpenUnixFile( LPCSTR path, INT32 mode );
|
||||||
extern BOOL32 FILE_SetFileType( HFILE32 hFile, DWORD type );
|
extern BOOL32 FILE_SetFileType( HFILE32 hFile, DWORD type );
|
||||||
extern LPVOID FILE_mmap( HFILE32 hFile, LPVOID start,
|
extern LPVOID FILE_mmap( HFILE32 hFile, LPVOID start,
|
||||||
DWORD size_high, DWORD size_low,
|
DWORD size_high, DWORD size_low,
|
||||||
|
@ -68,7 +69,8 @@ extern void DOSFS_UnixTimeToFileTime( time_t unixtime, LPFILETIME ft,
|
||||||
DWORD remainder );
|
DWORD remainder );
|
||||||
extern time_t DOSFS_FileTimeToUnixTime( const FILETIME *ft, DWORD *remainder );
|
extern time_t DOSFS_FileTimeToUnixTime( const FILETIME *ft, DWORD *remainder );
|
||||||
extern BOOL32 DOSFS_ToDosFCBFormat( LPCSTR name, LPSTR buffer );
|
extern BOOL32 DOSFS_ToDosFCBFormat( LPCSTR name, LPSTR buffer );
|
||||||
extern const char *DOSFS_IsDevice( const char *name );
|
extern BOOL32 DOSFS_IsDevice( const char *name );
|
||||||
|
extern HFILE32 DOSFS_OpenDevice( const char *name, INT32 mode );
|
||||||
extern BOOL32 DOSFS_FindUnixName( LPCSTR path, LPCSTR name, LPSTR long_buf,
|
extern BOOL32 DOSFS_FindUnixName( LPCSTR path, LPCSTR name, LPSTR long_buf,
|
||||||
INT32 long_len, LPSTR short_buf,
|
INT32 long_len, LPSTR short_buf,
|
||||||
BOOL32 ignore_case );
|
BOOL32 ignore_case );
|
||||||
|
|
|
@ -54,8 +54,8 @@ struct IClassFactory {
|
||||||
};
|
};
|
||||||
#undef THIS
|
#undef THIS
|
||||||
|
|
||||||
#define THIS LPMALLOC this
|
#define THIS LPMALLOC32 this
|
||||||
typedef struct IMalloc *LPMALLOC,IMalloc;
|
typedef struct IMalloc32 *LPMALLOC32,IMalloc32;
|
||||||
typedef struct {
|
typedef struct {
|
||||||
STDMETHOD(QueryInterface) (THIS_ REFIID riid,LPVOID FAR* ppvObj) PURE;
|
STDMETHOD(QueryInterface) (THIS_ REFIID riid,LPVOID FAR* ppvObj) PURE;
|
||||||
STDMETHOD_(ULONG,AddRef) (THIS) PURE;
|
STDMETHOD_(ULONG,AddRef) (THIS) PURE;
|
||||||
|
@ -65,20 +65,46 @@ typedef struct {
|
||||||
STDMETHOD_(LPVOID,Realloc) ( THIS_ LPVOID pv,DWORD cb);
|
STDMETHOD_(LPVOID,Realloc) ( THIS_ LPVOID pv,DWORD cb);
|
||||||
STDMETHOD_(VOID,Free) ( THIS_ LPVOID pv);
|
STDMETHOD_(VOID,Free) ( THIS_ LPVOID pv);
|
||||||
STDMETHOD_(DWORD,GetSize) ( THIS_ LPVOID pv);
|
STDMETHOD_(DWORD,GetSize) ( THIS_ LPVOID pv);
|
||||||
STDMETHOD_(LPINT32,DidAlloc) ( THIS_ LPVOID pv);
|
STDMETHOD_(INT32,DidAlloc) ( THIS_ LPVOID pv);
|
||||||
STDMETHOD_(LPVOID,HeapMinimize) ( THIS );
|
STDMETHOD_(LPVOID,HeapMinimize) ( THIS );
|
||||||
} *LPMALLOC_VTABLE,IMalloc_VTable;
|
} *LPMALLOC32_VTABLE,IMalloc32_VTable;
|
||||||
|
|
||||||
struct IMalloc {
|
struct IMalloc32 {
|
||||||
LPMALLOC_VTABLE lpvtbl;
|
LPMALLOC32_VTABLE lpvtbl;
|
||||||
DWORD ref;
|
DWORD ref;
|
||||||
};
|
};
|
||||||
#undef THIS
|
#undef THIS
|
||||||
|
|
||||||
|
#define THIS LPMALLOC16 this
|
||||||
|
typedef struct IMalloc16 *LPMALLOC16,IMalloc16;
|
||||||
|
typedef struct {
|
||||||
|
STDMETHOD(QueryInterface) (THIS_ REFIID riid,LPVOID FAR* ppvObj) PURE;
|
||||||
|
STDMETHOD_(ULONG,AddRef) (THIS) PURE;
|
||||||
|
STDMETHOD_(ULONG,Release) (THIS) PURE;
|
||||||
|
|
||||||
|
STDMETHOD_(LPVOID,Alloc) ( THIS_ DWORD cb);
|
||||||
|
STDMETHOD_(LPVOID,Realloc) ( THIS_ LPVOID pv,DWORD cb);
|
||||||
|
STDMETHOD_(VOID,Free) ( THIS_ LPVOID pv);
|
||||||
|
STDMETHOD_(DWORD,GetSize) ( THIS_ LPVOID pv);
|
||||||
|
STDMETHOD_(INT16,DidAlloc) ( THIS_ LPVOID pv);
|
||||||
|
STDMETHOD_(LPVOID,HeapMinimize) ( THIS );
|
||||||
|
} *LPMALLOC16_VTABLE,IMalloc16_VTable;
|
||||||
|
|
||||||
|
struct IMalloc16 {
|
||||||
|
LPMALLOC16_VTABLE lpvtbl;
|
||||||
|
DWORD ref;
|
||||||
|
/* Gmm, I think one is not enough, we should probably manage a list of
|
||||||
|
* heaps
|
||||||
|
*/
|
||||||
|
HGLOBAL16 heap;
|
||||||
|
};
|
||||||
|
#undef THIS
|
||||||
|
|
||||||
/* private prototypes for the constructors */
|
/* private prototypes for the constructors */
|
||||||
#ifdef __WINE__
|
#ifdef __WINE__
|
||||||
LPUNKNOWN IUnknown_Constructor();
|
LPUNKNOWN IUnknown_Constructor();
|
||||||
LPMALLOC IMalloc_Constructor();
|
LPMALLOC16 IMalloc16_Constructor();
|
||||||
|
LPMALLOC32 IMalloc32_Constructor();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#undef STDMETHOD
|
#undef STDMETHOD
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
#define __WINE_K32OBJ_H
|
#define __WINE_K32OBJ_H
|
||||||
|
|
||||||
#include "wintypes.h"
|
#include "wintypes.h"
|
||||||
|
#include "windows.h"
|
||||||
|
|
||||||
/* Object types */
|
/* Object types */
|
||||||
typedef enum
|
typedef enum
|
||||||
|
@ -47,6 +48,8 @@ typedef struct
|
||||||
BOOL32 (*satisfied)(K32OBJ*,DWORD); /* Wait on object is satisfied */
|
BOOL32 (*satisfied)(K32OBJ*,DWORD); /* Wait on object is satisfied */
|
||||||
void (*add_wait)(K32OBJ*,DWORD); /* Add thread to wait queue */
|
void (*add_wait)(K32OBJ*,DWORD); /* Add thread to wait queue */
|
||||||
void (*remove_wait)(K32OBJ*,DWORD); /* Remove thread from wait queue */
|
void (*remove_wait)(K32OBJ*,DWORD); /* Remove thread from wait queue */
|
||||||
|
BOOL32 (*read)(K32OBJ*,LPVOID,DWORD,LPDWORD,LPOVERLAPPED);
|
||||||
|
BOOL32 (*write)(K32OBJ*,LPCVOID,DWORD,LPDWORD,LPOVERLAPPED);
|
||||||
void (*destroy)(K32OBJ *); /* Destroy object on refcount==0 */
|
void (*destroy)(K32OBJ *); /* Destroy object on refcount==0 */
|
||||||
} K32OBJ_OPS;
|
} K32OBJ_OPS;
|
||||||
|
|
||||||
|
|
|
@ -782,6 +782,7 @@ MMRESULT32 WINAPI timeEndPeriod32(UINT32);
|
||||||
#define JOYERR_NOCANDO (JOYERR_BASE+6) /* request not completed */
|
#define JOYERR_NOCANDO (JOYERR_BASE+6) /* request not completed */
|
||||||
#define JOYERR_UNPLUGGED (JOYERR_BASE+7) /* joystick is unplugged */
|
#define JOYERR_UNPLUGGED (JOYERR_BASE+7) /* joystick is unplugged */
|
||||||
|
|
||||||
|
/* JOYINFO, JOYINFOEX, MM_JOY* */
|
||||||
#define JOY_BUTTON1 0x0001
|
#define JOY_BUTTON1 0x0001
|
||||||
#define JOY_BUTTON2 0x0002
|
#define JOY_BUTTON2 0x0002
|
||||||
#define JOY_BUTTON3 0x0004
|
#define JOY_BUTTON3 0x0004
|
||||||
|
@ -794,6 +795,50 @@ MMRESULT32 WINAPI timeEndPeriod32(UINT32);
|
||||||
#define JOYSTICKID1 0
|
#define JOYSTICKID1 0
|
||||||
#define JOYSTICKID2 1
|
#define JOYSTICKID2 1
|
||||||
|
|
||||||
|
/* JOYCAPS.wCaps */
|
||||||
|
#define JOYCAPS_HASZ 0x0001
|
||||||
|
#define JOYCAPS_HASR 0x0002
|
||||||
|
#define JOYCAPS_HASU 0x0004
|
||||||
|
#define JOYCAPS_HASV 0x0008
|
||||||
|
#define JOYCAPS_HASPOV 0x0010
|
||||||
|
#define JOYCAPS_POV4DIR 0x0020
|
||||||
|
#define JOYCAPS_POVCTS 0x0040
|
||||||
|
|
||||||
|
/* JOYINFOEX stuff */
|
||||||
|
#define JOY_POVCENTERED (WORD) -1
|
||||||
|
#define JOY_POVFORWARD 0
|
||||||
|
#define JOY_POVRIGHT 9000
|
||||||
|
#define JOY_POVBACKWARD 18000
|
||||||
|
#define JOY_POVLEFT 27000
|
||||||
|
|
||||||
|
#define JOY_RETURNX 0x00000001
|
||||||
|
#define JOY_RETURNY 0x00000002
|
||||||
|
#define JOY_RETURNZ 0x00000004
|
||||||
|
#define JOY_RETURNR 0x00000008
|
||||||
|
#define JOY_RETURNU 0x00000010
|
||||||
|
#define JOY_RETURNV 0x00000020
|
||||||
|
#define JOY_RETURNPOV 0x00000040
|
||||||
|
#define JOY_RETURNBUTTONS 0x00000080
|
||||||
|
#define JOY_RETURNRAWDATA 0x00000100
|
||||||
|
#define JOY_RETURNPOVCTS 0x00000200
|
||||||
|
#define JOY_RETURNCENTERED 0x00000400
|
||||||
|
#define JOY_USEDEADZONE 0x00000800
|
||||||
|
#define JOY_RETURNALL (JOY_RETURNX | JOY_RETURNY | JOY_RETURNZ | \
|
||||||
|
JOY_RETURNR | JOY_RETURNU | JOY_RETURNV | \
|
||||||
|
JOY_RETURNPOV | JOY_RETURNBUTTONS)
|
||||||
|
#define JOY_CAL_READALWAYS 0x00010000
|
||||||
|
#define JOY_CAL_READXYONLY 0x00020000
|
||||||
|
#define JOY_CAL_READ3 0x00040000
|
||||||
|
#define JOY_CAL_READ4 0x00080000
|
||||||
|
#define JOY_CAL_READXONLY 0x00100000
|
||||||
|
#define JOY_CAL_READYONLY 0x00200000
|
||||||
|
#define JOY_CAL_READ5 0x00400000
|
||||||
|
#define JOY_CAL_READ6 0x00800000
|
||||||
|
#define JOY_CAL_READZONLY 0x01000000
|
||||||
|
#define JOY_CAL_READRONLY 0x02000000
|
||||||
|
#define JOY_CAL_READUONLY 0x04000000
|
||||||
|
#define JOY_CAL_READVONLY 0x08000000
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
WORD wMid; /* manufacturer ID */
|
WORD wMid; /* manufacturer ID */
|
||||||
WORD wPid; /* product ID */
|
WORD wPid; /* product ID */
|
||||||
|
@ -892,6 +937,22 @@ typedef struct {
|
||||||
UINT32 wButtons;
|
UINT32 wButtons;
|
||||||
} JOYINFO32, *LPJOYINFO32;
|
} JOYINFO32, *LPJOYINFO32;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
DWORD dwSize; /* size of structure */
|
||||||
|
DWORD dwFlags; /* flags to indicate what to return */
|
||||||
|
DWORD dwXpos; /* x position */
|
||||||
|
DWORD dwYpos; /* y position */
|
||||||
|
DWORD dwZpos; /* z position */
|
||||||
|
DWORD dwRpos; /* rudder/4th axis position */
|
||||||
|
DWORD dwUpos; /* 5th axis position */
|
||||||
|
DWORD dwVpos; /* 6th axis position */
|
||||||
|
DWORD dwButtons; /* button states */
|
||||||
|
DWORD dwButtonNumber; /* current button number pressed */
|
||||||
|
DWORD dwPOV; /* point of view state */
|
||||||
|
DWORD dwReserved1; /* reserved for communication between winmm & driver */
|
||||||
|
DWORD dwReserved2; /* reserved for future expansion */
|
||||||
|
} JOYINFOEX,*LPJOYINFOEX;
|
||||||
|
|
||||||
DECL_WINELIB_TYPE(JOYINFO);
|
DECL_WINELIB_TYPE(JOYINFO);
|
||||||
DECL_WINELIB_TYPE(LPJOYINFO);
|
DECL_WINELIB_TYPE(LPJOYINFO);
|
||||||
|
|
||||||
|
@ -905,6 +966,7 @@ UINT32 WINAPI joyGetNumDevs32(void);
|
||||||
MMRESULT16 WINAPI joyGetPos16(UINT16,LPJOYINFO16);
|
MMRESULT16 WINAPI joyGetPos16(UINT16,LPJOYINFO16);
|
||||||
MMRESULT32 WINAPI joyGetPos32(UINT32,LPJOYINFO32);
|
MMRESULT32 WINAPI joyGetPos32(UINT32,LPJOYINFO32);
|
||||||
#define joyGetPos WINELIB_NAME(joyGetPos)
|
#define joyGetPos WINELIB_NAME(joyGetPos)
|
||||||
|
MMRESULT32 WINAPI joyGetPosEx(UINT32,LPJOYINFOEX);
|
||||||
MMRESULT16 WINAPI joyGetThreshold16(UINT16,UINT16*);
|
MMRESULT16 WINAPI joyGetThreshold16(UINT16,UINT16*);
|
||||||
MMRESULT32 WINAPI joyGetThreshold32(UINT32,UINT32*);
|
MMRESULT32 WINAPI joyGetThreshold32(UINT32,UINT32*);
|
||||||
#define joyGetThreshold WINELIB_NAME(joyGetThreshold)
|
#define joyGetThreshold WINELIB_NAME(joyGetThreshold)
|
||||||
|
|
|
@ -91,6 +91,14 @@ typedef struct
|
||||||
SEGPTR reserved WINE_PACKED;
|
SEGPTR reserved WINE_PACKED;
|
||||||
} LOADPARAMS;
|
} LOADPARAMS;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
LPSTR lpEnvAddress;
|
||||||
|
LPSTR lpCmdLine;
|
||||||
|
LPSTR lpCmdShow;
|
||||||
|
DWORD dwReserved;
|
||||||
|
} LOADPARAMS32;
|
||||||
|
|
||||||
#pragma pack(4)
|
#pragma pack(4)
|
||||||
|
|
||||||
/* Resource types */
|
/* Resource types */
|
||||||
|
@ -151,4 +159,7 @@ extern void NE_InitializeDLLs( HMODULE16 hModule );
|
||||||
extern HMODULE32 BUILTIN32_LoadModule( LPCSTR name, BOOL32 force,
|
extern HMODULE32 BUILTIN32_LoadModule( LPCSTR name, BOOL32 force,
|
||||||
struct _PDB32 *process );
|
struct _PDB32 *process );
|
||||||
|
|
||||||
|
/* if1632/builtin.c */
|
||||||
|
extern HMODULE32 (*fnBUILTIN_LoadModule)(LPCSTR name, BOOL32 force);
|
||||||
|
|
||||||
#endif /* __WINE_MODULE_H */
|
#endif /* __WINE_MODULE_H */
|
||||||
|
|
|
@ -7,10 +7,19 @@
|
||||||
|
|
||||||
#include "windows.h"
|
#include "windows.h"
|
||||||
|
|
||||||
typedef CHAR OLE_CHAR,OLECHAR;
|
typedef CHAR OLECHAR16;
|
||||||
typedef LPCSTR OLE_LPCSTR;
|
typedef LPSTR LPOLESTR16;
|
||||||
typedef LPSTR LPOLESTR;
|
typedef LPCSTR LPCOLESTR16;
|
||||||
typedef LPCSTR LPCOLESTR;
|
typedef WCHAR OLECHAR32;
|
||||||
|
typedef LPWSTR LPOLESTR32;
|
||||||
|
typedef LPCWSTR LPCOLESTR32;
|
||||||
|
DECL_WINELIB_TYPE(OLECHAR);
|
||||||
|
DECL_WINELIB_TYPE(LPOLESTR);
|
||||||
|
DECL_WINELIB_TYPE(LPCOLESTR);
|
||||||
|
|
||||||
|
#define OLESTR16(x) x
|
||||||
|
#define OLESTR32(x) L##x
|
||||||
|
#define OLESTR WINELIB_NAME(OLESTR)
|
||||||
|
|
||||||
typedef unsigned short VARTYPE;
|
typedef unsigned short VARTYPE;
|
||||||
typedef LONG DISPID;
|
typedef LONG DISPID;
|
||||||
|
@ -170,10 +179,10 @@ typedef struct _OLECLIENT* LPOLECLIENT;
|
||||||
typedef struct _OLESERVERDOCVTBL {
|
typedef struct _OLESERVERDOCVTBL {
|
||||||
OLESTATUS (CALLBACK *Save)(LPOLESERVERDOC);
|
OLESTATUS (CALLBACK *Save)(LPOLESERVERDOC);
|
||||||
OLESTATUS (CALLBACK *Close)(LPOLESERVERDOC);
|
OLESTATUS (CALLBACK *Close)(LPOLESERVERDOC);
|
||||||
OLESTATUS (CALLBACK *SetHostNames)(LPOLESERVERDOC,OLE_LPCSTR,OLE_LPCSTR);
|
OLESTATUS (CALLBACK *SetHostNames)(LPOLESERVERDOC,LPCOLESTR16,LPCOLESTR16);
|
||||||
OLESTATUS (CALLBACK *SetDocDimensions)(LPOLESERVERDOC,LPRECT16);
|
OLESTATUS (CALLBACK *SetDocDimensions)(LPOLESERVERDOC,LPRECT16);
|
||||||
#undef GetObject /* FIXME */
|
#undef GetObject /* FIXME */
|
||||||
OLESTATUS (CALLBACK *GetObject)(LPOLESERVERDOC,OLE_LPCSTR,LPOLEOBJECT*,LPOLECLIENT);
|
OLESTATUS (CALLBACK *GetObject)(LPOLESERVERDOC,LPCOLESTR16,LPOLEOBJECT*,LPOLECLIENT);
|
||||||
OLESTATUS (CALLBACK *Release)(LPOLESERVERDOC);
|
OLESTATUS (CALLBACK *Release)(LPOLESERVERDOC);
|
||||||
OLESTATUS (CALLBACK *SetColorScheme)(LPOLESERVERDOC,LPLOGPALETTE);
|
OLESTATUS (CALLBACK *SetColorScheme)(LPOLESERVERDOC,LPLOGPALETTE);
|
||||||
OLESTATUS (CALLBACK *Execute)(LPOLESERVERDOC,HGLOBAL16);
|
OLESTATUS (CALLBACK *Execute)(LPOLESERVERDOC,HGLOBAL16);
|
||||||
|
@ -186,10 +195,10 @@ typedef struct _OLESERVERDOC {
|
||||||
|
|
||||||
typedef struct _OLESERVER* LPOLESERVER;
|
typedef struct _OLESERVER* LPOLESERVER;
|
||||||
typedef struct _OLESERVERVTBL {
|
typedef struct _OLESERVERVTBL {
|
||||||
OLESTATUS (CALLBACK *Open)(LPOLESERVER,LHSERVERDOC,OLE_LPCSTR,LPOLESERVERDOC *);
|
OLESTATUS (CALLBACK *Open)(LPOLESERVER,LHSERVERDOC,LPCOLESTR16,LPOLESERVERDOC *);
|
||||||
OLESTATUS (CALLBACK *Create)(LPOLESERVER,LHSERVERDOC,OLE_LPCSTR,OLE_LPCSTR,LPOLESERVERDOC*);
|
OLESTATUS (CALLBACK *Create)(LPOLESERVER,LHSERVERDOC,LPCOLESTR16,LPCOLESTR16,LPOLESERVERDOC*);
|
||||||
OLESTATUS (CALLBACK *CreateFromTemplate)(LPOLESERVER,LHSERVERDOC,OLE_LPCSTR,OLE_LPCSTR,OLE_LPCSTR,LPOLESERVERDOC *);
|
OLESTATUS (CALLBACK *CreateFromTemplate)(LPOLESERVER,LHSERVERDOC,LPCOLESTR16,LPCOLESTR16,LPCOLESTR16,LPOLESERVERDOC *);
|
||||||
OLESTATUS (CALLBACK *Edit)(LPOLESERVER,LHSERVERDOC,OLE_LPCSTR,OLE_LPCSTR,LPOLESERVERDOC *);
|
OLESTATUS (CALLBACK *Edit)(LPOLESERVER,LHSERVERDOC,LPCOLESTR16,LPCOLESTR16,LPOLESERVERDOC *);
|
||||||
OLESTATUS (CALLBACK *Exit)(LPOLESERVER);
|
OLESTATUS (CALLBACK *Exit)(LPOLESERVER);
|
||||||
OLESTATUS (CALLBACK *Release)(LPOLESERVER);
|
OLESTATUS (CALLBACK *Release)(LPOLESERVER);
|
||||||
OLESTATUS (CALLBACK *Execute)(LPOLESERVER);
|
OLESTATUS (CALLBACK *Execute)(LPOLESERVER);
|
||||||
|
@ -210,7 +219,7 @@ typedef struct _OLECLIENT {
|
||||||
} OLECLIENT;
|
} OLECLIENT;
|
||||||
|
|
||||||
typedef struct _OLEOBJECTVTBL {
|
typedef struct _OLEOBJECTVTBL {
|
||||||
void * (CALLBACK *QueryProtocol)(LPOLEOBJECT,OLE_LPCSTR);
|
void * (CALLBACK *QueryProtocol)(LPOLEOBJECT,LPCOLESTR16);
|
||||||
OLESTATUS (CALLBACK *Release)(LPOLEOBJECT);
|
OLESTATUS (CALLBACK *Release)(LPOLEOBJECT);
|
||||||
OLESTATUS (CALLBACK *Show)(LPOLEOBJECT,BOOL16);
|
OLESTATUS (CALLBACK *Show)(LPOLEOBJECT,BOOL16);
|
||||||
OLESTATUS (CALLBACK *DoVerb)(LPOLEOBJECT,UINT16,BOOL16,BOOL16);
|
OLESTATUS (CALLBACK *DoVerb)(LPOLEOBJECT,UINT16,BOOL16,BOOL16);
|
||||||
|
@ -221,10 +230,10 @@ typedef struct _OLEOBJECTVTBL {
|
||||||
OLESTATUS (CALLBACK *EnumFormats)(LPOLEOBJECT,OLECLIPFORMAT);
|
OLESTATUS (CALLBACK *EnumFormats)(LPOLEOBJECT,OLECLIPFORMAT);
|
||||||
OLESTATUS (CALLBACK *SetColorScheme)(LPOLEOBJECT,LPLOGPALETTE);
|
OLESTATUS (CALLBACK *SetColorScheme)(LPOLEOBJECT,LPLOGPALETTE);
|
||||||
OLESTATUS (CALLBACK *Delete)(LPOLEOBJECT);
|
OLESTATUS (CALLBACK *Delete)(LPOLEOBJECT);
|
||||||
OLESTATUS (CALLBACK *SetHostNames)(LPOLEOBJECT,OLE_LPCSTR,OLE_LPCSTR);
|
OLESTATUS (CALLBACK *SetHostNames)(LPOLEOBJECT,LPCOLESTR16,LPCOLESTR16);
|
||||||
OLESTATUS (CALLBACK *SaveToStream)(LPOLEOBJECT,LPOLESTREAM);
|
OLESTATUS (CALLBACK *SaveToStream)(LPOLEOBJECT,LPOLESTREAM);
|
||||||
OLESTATUS (CALLBACK *Clone)(LPOLEOBJECT,LPOLECLIENT,LHCLIENTDOC,OLE_LPCSTR,LPOLEOBJECT *);
|
OLESTATUS (CALLBACK *Clone)(LPOLEOBJECT,LPOLECLIENT,LHCLIENTDOC,LPCOLESTR16,LPOLEOBJECT *);
|
||||||
OLESTATUS (CALLBACK *CopyFromLink)(LPOLEOBJECT,LPOLECLIENT,LHCLIENTDOC,OLE_LPCSTR,LPOLEOBJECT *);
|
OLESTATUS (CALLBACK *CopyFromLink)(LPOLEOBJECT,LPOLECLIENT,LHCLIENTDOC,LPCOLESTR16,LPOLEOBJECT *);
|
||||||
OLESTATUS (CALLBACK *Equal)(LPOLEOBJECT,LPOLEOBJECT);
|
OLESTATUS (CALLBACK *Equal)(LPOLEOBJECT,LPOLEOBJECT);
|
||||||
OLESTATUS (CALLBACK *CopyToClipBoard)(LPOLEOBJECT);
|
OLESTATUS (CALLBACK *CopyToClipBoard)(LPOLEOBJECT);
|
||||||
OLESTATUS (CALLBACK *Draw)(LPOLEOBJECT,HDC16,LPRECT16,LPRECT16,HDC16);
|
OLESTATUS (CALLBACK *Draw)(LPOLEOBJECT,HDC16,LPRECT16,LPRECT16,HDC16);
|
||||||
|
@ -233,10 +242,10 @@ typedef struct _OLEOBJECTVTBL {
|
||||||
OLESTATUS (CALLBACK *Close)(LPOLEOBJECT);
|
OLESTATUS (CALLBACK *Close)(LPOLEOBJECT);
|
||||||
OLESTATUS (CALLBACK *Update)(LPOLEOBJECT);
|
OLESTATUS (CALLBACK *Update)(LPOLEOBJECT);
|
||||||
OLESTATUS (CALLBACK *Reconnect)(LPOLEOBJECT);
|
OLESTATUS (CALLBACK *Reconnect)(LPOLEOBJECT);
|
||||||
OLESTATUS (CALLBACK *ObjectConvert)(LPOLEOBJECT,OLE_LPCSTR,LPOLECLIENT,LHCLIENTDOC,OLE_LPCSTR,LPOLEOBJECT*);
|
OLESTATUS (CALLBACK *ObjectConvert)(LPOLEOBJECT,LPCOLESTR16,LPOLECLIENT,LHCLIENTDOC,LPCOLESTR16,LPOLEOBJECT*);
|
||||||
OLESTATUS (CALLBACK *GetLinkUpdateOptions)(LPOLEOBJECT,LPOLEOPT_UPDATE);
|
OLESTATUS (CALLBACK *GetLinkUpdateOptions)(LPOLEOBJECT,LPOLEOPT_UPDATE);
|
||||||
OLESTATUS (CALLBACK *SetLinkUpdateOptions)(LPOLEOBJECT,OLEOPT_UPDATE);
|
OLESTATUS (CALLBACK *SetLinkUpdateOptions)(LPOLEOBJECT,OLEOPT_UPDATE);
|
||||||
OLESTATUS (CALLBACK *Rename)(LPOLEOBJECT,OLE_LPCSTR);
|
OLESTATUS (CALLBACK *Rename)(LPOLEOBJECT,LPCOLESTR16);
|
||||||
OLESTATUS (CALLBACK *QueryName)(LPOLEOBJECT,LPSTR,LPUINT16);
|
OLESTATUS (CALLBACK *QueryName)(LPOLEOBJECT,LPSTR,LPUINT16);
|
||||||
OLESTATUS (CALLBACK *QueryType)(LPOLEOBJECT,LPLONG);
|
OLESTATUS (CALLBACK *QueryType)(LPOLEOBJECT,LPLONG);
|
||||||
OLESTATUS (CALLBACK *QueryBounds)(LPOLEOBJECT,LPRECT16);
|
OLESTATUS (CALLBACK *QueryBounds)(LPOLEOBJECT,LPRECT16);
|
||||||
|
@ -279,12 +288,12 @@ typedef enum tagCALLCONV {
|
||||||
} CALLCONV;
|
} CALLCONV;
|
||||||
|
|
||||||
typedef struct tagPARAMDATA {
|
typedef struct tagPARAMDATA {
|
||||||
OLECHAR * szName; /* parameter name */
|
OLECHAR16 * szName; /* parameter name */
|
||||||
VARTYPE vt; /* parameter type */
|
VARTYPE vt; /* parameter type */
|
||||||
} PARAMDATA, * LPPARAMDATA;
|
} PARAMDATA, * LPPARAMDATA;
|
||||||
|
|
||||||
typedef struct tagMETHODDATA {
|
typedef struct tagMETHODDATA {
|
||||||
OLECHAR * szName; /* method name */
|
OLECHAR16 * szName; /* method name */
|
||||||
PARAMDATA * ppdata; /* pointer to an array of PARAMDATAs */
|
PARAMDATA * ppdata; /* pointer to an array of PARAMDATAs */
|
||||||
DISPID dispid; /* method ID */
|
DISPID dispid; /* method ID */
|
||||||
UINT16 iMeth; /* method index */
|
UINT16 iMeth; /* method index */
|
||||||
|
|
|
@ -115,5 +115,5 @@ extern PDB32 *PROCESS_Current(void);
|
||||||
extern PDB32 *PROCESS_GetPtr( HANDLE32 handle, DWORD access );
|
extern PDB32 *PROCESS_GetPtr( HANDLE32 handle, DWORD access );
|
||||||
extern PDB32 *PROCESS_IdToPDB( DWORD id );
|
extern PDB32 *PROCESS_IdToPDB( DWORD id );
|
||||||
extern PDB32 *PROCESS_Create( TDB *pTask, LPCSTR cmd_line );
|
extern PDB32 *PROCESS_Create( TDB *pTask, LPCSTR cmd_line );
|
||||||
|
extern void PROCESS_CloseObjHandles(PDB32 *pdb, K32OBJ *ptr);
|
||||||
#endif /* __WINE_PROCESS_H */
|
#endif /* __WINE_PROCESS_H */
|
||||||
|
|
|
@ -146,7 +146,7 @@ typedef struct IShellFolder_VTable {
|
||||||
|
|
||||||
/* *** IShellFolder methods *** */
|
/* *** IShellFolder methods *** */
|
||||||
STDMETHOD(ParseDisplayName) (THIS_ HWND32 hwndOwner,
|
STDMETHOD(ParseDisplayName) (THIS_ HWND32 hwndOwner,
|
||||||
LPBC pbcReserved, LPOLESTR lpszDisplayName,
|
LPBC pbcReserved, LPOLESTR32 lpszDisplayName,
|
||||||
ULONG * pchEaten, LPITEMIDLIST * ppidl, ULONG *pdwAttributes) PURE;
|
ULONG * pchEaten, LPITEMIDLIST * ppidl, ULONG *pdwAttributes) PURE;
|
||||||
STDMETHOD(EnumObjects) ( THIS_ HWND32 hwndOwner, DWORD grfFlags, LPENUMIDLIST
|
STDMETHOD(EnumObjects) ( THIS_ HWND32 hwndOwner, DWORD grfFlags, LPENUMIDLIST
|
||||||
* ppenumIDList) PURE;
|
* ppenumIDList) PURE;
|
||||||
|
@ -163,7 +163,7 @@ typedef struct IShellFolder_VTable {
|
||||||
REFIID riid, UINT32 * prgfInOut, LPVOID * ppvOut) PURE;
|
REFIID riid, UINT32 * prgfInOut, LPVOID * ppvOut) PURE;
|
||||||
STDMETHOD(GetDisplayNameOf) (THIS_ LPCITEMIDLIST pidl, DWORD uFlags, LPSTRRET lpName) PURE;
|
STDMETHOD(GetDisplayNameOf) (THIS_ LPCITEMIDLIST pidl, DWORD uFlags, LPSTRRET lpName) PURE;
|
||||||
STDMETHOD(SetNameOf) (THIS_ HWND32 hwndOwner, LPCITEMIDLIST pidl,
|
STDMETHOD(SetNameOf) (THIS_ HWND32 hwndOwner, LPCITEMIDLIST pidl,
|
||||||
LPCOLESTR lpszName, DWORD uFlags,
|
LPCOLESTR32 lpszName, DWORD uFlags,
|
||||||
LPITEMIDLIST * ppidlOut) PURE;
|
LPITEMIDLIST * ppidlOut) PURE;
|
||||||
} *LPSHELLFOLDER_VTABLE,IShellFolder_VTable;
|
} *LPSHELLFOLDER_VTABLE,IShellFolder_VTable;
|
||||||
|
|
||||||
|
|
|
@ -1,256 +0,0 @@
|
||||||
/* If you define this you can enable or disable specific debugging- */
|
|
||||||
/* messages at run-time by supplying the "-debugmsg" option to Wine */
|
|
||||||
#define DEBUG_RUNTIME /* */
|
|
||||||
|
|
||||||
|
|
||||||
/* Define this if you want to enable all debugging-messages, except */
|
|
||||||
/* the ones explicitly disabled in a specific *.c-file. */
|
|
||||||
/* #define DEBUG_ALL */
|
|
||||||
|
|
||||||
/* Define this if you want to enable all debugging-messages, even */
|
|
||||||
/* the ones explicitly disabled in specific *.c-files. */
|
|
||||||
/* #define DEBUG_ALL_EXT */
|
|
||||||
|
|
||||||
/* Define this if you want to disable all debugging-messages, except */
|
|
||||||
/* the ones explicitly enabled in a specifiy *.c-file. */
|
|
||||||
/* #define DEBUG_NONE */
|
|
||||||
|
|
||||||
/* Define this if you want to disable all debugging-messages, even */
|
|
||||||
/* the ones explicitly enabled in specific *.c-files. */
|
|
||||||
/* #define DEBUG_NONE_EXT */
|
|
||||||
|
|
||||||
|
|
||||||
/* You can enable or disable specific debugging-messages here. */
|
|
||||||
/* However, this can be overridden in the individual *.c-files */
|
|
||||||
/* between #include <stddebug.h> and #include <debug.h> */
|
|
||||||
|
|
||||||
|
|
||||||
/* #define DEBUG_EDIT */
|
|
||||||
/* #define DEBUG_MENU */
|
|
||||||
/* #define DEBUG_MENUCALC */
|
|
||||||
/* #define DEBUG_SCROLL */
|
|
||||||
/* #define DEBUG_COMBO */
|
|
||||||
/* #define DEBUG_LISTBOX */
|
|
||||||
/* #define DEBUG_TASK */
|
|
||||||
/* #define DEBUG_SELECTORS */
|
|
||||||
/* #define DEBUG_RESOURCE */
|
|
||||||
/* #define DEBUG_ACCEL */
|
|
||||||
/* #define DEBUG_FIXUP */
|
|
||||||
/* #define DEBUG_MODULE */
|
|
||||||
/* #define DEBUG_LDT */
|
|
||||||
/* #define DEBUG_HEAP */
|
|
||||||
/* #define DEBUG_MCIANIM */
|
|
||||||
/* #define DEBUG_MCIWAVE */
|
|
||||||
/* #define DEBUG_MIDI */
|
|
||||||
/* #define DEBUG_INT */
|
|
||||||
/* #define DEBUG_METAFILE */
|
|
||||||
/* #define DEBUG_GDI */
|
|
||||||
/* #define DEBUG_BITMAP */
|
|
||||||
/* #define DEBUG_FONT */
|
|
||||||
/* #define DEBUG_PALETTE */
|
|
||||||
/* #define DEBUG_ICON */
|
|
||||||
/* #define DEBUG_REGION */
|
|
||||||
/* #define DEBUG_TEXT */
|
|
||||||
/* #define DEBUG_CLIPPING */
|
|
||||||
/* #define DEBUG_CARET */
|
|
||||||
/* #define DEBUG_CLASS */
|
|
||||||
/* #define DEBUG_DC */
|
|
||||||
/* #define DEBUG_DIALOG */
|
|
||||||
/* #define DEBUG_MESSAGE */
|
|
||||||
/* #define DEBUG_EVENT */
|
|
||||||
/* #define DEBUG_KEY */
|
|
||||||
/* #define DEBUG_GRAPHICS */
|
|
||||||
/* #define DEBUG_MDI */
|
|
||||||
/* #define DEBUG_MSG */
|
|
||||||
/* #define DEBUG_NONCLIENT */
|
|
||||||
/* #define DEBUG_SYSCOLOR */
|
|
||||||
/* #define DEBUG_TIMER */
|
|
||||||
/* #define DEBUG_UTILITY */
|
|
||||||
/* #define DEBUG_WIN */
|
|
||||||
/* #define DEBUG_ENUM */
|
|
||||||
/* #define DEBUG_DLL */
|
|
||||||
/* #define DEBUG_MSGBOX */
|
|
||||||
/* #define DEBUG_CATCH */
|
|
||||||
|
|
||||||
|
|
||||||
/* Do not remove this line or change anything below this line */
|
|
||||||
|
|
||||||
#ifdef DEBUG_NONE
|
|
||||||
#undef DEBUG_ACCEL
|
|
||||||
#undef DEBUG_ASPI
|
|
||||||
#undef DEBUG_ATOM
|
|
||||||
#undef DEBUG_BITBLT
|
|
||||||
#undef DEBUG_BITMAP
|
|
||||||
#undef DEBUG_CARET
|
|
||||||
#undef DEBUG_CDAUDIO
|
|
||||||
#undef DEBUG_CLASS
|
|
||||||
#undef DEBUG_CLIPBOARD
|
|
||||||
#undef DEBUG_CLIPPING
|
|
||||||
#undef DEBUG_COMBO
|
|
||||||
#undef DEBUG_COMM
|
|
||||||
#undef DEBUG_COMMDLG
|
|
||||||
#undef DEBUG_CRTDLL
|
|
||||||
#undef DEBUG_CURSOR
|
|
||||||
#undef DEBUG_DC
|
|
||||||
#undef DEBUG_DDE
|
|
||||||
#undef DEBUG_DDRAW
|
|
||||||
#undef DEBUG_DIALOG
|
|
||||||
#undef DEBUG_DLL
|
|
||||||
#undef DEBUG_DOSFS
|
|
||||||
#undef DEBUG_DRIVER
|
|
||||||
#undef DEBUG_DSOUND
|
|
||||||
#undef DEBUG_EDIT
|
|
||||||
#undef DEBUG_EVENT
|
|
||||||
#undef DEBUG_EXEC
|
|
||||||
#undef DEBUG_FILE
|
|
||||||
#undef DEBUG_FIXUP
|
|
||||||
#undef DEBUG_FONT
|
|
||||||
#undef DEBUG_GDI
|
|
||||||
#undef DEBUG_GLOBAL
|
|
||||||
#undef DEBUG_GRAPHICS
|
|
||||||
#undef DEBUG_HEAP
|
|
||||||
#undef DEBUG_HOOK
|
|
||||||
#undef DEBUG_ICON
|
|
||||||
#undef DEBUG_INT
|
|
||||||
#undef DEBUG_KEY
|
|
||||||
#undef DEBUG_KEYBOARD
|
|
||||||
#undef DEBUG_LDT
|
|
||||||
#undef DEBUG_LISTBOX
|
|
||||||
#undef DEBUG_LOCAL
|
|
||||||
#undef DEBUG_MCI
|
|
||||||
#undef DEBUG_MCIANIM
|
|
||||||
#undef DEBUG_MCIWAVE
|
|
||||||
#undef DEBUG_MDI
|
|
||||||
#undef DEBUG_MENU
|
|
||||||
#undef DEBUG_MESSAGE
|
|
||||||
#undef DEBUG_METAFILE
|
|
||||||
#undef DEBUG_MIDI
|
|
||||||
#undef DEBUG_MMAUX
|
|
||||||
#undef DEBUG_MMIO
|
|
||||||
#undef DEBUG_MMSYS
|
|
||||||
#undef DEBUG_MMTIME
|
|
||||||
#undef DEBUG_MODULE
|
|
||||||
#undef DEBUG_MSG
|
|
||||||
#undef DEBUG_NONCLIENT
|
|
||||||
#undef DEBUG_OLE
|
|
||||||
#undef DEBUG_PALETTE
|
|
||||||
#undef DEBUG_PROFILE
|
|
||||||
#undef DEBUG_PROGRESS
|
|
||||||
#undef DEBUG_PROP
|
|
||||||
#undef DEBUG_REG
|
|
||||||
#undef DEBUG_REGION
|
|
||||||
#undef DEBUG_RELAY
|
|
||||||
#undef DEBUG_RESOURCE
|
|
||||||
#undef DEBUG_SCROLL
|
|
||||||
#undef DEBUG_SELECTOR
|
|
||||||
#undef DEBUG_SEM
|
|
||||||
#undef DEBUG_SENDMSG
|
|
||||||
#undef DEBUG_SHM
|
|
||||||
#undef DEBUG_STRESS
|
|
||||||
#undef DEBUG_STRING
|
|
||||||
#undef DEBUG_TASK
|
|
||||||
#undef DEBUG_TEXT
|
|
||||||
#undef DEBUG_THUNK
|
|
||||||
#undef DEBUG_TIMER
|
|
||||||
#undef DEBUG_TOOLHELP
|
|
||||||
#undef DEBUG_TWEAK
|
|
||||||
#undef DEBUG_UPDOWN
|
|
||||||
#undef DEBUG_VER
|
|
||||||
#undef DEBUG_VIRTUAL
|
|
||||||
#undef DEBUG_VXD
|
|
||||||
#undef DEBUG_WIN
|
|
||||||
#undef DEBUG_WIN16DRV
|
|
||||||
#undef DEBUG_WIN32
|
|
||||||
#undef DEBUG_WINSOCK
|
|
||||||
#undef DEBUG_X11
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef DEBUG_ALL
|
|
||||||
#define DEBUG_ACCEL
|
|
||||||
#define DEBUG_ASPI
|
|
||||||
#define DEBUG_ATOM
|
|
||||||
#define DEBUG_BITBLT
|
|
||||||
#define DEBUG_BITMAP
|
|
||||||
#define DEBUG_CARET
|
|
||||||
#define DEBUG_CDAUDIO
|
|
||||||
#define DEBUG_CLASS
|
|
||||||
#define DEBUG_CLIPBOARD
|
|
||||||
#define DEBUG_CLIPPING
|
|
||||||
#define DEBUG_COMBO
|
|
||||||
#define DEBUG_COMM
|
|
||||||
#define DEBUG_COMMDLG
|
|
||||||
#define DEBUG_CRTDLL
|
|
||||||
#define DEBUG_CURSOR
|
|
||||||
#define DEBUG_DC
|
|
||||||
#define DEBUG_DDE
|
|
||||||
#define DEBUG_DDRAW
|
|
||||||
#define DEBUG_DIALOG
|
|
||||||
#define DEBUG_DLL
|
|
||||||
#define DEBUG_DOSFS
|
|
||||||
#define DEBUG_DRIVER
|
|
||||||
#define DEBUG_DSOUND
|
|
||||||
#define DEBUG_EDIT
|
|
||||||
#define DEBUG_EVENT
|
|
||||||
#define DEBUG_EXEC
|
|
||||||
#define DEBUG_FILE
|
|
||||||
#define DEBUG_FIXUP
|
|
||||||
#define DEBUG_FONT
|
|
||||||
#define DEBUG_GDI
|
|
||||||
#define DEBUG_GLOBAL
|
|
||||||
#define DEBUG_GRAPHICS
|
|
||||||
#define DEBUG_HEAP
|
|
||||||
#define DEBUG_HOOK
|
|
||||||
#define DEBUG_ICON
|
|
||||||
#define DEBUG_INT
|
|
||||||
#define DEBUG_KEY
|
|
||||||
#define DEBUG_KEYBOARD
|
|
||||||
#define DEBUG_LDT
|
|
||||||
#define DEBUG_LISTBOX
|
|
||||||
#define DEBUG_LOCAL
|
|
||||||
#define DEBUG_MCI
|
|
||||||
#define DEBUG_MCIANIM
|
|
||||||
#define DEBUG_MCIWAVE
|
|
||||||
#define DEBUG_MDI
|
|
||||||
#define DEBUG_MENU
|
|
||||||
#define DEBUG_MESSAGE
|
|
||||||
#define DEBUG_METAFILE
|
|
||||||
#define DEBUG_MIDI
|
|
||||||
#define DEBUG_MMAUX
|
|
||||||
#define DEBUG_MMIO
|
|
||||||
#define DEBUG_MMSYS
|
|
||||||
#define DEBUG_MMTIME
|
|
||||||
#define DEBUG_MODULE
|
|
||||||
#define DEBUG_MSG
|
|
||||||
#define DEBUG_NONCLIENT
|
|
||||||
#define DEBUG_OLE
|
|
||||||
#define DEBUG_PALETTE
|
|
||||||
#define DEBUG_PROFILE
|
|
||||||
#define DEBUG_PROGRESS
|
|
||||||
#define DEBUG_PROP
|
|
||||||
#define DEBUG_REG
|
|
||||||
#define DEBUG_REGION
|
|
||||||
#define DEBUG_RELAY
|
|
||||||
#define DEBUG_RESOURCE
|
|
||||||
#define DEBUG_SCROLL
|
|
||||||
#define DEBUG_SELECTOR
|
|
||||||
#define DEBUG_SEM
|
|
||||||
#define DEBUG_SENDMSG
|
|
||||||
#define DEBUG_SHM
|
|
||||||
#define DEBUG_STRESS
|
|
||||||
#define DEBUG_STRING
|
|
||||||
#define DEBUG_TASK
|
|
||||||
#define DEBUG_TEXT
|
|
||||||
#define DEBUG_THUNK
|
|
||||||
#define DEBUG_TIMER
|
|
||||||
#define DEBUG_TOOLHELP
|
|
||||||
#define DEBUG_TWEAK
|
|
||||||
#define DEBUG_UPDOWN
|
|
||||||
#define DEBUG_VER
|
|
||||||
#define DEBUG_VIRTUAL
|
|
||||||
#define DEBUG_VXD
|
|
||||||
#define DEBUG_WIN
|
|
||||||
#define DEBUG_WIN16DRV
|
|
||||||
#define DEBUG_WIN32
|
|
||||||
#define DEBUG_WINSOCK
|
|
||||||
#define DEBUG_X11
|
|
||||||
#endif
|
|
|
@ -0,0 +1,212 @@
|
||||||
|
#ifndef _WINE_STORAGE_H
|
||||||
|
#define _WINE_STORAGE_H
|
||||||
|
|
||||||
|
/* Does this look like a cellar to you? */
|
||||||
|
|
||||||
|
#define STDMETHOD(xfn) HRESULT (CALLBACK *fn##xfn)
|
||||||
|
#define STDMETHOD_(ret,xfn) ret (CALLBACK *fn##xfn)
|
||||||
|
#define PURE
|
||||||
|
#define FAR
|
||||||
|
#define THIS_ THIS,
|
||||||
|
|
||||||
|
struct storage_header {
|
||||||
|
BYTE magic[8]; /* 00: magic */
|
||||||
|
BYTE unknown1[36]; /* 08: unknown */
|
||||||
|
DWORD num_of_bbd_blocks;/* 2C: length of big datablocks */
|
||||||
|
DWORD root_startblock;/* 30: root storage first big block */
|
||||||
|
DWORD unknown2[2]; /* 34: unknown */
|
||||||
|
DWORD sbd_startblock; /* 3C: small block depot first big block */
|
||||||
|
DWORD unknown3[3]; /* 40: unknown */
|
||||||
|
DWORD bbd_list[109]; /* 4C: big data block list (up to end of sector)*/
|
||||||
|
};
|
||||||
|
struct storage_pps_entry {
|
||||||
|
WCHAR pps_rawname[32];/* 00: \0 terminated widechar name */
|
||||||
|
WORD pps_sizeofname; /* 40: namelength in bytes */
|
||||||
|
BYTE pps_type; /* 42: flags, 1 storage/dir, 2 stream, 5 root */
|
||||||
|
BYTE pps_unknown0; /* 43: unknown */
|
||||||
|
DWORD pps_prev; /* 44: previous pps */
|
||||||
|
DWORD pps_next; /* 48: next pps */
|
||||||
|
DWORD pps_dir; /* 4C: directory pps */
|
||||||
|
GUID pps_guid; /* 50: class ID */
|
||||||
|
DWORD pps_unknown1; /* 60: unknown */
|
||||||
|
FILETIME pps_ft1; /* 64: filetime1 */
|
||||||
|
FILETIME pps_ft2; /* 70: filetime2 */
|
||||||
|
DWORD pps_sb; /* 74: data startblock */
|
||||||
|
DWORD pps_size; /* 78: datalength. (<0x1000)?small:big blocks*/
|
||||||
|
DWORD pps_unknown2; /* 7C: unknown */
|
||||||
|
};
|
||||||
|
|
||||||
|
#define STORAGE_CHAINENTRY_FAT 0xfffffffd
|
||||||
|
#define STORAGE_CHAINENTRY_ENDOFCHAIN 0xfffffffe
|
||||||
|
#define STORAGE_CHAINENTRY_FREE 0xffffffff
|
||||||
|
|
||||||
|
typedef LPOLESTR16 *SNB16;
|
||||||
|
typedef LPOLESTR32 *SNB32;
|
||||||
|
DECL_WINELIB_TYPE(SNB);
|
||||||
|
|
||||||
|
typedef struct IStorage16 IStorage16,*LPSTORAGE16;
|
||||||
|
typedef struct IStorage32 IStorage32,*LPSTORAGE32;
|
||||||
|
typedef struct IStream16 IStream16,*LPSTREAM16;
|
||||||
|
typedef struct IStream32 IStream32,*LPSTREAM32;
|
||||||
|
|
||||||
|
typedef struct IEnumSTATSTG IEnumSTATSTG,*LPENUMSTATSTG;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
LPOLESTR16 pwcsName;
|
||||||
|
DWORD type;
|
||||||
|
ULARGE_INTEGER cbSize;
|
||||||
|
FILETIME mtime;
|
||||||
|
FILETIME ctime;
|
||||||
|
FILETIME atime;
|
||||||
|
DWORD grfMode;
|
||||||
|
DWORD grfLocksSupported;
|
||||||
|
CLSID clsid;
|
||||||
|
DWORD grfStateBits;
|
||||||
|
DWORD reserved;
|
||||||
|
} STATSTG;
|
||||||
|
|
||||||
|
#define STGM_DIRECT 0x00000000
|
||||||
|
#define STGM_TRANSACTED 0x00010000
|
||||||
|
#define STGM_SIMPLE 0x08000000
|
||||||
|
#define STGM_READ 0x00000000
|
||||||
|
#define STGM_WRITE 0x00000001
|
||||||
|
#define STGM_READWRITE 0x00000002
|
||||||
|
#define STGM_SHARE_DENY_NONE 0x00000040
|
||||||
|
#define STGM_SHARE_DENY_READ 0x00000030
|
||||||
|
#define STGM_SHARE_DENY_WRITE 0x00000020
|
||||||
|
#define STGM_SHARE_EXCLUSIVE 0x00000010
|
||||||
|
#define STGM_PRIORITY 0x00040000
|
||||||
|
#define STGM_DELETEONRELEASE 0x04000000
|
||||||
|
#define STGM_NOSCRATCH 0x00100000
|
||||||
|
#define STGM_CREATE 0x00001000
|
||||||
|
#define STGM_CONVERT 0x00020000
|
||||||
|
#define STGM_FAILIFTHERE 0x00000000
|
||||||
|
|
||||||
|
#define THIS LPSTORAGE16 this
|
||||||
|
typedef struct IStorage16_VTable {
|
||||||
|
/* IUnknown methods */
|
||||||
|
STDMETHOD(QueryInterface) (THIS_ REFIID riid,LPVOID FAR* ppvObj);
|
||||||
|
STDMETHOD_(ULONG,AddRef) (THIS);
|
||||||
|
STDMETHOD_(ULONG,Release) (THIS);
|
||||||
|
/* IStorage methods */
|
||||||
|
STDMETHOD(CreateStream)(THIS_ LPCOLESTR16 pwcsName, DWORD grfMode, DWORD reserved1, DWORD reserved2, IStream16 **ppstm);
|
||||||
|
STDMETHOD(OpenStream)(THIS_ LPCOLESTR16 pwcsName, void *reserved1, DWORD grfMode, DWORD reserved2, IStream16 **ppstm);
|
||||||
|
STDMETHOD(CreateStorage)(THIS_ LPCOLESTR16 pwcsName, DWORD grfMode, DWORD dwStgFmt, DWORD reserved2, IStorage16 **ppstg);
|
||||||
|
STDMETHOD(OpenStorage)(THIS_ LPCOLESTR16 pwcsName,IStorage16 *pstgPriority, DWORD grfMode, SNB16 SNB16Exclude, DWORD reserved, IStorage16 **ppstg);
|
||||||
|
STDMETHOD(CopyTo)(THIS_ DWORD ciidExclude, const IID *rgiidExclude, SNB16 SNB16Exclude, IStorage16 *pstgDest);
|
||||||
|
STDMETHOD(MoveElementTo)(THIS_ LPCOLESTR16 pwcsName, IStorage16 *pstgDest, LPCOLESTR16 pwcsNewName, DWORD grfFlags);
|
||||||
|
STDMETHOD(Commit)(THIS_ DWORD grfCommitFlags);
|
||||||
|
STDMETHOD(Revert)(THIS);
|
||||||
|
STDMETHOD(EnumElements)(THIS_ DWORD reserved1,void *reserved2, DWORD reserved3, IEnumSTATSTG **ppenum);
|
||||||
|
STDMETHOD(DestroyElement)(THIS_ LPCOLESTR16 pwcsName);
|
||||||
|
STDMETHOD(RenameElement)(THIS_ LPCOLESTR16 pwcsOldName, LPCOLESTR16 pwcsNewName);
|
||||||
|
STDMETHOD(SetElementTimes)(THIS_ LPCOLESTR16 pwcsName, const FILETIME *pctime, const FILETIME *patime, const FILETIME *pmtime);
|
||||||
|
STDMETHOD(SetClass)(THIS_ REFCLSID clsid);
|
||||||
|
STDMETHOD(SetStateBits)(THIS_ DWORD grfStateBits, DWORD grfMask);
|
||||||
|
STDMETHOD(Stat)(THIS_ STATSTG *pstatstg, DWORD grfStatFlag);
|
||||||
|
} IStorage16_VTable,*LPSTORAGE16_VTABLE;
|
||||||
|
|
||||||
|
struct IStorage16 {
|
||||||
|
LPSTORAGE16_VTABLE lpvtbl;
|
||||||
|
DWORD ref;
|
||||||
|
SEGPTR thisptr; /* pointer to this struct as segmented */
|
||||||
|
struct storage_pps_entry stde;
|
||||||
|
int ppsent;
|
||||||
|
HFILE32 hf;
|
||||||
|
};
|
||||||
|
#undef THIS
|
||||||
|
#define THIS LPSTORAGE32 this
|
||||||
|
typedef struct IStorage32_VTable {
|
||||||
|
/* IUnknown methods */
|
||||||
|
STDMETHOD(QueryInterface) (THIS_ REFIID riid,LPVOID FAR* ppvObj);
|
||||||
|
STDMETHOD_(ULONG,AddRef) (THIS);
|
||||||
|
STDMETHOD_(ULONG,Release) (THIS);
|
||||||
|
/* IStorage methods */
|
||||||
|
STDMETHOD(CreateStream)(THIS_ LPCOLESTR32 pwcsName, DWORD grfMode, DWORD reserved1, DWORD reserved2, IStream32 **ppstm);
|
||||||
|
STDMETHOD(OpenStream)(THIS_ LPCOLESTR32 pwcsName, void *reserved1, DWORD grfMode, DWORD reserved2, IStream32 **ppstm);
|
||||||
|
STDMETHOD(CreateStorage)(THIS_ LPCOLESTR32 pwcsName, DWORD grfMode, DWORD dwStgFmt, DWORD reserved2, IStorage32 **ppstg);
|
||||||
|
STDMETHOD(OpenStorage)(THIS_ LPCOLESTR32 pwcsName,IStorage32 *pstgPriority, DWORD grfMode, SNB32 SNB16Exclude, DWORD reserved, IStorage32 **ppstg);
|
||||||
|
STDMETHOD(CopyTo)(THIS_ DWORD ciidExclude, const IID *rgiidExclude, SNB32 SNB16Exclude, IStorage32 *pstgDest);
|
||||||
|
STDMETHOD(MoveElementTo)(THIS_ LPCOLESTR32 pwcsName, IStorage32 *pstgDest, LPCOLESTR32 pwcsNewName, DWORD grfFlags);
|
||||||
|
STDMETHOD(Commit)(THIS_ DWORD grfCommitFlags);
|
||||||
|
STDMETHOD(Revert)(THIS);
|
||||||
|
STDMETHOD(EnumElements)(THIS_ DWORD reserved1,void *reserved2, DWORD reserved3, IEnumSTATSTG **ppenum);
|
||||||
|
STDMETHOD(DestroyElement)(THIS_ LPCOLESTR32 pwcsName);
|
||||||
|
STDMETHOD(RenameElement)(THIS_ LPCOLESTR32 pwcsOldName, LPCOLESTR32 pwcsNewName);
|
||||||
|
STDMETHOD(SetElementTimes)(THIS_ LPCOLESTR32 pwcsName, const FILETIME *pctime, const FILETIME *patime, const FILETIME *pmtime);
|
||||||
|
STDMETHOD(SetClass)(THIS_ REFCLSID clsid);
|
||||||
|
STDMETHOD(SetStateBits)(THIS_ DWORD grfStateBits, DWORD grfMask);
|
||||||
|
STDMETHOD(Stat)(THIS_ STATSTG *pstatstg, DWORD grfStatFlag);
|
||||||
|
} IStorage32_VTable,*LPSTORAGE32_VTABLE;
|
||||||
|
|
||||||
|
struct IStorage32 {
|
||||||
|
LPSTORAGE32_VTABLE lpvtbl;
|
||||||
|
DWORD ref;
|
||||||
|
struct storage_pps_entry stde;
|
||||||
|
int ppsent;
|
||||||
|
HFILE32 hf;
|
||||||
|
};
|
||||||
|
#undef THIS
|
||||||
|
|
||||||
|
#define THIS LPSTREAM16 this
|
||||||
|
typedef struct IStream16_VTable {
|
||||||
|
STDMETHOD(QueryInterface)(THIS_ REFIID riid, void * *ppvObject);
|
||||||
|
STDMETHOD_(ULONG,AddRef)(THIS);
|
||||||
|
STDMETHOD_(ULONG,Release)(THIS);
|
||||||
|
STDMETHOD(Read)(THIS_ void *pv, ULONG cb, ULONG *pcbRead);
|
||||||
|
STDMETHOD(Write)(THIS_ const void *pv,ULONG cb,ULONG *pcbWritten);
|
||||||
|
STDMETHOD(Seek)(THIS_ LARGE_INTEGER dlibMove,DWORD dwOrigin,ULARGE_INTEGER *plibNewPosition);
|
||||||
|
STDMETHOD(SetSize)(THIS_ ULARGE_INTEGER libNewSize);
|
||||||
|
STDMETHOD(CopyTo)(THIS_ IStream16 *pstm,ULARGE_INTEGER cb,ULARGE_INTEGER *pcbRead,ULARGE_INTEGER *pcbWritten);
|
||||||
|
STDMETHOD(Commit)(THIS_ DWORD grfCommitFlags);
|
||||||
|
STDMETHOD(Revert)(THIS);
|
||||||
|
STDMETHOD(LockRegion)(THIS_ ULARGE_INTEGER libOffset, ULARGE_INTEGER cb,DWORD dwLockType);
|
||||||
|
STDMETHOD(UnlockRegion)(THIS_ ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, DWORD dwLockType);
|
||||||
|
STDMETHOD(Stat)(THIS_ STATSTG *pstatstg, DWORD grfStatFlag);
|
||||||
|
STDMETHOD(Clone)(THIS_ IStream16 **ppstm);
|
||||||
|
} IStream16_VTable,*LPSTREAM16_VTABLE;
|
||||||
|
|
||||||
|
struct IStream16 {
|
||||||
|
LPSTREAM16_VTABLE lpvtbl;
|
||||||
|
DWORD ref;
|
||||||
|
SEGPTR thisptr; /* pointer to this struct as segmented */
|
||||||
|
struct storage_pps_entry stde;
|
||||||
|
int ppsent;
|
||||||
|
HFILE32 hf;
|
||||||
|
ULARGE_INTEGER offset;
|
||||||
|
};
|
||||||
|
#undef THIS
|
||||||
|
#define THIS LPSTREAM32 this
|
||||||
|
typedef struct IStream32_VTable {
|
||||||
|
STDMETHOD(QueryInterface)(THIS_ REFIID riid, void * *ppvObject);
|
||||||
|
STDMETHOD_(ULONG,AddRef)(THIS);
|
||||||
|
STDMETHOD_(ULONG,Release)(THIS);
|
||||||
|
STDMETHOD(Read)(THIS_ void *pv, ULONG cb, ULONG *pcbRead);
|
||||||
|
STDMETHOD(Write)(THIS_ const void *pv,ULONG cb,ULONG *pcbWritten);
|
||||||
|
STDMETHOD(Seek)(THIS_ LARGE_INTEGER dlibMove,DWORD dwOrigin,ULARGE_INTEGER *plibNewPosition);
|
||||||
|
STDMETHOD(SetSize)(THIS_ ULARGE_INTEGER libNewSize);
|
||||||
|
STDMETHOD(CopyTo)(THIS_ IStream32 *pstm,ULARGE_INTEGER cb,ULARGE_INTEGER *pcbRead,ULARGE_INTEGER *pcbWritten);
|
||||||
|
STDMETHOD(Commit)(THIS_ DWORD grfCommitFlags);
|
||||||
|
STDMETHOD(Revert)(THIS);
|
||||||
|
STDMETHOD(LockRegion)(THIS_ ULARGE_INTEGER libOffset, ULARGE_INTEGER cb,DWORD dwLockType);
|
||||||
|
STDMETHOD(UnlockRegion)(THIS_ ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, DWORD dwLockType);
|
||||||
|
STDMETHOD(Stat)(THIS_ STATSTG *pstatstg, DWORD grfStatFlag);
|
||||||
|
STDMETHOD(Clone)(THIS_ IStream32 **ppstm);
|
||||||
|
} IStream32_VTable,*LPSTREAM32_VTABLE;
|
||||||
|
|
||||||
|
struct IStream32 {
|
||||||
|
LPSTREAM32_VTABLE lpvtbl;
|
||||||
|
DWORD ref;
|
||||||
|
struct storage_pps_entry stde;
|
||||||
|
int ppsent;
|
||||||
|
HFILE32 hf;
|
||||||
|
ULARGE_INTEGER offset;
|
||||||
|
};
|
||||||
|
#undef THIS
|
||||||
|
|
||||||
|
#undef STDMETHOD
|
||||||
|
#undef STDMETHOD_
|
||||||
|
#undef PURE
|
||||||
|
#undef FAR
|
||||||
|
#undef THIS_
|
||||||
|
#endif
|
|
@ -12,6 +12,8 @@
|
||||||
#include "winnt.h"
|
#include "winnt.h"
|
||||||
#include "selectors.h" /* for SET_FS */
|
#include "selectors.h" /* for SET_FS */
|
||||||
|
|
||||||
|
struct _PDB32;
|
||||||
|
|
||||||
/* Thread exception block */
|
/* Thread exception block */
|
||||||
typedef struct _TEB
|
typedef struct _TEB
|
||||||
{
|
{
|
||||||
|
@ -30,6 +32,7 @@ typedef struct _TEB
|
||||||
HQUEUE16 queue; /* 28 Message queue */
|
HQUEUE16 queue; /* 28 Message queue */
|
||||||
WORD pad1; /* 2a */
|
WORD pad1; /* 2a */
|
||||||
LPVOID *tls_ptr; /* 2c Pointer to TLS array */
|
LPVOID *tls_ptr; /* 2c Pointer to TLS array */
|
||||||
|
struct _PDB32 *process; /* 30 owning process (used by NT3.51 applets)*/
|
||||||
} TEB;
|
} TEB;
|
||||||
|
|
||||||
/* Event waiting structure */
|
/* Event waiting structure */
|
||||||
|
@ -41,8 +44,6 @@ typedef struct
|
||||||
K32OBJ *objs[MAXIMUM_WAIT_OBJECTS]; /* Object pointers */
|
K32OBJ *objs[MAXIMUM_WAIT_OBJECTS]; /* Object pointers */
|
||||||
} WAIT_STRUCT;
|
} WAIT_STRUCT;
|
||||||
|
|
||||||
struct _PDB32;
|
|
||||||
|
|
||||||
/* Thread database */
|
/* Thread database */
|
||||||
typedef struct _THDB
|
typedef struct _THDB
|
||||||
{
|
{
|
||||||
|
@ -50,7 +51,6 @@ typedef struct _THDB
|
||||||
struct _PDB32 *process; /* 08 Process owning this thread */
|
struct _PDB32 *process; /* 08 Process owning this thread */
|
||||||
K32OBJ *event; /* 0c Thread event */
|
K32OBJ *event; /* 0c Thread event */
|
||||||
TEB teb; /* 10 Thread exception block */
|
TEB teb; /* 10 Thread exception block */
|
||||||
DWORD cur_stack; /* 40 Current stack (was: process2) */
|
|
||||||
DWORD flags; /* 44 Flags */
|
DWORD flags; /* 44 Flags */
|
||||||
DWORD exit_code; /* 48 Termination status */
|
DWORD exit_code; /* 48 Termination status */
|
||||||
WORD teb_sel; /* 4c Selector to TEB */
|
WORD teb_sel; /* 4c Selector to TEB */
|
||||||
|
@ -67,7 +67,8 @@ typedef struct _THDB
|
||||||
void *debugger_CB; /* 74 Debugger context block */
|
void *debugger_CB; /* 74 Debugger context block */
|
||||||
DWORD debug_thread; /* 78 Thread debugging this one (?) */
|
DWORD debug_thread; /* 78 Thread debugging this one (?) */
|
||||||
void *pcontext; /* 7c Thread register context */
|
void *pcontext; /* 7c Thread register context */
|
||||||
DWORD unknown3[3]; /* 80 Unknown */
|
DWORD cur_stack; /* 80 Current stack (was: unknown) */
|
||||||
|
DWORD unknown3[2]; /* 84 Unknown */
|
||||||
WORD current_ss; /* 8c Another 16-bit stack selector */
|
WORD current_ss; /* 8c Another 16-bit stack selector */
|
||||||
WORD pad2; /* 8e */
|
WORD pad2; /* 8e */
|
||||||
void *ss_table; /* 90 Pointer to info about 16-bit stack */
|
void *ss_table; /* 90 Pointer to info about 16-bit stack */
|
||||||
|
@ -125,6 +126,7 @@ extern THDB *THREAD_Current(void);
|
||||||
extern THDB *THREAD_GetPtr( HANDLE32 handle, DWORD access );
|
extern THDB *THREAD_GetPtr( HANDLE32 handle, DWORD access );
|
||||||
extern void THREAD_AddQueue( THREAD_QUEUE *queue, THDB *thread );
|
extern void THREAD_AddQueue( THREAD_QUEUE *queue, THDB *thread );
|
||||||
extern void THREAD_RemoveQueue( THREAD_QUEUE *queue, THDB *thread );
|
extern void THREAD_RemoveQueue( THREAD_QUEUE *queue, THDB *thread );
|
||||||
|
extern DWORD THREAD_TlsAlloc( THDB *thread );
|
||||||
|
|
||||||
/* scheduler/event.c */
|
/* scheduler/event.c */
|
||||||
extern void EVENT_Set( K32OBJ *obj );
|
extern void EVENT_Set( K32OBJ *obj );
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
#define WINE_RELEASE_INFO "Wine release 980215"
|
#define WINE_RELEASE_INFO "Wine release 980301"
|
||||||
|
|
|
@ -5767,6 +5767,9 @@ HANDLE32 WINAPI GetCurrentProcess(void);
|
||||||
DWORD WINAPI GetCurrentProcessId(void);
|
DWORD WINAPI GetCurrentProcessId(void);
|
||||||
HANDLE32 WINAPI GetCurrentThread(void);
|
HANDLE32 WINAPI GetCurrentThread(void);
|
||||||
DWORD WINAPI GetCurrentThreadId(void);
|
DWORD WINAPI GetCurrentThreadId(void);
|
||||||
|
INT32 WINAPI GetDateFormat32A(LCID,DWORD,LPSYSTEMTIME,LPCSTR,LPSTR,INT32);
|
||||||
|
INT32 WINAPI GetDateFormat32W(LCID,DWORD,LPSYSTEMTIME,LPCWSTR,LPWSTR,INT32);
|
||||||
|
#define GetDateFormat WINELIB_NAME_AW(GetDateFormat)
|
||||||
BOOL32 WINAPI GetDCOrgEx(HDC32,LPPOINT32);
|
BOOL32 WINAPI GetDCOrgEx(HDC32,LPPOINT32);
|
||||||
LPSTR WINAPI GetEnvironmentStrings32A(void);
|
LPSTR WINAPI GetEnvironmentStrings32A(void);
|
||||||
LPWSTR WINAPI GetEnvironmentStrings32W(void);
|
LPWSTR WINAPI GetEnvironmentStrings32W(void);
|
||||||
|
@ -5856,6 +5859,8 @@ BOOL32 WINAPI MoveFileEx32A(LPCSTR,LPCSTR,DWORD);
|
||||||
BOOL32 WINAPI MoveFileEx32W(LPCWSTR,LPCWSTR,DWORD);
|
BOOL32 WINAPI MoveFileEx32W(LPCWSTR,LPCWSTR,DWORD);
|
||||||
#define MoveFileEx WINELIB_NAME_AW(MoveFileEx)
|
#define MoveFileEx WINELIB_NAME_AW(MoveFileEx)
|
||||||
DWORD WINAPI MsgWaitForMultipleObjects(DWORD,HANDLE32*,BOOL32,DWORD,DWORD);
|
DWORD WINAPI MsgWaitForMultipleObjects(DWORD,HANDLE32*,BOOL32,DWORD,DWORD);
|
||||||
|
INT32 WINAPI MultiByteToWideChar(UINT32,DWORD,LPCSTR,INT32,LPWSTR,INT32);
|
||||||
|
INT32 WINAPI WideCharToMultiByte(UINT32,DWORD,LPCWSTR,INT32,LPSTR,INT32,LPCSTR,BOOL32*);
|
||||||
HANDLE32 WINAPI OpenEvent32A(DWORD,BOOL32,LPCSTR);
|
HANDLE32 WINAPI OpenEvent32A(DWORD,BOOL32,LPCSTR);
|
||||||
HANDLE32 WINAPI OpenEvent32W(DWORD,BOOL32,LPCWSTR);
|
HANDLE32 WINAPI OpenEvent32W(DWORD,BOOL32,LPCWSTR);
|
||||||
#define OpenEvent WINELIB_NAME_AW(OpenEvent)
|
#define OpenEvent WINELIB_NAME_AW(OpenEvent)
|
||||||
|
@ -5877,7 +5882,7 @@ BOOL32 WINAPI QueryPerformanceCounter(LPLARGE_INTEGER);
|
||||||
BOOL32 WINAPI ReadConsole32A(HANDLE32,LPVOID,DWORD,LPDWORD,LPVOID);
|
BOOL32 WINAPI ReadConsole32A(HANDLE32,LPVOID,DWORD,LPDWORD,LPVOID);
|
||||||
BOOL32 WINAPI ReadConsole32W(HANDLE32,LPVOID,DWORD,LPDWORD,LPVOID);
|
BOOL32 WINAPI ReadConsole32W(HANDLE32,LPVOID,DWORD,LPDWORD,LPVOID);
|
||||||
#define ReadConsole WINELIB_NAME_AW(ReadConsole)
|
#define ReadConsole WINELIB_NAME_AW(ReadConsole)
|
||||||
BOOL32 WINAPI ReadFile(HFILE32,LPVOID,DWORD,LPDWORD,LPOVERLAPPED);
|
BOOL32 WINAPI ReadFile(HANDLE32,LPVOID,DWORD,LPDWORD,LPOVERLAPPED);
|
||||||
DWORD WINAPI RegCreateKeyEx32A(HKEY,LPCSTR,DWORD,LPSTR,DWORD,REGSAM,
|
DWORD WINAPI RegCreateKeyEx32A(HKEY,LPCSTR,DWORD,LPSTR,DWORD,REGSAM,
|
||||||
LPSECURITY_ATTRIBUTES,LPHKEY,LPDWORD);
|
LPSECURITY_ATTRIBUTES,LPHKEY,LPDWORD);
|
||||||
DWORD WINAPI RegCreateKeyEx32W(HKEY,LPCWSTR,DWORD,LPWSTR,DWORD,REGSAM,
|
DWORD WINAPI RegCreateKeyEx32W(HKEY,LPCWSTR,DWORD,LPWSTR,DWORD,REGSAM,
|
||||||
|
@ -5967,7 +5972,7 @@ WORD WINAPI WOWHandle16(HANDLE32,WOW_HANDLE_TYPE);
|
||||||
BOOL32 WINAPI WriteConsole32A(HANDLE32,LPCVOID,DWORD,LPDWORD,LPVOID);
|
BOOL32 WINAPI WriteConsole32A(HANDLE32,LPCVOID,DWORD,LPDWORD,LPVOID);
|
||||||
BOOL32 WINAPI WriteConsole32W(HANDLE32,LPCVOID,DWORD,LPDWORD,LPVOID);
|
BOOL32 WINAPI WriteConsole32W(HANDLE32,LPCVOID,DWORD,LPDWORD,LPVOID);
|
||||||
#define WriteConsole WINELIB_NAME_AW(WriteConsole)
|
#define WriteConsole WINELIB_NAME_AW(WriteConsole)
|
||||||
BOOL32 WINAPI WriteFile(HFILE32,LPVOID,DWORD,LPDWORD,LPOVERLAPPED);
|
BOOL32 WINAPI WriteFile(HANDLE32,LPCVOID,DWORD,LPDWORD,LPOVERLAPPED);
|
||||||
|
|
||||||
/* Declarations for functions that are the same in Win16 and Win32 */
|
/* Declarations for functions that are the same in Win16 and Win32 */
|
||||||
|
|
||||||
|
|
|
@ -4,6 +4,11 @@
|
||||||
|
|
||||||
extern int WIN32_LastError;
|
extern int WIN32_LastError;
|
||||||
|
|
||||||
|
#define FACILITY_WIN32 7
|
||||||
|
|
||||||
|
#define SEVERITY_ERROR 1
|
||||||
|
|
||||||
|
|
||||||
#define MAKE_HRESULT(sev,fac,code) \
|
#define MAKE_HRESULT(sev,fac,code) \
|
||||||
((HRESULT) (((unsigned long)(sev)<<31) | ((unsigned long)(fac)<<16) | ((unsigned long)(code))) )
|
((HRESULT) (((unsigned long)(sev)<<31) | ((unsigned long)(fac)<<16) | ((unsigned long)(code))) )
|
||||||
#define MAKE_SCODE(sev,fac,code) \
|
#define MAKE_SCODE(sev,fac,code) \
|
||||||
|
@ -52,6 +57,7 @@ extern int WIN32_LastError;
|
||||||
#define ERROR_POSSIBLE_DEADLOCK 1131
|
#define ERROR_POSSIBLE_DEADLOCK 1131
|
||||||
#define ERROR_BAD_DEVICE 1200
|
#define ERROR_BAD_DEVICE 1200
|
||||||
#define ERROR_NO_NETWORK 1222
|
#define ERROR_NO_NETWORK 1222
|
||||||
|
#define ERROR_ALREADY_INITIALIZED 1247
|
||||||
#define ERROR_COMMITMENT_LIMIT 1455
|
#define ERROR_COMMITMENT_LIMIT 1455
|
||||||
|
|
||||||
/* HRESULT values for OLE, SHELL and other Interface stuff */
|
/* HRESULT values for OLE, SHELL and other Interface stuff */
|
||||||
|
@ -66,4 +72,38 @@ extern int WIN32_LastError;
|
||||||
#define E_OUTOFMEMORY 0x8007000E
|
#define E_OUTOFMEMORY 0x8007000E
|
||||||
#define E_INVALIDARG 0x80070057
|
#define E_INVALIDARG 0x80070057
|
||||||
|
|
||||||
|
#define STG_E_INVALIDFUNCTION 0x80030001
|
||||||
|
#define STG_E_FILENOTFOUND 0x80030002
|
||||||
|
#define STG_E_PATHNOTFOUND 0x80030003
|
||||||
|
#define STG_E_TOOMANYOPENFILES 0x80030004
|
||||||
|
#define STG_E_ACCESSDENIED 0x80030005
|
||||||
|
#define STG_E_INVALIDHANDLE 0x80030006
|
||||||
|
#define STG_E_INSUFFICIENTMEMORY 0x80030008
|
||||||
|
#define STG_E_INVALIDPOINTER 0x80030009
|
||||||
|
#define STG_E_NOMOREFILES 0x80030012
|
||||||
|
#define STG_E_DISKISWRITEPROTECTED 0x80030013
|
||||||
|
#define STG_E_SEEKERROR 0x80030019
|
||||||
|
#define STG_E_WRITEFAULT 0x8003001D
|
||||||
|
#define STG_E_READFAULT 0x8003001E
|
||||||
|
#define STG_E_SHAREVIOLATION 0x80030020
|
||||||
|
#define STG_E_LOCKVIOLATION 0x80030021
|
||||||
|
#define STG_E_FILEALREADYEXISTS 0x80030050
|
||||||
|
#define STG_E_INVALIDPARAMETER 0x80030057
|
||||||
|
#define STG_E_MEDIUMFULL 0x80030070
|
||||||
|
#define STG_E_ABNORMALAPIEXIT 0x800300FA
|
||||||
|
#define STG_E_INVALIDHEADER 0x800300FB
|
||||||
|
#define STG_E_INVALIDNAME 0x800300FC
|
||||||
|
#define STG_E_UNKNOWN 0x800300FD
|
||||||
|
#define STG_E_UNIMPLEMENTEDFUNCTION 0x800300FE
|
||||||
|
#define STG_E_INVALIDFLAG 0x800300FF
|
||||||
|
#define STG_E_INUSE 0x80030100
|
||||||
|
#define STG_E_NOTCURRENT 0x80030101
|
||||||
|
#define STG_E_REVERTED 0x80030102
|
||||||
|
#define STG_E_CANTSAVE 0x80030103
|
||||||
|
#define STG_E_OLDFORMAT 0x80030104
|
||||||
|
#define STG_E_OLDDLL 0x80030105
|
||||||
|
#define STG_E_SHAREREQUIRED 0x80030106
|
||||||
|
#define STG_E_NOTFILEBASEDSTORAGE 0x80030107
|
||||||
|
#define STG_E_EXTANTMARSHALLINGS 0x80030108
|
||||||
|
|
||||||
#endif /* __WINE_WINERROR_H */
|
#endif /* __WINE_WINERROR_H */
|
||||||
|
|
|
@ -16,7 +16,6 @@
|
||||||
#include "shm_main_blk.h"
|
#include "shm_main_blk.h"
|
||||||
#include "shm_fragment.h"
|
#include "shm_fragment.h"
|
||||||
#include "ldt.h"
|
#include "ldt.h"
|
||||||
#include "stddebug.h"
|
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
|
@ -130,7 +129,7 @@ ATOM DDE_GlobalAddAtom( SEGPTR name )
|
||||||
return (atom<MIN_STR_ATOM) ? atom : 0;
|
return (atom<MIN_STR_ATOM) ? atom : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
dprintf_atom(stddeb,"GlobalAddAtom(\"%s\")\n",str);
|
dprintf_info(atom,"GlobalAddAtom(\"%s\")\n",str);
|
||||||
|
|
||||||
DDE_IPC_init(); /* will initialize only if needed */
|
DDE_IPC_init(); /* will initialize only if needed */
|
||||||
|
|
||||||
|
@ -175,7 +174,7 @@ ATOM DDE_GlobalDeleteAtom( ATOM atom )
|
||||||
AtomData_ptr atom_ptr;
|
AtomData_ptr atom_ptr;
|
||||||
ATOM retval=(ATOM) 0;
|
ATOM retval=(ATOM) 0;
|
||||||
|
|
||||||
dprintf_atom(stddeb,"GlobalDeleteAtom(\"%d\")\n",(int)atom);
|
dprintf_info(atom,"GlobalDeleteAtom(\"%d\")\n",(int)atom);
|
||||||
atom_idx=(int)atom - MIN_STR_ATOM;
|
atom_idx=(int)atom - MIN_STR_ATOM;
|
||||||
|
|
||||||
if (atom_idx < 0 )
|
if (atom_idx < 0 )
|
||||||
|
@ -212,7 +211,7 @@ ATOM DDE_GlobalFindAtom( SEGPTR name )
|
||||||
int atom_ofs;
|
int atom_ofs;
|
||||||
char *str;
|
char *str;
|
||||||
|
|
||||||
dprintf_atom(stddeb,"GlobalFindAtom(%08lx)\n", name );
|
dprintf_info(atom,"GlobalFindAtom(%08lx)\n", name );
|
||||||
|
|
||||||
/* First check for integer atom */
|
/* First check for integer atom */
|
||||||
|
|
||||||
|
@ -224,7 +223,7 @@ ATOM DDE_GlobalFindAtom( SEGPTR name )
|
||||||
ATOM atom= (ATOM) atoi(&str[1]);
|
ATOM atom= (ATOM) atoi(&str[1]);
|
||||||
return (atom<MIN_STR_ATOM) ? atom : 0;
|
return (atom<MIN_STR_ATOM) ? atom : 0;
|
||||||
}
|
}
|
||||||
dprintf_atom(stddeb,"GlobalFindAtom(\"%s\")\n",str);
|
dprintf_info(atom,"GlobalFindAtom(\"%s\")\n",str);
|
||||||
|
|
||||||
DDE_IPC_init(); /* will initialize only if needed */
|
DDE_IPC_init(); /* will initialize only if needed */
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,6 @@
|
||||||
#include <win.h>
|
#include <win.h>
|
||||||
#include "dde_atom.h"
|
#include "dde_atom.h"
|
||||||
#include "shm_main_blk.h"
|
#include "shm_main_blk.h"
|
||||||
#include <stddebug.h>
|
|
||||||
#include <debug.h>
|
#include <debug.h>
|
||||||
#define TOGETHER (DDE_ATOMS/5)
|
#define TOGETHER (DDE_ATOMS/5)
|
||||||
|
|
||||||
|
@ -25,9 +24,9 @@ int main()
|
||||||
int i,j,atom_n;
|
int i,j,atom_n;
|
||||||
int atom_len[TOGETHER];
|
int atom_len[TOGETHER];
|
||||||
|
|
||||||
debugging_shm=1;
|
debugging_info(shm)=1;
|
||||||
debugging_atom=0;
|
debugging_info(atom)=0;
|
||||||
debugging_sem=0;
|
debugging_info(sem)=0;
|
||||||
|
|
||||||
for (i=0 ; i<=10000/TOGETHER ; i++) {
|
for (i=0 ; i<=10000/TOGETHER ; i++) {
|
||||||
for (atom_n=0 ; atom_n<TOGETHER ; atom_n++) {
|
for (atom_n=0 ; atom_n<TOGETHER ; atom_n++) {
|
||||||
|
|
|
@ -10,9 +10,8 @@
|
||||||
#ifdef CONFIG_IPC
|
#ifdef CONFIG_IPC
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stddebug.h>
|
|
||||||
#include <debug.h>
|
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
#include "debug.h"
|
||||||
#include "ldt.h"
|
#include "ldt.h"
|
||||||
#include "shm_main_blk.h"
|
#include "shm_main_blk.h"
|
||||||
#include "shm_fragment.h"
|
#include "shm_fragment.h"
|
||||||
|
@ -59,18 +58,18 @@ static struct handle_info *locate_handle(HGLOBAL16 h, struct local_shm_map *map)
|
||||||
{
|
{
|
||||||
struct shm_block *block;
|
struct shm_block *block;
|
||||||
|
|
||||||
dprintf_global(stddeb,"shm:locate_handle(0x%04x)\n", h);
|
dprintf_info(global,"shm:locate_handle(0x%04x)\n", h);
|
||||||
|
|
||||||
|
|
||||||
if (SampleBit( &free_handles, DDE_MEM_IDX(h)) == 0) {
|
if (SampleBit( &free_handles, DDE_MEM_IDX(h)) == 0) {
|
||||||
dprintf_global(stddeb, "shm:locate_handle: return NULL\n");
|
dprintf_info(global, "shm:locate_handle: return NULL\n");
|
||||||
return NULL; /* free!!! */
|
return NULL; /* free!!! */
|
||||||
}
|
}
|
||||||
|
|
||||||
block= shm_locate_block(DDE_MEM_INFO(h).shmid, map);
|
block= shm_locate_block(DDE_MEM_INFO(h).shmid, map);
|
||||||
if (block == NULL) {
|
if (block == NULL) {
|
||||||
/* nothing found */
|
/* nothing found */
|
||||||
dprintf_global(stddeb, "shm:locate_handle: return NULL\n");
|
dprintf_info(global, "shm:locate_handle: return NULL\n");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -88,7 +87,7 @@ static HGLOBAL16 dde_alloc_handle()
|
||||||
if (bit_nr != -1)
|
if (bit_nr != -1)
|
||||||
return DDE_MEM_HANDLE(bit_nr);
|
return DDE_MEM_HANDLE(bit_nr);
|
||||||
|
|
||||||
dprintf_global(stddeb,"dde_alloc_handle: no free DDE handle found\n");
|
dprintf_info(global,"dde_alloc_handle: no free DDE handle found\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
|
@ -103,7 +102,7 @@ DDE_malloc(unsigned int flags, unsigned long size, SHMDATA *shmdata)
|
||||||
struct local_shm_map *curr;
|
struct local_shm_map *curr;
|
||||||
HGLOBAL16 handle;
|
HGLOBAL16 handle;
|
||||||
|
|
||||||
dprintf_global(stddeb,"DDE_malloc flags %4X, size %ld\n", flags, size);
|
dprintf_info(global,"DDE_malloc flags %4X, size %ld\n", flags, size);
|
||||||
DDE_IPC_init(); /* make sure main shm block allocated */
|
DDE_IPC_init(); /* make sure main shm block allocated */
|
||||||
|
|
||||||
shm_write_wait(main_block->proc[curr_proc_idx].sem);
|
shm_write_wait(main_block->proc[curr_proc_idx].sem);
|
||||||
|
@ -152,14 +151,14 @@ DDE_malloc(unsigned int flags, unsigned long size, SHMDATA *shmdata)
|
||||||
handle= dde_alloc_handle();
|
handle= dde_alloc_handle();
|
||||||
|
|
||||||
if (handle) {
|
if (handle) {
|
||||||
dprintf_global(stddeb,
|
dprintf_info(global,
|
||||||
"DDE_malloc returning handle=0x%4x, ptr=0x%08lx\n",
|
"DDE_malloc returning handle=0x%4x, ptr=0x%08lx\n",
|
||||||
(int)handle, (long) HINFO2DATAPTR(h_info));
|
(int)handle, (long) HINFO2DATAPTR(h_info));
|
||||||
DDE_MEM_INFO(handle).rel= PTR2REL(block, h_info);
|
DDE_MEM_INFO(handle).rel= PTR2REL(block, h_info);
|
||||||
DDE_MEM_INFO(handle).shmid= shmid;
|
DDE_MEM_INFO(handle).shmid= shmid;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
dprintf_global(stddeb,"DDE_malloc failed\n");
|
dprintf_warn(global, "DDE_malloc failed\n");
|
||||||
|
|
||||||
shm_write_signal(main_block->proc[curr_proc_idx].sem);
|
shm_write_signal(main_block->proc[curr_proc_idx].sem);
|
||||||
|
|
||||||
|
@ -173,7 +172,7 @@ HGLOBAL16 DDE_GlobalFree(HGLOBAL16 h)
|
||||||
int handle_index= h & 0x7fff;
|
int handle_index= h & 0x7fff;
|
||||||
struct local_shm_map map;
|
struct local_shm_map map;
|
||||||
|
|
||||||
dprintf_global(stddeb,"DDE_GlobalFree(0x%04x)\n",h);
|
dprintf_info(global,"DDE_GlobalFree(0x%04x)\n",h);
|
||||||
|
|
||||||
if (h==0)
|
if (h==0)
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -239,7 +238,7 @@ void *DDE_AttachHandle(HGLOBAL16 handle, SEGPTR *segptr)
|
||||||
if (segptr != NULL)
|
if (segptr != NULL)
|
||||||
*segptr=0;
|
*segptr=0;
|
||||||
|
|
||||||
dprintf_global(stddeb,"DDE_AttachHandle(%04x)\n",handle);
|
dprintf_info(global,"DDE_AttachHandle(%04x)\n",handle);
|
||||||
h_info=locate_handle(handle, NULL);
|
h_info=locate_handle(handle, NULL);
|
||||||
|
|
||||||
if (h_info == NULL)
|
if (h_info == NULL)
|
||||||
|
@ -250,7 +249,7 @@ void *DDE_AttachHandle(HGLOBAL16 handle, SEGPTR *segptr)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
dprintf_global(stddeb,"DDE_AttachHandle: h_info=%06lx\n",(long)h_info);
|
dprintf_info(global,"DDE_AttachHandle: h_info=%06lx\n",(long)h_info);
|
||||||
|
|
||||||
shmdata.handle= handle;
|
shmdata.handle= handle;
|
||||||
shmdata.shmid= DDE_MEM_INFO(handle).shmid;
|
shmdata.shmid= DDE_MEM_INFO(handle).shmid;
|
||||||
|
@ -264,10 +263,10 @@ void *DDE_AttachHandle(HGLOBAL16 handle, SEGPTR *segptr)
|
||||||
if (segptr != NULL)
|
if (segptr != NULL)
|
||||||
*segptr= (SEGPTR)MAKELONG( 0, shmdata.sel);
|
*segptr= (SEGPTR)MAKELONG( 0, shmdata.sel);
|
||||||
|
|
||||||
if (debugging_dde)
|
if (debugging_info(dde))
|
||||||
debug_last_handle_size= h_info->size;
|
debug_last_handle_size= h_info->size;
|
||||||
|
|
||||||
dprintf_global(stddeb,"DDE_AttachHandle returns ptr=0x%08lx\n", (long)ptr);
|
dprintf_info(global,"DDE_AttachHandle returns ptr=0x%08lx\n", (long)ptr);
|
||||||
|
|
||||||
return (LPSTR)ptr;
|
return (LPSTR)ptr;
|
||||||
|
|
||||||
|
|
|
@ -26,7 +26,6 @@
|
||||||
#include "dde_proc.h"
|
#include "dde_proc.h"
|
||||||
#include "dde_mem.h"
|
#include "dde_mem.h"
|
||||||
#include "dde.h"
|
#include "dde.h"
|
||||||
#include "stddebug.h"
|
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
#include "xmalloc.h"
|
#include "xmalloc.h"
|
||||||
|
|
||||||
|
@ -48,9 +47,7 @@ sigjmp_buf env_wait_x;
|
||||||
#define DDE_MSG_SIZE sizeof(MSG16)
|
#define DDE_MSG_SIZE sizeof(MSG16)
|
||||||
#define FREE_WND (WORD)(-2)
|
#define FREE_WND (WORD)(-2)
|
||||||
#define DELETED_WND (WORD)(-3)
|
#define DELETED_WND (WORD)(-3)
|
||||||
#if defined(DEBUG_MSG) || defined(DEBUG_RUNTIME)
|
|
||||||
static char *msg_type[4]={"********", "DDE_SEND", "DDE_POST", "DDE_ACK"};
|
static char *msg_type[4]={"********", "DDE_SEND", "DDE_POST", "DDE_ACK"};
|
||||||
#endif
|
|
||||||
|
|
||||||
struct msg_dat {
|
struct msg_dat {
|
||||||
struct msgbuf dat;
|
struct msgbuf dat;
|
||||||
|
@ -126,7 +123,7 @@ void dde_proc_add(dde_proc procs)
|
||||||
{
|
{
|
||||||
dde_proc proc;
|
dde_proc proc;
|
||||||
int proc_idx;
|
int proc_idx;
|
||||||
dprintf_dde(stddeb,"dde_proc_add(..)\n");
|
dprintf_info(dde,"dde_proc_add(..)\n");
|
||||||
shm_write_wait(main_block->sem);
|
shm_write_wait(main_block->sem);
|
||||||
|
|
||||||
/* find free proc_idx and allocate it */
|
/* find free proc_idx and allocate it */
|
||||||
|
@ -167,7 +164,7 @@ static BOOL32 get_ack()
|
||||||
size= msgrcv( main_block->proc[curr_proc_idx].msg , &ack_buff.dat,
|
size= msgrcv( main_block->proc[curr_proc_idx].msg , &ack_buff.dat,
|
||||||
1, DDE_ACK, IPC_NOWAIT);
|
1, DDE_ACK, IPC_NOWAIT);
|
||||||
if (size>=0) {
|
if (size>=0) {
|
||||||
dprintf_msg(stddeb,"get_ack: received DDE_ACK message\n");
|
dprintf_info(msg,"get_ack: received DDE_ACK message\n");
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
if (DDE_GetRemoteMessage()) {
|
if (DDE_GetRemoteMessage()) {
|
||||||
|
@ -200,7 +197,7 @@ static BOOL32 DDE_DoOneMessage (int proc_idx, int size, struct msgbuf *msgbuf)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (debugging_dde) {
|
if (debugging_info(dde) || debugging_warn_dde) {
|
||||||
MSG16 *msg=(MSG16*) &msgbuf->mtext;
|
MSG16 *msg=(MSG16*) &msgbuf->mtext;
|
||||||
char *title;
|
char *title;
|
||||||
if (msgbuf->mtype==DDE_SEND)
|
if (msgbuf->mtype==DDE_SEND)
|
||||||
|
@ -212,13 +209,13 @@ static BOOL32 DDE_DoOneMessage (int proc_idx, int size, struct msgbuf *msgbuf)
|
||||||
if (title)
|
if (title)
|
||||||
print_dde_message(title, msg);
|
print_dde_message(title, msg);
|
||||||
else
|
else
|
||||||
fprintf(stddeb,"Unknown message type=0x%lx\n",msgbuf->mtype);
|
dprintf_warn(dde, "Unknown message type=0x%lx\n", msgbuf->mtype);
|
||||||
}
|
}
|
||||||
dprintf_msg(stddeb,
|
dprintf_info(msg,
|
||||||
"DDE_DoOneMessage: to proc_idx=%d (pid=%d), queue=%u\n",
|
"DDE_DoOneMessage: to proc_idx=%d (pid=%d), queue=%u\n",
|
||||||
proc_idx, proc->pid, (unsigned)proc->msg);
|
proc_idx, proc->pid, (unsigned)proc->msg);
|
||||||
if ( proc->msg != -1) {
|
if ( proc->msg != -1) {
|
||||||
dprintf_msg(stddeb, "DDE_DoOneMessage: doing...(type=%s)\n",
|
dprintf_info(msg, "DDE_DoOneMessage: doing...(type=%s)\n",
|
||||||
msg_type[msgbuf->mtype]);
|
msg_type[msgbuf->mtype]);
|
||||||
size=msgsnd (proc->msg, msgbuf, size, 0);
|
size=msgsnd (proc->msg, msgbuf, size, 0);
|
||||||
|
|
||||||
|
@ -228,7 +225,7 @@ static BOOL32 DDE_DoOneMessage (int proc_idx, int size, struct msgbuf *msgbuf)
|
||||||
}
|
}
|
||||||
kill(proc->pid,SIGUSR2); /* tell the process there is a message */
|
kill(proc->pid,SIGUSR2); /* tell the process there is a message */
|
||||||
|
|
||||||
dprintf_msg(stddeb,"DDE_DoOneMessage: "
|
dprintf_info(msg,"DDE_DoOneMessage: "
|
||||||
"Trying to get acknowledgment from msg queue=%d\n",
|
"Trying to get acknowledgment from msg queue=%d\n",
|
||||||
proc->msg);
|
proc->msg);
|
||||||
Yield16(); /* force task switch, and */
|
Yield16(); /* force task switch, and */
|
||||||
|
@ -242,7 +239,7 @@ static BOOL32 DDE_DoOneMessage (int proc_idx, int size, struct msgbuf *msgbuf)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
dprintf_msg(stddeb,"DDE_DoOneMessage: message not sent, "
|
dprintf_warn(msg, "DDE_DoOneMessage: message not sent, "
|
||||||
"target has no message queue\n");
|
"target has no message queue\n");
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
@ -315,11 +312,11 @@ static BOOL32 DDE_DoMessage( MSG16 *msg, int type )
|
||||||
if ( ! DDE_IsRemoteWindow(msg->hwnd) && msg->hwnd!= (HWND16)-1)
|
if ( ! DDE_IsRemoteWindow(msg->hwnd) && msg->hwnd!= (HWND16)-1)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
dprintf_msg(stddeb, "%s: DDE_DoMessage(hwnd=0x%x,msg=0x%x,..)\n",
|
dprintf_info(msg, "%s: DDE_DoMessage(hwnd=0x%x,msg=0x%x,..)\n",
|
||||||
msg_type[type], (int)msg->hwnd,(int)msg->message);
|
msg_type[type], (int)msg->hwnd,(int)msg->message);
|
||||||
|
|
||||||
|
|
||||||
dprintf_msg(stddeb,
|
dprintf_info(msg,
|
||||||
"DDE_DoMessage(hwnd=0x%x,msg=0x%x,..) // HWND_BROADCAST !\n",
|
"DDE_DoMessage(hwnd=0x%x,msg=0x%x,..) // HWND_BROADCAST !\n",
|
||||||
(int)msg->hwnd,(int)msg->message);
|
(int)msg->hwnd,(int)msg->message);
|
||||||
remote_message=(void*)&msg_dat.dat.mtext;
|
remote_message=(void*)&msg_dat.dat.mtext;
|
||||||
|
@ -364,7 +361,7 @@ void dde_proc_send_ack(HWND16 wnd, BOOL32 val) {
|
||||||
|
|
||||||
proc=DDE_WIN2PROC(wnd);
|
proc=DDE_WIN2PROC(wnd);
|
||||||
msg=main_block->proc[proc].msg;
|
msg=main_block->proc[proc].msg;
|
||||||
dprintf_msg(stddeb,"DDE_GetRemoteMessage: sending ACK "
|
dprintf_info(msg,"DDE_GetRemoteMessage: sending ACK "
|
||||||
"to wnd=%4x, proc=%d,msg=%d, pid=%d\n",wnd,proc,msg,
|
"to wnd=%4x, proc=%d,msg=%d, pid=%d\n",wnd,proc,msg,
|
||||||
main_block->proc[proc].pid
|
main_block->proc[proc].pid
|
||||||
);
|
);
|
||||||
|
@ -405,7 +402,7 @@ int DDE_GetRemoteMessage()
|
||||||
|
|
||||||
if (size==DDE_MSG_SIZE) { /* is this a correct message (if any) ?*/
|
if (size==DDE_MSG_SIZE) { /* is this a correct message (if any) ?*/
|
||||||
was_sent=TRUE;
|
was_sent=TRUE;
|
||||||
dprintf_msg(stddeb,
|
dprintf_info(msg,
|
||||||
"DDE:receive sent message. msg=%04x wPar=%04x"
|
"DDE:receive sent message. msg=%04x wPar=%04x"
|
||||||
" lPar=%08lx\n",
|
" lPar=%08lx\n",
|
||||||
remote_message->message, remote_message->wParam,
|
remote_message->message, remote_message->wParam,
|
||||||
|
@ -416,7 +413,7 @@ int DDE_GetRemoteMessage()
|
||||||
|
|
||||||
if (size==DDE_MSG_SIZE) { /* is this a correct message (if any) ?*/
|
if (size==DDE_MSG_SIZE) { /* is this a correct message (if any) ?*/
|
||||||
was_sent=FALSE;
|
was_sent=FALSE;
|
||||||
dprintf_msg(stddeb,
|
dprintf_info(msg,
|
||||||
"DDE:receive posted message. "
|
"DDE:receive posted message. "
|
||||||
"msg=%04x wPar=%04x lPar=%08lx\n",
|
"msg=%04x wPar=%04x lPar=%08lx\n",
|
||||||
remote_message->message, remote_message->wParam,
|
remote_message->message, remote_message->wParam,
|
||||||
|
@ -432,7 +429,7 @@ int DDE_GetRemoteMessage()
|
||||||
|
|
||||||
nesting++;
|
nesting++;
|
||||||
|
|
||||||
if (debugging_dde) {
|
if (debugging_info(dde)) {
|
||||||
char *title;
|
char *title;
|
||||||
if (was_sent)
|
if (was_sent)
|
||||||
title="receive sent dde:";
|
title="receive sent dde:";
|
||||||
|
@ -445,7 +442,7 @@ int DDE_GetRemoteMessage()
|
||||||
HWND16 dde_window= DDE_WIN_INFO(remote_message->hwnd).wnd;
|
HWND16 dde_window= DDE_WIN_INFO(remote_message->hwnd).wnd;
|
||||||
/* we should know exactly where to send the message (locally)*/
|
/* we should know exactly where to send the message (locally)*/
|
||||||
if (was_sent) {
|
if (was_sent) {
|
||||||
dprintf_dde(stddeb,
|
dprintf_info(dde,
|
||||||
"SendMessage(wnd=0x%04x, msg=0x%04x, wPar=0x%04x,"
|
"SendMessage(wnd=0x%04x, msg=0x%04x, wPar=0x%04x,"
|
||||||
"lPar=0x%08x\n",
|
"lPar=0x%08x\n",
|
||||||
dde_window, remote_message->message,
|
dde_window, remote_message->message,
|
||||||
|
@ -527,7 +524,7 @@ void DDE_TestDDE(HWND16 hwnd)
|
||||||
in_test--;
|
in_test--;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
dprintf_msg(stddeb,"DDE_TestDDE(0x%04x)\n", hwnd);
|
dprintf_info(msg,"DDE_TestDDE(0x%04x)\n", hwnd);
|
||||||
if (hwnd==0)
|
if (hwnd==0)
|
||||||
hwnd=-1;
|
hwnd=-1;
|
||||||
/* just send a message to see how things are going */
|
/* just send a message to see how things are going */
|
||||||
|
@ -565,6 +562,7 @@ static void print_dde_message(char *desc, MSG16 *msg)
|
||||||
DDEADVISE *ddeadvise;
|
DDEADVISE *ddeadvise;
|
||||||
DDEDATA *ddedata;
|
DDEDATA *ddedata;
|
||||||
DDEPOKE *ddepoke;
|
DDEPOKE *ddepoke;
|
||||||
|
dbg_decl_str(dde, 2048);
|
||||||
|
|
||||||
if (is_dde_handle(msg->lParam & 0xffff) )
|
if (is_dde_handle(msg->lParam & 0xffff) )
|
||||||
ptr=DDE_AttachHandle(msg->lParam&0xffff, NULL);
|
ptr=DDE_AttachHandle(msg->lParam&0xffff, NULL);
|
||||||
|
@ -573,8 +571,8 @@ static void print_dde_message(char *desc, MSG16 *msg)
|
||||||
wStatus=LOWORD(msg->lParam);
|
wStatus=LOWORD(msg->lParam);
|
||||||
hWord=HIWORD(msg->lParam);
|
hWord=HIWORD(msg->lParam);
|
||||||
|
|
||||||
fprintf(stddeb,"%s", desc);
|
dsprintf(dde,"%s", desc);
|
||||||
fprintf(stddeb,"%04x %04x==%s %04x %08lx ",
|
dsprintf(dde,"%04x %04x==%s %04x %08lx ",
|
||||||
msg->hwnd, msg->message,"",/*MessageTypeNames[msg->message],*/
|
msg->hwnd, msg->message,"",/*MessageTypeNames[msg->message],*/
|
||||||
msg->wParam, msg->lParam);
|
msg->wParam, msg->lParam);
|
||||||
switch(msg->message) {
|
switch(msg->message) {
|
||||||
|
@ -588,52 +586,52 @@ static void print_dde_message(char *desc, MSG16 *msg)
|
||||||
/* DDEADVISE: hOptions in WM_DDE_ADVISE message */
|
/* DDEADVISE: hOptions in WM_DDE_ADVISE message */
|
||||||
if (ptr) {
|
if (ptr) {
|
||||||
ddeadvise=ptr;
|
ddeadvise=ptr;
|
||||||
fprintf(stddeb,"fDeferUpd=%d,fAckReq=%d,cfFormat=0x%x",
|
dsprintf(dde,"fDeferUpd=%d,fAckReq=%d,cfFormat=0x%x",
|
||||||
ddeadvise->fDeferUpd, ddeadvise->fAckReq,
|
ddeadvise->fDeferUpd, ddeadvise->fAckReq,
|
||||||
ddeadvise->cfFormat);
|
ddeadvise->cfFormat);
|
||||||
} else
|
} else
|
||||||
fprintf(stddeb,"NO-DATA");
|
dsprintf(dde,"NO-DATA");
|
||||||
fprintf(stddeb," atom=0x%x",hWord);
|
dsprintf(dde," atom=0x%x",hWord);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WM_DDE_UNADVISE:
|
case WM_DDE_UNADVISE:
|
||||||
fprintf(stddeb,"format=0x%x, atom=0x%x",wStatus,hWord);
|
dsprintf(dde,"format=0x%x, atom=0x%x",wStatus,hWord);
|
||||||
break;
|
break;
|
||||||
case WM_DDE_ACK:
|
case WM_DDE_ACK:
|
||||||
ddeack=(DDEACK*)&wStatus;
|
ddeack=(DDEACK*)&wStatus;
|
||||||
fprintf(stddeb,"bAppReturnCode=%d,fBusy=%d,fAck=%d",
|
dsprintf(dde,"bAppReturnCode=%d,fBusy=%d,fAck=%d",
|
||||||
ddeack->bAppReturnCode, ddeack->fBusy, ddeack->fAck);
|
ddeack->bAppReturnCode, ddeack->fBusy, ddeack->fAck);
|
||||||
if (ddeack->fAck)
|
if (ddeack->fAck)
|
||||||
fprintf(stddeb,"(True)");
|
dsprintf(dde,"(True)");
|
||||||
else
|
else
|
||||||
fprintf(stddeb,"(False)");
|
dsprintf(dde,"(False)");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WM_DDE_DATA:
|
case WM_DDE_DATA:
|
||||||
if (ptr) {
|
if (ptr) {
|
||||||
ddedata=ptr;
|
ddedata=ptr;
|
||||||
fprintf(stddeb,"fResponse=%d,fRelease=%d,"
|
dsprintf(dde,"fResponse=%d,fRelease=%d,"
|
||||||
"fAckReq=%d,cfFormat=0x%x,value=\"%.*s\"",
|
"fAckReq=%d,cfFormat=0x%x,value=\"%.*s\"",
|
||||||
ddedata->fResponse, ddedata->fRelease,
|
ddedata->fResponse, ddedata->fRelease,
|
||||||
ddedata->fAckReq, ddedata->cfFormat,
|
ddedata->fAckReq, ddedata->cfFormat,
|
||||||
debug_last_handle_size- (int)sizeof(*ddedata)+1,
|
debug_last_handle_size- (int)sizeof(*ddedata)+1,
|
||||||
ddedata->Value);
|
ddedata->Value);
|
||||||
} else
|
} else
|
||||||
fprintf(stddeb,"NO-DATA");
|
dsprintf(dde,"NO-DATA");
|
||||||
fprintf(stddeb," atom=0x%04x",hWord);
|
dsprintf(dde," atom=0x%04x",hWord);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WM_DDE_POKE:
|
case WM_DDE_POKE:
|
||||||
if (ptr) {
|
if (ptr) {
|
||||||
ddepoke=ptr;
|
ddepoke=ptr;
|
||||||
fprintf(stddeb,"fRelease=%d,cfFormat=0x%x,value[0]='%c'",
|
dsprintf(dde,"fRelease=%d,cfFormat=0x%x,value[0]='%c'",
|
||||||
ddepoke->fRelease, ddepoke->cfFormat, ddepoke->Value[0]);
|
ddepoke->fRelease, ddepoke->cfFormat, ddepoke->Value[0]);
|
||||||
} else
|
} else
|
||||||
fprintf(stddeb,"NO-DATA");
|
dsprintf(dde,"NO-DATA");
|
||||||
fprintf(stddeb," atom=0x%04x",hWord);
|
dsprintf(dde," atom=0x%04x",hWord);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
fprintf(stddeb,"\n");
|
dprintf_info(dde,"%s\n", dbg_str(dde));
|
||||||
}
|
}
|
||||||
|
|
||||||
void dde_proc_done(dde_proc proc)
|
void dde_proc_done(dde_proc proc)
|
||||||
|
|
|
@ -16,9 +16,8 @@
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stddebug.h>
|
#include "debug.h"
|
||||||
#include <debug.h>
|
#include "global.h"
|
||||||
#include <global.h>
|
|
||||||
#include "selectors.h"
|
#include "selectors.h"
|
||||||
#include "shm_fragment.h"
|
#include "shm_fragment.h"
|
||||||
#include "shm_block.h"
|
#include "shm_block.h"
|
||||||
|
@ -38,7 +37,7 @@ struct local_shm_map *shm_map=NULL;
|
||||||
*/
|
*/
|
||||||
void shm_setup_block(struct shm_block *block, int first, int size)
|
void shm_setup_block(struct shm_block *block, int first, int size)
|
||||||
{
|
{
|
||||||
dprintf_shm(stddeb,"Setting up shm block at 0x%08x\n",(int )block);
|
dprintf_info(shm,"Setting up shm block at 0x%08x\n",(int )block);
|
||||||
/* setup block internal data structure */
|
/* setup block internal data structure */
|
||||||
if (first <= 0) {
|
if (first <= 0) {
|
||||||
first=sizeof(*block);
|
first=sizeof(*block);
|
||||||
|
@ -54,7 +53,7 @@ void shm_setup_block(struct shm_block *block, int first, int size)
|
||||||
/* block->size is initialized in shm_FragmentInit */
|
/* block->size is initialized in shm_FragmentInit */
|
||||||
shm_FragmentInit(block, first, size); /* first item in the free list */
|
shm_FragmentInit(block, first, size); /* first item in the free list */
|
||||||
|
|
||||||
dprintf_shm(stddeb,
|
dprintf_info(shm,
|
||||||
"block was set up at 0x%08x, size=0x%04xKB, 1st usable=%02x\n",
|
"block was set up at 0x%08x, size=0x%04xKB, 1st usable=%02x\n",
|
||||||
(int )block,size/1024,first);
|
(int )block,size/1024,first);
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,7 +10,6 @@
|
||||||
#ifdef CONFIG_IPC
|
#ifdef CONFIG_IPC
|
||||||
|
|
||||||
#include <stdio.h> /* for debugging only */
|
#include <stdio.h> /* for debugging only */
|
||||||
#include <stddebug.h>
|
|
||||||
#include <debug.h> /* for "stddeb" */
|
#include <debug.h> /* for "stddeb" */
|
||||||
|
|
||||||
#include "shm_fragment.h"
|
#include "shm_fragment.h"
|
||||||
|
|
|
@ -9,7 +9,6 @@
|
||||||
*/
|
*/
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stddebug.h>
|
|
||||||
#define DEBUG_DEFINE_VARIABLES /* just avoid dumb errors */
|
#define DEBUG_DEFINE_VARIABLES /* just avoid dumb errors */
|
||||||
#include <debug.h> /* for "stddeb" */
|
#include <debug.h> /* for "stddeb" */
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
|
@ -18,8 +18,7 @@
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
#include <stddebug.h>
|
#include "debug.h"
|
||||||
#include <debug.h>
|
|
||||||
#include "shm_fragment.h"
|
#include "shm_fragment.h"
|
||||||
#include "shm_block.h"
|
#include "shm_block.h"
|
||||||
#include "shm_main_blk.h"
|
#include "shm_main_blk.h"
|
||||||
|
@ -80,7 +79,7 @@ int proc_exist(pid_t pid)
|
||||||
/* setup a new main shm block (only construct a shm block object). */
|
/* setup a new main shm block (only construct a shm block object). */
|
||||||
static void shm_setup_main_block()
|
static void shm_setup_main_block()
|
||||||
{
|
{
|
||||||
dprintf_shm(stddeb,"creating data structure\n");
|
dprintf_info(shm,"creating data structure\n");
|
||||||
main_block->build_lock=1;
|
main_block->build_lock=1;
|
||||||
strcpy(main_block->magic, shm_header);
|
strcpy(main_block->magic, shm_header);
|
||||||
|
|
||||||
|
@ -134,29 +133,29 @@ static int attach_MainBlock(int shm_id)
|
||||||
|
|
||||||
/* Make sure we don't work on somebody else's block */
|
/* Make sure we don't work on somebody else's block */
|
||||||
if (shm_info.shm_perm.cuid != getuid()) { /* creator is not me */
|
if (shm_info.shm_perm.cuid != getuid()) { /* creator is not me */
|
||||||
dprintf_shm(stddeb,"Creator is not me!\n");
|
dprintf_warn(shm, "Creator is not me!\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
dprintf_shm(stddeb,"shared memory exist, attaching anywhere\n");
|
dprintf_info(shm,"shared memory exist, attaching anywhere\n");
|
||||||
main_block=(struct shm_main_block *)shmat(shm_id, 0, 0);
|
main_block=(struct shm_main_block *)shmat(shm_id, 0, 0);
|
||||||
if ( (int)main_block==-1) {
|
if ( (int)main_block==-1) {
|
||||||
dprintf_shm(stddeb,"Attach failed\n");
|
dprintf_warn(shm, "Attach failed\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strcmp(main_block->magic, shm_header) != 0) {
|
if (strcmp(main_block->magic, shm_header) != 0) {
|
||||||
dprintf_shm(stddeb,"Detaching, wrong magic\n");
|
dprintf_info(shm,"Detaching, wrong magic\n");
|
||||||
shmdt((void *)main_block);
|
shmdt((void *)main_block);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (debugging_shm)
|
if (debugging_info(shm))
|
||||||
print_shm_info(shm_id);
|
print_shm_info(shm_id);
|
||||||
|
|
||||||
/* Is it an old unused block ? */
|
/* Is it an old unused block ? */
|
||||||
if (shm_info.shm_nattch == 0) {
|
if (shm_info.shm_nattch == 0) {
|
||||||
dprintf_shm(stddeb,"No attaches, deleting old data\n");
|
dprintf_info(shm,"No attaches, deleting old data\n");
|
||||||
shm_delete_all(shm_id);
|
shm_delete_all(shm_id);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -181,10 +180,10 @@ static int shm_locate_MainBlock(key_t shm_key)
|
||||||
int shm_id; /* Descriptor to this shared memory */
|
int shm_id; /* Descriptor to this shared memory */
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
dprintf_shm(stddeb,"shm_locate_MainBlock: trying to attach, key=0x%x\n",
|
dprintf_info(shm,"shm_locate_MainBlock: trying to attach, key=0x%x\n",
|
||||||
shm_key);
|
shm_key);
|
||||||
for (i=0 ; i < SHM_KEY_RANGE ; i++) {
|
for (i=0 ; i < SHM_KEY_RANGE ; i++) {
|
||||||
dprintf_shm(stddeb,"iteration=%d\n", i);
|
dprintf_info(shm,"iteration=%d\n", i);
|
||||||
|
|
||||||
shm_id= shmget ( shm_key+i, SHM_MINBLOCK ,0700);
|
shm_id= shmget ( shm_key+i, SHM_MINBLOCK ,0700);
|
||||||
|
|
||||||
|
@ -203,7 +202,7 @@ static int shm_locate_MainBlock(key_t shm_key)
|
||||||
case ENOMEM: /* no free memory */
|
case ENOMEM: /* no free memory */
|
||||||
case ENOENT: /* this key does not exist */
|
case ENOENT: /* this key does not exist */
|
||||||
default :
|
default :
|
||||||
dprintf_shm(stddeb,"shmget failed, errno=%d, %s\n",
|
dprintf_warn(shm,"shmget failed, errno=%d, %s\n",
|
||||||
errno, strerror(errno) );
|
errno, strerror(errno) );
|
||||||
return 0; /* Failed */
|
return 0; /* Failed */
|
||||||
}
|
}
|
||||||
|
@ -223,7 +222,7 @@ static int shm_create_MainBlock(key_t MainShmKey)
|
||||||
int flags= 0700 | IPC_CREAT | IPC_EXCL;
|
int flags= 0700 | IPC_CREAT | IPC_EXCL;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
dprintf_shm(stddeb,"creating shared memory\n");
|
dprintf_info(shm,"creating shared memory\n");
|
||||||
|
|
||||||
/* try to allocate shared memory with key="Wine", size=SHM_MINBLOCK, */
|
/* try to allocate shared memory with key="Wine", size=SHM_MINBLOCK, */
|
||||||
/* complete user permission */
|
/* complete user permission */
|
||||||
|
@ -233,12 +232,12 @@ static int shm_create_MainBlock(key_t MainShmKey)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (shm_id == -1) {
|
if (shm_id == -1) {
|
||||||
dprintf_shm(stddeb,"failed to create shared memory\n");
|
dprintf_warn(shm, "failed to create shared memory\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
dprintf_shm(stddeb,"shared memory created, attaching\n");
|
dprintf_info(shm,"shared memory created, attaching\n");
|
||||||
main_block=(struct shm_main_block*) shmat(shm_id, 0,0);
|
main_block=(struct shm_main_block*) shmat(shm_id, 0,0);
|
||||||
if (debugging_shm)
|
if (debugging_info(shm))
|
||||||
print_shm_info(shm_id);
|
print_shm_info(shm_id);
|
||||||
main_shm_id= shm_id;
|
main_shm_id= shm_id;
|
||||||
shm_setup_main_block();
|
shm_setup_main_block();
|
||||||
|
|
|
@ -15,8 +15,7 @@
|
||||||
#include <sys/sem.h>
|
#include <sys/sem.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <stddebug.h>
|
#include "debug.h"
|
||||||
#include <debug.h>
|
|
||||||
#include "shm_semaph.h"
|
#include "shm_semaph.h"
|
||||||
#define SEM_READ 0
|
#define SEM_READ 0
|
||||||
#define SEM_WRITE 1
|
#define SEM_WRITE 1
|
||||||
|
@ -29,7 +28,7 @@ void shm_read_wait(shm_sem semid)
|
||||||
struct sembuf sop[2];
|
struct sembuf sop[2];
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
dprintf_sem(stddeb,"shm_read_wait(%d)\n",semid);
|
dprintf_info(sem,"shm_read_wait(%d)\n",semid);
|
||||||
sop[0].sem_num=SEM_READ;
|
sop[0].sem_num=SEM_READ;
|
||||||
sop[0].sem_op=1; /* add this read instance */
|
sop[0].sem_op=1; /* add this read instance */
|
||||||
sop[0].sem_flg=SEM_UNDO; /* undo in case process dies */
|
sop[0].sem_flg=SEM_UNDO; /* undo in case process dies */
|
||||||
|
@ -51,7 +50,7 @@ void shm_write_wait(shm_sem semid)
|
||||||
struct sembuf sop[3];
|
struct sembuf sop[3];
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
dprintf_sem(stddeb,"shm_write_wait(%d)\n",semid);
|
dprintf_info(sem,"shm_write_wait(%d)\n",semid);
|
||||||
sop[0].sem_num=SEM_READ;
|
sop[0].sem_num=SEM_READ;
|
||||||
sop[0].sem_op=0; /* wait until no reading instance exist */
|
sop[0].sem_op=0; /* wait until no reading instance exist */
|
||||||
sop[0].sem_flg=SEM_UNDO;
|
sop[0].sem_flg=SEM_UNDO;
|
||||||
|
@ -77,7 +76,7 @@ void shm_write_signal(shm_sem semid)
|
||||||
struct sembuf sop[2];
|
struct sembuf sop[2];
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
dprintf_sem(stddeb,"shm_write_signal(%d)\n",semid);
|
dprintf_info(sem,"shm_write_signal(%d)\n",semid);
|
||||||
sop[0].sem_num=SEM_READ;
|
sop[0].sem_num=SEM_READ;
|
||||||
sop[0].sem_op=-1;
|
sop[0].sem_op=-1;
|
||||||
sop[0].sem_flg=IPC_NOWAIT | SEM_UNDO; /* no reason to wait */
|
sop[0].sem_flg=IPC_NOWAIT | SEM_UNDO; /* no reason to wait */
|
||||||
|
@ -100,7 +99,7 @@ void shm_read_signal(shm_sem semid)
|
||||||
struct sembuf sop[2];
|
struct sembuf sop[2];
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
dprintf_sem(stddeb,"shm_read_signal(%d)\n",semid);
|
dprintf_info(sem,"shm_read_signal(%d)\n",semid);
|
||||||
sop[0].sem_num=SEM_READ;
|
sop[0].sem_num=SEM_READ;
|
||||||
sop[0].sem_op=-1;
|
sop[0].sem_op=-1;
|
||||||
sop[0].sem_flg=IPC_NOWAIT | SEM_UNDO; /* no reason to wait */
|
sop[0].sem_flg=IPC_NOWAIT | SEM_UNDO; /* no reason to wait */
|
||||||
|
|
|
@ -16,7 +16,6 @@
|
||||||
#include "shm_semaph.h"
|
#include "shm_semaph.h"
|
||||||
#include <sys/shm.h>
|
#include <sys/shm.h>
|
||||||
#define DEBUG_DEFINE_VARIABLES
|
#define DEBUG_DEFINE_VARIABLES
|
||||||
#include <stddebug.h>
|
|
||||||
#include <debug.h>
|
#include <debug.h>
|
||||||
|
|
||||||
static volatile int * volatile data;
|
static volatile int * volatile data;
|
||||||
|
|
|
@ -5,7 +5,6 @@
|
||||||
#include <win.h>
|
#include <win.h>
|
||||||
#define DEBUG_DEFINE_VARIABLES
|
#define DEBUG_DEFINE_VARIABLES
|
||||||
#define DEBUG_ALL
|
#define DEBUG_ALL
|
||||||
#include <stddebug.h>
|
|
||||||
#include <debug.h>
|
#include <debug.h>
|
||||||
|
|
||||||
#define DDE_PROC2WIN(proc_idx) ( (HWND) ~( (proc_idx)+1) )
|
#define DDE_PROC2WIN(proc_idx) ( (HWND) ~( (proc_idx)+1) )
|
||||||
|
|
|
@ -1,17 +1,9 @@
|
||||||
/* Sample winestub.c file for compiling programs with libwine.so. */
|
/* Sample winestub.c file for compiling programs with libwine.so. */
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdio.h>
|
|
||||||
#include "windows.h"
|
#include "windows.h"
|
||||||
#include "xmalloc.h"
|
#include "xmalloc.h"
|
||||||
|
|
||||||
/* Stub needed for linking with Winelib */
|
|
||||||
/* FIXME: this should not be necessary */
|
|
||||||
HMODULE32 BUILTIN_LoadModule( LPCSTR name, BOOL32 force ) {
|
|
||||||
fprintf(stderr,"BUILTIN_LoadModule(%s,%d) called in a library!\n",name,force);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
extern int PASCAL WinMain(HINSTANCE32,HINSTANCE32,LPSTR,int);
|
extern int PASCAL WinMain(HINSTANCE32,HINSTANCE32,LPSTR,int);
|
||||||
extern BOOL32 MAIN_WinelibInit( int *argc, char *argv[] );
|
extern BOOL32 MAIN_WinelibInit( int *argc, char *argv[] );
|
||||||
extern void TASK_Reschedule(void);
|
extern void TASK_Reschedule(void);
|
||||||
|
@ -23,7 +15,7 @@ char **_ARGV;
|
||||||
|
|
||||||
int main( int argc, char *argv [] )
|
int main( int argc, char *argv [] )
|
||||||
{
|
{
|
||||||
HINSTANCE16 hInstance;
|
HINSTANCE32 hInstance;
|
||||||
LPSTR lpszCmdParam;
|
LPSTR lpszCmdParam;
|
||||||
int i, len = 0;
|
int i, len = 0;
|
||||||
_ARGC = argc;
|
_ARGC = argc;
|
||||||
|
|
|
@ -11,8 +11,6 @@
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include "windows.h"
|
#include "windows.h"
|
||||||
#include "module.h"
|
|
||||||
#include "selectors.h"
|
|
||||||
#include "bitmap.h"
|
#include "bitmap.h"
|
||||||
#include "comm.h"
|
#include "comm.h"
|
||||||
#include "win.h"
|
#include "win.h"
|
||||||
|
@ -27,7 +25,6 @@
|
||||||
#include "heap.h"
|
#include "heap.h"
|
||||||
#include "keyboard.h"
|
#include "keyboard.h"
|
||||||
#include "miscemu.h"
|
#include "miscemu.h"
|
||||||
#include "neexe.h"
|
|
||||||
#include "options.h"
|
#include "options.h"
|
||||||
#include "spy.h"
|
#include "spy.h"
|
||||||
#include "task.h"
|
#include "task.h"
|
||||||
|
@ -36,7 +33,6 @@
|
||||||
#include "dce.h"
|
#include "dce.h"
|
||||||
#include "shell.h"
|
#include "shell.h"
|
||||||
#include "winproc.h"
|
#include "winproc.h"
|
||||||
#include "stddebug.h"
|
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -16,7 +16,6 @@
|
||||||
#include "file.h"
|
#include "file.h"
|
||||||
#include "global.h"
|
#include "global.h"
|
||||||
#include "heap.h"
|
#include "heap.h"
|
||||||
#include "hook.h"
|
|
||||||
#include "module.h"
|
#include "module.h"
|
||||||
#include "neexe.h"
|
#include "neexe.h"
|
||||||
#include "process.h"
|
#include "process.h"
|
||||||
|
@ -25,7 +24,6 @@
|
||||||
#include "stackframe.h"
|
#include "stackframe.h"
|
||||||
#include "task.h"
|
#include "task.h"
|
||||||
#include "toolhelp.h"
|
#include "toolhelp.h"
|
||||||
#include "stddebug.h"
|
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
#include "callback.h"
|
#include "callback.h"
|
||||||
|
|
||||||
|
@ -34,6 +32,9 @@ extern HINSTANCE16 PE_LoadModule( HFILE32 hf, OFSTRUCT *ofs, LOADPARAMS* params
|
||||||
static HMODULE16 hFirstModule = 0;
|
static HMODULE16 hFirstModule = 0;
|
||||||
static HMODULE16 hCachedModule = 0; /* Module cached by MODULE_OpenFile */
|
static HMODULE16 hCachedModule = 0; /* Module cached by MODULE_OpenFile */
|
||||||
|
|
||||||
|
static HMODULE32 MODULE_LoadModule(LPCSTR name,BOOL32 force) { return 0; }
|
||||||
|
HMODULE32 (*fnBUILTIN_LoadModule)(LPCSTR name,BOOL32 force) = MODULE_LoadModule;
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* MODULE_GetPtr
|
* MODULE_GetPtr
|
||||||
|
@ -268,7 +269,7 @@ int MODULE_OpenFile( HMODULE32 hModule )
|
||||||
static int cachedfd = -1;
|
static int cachedfd = -1;
|
||||||
|
|
||||||
hModule = MODULE_HANDLEtoHMODULE16(hModule);
|
hModule = MODULE_HANDLEtoHMODULE16(hModule);
|
||||||
dprintf_module( stddeb, "MODULE_OpenFile(%04x) cache: mod=%04x fd=%d\n",
|
dprintf_info(module, "MODULE_OpenFile(%04x) cache: mod=%04x fd=%d\n",
|
||||||
hModule, hCachedModule, cachedfd );
|
hModule, hCachedModule, cachedfd );
|
||||||
if (!(pModule = MODULE_GetPtr( hModule ))) return -1;
|
if (!(pModule = MODULE_GetPtr( hModule ))) return -1;
|
||||||
if (hCachedModule == hModule) return cachedfd;
|
if (hCachedModule == hModule) return cachedfd;
|
||||||
|
@ -279,7 +280,7 @@ int MODULE_OpenFile( HMODULE32 hModule )
|
||||||
(cachedfd = open( full_name.long_name, O_RDONLY )) == -1)
|
(cachedfd = open( full_name.long_name, O_RDONLY )) == -1)
|
||||||
fprintf( stderr, "MODULE_OpenFile: can't open file '%s' for module %04x\n",
|
fprintf( stderr, "MODULE_OpenFile: can't open file '%s' for module %04x\n",
|
||||||
name, hModule );
|
name, hModule );
|
||||||
dprintf_module( stddeb, "MODULE_OpenFile: opened '%s' -> %d\n",
|
dprintf_info(module, "MODULE_OpenFile: opened '%s' -> %d\n",
|
||||||
name, cachedfd );
|
name, cachedfd );
|
||||||
return cachedfd;
|
return cachedfd;
|
||||||
}
|
}
|
||||||
|
@ -568,7 +569,7 @@ static HMODULE32 MODULE_LoadExeHeader( HFILE32 hFile, OFSTRUCT *ofs )
|
||||||
{
|
{
|
||||||
fastload_offset=ne_header.fastload_offset<<ne_header.align_shift_count;
|
fastload_offset=ne_header.fastload_offset<<ne_header.align_shift_count;
|
||||||
fastload_length=ne_header.fastload_length<<ne_header.align_shift_count;
|
fastload_length=ne_header.fastload_length<<ne_header.align_shift_count;
|
||||||
dprintf_module( stddeb, "Using fast-load area offset=%x len=%d\n",
|
dprintf_info(module, "Using fast-load area offset=%x len=%d\n",
|
||||||
fastload_offset, fastload_length );
|
fastload_offset, fastload_length );
|
||||||
if ((fastload = HeapAlloc( SystemHeap, 0, fastload_length )) != NULL)
|
if ((fastload = HeapAlloc( SystemHeap, 0, fastload_length )) != NULL)
|
||||||
{
|
{
|
||||||
|
@ -755,7 +756,7 @@ WORD MODULE_GetOrdinal( HMODULE32 hModule, const char *name )
|
||||||
|
|
||||||
if (!(pModule = MODULE_GetPtr( hModule ))) return 0;
|
if (!(pModule = MODULE_GetPtr( hModule ))) return 0;
|
||||||
|
|
||||||
dprintf_module( stddeb, "MODULE_GetOrdinal(%04x,'%s')\n",
|
dprintf_info(module, "MODULE_GetOrdinal(%04x,'%s')\n",
|
||||||
hModule, name );
|
hModule, name );
|
||||||
|
|
||||||
/* First handle names of the form '#xxxx' */
|
/* First handle names of the form '#xxxx' */
|
||||||
|
@ -778,7 +779,7 @@ WORD MODULE_GetOrdinal( HMODULE32 hModule, const char *name )
|
||||||
{
|
{
|
||||||
if (((BYTE)*cpnt == len) && !memcmp( cpnt+1, buffer, len ))
|
if (((BYTE)*cpnt == len) && !memcmp( cpnt+1, buffer, len ))
|
||||||
{
|
{
|
||||||
dprintf_module( stddeb, " Found: ordinal=%d\n",
|
dprintf_info(module, " Found: ordinal=%d\n",
|
||||||
*(WORD *)(cpnt + *cpnt + 1) );
|
*(WORD *)(cpnt + *cpnt + 1) );
|
||||||
return *(WORD *)(cpnt + *cpnt + 1);
|
return *(WORD *)(cpnt + *cpnt + 1);
|
||||||
}
|
}
|
||||||
|
@ -796,7 +797,7 @@ WORD MODULE_GetOrdinal( HMODULE32 hModule, const char *name )
|
||||||
{
|
{
|
||||||
if (((BYTE)*cpnt == len) && !memcmp( cpnt+1, buffer, len ))
|
if (((BYTE)*cpnt == len) && !memcmp( cpnt+1, buffer, len ))
|
||||||
{
|
{
|
||||||
dprintf_module( stddeb, " Found: ordinal=%d\n",
|
dprintf_info(module, " Found: ordinal=%d\n",
|
||||||
*(WORD *)(cpnt + *cpnt + 1) );
|
*(WORD *)(cpnt + *cpnt + 1) );
|
||||||
return *(WORD *)(cpnt + *cpnt + 1);
|
return *(WORD *)(cpnt + *cpnt + 1);
|
||||||
}
|
}
|
||||||
|
@ -1043,7 +1044,7 @@ static BOOL16 MODULE_CallWEP( HMODULE16 hModule )
|
||||||
if (ordinal) WEP = MODULE_GetEntryPoint( hModule, ordinal );
|
if (ordinal) WEP = MODULE_GetEntryPoint( hModule, ordinal );
|
||||||
if (!WEP)
|
if (!WEP)
|
||||||
{
|
{
|
||||||
dprintf_module( stddeb, "module %04x doesn't have a WEP\n", hModule );
|
dprintf_warn(module, "module %04x doesn't have a WEP\n", hModule );
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
return Callbacks->CallWindowsExitProc( WEP, WEP_FREE_DLL );
|
return Callbacks->CallWindowsExitProc( WEP, WEP_FREE_DLL );
|
||||||
|
@ -1157,13 +1158,13 @@ HINSTANCE16 MODULE_Load( LPCSTR name, LPVOID paramBlock, UINT16 uFlags)
|
||||||
if (!hModule) /* We have to load the module */
|
if (!hModule) /* We have to load the module */
|
||||||
{
|
{
|
||||||
/* Try to load the built-in first if not disabled */
|
/* Try to load the built-in first if not disabled */
|
||||||
if ((hModule = BUILTIN_LoadModule( name, FALSE )))
|
if ((hModule = fnBUILTIN_LoadModule( name, FALSE )))
|
||||||
return MODULE_HANDLEtoHMODULE16( hModule );
|
return MODULE_HANDLEtoHMODULE16( hModule );
|
||||||
|
|
||||||
if ((hFile = OpenFile32( name, &ofs, OF_READ )) == HFILE_ERROR32)
|
if ((hFile = OpenFile32( name, &ofs, OF_READ )) == HFILE_ERROR32)
|
||||||
{
|
{
|
||||||
/* Now try the built-in even if disabled */
|
/* Now try the built-in even if disabled */
|
||||||
if ((hModule = BUILTIN_LoadModule( name, TRUE )))
|
if ((hModule = fnBUILTIN_LoadModule( name, TRUE )))
|
||||||
{
|
{
|
||||||
fprintf( stderr, "Warning: could not load Windows DLL '%s', using built-in module.\n", name );
|
fprintf( stderr, "Warning: could not load Windows DLL '%s', using built-in module.\n", name );
|
||||||
return MODULE_HANDLEtoHMODULE16( hModule );
|
return MODULE_HANDLEtoHMODULE16( hModule );
|
||||||
|
@ -1267,12 +1268,34 @@ HINSTANCE16 LoadModule16( LPCSTR name, LPVOID paramBlock )
|
||||||
}
|
}
|
||||||
|
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
* LoadModule32 (KERNEL32)
|
* LoadModule32 (KERNEL32.499)
|
||||||
* FIXME: check this function
|
*
|
||||||
|
* FIXME
|
||||||
|
*
|
||||||
|
* This should get implemented via CreateProcess -- MODULE_Load
|
||||||
|
* is resolutely 16-bit.
|
||||||
*/
|
*/
|
||||||
DWORD LoadModule32( LPCSTR name, LPVOID paramBlock )
|
DWORD LoadModule32( LPCSTR name, LPVOID paramBlock )
|
||||||
{
|
{
|
||||||
|
#ifdef 0
|
||||||
|
LOADPARAMS32 *p = paramBlock;
|
||||||
|
STARTUPINFO st;
|
||||||
|
PROCESSINFORMATION pi;
|
||||||
|
st.cb = sizeof(STARTUPINFO);
|
||||||
|
st.wShowWindow = p->lpCmdShow[2] ; WRONG
|
||||||
|
|
||||||
|
BOOL32 ret = CreateProcess32A( name, p->lpCmdLine,
|
||||||
|
NULL, NULL, FALSE, 0, p->lpEnvAddress,
|
||||||
|
NULL, &st, &pi);
|
||||||
|
if (!ret) {
|
||||||
|
/* handle errors appropriately */
|
||||||
|
}
|
||||||
|
CloseHandle32(pi.hProcess);
|
||||||
|
CloseHandle32(pi.hThread);
|
||||||
|
|
||||||
|
#else
|
||||||
return MODULE_Load( name, paramBlock, 0 );
|
return MODULE_Load( name, paramBlock, 0 );
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1284,7 +1307,7 @@ BOOL16 WINAPI FreeModule16( HMODULE16 hModule )
|
||||||
NE_MODULE *pModule;
|
NE_MODULE *pModule;
|
||||||
|
|
||||||
if (!(pModule = MODULE_GetPtr( hModule ))) return FALSE;
|
if (!(pModule = MODULE_GetPtr( hModule ))) return FALSE;
|
||||||
dprintf_module( stddeb, "FreeModule16: %s count %d\n",
|
dprintf_info(module, "FreeModule16: %s count %d\n",
|
||||||
MODULE_GetModuleName(hModule), pModule->count );
|
MODULE_GetModuleName(hModule), pModule->count );
|
||||||
|
|
||||||
return MODULE_FreeModule( hModule, GlobalLock16(GetCurrentTask()) );
|
return MODULE_FreeModule( hModule, GlobalLock16(GetCurrentTask()) );
|
||||||
|
@ -1312,7 +1335,7 @@ HMODULE32 WINAPI GetModuleHandle32A(LPCSTR module)
|
||||||
{
|
{
|
||||||
HMODULE32 hModule;
|
HMODULE32 hModule;
|
||||||
|
|
||||||
dprintf_win32(stddeb, "GetModuleHandleA: %s\n", module ? module : "NULL");
|
dprintf_info(win32, "GetModuleHandleA: %s\n", module ? module : "NULL");
|
||||||
/* Freecell uses the result of GetModuleHandleA(0) as the hInstance in
|
/* Freecell uses the result of GetModuleHandleA(0) as the hInstance in
|
||||||
all calls to e.g. CreateWindowEx. */
|
all calls to e.g. CreateWindowEx. */
|
||||||
if (module == NULL) {
|
if (module == NULL) {
|
||||||
|
@ -1341,7 +1364,7 @@ INT16 WINAPI GetModuleUsage( HINSTANCE16 hModule )
|
||||||
NE_MODULE *pModule;
|
NE_MODULE *pModule;
|
||||||
|
|
||||||
if (!(pModule = MODULE_GetPtr( hModule ))) return 0;
|
if (!(pModule = MODULE_GetPtr( hModule ))) return 0;
|
||||||
dprintf_module( stddeb, "GetModuleUsage(%04x): returning %d\n",
|
dprintf_info(module, "GetModuleUsage(%04x): returning %d\n",
|
||||||
hModule, pModule->count );
|
hModule, pModule->count );
|
||||||
return pModule->count;
|
return pModule->count;
|
||||||
}
|
}
|
||||||
|
@ -1358,7 +1381,7 @@ INT16 WINAPI GetModuleFileName16( HINSTANCE16 hModule, LPSTR lpFileName,
|
||||||
if (!hModule) hModule = GetCurrentTask();
|
if (!hModule) hModule = GetCurrentTask();
|
||||||
if (!(pModule = MODULE_GetPtr( hModule ))) return 0;
|
if (!(pModule = MODULE_GetPtr( hModule ))) return 0;
|
||||||
lstrcpyn32A( lpFileName, NE_MODULE_NAME(pModule), nSize );
|
lstrcpyn32A( lpFileName, NE_MODULE_NAME(pModule), nSize );
|
||||||
dprintf_module( stddeb, "GetModuleFileName16: %s\n", lpFileName );
|
dprintf_info(module, "GetModuleFileName16: %s\n", lpFileName );
|
||||||
return strlen(lpFileName);
|
return strlen(lpFileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1378,7 +1401,7 @@ DWORD WINAPI GetModuleFileName32A( HMODULE32 hModule, LPSTR lpFileName,
|
||||||
}
|
}
|
||||||
if (!(pModule = MODULE_GetPtr( hModule ))) return 0;
|
if (!(pModule = MODULE_GetPtr( hModule ))) return 0;
|
||||||
lstrcpyn32A( lpFileName, NE_MODULE_NAME(pModule), size );
|
lstrcpyn32A( lpFileName, NE_MODULE_NAME(pModule), size );
|
||||||
dprintf_module( stddeb, "GetModuleFileName32A: %s\n", lpFileName );
|
dprintf_info(module, "GetModuleFileName32A: %s\n", lpFileName );
|
||||||
return strlen(lpFileName);
|
return strlen(lpFileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1473,7 +1496,7 @@ HMODULE32 WINAPI LoadLibraryEx32W(LPCWSTR libnameW,HFILE32 hfile,DWORD flags)
|
||||||
*/
|
*/
|
||||||
BOOL32 WINAPI FreeLibrary32(HINSTANCE32 hLibModule)
|
BOOL32 WINAPI FreeLibrary32(HINSTANCE32 hLibModule)
|
||||||
{
|
{
|
||||||
dprintf_module(stddeb,"FreeLibrary: hLibModule: %08x\n", hLibModule);
|
dprintf_info(module,"FreeLibrary: hLibModule: %08x\n", hLibModule);
|
||||||
return MODULE_FreeModule(hLibModule,
|
return MODULE_FreeModule(hLibModule,
|
||||||
GlobalLock16(GetCurrentTask()) );
|
GlobalLock16(GetCurrentTask()) );
|
||||||
}
|
}
|
||||||
|
@ -1491,7 +1514,7 @@ HINSTANCE16 WINAPI LoadLibrary16( LPCSTR libname )
|
||||||
fprintf( stderr, "LoadLibrary not supported in Winelib\n" );
|
fprintf( stderr, "LoadLibrary not supported in Winelib\n" );
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
dprintf_module( stddeb, "LoadLibrary: (%08x) %s\n", (int)libname, libname);
|
dprintf_info(module, "LoadLibrary: (%08x) %s\n", (int)libname, libname);
|
||||||
|
|
||||||
handle = MODULE_Load( libname, (LPVOID)-1, 0 );
|
handle = MODULE_Load( libname, (LPVOID)-1, 0 );
|
||||||
if (handle == (HINSTANCE16)2) /* file not found */
|
if (handle == (HINSTANCE16)2) /* file not found */
|
||||||
|
@ -1521,7 +1544,7 @@ HINSTANCE32 WINAPI PrivateLoadLibrary(LPCSTR libname)
|
||||||
*/
|
*/
|
||||||
void WINAPI FreeLibrary16( HINSTANCE16 handle )
|
void WINAPI FreeLibrary16( HINSTANCE16 handle )
|
||||||
{
|
{
|
||||||
dprintf_module( stddeb,"FreeLibrary: %04x\n", handle );
|
dprintf_info(module,"FreeLibrary: %04x\n", handle );
|
||||||
FreeModule16( handle );
|
FreeModule16( handle );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1553,7 +1576,7 @@ HINSTANCE32 WINAPI WinExec32( LPCSTR lpCmdLine, UINT32 nCmdShow )
|
||||||
{
|
{
|
||||||
LOADPARAMS params;
|
LOADPARAMS params;
|
||||||
HGLOBAL16 cmdShowHandle, cmdLineHandle;
|
HGLOBAL16 cmdShowHandle, cmdLineHandle;
|
||||||
HINSTANCE16 handle = 2;
|
HINSTANCE32 handle = 2;
|
||||||
WORD *cmdShowPtr;
|
WORD *cmdShowPtr;
|
||||||
char *p, *cmdline, filename[256];
|
char *p, *cmdline, filename[256];
|
||||||
static int use_load_module = 1;
|
static int use_load_module = 1;
|
||||||
|
@ -1630,7 +1653,7 @@ HINSTANCE32 WINAPI WinExec32( LPCSTR lpCmdLine, UINT32 nCmdShow )
|
||||||
params.cmdLine = (SEGPTR)WIN16_GlobalLock16( cmdLineHandle );
|
params.cmdLine = (SEGPTR)WIN16_GlobalLock16( cmdLineHandle );
|
||||||
params.showCmd = (SEGPTR)WIN16_GlobalLock16( cmdShowHandle );
|
params.showCmd = (SEGPTR)WIN16_GlobalLock16( cmdShowHandle );
|
||||||
params.reserved = 0;
|
params.reserved = 0;
|
||||||
handle = LoadModule16( filename, ¶ms );
|
handle = LoadModule32( filename, ¶ms );
|
||||||
if (handle == 2) /* file not found */
|
if (handle == 2) /* file not found */
|
||||||
{
|
{
|
||||||
/* Check that the original file name did not have a suffix */
|
/* Check that the original file name did not have a suffix */
|
||||||
|
@ -1735,16 +1758,16 @@ FARPROC16 WINAPI WIN32_GetProcAddress16( HMODULE32 hModule, LPSTR name )
|
||||||
hModule = MODULE_HANDLEtoHMODULE16(hModule);
|
hModule = MODULE_HANDLEtoHMODULE16(hModule);
|
||||||
if (HIWORD(name)) {
|
if (HIWORD(name)) {
|
||||||
ordinal = MODULE_GetOrdinal( hModule, name );
|
ordinal = MODULE_GetOrdinal( hModule, name );
|
||||||
dprintf_module( stddeb, "WIN32_GetProcAddress16: %04x '%s'\n",
|
dprintf_info(module, "WIN32_GetProcAddress16: %04x '%s'\n",
|
||||||
hModule, name );
|
hModule, name );
|
||||||
} else {
|
} else {
|
||||||
ordinal = LOWORD(name);
|
ordinal = LOWORD(name);
|
||||||
dprintf_module( stddeb, "GetProcAddress: %04x %04x\n",
|
dprintf_info(module, "GetProcAddress: %04x %04x\n",
|
||||||
hModule, ordinal );
|
hModule, ordinal );
|
||||||
}
|
}
|
||||||
if (!ordinal) return (FARPROC16)0;
|
if (!ordinal) return (FARPROC16)0;
|
||||||
ret = MODULE_GetEntryPoint( hModule, ordinal );
|
ret = MODULE_GetEntryPoint( hModule, ordinal );
|
||||||
dprintf_module(stddeb,"WIN32_GetProcAddress16: returning %08x\n",(UINT32)ret);
|
dprintf_info(module,"WIN32_GetProcAddress16: returning %08x\n",(UINT32)ret);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1762,20 +1785,20 @@ FARPROC16 WINAPI GetProcAddress16( HMODULE16 hModule, SEGPTR name )
|
||||||
if (HIWORD(name) != 0)
|
if (HIWORD(name) != 0)
|
||||||
{
|
{
|
||||||
ordinal = MODULE_GetOrdinal( hModule, (LPSTR)PTR_SEG_TO_LIN(name) );
|
ordinal = MODULE_GetOrdinal( hModule, (LPSTR)PTR_SEG_TO_LIN(name) );
|
||||||
dprintf_module( stddeb, "GetProcAddress: %04x '%s'\n",
|
dprintf_info(module, "GetProcAddress: %04x '%s'\n",
|
||||||
hModule, (LPSTR)PTR_SEG_TO_LIN(name) );
|
hModule, (LPSTR)PTR_SEG_TO_LIN(name) );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ordinal = LOWORD(name);
|
ordinal = LOWORD(name);
|
||||||
dprintf_module( stddeb, "GetProcAddress: %04x %04x\n",
|
dprintf_info(module, "GetProcAddress: %04x %04x\n",
|
||||||
hModule, ordinal );
|
hModule, ordinal );
|
||||||
}
|
}
|
||||||
if (!ordinal) return (FARPROC16)0;
|
if (!ordinal) return (FARPROC16)0;
|
||||||
|
|
||||||
ret = MODULE_GetEntryPoint( hModule, ordinal );
|
ret = MODULE_GetEntryPoint( hModule, ordinal );
|
||||||
|
|
||||||
dprintf_module( stddeb, "GetProcAddress: returning %08x\n", (UINT32)ret );
|
dprintf_info(module, "GetProcAddress: returning %08x\n", (UINT32)ret );
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1788,9 +1811,9 @@ FARPROC32 WINAPI GetProcAddress32( HMODULE32 hModule, LPCSTR function )
|
||||||
NE_MODULE *pModule;
|
NE_MODULE *pModule;
|
||||||
|
|
||||||
if (HIWORD(function))
|
if (HIWORD(function))
|
||||||
dprintf_win32(stddeb,"GetProcAddress32(%08lx,%s)\n",(DWORD)hModule,function);
|
dprintf_info(win32,"GetProcAddress32(%08lx,%s)\n",(DWORD)hModule,function);
|
||||||
else
|
else
|
||||||
dprintf_win32(stddeb,"GetProcAddress32(%08lx,%p)\n",(DWORD)hModule,function);
|
dprintf_info(win32,"GetProcAddress32(%08lx,%p)\n",(DWORD)hModule,function);
|
||||||
if (!(pModule = MODULE_GetPtr( hModule )))
|
if (!(pModule = MODULE_GetPtr( hModule )))
|
||||||
return (FARPROC32)0;
|
return (FARPROC32)0;
|
||||||
if (!pModule->module32)
|
if (!pModule->module32)
|
||||||
|
|
|
@ -23,7 +23,6 @@
|
||||||
#include "file.h"
|
#include "file.h"
|
||||||
#include "module.h"
|
#include "module.h"
|
||||||
#include "stackframe.h"
|
#include "stackframe.h"
|
||||||
#include "stddebug.h"
|
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
#include "xmalloc.h"
|
#include "xmalloc.h"
|
||||||
|
|
||||||
|
@ -55,7 +54,7 @@ BOOL32 NE_LoadSegment( NE_MODULE *pModule, WORD segnum )
|
||||||
if (!pSeg->filepos) return TRUE; /* No file image, just return */
|
if (!pSeg->filepos) return TRUE; /* No file image, just return */
|
||||||
|
|
||||||
fd = MODULE_OpenFile( pModule->self );
|
fd = MODULE_OpenFile( pModule->self );
|
||||||
dprintf_module( stddeb, "Loading segment %d, selector=%04x, flags=%04x\n",
|
dprintf_info(module, "Loading segment %d, selector=%04x, flags=%04x\n",
|
||||||
segnum, pSeg->selector, pSeg->flags );
|
segnum, pSeg->selector, pSeg->flags );
|
||||||
lseek( fd, pSeg->filepos << pModule->alignment, SEEK_SET );
|
lseek( fd, pSeg->filepos << pModule->alignment, SEEK_SET );
|
||||||
if (pSeg->size) size = pSeg->size;
|
if (pSeg->size) size = pSeg->size;
|
||||||
|
@ -143,7 +142,7 @@ BOOL32 NE_LoadSegment( NE_MODULE *pModule, WORD segnum )
|
||||||
read( fd, &count, sizeof(count) );
|
read( fd, &count, sizeof(count) );
|
||||||
if (!count) return TRUE;
|
if (!count) return TRUE;
|
||||||
|
|
||||||
dprintf_fixup( stddeb, "Fixups for %*.*s, segment %d, selector %04x\n",
|
dprintf_info(fixup, "Fixups for %*.*s, segment %d, selector %04x\n",
|
||||||
*((BYTE *)pModule + pModule->name_table),
|
*((BYTE *)pModule + pModule->name_table),
|
||||||
*((BYTE *)pModule + pModule->name_table),
|
*((BYTE *)pModule + pModule->name_table),
|
||||||
(char *)pModule + pModule->name_table + 1,
|
(char *)pModule + pModule->name_table + 1,
|
||||||
|
@ -153,7 +152,7 @@ BOOL32 NE_LoadSegment( NE_MODULE *pModule, WORD segnum )
|
||||||
if (read( fd, reloc_entries, count * sizeof(struct relocation_entry_s)) !=
|
if (read( fd, reloc_entries, count * sizeof(struct relocation_entry_s)) !=
|
||||||
count * sizeof(struct relocation_entry_s))
|
count * sizeof(struct relocation_entry_s))
|
||||||
{
|
{
|
||||||
dprintf_fixup( stddeb, "Unable to read relocation information\n" );
|
dprintf_warn(fixup, "Unable to read relocation information\n" );
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -194,10 +193,10 @@ BOOL32 NE_LoadSegment( NE_MODULE *pModule, WORD segnum )
|
||||||
(char *)pTarget + pTarget->name_table + 1,
|
(char *)pTarget + pTarget->name_table + 1,
|
||||||
ordinal );
|
ordinal );
|
||||||
}
|
}
|
||||||
if (debugging_fixup)
|
if (debugging_info(fixup))
|
||||||
{
|
{
|
||||||
NE_MODULE *pTarget = MODULE_GetPtr( module );
|
NE_MODULE *pTarget = MODULE_GetPtr( module );
|
||||||
fprintf( stddeb,"%d: %*.*s.%d=%04x:%04x\n", i + 1,
|
dprintf_info(fixup, "%d: %*.*s.%d=%04x:%04x\n", i + 1,
|
||||||
*((BYTE *)pTarget + pTarget->name_table),
|
*((BYTE *)pTarget + pTarget->name_table),
|
||||||
*((BYTE *)pTarget + pTarget->name_table),
|
*((BYTE *)pTarget + pTarget->name_table),
|
||||||
(char *)pTarget + pTarget->name_table + 1,
|
(char *)pTarget + pTarget->name_table + 1,
|
||||||
|
@ -215,17 +214,17 @@ BOOL32 NE_LoadSegment( NE_MODULE *pModule, WORD segnum )
|
||||||
|
|
||||||
address = MODULE_GetEntryPoint( module, ordinal );
|
address = MODULE_GetEntryPoint( module, ordinal );
|
||||||
|
|
||||||
if (!address)
|
if (debugging_err(fixup) && !address)
|
||||||
{
|
{
|
||||||
NE_MODULE *pTarget = MODULE_GetPtr( module );
|
NE_MODULE *pTarget = MODULE_GetPtr( module );
|
||||||
fprintf( stderr, "Warning: no handler for %.*s.%s, setting to 0:0\n",
|
dprintf_err(fixup, "Warning: no handler for %.*s.%s, setting to 0:0\n",
|
||||||
*((BYTE *)pTarget + pTarget->name_table),
|
*((BYTE *)pTarget + pTarget->name_table),
|
||||||
(char *)pTarget + pTarget->name_table + 1, func_name );
|
(char *)pTarget + pTarget->name_table + 1, func_name );
|
||||||
}
|
}
|
||||||
if (debugging_fixup)
|
if (debugging_info(fixup))
|
||||||
{
|
{
|
||||||
NE_MODULE *pTarget = MODULE_GetPtr( module );
|
NE_MODULE *pTarget = MODULE_GetPtr( module );
|
||||||
fprintf( stddeb,"%d: %.*s.%s=%04x:%04x\n", i + 1,
|
dprintf_info(fixup, "%d: %.*s.%s=%04x:%04x\n", i + 1,
|
||||||
*((BYTE *)pTarget + pTarget->name_table),
|
*((BYTE *)pTarget + pTarget->name_table),
|
||||||
(char *)pTarget + pTarget->name_table + 1,
|
(char *)pTarget + pTarget->name_table + 1,
|
||||||
func_name, HIWORD(address), LOWORD(address) );
|
func_name, HIWORD(address), LOWORD(address) );
|
||||||
|
@ -242,7 +241,7 @@ BOOL32 NE_LoadSegment( NE_MODULE *pModule, WORD segnum )
|
||||||
address = (FARPROC16)PTR_SEG_OFF_TO_SEGPTR( pSegTable[rep->target1-1].selector, rep->target2 );
|
address = (FARPROC16)PTR_SEG_OFF_TO_SEGPTR( pSegTable[rep->target1-1].selector, rep->target2 );
|
||||||
}
|
}
|
||||||
|
|
||||||
dprintf_fixup(stddeb,"%d: %04x:%04x\n",
|
dprintf_info(fixup,"%d: %04x:%04x\n",
|
||||||
i + 1, HIWORD(address), LOWORD(address) );
|
i + 1, HIWORD(address), LOWORD(address) );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -255,21 +254,17 @@ BOOL32 NE_LoadSegment( NE_MODULE *pModule, WORD segnum )
|
||||||
* successfully emulate the coprocessor if it doesn't
|
* successfully emulate the coprocessor if it doesn't
|
||||||
* exist.
|
* exist.
|
||||||
*/
|
*/
|
||||||
dprintf_fixup(stddeb,
|
dprintf_info(fixup,
|
||||||
"%d: ADDR TYPE %d, TYPE %d, OFFSET %04x, ",
|
"%d: ADDR TYPE %d, TYPE %d, OFFSET %04x, TARGET %04x %04x\n",
|
||||||
i + 1, rep->address_type, rep->relocation_type,
|
i + 1, rep->address_type, rep->relocation_type,
|
||||||
rep->offset);
|
rep->offset, rep->target1, rep->target2);
|
||||||
dprintf_fixup(stddeb,"TARGET %04x %04x\n",
|
|
||||||
rep->target1, rep->target2);
|
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
dprintf_fixup(stddeb,
|
dprintf_warn(fixup, "WARNING: %d: ADDR TYPE %d, "
|
||||||
"WARNING: %d: ADDR TYPE %d, unknown TYPE %d, OFFSET %04x, ",
|
"unknown TYPE %d, OFFSET %04x, TARGET %04x %04x\n",
|
||||||
i + 1, rep->address_type, rep->relocation_type,
|
i + 1, rep->address_type, rep->relocation_type,
|
||||||
rep->offset);
|
rep->offset, rep->target1, rep->target2);
|
||||||
dprintf_fixup(stddeb,"TARGET %04x %04x\n",
|
|
||||||
rep->target1, rep->target2);
|
|
||||||
free(reloc_entries);
|
free(reloc_entries);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
@ -287,7 +282,7 @@ BOOL32 NE_LoadSegment( NE_MODULE *pModule, WORD segnum )
|
||||||
case NE_RADDR_LOWBYTE:
|
case NE_RADDR_LOWBYTE:
|
||||||
do {
|
do {
|
||||||
sp = PTR_SEG_OFF_TO_LIN( pSeg->selector, offset );
|
sp = PTR_SEG_OFF_TO_LIN( pSeg->selector, offset );
|
||||||
dprintf_fixup(stddeb," %04x:%04x:%04x BYTE%s\n",
|
dprintf_info(fixup," %04x:%04x:%04x BYTE%s\n",
|
||||||
pSeg->selector, offset, *sp, additive ? " additive":"");
|
pSeg->selector, offset, *sp, additive ? " additive":"");
|
||||||
offset = *sp;
|
offset = *sp;
|
||||||
if(additive)
|
if(additive)
|
||||||
|
@ -301,7 +296,7 @@ BOOL32 NE_LoadSegment( NE_MODULE *pModule, WORD segnum )
|
||||||
case NE_RADDR_OFFSET16:
|
case NE_RADDR_OFFSET16:
|
||||||
do {
|
do {
|
||||||
sp = PTR_SEG_OFF_TO_LIN( pSeg->selector, offset );
|
sp = PTR_SEG_OFF_TO_LIN( pSeg->selector, offset );
|
||||||
dprintf_fixup(stddeb," %04x:%04x:%04x OFFSET16%s\n",
|
dprintf_info(fixup," %04x:%04x:%04x OFFSET16%s\n",
|
||||||
pSeg->selector, offset, *sp, additive ? " additive" : "" );
|
pSeg->selector, offset, *sp, additive ? " additive" : "" );
|
||||||
offset = *sp;
|
offset = *sp;
|
||||||
*sp = LOWORD(address);
|
*sp = LOWORD(address);
|
||||||
|
@ -313,7 +308,7 @@ BOOL32 NE_LoadSegment( NE_MODULE *pModule, WORD segnum )
|
||||||
case NE_RADDR_POINTER32:
|
case NE_RADDR_POINTER32:
|
||||||
do {
|
do {
|
||||||
sp = PTR_SEG_OFF_TO_LIN( pSeg->selector, offset );
|
sp = PTR_SEG_OFF_TO_LIN( pSeg->selector, offset );
|
||||||
dprintf_fixup(stddeb," %04x:%04x:%04x POINTER32%s\n",
|
dprintf_info(fixup," %04x:%04x:%04x POINTER32%s\n",
|
||||||
pSeg->selector, offset, *sp, additive ? " additive" : "" );
|
pSeg->selector, offset, *sp, additive ? " additive" : "" );
|
||||||
offset = *sp;
|
offset = *sp;
|
||||||
*sp = LOWORD(address);
|
*sp = LOWORD(address);
|
||||||
|
@ -326,7 +321,7 @@ BOOL32 NE_LoadSegment( NE_MODULE *pModule, WORD segnum )
|
||||||
case NE_RADDR_SELECTOR:
|
case NE_RADDR_SELECTOR:
|
||||||
do {
|
do {
|
||||||
sp = PTR_SEG_OFF_TO_LIN( pSeg->selector, offset );
|
sp = PTR_SEG_OFF_TO_LIN( pSeg->selector, offset );
|
||||||
dprintf_fixup(stddeb," %04x:%04x:%04x SELECTOR%s\n",
|
dprintf_info(fixup," %04x:%04x:%04x SELECTOR%s\n",
|
||||||
pSeg->selector, offset, *sp, additive ? " additive" : "" );
|
pSeg->selector, offset, *sp, additive ? " additive" : "" );
|
||||||
offset = *sp;
|
offset = *sp;
|
||||||
*sp = HIWORD(address);
|
*sp = HIWORD(address);
|
||||||
|
@ -339,12 +334,10 @@ BOOL32 NE_LoadSegment( NE_MODULE *pModule, WORD segnum )
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
dprintf_fixup(stddeb,
|
dprintf_warn(fixup, "WARNING: %d: unknown ADDR TYPE %d, "
|
||||||
"WARNING: %d: unknown ADDR TYPE %d, TYPE %d, OFFSET %04x, ",
|
"TYPE %d, OFFSET %04x, TARGET %04x %04x\n",
|
||||||
i + 1, rep->address_type, rep->relocation_type,
|
i + 1, rep->address_type, rep->relocation_type,
|
||||||
rep->offset);
|
rep->offset, rep->target1, rep->target2);
|
||||||
dprintf_fixup(stddeb,
|
|
||||||
"TARGET %04x %04x\n", rep->target1, rep->target2);
|
|
||||||
free(reloc_entries);
|
free(reloc_entries);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
@ -374,7 +367,7 @@ BOOL32 NE_LoadAllSegments( NE_MODULE *pModule )
|
||||||
DWORD oldstack;
|
DWORD oldstack;
|
||||||
WORD saved_dgroup = pSegTable[pModule->dgroup - 1].selector;
|
WORD saved_dgroup = pSegTable[pModule->dgroup - 1].selector;
|
||||||
|
|
||||||
dprintf_module(stddeb, "MODULE_Load: %.*s is a self-loading module!\n",
|
dprintf_info(module, "NE_LoadAllSegments: %.*s is a self-loading module!\n",
|
||||||
*((BYTE*)pModule + pModule->name_table),
|
*((BYTE*)pModule + pModule->name_table),
|
||||||
(char *)pModule + pModule->name_table + 1);
|
(char *)pModule + pModule->name_table + 1);
|
||||||
if (!NE_LoadSegment( pModule, 1 )) return FALSE;
|
if (!NE_LoadSegment( pModule, 1 )) return FALSE;
|
||||||
|
@ -431,7 +424,7 @@ BOOL32 NE_LoadDLLs( NE_MODULE *pModule )
|
||||||
BYTE *pstr = (BYTE *)pModule + pModule->import_table + *pModRef;
|
BYTE *pstr = (BYTE *)pModule + pModule->import_table + *pModRef;
|
||||||
memcpy( buffer, pstr + 1, *pstr );
|
memcpy( buffer, pstr + 1, *pstr );
|
||||||
strcpy( buffer + *pstr, ".dll" );
|
strcpy( buffer + *pstr, ".dll" );
|
||||||
dprintf_module( stddeb, "Loading '%s'\n", buffer );
|
dprintf_info(module, "Loading '%s'\n", buffer );
|
||||||
if (!(*pModRef = MODULE_FindModule( buffer )))
|
if (!(*pModRef = MODULE_FindModule( buffer )))
|
||||||
{
|
{
|
||||||
/* If the DLL is not loaded yet, load it and store */
|
/* If the DLL is not loaded yet, load it and store */
|
||||||
|
@ -483,12 +476,13 @@ void NE_FixupPrologs( NE_MODULE *pModule )
|
||||||
WORD dgroup = 0;
|
WORD dgroup = 0;
|
||||||
WORD sel;
|
WORD sel;
|
||||||
BYTE *p, *fixup_ptr, count;
|
BYTE *p, *fixup_ptr, count;
|
||||||
|
dbg_decl_str(module, 512);
|
||||||
|
|
||||||
pSegTable = NE_SEG_TABLE(pModule);
|
pSegTable = NE_SEG_TABLE(pModule);
|
||||||
if (pModule->flags & NE_FFLAGS_SINGLEDATA)
|
if (pModule->flags & NE_FFLAGS_SINGLEDATA)
|
||||||
dgroup = pSegTable[pModule->dgroup-1].selector;
|
dgroup = pSegTable[pModule->dgroup-1].selector;
|
||||||
|
|
||||||
dprintf_module( stddeb, "MODULE_FixupPrologs(%04x)\n", pModule->self );
|
dprintf_info(module, "MODULE_FixupPrologs(%04x)\n", pModule->self );
|
||||||
p = (BYTE *)pModule + pModule->entry_table;
|
p = (BYTE *)pModule + pModule->entry_table;
|
||||||
while (*p)
|
while (*p)
|
||||||
{
|
{
|
||||||
|
@ -509,21 +503,23 @@ void NE_FixupPrologs( NE_MODULE *pModule )
|
||||||
p += 2;
|
p += 2;
|
||||||
while (count-- > 0)
|
while (count-- > 0)
|
||||||
{
|
{
|
||||||
dprintf_module( stddeb,"Flags: %04x, sel %02x ", *p, sel);
|
dbg_reset_str(module);
|
||||||
|
dsprintf(module,"Flags: %04x, sel %02x ", *p, sel);
|
||||||
/* According to the output generated by TDUMP, the flags mean:
|
/* According to the output generated by TDUMP, the flags mean:
|
||||||
* 0x0001 function is exported
|
* 0x0001 function is exported
|
||||||
* 0x0002 Single data (seems to occur only in DLLs)
|
* 0x0002 Single data (seems to occur only in DLLs)
|
||||||
*/
|
*/
|
||||||
if (sel == 0xff) { /* moveable */
|
if (sel == 0xff) { /* moveable */
|
||||||
dprintf_module( stddeb, "(%02x) o %04x ", p[3], *(WORD *)(p+4) );
|
dsprintf(module, "(%02x) o %04x", p[3], *(WORD *)(p+4) );
|
||||||
fixup_ptr = (char *)GET_SEL_BASE(pSegTable[p[3]-1].selector) + *(WORD *)(p + 4);
|
fixup_ptr = (char *)GET_SEL_BASE(pSegTable[p[3]-1].selector) + *(WORD *)(p + 4);
|
||||||
} else { /* fixed */
|
} else { /* fixed */
|
||||||
dprintf_module( stddeb, "offset %04x ", *(WORD *)(p+1) );
|
dsprintf(module, "offset %04x", *(WORD *)(p+1) );
|
||||||
fixup_ptr = (char *)GET_SEL_BASE(pSegTable[sel-1].selector) + *(WORD *)(p + 1);
|
fixup_ptr = (char *)GET_SEL_BASE(pSegTable[sel-1].selector) +
|
||||||
|
*(WORD *)(p + 1);
|
||||||
}
|
}
|
||||||
dprintf_module( stddeb, "Signature: %02x %02x %02x,ff %x\n",
|
dprintf_info(module, "%s Signature: %02x %02x %02x,ff %x\n",
|
||||||
fixup_ptr[0], fixup_ptr[1], fixup_ptr[2],
|
dbg_str(module), fixup_ptr[0], fixup_ptr[1],
|
||||||
pModule->flags );
|
fixup_ptr[2], pModule->flags );
|
||||||
if (*p & 0x0001)
|
if (*p & 0x0001)
|
||||||
{
|
{
|
||||||
/* Verify the signature */
|
/* Verify the signature */
|
||||||
|
@ -553,11 +549,11 @@ void NE_FixupPrologs( NE_MODULE *pModule )
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
dprintf_fixup( stddeb, "Unknown signature\n" );
|
dprintf_warn(fixup, "Unknown signature\n" );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
dprintf_module( stddeb,"\n");
|
dprintf_info(module,"\n");
|
||||||
p += (sel == 0xff) ? 6 : 3;
|
p += (sel == 0xff) ? 6 : 3;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -618,9 +614,18 @@ static BOOL32 NE_InitDLL( TDB* pTask, HMODULE16 hModule )
|
||||||
}
|
}
|
||||||
else /* DATA SINGLE DLL */
|
else /* DATA SINGLE DLL */
|
||||||
{
|
{
|
||||||
|
if (pModule->dgroup) {
|
||||||
DS_reg(&context) = pSegTable[pModule->dgroup-1].selector;
|
DS_reg(&context) = pSegTable[pModule->dgroup-1].selector;
|
||||||
ECX_reg(&context) = pModule->heap_size;
|
ECX_reg(&context) = pModule->heap_size;
|
||||||
}
|
}
|
||||||
|
else /* hmm, DLL has no dgroup,
|
||||||
|
but why has it NE_FFLAGS_SINGLEDATA set ?
|
||||||
|
Buggy DLL compiler ? */
|
||||||
|
{
|
||||||
|
DS_reg(&context) = 0;
|
||||||
|
ECX_reg(&context) = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
CS_reg(&context) = pSegTable[pModule->cs-1].selector;
|
CS_reg(&context) = pSegTable[pModule->cs-1].selector;
|
||||||
EIP_reg(&context) = pModule->ip;
|
EIP_reg(&context) = pModule->ip;
|
||||||
|
@ -630,7 +635,7 @@ static BOOL32 NE_InitDLL( TDB* pTask, HMODULE16 hModule )
|
||||||
|
|
||||||
|
|
||||||
pModule->cs = 0; /* Don't initialize it twice */
|
pModule->cs = 0; /* Don't initialize it twice */
|
||||||
dprintf_dll( stddeb, "Calling LibMain, cs:ip=%04lx:%04x ds=%04lx di=%04x cx=%04x\n",
|
dprintf_info(dll, "Calling LibMain, cs:ip=%04lx:%04x ds=%04lx di=%04x cx=%04x\n",
|
||||||
CS_reg(&context), IP_reg(&context), DS_reg(&context),
|
CS_reg(&context), IP_reg(&context), DS_reg(&context),
|
||||||
DI_reg(&context), CX_reg(&context) );
|
DI_reg(&context), CX_reg(&context) );
|
||||||
Callbacks->CallRegisterShortProc( &context, 0 );
|
Callbacks->CallRegisterShortProc( &context, 0 );
|
||||||
|
|
|
@ -18,7 +18,6 @@
|
||||||
#include "module.h"
|
#include "module.h"
|
||||||
#include "neexe.h"
|
#include "neexe.h"
|
||||||
#include "resource.h"
|
#include "resource.h"
|
||||||
#include "stddebug.h"
|
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
|
||||||
#define NEXT_TYPEINFO(pTypeInfo) ((NE_TYPEINFO *)((char*)((pTypeInfo) + 1) + \
|
#define NEXT_TYPEINFO(pTypeInfo) ((NE_TYPEINFO *)((char*)((pTypeInfo) + 1) + \
|
||||||
|
@ -47,13 +46,13 @@ static DWORD NE_FindNameTableId( NE_MODULE *pModule, SEGPTR typeId, SEGPTR resId
|
||||||
pNameInfo = (NE_NAMEINFO *)(pTypeInfo + 1);
|
pNameInfo = (NE_NAMEINFO *)(pTypeInfo + 1);
|
||||||
for (count = pTypeInfo->count; count > 0; count--, pNameInfo++)
|
for (count = pTypeInfo->count; count > 0; count--, pNameInfo++)
|
||||||
{
|
{
|
||||||
dprintf_resource( stddeb, "NameTable entry: type=%04x id=%04x\n",
|
dprintf_info(resource, "NameTable entry: type=%04x id=%04x\n",
|
||||||
pTypeInfo->type_id, pNameInfo->id );
|
pTypeInfo->type_id, pNameInfo->id );
|
||||||
handle = LoadResource16( pModule->self,
|
handle = LoadResource16( pModule->self,
|
||||||
(HRSRC16)((int)pNameInfo - (int)pModule) );
|
(HRSRC16)((int)pNameInfo - (int)pModule) );
|
||||||
for(p = (WORD*)LockResource16(handle); p && *p; p = (WORD *)((char*)p+*p))
|
for(p = (WORD*)LockResource16(handle); p && *p; p = (WORD *)((char*)p+*p))
|
||||||
{
|
{
|
||||||
dprintf_resource( stddeb," type=%04x '%s' id=%04x '%s'\n",
|
dprintf_info(resource," type=%04x '%s' id=%04x '%s'\n",
|
||||||
p[1], (char *)(p+3), p[2],
|
p[1], (char *)(p+3), p[2],
|
||||||
(char *)(p+3)+strlen((char *)(p+3))+1 );
|
(char *)(p+3)+strlen((char *)(p+3))+1 );
|
||||||
/* Check for correct type */
|
/* Check for correct type */
|
||||||
|
@ -81,7 +80,7 @@ static DWORD NE_FindNameTableId( NE_MODULE *pModule, SEGPTR typeId, SEGPTR resId
|
||||||
|
|
||||||
/* If we get here, we've found the entry */
|
/* If we get here, we've found the entry */
|
||||||
|
|
||||||
dprintf_resource( stddeb, " Found!\n" );
|
dprintf_info(resource, " Found!\n" );
|
||||||
ret = MAKELONG( p[1], p[2] );
|
ret = MAKELONG( p[1], p[2] );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -113,11 +112,11 @@ static NE_TYPEINFO* NE_FindTypeSection( NE_MODULE *pModule,
|
||||||
BYTE *p = (BYTE*)pModule + pModule->res_table + pTypeInfo->type_id;
|
BYTE *p = (BYTE*)pModule + pModule->res_table + pTypeInfo->type_id;
|
||||||
if ((*p == len) && !lstrncmpi32A( p+1, str, len ))
|
if ((*p == len) && !lstrncmpi32A( p+1, str, len ))
|
||||||
{
|
{
|
||||||
dprintf_resource( stddeb, " Found type '%s'\n", str );
|
dprintf_info(resource, " Found type '%s'\n", str );
|
||||||
return pTypeInfo;
|
return pTypeInfo;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
dprintf_resource( stddeb, " Skipping type %04x\n", pTypeInfo->type_id );
|
dprintf_info(resource, " Skipping type %04x\n", pTypeInfo->type_id );
|
||||||
pTypeInfo = NEXT_TYPEINFO(pTypeInfo);
|
pTypeInfo = NEXT_TYPEINFO(pTypeInfo);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -128,10 +127,10 @@ static NE_TYPEINFO* NE_FindTypeSection( NE_MODULE *pModule,
|
||||||
{
|
{
|
||||||
if (pTypeInfo->type_id == id)
|
if (pTypeInfo->type_id == id)
|
||||||
{
|
{
|
||||||
dprintf_resource( stddeb, " Found type %04x\n", id );
|
dprintf_info(resource, " Found type %04x\n", id );
|
||||||
return pTypeInfo;
|
return pTypeInfo;
|
||||||
}
|
}
|
||||||
dprintf_resource( stddeb, " Skipping type %04x\n", pTypeInfo->type_id );
|
dprintf_info(resource, " Skipping type %04x\n", pTypeInfo->type_id );
|
||||||
pTypeInfo = NEXT_TYPEINFO(pTypeInfo);
|
pTypeInfo = NEXT_TYPEINFO(pTypeInfo);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -189,7 +188,7 @@ HGLOBAL16 WINAPI NE_DefResourceHandler( HGLOBAL16 hMemObj, HMODULE16 hModule,
|
||||||
WORD sizeShift = *(WORD *)((char *)pModule + pModule->res_table);
|
WORD sizeShift = *(WORD *)((char *)pModule + pModule->res_table);
|
||||||
NE_NAMEINFO* pNameInfo = (NE_NAMEINFO*)((char*)pModule + hRsrc);
|
NE_NAMEINFO* pNameInfo = (NE_NAMEINFO*)((char*)pModule + hRsrc);
|
||||||
|
|
||||||
dprintf_resource( stddeb, "NEResourceHandler: loading, pos=%d, len=%d\n",
|
dprintf_info(resource, "NEResourceHandler: loading, pos=%d, len=%d\n",
|
||||||
(int)pNameInfo->offset << sizeShift,
|
(int)pNameInfo->offset << sizeShift,
|
||||||
(int)pNameInfo->length << sizeShift );
|
(int)pNameInfo->length << sizeShift );
|
||||||
if( hMemObj )
|
if( hMemObj )
|
||||||
|
@ -217,7 +216,7 @@ BOOL32 NE_InitResourceHandler( HMODULE16 hModule )
|
||||||
NE_MODULE *pModule = MODULE_GetPtr( hModule );
|
NE_MODULE *pModule = MODULE_GetPtr( hModule );
|
||||||
NE_TYPEINFO *pTypeInfo = (NE_TYPEINFO *)((char *)pModule + pModule->res_table + 2);
|
NE_TYPEINFO *pTypeInfo = (NE_TYPEINFO *)((char *)pModule + pModule->res_table + 2);
|
||||||
|
|
||||||
dprintf_resource(stddeb,"InitResourceHandler[%04x]\n", hModule );
|
dprintf_info(resource,"InitResourceHandler[%04x]\n", hModule );
|
||||||
|
|
||||||
while(pTypeInfo->type_id)
|
while(pTypeInfo->type_id)
|
||||||
{
|
{
|
||||||
|
@ -280,15 +279,15 @@ HRSRC16 NE_FindResource( HMODULE16 hModule, SEGPTR typeId, SEGPTR resId )
|
||||||
hRsrc = NE_FindResourceFromType(pModule, pTypeInfo, resId);
|
hRsrc = NE_FindResourceFromType(pModule, pTypeInfo, resId);
|
||||||
if( hRsrc )
|
if( hRsrc )
|
||||||
{
|
{
|
||||||
dprintf_resource( stddeb, " Found id %08lx\n", resId );
|
dprintf_info(resource, " Found id %08lx\n", resId );
|
||||||
return hRsrc;
|
return hRsrc;
|
||||||
}
|
}
|
||||||
dprintf_resource( stddeb, " Not found, going on\n" );
|
dprintf_info(resource, " Not found, going on\n" );
|
||||||
pTypeInfo = NEXT_TYPEINFO(pTypeInfo);
|
pTypeInfo = NEXT_TYPEINFO(pTypeInfo);
|
||||||
}
|
}
|
||||||
} while( pTypeInfo );
|
} while( pTypeInfo );
|
||||||
|
|
||||||
dprintf_resource( stddeb, "failed!\n");
|
dprintf_warn(resource, "failed!\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -389,7 +388,7 @@ HGLOBAL16 NE_LoadResource( HMODULE16 hModule, HRSRC16 hRsrc )
|
||||||
&& !(GlobalFlags16(pNameInfo->handle) & GMEM_DISCARDED))
|
&& !(GlobalFlags16(pNameInfo->handle) & GMEM_DISCARDED))
|
||||||
{
|
{
|
||||||
pNameInfo->usage++;
|
pNameInfo->usage++;
|
||||||
dprintf_resource( stddeb, " Already loaded, new count=%d\n",
|
dprintf_info(resource, " Already loaded, new count=%d\n",
|
||||||
pNameInfo->usage );
|
pNameInfo->usage );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -460,7 +459,7 @@ BOOL32 NE_FreeResource( HMODULE16 hModule, HGLOBAL16 handle )
|
||||||
pTypeInfo = (NE_TYPEINFO *)pNameInfo;
|
pTypeInfo = (NE_TYPEINFO *)pNameInfo;
|
||||||
}
|
}
|
||||||
|
|
||||||
dprintf_resource(stddeb, "NE_FreeResource[%04x]: no intrinsic resource for %04x\n",
|
dprintf_info(resource, "NE_FreeResource[%04x]: no intrinsic resource for %04x\n",
|
||||||
hModule, handle );
|
hModule, handle );
|
||||||
GlobalFree16( handle ); /* it could have been DirectResAlloc()'ed */
|
GlobalFree16( handle ); /* it could have been DirectResAlloc()'ed */
|
||||||
return handle;
|
return handle;
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 1994 Eric Youndale & Erik Bos
|
* Copyright 1994 Eric Youndale & Erik Bos
|
||||||
* Copyright 1995 Martin von Löwis
|
* Copyright 1995 Martin von Löwis
|
||||||
* Copyright 1996 Marcus Meissner
|
* Copyright 1996-98 Marcus Meissner
|
||||||
*
|
*
|
||||||
* based on Eric Youndale's pe-test and:
|
* based on Eric Youndale's pe-test and:
|
||||||
*
|
*
|
||||||
|
@ -9,8 +9,26 @@
|
||||||
* make that:
|
* make that:
|
||||||
* ftp.microsoft.com:/developr/MSDN/OctCD/PEFILE.ZIP
|
* ftp.microsoft.com:/developr/MSDN/OctCD/PEFILE.ZIP
|
||||||
*/
|
*/
|
||||||
|
/* Notes:
|
||||||
|
* Before you start changing something in this file be aware of the following:
|
||||||
|
*
|
||||||
|
* - There are several functions called recursively. In a very subtle and
|
||||||
|
* obscure way. DLLs can reference each other recursively etc.
|
||||||
|
* - If you want to enhance, speed up or clean up something in here, think
|
||||||
|
* twice WHY it is implemented in that strange way. There is usually a reason.
|
||||||
|
* Though sometimes it might just be lazyness ;)
|
||||||
|
* - In PE_MapImage, right before fixup_imports() all external and internal
|
||||||
|
* state MUST be correct since this function can be called with the SAME image
|
||||||
|
* AGAIN. (Thats recursion for you.) That means MODREF.module and
|
||||||
|
* NE_MODULE.module32.
|
||||||
|
* - No, you cannot use Linux mmap() to mmap() the images directly. Linux aligns
|
||||||
|
* them at pagesize (4096), Win32 requires 512 byte alignment.
|
||||||
|
* - All those function map things into a new addresspace. From the wrong
|
||||||
|
* process and the wrong thread. So calling other API functions will mess
|
||||||
|
* things up badly sometimes.
|
||||||
|
*/
|
||||||
|
|
||||||
#include <ctype.h>
|
/*#include <ctype.h>*/
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
@ -32,7 +50,6 @@
|
||||||
#include "global.h"
|
#include "global.h"
|
||||||
#include "task.h"
|
#include "task.h"
|
||||||
#include "ldt.h"
|
#include "ldt.h"
|
||||||
#include "stddebug.h"
|
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
#include "xmalloc.h"
|
#include "xmalloc.h"
|
||||||
|
|
||||||
|
@ -57,7 +74,7 @@ void dump_exports( HMODULE32 hModule )
|
||||||
IMAGE_EXPORT_DIRECTORY *pe_exports = (IMAGE_EXPORT_DIRECTORY*)RVA(rva_start);
|
IMAGE_EXPORT_DIRECTORY *pe_exports = (IMAGE_EXPORT_DIRECTORY*)RVA(rva_start);
|
||||||
|
|
||||||
Module = (char*)RVA(pe_exports->Name);
|
Module = (char*)RVA(pe_exports->Name);
|
||||||
dprintf_win32(stddeb,"\n*******EXPORT DATA*******\nModule name is %s, %ld functions, %ld names\n",
|
dprintf_info(win32,"\n*******EXPORT DATA*******\nModule name is %s, %ld functions, %ld names\n",
|
||||||
Module,
|
Module,
|
||||||
pe_exports->NumberOfFunctions,
|
pe_exports->NumberOfFunctions,
|
||||||
pe_exports->NumberOfNames);
|
pe_exports->NumberOfNames);
|
||||||
|
@ -66,19 +83,23 @@ void dump_exports( HMODULE32 hModule )
|
||||||
functions=function=(u_long*) RVA(pe_exports->AddressOfFunctions);
|
functions=function=(u_long*) RVA(pe_exports->AddressOfFunctions);
|
||||||
name=(u_char**) RVA(pe_exports->AddressOfNames);
|
name=(u_char**) RVA(pe_exports->AddressOfNames);
|
||||||
|
|
||||||
dprintf_win32(stddeb," Ord RVA Addr Name\n" );
|
dprintf_info(win32," Ord RVA Addr Name\n" );
|
||||||
for (i=0;i<pe_exports->NumberOfFunctions;i++, function++)
|
for (i=0;i<pe_exports->NumberOfFunctions;i++, function++)
|
||||||
{
|
{
|
||||||
if (!*function) continue; /* No such function */
|
if (!*function) continue; /* No such function */
|
||||||
dprintf_win32( stddeb,"%4ld %08lx %08x",
|
if (debugging_info(win32)){
|
||||||
|
dbg_decl_str(win32, 1024);
|
||||||
|
|
||||||
|
dsprintf(win32,"%4ld %08lx %08x",
|
||||||
i + pe_exports->Base, *function, RVA(*function) );
|
i + pe_exports->Base, *function, RVA(*function) );
|
||||||
/* Check if we have a name for it */
|
/* Check if we have a name for it */
|
||||||
for (j = 0; j < pe_exports->NumberOfNames; j++)
|
for (j = 0; j < pe_exports->NumberOfNames; j++)
|
||||||
if (ordinal[j] == i)
|
if (ordinal[j] == i)
|
||||||
dprintf_win32( stddeb, " %s", (char*)RVA(name[j]) );
|
dsprintf(win32, " %s", (char*)RVA(name[j]) );
|
||||||
if ((*function >= rva_start) && (*function <= rva_end))
|
if ((*function >= rva_start) && (*function <= rva_end))
|
||||||
dprintf_win32(stddeb, " (forwarded -> %s)", (char *)RVA(*function));
|
dsprintf(win32, " (forwarded -> %s)", (char *)RVA(*function));
|
||||||
dprintf_win32( stddeb,"\n" );
|
dprintf_info(win32,"%s\n", dbg_str(win32));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -114,9 +135,9 @@ FARPROC32 PE_FindExportedFunction( PDB32 *process, HMODULE32 hModule,
|
||||||
exports = pem->pe_export;
|
exports = pem->pe_export;
|
||||||
|
|
||||||
if (HIWORD(funcName))
|
if (HIWORD(funcName))
|
||||||
dprintf_win32(stddeb,"PE_FindExportedFunction(%s)\n",funcName);
|
dprintf_info(win32,"PE_FindExportedFunction(%s)\n",funcName);
|
||||||
else
|
else
|
||||||
dprintf_win32(stddeb,"PE_FindExportedFunction(%d)\n",(int)funcName);
|
dprintf_info(win32,"PE_FindExportedFunction(%d)\n",(int)funcName);
|
||||||
if (!exports) {
|
if (!exports) {
|
||||||
fprintf(stderr,"Module %08x/MODREF %p doesn't have a exports table.\n",hModule,pem);
|
fprintf(stderr,"Module %08x/MODREF %p doesn't have a exports table.\n",hModule,pem);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -136,6 +157,7 @@ FARPROC32 PE_FindExportedFunction( PDB32 *process, HMODULE32 hModule,
|
||||||
if(!strcmp(ename,funcName))
|
if(!strcmp(ename,funcName))
|
||||||
{
|
{
|
||||||
addr = function[*ordinal];
|
addr = function[*ordinal];
|
||||||
|
if (!addr) return NULL;
|
||||||
if ((addr < rva_start) || (addr >= rva_end))
|
if ((addr < rva_start) || (addr >= rva_end))
|
||||||
return (FARPROC32)RVA(addr);
|
return (FARPROC32)RVA(addr);
|
||||||
forward = (char *)RVA(addr);
|
forward = (char *)RVA(addr);
|
||||||
|
@ -146,11 +168,12 @@ FARPROC32 PE_FindExportedFunction( PDB32 *process, HMODULE32 hModule,
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (LOWORD(funcName)-exports->Base > exports->NumberOfFunctions) {
|
if (LOWORD(funcName)-exports->Base > exports->NumberOfFunctions) {
|
||||||
dprintf_win32(stddeb," ordinal %d out of range!\n",
|
dprintf_info(win32," ordinal %d out of range!\n",
|
||||||
LOWORD(funcName));
|
LOWORD(funcName));
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
addr = function[(int)funcName-exports->Base];
|
addr = function[(int)funcName-exports->Base];
|
||||||
|
if (!addr) return NULL;
|
||||||
if ((addr < rva_start) || (addr >= rva_end))
|
if ((addr < rva_start) || (addr >= rva_end))
|
||||||
return (FARPROC32)RVA(addr);
|
return (FARPROC32)RVA(addr);
|
||||||
forward = (char *)RVA(addr);
|
forward = (char *)RVA(addr);
|
||||||
|
@ -183,7 +206,7 @@ DWORD fixup_imports (PDB32 *process,PE_MODREF *pem,HMODULE32 hModule)
|
||||||
modname = "<unknown>";
|
modname = "<unknown>";
|
||||||
|
|
||||||
/* OK, now dump the import list */
|
/* OK, now dump the import list */
|
||||||
dprintf_win32 (stddeb, "\nDumping imports list\n");
|
dprintf_info(win32, "\nDumping imports list\n");
|
||||||
|
|
||||||
/* first, count the number of imported non-internal modules */
|
/* first, count the number of imported non-internal modules */
|
||||||
pe_imp = pem->pe_import;
|
pe_imp = pem->pe_import;
|
||||||
|
@ -230,27 +253,24 @@ DWORD fixup_imports (PDB32 *process,PE_MODREF *pem,HMODULE32 hModule)
|
||||||
xpem = xpem->next;
|
xpem = xpem->next;
|
||||||
}
|
}
|
||||||
if (xpem) {
|
if (xpem) {
|
||||||
/* it has been loaded *BEFORE* us, so we have to init
|
/* It has been loaded *BEFORE* us, so we have to initialize
|
||||||
* it before us. we just swap the two modules which should
|
* it before us. We cannot just link in the xpem before pem,
|
||||||
* work.
|
* since xpem might reference more dlls which would be in the
|
||||||
|
* wrong order after that.
|
||||||
|
* Instead we link in pem right AFTER xpem, which should keep
|
||||||
|
* the correct order. (I am not 100% sure about that.)
|
||||||
*/
|
*/
|
||||||
/* unlink xpem from chain */
|
/* unlink pem from chain */
|
||||||
ypem = &(process->modref_list);
|
|
||||||
while (*ypem) {
|
|
||||||
if ((*ypem)==xpem)
|
|
||||||
break;
|
|
||||||
ypem = &((*ypem)->next);
|
|
||||||
}
|
|
||||||
*ypem = xpem->next;
|
|
||||||
|
|
||||||
/* link it directly before pem */
|
|
||||||
ypem = &(process->modref_list);
|
ypem = &(process->modref_list);
|
||||||
while (*ypem) {
|
while (*ypem) {
|
||||||
if ((*ypem)==pem)
|
if ((*ypem)==pem)
|
||||||
break;
|
break;
|
||||||
ypem = &((*ypem)->next);
|
ypem = &((*ypem)->next);
|
||||||
}
|
}
|
||||||
*ypem = xpem;
|
*ypem = pem->next;
|
||||||
|
|
||||||
|
/* link pem directly AFTER xpem */
|
||||||
|
pem->next = xpem->next;
|
||||||
xpem->next = pem;
|
xpem->next = pem;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -265,12 +285,12 @@ DWORD fixup_imports (PDB32 *process,PE_MODREF *pem,HMODULE32 hModule)
|
||||||
|
|
||||||
Module = (char *) RVA(pe_imp->Name);
|
Module = (char *) RVA(pe_imp->Name);
|
||||||
hImpModule = MODULE_HANDLEtoHMODULE32( MODULE_FindModule(Module) );
|
hImpModule = MODULE_HANDLEtoHMODULE32( MODULE_FindModule(Module) );
|
||||||
dprintf_win32 (stddeb, "%s\n", Module);
|
dprintf_info(win32, "%s\n", Module);
|
||||||
|
|
||||||
/* FIXME: forwarder entries ... */
|
/* FIXME: forwarder entries ... */
|
||||||
|
|
||||||
if (pe_imp->u.OriginalFirstThunk != 0) { /* original MS style */
|
if (pe_imp->u.OriginalFirstThunk != 0) { /* original MS style */
|
||||||
dprintf_win32 (stddeb, "Microsoft style imports used\n");
|
dprintf_info(win32, "Microsoft style imports used\n");
|
||||||
import_list =(LPIMAGE_THUNK_DATA) RVA(pe_imp->u.OriginalFirstThunk);
|
import_list =(LPIMAGE_THUNK_DATA) RVA(pe_imp->u.OriginalFirstThunk);
|
||||||
thunk_list = (LPIMAGE_THUNK_DATA) RVA(pe_imp->FirstThunk);
|
thunk_list = (LPIMAGE_THUNK_DATA) RVA(pe_imp->FirstThunk);
|
||||||
|
|
||||||
|
@ -278,7 +298,7 @@ DWORD fixup_imports (PDB32 *process,PE_MODREF *pem,HMODULE32 hModule)
|
||||||
if (IMAGE_SNAP_BY_ORDINAL(import_list->u1.Ordinal)) {
|
if (IMAGE_SNAP_BY_ORDINAL(import_list->u1.Ordinal)) {
|
||||||
int ordinal = IMAGE_ORDINAL(import_list->u1.Ordinal);
|
int ordinal = IMAGE_ORDINAL(import_list->u1.Ordinal);
|
||||||
|
|
||||||
dprintf_win32 (stddeb, "--- Ordinal %s,%d\n", Module, ordinal);
|
dprintf_info(win32, "--- Ordinal %s,%d\n", Module, ordinal);
|
||||||
thunk_list->u1.Function=(LPDWORD)PE_FindExportedFunction(
|
thunk_list->u1.Function=(LPDWORD)PE_FindExportedFunction(
|
||||||
process, hImpModule, (LPCSTR)ordinal);
|
process, hImpModule, (LPCSTR)ordinal);
|
||||||
if (!thunk_list->u1.Function) {
|
if (!thunk_list->u1.Function) {
|
||||||
|
@ -288,7 +308,7 @@ DWORD fixup_imports (PDB32 *process,PE_MODREF *pem,HMODULE32 hModule)
|
||||||
}
|
}
|
||||||
} else { /* import by name */
|
} else { /* import by name */
|
||||||
pe_name = (LPIMAGE_IMPORT_BY_NAME)RVA(import_list->u1.AddressOfData);
|
pe_name = (LPIMAGE_IMPORT_BY_NAME)RVA(import_list->u1.AddressOfData);
|
||||||
dprintf_win32 (stddeb, "--- %s %s.%d\n", pe_name->Name, Module, pe_name->Hint);
|
dprintf_info(win32, "--- %s %s.%d\n", pe_name->Name, Module, pe_name->Hint);
|
||||||
thunk_list->u1.Function=(LPDWORD)PE_FindExportedFunction(
|
thunk_list->u1.Function=(LPDWORD)PE_FindExportedFunction(
|
||||||
process, hImpModule, pe_name->Name);
|
process, hImpModule, pe_name->Name);
|
||||||
if (!thunk_list->u1.Function) {
|
if (!thunk_list->u1.Function) {
|
||||||
|
@ -301,14 +321,14 @@ DWORD fixup_imports (PDB32 *process,PE_MODREF *pem,HMODULE32 hModule)
|
||||||
thunk_list++;
|
thunk_list++;
|
||||||
}
|
}
|
||||||
} else { /* Borland style */
|
} else { /* Borland style */
|
||||||
dprintf_win32 (stddeb, "Borland style imports used\n");
|
dprintf_info(win32, "Borland style imports used\n");
|
||||||
thunk_list = (LPIMAGE_THUNK_DATA) RVA(pe_imp->FirstThunk);
|
thunk_list = (LPIMAGE_THUNK_DATA) RVA(pe_imp->FirstThunk);
|
||||||
while (thunk_list->u1.Ordinal) {
|
while (thunk_list->u1.Ordinal) {
|
||||||
if (IMAGE_SNAP_BY_ORDINAL(thunk_list->u1.Ordinal)) {
|
if (IMAGE_SNAP_BY_ORDINAL(thunk_list->u1.Ordinal)) {
|
||||||
/* not sure about this branch, but it seems to work */
|
/* not sure about this branch, but it seems to work */
|
||||||
int ordinal = IMAGE_ORDINAL(thunk_list->u1.Ordinal);
|
int ordinal = IMAGE_ORDINAL(thunk_list->u1.Ordinal);
|
||||||
|
|
||||||
dprintf_win32(stddeb,"--- Ordinal %s.%d\n",Module,ordinal);
|
dprintf_info(win32,"--- Ordinal %s.%d\n",Module,ordinal);
|
||||||
thunk_list->u1.Function=(LPDWORD)PE_FindExportedFunction(
|
thunk_list->u1.Function=(LPDWORD)PE_FindExportedFunction(
|
||||||
process, hImpModule, (LPCSTR) ordinal);
|
process, hImpModule, (LPCSTR) ordinal);
|
||||||
if (!thunk_list->u1.Function) {
|
if (!thunk_list->u1.Function) {
|
||||||
|
@ -318,7 +338,7 @@ DWORD fixup_imports (PDB32 *process,PE_MODREF *pem,HMODULE32 hModule)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
pe_name=(LPIMAGE_IMPORT_BY_NAME) RVA(thunk_list->u1.AddressOfData);
|
pe_name=(LPIMAGE_IMPORT_BY_NAME) RVA(thunk_list->u1.AddressOfData);
|
||||||
dprintf_win32(stddeb,"--- %s %s.%d\n",
|
dprintf_info(win32,"--- %s %s.%d\n",
|
||||||
pe_name->Name,Module,pe_name->Hint);
|
pe_name->Name,Module,pe_name->Hint);
|
||||||
thunk_list->u1.Function=(LPDWORD)PE_FindExportedFunction(
|
thunk_list->u1.Function=(LPDWORD)PE_FindExportedFunction(
|
||||||
process, hImpModule, pe_name->Name );
|
process, hImpModule, pe_name->Name );
|
||||||
|
@ -342,11 +362,11 @@ static int calc_vma_size( HMODULE32 hModule )
|
||||||
int i,vma_size = 0;
|
int i,vma_size = 0;
|
||||||
IMAGE_SECTION_HEADER *pe_seg = PE_SECTIONS(hModule);
|
IMAGE_SECTION_HEADER *pe_seg = PE_SECTIONS(hModule);
|
||||||
|
|
||||||
dprintf_win32(stddeb, "Dump of segment table\n");
|
dprintf_info(win32, "Dump of segment table\n");
|
||||||
dprintf_win32(stddeb, " Name VSz Vaddr SzRaw Fileadr *Reloc *Lineum #Reloc #Linum Char\n");
|
dprintf_info(win32, " Name VSz Vaddr SzRaw Fileadr *Reloc *Lineum #Reloc #Linum Char\n");
|
||||||
for (i = 0; i< PE_HEADER(hModule)->FileHeader.NumberOfSections; i++)
|
for (i = 0; i< PE_HEADER(hModule)->FileHeader.NumberOfSections; i++)
|
||||||
{
|
{
|
||||||
dprintf_win32(stddeb, "%8s: %4.4lx %8.8lx %8.8lx %8.8lx %8.8lx %8.8lx %4.4x %4.4x %8.8lx\n",
|
dprintf_info(win32, "%8s: %4.4lx %8.8lx %8.8lx %8.8lx %8.8lx %8.8lx %4.4x %4.4x %8.8lx\n",
|
||||||
pe_seg->Name,
|
pe_seg->Name,
|
||||||
pe_seg->Misc.VirtualSize,
|
pe_seg->Misc.VirtualSize,
|
||||||
pe_seg->VirtualAddress,
|
pe_seg->VirtualAddress,
|
||||||
|
@ -381,14 +401,14 @@ static void do_relocations(PE_MODREF *pem)
|
||||||
char *page = (char*) RVA(r->VirtualAddress);
|
char *page = (char*) RVA(r->VirtualAddress);
|
||||||
int count = (r->SizeOfBlock - 8)/2;
|
int count = (r->SizeOfBlock - 8)/2;
|
||||||
int i;
|
int i;
|
||||||
dprintf_fixup(stddeb, "%x relocations for page %lx\n",
|
dprintf_info(fixup, "%x relocations for page %lx\n",
|
||||||
count, r->VirtualAddress);
|
count, r->VirtualAddress);
|
||||||
/* patching in reverse order */
|
/* patching in reverse order */
|
||||||
for(i=0;i<count;i++)
|
for(i=0;i<count;i++)
|
||||||
{
|
{
|
||||||
int offset = r->TypeOffset[i] & 0xFFF;
|
int offset = r->TypeOffset[i] & 0xFFF;
|
||||||
int type = r->TypeOffset[i] >> 12;
|
int type = r->TypeOffset[i] >> 12;
|
||||||
dprintf_fixup(stddeb,"patching %x type %x\n", offset, type);
|
dprintf_info(fixup,"patching %x type %x\n", offset, type);
|
||||||
switch(type)
|
switch(type)
|
||||||
{
|
{
|
||||||
case IMAGE_REL_BASED_ABSOLUTE: break;
|
case IMAGE_REL_BASED_ABSOLUTE: break;
|
||||||
|
@ -495,7 +515,7 @@ error:
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
* This maps a loaded PE dll into the address space of the specified process.
|
* This maps a loaded PE dll into the address space of the specified process.
|
||||||
*/
|
*/
|
||||||
static HMODULE32 PE_MapImage( HMODULE32 hModule, PDB32 *process,
|
static BOOL32 PE_MapImage( HMODULE32 *phModule, PDB32 *process,
|
||||||
OFSTRUCT *ofs, DWORD flags )
|
OFSTRUCT *ofs, DWORD flags )
|
||||||
{
|
{
|
||||||
PE_MODREF *pem;
|
PE_MODREF *pem;
|
||||||
|
@ -504,6 +524,7 @@ static HMODULE32 PE_MapImage( HMODULE32 hModule, PDB32 *process,
|
||||||
IMAGE_DATA_DIRECTORY dir;
|
IMAGE_DATA_DIRECTORY dir;
|
||||||
char *modname;
|
char *modname;
|
||||||
int vma_size;
|
int vma_size;
|
||||||
|
HMODULE32 hModule = *phModule;
|
||||||
|
|
||||||
IMAGE_SECTION_HEADER *pe_seg;
|
IMAGE_SECTION_HEADER *pe_seg;
|
||||||
IMAGE_DOS_HEADER *dos_header = (IMAGE_DOS_HEADER *)hModule;
|
IMAGE_DOS_HEADER *dos_header = (IMAGE_DOS_HEADER *)hModule;
|
||||||
|
@ -524,7 +545,7 @@ static HMODULE32 PE_MapImage( HMODULE32 hModule, PDB32 *process,
|
||||||
|
|
||||||
load_addr = nt_header->OptionalHeader.ImageBase;
|
load_addr = nt_header->OptionalHeader.ImageBase;
|
||||||
vma_size = calc_vma_size( hModule );
|
vma_size = calc_vma_size( hModule );
|
||||||
dprintf_win32(stddeb, "Load addr is %lx\n",load_addr);
|
dprintf_info(win32, "Load addr is %lx\n",load_addr);
|
||||||
load_addr = (DWORD)VirtualAlloc( (void*)load_addr, vma_size,
|
load_addr = (DWORD)VirtualAlloc( (void*)load_addr, vma_size,
|
||||||
MEM_RESERVE | MEM_COMMIT,
|
MEM_RESERVE | MEM_COMMIT,
|
||||||
PAGE_EXECUTE_READWRITE );
|
PAGE_EXECUTE_READWRITE );
|
||||||
|
@ -533,9 +554,12 @@ static HMODULE32 PE_MapImage( HMODULE32 hModule, PDB32 *process,
|
||||||
MEM_RESERVE | MEM_COMMIT,
|
MEM_RESERVE | MEM_COMMIT,
|
||||||
PAGE_EXECUTE_READWRITE );
|
PAGE_EXECUTE_READWRITE );
|
||||||
}
|
}
|
||||||
pem->module = (HMODULE32)load_addr;
|
/* *phModule is the module32 entry in the NE_MODULE. We need to
|
||||||
|
* change it here, since it can get referenced by fixup_imports()
|
||||||
|
*/
|
||||||
|
pem->module = *phModule = (HMODULE32)load_addr;
|
||||||
|
|
||||||
dprintf_win32(stddeb, "Load addr is really %lx, range %x\n",
|
dprintf_info(win32, "Load addr is really %lx, range %x\n",
|
||||||
load_addr, vma_size);
|
load_addr, vma_size);
|
||||||
|
|
||||||
/* Store the NT header at the load addr
|
/* Store the NT header at the load addr
|
||||||
|
@ -611,10 +635,10 @@ static HMODULE32 PE_MapImage( HMODULE32 hModule, PDB32 *process,
|
||||||
}
|
}
|
||||||
|
|
||||||
if(nt_header->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXCEPTION].Size)
|
if(nt_header->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXCEPTION].Size)
|
||||||
dprintf_win32(stdnimp,"Exception directory ignored\n");
|
dprintf_fixme(win32,"Exception directory ignored\n");
|
||||||
|
|
||||||
if(nt_header->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_SECURITY].Size)
|
if(nt_header->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_SECURITY].Size)
|
||||||
dprintf_win32(stdnimp,"Security directory ignored\n");
|
dprintf_fixme(win32,"Security directory ignored\n");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -628,29 +652,29 @@ static HMODULE32 PE_MapImage( HMODULE32 hModule, PDB32 *process,
|
||||||
|
|
||||||
if(nt_header->OptionalHeader.DataDirectory
|
if(nt_header->OptionalHeader.DataDirectory
|
||||||
[IMAGE_DIRECTORY_ENTRY_COPYRIGHT].Size)
|
[IMAGE_DIRECTORY_ENTRY_COPYRIGHT].Size)
|
||||||
dprintf_win32(stdnimp,"Copyright string ignored\n");
|
dprintf_fixme(win32,"Copyright string ignored\n");
|
||||||
|
|
||||||
if(nt_header->OptionalHeader.DataDirectory
|
if(nt_header->OptionalHeader.DataDirectory
|
||||||
[IMAGE_DIRECTORY_ENTRY_GLOBALPTR].Size)
|
[IMAGE_DIRECTORY_ENTRY_GLOBALPTR].Size)
|
||||||
dprintf_win32(stdnimp,"Global Pointer (MIPS) ignored\n");
|
dprintf_fixme(win32,"Global Pointer (MIPS) ignored\n");
|
||||||
|
|
||||||
if(nt_header->OptionalHeader.DataDirectory
|
if(nt_header->OptionalHeader.DataDirectory
|
||||||
[IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG].Size)
|
[IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG].Size)
|
||||||
dprintf_win32(stdnimp,"Load Configuration directory ignored\n");
|
dprintf_fixme(win32,"Load Configuration directory ignored\n");
|
||||||
|
|
||||||
if(nt_header->OptionalHeader.DataDirectory
|
if(nt_header->OptionalHeader.DataDirectory
|
||||||
[IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT].Size)
|
[IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT].Size)
|
||||||
dprintf_win32(stdnimp,"Bound Import directory ignored\n");
|
dprintf_fixme(win32,"Bound Import directory ignored\n");
|
||||||
|
|
||||||
if(nt_header->OptionalHeader.DataDirectory
|
if(nt_header->OptionalHeader.DataDirectory
|
||||||
[IMAGE_DIRECTORY_ENTRY_IAT].Size)
|
[IMAGE_DIRECTORY_ENTRY_IAT].Size)
|
||||||
dprintf_win32(stdnimp,"Import Address Table directory ignored\n");
|
dprintf_fixme(win32,"Import Address Table directory ignored\n");
|
||||||
if(nt_header->OptionalHeader.DataDirectory[13].Size)
|
if(nt_header->OptionalHeader.DataDirectory[13].Size)
|
||||||
dprintf_win32(stdnimp,"Unknown directory 13 ignored\n");
|
dprintf_fixme(win32,"Unknown directory 13 ignored\n");
|
||||||
if(nt_header->OptionalHeader.DataDirectory[14].Size)
|
if(nt_header->OptionalHeader.DataDirectory[14].Size)
|
||||||
dprintf_win32(stdnimp,"Unknown directory 14 ignored\n");
|
dprintf_fixme(win32,"Unknown directory 14 ignored\n");
|
||||||
if(nt_header->OptionalHeader.DataDirectory[15].Size)
|
if(nt_header->OptionalHeader.DataDirectory[15].Size)
|
||||||
dprintf_win32(stdnimp,"Unknown directory 15 ignored\n");
|
dprintf_fixme(win32,"Unknown directory 15 ignored\n");
|
||||||
|
|
||||||
if(pem->pe_reloc) do_relocations(pem);
|
if(pem->pe_reloc) do_relocations(pem);
|
||||||
if(pem->pe_export) dump_exports(pem->module);
|
if(pem->pe_export) dump_exports(pem->module);
|
||||||
|
@ -691,7 +715,7 @@ static HMODULE32 PE_MapImage( HMODULE32 hModule, PDB32 *process,
|
||||||
/* Now that we got everything at the right address,
|
/* Now that we got everything at the right address,
|
||||||
* we can unmap the previous module */
|
* we can unmap the previous module */
|
||||||
UnmapViewOfFile( (LPVOID)hModule );
|
UnmapViewOfFile( (LPVOID)hModule );
|
||||||
return (HMODULE32)load_addr;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
HINSTANCE16 MODULE_CreateInstance(HMODULE16 hModule,LOADPARAMS *params);
|
HINSTANCE16 MODULE_CreateInstance(HMODULE16 hModule,LOADPARAMS *params);
|
||||||
|
@ -705,7 +729,7 @@ HMODULE32 PE_LoadLibraryEx32A (LPCSTR name, PDB32 *process,
|
||||||
HFILE32 hFile, DWORD flags)
|
HFILE32 hFile, DWORD flags)
|
||||||
{
|
{
|
||||||
OFSTRUCT ofs;
|
OFSTRUCT ofs;
|
||||||
HMODULE32 hModule,ret;
|
HMODULE32 hModule;
|
||||||
NE_MODULE *pModule;
|
NE_MODULE *pModule;
|
||||||
PE_MODREF *pem;
|
PE_MODREF *pem;
|
||||||
|
|
||||||
|
@ -767,13 +791,11 @@ HMODULE32 PE_LoadLibraryEx32A (LPCSTR name, PDB32 *process,
|
||||||
if (pModule->module32 < 32) return 21;
|
if (pModule->module32 < 32) return 21;
|
||||||
}
|
}
|
||||||
/* recurse */
|
/* recurse */
|
||||||
ret = PE_MapImage( pModule->module32, process, &ofs,flags);
|
if (!PE_MapImage( &(pModule->module32), process, &ofs,flags)) {
|
||||||
if (!ret) {
|
|
||||||
/* should free this module and the already referenced ones */
|
/* should free this module and the already referenced ones */
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
pModule->module32 = ret;
|
return pModule->module32;
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
|
@ -784,7 +806,7 @@ HMODULE32 PE_LoadLibraryEx32A (LPCSTR name, PDB32 *process,
|
||||||
HINSTANCE16 PE_LoadModule( HFILE32 hFile, OFSTRUCT *ofs, LOADPARAMS* params )
|
HINSTANCE16 PE_LoadModule( HFILE32 hFile, OFSTRUCT *ofs, LOADPARAMS* params )
|
||||||
{
|
{
|
||||||
HMODULE16 hModule16;
|
HMODULE16 hModule16;
|
||||||
HMODULE32 hModule32, ret;
|
HMODULE32 hModule32;
|
||||||
HINSTANCE16 hInstance;
|
HINSTANCE16 hInstance;
|
||||||
NE_MODULE *pModule;
|
NE_MODULE *pModule;
|
||||||
THDB *thdb = THREAD_Current();
|
THDB *thdb = THREAD_Current();
|
||||||
|
@ -807,20 +829,19 @@ HINSTANCE16 PE_LoadModule( HFILE32 hFile, OFSTRUCT *ofs, LOADPARAMS* params )
|
||||||
TDB *pTask = (TDB *)GlobalLock16( hTask );
|
TDB *pTask = (TDB *)GlobalLock16( hTask );
|
||||||
thdb = pTask->thdb;
|
thdb = pTask->thdb;
|
||||||
}
|
}
|
||||||
if (!(ret = PE_MapImage( hModule32, thdb->process, ofs, 0 )))
|
if (!PE_MapImage( &(pModule->module32), thdb->process, ofs, 0 ))
|
||||||
{
|
{
|
||||||
/* FIXME: should destroy the task created ... */
|
/* FIXME: should destroy the task created and free referenced stuff */
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
pModule->module32 = ret;
|
/* FIXME: Yuck. Is there no other good place to do that? */
|
||||||
/* yuck. but there is no other good place to do that... */
|
|
||||||
PE_InitTls( thdb );
|
PE_InitTls( thdb );
|
||||||
return hInstance;
|
return hInstance;
|
||||||
}
|
}
|
||||||
|
|
||||||
int PE_UnloadImage( HMODULE32 hModule )
|
int PE_UnloadImage( HMODULE32 hModule )
|
||||||
{
|
{
|
||||||
printf("PEunloadImage() called!\n");
|
fprintf(stderr,"PEunloadImage() called!\n");
|
||||||
/* free resources, image, unmap */
|
/* free resources, image, unmap */
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -848,7 +869,7 @@ static void PE_InitDLL(PE_MODREF *pem, DWORD type,LPVOID lpReserved)
|
||||||
) {
|
) {
|
||||||
FARPROC32 entry = (FARPROC32)RVA_PTR( pem->module,
|
FARPROC32 entry = (FARPROC32)RVA_PTR( pem->module,
|
||||||
OptionalHeader.AddressOfEntryPoint );
|
OptionalHeader.AddressOfEntryPoint );
|
||||||
dprintf_relay( stddeb, "CallTo32(entryproc=%p,module=%08x,type=%ld,res=%p)\n",
|
dprintf_info(relay, "CallTo32(entryproc=%p,module=%08x,type=%ld,res=%p)\n",
|
||||||
entry, pem->module, type, lpReserved );
|
entry, pem->module, type, lpReserved );
|
||||||
entry( pem->module, type, lpReserved );
|
entry( pem->module, type, lpReserved );
|
||||||
}
|
}
|
||||||
|
@ -899,7 +920,7 @@ void PE_InitTls(THDB *thdb)
|
||||||
DataDirectory[IMAGE_FILE_THREAD_LOCAL_STORAGE].VirtualAddress);
|
DataDirectory[IMAGE_FILE_THREAD_LOCAL_STORAGE].VirtualAddress);
|
||||||
|
|
||||||
if (!(pem->flags & PE_MODREF_TLS_ALLOCED)) {
|
if (!(pem->flags & PE_MODREF_TLS_ALLOCED)) {
|
||||||
pem->tlsindex = TlsAlloc();
|
pem->tlsindex = THREAD_TlsAlloc(thdb);
|
||||||
*(pdir->AddressOfIndex)=pem->tlsindex;
|
*(pdir->AddressOfIndex)=pem->tlsindex;
|
||||||
}
|
}
|
||||||
pem->flags |= PE_MODREF_TLS_ALLOCED;
|
pem->flags |= PE_MODREF_TLS_ALLOCED;
|
||||||
|
@ -929,4 +950,3 @@ BOOL32 WINAPI DisableThreadLibraryCalls(HMODULE32 hModule)
|
||||||
}
|
}
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue