Release 980517
Sun May 17 16:23:56 1998 Uwe Bonnes <bon@elektron.ikp.physik.tu-darmstadt.de> * [file/profile.c] Fix the return value of PROFILE_GetSection * [misc/crtdll.c] Do _getdrive, fix _chdrive. * [misc/commdlg.c] First cut at ChooseColor[WA]. * [misc/network.c] Do something sensible for WNetGetDirectoryType16. Sun May 17 10:21:35 1998 Andreas Mohr <100.30936@germany.net> * [controls/menu.c] Fixed disabled sub menus with MF_BYPOSITION that were not disabled. * [misc/crtdll.c] [relay32/crtdll.spec] [include/winerror.h] Implemented fscanf, fsetpos, _access, _fpreset (thanks to Uwe Bonnes), and _ltoa. * [loader/task.c] MakeProcInstance: must use CURRENT_DS if hInst == NULL. * [misc/shell.c] SHELL_GetResourceTable, InternalExtractIcon: fixed broken .ICO handling * [windows/winpos.c] DeferWindowPos: removed "same parent" requirement. Which doc states that this is required ? Sat May 16 20:08:11 1998 Alexandre Julliard <julliard@lrc.epfl.ch> * [loader/module.c] [loader/ne/module.c] More NE module cleanups. * [loader/task.c] Fixed SwitchStackBack(). Fri May 15 10:04:27 1998 Marcus Meissner <marcus@jet.franken.de> * [configure.in][inlcude/acconfig.h] Fixed broken OSS check, added check for working sigaltstack, fixed broken statfs checks on some linux systems. * [files/directory.c][loader/pe_image.c][relay32/builtin.c] [loader/module.c] Added handling of win32 module pathnames. * [relay32/wnaspi32.spec] New file. * [misc/lzexpand.c] LZCopy auto-decompresses LZ compressed files, even if they are not specially flagged. Fixes some InstallShield problems. * [misc/registry.c] Some fixes for RegQueryInfoKey (reference program monkey.exe from Win32 SDK works now better). Probably still has faults. Fri May 15 08:58:58 1998 Martin Boehme <boehme@informatik.mu-luebeck.de> * [graphics/mapping.c] [include/dc.h] [include/gdi.h] [objects/dc.c] Reworked the way world transformations and mapping modes are handled so that both of these transformations can be computed in a single step. * [graphics/painting.c] [graphics/path.c] [include/path.h] More GDI path support. * [graphics/x11drv/graphics.c] Fixed the return value of GRAPH_DrawArc for the zero height / zero width case to reflect Windows' behaviour. * [include/windows.h] [relay32/gdi32.spec] [objects/dc.c] Implemented ModifyWorldTransform and CombineTransform. Tue May 14 18:03:46 1998 Eric Kohl <ekohl@abo.rhein-zeitung.de> * [controls/commctrl.c][relay32/comctl32.spec] [controls/*.c][include/*.h] Implemented InitCommonControlsEx (dll version 4.72 compatible). InitCommonControls calls ImageCommonControlsEx. Registering code of the common controls had to be changed (see XXXX_Register functions). * [controls/status.c][include/commctrl.h][include/status.h] Implemented most new features and fixed the look and feel. * [contols/commctrl.c][include/commctrl.h][relay32/comctl32.spec] Implemented MenuHelp (incomplete). * [controls/status.c][controls/progress.c] Changed allocation strategy for control specific memory. * [controls/header.c][include/header.h][include/commctrl.h] First implementation of header control. * [windows/defwnd.c][windows/syscolors.c] Fixed default control colors for Win95 look. * [windows/nonclient.c] Fixed off by one error for Win95 look. Top border of child windows should be visible. * [misc/imagelist.h] Improved documentation and fixed some bugs. Thu May 14 15:42:21 1998 Robert Wilhelm <robert@physiol.med.tu-muenchen.de> * [relay32/crtdll.spec] Added hypot,j0,j1,jn and ceil. Wed May 13 19:10:10 1998 Pascal Cuoq <pcuoq@ens-lyon.fr> * [controls/listbox.c] Item height is now exactly font height. Wine listboxes now behave like Windows' when they are created without WS_VSCROLL but the program subsequently calls ShowScrollBar or SetScrollInfo. Wed May 13 18:33:01 1998 Ulrich Weigand <weigand@informatik.uni-erlangen.de> * [relay32/relay386.c] Restore ES also in the non-debug case. * [windows/event.c] Bugfix: Blocking TSXNextEvent could deadlock Wine. * [win32/process.c] [windows/message.c] Silly stubs for MsgWaitForMultipleObjects / PostThreadMessage that make some programs run better. * [windows/winproc.c] WINPROC_MapMsg32Ato16/16To32A: added WM_NOTIFY. * [win32/kernel32.c] Added 16->32 thunking and improved 32->16 thunking functions. * [tools/build.c] Added new variant of CallFrom16 stub for use with Win95 thunks. * [if1632/kernel.spec] [if1632/builtin.c] [win32/kernel32.c] Added a few undocumented KERNEL functions. * [loader/ne/module.c] [loader/ne/segment.c] Call DllEntryPoint for 16-bit DLLs with subsystem >= 4.0. * [win32/kernel32.spec] [win32/wow32.spec] [win32/ordinals.c] Use names from the Oct 94 beta release for undoc. functions. Wed May 13 14:18:26 1998 Matthew Becker <mbecker@glasscity.net> * [misc/registry.c] Code cleanup. * [misc/cpu.c] Commented out the registry puts temporarily. * [programs/regtest/*] New registry testing program. Tue May 12 22:54:03 1998 Michael Mess <michael@kawo2.rwth-aachen.de> * [multimedia/audio.c] ioctl's do not commute in /dev/dsp initialization. Tue May 12 20:11:42 1998 Karl Garrison <karlos@eznet.net> * [win32/console.c] Implemented SetConsoleTextAttribute, FillConsoleOutputCharacter. Improved cursor positioning. This allows for text colors in an xterm, rxvt, or console. Tue May 12 17:57:52 1998 Petter Reinholdtsen <pere@td.org.uit.no> * [Makefile.in] Create prefix/{bin|lib} directories if missing during install. Sun May 10 19:37:51 1998 Jan Willamowius <jan@janhh.shnet.org> * [multimedia/mmio.c] Have mmioSetBuffer return success (0), so Corel Draw 4 keeps working. (IO is still unbuffered) Wed May 6 16:57:55 1998 James Juran <jrj120@psu.edu> * [Makefile.in] [Make.rules.in] Changed "make clean" to remove `textedit` backup files (*%) * [controls/menu.c][graphics/x11drv/xfont.c][include/libres.h] [loader/main.c][loader/ne/module.c][scheduler/synchro.c] [win32/time.c][windows/winpos.c][include/windows.h] Fixed miscellaneous compilation warnings. * [misc/main.c][miscemu/main.c][include/main.h] Moved prototypes to new include file main.h, various cleanups. Tue May 5 21:05:06 1998 Morten Welinder <terra@diku.dk> * [misc/winsock.c] Don't refer to __FreeBSD__ when HAVE_STRERROR is meant. * [misc/debugstr.c] For debug_dumpstrSend, send strings to stderr. Tue May 5 21:47:40 1998 Huw D M Davies <h.davies1@physics.oxford.ac.uk> * [objects/region.c] Fix for REGION_RegionOp() if newReg is one of the source regions. Tue May 5 18:27:32 1998 Jim Peterson <jspeter@roanoke.infi.net> * [misc/main.c] Add '-h/-help' option and print WINE_RELEASE_INFO with usage message. * [misc/spy.c] Realign trace messages. Tue May 5 15:46:47 1998 Donnie V. Savage <dsavage@cisco.com> * [graphics/ddraw.c] Fixed compile warnings * [misc/winsock.c] Warnings should not be errors. Tue May 5 13:40:42 1998 Jim Peterson <jspeter@roanoke.infi.net> * [*/*] Remove many warnings through explicit casts, added #include's, and corrected printf formats. Tue May 5 05:18:12 1998 Insomnia (Stea Greene) <insomnia@core.binghamton.edu> * [graphics/ddraw.c] Kept unchanged portion of old palette when changing only a few palette entries. Really should only deallocate the changed cells. This make StarCraft work almost perfectly (sound overflows still cause static). Mon May 4 15:04:57 1998 Alexander V. Lukyanov <lav@long.yar.ru> * [misc/lstr.c] FormatMessage: terminate string on %0, undo linefeed strip.
This commit is contained in:
parent
46ea8b3f73
commit
dadf78ffa9
17
ANNOUNCE
17
ANNOUNCE
|
@ -1,14 +1,13 @@
|
|||
This is release 980503 of Wine, the MS Windows emulator. This is still a
|
||||
This is release 980517 of Wine, the MS Windows emulator. This is still a
|
||||
developer's only release. There are many bugs and many unimplemented API
|
||||
features. Most applications still do not work correctly.
|
||||
|
||||
Patches should be submitted to "julliard@lrc.epfl.ch". Please don't
|
||||
forget to include a ChangeLog entry.
|
||||
|
||||
WHAT'S NEW with Wine-980503: (see ChangeLog for details)
|
||||
- Module loading restructuration.
|
||||
- Some rotated text support.
|
||||
- Documentation for many more functions.
|
||||
WHAT'S NEW with Wine-980517: (see ChangeLog for details)
|
||||
- Lots of common controls improvements.
|
||||
- Better thunking support.
|
||||
- Lots of bug fixes.
|
||||
|
||||
See the README file in the distribution for installation instructions.
|
||||
|
@ -17,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
|
||||
from the following locations:
|
||||
|
||||
ftp://sunsite.unc.edu/pub/Linux/ALPHA/wine/development/Wine-980503.tar.gz
|
||||
ftp://tsx-11.mit.edu/pub/linux/ALPHA/Wine/development/Wine-980503.tar.gz
|
||||
ftp://ftp.infomagic.com/pub/mirrors/linux/sunsite/ALPHA/wine/development/Wine-980503.tar.gz
|
||||
ftp://ftp.progsoc.uts.edu.au/pub/Wine/development/Wine-980503.tar.gz
|
||||
ftp://sunsite.unc.edu/pub/Linux/ALPHA/wine/development/Wine-980517.tar.gz
|
||||
ftp://tsx-11.mit.edu/pub/linux/ALPHA/Wine/development/Wine-980517.tar.gz
|
||||
ftp://ftp.infomagic.com/pub/mirrors/linux/sunsite/ALPHA/wine/development/Wine-980517.tar.gz
|
||||
ftp://ftp.progsoc.uts.edu.au/pub/Wine/development/Wine-980517.tar.gz
|
||||
|
||||
It should also be available from any site that mirrors tsx-11 or sunsite.
|
||||
|
||||
|
|
249
ChangeLog
249
ChangeLog
|
@ -1,3 +1,252 @@
|
|||
----------------------------------------------------------------------
|
||||
Sun May 17 16:23:56 1998 Uwe Bonnes <bon@elektron.ikp.physik.tu-darmstadt.de>
|
||||
|
||||
* [file/profile.c]
|
||||
Fix the return value of PROFILE_GetSection
|
||||
|
||||
* [misc/crtdll.c]
|
||||
Do _getdrive, fix _chdrive.
|
||||
|
||||
* [misc/commdlg.c]
|
||||
First cut at ChooseColor[WA].
|
||||
|
||||
* [misc/network.c]
|
||||
Do something sensible for WNetGetDirectoryType16.
|
||||
|
||||
Sun May 17 10:21:35 1998 Andreas Mohr <100.30936@germany.net>
|
||||
|
||||
* [controls/menu.c]
|
||||
Fixed disabled sub menus with MF_BYPOSITION that were not disabled.
|
||||
|
||||
* [misc/crtdll.c] [relay32/crtdll.spec] [include/winerror.h]
|
||||
Implemented fscanf, fsetpos, _access, _fpreset (thanks to Uwe Bonnes),
|
||||
and _ltoa.
|
||||
|
||||
* [loader/task.c]
|
||||
MakeProcInstance: must use CURRENT_DS if hInst == NULL.
|
||||
|
||||
* [misc/shell.c]
|
||||
SHELL_GetResourceTable, InternalExtractIcon: fixed broken .ICO handling
|
||||
|
||||
* [windows/winpos.c]
|
||||
DeferWindowPos: removed "same parent" requirement.
|
||||
Which doc states that this is required ?
|
||||
|
||||
Sat May 16 20:08:11 1998 Alexandre Julliard <julliard@lrc.epfl.ch>
|
||||
|
||||
* [loader/module.c] [loader/ne/module.c]
|
||||
More NE module cleanups.
|
||||
|
||||
* [loader/task.c]
|
||||
Fixed SwitchStackBack().
|
||||
|
||||
Fri May 15 10:04:27 1998 Marcus Meissner <marcus@jet.franken.de>
|
||||
|
||||
* [configure.in][inlcude/acconfig.h]
|
||||
Fixed broken OSS check, added check for working sigaltstack,
|
||||
fixed broken statfs checks on some linux systems.
|
||||
|
||||
* [files/directory.c][loader/pe_image.c][relay32/builtin.c]
|
||||
[loader/module.c]
|
||||
Added handling of win32 module pathnames.
|
||||
|
||||
* [relay32/wnaspi32.spec]
|
||||
New file.
|
||||
|
||||
* [misc/lzexpand.c]
|
||||
LZCopy auto-decompresses LZ compressed files, even if they are not
|
||||
specially flagged. Fixes some InstallShield problems.
|
||||
|
||||
* [misc/registry.c]
|
||||
Some fixes for RegQueryInfoKey (reference program monkey.exe
|
||||
from Win32 SDK works now better). Probably still has faults.
|
||||
|
||||
Fri May 15 08:58:58 1998 Martin Boehme <boehme@informatik.mu-luebeck.de>
|
||||
|
||||
* [graphics/mapping.c] [include/dc.h] [include/gdi.h] [objects/dc.c]
|
||||
Reworked the way world transformations and mapping modes are handled
|
||||
so that both of these transformations can be computed in a single
|
||||
step.
|
||||
|
||||
* [graphics/painting.c] [graphics/path.c] [include/path.h]
|
||||
More GDI path support.
|
||||
|
||||
* [graphics/x11drv/graphics.c]
|
||||
Fixed the return value of GRAPH_DrawArc for the zero height /
|
||||
zero width case to reflect Windows' behaviour.
|
||||
|
||||
* [include/windows.h] [relay32/gdi32.spec] [objects/dc.c]
|
||||
Implemented ModifyWorldTransform and CombineTransform.
|
||||
|
||||
Tue May 14 18:03:46 1998 Eric Kohl <ekohl@abo.rhein-zeitung.de>
|
||||
|
||||
* [controls/commctrl.c][relay32/comctl32.spec]
|
||||
[controls/*.c][include/*.h]
|
||||
Implemented InitCommonControlsEx (dll version 4.72 compatible).
|
||||
InitCommonControls calls ImageCommonControlsEx.
|
||||
Registering code of the common controls had to be changed
|
||||
(see XXXX_Register functions).
|
||||
|
||||
* [controls/status.c][include/commctrl.h][include/status.h]
|
||||
Implemented most new features and fixed the look and feel.
|
||||
|
||||
* [contols/commctrl.c][include/commctrl.h][relay32/comctl32.spec]
|
||||
Implemented MenuHelp (incomplete).
|
||||
|
||||
* [controls/status.c][controls/progress.c]
|
||||
Changed allocation strategy for control specific memory.
|
||||
|
||||
* [controls/header.c][include/header.h][include/commctrl.h]
|
||||
First implementation of header control.
|
||||
|
||||
* [windows/defwnd.c][windows/syscolors.c]
|
||||
Fixed default control colors for Win95 look.
|
||||
|
||||
* [windows/nonclient.c]
|
||||
Fixed off by one error for Win95 look. Top border of child windows
|
||||
should be visible.
|
||||
|
||||
* [misc/imagelist.h]
|
||||
Improved documentation and fixed some bugs.
|
||||
|
||||
Thu May 14 15:42:21 1998 Robert Wilhelm <robert@physiol.med.tu-muenchen.de>
|
||||
|
||||
* [relay32/crtdll.spec]
|
||||
Added hypot,j0,j1,jn and ceil.
|
||||
|
||||
Wed May 13 19:10:10 1998 Pascal Cuoq <pcuoq@ens-lyon.fr>
|
||||
|
||||
* [controls/listbox.c]
|
||||
Item height is now exactly font height.
|
||||
Wine listboxes now behave like Windows' when they are
|
||||
created without WS_VSCROLL but the program subsequently
|
||||
calls ShowScrollBar or SetScrollInfo.
|
||||
|
||||
Wed May 13 18:33:01 1998 Ulrich Weigand <weigand@informatik.uni-erlangen.de>
|
||||
|
||||
* [relay32/relay386.c]
|
||||
Restore ES also in the non-debug case.
|
||||
|
||||
* [windows/event.c]
|
||||
Bugfix: Blocking TSXNextEvent could deadlock Wine.
|
||||
|
||||
* [win32/process.c] [windows/message.c]
|
||||
Silly stubs for MsgWaitForMultipleObjects / PostThreadMessage
|
||||
that make some programs run better.
|
||||
|
||||
* [windows/winproc.c]
|
||||
WINPROC_MapMsg32Ato16/16To32A: added WM_NOTIFY.
|
||||
|
||||
* [win32/kernel32.c]
|
||||
Added 16->32 thunking and improved 32->16 thunking functions.
|
||||
|
||||
* [tools/build.c]
|
||||
Added new variant of CallFrom16 stub for use with Win95 thunks.
|
||||
|
||||
* [if1632/kernel.spec] [if1632/builtin.c] [win32/kernel32.c]
|
||||
Added a few undocumented KERNEL functions.
|
||||
|
||||
* [loader/ne/module.c] [loader/ne/segment.c]
|
||||
Call DllEntryPoint for 16-bit DLLs with subsystem >= 4.0.
|
||||
|
||||
* [win32/kernel32.spec] [win32/wow32.spec] [win32/ordinals.c]
|
||||
Use names from the Oct 94 beta release for undoc. functions.
|
||||
|
||||
Wed May 13 14:18:26 1998 Matthew Becker <mbecker@glasscity.net>
|
||||
|
||||
* [misc/registry.c]
|
||||
Code cleanup.
|
||||
|
||||
* [misc/cpu.c]
|
||||
Commented out the registry puts temporarily.
|
||||
|
||||
* [programs/regtest/*]
|
||||
New registry testing program.
|
||||
|
||||
Tue May 12 22:54:03 1998 Michael Mess <michael@kawo2.rwth-aachen.de>
|
||||
|
||||
* [multimedia/audio.c]
|
||||
ioctl's do not commute in /dev/dsp initialization.
|
||||
|
||||
Tue May 12 20:11:42 1998 Karl Garrison <karlos@eznet.net>
|
||||
|
||||
* [win32/console.c]
|
||||
Implemented SetConsoleTextAttribute, FillConsoleOutputCharacter.
|
||||
Improved cursor positioning.
|
||||
This allows for text colors in an xterm, rxvt, or console.
|
||||
|
||||
Tue May 12 17:57:52 1998 Petter Reinholdtsen <pere@td.org.uit.no>
|
||||
|
||||
* [Makefile.in]
|
||||
Create prefix/{bin|lib} directories if missing during install.
|
||||
|
||||
Sun May 10 19:37:51 1998 Jan Willamowius <jan@janhh.shnet.org>
|
||||
|
||||
* [multimedia/mmio.c]
|
||||
Have mmioSetBuffer return success (0), so Corel Draw 4
|
||||
keeps working. (IO is still unbuffered)
|
||||
|
||||
Wed May 6 16:57:55 1998 James Juran <jrj120@psu.edu>
|
||||
|
||||
* [Makefile.in] [Make.rules.in]
|
||||
Changed "make clean" to remove `textedit` backup files (*%)
|
||||
|
||||
* [controls/menu.c][graphics/x11drv/xfont.c][include/libres.h]
|
||||
[loader/main.c][loader/ne/module.c][scheduler/synchro.c]
|
||||
[win32/time.c][windows/winpos.c][include/windows.h]
|
||||
Fixed miscellaneous compilation warnings.
|
||||
|
||||
* [misc/main.c][miscemu/main.c][include/main.h]
|
||||
Moved prototypes to new include file main.h, various cleanups.
|
||||
|
||||
Tue May 5 21:05:06 1998 Morten Welinder <terra@diku.dk>
|
||||
|
||||
* [misc/winsock.c]
|
||||
Don't refer to __FreeBSD__ when HAVE_STRERROR is meant.
|
||||
|
||||
* [misc/debugstr.c]
|
||||
For debug_dumpstrSend, send strings to stderr.
|
||||
|
||||
Tue May 5 21:47:40 1998 Huw D M Davies <h.davies1@physics.oxford.ac.uk>
|
||||
|
||||
* [objects/region.c]
|
||||
Fix for REGION_RegionOp() if newReg is one of the source regions.
|
||||
|
||||
Tue May 5 18:27:32 1998 Jim Peterson <jspeter@roanoke.infi.net>
|
||||
|
||||
* [misc/main.c]
|
||||
Add '-h/-help' option and print WINE_RELEASE_INFO with usage message.
|
||||
|
||||
* [misc/spy.c]
|
||||
Realign trace messages.
|
||||
|
||||
Tue May 5 15:46:47 1998 Donnie V. Savage <dsavage@cisco.com>
|
||||
|
||||
* [graphics/ddraw.c]
|
||||
Fixed compile warnings
|
||||
|
||||
* [misc/winsock.c]
|
||||
Warnings should not be errors.
|
||||
|
||||
Tue May 5 13:40:42 1998 Jim Peterson <jspeter@roanoke.infi.net>
|
||||
|
||||
* [*/*]
|
||||
Remove many warnings through explicit casts, added #include's,
|
||||
and corrected printf formats.
|
||||
|
||||
Tue May 5 05:18:12 1998 Insomnia (Stea Greene) <insomnia@core.binghamton.edu>
|
||||
|
||||
* [graphics/ddraw.c]
|
||||
Kept unchanged portion of old palette when changing only a few
|
||||
palette entries. Really should only deallocate the changed cells.
|
||||
This make StarCraft work almost perfectly (sound overflows still
|
||||
cause static).
|
||||
|
||||
Mon May 4 15:04:57 1998 Alexander V. Lukyanov <lav@long.yar.ru>
|
||||
|
||||
* [misc/lstr.c]
|
||||
FormatMessage: terminate string on %0, undo linefeed strip.
|
||||
|
||||
----------------------------------------------------------------------
|
||||
Thu Apr 30 16:28:12 1998 James Juran <jrj120@psu.edu>
|
||||
|
||||
|
|
|
@ -132,7 +132,7 @@ depend:: $(MAKEDEP) $(C_SRCS) $(RC_SRCS) $(EXTRA_SRCS)
|
|||
$(MAKEDEP) $(DIVINCL) -C$(SRCDIR) $(C_SRCS) $(RC_SRCS) $(EXTRA_SRCS)
|
||||
|
||||
clean::
|
||||
$(RM) *.o \#*\# *~ *.bak *.orig *.rej *.flc *-tmp.c y.tab.c y.tab.h lex.yy.c core $(GEN_ASM_SRCS) $(RC_SRCS:.rc=.c) $(RC_SRCS:.rc=.h) $(PROGRAMS)
|
||||
$(RM) *.o \#*\# *~ *% *.bak *.orig *.rej *.flc *-tmp.c y.tab.c y.tab.h lex.yy.c core $(GEN_ASM_SRCS) $(RC_SRCS:.rc=.c) $(RC_SRCS:.rc=.h) $(PROGRAMS)
|
||||
|
||||
dummy:
|
||||
|
||||
|
|
|
@ -122,6 +122,8 @@ libwine.so.1.0: $(LIBOBJS)
|
|||
$(CC) -shared -Wl,-soname,libwine.so -o$@ $(LIBOBJS) $(LDOPTIONS) $(X_LIBS) $(XPM_LIB) $(XLIB) $(LIBS)
|
||||
|
||||
install_emu: install_lib
|
||||
-mkdirhier $(bindir)
|
||||
-mkdirhier $(libdir)
|
||||
$(INSTALL_PROGRAM) wine $(bindir)/wine
|
||||
$(INSTALL_DATA) wine.sym $(libdir)/wine.sym
|
||||
|
||||
|
@ -157,7 +159,7 @@ htmlpages:
|
|||
|
||||
clean::
|
||||
for i in $(ALLSUBDIRS); do (cd $$i; $(MAKE) clean) || exit 1; done
|
||||
for i in include; do (cd $$i; $(RM) *.o \#*\# *~ *.bak *.orig *.rej *.flc); done
|
||||
for i in include; do (cd $$i; $(RM) *.o \#*\# *~ *% *.bak *.orig *.rej *.flc); done
|
||||
$(RM) wine wine.sym libwine.a libwine.so.1.0 TAGS
|
||||
|
||||
distclean: clean
|
||||
|
|
|
@ -2135,30 +2135,33 @@ EOF
|
|||
if { (eval echo configure:2136: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
|
||||
rm -rf conftest*
|
||||
ac_cv_c_opensoundsystem="yes"
|
||||
cat >> confdefs.h <<\EOF
|
||||
#define HAVE_OSS 1
|
||||
EOF
|
||||
|
||||
else
|
||||
echo "configure: failed program was:" >&5
|
||||
cat conftest.$ac_ext >&5
|
||||
rm -rf conftest*
|
||||
ac_cv_c_opensoundsystem="no"
|
||||
|
||||
fi
|
||||
rm -f conftest*
|
||||
fi
|
||||
|
||||
echo "$ac_t""$ac_cv_c_opensoundsystem" 1>&6
|
||||
|
||||
if test "$ac_cv_c_opensoundsystem" = "yes"
|
||||
then
|
||||
cat >> confdefs.h <<\EOF
|
||||
#define HAVE_OSS 1
|
||||
EOF
|
||||
|
||||
fi
|
||||
|
||||
|
||||
echo $ac_n "checking "for union semun"""... $ac_c" 1>&6
|
||||
echo "configure:2157: checking "for union semun"" >&5
|
||||
echo "configure:2160: checking "for union semun"" >&5
|
||||
if eval "test \"`echo '$''{'ac_cv_c_union_semun'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 2162 "configure"
|
||||
#line 2165 "configure"
|
||||
#include "confdefs.h"
|
||||
#include <sys/types.h>
|
||||
#include <sys/sem.h>
|
||||
|
@ -2166,7 +2169,7 @@ int main() {
|
|||
union semun foo
|
||||
; return 0; }
|
||||
EOF
|
||||
if { (eval echo configure:2170: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
|
||||
if { (eval echo configure:2173: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
|
||||
rm -rf conftest*
|
||||
ac_cv_c_union_semun="yes"
|
||||
else
|
||||
|
@ -2194,7 +2197,7 @@ if test "x${GCC}" = "xyes"
|
|||
then
|
||||
CFLAGS="$CFLAGS -Wall"
|
||||
echo $ac_n "checking "for gcc strength-reduce bug"""... $ac_c" 1>&6
|
||||
echo "configure:2198: checking "for gcc strength-reduce bug"" >&5
|
||||
echo "configure:2201: checking "for gcc strength-reduce bug"" >&5
|
||||
if eval "test \"`echo '$''{'ac_cv_c_gcc_strength_bug'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
|
@ -2202,7 +2205,7 @@ else
|
|||
ac_cv_c_gcc_strength_bug="yes"
|
||||
else
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 2206 "configure"
|
||||
#line 2209 "configure"
|
||||
#include "confdefs.h"
|
||||
|
||||
int main(void) {
|
||||
|
@ -2213,7 +2216,7 @@ int main(void) {
|
|||
exit( Array[1] != -2 );
|
||||
}
|
||||
EOF
|
||||
if { (eval echo configure:2217: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
|
||||
if { (eval echo configure:2220: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
|
||||
then
|
||||
ac_cv_c_gcc_strength_bug="no"
|
||||
else
|
||||
|
@ -2236,7 +2239,7 @@ fi
|
|||
|
||||
|
||||
echo $ac_n "checking "whether external symbols need an underscore prefix"""... $ac_c" 1>&6
|
||||
echo "configure:2240: checking "whether external symbols need an underscore prefix"" >&5
|
||||
echo "configure:2243: checking "whether external symbols need an underscore prefix"" >&5
|
||||
if eval "test \"`echo '$''{'ac_cv_c_extern_prefix'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
|
@ -2248,14 +2251,14 @@ _ac_test:
|
|||
.long 0
|
||||
EOF
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 2252 "configure"
|
||||
#line 2255 "configure"
|
||||
#include "confdefs.h"
|
||||
extern int ac_test;
|
||||
int main() {
|
||||
if (ac_test) return 1
|
||||
; return 0; }
|
||||
EOF
|
||||
if { (eval echo configure:2259: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
|
||||
if { (eval echo configure:2262: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
|
||||
rm -rf conftest*
|
||||
ac_cv_c_extern_prefix="yes"
|
||||
else
|
||||
|
@ -2279,7 +2282,7 @@ fi
|
|||
|
||||
|
||||
echo $ac_n "checking "whether assembler accepts .string"""... $ac_c" 1>&6
|
||||
echo "configure:2283: checking "whether assembler accepts .string"" >&5
|
||||
echo "configure:2286: checking "whether assembler accepts .string"" >&5
|
||||
if eval "test \"`echo '$''{'ac_cv_c_asm_string'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
|
@ -2289,14 +2292,14 @@ cat > conftest_asm.s <<EOF
|
|||
.string "test"
|
||||
EOF
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 2293 "configure"
|
||||
#line 2296 "configure"
|
||||
#include "confdefs.h"
|
||||
|
||||
int main() {
|
||||
|
||||
; return 0; }
|
||||
EOF
|
||||
if { (eval echo configure:2300: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
|
||||
if { (eval echo configure:2303: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
|
||||
rm -rf conftest*
|
||||
ac_cv_c_asm_string="yes"
|
||||
else
|
||||
|
@ -2323,21 +2326,21 @@ DLLFLAGS=""
|
|||
if test "$LIB_TARGET" = "libwine.so.1.0"
|
||||
then
|
||||
echo $ac_n "checking "whether we can build a dll"""... $ac_c" 1>&6
|
||||
echo "configure:2327: checking "whether we can build a dll"" >&5
|
||||
echo "configure:2330: checking "whether we can build a dll"" >&5
|
||||
if eval "test \"`echo '$''{'ac_cv_c_dll'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
saved_cflags=$CFLAGS
|
||||
CFLAGS="$CFLAGS -fPIC -shared -Wl,-soname,conftest.so.1.0"
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 2334 "configure"
|
||||
#line 2337 "configure"
|
||||
#include "confdefs.h"
|
||||
|
||||
int main() {
|
||||
return 1
|
||||
; return 0; }
|
||||
EOF
|
||||
if { (eval echo configure:2341: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
|
||||
if { (eval echo configure:2344: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
|
||||
rm -rf conftest*
|
||||
ac_cv_c_dll="yes"
|
||||
else
|
||||
|
@ -2363,7 +2366,7 @@ fi
|
|||
|
||||
|
||||
echo $ac_n "checking "for reentrant X libraries"""... $ac_c" 1>&6
|
||||
echo "configure:2367: checking "for reentrant X libraries"" >&5
|
||||
echo "configure:2370: 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
|
||||
|
@ -2407,12 +2410,12 @@ fi
|
|||
for ac_func in clone getpagesize memmove sigaltstack strerror tcgetattr timegm usleep wait4 waitpid
|
||||
do
|
||||
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
|
||||
echo "configure:2411: checking for $ac_func" >&5
|
||||
echo "configure:2414: checking for $ac_func" >&5
|
||||
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 2416 "configure"
|
||||
#line 2419 "configure"
|
||||
#include "confdefs.h"
|
||||
/* System header to define __stub macros and hopefully few prototypes,
|
||||
which can conflict with char $ac_func(); below. */
|
||||
|
@ -2435,7 +2438,7 @@ $ac_func();
|
|||
|
||||
; return 0; }
|
||||
EOF
|
||||
if { (eval echo configure:2439: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
|
||||
if { (eval echo configure:2442: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
|
||||
rm -rf conftest*
|
||||
eval "ac_cv_func_$ac_func=yes"
|
||||
else
|
||||
|
@ -2463,17 +2466,17 @@ for ac_hdr in wctype.h sys/syscall.h syscall.h sys/param.h sys/vfs.h sys/mount.h
|
|||
do
|
||||
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
|
||||
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
|
||||
echo "configure:2467: checking for $ac_hdr" >&5
|
||||
echo "configure:2470: checking for $ac_hdr" >&5
|
||||
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 2472 "configure"
|
||||
#line 2475 "configure"
|
||||
#include "confdefs.h"
|
||||
#include <$ac_hdr>
|
||||
EOF
|
||||
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
|
||||
{ (eval echo configure:2477: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
|
||||
{ (eval echo configure:2480: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
|
||||
ac_err=`grep -v '^ *+' conftest.out`
|
||||
if test -z "$ac_err"; then
|
||||
rm -rf conftest*
|
||||
|
@ -2500,12 +2503,12 @@ fi
|
|||
done
|
||||
|
||||
echo $ac_n "checking whether stat file-mode macros are broken""... $ac_c" 1>&6
|
||||
echo "configure:2504: checking whether stat file-mode macros are broken" >&5
|
||||
echo "configure:2507: checking whether stat file-mode macros are broken" >&5
|
||||
if eval "test \"`echo '$''{'ac_cv_header_stat_broken'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 2509 "configure"
|
||||
#line 2512 "configure"
|
||||
#include "confdefs.h"
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
|
@ -2556,12 +2559,12 @@ EOF
|
|||
fi
|
||||
|
||||
echo $ac_n "checking for working const""... $ac_c" 1>&6
|
||||
echo "configure:2560: checking for working const" >&5
|
||||
echo "configure:2563: checking for working const" >&5
|
||||
if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 2565 "configure"
|
||||
#line 2568 "configure"
|
||||
#include "confdefs.h"
|
||||
|
||||
int main() {
|
||||
|
@ -2610,7 +2613,7 @@ ccp = (char const *const *) p;
|
|||
|
||||
; return 0; }
|
||||
EOF
|
||||
if { (eval echo configure:2614: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
|
||||
if { (eval echo configure:2617: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
|
||||
rm -rf conftest*
|
||||
ac_cv_c_const=yes
|
||||
else
|
||||
|
@ -2631,12 +2634,12 @@ EOF
|
|||
fi
|
||||
|
||||
echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
|
||||
echo "configure:2635: checking for ANSI C header files" >&5
|
||||
echo "configure:2638: checking for ANSI C header files" >&5
|
||||
if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 2640 "configure"
|
||||
#line 2643 "configure"
|
||||
#include "confdefs.h"
|
||||
#include <stdlib.h>
|
||||
#include <stdarg.h>
|
||||
|
@ -2644,7 +2647,7 @@ else
|
|||
#include <float.h>
|
||||
EOF
|
||||
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
|
||||
{ (eval echo configure:2648: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
|
||||
{ (eval echo configure:2651: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
|
||||
ac_err=`grep -v '^ *+' conftest.out`
|
||||
if test -z "$ac_err"; then
|
||||
rm -rf conftest*
|
||||
|
@ -2661,7 +2664,7 @@ rm -f conftest*
|
|||
if test $ac_cv_header_stdc = yes; then
|
||||
# SunOS 4.x string.h does not declare mem*, contrary to ANSI.
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 2665 "configure"
|
||||
#line 2668 "configure"
|
||||
#include "confdefs.h"
|
||||
#include <string.h>
|
||||
EOF
|
||||
|
@ -2679,7 +2682,7 @@ fi
|
|||
if test $ac_cv_header_stdc = yes; then
|
||||
# ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 2683 "configure"
|
||||
#line 2686 "configure"
|
||||
#include "confdefs.h"
|
||||
#include <stdlib.h>
|
||||
EOF
|
||||
|
@ -2700,7 +2703,7 @@ if test "$cross_compiling" = yes; then
|
|||
:
|
||||
else
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 2704 "configure"
|
||||
#line 2707 "configure"
|
||||
#include "confdefs.h"
|
||||
#include <ctype.h>
|
||||
#define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
|
||||
|
@ -2711,7 +2714,7 @@ if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2);
|
|||
exit (0); }
|
||||
|
||||
EOF
|
||||
if { (eval echo configure:2715: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
|
||||
if { (eval echo configure:2718: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
|
||||
then
|
||||
:
|
||||
else
|
||||
|
@ -2735,12 +2738,12 @@ EOF
|
|||
fi
|
||||
|
||||
echo $ac_n "checking for size_t""... $ac_c" 1>&6
|
||||
echo "configure:2739: checking for size_t" >&5
|
||||
echo "configure:2742: checking for size_t" >&5
|
||||
if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 2744 "configure"
|
||||
#line 2747 "configure"
|
||||
#include "confdefs.h"
|
||||
#include <sys/types.h>
|
||||
#if STDC_HEADERS
|
||||
|
@ -2768,7 +2771,7 @@ EOF
|
|||
fi
|
||||
|
||||
echo $ac_n "checking size of long long""... $ac_c" 1>&6
|
||||
echo "configure:2772: checking size of long long" >&5
|
||||
echo "configure:2775: checking size of long long" >&5
|
||||
if eval "test \"`echo '$''{'ac_cv_sizeof_long_long'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
|
@ -2776,7 +2779,7 @@ else
|
|||
ac_cv_sizeof_long_long=0
|
||||
else
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 2780 "configure"
|
||||
#line 2783 "configure"
|
||||
#include "confdefs.h"
|
||||
#include <stdio.h>
|
||||
main()
|
||||
|
@ -2787,7 +2790,7 @@ main()
|
|||
exit(0);
|
||||
}
|
||||
EOF
|
||||
if { (eval echo configure:2791: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
|
||||
if { (eval echo configure:2794: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
|
||||
then
|
||||
ac_cv_sizeof_long_long=`cat conftestval`
|
||||
else
|
||||
|
@ -2807,8 +2810,213 @@ EOF
|
|||
|
||||
|
||||
|
||||
|
||||
if test "$ac_cv_header_sys_vfs_h" = "yes"
|
||||
then
|
||||
echo $ac_n "checking "whether sys/vfs.h defines statfs"""... $ac_c" 1>&6
|
||||
echo "configure:2818: checking "whether sys/vfs.h defines statfs"" >&5
|
||||
if eval "test \"`echo '$''{'wine_cv_sys_vfs_has_statfs'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 2823 "configure"
|
||||
#include "confdefs.h"
|
||||
|
||||
#include <sys/types.h>
|
||||
#ifdef HAVE_SYS_PARAM_H
|
||||
# include <sys/param.h>
|
||||
#endif
|
||||
#include <sys/vfs.h>
|
||||
|
||||
int main() {
|
||||
|
||||
struct statfs stfs;
|
||||
|
||||
memset(&stfs,0,sizeof(stfs));
|
||||
|
||||
; return 0; }
|
||||
EOF
|
||||
if { (eval echo configure:2840: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
|
||||
rm -rf conftest*
|
||||
wine_cv_sys_vfs_has_statfs=yes
|
||||
else
|
||||
echo "configure: failed program was:" >&5
|
||||
cat conftest.$ac_ext >&5
|
||||
rm -rf conftest*
|
||||
wine_cv_sys_vfs_has_statfs=no
|
||||
|
||||
fi
|
||||
rm -f conftest*
|
||||
|
||||
fi
|
||||
|
||||
echo "$ac_t""$wine_cv_sys_vfs_has_statfs" 1>&6
|
||||
if test "$wine_cv_sys_vfs_has_statfs" = "yes"
|
||||
then
|
||||
cat >> confdefs.h <<\EOF
|
||||
#define STATFS_DEFINED_BY_SYS_VFS 1
|
||||
EOF
|
||||
|
||||
fi
|
||||
fi
|
||||
|
||||
if test "$ac_cv_header_sys_statfs_h" = "yes"
|
||||
then
|
||||
echo $ac_n "checking "whether sys/statfs.h defines statfs"""... $ac_c" 1>&6
|
||||
echo "configure:2867: checking "whether sys/statfs.h defines statfs"" >&5
|
||||
if eval "test \"`echo '$''{'wine_cv_sys_statfs_has_statfs'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 2872 "configure"
|
||||
#include "confdefs.h"
|
||||
|
||||
#include <sys/types.h>
|
||||
#ifdef HAVE_SYS_PARAM_H
|
||||
# include <sys/param.h>
|
||||
#endif
|
||||
#include <sys/statfs.h>
|
||||
|
||||
int main() {
|
||||
|
||||
struct statfs stfs;
|
||||
|
||||
; return 0; }
|
||||
EOF
|
||||
if { (eval echo configure:2887: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
|
||||
rm -rf conftest*
|
||||
wine_cv_sys_statfs_has_statfs=yes
|
||||
else
|
||||
echo "configure: failed program was:" >&5
|
||||
cat conftest.$ac_ext >&5
|
||||
rm -rf conftest*
|
||||
wine_cv_sys_statfs_has_statfs=no
|
||||
|
||||
fi
|
||||
rm -f conftest*
|
||||
|
||||
fi
|
||||
|
||||
echo "$ac_t""$wine_cv_sys_statfs_has_statfs" 1>&6
|
||||
if test "$wine_cv_sys_statfs_has_statfs" = "yes"
|
||||
then
|
||||
cat >> confdefs.h <<\EOF
|
||||
#define STATFS_DEFINED_BY_SYS_STATFS 1
|
||||
EOF
|
||||
|
||||
fi
|
||||
fi
|
||||
|
||||
if test "$ac_cv_header_sys_mount_h" = "yes"
|
||||
then
|
||||
echo $ac_n "checking "whether sys/mount.h defines statfs"""... $ac_c" 1>&6
|
||||
echo "configure:2914: checking "whether sys/mount.h defines statfs"" >&5
|
||||
if eval "test \"`echo '$''{'wine_cv_sys_mount_has_statfs'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 2919 "configure"
|
||||
#include "confdefs.h"
|
||||
|
||||
#include <sys/types.h>
|
||||
#ifdef HAVE_SYS_PARAM_H
|
||||
# include <sys/param.h>
|
||||
#endif
|
||||
#include <sys/mount.h>
|
||||
|
||||
int main() {
|
||||
|
||||
struct statfs stfs;
|
||||
|
||||
; return 0; }
|
||||
EOF
|
||||
if { (eval echo configure:2934: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
|
||||
rm -rf conftest*
|
||||
wine_cv_sys_mount_has_statfs=yes
|
||||
else
|
||||
echo "configure: failed program was:" >&5
|
||||
cat conftest.$ac_ext >&5
|
||||
rm -rf conftest*
|
||||
wine_cv_sys_mount_has_statfs=no
|
||||
|
||||
fi
|
||||
rm -f conftest*
|
||||
|
||||
fi
|
||||
|
||||
echo "$ac_t""$wine_cv_sys_mount_has_statfs" 1>&6
|
||||
if test "$wine_cv_sys_mount_has_statfs" = "yes"
|
||||
then
|
||||
cat >> confdefs.h <<\EOF
|
||||
#define STATFS_DEFINED_BY_SYS_MOUNT 1
|
||||
EOF
|
||||
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
echo $ac_n "checking "for statfs.f_bfree"""... $ac_c" 1>&6
|
||||
echo "configure:2960: checking "for statfs.f_bfree"" >&5
|
||||
if eval "test \"`echo '$''{'wine_cv_statfs_bfree'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
if test "x$statfs_bfree" = "xno"
|
||||
then
|
||||
wine_cv_statfs_bfree=no
|
||||
else
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 2969 "configure"
|
||||
#include "confdefs.h"
|
||||
|
||||
#include <sys/types.h>
|
||||
#ifdef HAVE_SYS_PARAM_H
|
||||
# include <sys/param.h>
|
||||
#endif
|
||||
#ifdef STATFS_DEFINED_BY_SYS_MOUNT
|
||||
# include <sys/mount.h>
|
||||
#else
|
||||
# ifdef STATFS_DEFINED_BY_SYS_VFS
|
||||
# include <sys/vfs.h>
|
||||
# else
|
||||
# ifdef STATFS_DEFINED_BY_SYS_STATFS
|
||||
# include <sys/statfs.h>
|
||||
# endif
|
||||
# endif
|
||||
#endif
|
||||
|
||||
int main() {
|
||||
|
||||
struct statfs stfs;
|
||||
|
||||
stfs.f_bfree++;
|
||||
|
||||
; return 0; }
|
||||
EOF
|
||||
if { (eval echo configure:2996: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
|
||||
rm -rf conftest*
|
||||
wine_cv_statfs_bfree=yes
|
||||
else
|
||||
echo "configure: failed program was:" >&5
|
||||
cat conftest.$ac_ext >&5
|
||||
rm -rf conftest*
|
||||
wine_cv_statfs_bfree=no
|
||||
|
||||
fi
|
||||
rm -f conftest*
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "$ac_t""$wine_cv_statfs_bfree" 1>&6
|
||||
if test "$wine_cv_statfs_bfree" = "yes"
|
||||
then
|
||||
cat >> confdefs.h <<\EOF
|
||||
#define STATFS_HAS_BFREE 1
|
||||
EOF
|
||||
|
||||
fi
|
||||
|
||||
echo $ac_n "checking "for statfs.f_bavail"""... $ac_c" 1>&6
|
||||
echo "configure:2812: checking "for statfs.f_bavail"" >&5
|
||||
echo "configure:3020: checking "for statfs.f_bavail"" >&5
|
||||
if eval "test \"`echo '$''{'wine_cv_statfs_bavail'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
|
@ -2817,21 +3025,23 @@ else
|
|||
wine_cv_statfs_bavail=no
|
||||
else
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 2821 "configure"
|
||||
#line 3029 "configure"
|
||||
#include "confdefs.h"
|
||||
|
||||
#include <sys/types.h>
|
||||
#ifdef HAVE_SYS_PARAM_H
|
||||
# include <sys/param.h>
|
||||
#endif
|
||||
#ifdef HAVE_SYS_STATFS_H
|
||||
# include <sys/statfs.h>
|
||||
#endif
|
||||
#ifdef HAVE_SYS_MOUNT_H
|
||||
#ifdef STATFS_DEFINED_BY_SYS_MOUNT
|
||||
# include <sys/mount.h>
|
||||
#endif
|
||||
#ifdef HAVE_SYS_VFS_H
|
||||
# include <sys/vfs.h>
|
||||
#else
|
||||
# ifdef STATFS_DEFINED_BY_SYS_VFS
|
||||
# include <sys/vfs.h>
|
||||
# else
|
||||
# ifdef STATFS_DEFINED_BY_SYS_STATFS
|
||||
# include <sys/statfs.h>
|
||||
# endif
|
||||
# endif
|
||||
#endif
|
||||
|
||||
int main() {
|
||||
|
@ -2842,7 +3052,7 @@ int main() {
|
|||
|
||||
; return 0; }
|
||||
EOF
|
||||
if { (eval echo configure:2846: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
|
||||
if { (eval echo configure:3056: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
|
||||
rm -rf conftest*
|
||||
wine_cv_statfs_bavail=yes
|
||||
else
|
||||
|
@ -2865,60 +3075,75 @@ EOF
|
|||
|
||||
fi
|
||||
|
||||
echo $ac_n "checking "for statfs.f_bfree"""... $ac_c" 1>&6
|
||||
echo "configure:2870: checking "for statfs.f_bfree"" >&5
|
||||
if eval "test \"`echo '$''{'wine_cv_statfs_bfree'+set}'`\" = set"; then
|
||||
|
||||
echo $ac_n "checking "for working sigaltstack"""... $ac_c" 1>&6
|
||||
echo "configure:3081: checking "for working sigaltstack"" >&5
|
||||
if eval "test \"`echo '$''{'ac_cv_c_working_sigaltstack'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
if test "x$statfs_bfree" = "xno"
|
||||
then
|
||||
wine_cv_statfs_bfree=no
|
||||
else
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 2879 "configure"
|
||||
if test "$cross_compiling" = yes; then
|
||||
ac_cv_c_working_sigaltstack="no"
|
||||
|
||||
else
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 3090 "configure"
|
||||
#include "confdefs.h"
|
||||
|
||||
#include <stdio.h>
|
||||
#include <time.h> /* <sys/time.h> ? bad magic without end */
|
||||
#include <sys/types.h>
|
||||
#include <sys/signal.h>
|
||||
#ifdef HAVE_SYS_PARAM_H
|
||||
# include <sys/param.h>
|
||||
#endif
|
||||
#ifdef HAVE_SYS_STATFS_H
|
||||
# include <sys/statfs.h>
|
||||
#endif
|
||||
#ifdef HAVE_SYS_MOUNT_H
|
||||
# include <sys/mount.h>
|
||||
#endif
|
||||
#ifdef HAVE_SYS_VFS_H
|
||||
# include <sys/vfs.h>
|
||||
#ifdef HAVE_SYSCALL_H
|
||||
# include <syscall.h>
|
||||
#else
|
||||
# ifdef HAVE_SYS_SYSCALL_H
|
||||
# include <sys/syscall.h>
|
||||
# endif
|
||||
#endif
|
||||
|
||||
int main() {
|
||||
unsigned char *xaltstack;
|
||||
|
||||
struct statfs stfs;
|
||||
int
|
||||
main(int argc,char **argv) {
|
||||
struct sigaltstack ss;
|
||||
|
||||
stfs.f_bfree++;
|
||||
xaltstack = malloc(16384);
|
||||
ss.ss_sp = xaltstack;
|
||||
ss.ss_size = 16384;
|
||||
ss.ss_flags = 0;
|
||||
if (sigaltstack(&ss, NULL) < 0) {
|
||||
/* this catches the glibc case */
|
||||
perror("sigaltstack");
|
||||
return (1); /* aka exit(1) aka fail */
|
||||
}
|
||||
/* assume it works. */
|
||||
return 0; /* OK */
|
||||
}
|
||||
|
||||
; return 0; }
|
||||
EOF
|
||||
if { (eval echo configure:2904: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
|
||||
rm -rf conftest*
|
||||
wine_cv_statfs_bfree=yes
|
||||
if { (eval echo configure:3128: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
|
||||
then
|
||||
ac_cv_c_working_sigaltstack="yes"
|
||||
else
|
||||
echo "configure: failed program was:" >&5
|
||||
cat conftest.$ac_ext >&5
|
||||
rm -rf conftest*
|
||||
wine_cv_statfs_bfree=no
|
||||
|
||||
rm -fr conftest*
|
||||
ac_cv_c_working_sigaltstack="no"
|
||||
fi
|
||||
rm -f conftest*
|
||||
fi
|
||||
rm -fr conftest*
|
||||
fi
|
||||
|
||||
echo "$ac_t""$wine_cv_statfs_bfree" 1>&6
|
||||
if test "$wine_cv_statfs_bfree" = "yes"
|
||||
fi
|
||||
|
||||
echo "$ac_t""$ac_cv_c_working_sigaltstack" 1>&6
|
||||
|
||||
if test "$ac_cv_c_working_sigaltstack" = "yes"
|
||||
then
|
||||
cat >> confdefs.h <<\EOF
|
||||
#define STATFS_HAS_BFREE 1
|
||||
cat >> confdefs.h <<\EOF
|
||||
#define HAVE_WORKING_SIGALTSTACK 1
|
||||
EOF
|
||||
|
||||
fi
|
||||
|
@ -3057,6 +3282,7 @@ programs/Makefile
|
|||
programs/clock/Makefile
|
||||
programs/notepad/Makefile
|
||||
programs/progman/Makefile
|
||||
programs/regtest/Makefile
|
||||
programs/view/Makefile
|
||||
programs/winhelp/Makefile
|
||||
programs/winver/Makefile
|
||||
|
@ -3187,6 +3413,7 @@ programs/Makefile
|
|||
programs/clock/Makefile
|
||||
programs/notepad/Makefile
|
||||
programs/progman/Makefile
|
||||
programs/regtest/Makefile
|
||||
programs/view/Makefile
|
||||
programs/winhelp/Makefile
|
||||
programs/winver/Makefile
|
||||
|
|
194
configure.in
194
configure.in
|
@ -75,11 +75,12 @@ AC_CACHE_CHECK("for Open Sound System",
|
|||
#if !defined(SNDCTL_DSP_STEREO)
|
||||
#error No open sound system
|
||||
#endif
|
||||
],
|
||||
ac_cv_c_opensoundsystem="yes"
|
||||
AC_DEFINE(HAVE_OSS),
|
||||
ac_cv_c_opensoundsystem="no"
|
||||
))
|
||||
],ac_cv_c_opensoundsystem="yes",ac_cv_c_opensoundsystem="no"))
|
||||
|
||||
if test "$ac_cv_c_opensoundsystem" = "yes"
|
||||
then
|
||||
AC_DEFINE(HAVE_OSS)
|
||||
fi
|
||||
|
||||
dnl **** Check for union semun ****
|
||||
|
||||
|
@ -220,7 +221,108 @@ AC_C_CONST()
|
|||
AC_TYPE_SIZE_T()
|
||||
AC_CHECK_SIZEOF(long long,0)
|
||||
|
||||
dnl **** Dependent checks ****
|
||||
dnl **** statfs checks ****
|
||||
|
||||
if test "$ac_cv_header_sys_vfs_h" = "yes"
|
||||
then
|
||||
AC_CACHE_CHECK( "whether sys/vfs.h defines statfs",
|
||||
wine_cv_sys_vfs_has_statfs,
|
||||
AC_TRY_COMPILE([
|
||||
#include <sys/types.h>
|
||||
#ifdef HAVE_SYS_PARAM_H
|
||||
# include <sys/param.h>
|
||||
#endif
|
||||
#include <sys/vfs.h>
|
||||
],[
|
||||
struct statfs stfs;
|
||||
|
||||
memset(&stfs,0,sizeof(stfs));
|
||||
],wine_cv_sys_vfs_has_statfs=yes,wine_cv_sys_vfs_has_statfs=no
|
||||
)
|
||||
)
|
||||
if test "$wine_cv_sys_vfs_has_statfs" = "yes"
|
||||
then
|
||||
AC_DEFINE(STATFS_DEFINED_BY_SYS_VFS)
|
||||
fi
|
||||
fi
|
||||
|
||||
if test "$ac_cv_header_sys_statfs_h" = "yes"
|
||||
then
|
||||
AC_CACHE_CHECK( "whether sys/statfs.h defines statfs",
|
||||
wine_cv_sys_statfs_has_statfs,
|
||||
AC_TRY_COMPILE([
|
||||
#include <sys/types.h>
|
||||
#ifdef HAVE_SYS_PARAM_H
|
||||
# include <sys/param.h>
|
||||
#endif
|
||||
#include <sys/statfs.h>
|
||||
],[
|
||||
struct statfs stfs;
|
||||
],wine_cv_sys_statfs_has_statfs=yes,wine_cv_sys_statfs_has_statfs=no
|
||||
)
|
||||
)
|
||||
if test "$wine_cv_sys_statfs_has_statfs" = "yes"
|
||||
then
|
||||
AC_DEFINE(STATFS_DEFINED_BY_SYS_STATFS)
|
||||
fi
|
||||
fi
|
||||
|
||||
if test "$ac_cv_header_sys_mount_h" = "yes"
|
||||
then
|
||||
AC_CACHE_CHECK( "whether sys/mount.h defines statfs",
|
||||
wine_cv_sys_mount_has_statfs,
|
||||
AC_TRY_COMPILE([
|
||||
#include <sys/types.h>
|
||||
#ifdef HAVE_SYS_PARAM_H
|
||||
# include <sys/param.h>
|
||||
#endif
|
||||
#include <sys/mount.h>
|
||||
],[
|
||||
struct statfs stfs;
|
||||
],wine_cv_sys_mount_has_statfs=yes,wine_cv_sys_mount_has_statfs=no
|
||||
)
|
||||
)
|
||||
if test "$wine_cv_sys_mount_has_statfs" = "yes"
|
||||
then
|
||||
AC_DEFINE(STATFS_DEFINED_BY_SYS_MOUNT)
|
||||
fi
|
||||
fi
|
||||
|
||||
dnl **** FIXME: what about mixed cases, where we need two of them? ***
|
||||
|
||||
AC_CACHE_CHECK( "for statfs.f_bfree", wine_cv_statfs_bfree,
|
||||
[ if test "x$statfs_bfree" = "xno"
|
||||
then
|
||||
wine_cv_statfs_bfree=no
|
||||
else
|
||||
AC_TRY_COMPILE([
|
||||
#include <sys/types.h>
|
||||
#ifdef HAVE_SYS_PARAM_H
|
||||
# include <sys/param.h>
|
||||
#endif
|
||||
#ifdef STATFS_DEFINED_BY_SYS_MOUNT
|
||||
# include <sys/mount.h>
|
||||
#else
|
||||
# ifdef STATFS_DEFINED_BY_SYS_VFS
|
||||
# include <sys/vfs.h>
|
||||
# else
|
||||
# ifdef STATFS_DEFINED_BY_SYS_STATFS
|
||||
# include <sys/statfs.h>
|
||||
# endif
|
||||
# endif
|
||||
#endif
|
||||
],[
|
||||
struct statfs stfs;
|
||||
|
||||
stfs.f_bfree++;
|
||||
],wine_cv_statfs_bfree=yes,wine_cv_statfs_bfree=no
|
||||
)
|
||||
fi ] )
|
||||
if test "$wine_cv_statfs_bfree" = "yes"
|
||||
then
|
||||
AC_DEFINE(STATFS_HAS_BFREE)
|
||||
fi
|
||||
|
||||
AC_CACHE_CHECK( "for statfs.f_bavail", wine_cv_statfs_bavail,
|
||||
[ if test "x$statfs_bavail" = "xno"
|
||||
then
|
||||
|
@ -231,14 +333,16 @@ AC_CACHE_CHECK( "for statfs.f_bavail", wine_cv_statfs_bavail,
|
|||
#ifdef HAVE_SYS_PARAM_H
|
||||
# include <sys/param.h>
|
||||
#endif
|
||||
#ifdef HAVE_SYS_STATFS_H
|
||||
# include <sys/statfs.h>
|
||||
#endif
|
||||
#ifdef HAVE_SYS_MOUNT_H
|
||||
#ifdef STATFS_DEFINED_BY_SYS_MOUNT
|
||||
# include <sys/mount.h>
|
||||
#endif
|
||||
#ifdef HAVE_SYS_VFS_H
|
||||
# include <sys/vfs.h>
|
||||
#else
|
||||
# ifdef STATFS_DEFINED_BY_SYS_VFS
|
||||
# include <sys/vfs.h>
|
||||
# else
|
||||
# ifdef STATFS_DEFINED_BY_SYS_STATFS
|
||||
# include <sys/statfs.h>
|
||||
# endif
|
||||
# endif
|
||||
#endif
|
||||
],[
|
||||
struct statfs stfs;
|
||||
|
@ -252,35 +356,54 @@ then
|
|||
AC_DEFINE(STATFS_HAS_BAVAIL)
|
||||
fi
|
||||
|
||||
AC_CACHE_CHECK( "for statfs.f_bfree", wine_cv_statfs_bfree,
|
||||
[ if test "x$statfs_bfree" = "xno"
|
||||
then
|
||||
wine_cv_statfs_bfree=no
|
||||
else
|
||||
AC_TRY_COMPILE([
|
||||
dnl *** check for working sigaltstack
|
||||
dnl glibc 2.0x defines it, but it always fails... so it is useless for us.
|
||||
|
||||
AC_CACHE_CHECK("for working sigaltstack",
|
||||
ac_cv_c_working_sigaltstack,
|
||||
AC_TRY_RUN([
|
||||
#include <stdio.h>
|
||||
#include <time.h> /* <sys/time.h> ? bad magic without end */
|
||||
#include <sys/types.h>
|
||||
#include <sys/signal.h>
|
||||
#ifdef HAVE_SYS_PARAM_H
|
||||
# include <sys/param.h>
|
||||
#endif
|
||||
#ifdef HAVE_SYS_STATFS_H
|
||||
# include <sys/statfs.h>
|
||||
#ifdef HAVE_SYSCALL_H
|
||||
# include <syscall.h>
|
||||
#else
|
||||
# ifdef HAVE_SYS_SYSCALL_H
|
||||
# include <sys/syscall.h>
|
||||
# endif
|
||||
#endif
|
||||
#ifdef HAVE_SYS_MOUNT_H
|
||||
# include <sys/mount.h>
|
||||
#endif
|
||||
#ifdef HAVE_SYS_VFS_H
|
||||
# include <sys/vfs.h>
|
||||
#endif
|
||||
],[
|
||||
struct statfs stfs;
|
||||
|
||||
unsigned char *xaltstack;
|
||||
|
||||
stfs.f_bfree++;
|
||||
],wine_cv_statfs_bfree=yes,wine_cv_statfs_bfree=no
|
||||
)
|
||||
fi ] )
|
||||
if test "$wine_cv_statfs_bfree" = "yes"
|
||||
int
|
||||
main(int argc,char **argv) {
|
||||
struct sigaltstack ss;
|
||||
|
||||
xaltstack = malloc(16384);
|
||||
ss.ss_sp = xaltstack;
|
||||
ss.ss_size = 16384;
|
||||
ss.ss_flags = 0;
|
||||
if (sigaltstack(&ss, NULL) < 0) {
|
||||
/* this catches the glibc case */
|
||||
perror("sigaltstack");
|
||||
return (1); /* aka exit(1) aka fail */
|
||||
}
|
||||
/* assume it works. */
|
||||
return 0; /* OK */
|
||||
}
|
||||
],
|
||||
ac_cv_c_working_sigaltstack="yes",
|
||||
ac_cv_c_working_sigaltstack="no",
|
||||
ac_cv_c_working_sigaltstack="no"
|
||||
))
|
||||
|
||||
if test "$ac_cv_c_working_sigaltstack" = "yes"
|
||||
then
|
||||
AC_DEFINE(STATFS_HAS_BFREE)
|
||||
AC_DEFINE(HAVE_WORKING_SIGALTSTACK)
|
||||
fi
|
||||
|
||||
|
||||
|
@ -317,6 +440,7 @@ programs/Makefile
|
|||
programs/clock/Makefile
|
||||
programs/notepad/Makefile
|
||||
programs/progman/Makefile
|
||||
programs/regtest/Makefile
|
||||
programs/view/Makefile
|
||||
programs/winhelp/Makefile
|
||||
programs/winver/Makefile
|
||||
|
|
|
@ -11,6 +11,7 @@ C_SRCS = \
|
|||
commctrl.c \
|
||||
desktop.c \
|
||||
edit.c \
|
||||
header.c \
|
||||
icontitle.c \
|
||||
listbox.c \
|
||||
menu.c \
|
||||
|
|
|
@ -8,24 +8,11 @@
|
|||
#include "win.h"
|
||||
#include "heap.h"
|
||||
#include "commctrl.h"
|
||||
#include "header.h"
|
||||
#include "progress.h"
|
||||
#include "status.h"
|
||||
#include "updown.h"
|
||||
|
||||
/* Win32 common controls */
|
||||
|
||||
static WNDCLASS32A WIDGETS_CommonControls32[] =
|
||||
{
|
||||
{ CS_GLOBALCLASS | CS_VREDRAW | CS_HREDRAW, StatusWindowProc, 0,
|
||||
sizeof(STATUSWINDOWINFO), 0, 0, 0, 0, 0, STATUSCLASSNAME32A },
|
||||
{ CS_GLOBALCLASS | CS_VREDRAW | CS_HREDRAW, UpDownWindowProc, 0,
|
||||
sizeof(UPDOWN_INFO), 0, 0, 0, 0, 0, UPDOWN_CLASS32A },
|
||||
{ CS_GLOBALCLASS | CS_VREDRAW | CS_HREDRAW, ProgressWindowProc, 0,
|
||||
sizeof(PROGRESS_INFO), 0, 0, 0, 0, 0, PROGRESS_CLASS32A }
|
||||
};
|
||||
|
||||
#define NB_COMMON_CONTROLS32 \
|
||||
(sizeof(WIDGETS_CommonControls32)/sizeof(WIDGETS_CommonControls32[0]))
|
||||
#include "debug.h"
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
|
@ -37,8 +24,6 @@ void WINAPI DrawStatusText32A( HDC32 hdc, LPRECT32 lprc, LPCSTR text,
|
|||
RECT32 r = *lprc;
|
||||
UINT32 border = BDR_SUNKENOUTER;
|
||||
|
||||
DrawEdge32(hdc, &r, BDR_RAISEDINNER, BF_RECT|BF_ADJUST|BF_FLAT);
|
||||
|
||||
if(style==SBT_POPOUT)
|
||||
border = BDR_RAISEDOUTER;
|
||||
else if(style==SBT_NOBORDERS)
|
||||
|
@ -59,7 +44,7 @@ void WINAPI DrawStatusText32A( HDC32 hdc, LPRECT32 lprc, LPCSTR text,
|
|||
}
|
||||
|
||||
/***********************************************************************
|
||||
* DrawStatusText32W (COMCTL32.24)
|
||||
* DrawStatusText32W (COMCTL32.28)
|
||||
*/
|
||||
void WINAPI DrawStatusText32W( HDC32 hdc, LPRECT32 lprc, LPCWSTR text,
|
||||
UINT32 style )
|
||||
|
@ -70,7 +55,7 @@ void WINAPI DrawStatusText32W( HDC32 hdc, LPRECT32 lprc, LPCWSTR text,
|
|||
}
|
||||
|
||||
/***********************************************************************
|
||||
* DrawStatusText16 (COMCTL32.23)
|
||||
* DrawStatusText16 (COMCTL32.27)
|
||||
*/
|
||||
void WINAPI DrawStatusText16( HDC16 hdc, LPRECT16 lprc, LPCSTR text,
|
||||
UINT16 style )
|
||||
|
@ -97,7 +82,7 @@ HWND32 WINAPI CreateStatusWindow32A( INT32 style, LPCSTR text, HWND32 parent,
|
|||
}
|
||||
|
||||
/***********************************************************************
|
||||
* CreateStatusWindow16 (COMCTL32.18)
|
||||
* CreateStatusWindow16 (COMCTL32.21)
|
||||
*/
|
||||
HWND16 WINAPI CreateStatusWindow16( INT16 style, LPCSTR text, HWND16 parent,
|
||||
UINT16 wid )
|
||||
|
@ -109,7 +94,7 @@ HWND16 WINAPI CreateStatusWindow16( INT16 style, LPCSTR text, HWND16 parent,
|
|||
}
|
||||
|
||||
/***********************************************************************
|
||||
* CreateStatusWindow32W (COMCTL32.19)
|
||||
* CreateStatusWindow32W (COMCTL32.22)
|
||||
*/
|
||||
HWND32 WINAPI CreateStatusWindow32W( INT32 style, LPCWSTR text, HWND32 parent,
|
||||
UINT32 wid )
|
||||
|
@ -141,24 +126,165 @@ HWND32 WINAPI CreateUpDownControl( DWORD style, INT32 x, INT32 y,
|
|||
|
||||
|
||||
/***********************************************************************
|
||||
* InitCommonControls (COMCTL32.17)
|
||||
* InitCommonControls [COMCTL32.17]
|
||||
*
|
||||
*
|
||||
*
|
||||
*/
|
||||
void WINAPI InitCommonControls(void)
|
||||
{
|
||||
int i;
|
||||
char name[30];
|
||||
const char *old_name;
|
||||
WNDCLASS32A *class32 = WIDGETS_CommonControls32;
|
||||
|
||||
for (i = 0; i < NB_COMMON_CONTROLS32; i++, class32++)
|
||||
{
|
||||
/* Just to make sure the string is > 0x10000 */
|
||||
old_name = class32->lpszClassName;
|
||||
strcpy( name, (char *)class32->lpszClassName );
|
||||
class32->lpszClassName = name;
|
||||
class32->hCursor = LoadCursor32A( 0, IDC_ARROW32A );
|
||||
RegisterClass32A( class32 );
|
||||
class32->lpszClassName = old_name;
|
||||
}
|
||||
VOID WINAPI
|
||||
InitCommonControls (VOID)
|
||||
{
|
||||
INITCOMMONCONTROLSEX icc;
|
||||
|
||||
icc.dwSize = sizeof(INITCOMMONCONTROLSEX);
|
||||
icc.dwICC = ICC_WIN95_CLASSES;
|
||||
|
||||
InitCommonControlsEx (&icc);
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* InitCommonControlsEx [COMCTL32.81]
|
||||
*
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
BOOL32 WINAPI
|
||||
InitCommonControlsEx (LPINITCOMMONCONTROLSEX lpInitCtrls)
|
||||
{
|
||||
INT32 cCount;
|
||||
DWORD dwMask;
|
||||
|
||||
if (lpInitCtrls == NULL) return (FALSE);
|
||||
if (lpInitCtrls->dwSize < sizeof(INITCOMMONCONTROLSEX)) return (FALSE);
|
||||
|
||||
for (cCount = 0; cCount <= 31; cCount++) {
|
||||
dwMask = 1 << cCount;
|
||||
if (!(lpInitCtrls->dwICC & dwMask))
|
||||
continue;
|
||||
|
||||
switch (lpInitCtrls->dwICC & dwMask) {
|
||||
case ICC_LISTVIEW_CLASSES:
|
||||
TRACE (commctrl, "No listview class implemented!\n");
|
||||
HEADER_Register();
|
||||
break;
|
||||
|
||||
case ICC_TREEVIEW_CLASSES:
|
||||
TRACE (commctrl, "No treeview class implemented!\n");
|
||||
TRACE (commctrl, "No tooltip class implemented!\n");
|
||||
break;
|
||||
|
||||
case ICC_BAR_CLASSES:
|
||||
TRACE (commctrl, "No toolbar class implemented!\n");
|
||||
STATUS_Register ();
|
||||
TRACE (commctrl, "No trackbar class implemented!\n");
|
||||
TRACE (commctrl, "No tooltip class implemented!\n");
|
||||
break;
|
||||
|
||||
case ICC_TAB_CLASSES:
|
||||
TRACE (commctrl, "No tab class implemented!\n");
|
||||
TRACE (commctrl, "No tooltip class implemented!\n");
|
||||
break;
|
||||
|
||||
case ICC_UPDOWN_CLASS:
|
||||
UPDOWN_Register ();
|
||||
break;
|
||||
|
||||
case ICC_PROGRESS_CLASS:
|
||||
PROGRESS_Register ();
|
||||
break;
|
||||
|
||||
case ICC_HOTKEY_CLASS:
|
||||
TRACE (commctrl, "No hotkey class implemented!\n");
|
||||
break;
|
||||
|
||||
case ICC_ANIMATE_CLASS:
|
||||
TRACE (commctrl, "No animation class implemented!\n");
|
||||
break;
|
||||
|
||||
case ICC_DATE_CLASSES:
|
||||
TRACE (commctrl, "No month calendar class implemented!\n");
|
||||
TRACE (commctrl, "No date picker class implemented!\n");
|
||||
TRACE (commctrl, "No time picker class implemented!\n");
|
||||
break;
|
||||
|
||||
case ICC_USEREX_CLASSES:
|
||||
TRACE (commctrl, "No comboex class implemented!\n");
|
||||
break;
|
||||
|
||||
case ICC_COOL_CLASSES:
|
||||
TRACE (commctrl, "No rebar class implemented!\n");
|
||||
break;
|
||||
|
||||
case ICC_INTERNET_CLASSES:
|
||||
TRACE (commctrl, "No internet classes implemented!\n");
|
||||
break;
|
||||
|
||||
case ICC_PAGESCROLLER_CLASS:
|
||||
TRACE (commctrl, "No page scroller class implemented!\n");
|
||||
break;
|
||||
|
||||
case ICC_NATIVEFNTCTL_CLASS:
|
||||
TRACE (commctrl, "No native font class implemented!\n");
|
||||
break;
|
||||
|
||||
default:
|
||||
WARN (commctrl, "Unknown class! dwICC=0x%lX\n", dwMask);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return (TRUE);
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* MenuHelp (COMCTL32.2)
|
||||
*
|
||||
*
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
VOID WINAPI
|
||||
MenuHelp (UINT32 uMsg, WPARAM32 wParam, LPARAM lParam, HMENU32 hMainMenu,
|
||||
HINSTANCE32 hInst, HWND32 hwndStatus, LPUINT32 lpwIDs)
|
||||
{
|
||||
char szStatusText[128];
|
||||
|
||||
if (!IsWindow32 (hwndStatus)) return;
|
||||
|
||||
switch (uMsg) {
|
||||
case WM_MENUSELECT:
|
||||
TRACE (commctrl, "WM_MENUSELECT wParam=0x%X lParam=0x%lX\n",
|
||||
wParam, lParam);
|
||||
|
||||
if ((HIWORD(wParam) == 0xFFFF) && (lParam == 0)) {
|
||||
/* menu was closed */
|
||||
SendMessage32A (hwndStatus, SB_SIMPLE, FALSE, 0);
|
||||
}
|
||||
else {
|
||||
if (HIWORD(wParam) & MF_POPUP) {
|
||||
TRACE (commctrl, "Popup menu selected!\n");
|
||||
FIXME (commctrl, "No popup menu texts!\n");
|
||||
|
||||
szStatusText[0] = 0;
|
||||
}
|
||||
else {
|
||||
TRACE (commctrl, "Menu item selected!\n");
|
||||
if (!LoadString32A (hInst, LOWORD(wParam), szStatusText, 128))
|
||||
szStatusText[0] = 0;
|
||||
}
|
||||
SendMessage32A (hwndStatus, SB_SETTEXT32A, 255 | SBT_NOBORDERS,
|
||||
(LPARAM)szStatusText);
|
||||
SendMessage32A (hwndStatus, SB_SIMPLE, TRUE, 0);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
WARN (commctrl, "Invalid Message!\n");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -171,6 +171,15 @@ static void LISTBOX_UpdateScroll( WND *wnd, LB_DESCR *descr )
|
|||
{
|
||||
SCROLLINFO info;
|
||||
|
||||
if (!(descr->style & WS_VSCROLL)) return;
|
||||
/* It is important that we check descr->style, and not wnd->dwStyle,
|
||||
for WS_VSCROLL, as the former is exactly the one passed in
|
||||
argument to CreateWindow.
|
||||
In Windows (and from now on in Wine :) a listbox created
|
||||
with such a style (no WS_SCROLL) does not update
|
||||
the scrollbar with listbox-related data, thus letting
|
||||
the programmer use it for his/her own purposes. */
|
||||
|
||||
if (descr->style & LBS_NOREDRAW) return;
|
||||
info.cbSize = sizeof(info);
|
||||
|
||||
|
@ -1089,8 +1098,8 @@ static INT32 LISTBOX_SetFont( WND *wnd, LB_DESCR *descr, HFONT32 font )
|
|||
if (oldFont) SelectObject32( hdc, oldFont );
|
||||
ReleaseDC32( wnd->hwndSelf, hdc );
|
||||
if (!IS_OWNERDRAW(descr))
|
||||
LISTBOX_SetItemHeight( wnd, descr, 0, tm.tmHeight + 2 );
|
||||
return tm.tmHeight + 2;
|
||||
LISTBOX_SetItemHeight( wnd, descr, 0, tm.tmHeight );
|
||||
return tm.tmHeight ;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -855,10 +855,10 @@ static void MENU_DrawMenuItem( HWND32 hwnd, HDC32 hdc, MENUITEM *lpitem,
|
|||
dis.hDC = hdc;
|
||||
dis.rcItem = lpitem->rect;
|
||||
TRACE(menu, "Ownerdraw: itemID=%d, itemState=%d, itemAction=%d, "
|
||||
"hwndItem=%04x, hdc=%04x, rcItem={%d,%d,%d,%d}, rcItem=%p\n",dis.itemID,
|
||||
"hwndItem=%04x, hdc=%04x, rcItem={%d,%d,%d,%d}\n",dis.itemID,
|
||||
dis.itemState, dis.itemAction, dis.hwndItem, dis.hDC,
|
||||
dis.rcItem.left, dis.rcItem.top, dis.rcItem.right,
|
||||
dis.rcItem.bottom, dis.rcItem );
|
||||
dis.rcItem.bottom );
|
||||
SendMessage32A( GetWindow32(hwnd,GW_OWNER), WM_DRAWITEM, 0, (LPARAM)&dis );
|
||||
return;
|
||||
}
|
||||
|
@ -2799,7 +2799,7 @@ BOOL32 WINAPI EnableMenuItem32( HMENU32 hMenu, UINT32 wItemID, UINT32 wFlags )
|
|||
|
||||
while( (item = MENU_FindItem( &hMenu, &wItemID, wFlags )) )
|
||||
{
|
||||
if( !(item->fType & MF_POPUP) )
|
||||
if( (wFlags & MF_BYPOSITION) || !(item->fType & MF_POPUP) )
|
||||
{
|
||||
/* We can't have MF_GRAYED and MF_DISABLED together */
|
||||
if (wFlags & MF_GRAYED)
|
||||
|
|
|
@ -7,16 +7,14 @@
|
|||
* - I do not know what to to on WM_[SG]ET_FONT
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include "windows.h"
|
||||
#include "sysmetrics.h"
|
||||
#include "progress.h"
|
||||
#include "graphics.h"
|
||||
#include "commctrl.h"
|
||||
#include "heap.h"
|
||||
#include "win.h"
|
||||
#include "debug.h"
|
||||
|
||||
|
||||
/* Control configuration constants */
|
||||
|
||||
#define LED_GAP 2
|
||||
|
@ -27,7 +25,7 @@
|
|||
"Unknown parameter(s) for message " #msg \
|
||||
"(%04x): wp=%04x lp=%08lx\n", msg, wParam, lParam);
|
||||
|
||||
#define PROGRESS_GetInfoPtr(wndPtr) ((PROGRESS_INFO *)wndPtr->wExtra)
|
||||
#define PROGRESS_GetInfoPtr(wndPtr) ((PROGRESS_INFO *)wndPtr->wExtra[0])
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
|
@ -57,25 +55,18 @@ static void PROGRESS_Paint(WND *wndPtr, HDC32 dc)
|
|||
hbrBar = CreateSolidBrush32 (infoPtr->ColorBar);
|
||||
|
||||
/* get the required background brush */
|
||||
if (infoPtr->ColorBk != CLR_DEFAULT)
|
||||
hbrBk = CreateSolidBrush32 (infoPtr->ColorBk);
|
||||
if (infoPtr->ColorBk == CLR_DEFAULT)
|
||||
hbrBk = GetSysColorBrush32 (COLOR_3DFACE);
|
||||
else
|
||||
hbrBk = 0; /* to keep the compiler happy ;-) */
|
||||
hbrBk = CreateSolidBrush32 (infoPtr->ColorBk);
|
||||
|
||||
/* get rect for the bar, adjusted for the border */
|
||||
GetClientRect32 (wndPtr->hwndSelf, &rect);
|
||||
|
||||
/* Hack because of missing top border */
|
||||
rect.top++;
|
||||
|
||||
/* draw the border */
|
||||
if (infoPtr->ColorBk == CLR_DEFAULT)
|
||||
DrawEdge32(hdc, &rect, BDR_SUNKENOUTER, BF_RECT|BF_ADJUST|BF_MIDDLE);
|
||||
else
|
||||
{
|
||||
DrawEdge32(hdc, &rect, BDR_SUNKENOUTER, BF_RECT|BF_ADJUST);
|
||||
FillRect32(hdc, &rect, hbrBk);
|
||||
}
|
||||
DrawEdge32(hdc, &rect, BDR_SUNKENOUTER, BF_RECT|BF_ADJUST);
|
||||
FillRect32(hdc, &rect, hbrBk);
|
||||
|
||||
rect.left++; rect.right--; rect.top++; rect.bottom--;
|
||||
|
||||
/* compute extent of progress bar */
|
||||
|
@ -167,6 +158,10 @@ LRESULT WINAPI ProgressWindowProc(HWND32 hwnd, UINT32 message,
|
|||
switch(message)
|
||||
{
|
||||
case WM_CREATE:
|
||||
/* allocate memory for info struct */
|
||||
wndPtr->wExtra[0] = HeapAlloc (SystemHeap, HEAP_ZERO_MEMORY,
|
||||
sizeof(PROGRESS_INFO));
|
||||
infoPtr = (PROGRESS_INFO *)wndPtr->wExtra[0];
|
||||
/* initialize the info struct */
|
||||
infoPtr->MinVal=0;
|
||||
infoPtr->MaxVal=100;
|
||||
|
@ -179,6 +174,7 @@ LRESULT WINAPI ProgressWindowProc(HWND32 hwnd, UINT32 message,
|
|||
|
||||
case WM_DESTROY:
|
||||
TRACE(updown, "Progress Ctrl destruction, hwnd=%04x\n", hwnd);
|
||||
HeapFree (SystemHeap, 0, infoPtr);
|
||||
break;
|
||||
|
||||
case WM_ERASEBKGND:
|
||||
|
@ -207,7 +203,6 @@ LRESULT WINAPI ProgressWindowProc(HWND32 hwnd, UINT32 message,
|
|||
PROGRESS_CoercePos(wndPtr);
|
||||
InvalidateRect32 (hwnd, NULL, FALSE);
|
||||
UpdateWindow32 (hwnd);
|
||||
// PROGRESS_Paint(wndPtr, 0);
|
||||
}
|
||||
return temp;
|
||||
|
||||
|
@ -311,3 +306,27 @@ LRESULT WINAPI ProgressWindowProc(HWND32 hwnd, UINT32 message,
|
|||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* PROGRESS_Register [Internal]
|
||||
*
|
||||
* Registers the progress bar window class.
|
||||
*
|
||||
*/
|
||||
void PROGRESS_Register(void)
|
||||
{
|
||||
WNDCLASS32A wndClass;
|
||||
|
||||
if( GlobalFindAtom32A( PROGRESS_CLASS32A ) ) return;
|
||||
|
||||
ZeroMemory( &wndClass, sizeof( WNDCLASS32A ) );
|
||||
wndClass.style = CS_GLOBALCLASS | CS_VREDRAW | CS_HREDRAW;
|
||||
wndClass.lpfnWndProc = (WNDPROC32)ProgressWindowProc;
|
||||
wndClass.cbClsExtra = 0;
|
||||
wndClass.cbWndExtra = sizeof(PROGRESS_INFO *);
|
||||
wndClass.hCursor = LoadCursor32A( 0, IDC_ARROW32A );
|
||||
wndClass.lpszClassName = PROGRESS_CLASS32A;
|
||||
|
||||
RegisterClass32A( &wndClass );
|
||||
}
|
||||
|
||||
|
|
|
@ -2,10 +2,11 @@
|
|||
* Interface code to StatusWindow widget/control
|
||||
*
|
||||
* Copyright 1996 Bruce Milner
|
||||
* Copyright 1998 Eric Kohl
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "windows.h"
|
||||
#include "status.h"
|
||||
#include "commctrl.h"
|
||||
|
@ -20,44 +21,206 @@
|
|||
|
||||
/*
|
||||
* Fixme/Todo
|
||||
* 1) Add size grip to status bar - SBARS_SIZEGRIP
|
||||
* 2) Don't hard code bar to bottom of window, allow CCS_TOP also
|
||||
* 3) Fix SBT_OWNERDRAW
|
||||
* 4) Add DrawStatusText32A funtion
|
||||
* 1) Don't hard code bar to bottom of window, allow CCS_TOP also
|
||||
* 2) Add 'non hack' version of icon drawing code
|
||||
*/
|
||||
|
||||
#define __GET_ICON_INFO_HACK__
|
||||
|
||||
#ifdef __GET_ICON_INFO_HACK__
|
||||
#include "bitmap.h"
|
||||
#endif
|
||||
|
||||
#define _MAX(a,b) (((a)>(b))?(a):(b))
|
||||
#define _MIN(a,b) (((a)>(b))?(b):(a))
|
||||
|
||||
#define HORZ_BORDER 0
|
||||
#define VERT_BORDER 2
|
||||
#define HORZ_GAP 2
|
||||
|
||||
|
||||
static STATUSWINDOWINFO *GetStatusInfo(HWND32 hwnd)
|
||||
{
|
||||
WND *wndPtr;
|
||||
|
||||
wndPtr = WIN_FindWndPtr(hwnd);
|
||||
return ((STATUSWINDOWINFO *) &wndPtr->wExtra[0]);
|
||||
return ((STATUSWINDOWINFO *) wndPtr->wExtra[0]);
|
||||
}
|
||||
|
||||
static BOOL32 SW_Refresh( HWND32 hwnd, HDC32 hdc, STATUSWINDOWINFO *self )
|
||||
|
||||
static void
|
||||
STATUS_DrawSizeGrip (HDC32 hdc, LPRECT32 lpRect)
|
||||
{
|
||||
int i;
|
||||
HPEN32 hOldPen;
|
||||
POINT32 pt;
|
||||
INT32 i;
|
||||
|
||||
if (!IsWindowVisible32(hwnd)) {
|
||||
return (TRUE);
|
||||
}
|
||||
pt.x = lpRect->right - 1;
|
||||
pt.y = lpRect->bottom - 1;
|
||||
|
||||
if (self->simple) {
|
||||
DrawStatusText32A(hdc,
|
||||
&self->part0.bound,
|
||||
self->part0.text,
|
||||
self->part0.style);
|
||||
hOldPen = SelectObject32 (hdc, GetSysColorPen32 (COLOR_3DFACE));
|
||||
MoveToEx32 (hdc, pt.x - 12, pt.y, NULL);
|
||||
LineTo32 (hdc, pt.x, pt.y);
|
||||
LineTo32 (hdc, pt.x, pt.y - 12);
|
||||
|
||||
pt.x--;
|
||||
pt.y--;
|
||||
|
||||
SelectObject32 (hdc, GetSysColorPen32 (COLOR_3DSHADOW));
|
||||
for (i = 1; i < 11; i += 4) {
|
||||
MoveToEx32 (hdc, pt.x - i, pt.y, NULL);
|
||||
LineTo32 (hdc, pt.x, pt.y - i);
|
||||
|
||||
MoveToEx32 (hdc, pt.x - i-1, pt.y, NULL);
|
||||
LineTo32 (hdc, pt.x, pt.y - i-1);
|
||||
}
|
||||
|
||||
SelectObject32 (hdc, GetSysColorPen32 (COLOR_3DHIGHLIGHT));
|
||||
for (i = 3; i < 13; i += 4) {
|
||||
MoveToEx32 (hdc, pt.x - i, pt.y, NULL);
|
||||
LineTo32 (hdc, pt.x, pt.y - i);
|
||||
}
|
||||
|
||||
SelectObject32 (hdc, hOldPen);
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
SB_DrawPart( HDC32 hdc, LPRECT32 lprc, HICON32 hIcon,
|
||||
LPCSTR text, UINT32 style )
|
||||
{
|
||||
RECT32 r = *lprc;
|
||||
UINT32 border = BDR_SUNKENOUTER;
|
||||
|
||||
if(style==SBT_POPOUT)
|
||||
border = BDR_RAISEDOUTER;
|
||||
else if(style==SBT_NOBORDERS)
|
||||
border = 0;
|
||||
|
||||
DrawEdge32(hdc, &r, border, BF_RECT|BF_ADJUST);
|
||||
|
||||
/* draw the icon */
|
||||
if (hIcon) {
|
||||
#ifdef __GET_ICON_INFO_HACK__
|
||||
HBITMAP32 hbmImage;
|
||||
HBITMAP32 hbmMask;
|
||||
CURSORICONINFO *ptr;
|
||||
HDC32 hdcSrc;
|
||||
INT32 y, cy, ry, ty;
|
||||
|
||||
if (ptr = (CURSORICONINFO *)GlobalLock16(hIcon)) {
|
||||
hbmMask = CreateBitmap32 (ptr->nWidth, ptr->nHeight, 1, 1,
|
||||
(char *)(ptr + 1));
|
||||
hbmImage = CreateBitmap32 (ptr->nWidth, ptr->nHeight, ptr->bPlanes,
|
||||
ptr->bBitsPerPixel,
|
||||
(char *)(ptr + 1) + ptr->nHeight *
|
||||
BITMAP_WIDTH_BYTES(ptr->nWidth, 1));
|
||||
r.left += 2;
|
||||
ry = r.bottom - r.top;
|
||||
if (ry >= ptr->nHeight) {
|
||||
/* full view of icon */
|
||||
y = 0;
|
||||
cy = ptr->nHeight;
|
||||
ty = r.top + (ry - ptr->nHeight) / 2;
|
||||
}
|
||||
else {
|
||||
for (i = 0; i < self->numParts; i++) {
|
||||
DrawStatusText32A(hdc,
|
||||
&self->parts[i].bound,
|
||||
self->parts[i].text,
|
||||
self->parts[i].style);
|
||||
}
|
||||
/* partial view of icon */
|
||||
y = (ptr->nHeight - ry) / 2;
|
||||
cy = ry;
|
||||
ty = r.top;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
hdcSrc = CreateCompatibleDC32 (hdc);
|
||||
SelectObject32 (hdcSrc, hbmMask);
|
||||
BitBlt32 (hdc, r.left, r.top, ptr->nWidth, cy,
|
||||
hdcSrc, 0, y, SRCAND);
|
||||
SelectObject32 (hdcSrc, hbmImage);
|
||||
BitBlt32 (hdc, r.left, r.top, ptr->nWidth, cy,
|
||||
hdcSrc, 0, y, SRCPAINT);
|
||||
DeleteDC32 (hdcSrc);
|
||||
|
||||
r.left += ptr->nWidth;
|
||||
DeleteObject32 (hbmImage);
|
||||
DeleteObject32 (hbmMask);
|
||||
GlobalUnlock16 (hIcon);
|
||||
}
|
||||
#else
|
||||
/* FIXME: no "non hack" version available!!! */
|
||||
#endif
|
||||
}
|
||||
|
||||
/* now draw text */
|
||||
if (text) {
|
||||
int oldbkmode = SetBkMode32(hdc, TRANSPARENT);
|
||||
r.left += 3;
|
||||
DrawText32A(hdc, text, lstrlen32A(text),
|
||||
&r, DT_LEFT|DT_VCENTER|DT_SINGLELINE);
|
||||
if (oldbkmode != TRANSPARENT)
|
||||
SetBkMode32(hdc, oldbkmode);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static BOOL32
|
||||
SW_Refresh( HWND32 hwnd, HDC32 hdc, STATUSWINDOWINFO *self )
|
||||
{
|
||||
int i;
|
||||
RECT32 rect;
|
||||
HBRUSH32 hbrBk;
|
||||
WND *wndPtr;
|
||||
|
||||
wndPtr = WIN_FindWndPtr(hwnd);
|
||||
|
||||
if (!IsWindowVisible32(hwnd)) {
|
||||
return (TRUE);
|
||||
}
|
||||
|
||||
GetClientRect32 (hwnd, &rect);
|
||||
|
||||
if (self->clrBk != CLR_DEFAULT)
|
||||
hbrBk = CreateSolidBrush32 (self->clrBk);
|
||||
else
|
||||
hbrBk = GetSysColorBrush32 (COLOR_3DFACE);
|
||||
FillRect32(hdc, &rect, hbrBk);
|
||||
|
||||
if (self->simple) {
|
||||
SB_DrawPart (hdc,
|
||||
&self->part0.bound,
|
||||
self->part0.hIcon,
|
||||
self->part0.text,
|
||||
self->part0.style);
|
||||
}
|
||||
else {
|
||||
for (i = 0; i < self->numParts; i++) {
|
||||
if (self->parts[i].style == SBT_OWNERDRAW) {
|
||||
DRAWITEMSTRUCT32 dis;
|
||||
WND *wndPtr = WIN_FindWndPtr(hwnd);
|
||||
|
||||
dis.CtlID = wndPtr->wIDmenu;
|
||||
dis.itemID = -1;
|
||||
dis.hwndItem = hwnd;
|
||||
dis.hDC = hdc;
|
||||
dis.rcItem = self->part0.bound;
|
||||
dis.itemData = (INT32)self->part0.text;
|
||||
SendMessage32A (GetParent32 (hwnd), WM_DRAWITEM,
|
||||
(WPARAM32)wndPtr->wIDmenu, (LPARAM)&dis);
|
||||
}
|
||||
else
|
||||
SB_DrawPart (hdc,
|
||||
&self->parts[i].bound,
|
||||
self->parts[i].hIcon,
|
||||
self->parts[i].text,
|
||||
self->parts[i].style);
|
||||
}
|
||||
}
|
||||
|
||||
if (self->clrBk != CLR_DEFAULT)
|
||||
DeleteObject32 (hbrBk);
|
||||
|
||||
if (wndPtr->dwStyle & SBARS_SIZEGRIP)
|
||||
STATUS_DrawSizeGrip (hdc, &rect);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
|
@ -66,11 +229,10 @@ SW_GetBorders(STATUSWINDOWINFO *self, HWND32 hwnd, WPARAM32 wParam, LPARAM lPara
|
|||
{
|
||||
LPINT32 out;
|
||||
|
||||
/* FIXME for sizegrips */
|
||||
out = (LPINT32) lParam;
|
||||
out[0] = 1; /* vertical border width */
|
||||
out[1] = 1; /* horizontal border width */
|
||||
out[2] = 1; /* width of border between rectangles */
|
||||
out[0] = HORZ_BORDER; /* horizontal border width */
|
||||
out[1] = VERT_BORDER; /* vertical border width */
|
||||
out[2] = HORZ_GAP; /* width of border between rectangles */
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
@ -80,11 +242,12 @@ SW_SetPartBounds(HWND32 hwnd, STATUSWINDOWINFO *self)
|
|||
int i;
|
||||
RECT32 rect, *r;
|
||||
STATUSWINDOWPART *part;
|
||||
int sep = 1;
|
||||
|
||||
/* get our window size */
|
||||
GetClientRect32(hwnd, &rect);
|
||||
|
||||
rect.top += VERT_BORDER;
|
||||
|
||||
/* set bounds for simple rectangle */
|
||||
self->part0.bound = rect;
|
||||
|
||||
|
@ -97,7 +260,7 @@ SW_SetPartBounds(HWND32 hwnd, STATUSWINDOWINFO *self)
|
|||
if (i == 0)
|
||||
r->left = 0;
|
||||
else
|
||||
r->left = self->parts[i-1].bound.right+sep;
|
||||
r->left = self->parts[i-1].bound.right + HORZ_GAP;
|
||||
if (part->x == -1)
|
||||
r->right = rect.right;
|
||||
else
|
||||
|
@ -204,17 +367,26 @@ SW_GetParts(STATUSWINDOWINFO *self, HWND32 hwnd, WPARAM32 wParam, LPARAM lParam)
|
|||
}
|
||||
|
||||
static LRESULT
|
||||
SW_Create(STATUSWINDOWINFO *self, HWND32 hwnd, WPARAM32 wParam, LPARAM lParam)
|
||||
SW_Create(HWND32 hwnd, WPARAM32 wParam, LPARAM lParam)
|
||||
{
|
||||
RECT32 rect;
|
||||
LPCREATESTRUCT32A lpCreate = (LPCREATESTRUCT32A) lParam;
|
||||
int height, width;
|
||||
int height, width, len;
|
||||
HDC32 hdc;
|
||||
HWND32 parent;
|
||||
WND *wndPtr;
|
||||
STATUSWINDOWINFO *self;
|
||||
|
||||
self->numParts = 0;
|
||||
wndPtr = WIN_FindWndPtr(hwnd);
|
||||
wndPtr->wExtra[0] = HeapAlloc (SystemHeap, HEAP_ZERO_MEMORY,
|
||||
sizeof(STATUSWINDOWINFO));
|
||||
|
||||
self = (STATUSWINDOWINFO*)wndPtr->wExtra[0];
|
||||
self->numParts = 1;
|
||||
self->parts = 0;
|
||||
self->simple = TRUE;
|
||||
self->simple = FALSE;
|
||||
self->clrBk = CLR_DEFAULT;
|
||||
self->hFont = 0;
|
||||
GetClientRect32(hwnd, &rect);
|
||||
|
||||
/* initialize simple case */
|
||||
|
@ -222,8 +394,23 @@ SW_Create(STATUSWINDOWINFO *self, HWND32 hwnd, WPARAM32 wParam, LPARAM lParam)
|
|||
self->part0.text = 0;
|
||||
self->part0.x = 0;
|
||||
self->part0.style = 0;
|
||||
self->part0.hIcon = 0;
|
||||
|
||||
height = 40;
|
||||
/* initialize first part */
|
||||
self->parts = HeapAlloc(SystemHeap, HEAP_ZERO_MEMORY,
|
||||
sizeof(STATUSWINDOWPART));
|
||||
self->parts[0].bound = rect;
|
||||
self->parts[0].text = 0;
|
||||
self->parts[0].x = -1;
|
||||
self->parts[0].style = 0;
|
||||
self->parts[0].hIcon = 0;
|
||||
|
||||
if (len = lstrlen32A( lpCreate->lpszName ) ) {
|
||||
self->parts[0].text = HeapAlloc( SystemHeap, 0, len + 1 );
|
||||
lstrcpy32A( self->parts[0].text, lpCreate->lpszName );
|
||||
}
|
||||
|
||||
height = 20;
|
||||
if ((hdc = GetDC32(0))) {
|
||||
TEXTMETRIC32A tm;
|
||||
GetTextMetrics32A(hdc, &tm);
|
||||
|
@ -234,8 +421,8 @@ SW_Create(STATUSWINDOWINFO *self, HWND32 hwnd, WPARAM32 wParam, LPARAM lParam)
|
|||
parent = GetParent32(hwnd);
|
||||
GetClientRect32(parent, &rect);
|
||||
width = rect.right - rect.left;
|
||||
height = (self->textHeight * 3)/2;
|
||||
MoveWindow32(hwnd, lpCreate->x, lpCreate->y-1, width, height, FALSE);
|
||||
self->height = self->textHeight + 4 + VERT_BORDER;
|
||||
MoveWindow32(hwnd, lpCreate->x, lpCreate->y-1, width, self->height, FALSE);
|
||||
SW_SetPartBounds(hwnd, self);
|
||||
return 0;
|
||||
}
|
||||
|
@ -308,25 +495,242 @@ SW_GetTextLength(STATUSWINDOWINFO *self, HWND32 hwnd, WPARAM32 wParam, LPARAM lP
|
|||
static LRESULT
|
||||
SW_SetMinHeight(STATUSWINDOWINFO *self, HWND32 hwnd, WPARAM32 wParam, LPARAM lParam)
|
||||
{
|
||||
/* FIXME */
|
||||
/* size is wParam | 2*pixels_of_horz_border */
|
||||
INT32 width, height, x, y;
|
||||
RECT32 parent_rect;
|
||||
HWND32 parent;
|
||||
|
||||
if (IsWindowVisible32 (hwnd)) {
|
||||
/* width and height don't apply */
|
||||
parent = GetParent32(hwnd);
|
||||
GetClientRect32(parent, &parent_rect);
|
||||
self->height = (INT32)wParam + VERT_BORDER;
|
||||
width = parent_rect.right - parent_rect.left;
|
||||
x = parent_rect.left;
|
||||
y = parent_rect.bottom - self->height;
|
||||
MoveWindow32(hwnd, parent_rect.left, parent_rect.bottom - self->height,
|
||||
width, self->height, TRUE);
|
||||
SW_SetPartBounds(hwnd, self);
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static LRESULT
|
||||
SW_SetBkColor(STATUSWINDOWINFO *self, HWND32 hwnd, WPARAM32 wParam, LPARAM lParam)
|
||||
{
|
||||
COLORREF oldBkColor;
|
||||
HDC32 hdc;
|
||||
|
||||
oldBkColor = self->clrBk;
|
||||
self->clrBk = (COLORREF)lParam;
|
||||
hdc = GetDC32(hwnd);
|
||||
SW_Refresh(hwnd, hdc, self);
|
||||
ReleaseDC32(hwnd, hdc);
|
||||
return oldBkColor;
|
||||
}
|
||||
|
||||
|
||||
static LRESULT
|
||||
SW_SetIcon(STATUSWINDOWINFO *self, HWND32 hwnd, WPARAM32 wParam, LPARAM lParam)
|
||||
{
|
||||
HDC32 hdc;
|
||||
INT32 nPart;
|
||||
|
||||
nPart = (INT32)wParam & 0x00ff;
|
||||
if ((nPart < -1) || (nPart >= self->numParts)) return FALSE;
|
||||
|
||||
if (nPart == -1) {
|
||||
self->part0.hIcon = (HICON32)lParam;
|
||||
if (self->simple)
|
||||
InvalidateRect32(hwnd, &self->part0.bound, FALSE);
|
||||
}
|
||||
else {
|
||||
self->parts[nPart].hIcon = (HICON32)lParam;
|
||||
if (!(self->simple))
|
||||
InvalidateRect32(hwnd, &self->parts[nPart].bound, FALSE);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static LRESULT
|
||||
SW_GetIcon(STATUSWINDOWINFO *self, HWND32 hwnd, WPARAM32 wParam, LPARAM lParam)
|
||||
{
|
||||
INT32 nPart;
|
||||
|
||||
nPart = (INT32)wParam & 0x00ff;
|
||||
if ((nPart < -1) || (nPart >= self->numParts)) return NULL;
|
||||
|
||||
if (nPart == -1)
|
||||
return (self->part0.hIcon);
|
||||
else
|
||||
return (self->parts[nPart].hIcon);
|
||||
}
|
||||
|
||||
static LRESULT
|
||||
SW_Simple(STATUSWINDOWINFO *self, HWND32 hwnd, WPARAM32 wParam, LPARAM lParam)
|
||||
{
|
||||
WND *wndPtr;
|
||||
BOOL32 simple;
|
||||
HDC32 hdc;
|
||||
HDC32 hdc;
|
||||
NMHDR nmhdr;
|
||||
|
||||
wndPtr = WIN_FindWndPtr(hwnd);
|
||||
|
||||
simple = (BOOL32) wParam;
|
||||
self->simple = simple;
|
||||
|
||||
/* send notification */
|
||||
nmhdr.hwndFrom = hwnd;
|
||||
nmhdr.idFrom = wndPtr->wIDmenu;
|
||||
nmhdr.code = SBN_SIMPLEMODECHANGE;
|
||||
SendMessage32A (GetParent32 (hwnd), WM_NOTIFY, 0, (LPARAM)&nmhdr);
|
||||
|
||||
hdc = GetDC32(hwnd);
|
||||
SW_Refresh(hwnd, hdc, self);
|
||||
ReleaseDC32(hwnd, hdc);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
static LRESULT
|
||||
SW_Destroy(STATUSWINDOWINFO *self, HWND32 hwnd, WPARAM32 wParam, LPARAM lParam)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < self->numParts; i++) {
|
||||
if (self->parts[i].text && (self->parts[i].style != SBT_OWNERDRAW))
|
||||
HeapFree(SystemHeap, 0, self->parts[i].text);
|
||||
}
|
||||
if (self->part0.text && (self->part0.style != SBT_OWNERDRAW))
|
||||
HeapFree(SystemHeap, 0, self->part0.text);
|
||||
HeapFree(SystemHeap, 0, self->parts);
|
||||
HeapFree(SystemHeap, 0, self);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static LRESULT
|
||||
SW_WMGetText (STATUSWINDOWINFO *self, HWND32 hwnd, WPARAM32 wParam, LPARAM lParam)
|
||||
{
|
||||
INT32 len;
|
||||
|
||||
if (!(self->parts[0].text))
|
||||
return 0;
|
||||
len = lstrlen32A (self->parts[0].text);
|
||||
if (wParam > len) {
|
||||
lstrcpy32A ((LPSTR)lParam, self->parts[0].text);
|
||||
return len;
|
||||
}
|
||||
else
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
static LRESULT
|
||||
SW_WMGetTextLength (STATUSWINDOWINFO *self, HWND32 hwnd, WPARAM32 wParam, LPARAM lParam)
|
||||
{
|
||||
if (!(self->parts[0].text))
|
||||
return 0;
|
||||
return (lstrlen32A (self->parts[0].text));
|
||||
}
|
||||
|
||||
|
||||
static LRESULT
|
||||
SW_NcHitTest (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
|
||||
{
|
||||
RECT32 rect;
|
||||
POINT32 pt;
|
||||
|
||||
if (wndPtr->dwStyle & SBARS_SIZEGRIP) {
|
||||
GetClientRect32 (wndPtr->hwndSelf, &rect);
|
||||
|
||||
pt.x = (INT32)LOWORD(lParam);
|
||||
pt.y = (INT32)HIWORD(lParam);
|
||||
ScreenToClient32 (wndPtr->hwndSelf, &pt);
|
||||
|
||||
rect.left = rect.right - 13;
|
||||
rect.top += 2;
|
||||
|
||||
if (PtInRect32 (&rect, pt))
|
||||
return HTBOTTOMRIGHT;
|
||||
}
|
||||
|
||||
return DefWindowProc32A (wndPtr->hwndSelf, WM_NCHITTEST, wParam, lParam);
|
||||
}
|
||||
|
||||
|
||||
static LRESULT
|
||||
SW_NcLButtonDown (HWND32 hwnd, WPARAM32 wParam, LPARAM lParam)
|
||||
{
|
||||
// TRACE (status, "WM_NCLBUTTONDOWN\n");
|
||||
PostMessage32A (GetParent32 (hwnd), WM_NCLBUTTONDOWN,
|
||||
wParam, lParam);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static LRESULT
|
||||
SW_NcLButtonUp (HWND32 hwnd, WPARAM32 wParam, LPARAM lParam)
|
||||
{
|
||||
// TRACE (status, "WM_NCLBUTTONUP\n");
|
||||
PostMessage32A (GetParent32 (hwnd), WM_NCLBUTTONUP,
|
||||
wParam, lParam);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static LRESULT
|
||||
SW_Paint(STATUSWINDOWINFO *self, HWND32 hwnd)
|
||||
{
|
||||
HDC32 hdc;
|
||||
PAINTSTRUCT32 ps;
|
||||
|
||||
hdc = BeginPaint32(hwnd, &ps);
|
||||
SW_Refresh(hwnd, hdc, self);
|
||||
EndPaint32(hwnd, &ps);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static LRESULT
|
||||
SW_WMSetFont (STATUSWINDOWINFO *self, HWND32 hwnd, WPARAM32 wParam, LPARAM lParam)
|
||||
{
|
||||
HDC32 hdc;
|
||||
|
||||
self->hFont = (HFONT32)wParam;
|
||||
if (LOWORD(lParam) == TRUE) {
|
||||
hdc = GetDC32(hwnd);
|
||||
SW_Refresh(hwnd, hdc, self);
|
||||
ReleaseDC32(hwnd, hdc);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static LRESULT
|
||||
SW_WMSetText (STATUSWINDOWINFO *self, HWND32 hwnd, WPARAM32 wParam, LPARAM lParam)
|
||||
{
|
||||
int len;
|
||||
STATUSWINDOWPART *part;
|
||||
|
||||
if (self->numParts == 0) return FALSE;
|
||||
|
||||
part = &self->parts[0];
|
||||
/* duplicate string */
|
||||
if (part->text)
|
||||
HeapFree(SystemHeap, 0, part->text);
|
||||
part->text = 0;
|
||||
if (lParam && (len = lstrlen32A((LPCSTR)lParam))) {
|
||||
part->text = HeapAlloc(SystemHeap, 0, len+1);
|
||||
lstrcpy32A(part->text, (LPCSTR)lParam);
|
||||
}
|
||||
InvalidateRect32(hwnd, &part->bound, FALSE);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
static LRESULT
|
||||
SW_Size(STATUSWINDOWINFO *self, HWND32 hwnd, WPARAM32 wParam, LPARAM lParam)
|
||||
{
|
||||
|
@ -347,56 +751,48 @@ SW_Size(STATUSWINDOWINFO *self, HWND32 hwnd, WPARAM32 wParam, LPARAM lParam)
|
|||
/* width and height don't apply */
|
||||
parent = GetParent32(hwnd);
|
||||
GetClientRect32(parent, &parent_rect);
|
||||
height = (self->textHeight * 3)/2;
|
||||
width = parent_rect.right - parent_rect.left;
|
||||
x = parent_rect.left;
|
||||
y = parent_rect.bottom - height;
|
||||
MoveWindow32(hwnd, parent_rect.left, parent_rect.bottom - height - 1,
|
||||
width, height, TRUE);
|
||||
y = parent_rect.bottom - self->height;
|
||||
MoveWindow32(hwnd, parent_rect.left, parent_rect.bottom - self->height,
|
||||
width, self->height, TRUE);
|
||||
SW_SetPartBounds(hwnd, self);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static LRESULT
|
||||
SW_Destroy(STATUSWINDOWINFO *self, HWND32 hwnd, WPARAM32 wParam, LPARAM lParam)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < self->numParts; i++) {
|
||||
if (self->parts[i].text && (self->parts[i].style != SBT_OWNERDRAW))
|
||||
HeapFree(SystemHeap, 0, self->parts[i].text);
|
||||
}
|
||||
if (self->part0.text && (self->part0.style != SBT_OWNERDRAW))
|
||||
HeapFree(SystemHeap, 0, self->part0.text);
|
||||
HeapFree(SystemHeap, 0, self->parts);
|
||||
static LRESULT
|
||||
SW_SendNotify (HWND32 hwnd, UINT32 code)
|
||||
{
|
||||
WND *wndPtr;
|
||||
NMHDR nmhdr;
|
||||
|
||||
wndPtr = WIN_FindWndPtr(hwnd);
|
||||
nmhdr.hwndFrom = hwnd;
|
||||
nmhdr.idFrom = wndPtr->wIDmenu;
|
||||
nmhdr.code = code;
|
||||
SendMessage32A (GetParent32 (hwnd), WM_NOTIFY, 0, (LPARAM)&nmhdr);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
static LRESULT
|
||||
SW_Paint(STATUSWINDOWINFO *self, HWND32 hwnd)
|
||||
{
|
||||
HDC32 hdc;
|
||||
PAINTSTRUCT32 ps;
|
||||
|
||||
hdc = BeginPaint32(hwnd, &ps);
|
||||
SW_Refresh(hwnd, hdc, self);
|
||||
EndPaint32(hwnd, &ps);
|
||||
return 0;
|
||||
}
|
||||
|
||||
LRESULT WINAPI StatusWindowProc( HWND32 hwnd, UINT32 msg,
|
||||
WPARAM32 wParam, LPARAM lParam )
|
||||
LRESULT WINAPI
|
||||
StatusWindowProc (HWND32 hwnd, UINT32 msg, WPARAM32 wParam, LPARAM lParam)
|
||||
{
|
||||
STATUSWINDOWINFO *self;
|
||||
WND *wndPtr;
|
||||
|
||||
wndPtr = WIN_FindWndPtr(hwnd);
|
||||
self = GetStatusInfo(hwnd);
|
||||
|
||||
switch (msg) {
|
||||
case SB_GETBORDERS:
|
||||
return SW_GetBorders(self, hwnd, wParam, lParam);
|
||||
case SB_GETICON:
|
||||
return SW_GetIcon(self, hwnd, wParam, lParam);
|
||||
case SB_GETPARTS:
|
||||
return SW_GetParts(self, hwnd, wParam, lParam);
|
||||
case SB_GETRECT:
|
||||
|
@ -405,6 +801,12 @@ LRESULT WINAPI StatusWindowProc( HWND32 hwnd, UINT32 msg,
|
|||
return SW_GetText(self, hwnd, wParam, lParam);
|
||||
case SB_GETTEXTLENGTH32A:
|
||||
return SW_GetTextLength(self, hwnd, wParam, lParam);
|
||||
case SB_ISSIMPLE:
|
||||
return self->simple;
|
||||
case SB_SETBKCOLOR:
|
||||
return SW_SetBkColor(self, hwnd, wParam, lParam);
|
||||
case SB_SETICON:
|
||||
return SW_SetIcon(self, hwnd, wParam, lParam);
|
||||
case SB_SETMINHEIGHT:
|
||||
return SW_SetMinHeight(self, hwnd, wParam, lParam);
|
||||
case SB_SETPARTS:
|
||||
|
@ -415,18 +817,70 @@ LRESULT WINAPI StatusWindowProc( HWND32 hwnd, UINT32 msg,
|
|||
return SW_Simple(self, hwnd, wParam, lParam);
|
||||
|
||||
case WM_CREATE:
|
||||
return SW_Create(self, hwnd, wParam, lParam);
|
||||
return SW_Create(hwnd, wParam, lParam);
|
||||
case WM_DESTROY:
|
||||
return SW_Destroy(self, hwnd, wParam, lParam);
|
||||
case WM_GETFONT:
|
||||
return self->hFont;
|
||||
case WM_GETTEXT:
|
||||
return SW_WMGetText(self, hwnd, wParam, lParam);
|
||||
case WM_GETTEXTLENGTH:
|
||||
return SW_WMGetTextLength(self, hwnd, wParam, lParam);
|
||||
|
||||
case WM_LBUTTONDBLCLK:
|
||||
return SW_SendNotify (hwnd, NM_DBLCLK);
|
||||
|
||||
case WM_LBUTTONUP:
|
||||
return SW_SendNotify (hwnd, NM_CLICK);
|
||||
|
||||
case WM_NCHITTEST:
|
||||
return SW_NcHitTest (wndPtr, wParam, lParam);
|
||||
|
||||
case WM_NCLBUTTONDOWN:
|
||||
return SW_NcLButtonDown (hwnd, wParam, lParam);
|
||||
|
||||
case WM_NCLBUTTONUP:
|
||||
return SW_NcLButtonUp (hwnd, wParam, lParam);
|
||||
|
||||
case WM_PAINT:
|
||||
return SW_Paint(self, hwnd);
|
||||
case WM_RBUTTONDBLCLK:
|
||||
return SW_SendNotify (hwnd, NM_RDBLCLK);
|
||||
case WM_RBUTTONUP:
|
||||
return SW_SendNotify (hwnd, NM_RCLICK);
|
||||
case WM_SETFONT:
|
||||
return SW_WMSetFont(self, hwnd, wParam, lParam);
|
||||
case WM_SETTEXT:
|
||||
return SW_WMSetText(self, hwnd, wParam, lParam);
|
||||
case WM_SIZE:
|
||||
return SW_Size(self, hwnd, wParam, lParam);
|
||||
default:
|
||||
return DefWindowProc32A(hwnd, msg, wParam, lParam);
|
||||
return DefWindowProc32A (hwnd, msg, wParam, lParam);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* STATUS_Register [Internal]
|
||||
*
|
||||
* Registers the status window class.
|
||||
*/
|
||||
void STATUS_Register(void)
|
||||
{
|
||||
WNDCLASS32A wndClass;
|
||||
|
||||
if( GlobalFindAtom32A( STATUSCLASSNAME32A ) ) return;
|
||||
|
||||
ZeroMemory( &wndClass, sizeof( WNDCLASS32A ) );
|
||||
wndClass.style = CS_GLOBALCLASS | CS_DBLCLKS | CS_VREDRAW;
|
||||
wndClass.lpfnWndProc = (WNDPROC32)StatusWindowProc;
|
||||
wndClass.cbClsExtra = 0;
|
||||
wndClass.cbWndExtra = sizeof(STATUSWINDOWINFO *);
|
||||
wndClass.hCursor = LoadCursor32A( 0, IDC_ARROW32A );
|
||||
wndClass.hbrBackground = (HBRUSH32)(COLOR_3DFACE + 1);
|
||||
wndClass.lpszClassName = STATUSCLASSNAME32A;
|
||||
|
||||
RegisterClass32A( &wndClass );
|
||||
}
|
||||
|
||||
|
|
|
@ -785,3 +785,26 @@ LRESULT WINAPI UpDownWindowProc(HWND32 hwnd, UINT32 message, WPARAM32 wParam,
|
|||
return 0;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* UPDOWN_Register [Internal]
|
||||
*
|
||||
* Registers the updown window class.
|
||||
*/
|
||||
void UPDOWN_Register(void)
|
||||
{
|
||||
WNDCLASS32A wndClass;
|
||||
|
||||
if( GlobalFindAtom32A( UPDOWN_CLASS32A ) ) return;
|
||||
|
||||
ZeroMemory( &wndClass, sizeof( WNDCLASS32A ) );
|
||||
wndClass.style = CS_GLOBALCLASS | CS_DBLCLKS | CS_VREDRAW;
|
||||
wndClass.lpfnWndProc = (WNDPROC32)UpDownWindowProc;
|
||||
wndClass.cbClsExtra = 0;
|
||||
wndClass.cbWndExtra = sizeof(UPDOWN_INFO);
|
||||
wndClass.hCursor = LoadCursor32A( 0, IDC_ARROW32A );
|
||||
wndClass.hbrBackground = (HBRUSH32)(COLOR_3DFACE + 1);
|
||||
wndClass.lpszClassName = UPDOWN_CLASS32A;
|
||||
|
||||
RegisterClass32A( &wndClass );
|
||||
}
|
||||
|
||||
|
|
|
@ -343,7 +343,7 @@ void DEBUG_AddModuleBreakpoints(void)
|
|||
|
||||
for (ok = ModuleFirst(&entry); ok; ok = ModuleNext(&entry))
|
||||
{
|
||||
if (!(pModule = MODULE_GetPtr16( entry.hModule ))) continue;
|
||||
if (!(pModule = NE_GetPtr( entry.hModule ))) continue;
|
||||
if (pModule->flags & NE_FFLAGS_LIBMODULE) continue; /* Library */
|
||||
|
||||
if (!(pModule->flags & NE_FFLAGS_WIN32)) /* NE module */
|
||||
|
|
|
@ -548,24 +548,16 @@ static void DEBUG_Main( int signal )
|
|||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* DebugBreak32 (KERNEL32)
|
||||
*/
|
||||
void DebugBreak32( CONTEXT *regs )
|
||||
{
|
||||
const char *module = MODULE_GetModuleName( GetCurrentTask() );
|
||||
fprintf( stderr, "%s called DebugBreak\n", module ? module : "???" );
|
||||
DEBUG_context = *regs;
|
||||
DEBUG_Main( SIGTRAP );
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* DebugBreak16 (KERNEL.203)
|
||||
* DebugBreak (KERNEL.203) (KERNEL32.181)
|
||||
*/
|
||||
void DebugBreak16( CONTEXT *regs )
|
||||
void DebugBreak( CONTEXT *regs )
|
||||
{
|
||||
const char *module = MODULE_GetModuleName( GetCurrentTask() );
|
||||
fprintf( stderr, "%s called DebugBreak\n", module ? module : "???" );
|
||||
char module[10];
|
||||
if (!GetModuleName( GetCurrentTask(), module, sizeof(module) ))
|
||||
strcpy( module, "???" );
|
||||
fprintf( stderr, "%s called DebugBreak\n", module );
|
||||
DEBUG_context = *regs;
|
||||
DEBUG_Main( SIGTRAP );
|
||||
}
|
||||
|
|
|
@ -50,11 +50,6 @@ HMODULE16 GetExePtr(HANDLE16 h)
|
|||
exit(0);
|
||||
}
|
||||
|
||||
LPSTR MODULE_GetModuleName( HMODULE16 hModule )
|
||||
{
|
||||
exit(0);
|
||||
}
|
||||
|
||||
int PROFILE_GetWineIniString( const char *section, const char *key_name,
|
||||
const char *def, char *buffer, int len )
|
||||
{
|
||||
|
@ -103,7 +98,7 @@ void WIN_WalkWindows( HWND32 hwnd, int indent )
|
|||
exit(0);
|
||||
}
|
||||
|
||||
NE_MODULE *MODULE_GetPtr16( HMODULE16 hModule )
|
||||
NE_MODULE *NE_GetPtr( HMODULE16 hModule )
|
||||
{
|
||||
exit(0);
|
||||
}
|
||||
|
|
|
@ -877,7 +877,7 @@ void DEBUG_LoadEntryPoints(void)
|
|||
|
||||
for (ok = ModuleFirst(&entry); ok; ok = ModuleNext(&entry))
|
||||
{
|
||||
if (!(pModule = MODULE_GetPtr16( entry.hModule ))) continue;
|
||||
if (!(pModule = NE_GetPtr( entry.hModule ))) continue;
|
||||
fprintf( stderr, " %s", entry.szModule );
|
||||
|
||||
if (!(pModule->flags & NE_FFLAGS_WIN32)) /* NE module */
|
||||
|
|
|
@ -1144,7 +1144,7 @@ DEBUG_ProcessElfObject(char * filename, unsigned int load_offset)
|
|||
*/
|
||||
ehptr = (Elf32_Ehdr *) addr;
|
||||
|
||||
if( load_offset == NULL )
|
||||
if( load_offset == 0 )
|
||||
{
|
||||
DEBUG_RegisterELFDebugInfo(ehptr->e_entry, statbuf.st_size, filename);
|
||||
}
|
||||
|
@ -1271,7 +1271,7 @@ DEBUG_ReadExecutableDbgInfo(void)
|
|||
}
|
||||
|
||||
if( (dynpnt->d_tag != DT_DEBUG)
|
||||
|| (dynpnt->d_un.d_ptr == NULL) )
|
||||
|| (dynpnt->d_un.d_ptr == 0) )
|
||||
{
|
||||
goto leave;
|
||||
}
|
||||
|
@ -1296,7 +1296,7 @@ DEBUG_ReadExecutableDbgInfo(void)
|
|||
* shared libraries which may be loaded.
|
||||
*/
|
||||
ehdr = (Elf32_Ehdr *) lpnt->l_addr;
|
||||
if( (lpnt->l_addr == NULL) || (ehdr->e_type != ET_DYN) )
|
||||
if( (lpnt->l_addr == 0) || (ehdr->e_type != ET_DYN) )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
|
|
@ -0,0 +1,12 @@
|
|||
|
||||
May, 1998 Matthew Becker (mbecker@glasscity.net
|
||||
|
||||
Help, this does not work! What am I missing?
|
||||
|
||||
How to add a new test program
|
||||
- create the directory under .../programs
|
||||
- add the directory to WINEROOT/programs/Makefile.in
|
||||
- add the directory to WINEROOT/configure.in
|
||||
- when creating the diff, use -N to force the entire text to be included in
|
||||
the diff
|
||||
|
|
@ -14,6 +14,7 @@
|
|||
|
||||
#include "windows.h"
|
||||
#include "winerror.h"
|
||||
#include "process.h"
|
||||
#include "drive.h"
|
||||
#include "file.h"
|
||||
#include "heap.h"
|
||||
|
@ -454,13 +455,20 @@ done:
|
|||
*/
|
||||
static BOOL32 DIR_TryModulePath( LPCSTR name, DOS_FULL_NAME *full_name )
|
||||
{
|
||||
PDB32 *pdb = PROCESS_Current();
|
||||
|
||||
/* FIXME: for now, GetModuleFileName32A can't return more */
|
||||
/* than OFS_MAXPATHNAME. This may change with Win32. */
|
||||
|
||||
char buffer[OFS_MAXPATHNAME];
|
||||
LPSTR p;
|
||||
|
||||
if (!GetCurrentTask()) return FALSE;
|
||||
GetModuleFileName32A( GetCurrentTask(), buffer, sizeof(buffer) );
|
||||
if (pdb->flags & PDB32_WIN16_PROC) {
|
||||
if (!GetCurrentTask()) return FALSE;
|
||||
GetModuleFileName16( GetCurrentTask(), buffer, sizeof(buffer) );
|
||||
} else {
|
||||
GetModuleFileName32A( 0, buffer, sizeof(buffer) );
|
||||
}
|
||||
if (!(p = strrchr( buffer, '\\' ))) return FALSE;
|
||||
if (sizeof(buffer) - (++p - buffer) <= strlen(name)) return FALSE;
|
||||
strcpy( p, name );
|
||||
|
|
|
@ -18,9 +18,6 @@
|
|||
#include <sys/ioctl.h>
|
||||
#include <time.h>
|
||||
#include <unistd.h>
|
||||
#ifdef HAVE_SYS_STATFS_H
|
||||
# include <sys/statfs.h>
|
||||
#endif
|
||||
|
||||
#include "windows.h"
|
||||
#include "winerror.h"
|
||||
|
@ -619,7 +616,7 @@ HFILE32 DOSFS_OpenDevice( const char *name, int unixmode )
|
|||
break;
|
||||
}
|
||||
}
|
||||
/* FIXME: the rest of the devices ... lptX, comX et.al. */
|
||||
FIXME(dosfs,"device open %s not supported (yet)\n",DOSFS_Devices[i]);
|
||||
return HFILE_ERROR32;
|
||||
}
|
||||
}
|
||||
|
@ -837,7 +834,7 @@ DWORD WINAPI GetLongPathName32A( LPCSTR shortpath, LPSTR longpath,
|
|||
{
|
||||
DOS_FULL_NAME full_name;
|
||||
|
||||
/* FIXME: is it correct to always return a fully qualified short path? */
|
||||
/* FIXME: Is it correct to return a UNIX style path here? */
|
||||
if (!DOSFS_GetFullName( shortpath, TRUE, &full_name )) return 0;
|
||||
lstrcpyn32A( longpath, full_name.long_name, longlen );
|
||||
return strlen( full_name.long_name );
|
||||
|
|
|
@ -16,17 +16,19 @@
|
|||
#include <fcntl.h>
|
||||
#include <errno.h>
|
||||
|
||||
#ifdef HAVE_SYS_VFS_H
|
||||
# include <sys/vfs.h>
|
||||
#endif
|
||||
#ifdef HAVE_SYS_PARAM_H
|
||||
# include <sys/param.h>
|
||||
#endif
|
||||
#ifdef HAVE_SYS_MOUNT_H
|
||||
# include <sys/mount.h>
|
||||
#endif
|
||||
#ifdef HAVE_SYS_STATFS_H
|
||||
# include <sys/statfs.h>
|
||||
#ifdef STATFS_DEFINED_BY_SYS_VFS
|
||||
# include <sys/vfs.h>
|
||||
#else
|
||||
# ifdef STATFS_DEFINED_BY_SYS_MOUNT
|
||||
# include <sys/mount.h>
|
||||
# else
|
||||
# ifdef STATFS_DEFINED_BY_SYS_STATFS
|
||||
# include <sys/statfs.h>
|
||||
# endif
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#include "windows.h"
|
||||
|
|
|
@ -494,7 +494,7 @@ static INT32 PROFILE_GetSection( PROFILESECTION *section, LPCSTR section_name,
|
|||
section = section->next;
|
||||
}
|
||||
buffer[0] = buffer[1] = '\0';
|
||||
return 2;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -144,7 +144,7 @@ static void _dump_DDBLTFAST(DWORD flagmask) {
|
|||
};
|
||||
for (i=0;i<sizeof(flags)/sizeof(flags[0]);i++)
|
||||
if (flags[i].mask & flagmask)
|
||||
DUMP("%s ",i,flags[i].name);
|
||||
DUMP("%s ",flags[i].name);
|
||||
DUMP("\n");
|
||||
}
|
||||
|
||||
|
@ -184,7 +184,7 @@ static void _dump_DDBLT(DWORD flagmask) {
|
|||
};
|
||||
for (i=0;i<sizeof(flags)/sizeof(flags[0]);i++)
|
||||
if (flags[i].mask & flagmask)
|
||||
DUMP("%s ",i,flags[i].name);
|
||||
DUMP("%s ",flags[i].name);
|
||||
}
|
||||
|
||||
static void _dump_DDSCAPS(DWORD flagmask) {
|
||||
|
@ -231,7 +231,7 @@ static void _dump_DDSCAPS(DWORD flagmask) {
|
|||
DUMP("\n");
|
||||
}
|
||||
|
||||
static void _dump_DDCAPS(DWORD flagmask) {
|
||||
void _dump_DDCAPS(DWORD flagmask) {
|
||||
int i;
|
||||
const struct {
|
||||
DWORD mask;
|
||||
|
@ -302,7 +302,7 @@ static void _dump_DDSD(DWORD flagmask) {
|
|||
};
|
||||
for (i=0;i<sizeof(flags)/sizeof(flags[0]);i++)
|
||||
if (flags[i].mask & flagmask)
|
||||
DUMP("%s ",i,flags[i].name);
|
||||
DUMP("%s ",flags[i].name);
|
||||
DUMP("\n");
|
||||
}
|
||||
|
||||
|
@ -1031,6 +1031,29 @@ static HRESULT WINAPI IDirectDrawPalette_SetEntries(
|
|||
this->palents[i].peBlue = palent[i-start].peBlue;
|
||||
this->palents[i].peGreen = palent[i-start].peGreen;
|
||||
}
|
||||
|
||||
/* Insomnia's (Stea Greene's) Mods Start Here */
|
||||
/* FIXME: Still should free individual cells, but this fixes loss of */
|
||||
/* unchange sections of old palette */
|
||||
|
||||
for (i=0;i<start;i++) {
|
||||
xc.red = this->palents[i].peRed<<8;
|
||||
xc.blue = this->palents[i].peBlue<<8;
|
||||
xc.green = this->palents[i].peGreen<<8;
|
||||
xc.flags = DoRed|DoBlue|DoGreen;
|
||||
xc.pixel = i;
|
||||
TSXStoreColor(display,this->cm,&xc);
|
||||
}
|
||||
for (i=end;i<256;i++) {
|
||||
xc.red = this->palents[i].peRed<<8;
|
||||
xc.blue = this->palents[i].peBlue<<8;
|
||||
xc.green = this->palents[i].peGreen<<8;
|
||||
xc.flags = DoRed|DoBlue|DoGreen;
|
||||
xc.pixel = i;
|
||||
TSXStoreColor(display,this->cm,&xc);
|
||||
}
|
||||
/* End Insomnia's Mods */
|
||||
|
||||
XF86DGAInstallColormap(display,DefaultScreen(display),this->cm);
|
||||
return 0;
|
||||
}
|
||||
|
@ -1248,7 +1271,6 @@ static HRESULT WINAPI IDirectDraw_SetDisplayMode(
|
|||
LPDIRECTDRAW this,DWORD width,DWORD height,DWORD depth
|
||||
) {
|
||||
int i,*depths,depcount;
|
||||
char buf[200];
|
||||
|
||||
TRACE(ddraw, "(%p)->(%ld,%ld,%ld)\n",
|
||||
this, width, height, depth);
|
||||
|
|
|
@ -56,35 +56,13 @@ BOOL16 WINAPI DPtoLP16( HDC16 hdc, LPPOINT16 points, INT16 count )
|
|||
*/
|
||||
BOOL32 WINAPI DPtoLP32( HDC32 hdc, LPPOINT32 points, INT32 count )
|
||||
{
|
||||
FLOAT determinant=1.0, x, y;
|
||||
|
||||
DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC );
|
||||
if (!dc) return FALSE;
|
||||
|
||||
if (dc->w.UseWorldXform)
|
||||
{
|
||||
determinant = dc->w.WorldXform.eM11*dc->w.WorldXform.eM22 -
|
||||
dc->w.WorldXform.eM12*dc->w.WorldXform.eM21;
|
||||
if (determinant > -1e-12 && determinant < 1e-12)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
while (count--)
|
||||
{
|
||||
if (dc->w.UseWorldXform)
|
||||
{
|
||||
x = (FLOAT)XDPTOLP( dc, points->x ) - dc->w.WorldXform.eDx;
|
||||
y = (FLOAT)YDPTOLP( dc, points->y ) - dc->w.WorldXform.eDy;
|
||||
points->x = (INT32)( (x*dc->w.WorldXform.eM22 -
|
||||
y*dc->w.WorldXform.eM21) / determinant );
|
||||
points->y = (INT32)( (-x*dc->w.WorldXform.eM12 +
|
||||
y*dc->w.WorldXform.eM11) / determinant );
|
||||
}
|
||||
else
|
||||
{
|
||||
points->x = XDPTOLP( dc, points->x );
|
||||
points->y = YDPTOLP( dc, points->y );
|
||||
}
|
||||
if (!INTERNAL_DPTOLP( dc, points ))
|
||||
return FALSE;
|
||||
points++;
|
||||
}
|
||||
return TRUE;
|
||||
|
@ -114,30 +92,12 @@ BOOL16 WINAPI LPtoDP16( HDC16 hdc, LPPOINT16 points, INT16 count )
|
|||
*/
|
||||
BOOL32 WINAPI LPtoDP32( HDC32 hdc, LPPOINT32 points, INT32 count )
|
||||
{
|
||||
FLOAT x, y;
|
||||
|
||||
DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC );
|
||||
if (!dc) return FALSE;
|
||||
|
||||
while (count--)
|
||||
{
|
||||
if (dc->w.UseWorldXform)
|
||||
{
|
||||
x = (FLOAT)points->x * dc->w.WorldXform.eM11 +
|
||||
(FLOAT)points->y * dc->w.WorldXform.eM21 +
|
||||
dc->w.WorldXform.eDx;
|
||||
y = (FLOAT)points->x * dc->w.WorldXform.eM12 +
|
||||
(FLOAT)points->y * dc->w.WorldXform.eM22 +
|
||||
dc->w.WorldXform.eDy;
|
||||
points->x = XLPTODP( dc, (INT32)x );
|
||||
points->y = YLPTODP( dc, (INT32)y );
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
points->x = XLPTODP( dc, points->x );
|
||||
points->y = YLPTODP( dc, points->y );
|
||||
}
|
||||
INTERNAL_LPTODP( dc, points );
|
||||
points++;
|
||||
}
|
||||
return TRUE;
|
||||
|
@ -230,6 +190,7 @@ INT32 WINAPI SetMapMode32( HDC32 hdc, INT32 mode )
|
|||
return prevMode;
|
||||
}
|
||||
dc->w.MapMode = mode;
|
||||
DC_UpdateXforms( dc );
|
||||
return prevMode;
|
||||
}
|
||||
|
||||
|
@ -277,6 +238,7 @@ BOOL32 WINAPI SetViewportExtEx32( HDC32 hdc, INT32 x, INT32 y, LPSIZE32 size )
|
|||
dc->vportExtX = x;
|
||||
dc->vportExtY = y;
|
||||
if (dc->w.MapMode == MM_ISOTROPIC) MAPPING_FixIsotropic( dc );
|
||||
DC_UpdateXforms( dc );
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
@ -320,6 +282,7 @@ BOOL32 WINAPI SetViewportOrgEx32( HDC32 hdc, INT32 x, INT32 y, LPPOINT32 pt )
|
|||
}
|
||||
dc->vportOrgX = x;
|
||||
dc->vportOrgY = y;
|
||||
DC_UpdateXforms( dc );
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
@ -366,6 +329,7 @@ BOOL32 WINAPI SetWindowExtEx32( HDC32 hdc, INT32 x, INT32 y, LPSIZE32 size )
|
|||
dc->wndExtX = x;
|
||||
dc->wndExtY = y;
|
||||
if (dc->w.MapMode == MM_ISOTROPIC) MAPPING_FixIsotropic( dc );
|
||||
DC_UpdateXforms( dc );
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
@ -408,6 +372,7 @@ BOOL32 WINAPI SetWindowOrgEx32( HDC32 hdc, INT32 x, INT32 y, LPPOINT32 pt )
|
|||
}
|
||||
dc->wndOrgX = x;
|
||||
dc->wndOrgY = y;
|
||||
DC_UpdateXforms( dc );
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
@ -451,6 +416,7 @@ BOOL32 WINAPI OffsetViewportOrgEx32( HDC32 hdc, INT32 x, INT32 y, LPPOINT32 pt)
|
|||
}
|
||||
dc->vportOrgX += x;
|
||||
dc->vportOrgY += y;
|
||||
DC_UpdateXforms( dc );
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
@ -494,6 +460,7 @@ BOOL32 WINAPI OffsetWindowOrgEx32( HDC32 hdc, INT32 x, INT32 y, LPPOINT32 pt )
|
|||
}
|
||||
dc->wndOrgX += x;
|
||||
dc->wndOrgY += y;
|
||||
DC_UpdateXforms( dc );
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
@ -548,6 +515,7 @@ BOOL32 WINAPI ScaleViewportExtEx32( HDC32 hdc, INT32 xNum, INT32 xDenom,
|
|||
if (dc->vportExtX == 0) dc->vportExtX = 1;
|
||||
if (dc->vportExtY == 0) dc->vportExtY = 1;
|
||||
if (dc->w.MapMode == MM_ISOTROPIC) MAPPING_FixIsotropic( dc );
|
||||
DC_UpdateXforms( dc );
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
@ -602,5 +570,6 @@ BOOL32 WINAPI ScaleWindowExtEx32( HDC32 hdc, INT32 xNum, INT32 xDenom,
|
|||
if (dc->wndExtX == 0) dc->wndExtX = 1;
|
||||
if (dc->wndExtY == 0) dc->wndExtY = 1;
|
||||
if (dc->w.MapMode == MM_ISOTROPIC) MAPPING_FixIsotropic( dc );
|
||||
DC_UpdateXforms( dc );
|
||||
return TRUE;
|
||||
}
|
||||
|
|
|
@ -270,7 +270,7 @@ HMETAFILE32 WINAPI CloseMetaFile32(
|
|||
HDC32 hdc /* Metafile DC to close */
|
||||
)
|
||||
{
|
||||
return CloseMetaFile32(hdc);
|
||||
return CloseMetaFile16(hdc);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -219,6 +219,10 @@ BOOL32 WINAPI Rectangle32( HDC32 hdc, INT32 left, INT32 top,
|
|||
{
|
||||
DC * dc = DC_GetDCPtr( hdc );
|
||||
|
||||
if(dc && PATH_IsPathOpen(dc->w.path))
|
||||
if(!PATH_Rectangle(hdc, left, top, right, bottom))
|
||||
return FALSE;
|
||||
|
||||
return dc && dc->funcs->pRectangle &&
|
||||
dc->funcs->pRectangle(dc,left,top,right,bottom);
|
||||
}
|
||||
|
@ -959,7 +963,8 @@ static BOOL32 PAINTING_DrawState32(HDC32 hdc, HBRUSH32 hbr,
|
|||
/* before it is displayed */
|
||||
fg = SetTextColor32(hdc, RGB(0, 0, 0));
|
||||
bg = SetBkColor32(hdc, RGB(255, 255, 255));
|
||||
hbm = NULL; hbmsave = NULL; memdc = NULL; memdc = NULL; hbsave = NULL;
|
||||
hbm = (HBITMAP32)NULL; hbmsave = (HBITMAP32)NULL;
|
||||
memdc = (HDC32)NULL; hbsave = (HBRUSH32)NULL;
|
||||
retval = FALSE; /* assume failure */
|
||||
|
||||
/* From here on we must use "goto cleanup" when something goes wrong */
|
||||
|
|
235
graphics/path.c
235
graphics/path.c
|
@ -62,15 +62,16 @@
|
|||
static BOOL32 PATH_PathToRegion(const GdiPath *pPath, INT32 nPolyFillMode,
|
||||
HRGN32 *pHrgn);
|
||||
static void PATH_EmptyPath(GdiPath *pPath);
|
||||
static BOOL32 PATH_AddEntry(GdiPath *pPath, POINT32 point, BYTE flags);
|
||||
static BOOL32 PATH_AddEntry(GdiPath *pPath, const POINT32 *pPoint,
|
||||
BYTE flags);
|
||||
static BOOL32 PATH_ReserveEntries(GdiPath *pPath, INT32 numEntries);
|
||||
static BOOL32 PATH_GetPathFromHDC(HDC32 hdc, GdiPath **ppPath);
|
||||
static BOOL32 PATH_DoArcPart(GdiPath *pPath, POINT32 corners[],
|
||||
static BOOL32 PATH_DoArcPart(GdiPath *pPath, FLOAT_POINT corners[],
|
||||
double angleStart, double angleEnd, BOOL32 addMoveTo);
|
||||
static void PATH_ScaleNormalizedPoint(POINT32 corners[], double x, double y,
|
||||
POINT32 *pPoint);
|
||||
static void PATH_NormalizePoint(POINT32 corners[], const POINT32 *pPoint,
|
||||
double *pX, double *pY);
|
||||
static void PATH_ScaleNormalizedPoint(FLOAT_POINT corners[], double x,
|
||||
double y, POINT32 *pPoint);
|
||||
static void PATH_NormalizePoint(FLOAT_POINT corners[], const FLOAT_POINT
|
||||
*pPoint, double *pX, double *pY);
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
|
@ -218,6 +219,8 @@ BOOL32 WINAPI CloseFigure32(HDC32 hdc)
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
/* FIXME: Shouldn't we draw a line to the beginning of the figure? */
|
||||
|
||||
/* Set PT_CLOSEFIGURE on the last entry and start a new stroke */
|
||||
if(pPath->numEntriesUsed)
|
||||
{
|
||||
|
@ -436,7 +439,7 @@ BOOL32 WINAPI SelectClipPath32(HDC32 hdc, INT32 iMode)
|
|||
if(PATH_PathToRegion(pPath, GetPolyFillMode32(hdc), &hrgnPath))
|
||||
{
|
||||
hrgnClip=CreateRectRgn32(0, 0, 0, 0);
|
||||
if(hrgnClip==NULL)
|
||||
if(hrgnClip==(HRGN32)0)
|
||||
success=FALSE;
|
||||
else
|
||||
{
|
||||
|
@ -564,7 +567,6 @@ BOOL32 PATH_LineTo(HDC32 hdc, INT32 x, INT32 y)
|
|||
|
||||
/* Check that path is open */
|
||||
if(pPath->state!=PATH_Open)
|
||||
/* FIXME: Do we have to call SetLastError? */
|
||||
return FALSE;
|
||||
|
||||
/* Convert point to device coordinates */
|
||||
|
@ -580,12 +582,93 @@ BOOL32 PATH_LineTo(HDC32 hdc, INT32 x, INT32 y)
|
|||
if(!GetCurrentPositionEx32(hdc, &pointCurPos) ||
|
||||
!LPtoDP32(hdc, &pointCurPos, 1))
|
||||
return FALSE;
|
||||
if(!PATH_AddEntry(pPath, pointCurPos, PT_MOVETO))
|
||||
if(!PATH_AddEntry(pPath, &pointCurPos, PT_MOVETO))
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* Add a PT_LINETO entry */
|
||||
return PATH_AddEntry(pPath, point, PT_LINETO);
|
||||
return PATH_AddEntry(pPath, &point, PT_LINETO);
|
||||
}
|
||||
|
||||
/* PATH_Rectangle
|
||||
*
|
||||
* Should be called when a call to Rectangle is performed on a DC that has
|
||||
* an open path. Returns TRUE if successful, else FALSE.
|
||||
*/
|
||||
BOOL32 PATH_Rectangle(HDC32 hdc, INT32 x1, INT32 y1, INT32 x2, INT32 y2)
|
||||
{
|
||||
GdiPath *pPath;
|
||||
POINT32 corners[2], pointTemp;
|
||||
INT32 temp;
|
||||
|
||||
/* Get pointer to path */
|
||||
if(!PATH_GetPathFromHDC(hdc, &pPath))
|
||||
return FALSE;
|
||||
|
||||
/* Check that path is open */
|
||||
if(pPath->state!=PATH_Open)
|
||||
return FALSE;
|
||||
|
||||
/* Convert points to device coordinates */
|
||||
corners[0].x=x1;
|
||||
corners[0].y=y1;
|
||||
corners[1].x=x2;
|
||||
corners[1].y=y2;
|
||||
if(!LPtoDP32(hdc, corners, 2))
|
||||
return FALSE;
|
||||
|
||||
/* Make sure first corner is top left and second corner is bottom right */
|
||||
if(corners[0].x>corners[1].x)
|
||||
{
|
||||
temp=corners[0].x;
|
||||
corners[0].x=corners[1].x;
|
||||
corners[1].x=temp;
|
||||
}
|
||||
if(corners[0].y>corners[1].y)
|
||||
{
|
||||
temp=corners[0].y;
|
||||
corners[0].y=corners[1].y;
|
||||
corners[1].y=temp;
|
||||
}
|
||||
|
||||
/* In GM_COMPATIBLE, don't include bottom and right edges */
|
||||
if(GetGraphicsMode(hdc)==GM_COMPATIBLE)
|
||||
{
|
||||
corners[1].x--;
|
||||
corners[1].y--;
|
||||
}
|
||||
|
||||
/* Close any previous figure */
|
||||
if(!CloseFigure32(hdc))
|
||||
{
|
||||
/* The CloseFigure call shouldn't have failed */
|
||||
assert(FALSE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* Add four points to the path */
|
||||
pointTemp.x=corners[1].x;
|
||||
pointTemp.y=corners[0].y;
|
||||
if(!PATH_AddEntry(pPath, &pointTemp, PT_MOVETO))
|
||||
return FALSE;
|
||||
if(!PATH_AddEntry(pPath, corners, PT_LINETO))
|
||||
return FALSE;
|
||||
pointTemp.x=corners[0].x;
|
||||
pointTemp.y=corners[1].y;
|
||||
if(!PATH_AddEntry(pPath, &pointTemp, PT_LINETO))
|
||||
return FALSE;
|
||||
if(!PATH_AddEntry(pPath, corners+1, PT_LINETO))
|
||||
return FALSE;
|
||||
|
||||
/* Close the rectangle figure */
|
||||
if(!CloseFigure32(hdc))
|
||||
{
|
||||
/* The CloseFigure call shouldn't have failed */
|
||||
assert(FALSE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* PATH_Ellipse
|
||||
|
@ -596,7 +679,9 @@ BOOL32 PATH_LineTo(HDC32 hdc, INT32 x, INT32 y)
|
|||
*/
|
||||
BOOL32 PATH_Ellipse(HDC32 hdc, INT32 x1, INT32 y1, INT32 x2, INT32 y2)
|
||||
{
|
||||
return PATH_Arc(hdc, x1, y1, x2, y2, x1, 0, x1, 0);
|
||||
// TODO: This should probably be revised to call PATH_AngleArc
|
||||
// (once it exists)
|
||||
return PATH_Arc(hdc, x1, y1, x2, y2, x1, (y1+y2)/2, x1, (y1+y2)/2);
|
||||
}
|
||||
|
||||
/* PATH_Arc
|
||||
|
@ -608,16 +693,23 @@ BOOL32 PATH_Ellipse(HDC32 hdc, INT32 x1, INT32 y1, INT32 x2, INT32 y2)
|
|||
BOOL32 PATH_Arc(HDC32 hdc, INT32 x1, INT32 y1, INT32 x2, INT32 y2,
|
||||
INT32 xStart, INT32 yStart, INT32 xEnd, INT32 yEnd)
|
||||
{
|
||||
GdiPath *pPath;
|
||||
double angleStart, angleEnd, angleStartQuadrant, angleEndQuadrant=0.0;
|
||||
/* Initialize angleEndQuadrant to silence gcc's warning */
|
||||
double x, y;
|
||||
POINT32 corners[2], pointStart, pointEnd;
|
||||
BOOL32 start, end;
|
||||
INT32 temp;
|
||||
GdiPath *pPath;
|
||||
DC *pDC;
|
||||
double angleStart, angleEnd, angleStartQuadrant, angleEndQuadrant=0.0;
|
||||
/* Initialize angleEndQuadrant to silence gcc's warning */
|
||||
double x, y;
|
||||
FLOAT_POINT corners[2], pointStart, pointEnd;
|
||||
BOOL32 start, end;
|
||||
INT32 temp;
|
||||
|
||||
/* FIXME: This function should check for all possible error returns */
|
||||
/* FIXME: Do we have to respect newStroke? */
|
||||
|
||||
/* Get pointer to DC */
|
||||
pDC=DC_GetDCPtr(hdc);
|
||||
if(pDC==NULL)
|
||||
return FALSE;
|
||||
|
||||
/* Get pointer to path */
|
||||
if(!PATH_GetPathFromHDC(hdc, &pPath))
|
||||
return FALSE;
|
||||
|
@ -626,34 +718,28 @@ BOOL32 PATH_Arc(HDC32 hdc, INT32 x1, INT32 y1, INT32 x2, INT32 y2,
|
|||
if(pPath->state!=PATH_Open)
|
||||
return FALSE;
|
||||
|
||||
/* FIXME: Do we have to close the current figure? */
|
||||
|
||||
/* Check for zero height / width */
|
||||
/* FIXME: Should we do this before or after LPtoDP? */
|
||||
/* FIXME: Only in GM_COMPATIBLE? */
|
||||
if(x1==x2 || y1==y2)
|
||||
return TRUE;
|
||||
|
||||
/* In GM_COMPATIBLE, don't include bottom and right edges */
|
||||
if(GetGraphicsMode(hdc)==GM_COMPATIBLE)
|
||||
{
|
||||
/* FIXME: Should we do this before or after LPtoDP? */
|
||||
x2--;
|
||||
y2--;
|
||||
}
|
||||
|
||||
/* Convert points to device coordinates */
|
||||
corners[0].x=x1;
|
||||
corners[0].y=y1;
|
||||
corners[1].x=x2;
|
||||
corners[1].y=y2;
|
||||
pointStart.x=xStart;
|
||||
pointStart.y=yStart;
|
||||
pointEnd.x=xEnd;
|
||||
pointEnd.y=yEnd;
|
||||
if(!LPtoDP32(hdc, corners, 2) || !LPtoDP32(hdc, &pointStart, 1) ||
|
||||
!LPtoDP32(hdc, &pointEnd, 1))
|
||||
return FALSE;
|
||||
corners[0].x=(FLOAT)x1;
|
||||
corners[0].y=(FLOAT)y1;
|
||||
corners[1].x=(FLOAT)x2;
|
||||
corners[1].y=(FLOAT)y2;
|
||||
pointStart.x=(FLOAT)xStart;
|
||||
pointStart.y=(FLOAT)yStart;
|
||||
pointEnd.x=(FLOAT)xEnd;
|
||||
pointEnd.y=(FLOAT)yEnd;
|
||||
INTERNAL_LPTODP_FLOAT(pDC, corners);
|
||||
INTERNAL_LPTODP_FLOAT(pDC, corners+1);
|
||||
INTERNAL_LPTODP_FLOAT(pDC, &pointStart);
|
||||
INTERNAL_LPTODP_FLOAT(pDC, &pointEnd);
|
||||
|
||||
/* Make sure first corner is top left and right corner is bottom right */
|
||||
/* FIXME: Should we do this before or after LPtoDP? */
|
||||
/* Make sure first corner is top left and second corner is bottom right */
|
||||
if(corners[0].x>corners[1].x)
|
||||
{
|
||||
temp=corners[0].x;
|
||||
|
@ -691,6 +777,13 @@ BOOL32 PATH_Arc(HDC32 hdc, INT32 x1, INT32 y1, INT32 x2, INT32 y2,
|
|||
}
|
||||
}
|
||||
|
||||
/* In GM_COMPATIBLE, don't include bottom and right edges */
|
||||
if(GetGraphicsMode(hdc)==GM_COMPATIBLE)
|
||||
{
|
||||
corners[1].x--;
|
||||
corners[1].y--;
|
||||
}
|
||||
|
||||
/* Add the arc to the path with one Bezier spline per quadrant that the
|
||||
* arc spans */
|
||||
start=TRUE;
|
||||
|
@ -717,9 +810,9 @@ BOOL32 PATH_Arc(HDC32 hdc, INT32 x1, INT32 y1, INT32 x2, INT32 y2,
|
|||
|
||||
/* Have we reached the last part of the arc? */
|
||||
if((GetArcDirection32(hdc)==AD_CLOCKWISE &&
|
||||
angleEnd<=angleEndQuadrant) ||
|
||||
angleEnd<angleEndQuadrant) ||
|
||||
(GetArcDirection32(hdc)==AD_COUNTERCLOCKWISE &&
|
||||
angleEnd>=angleEndQuadrant))
|
||||
angleEnd>angleEndQuadrant))
|
||||
{
|
||||
/* Adjust the end angle for this quadrant */
|
||||
angleEndQuadrant=angleEnd;
|
||||
|
@ -791,7 +884,7 @@ static BOOL32 PATH_PathToRegion(const GdiPath *pPath, INT32 nPolyFillMode,
|
|||
/* Create a region from the strokes */
|
||||
hrgn=CreatePolyPolygonRgn32(pPath->pPoints, pNumPointsInStroke,
|
||||
numStrokes, nPolyFillMode);
|
||||
if(hrgn==NULL)
|
||||
if(hrgn==(HRGN32)0)
|
||||
{
|
||||
SetLastError(ERROR_NOT_ENOUGH_MEMORY);
|
||||
return FALSE;
|
||||
|
@ -823,10 +916,14 @@ static void PATH_EmptyPath(GdiPath *pPath)
|
|||
* or PT_BEZIERTO, optionally ORed with PT_CLOSEFIGURE. Returns TRUE if
|
||||
* successful, FALSE otherwise (e.g. if not enough memory was available).
|
||||
*/
|
||||
BOOL32 PATH_AddEntry(GdiPath *pPath, POINT32 point, BYTE flags)
|
||||
BOOL32 PATH_AddEntry(GdiPath *pPath, const POINT32 *pPoint, BYTE flags)
|
||||
{
|
||||
assert(pPath!=NULL);
|
||||
|
||||
/* FIXME: If newStroke is true, perhaps we want to check that we're
|
||||
* getting a PT_MOVETO
|
||||
*/
|
||||
|
||||
/* Check that path is open */
|
||||
if(pPath->state!=PATH_Open)
|
||||
return FALSE;
|
||||
|
@ -836,9 +933,13 @@ BOOL32 PATH_AddEntry(GdiPath *pPath, POINT32 point, BYTE flags)
|
|||
return FALSE;
|
||||
|
||||
/* Store information in path entry */
|
||||
pPath->pPoints[pPath->numEntriesUsed]=point;
|
||||
pPath->pPoints[pPath->numEntriesUsed]=*pPoint;
|
||||
pPath->pFlags[pPath->numEntriesUsed]=flags;
|
||||
|
||||
/* If this is PT_CLOSEFIGURE, we have to start a new stroke next time */
|
||||
if((flags & PT_CLOSEFIGURE) == PT_CLOSEFIGURE)
|
||||
pPath->newStroke=TRUE;
|
||||
|
||||
/* Increment entry count */
|
||||
pPath->numEntriesUsed++;
|
||||
|
||||
|
@ -936,7 +1037,7 @@ static BOOL32 PATH_GetPathFromHDC(HDC32 hdc, GdiPath **ppPath)
|
|||
* point is added to the path; otherwise, it is assumed that the current
|
||||
* position is equal to the first control point.
|
||||
*/
|
||||
static BOOL32 PATH_DoArcPart(GdiPath *pPath, POINT32 corners[],
|
||||
static BOOL32 PATH_DoArcPart(GdiPath *pPath, FLOAT_POINT corners[],
|
||||
double angleStart, double angleEnd, BOOL32 addMoveTo)
|
||||
{
|
||||
double halfAngle, a;
|
||||
|
@ -950,21 +1051,30 @@ static BOOL32 PATH_DoArcPart(GdiPath *pPath, POINT32 corners[],
|
|||
|
||||
/* Compute control points */
|
||||
halfAngle=(angleEnd-angleStart)/2.0;
|
||||
a=4.0/3.0*(1-cos(halfAngle))/sin(halfAngle);
|
||||
xNorm[0]=cos(angleStart);
|
||||
yNorm[0]=sin(angleStart);
|
||||
xNorm[1]=xNorm[0] - a*yNorm[0];
|
||||
yNorm[1]=yNorm[0] + a*xNorm[0];
|
||||
xNorm[3]=cos(angleEnd);
|
||||
yNorm[3]=sin(angleEnd);
|
||||
xNorm[2]=xNorm[3] + a*yNorm[3];
|
||||
yNorm[2]=yNorm[3] - a*xNorm[3];
|
||||
if(fabs(halfAngle)>1e-8)
|
||||
{
|
||||
a=4.0/3.0*(1-cos(halfAngle))/sin(halfAngle);
|
||||
xNorm[0]=cos(angleStart);
|
||||
yNorm[0]=sin(angleStart);
|
||||
xNorm[1]=xNorm[0] - a*yNorm[0];
|
||||
yNorm[1]=yNorm[0] + a*xNorm[0];
|
||||
xNorm[3]=cos(angleEnd);
|
||||
yNorm[3]=sin(angleEnd);
|
||||
xNorm[2]=xNorm[3] + a*yNorm[3];
|
||||
yNorm[2]=yNorm[3] - a*xNorm[3];
|
||||
}
|
||||
else
|
||||
for(i=0; i<4; i++)
|
||||
{
|
||||
xNorm[i]=cos(angleStart);
|
||||
yNorm[i]=sin(angleStart);
|
||||
}
|
||||
|
||||
/* Add starting point to path if desired */
|
||||
if(addMoveTo)
|
||||
{
|
||||
PATH_ScaleNormalizedPoint(corners, xNorm[0], yNorm[0], &point);
|
||||
if(!PATH_AddEntry(pPath, point, PT_MOVETO))
|
||||
if(!PATH_AddEntry(pPath, &point, PT_MOVETO))
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
@ -972,7 +1082,7 @@ static BOOL32 PATH_DoArcPart(GdiPath *pPath, POINT32 corners[],
|
|||
for(i=1; i<4; i++)
|
||||
{
|
||||
PATH_ScaleNormalizedPoint(corners, xNorm[i], yNorm[i], &point);
|
||||
if(!PATH_AddEntry(pPath, point, PT_BEZIERTO))
|
||||
if(!PATH_AddEntry(pPath, &point, PT_BEZIERTO))
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
@ -986,12 +1096,12 @@ static BOOL32 PATH_DoArcPart(GdiPath *pPath, POINT32 corners[],
|
|||
* coordinates (-1.0, -1.0) correspond to corners[0], the coordinates
|
||||
* (1.0, 1.0) correspond to corners[1].
|
||||
*/
|
||||
static void PATH_ScaleNormalizedPoint(POINT32 corners[], double x, double y,
|
||||
POINT32 *pPoint)
|
||||
static void PATH_ScaleNormalizedPoint(FLOAT_POINT corners[], double x,
|
||||
double y, POINT32 *pPoint)
|
||||
{
|
||||
pPoint->x=(INT32)floor( (double)corners[0].x +
|
||||
pPoint->x=GDI_ROUND( (double)corners[0].x +
|
||||
(double)(corners[1].x-corners[0].x)*0.5*(x+1.0) );
|
||||
pPoint->y=(INT32)floor( (double)corners[0].y +
|
||||
pPoint->y=GDI_ROUND( (double)corners[0].y +
|
||||
(double)(corners[1].y-corners[0].y)*0.5*(y+1.0) );
|
||||
}
|
||||
|
||||
|
@ -1000,7 +1110,8 @@ static void PATH_ScaleNormalizedPoint(POINT32 corners[], double x, double y,
|
|||
* Normalizes a point with respect to the box whose corners are passed in
|
||||
* "corners". The normalized coordinates are stored in "*pX" and "*pY".
|
||||
*/
|
||||
static void PATH_NormalizePoint(POINT32 corners[], const POINT32 *pPoint,
|
||||
static void PATH_NormalizePoint(FLOAT_POINT corners[],
|
||||
const FLOAT_POINT *pPoint,
|
||||
double *pX, double *pY)
|
||||
{
|
||||
*pX=(double)(pPoint->x-corners[0].x)/(double)(corners[1].x-corners[0].x) *
|
||||
|
|
|
@ -200,8 +200,8 @@ BOOL32 WIN16DRV_EnumDeviceFonts( DC* dc, LPLOGFONT16 plf,
|
|||
*/
|
||||
|
||||
|
||||
WORD WINAPI WineEnumDFontCallback(LPLOGFONT16 lpLogFont,
|
||||
LPTEXTMETRIC16 lpTextMetrics,
|
||||
WORD WINAPI WineEnumDFontCallback(LPENUMLOGFONT16 lpLogFont,
|
||||
LPNEWTEXTMETRIC16 lpTextMetrics,
|
||||
WORD wFontType, LONG lpClientData)
|
||||
{
|
||||
TRACE(win16drv, "In WineEnumDFontCallback plf=%p\n", lpLogFont);
|
||||
|
|
|
@ -674,7 +674,7 @@ int WINAPI dmRealizeObject(LPPDEVICE lpDestDev, INT16 wStyle, LPSTR lpInObj, LPS
|
|||
if (wStyle < 0) { /* Free extra memory of given object's structure */
|
||||
switch ( -wStyle ) {
|
||||
case DRVOBJ_PEN: {
|
||||
LPLOGPEN16 DeletePen = (LPLOGPEN16)lpInObj;
|
||||
/* LPLOGPEN16 DeletePen = (LPLOGPEN16)lpInObj; */
|
||||
|
||||
fprintf(stderr, "DRVOBJ_PEN_delete\n");
|
||||
break;
|
||||
|
@ -684,8 +684,8 @@ int WINAPI dmRealizeObject(LPPDEVICE lpDestDev, INT16 wStyle, LPSTR lpInObj, LPS
|
|||
break;
|
||||
}
|
||||
case DRVOBJ_FONT: {
|
||||
LPTEXTXFORM16 TextXForm
|
||||
= (LPTEXTXFORM16)lpTextXForm;
|
||||
/* LPTEXTXFORM16 TextXForm
|
||||
= (LPTEXTXFORM16)lpTextXForm; */
|
||||
fprintf(stderr, "DRVOBJ_FONT_delete\n");
|
||||
break;
|
||||
}
|
||||
|
@ -720,7 +720,7 @@ int WINAPI dmRealizeObject(LPPDEVICE lpDestDev, INT16 wStyle, LPSTR lpInObj, LPS
|
|||
case DRVOBJ_BRUSH: {
|
||||
LPLOGBRUSH16 InBrush = (LPLOGBRUSH16)lpInObj;
|
||||
LPLOGBRUSH16 OutBrush = (LPLOGBRUSH16)lpOutObj;
|
||||
LPPOINT16 Point = (LPPOINT16)lpTextXForm;
|
||||
/* LPPOINT16 Point = (LPPOINT16)lpTextXForm; */
|
||||
|
||||
fprintf(stderr, "DRVOBJ_BRUSH\n");
|
||||
if (!lpOutObj) return sizeof(LOGBRUSH16);
|
||||
|
@ -734,8 +734,8 @@ int WINAPI dmRealizeObject(LPPDEVICE lpDestDev, INT16 wStyle, LPSTR lpInObj, LPS
|
|||
}
|
||||
}
|
||||
case DRVOBJ_FONT: {
|
||||
LPTEXTXFORM16 TextXForm
|
||||
= (LPTEXTXFORM16)lpTextXForm;
|
||||
/* LPTEXTXFORM16 TextXForm
|
||||
= (LPTEXTXFORM16)lpTextXForm; */
|
||||
fprintf(stderr, "DRVOBJ_FONT\n");
|
||||
return 0;/* DISPLAY.DRV doesn't realize fonts */
|
||||
}
|
||||
|
|
|
@ -70,7 +70,7 @@ HDC16 WINAPI WinGCreateDC16(void)
|
|||
__initWinG();
|
||||
|
||||
if( __WinGOK > 0 )
|
||||
return CreateCompatibleDC16(NULL);
|
||||
return CreateCompatibleDC16(0);
|
||||
return (HDC16)NULL;
|
||||
}
|
||||
|
||||
|
|
|
@ -91,7 +91,7 @@ X11DRV_DrawArc( DC *dc, INT32 left, INT32 top, INT32 right,
|
|||
xend = XLPTODP( dc, xend );
|
||||
yend = YLPTODP( dc, yend );
|
||||
|
||||
if ((left == right) || (top == bottom)) return FALSE;
|
||||
if ((left == right) || (top == bottom)) return TRUE;
|
||||
|
||||
if (left > right) { tmp=left; left=right; right=tmp; }
|
||||
if (top > bottom) { tmp=top; top=bottom; bottom=tmp; }
|
||||
|
|
|
@ -460,8 +460,8 @@ static BOOL32 LFD_ComposeLFD( fontObject* fo,
|
|||
char *s;
|
||||
sprintf(h_string, "[%+f%+f%+f%+f]", h_matrix[0], h_matrix[1], h_matrix[2], h_matrix[3]);
|
||||
sprintf(point_string, "[%+f%+f%+f%+f]", point_matrix[0], point_matrix[1], point_matrix[2], point_matrix[3]);
|
||||
while (s = strchr(h_string, '-')) *s='~';
|
||||
while (s = strchr(point_string, '-')) *s='~';
|
||||
while ((s = strchr(h_string, '-'))) *s='~';
|
||||
while ((s = strchr(point_string, '-'))) *s='~';
|
||||
} else {
|
||||
sprintf(h_string, "%d", h);
|
||||
sprintf(point_string, "%d", point);
|
||||
|
|
|
@ -186,6 +186,7 @@ BOOL32 BUILTIN_Init(void)
|
|||
NE_MODULE *pModule;
|
||||
WORD vector;
|
||||
HMODULE16 hModule;
|
||||
WORD cs, ds;
|
||||
|
||||
fnBUILTIN_LoadModule = BUILTIN_LoadModule;
|
||||
|
||||
|
@ -197,9 +198,9 @@ BOOL32 BUILTIN_Init(void)
|
|||
|
||||
/* Set the USER and GDI heap selectors */
|
||||
|
||||
pModule = MODULE_GetPtr16( GetModuleHandle16( "USER" ));
|
||||
pModule = NE_GetPtr( GetModuleHandle16( "USER" ));
|
||||
USER_HeapSel = (NE_SEG_TABLE( pModule ) + pModule->dgroup - 1)->selector;
|
||||
pModule = MODULE_GetPtr16( GetModuleHandle16( "GDI" ));
|
||||
pModule = NE_GetPtr( GetModuleHandle16( "GDI" ));
|
||||
GDI_HeapSel = (NE_SEG_TABLE( pModule ) + pModule->dgroup - 1)->selector;
|
||||
|
||||
/* Initialize KERNEL.178 (__WINFLAGS) with the correct flags value */
|
||||
|
@ -207,6 +208,12 @@ BOOL32 BUILTIN_Init(void)
|
|||
hModule = GetModuleHandle16( "KERNEL" );
|
||||
NE_SetEntryPoint( hModule, 178, GetWinFlags() );
|
||||
|
||||
/* Initialize KERNEL.454/455 (__FLATCS/__FLATDS) */
|
||||
|
||||
GET_CS(cs); GET_DS(ds);
|
||||
NE_SetEntryPoint( hModule, 454, cs );
|
||||
NE_SetEntryPoint( hModule, 455, ds );
|
||||
|
||||
/* Initialize the real-mode selector entry points */
|
||||
|
||||
#define SET_ENTRY_POINT( num, addr ) \
|
||||
|
@ -247,7 +254,7 @@ BOOL32 BUILTIN_Init(void)
|
|||
* Load a built-in module. If the 'force' parameter is FALSE, we only
|
||||
* load the module if it has not been disabled via the -dll option.
|
||||
*/
|
||||
HMODULE32 BUILTIN_LoadModule( LPCSTR name, BOOL32 force )
|
||||
HMODULE16 BUILTIN_LoadModule( LPCSTR name, BOOL32 force )
|
||||
{
|
||||
BUILTIN16_DLL *table;
|
||||
char dllname[16], *p;
|
||||
|
@ -260,8 +267,7 @@ HMODULE32 BUILTIN_LoadModule( LPCSTR name, BOOL32 force )
|
|||
|
||||
for (table = BuiltinDLLs; table->descr; table++)
|
||||
if (!lstrcmpi32A( table->descr->name, dllname )) break;
|
||||
if (!table->descr) return BUILTIN32_LoadModule( name, force,
|
||||
PROCESS_Current() );
|
||||
if (!table->descr) return 0;
|
||||
if ((table->flags & DLL_FLAG_NOT_USED) && !force) return 0;
|
||||
|
||||
return BUILTIN_DoLoadModule16( table->descr );
|
||||
|
@ -281,7 +287,7 @@ LPCSTR BUILTIN_GetEntryPoint16( WORD cs, WORD ip, WORD *pOrd )
|
|||
register BYTE *p;
|
||||
NE_MODULE *pModule;
|
||||
|
||||
if (!(pModule = MODULE_GetPtr16( FarGetOwner( GlobalHandle16(cs) ))))
|
||||
if (!(pModule = NE_GetPtr( FarGetOwner( GlobalHandle16(cs) ))))
|
||||
return NULL;
|
||||
|
||||
/* Search for the ordinal */
|
||||
|
|
|
@ -3,7 +3,7 @@ type win16
|
|||
|
||||
1 pascal16 GetOpenFileName(segptr) GetOpenFileName16
|
||||
2 pascal16 GetSaveFileName(segptr) GetSaveFileName16
|
||||
5 pascal16 ChooseColor(ptr) ChooseColor
|
||||
5 pascal16 ChooseColor(ptr) ChooseColor16
|
||||
6 pascal FileOpenDlgProc(word word word long) FileOpenDlgProc
|
||||
7 pascal FileSaveDlgProc(word word word long) FileSaveDlgProc
|
||||
8 pascal ColorDlgProc(word word word long) ColorDlgProc
|
||||
|
|
|
@ -4,7 +4,7 @@ type win16
|
|||
2 pascal16 DdeInitialize(ptr segptr long long) DdeInitialize16
|
||||
3 pascal16 DdeUninitialize(long) DdeUninitialize16
|
||||
4 pascal DdeConnectList(long word word word ptr) DdeConnectList16
|
||||
5 pascal DdeQueryNextServer(word word) DdeQueryNextServer
|
||||
5 pascal DdeQueryNextServer(word word) DdeQueryNextServer16
|
||||
6 pascal DdeDisconnectList(word) DdeDisconnectList16
|
||||
7 pascal DdeConnect(long long long ptr) DdeConnect16
|
||||
8 pascal16 DdeDisconnect(long) DdeDisconnect16
|
||||
|
|
|
@ -202,7 +202,7 @@ file krnl386.exe
|
|||
200 return ValidateFreeSpaces 0 0
|
||||
201 stub ReplaceInst
|
||||
202 stub RegisterPtrace
|
||||
203 register DebugBreak() DebugBreak16
|
||||
203 register DebugBreak() DebugBreak
|
||||
204 stub SwapRecording
|
||||
205 stub CVWBreak
|
||||
206 pascal16 AllocSelectorArray(word) AllocSelectorArray
|
||||
|
@ -277,9 +277,9 @@ file krnl386.exe
|
|||
354 pascal GetAppCompatFlags(word) GetAppCompatFlags16
|
||||
355 pascal16 GetWinDebugInfo(ptr word) GetWinDebugInfo
|
||||
356 pascal16 SetWinDebugInfo(ptr) SetWinDebugInfo
|
||||
357 stub KERNEL_357
|
||||
357 pascal MapSL(segptr) MapSL
|
||||
358 pascal MapLS(long) MapLS
|
||||
359 pascal UnMapLS(ptr) UnMapLS
|
||||
359 pascal UnMapLS(segptr) UnMapLS
|
||||
360 stub OpenFileEx
|
||||
#361 PIGLET_361
|
||||
365 stub KERNEL_365
|
||||
|
@ -311,15 +311,15 @@ file krnl386.exe
|
|||
447 stub KERNEL_447
|
||||
449 pascal KERNEL_449() KERNEL_449
|
||||
450 pascal16 KERNEL_450() stub_KERNEL_450
|
||||
454 stub KERNEL_454
|
||||
455 stub KERNEL_455
|
||||
454 equate __FLATCS 0 # initialized by BUILTIN_Init()
|
||||
455 equate __FLATDS 0 # initialized by BUILTIN_Init()
|
||||
471 pascal KERNEL_471() _KERNEL_471
|
||||
472 register KERNEL_472() _KERNEL_472
|
||||
473 stub KERNEL_473
|
||||
475 stub KERNEL_475
|
||||
475 return KERNEL_475 0 0
|
||||
480 stub KERNEL_480
|
||||
481 stub KERNEL_481
|
||||
482 stub KERNEL_482
|
||||
482 pascal LoadLibrary32(str) LoadLibrary32A
|
||||
485 stub KERNEL_485
|
||||
491 stub RegisterServiceProcess
|
||||
500 stub KERNEL_500
|
||||
|
@ -346,16 +346,16 @@ file krnl386.exe
|
|||
604 stub KERNEL_604
|
||||
605 stub KERNEL_605
|
||||
606 stub KERNEL_606
|
||||
607 stub KERNEL_607
|
||||
608 stub KERNEL_608
|
||||
611 stub KERNEL_611
|
||||
607 pascal KERNEL_607(long long long) _KERNEL_607
|
||||
608 pascal KERNEL_608(long long long) _KERNEL_608
|
||||
611 pascal KERNEL_611(long long) _KERNEL_611
|
||||
612 stub KERNEL_612
|
||||
613 stub KERNEL_613
|
||||
614 stub KERNEL_614
|
||||
619 pascal KERNEL_619(word long long) _KERNEL_619
|
||||
621 stub KERNEL_621
|
||||
627 stub IsBadFlatReadWritePtr
|
||||
630 stub KERNEL_630
|
||||
631 register FUNC004(word word word) FUNC004 #C16ThkSl01?
|
||||
651 stub KERNEL_651 #ThunkConnect16?
|
||||
630 register C16ThkSL() C16ThkSL
|
||||
631 register C16ThkSL01() C16ThkSL01
|
||||
651 pascal ThunkConnect16(str str word long ptr str word) ThunkConnect16
|
||||
700 pascal KERNEL_700() stub_KERNEL_700
|
||||
|
|
|
@ -86,6 +86,7 @@ static HANDLER_DEF(SIGNAL_fault)
|
|||
*
|
||||
* Set the register values from a sigcontext.
|
||||
*/
|
||||
#ifdef UNUSED_FUNCTIONS
|
||||
static void SIGNAL_SetSigContext( const SIGCONTEXT *sigcontext,
|
||||
CONTEXT *context )
|
||||
{
|
||||
|
@ -116,6 +117,7 @@ static void SIGNAL_SetSigContext( const SIGCONTEXT *sigcontext,
|
|||
GS_reg(context) &= 0xffff;
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
|
@ -123,6 +125,7 @@ static void SIGNAL_SetSigContext( const SIGCONTEXT *sigcontext,
|
|||
*
|
||||
* Build a sigcontext from the register values.
|
||||
*/
|
||||
#ifdef UNUSED_FUNCTIONS
|
||||
static void SIGNAL_GetSigContext( SIGCONTEXT *sigcontext,
|
||||
const CONTEXT *context )
|
||||
{
|
||||
|
@ -151,6 +154,7 @@ static void SIGNAL_GetSigContext( SIGCONTEXT *sigcontext,
|
|||
SET_GS( GS_reg(&DEBUG_context) );
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
|
|
|
@ -26,3 +26,15 @@
|
|||
|
||||
/* Define if the struct statfs has the member bfree */
|
||||
#undef STATFS_HAS_BFREE
|
||||
|
||||
/* Define if we have a working sigaltstack */
|
||||
#undef HAVE_WORKING_SIGALTSTACK
|
||||
|
||||
/* Define if the struct statfs is defined by <sys/vfs.h> */
|
||||
#undef STATFS_DEFINED_BY_SYS_VFS
|
||||
|
||||
/* Define if the struct statfs is defined by <sys/statfs.h> */
|
||||
#undef STATFS_DEFINED_BY_SYS_STATFS
|
||||
|
||||
/* Define if the struct statfs is defined by <sys/mount.h> */
|
||||
#undef STATFS_DEFINED_BY_SYS_MOUNT
|
||||
|
|
|
@ -9,6 +9,30 @@
|
|||
|
||||
void WINAPI InitCommonControls(void);
|
||||
|
||||
typedef struct tagINITCOMMONCONTROLSEX {
|
||||
DWORD dwSize;
|
||||
DWORD dwICC;
|
||||
} INITCOMMONCONTROLSEX, *LPINITCOMMONCONTROLSEX;
|
||||
|
||||
BOOL32 WINAPI InitCommonControlsEx(LPINITCOMMONCONTROLSEX);
|
||||
|
||||
#define ICC_LISTVIEW_CLASSES 0x00000001 /* listview, header */
|
||||
#define ICC_TREEVIEW_CLASSES 0x00000002 /* treeview, tooltips */
|
||||
#define ICC_BAR_CLASSES 0x00000004 /* toolbar, statusbar, trackbar, tooltips */
|
||||
#define ICC_TAB_CLASSES 0x00000008 /* tab, tooltips */
|
||||
#define ICC_UPDOWN_CLASS 0x00000010 /* updown */
|
||||
#define ICC_PROGRESS_CLASS 0x00000020 /* progress */
|
||||
#define ICC_HOTKEY_CLASS 0x00000040 /* hotkey */
|
||||
#define ICC_ANIMATE_CLASS 0x00000080 /* animate */
|
||||
#define ICC_WIN95_CLASSES 0x000000FF
|
||||
#define ICC_DATE_CLASSES 0x00000100 /* month picker, date picker, time picker, updown */
|
||||
#define ICC_USEREX_CLASSES 0x00000200 /* comboex */
|
||||
#define ICC_COOL_CLASSES 0x00000400 /* rebar (coolbar) */
|
||||
#define ICC_INTERNET_CLASSES 0x00000800 /* IP address, ... */
|
||||
#define ICC_PAGESCROLLER_CLASS 0x00001000 /* page scroller */
|
||||
#define ICC_NATIVEFNTCTL_CLASS 0x00002000 /* native font control ???*/
|
||||
|
||||
|
||||
/* common control styles */
|
||||
|
||||
#define CCS_TOP 0x00000001L
|
||||
|
@ -25,10 +49,31 @@ void WINAPI InitCommonControls(void);
|
|||
|
||||
|
||||
/* common control shared messages */
|
||||
|
||||
#define CCM_FIRST 0x2000
|
||||
|
||||
#define CCM_SETBKCOLOR (CCM_FIRST+1) // lParam = bkColor
|
||||
#define CCM_SETBKCOLOR (CCM_FIRST+1) /* lParam = bkColor */
|
||||
|
||||
|
||||
/* common notification codes */
|
||||
#define NM_FIRST (0U-0U)
|
||||
#define NM_LAST (0U-99U)
|
||||
|
||||
#define NM_OUTOFMEMORY (NM_FIRST-1)
|
||||
#define NM_CLICK (NM_FIRST-2)
|
||||
#define NM_DBLCLK (NM_FIRST-3)
|
||||
#define NM_RETURN (NM_FIRST-4)
|
||||
#define NM_RCLICK (NM_FIRST-5)
|
||||
#define NM_RDBLCLK (NM_FIRST-6)
|
||||
#define NM_SETFOCUS (NM_FIRST-7)
|
||||
#define NM_KILLFOCUS (NM_FIRST-8)
|
||||
#define NM_CUSTOMDRAW (NM_FIRST-12)
|
||||
#define NM_HOVER (NM_FIRST-13)
|
||||
#define NM_NCHITTEST (NM_FIRST-14)
|
||||
#define NM_KEYDOWN (NM_FIRST-15)
|
||||
#define NM_RELEASEDCAPTURE (NM_FIRST-16)
|
||||
#define NM_SETCURSOR (NM_FIRST-17)
|
||||
#define NM_CHAR (NM_FIRST-18)
|
||||
#define NM_TOOLTIPSCREATED (NM_FIRST-19)
|
||||
|
||||
|
||||
/* StatusWindow */
|
||||
|
@ -54,14 +99,26 @@ void WINAPI InitCommonControls(void);
|
|||
#define SB_SETMINHEIGHT (WM_USER+8)
|
||||
#define SB_SIMPLE (WM_USER+9)
|
||||
#define SB_GETRECT (WM_USER+10)
|
||||
#define SB_ISSIMPLE (WM_USER+14)
|
||||
#define SB_SETICON (WM_USER+15)
|
||||
#define SB_GETICON (WM_USER+20)
|
||||
#define SB_SETBKCOLOR CCM_SETBKCOLOR /* lParam = bkColor */
|
||||
|
||||
#define SBT_NOBORDERS 0x0100
|
||||
#define SBT_POPOUT 0x0200
|
||||
#define SBT_RTLREADING 0x0400
|
||||
#define SBT_RTLREADING 0x0400 /* not supported */
|
||||
#define SBT_OWNERDRAW 0x1000
|
||||
|
||||
#define SBARS_SIZEGRIP 0x0100
|
||||
|
||||
#define SBN_FIRST (0U-880U)
|
||||
#define SBN_LAST (0U-899U)
|
||||
#define SBN_SIMPLEMODECHANGE (SBN_FIRST-0)
|
||||
|
||||
void WINAPI MenuHelp (UINT32, WPARAM32, LPARAM, HMENU32,
|
||||
HINSTANCE32, HWND32, LPUINT32);
|
||||
|
||||
|
||||
/* UpDown */
|
||||
|
||||
#define UPDOWN_CLASS16 "msctls_updown"
|
||||
|
@ -200,22 +257,22 @@ typedef struct _IMAGEINFO
|
|||
|
||||
|
||||
typedef struct _IMAGELISTDRAWPARAMS
|
||||
{
|
||||
DWORD cbSize;
|
||||
HIMAGELIST himl;
|
||||
INT32 i;
|
||||
HDC32 hdcDst;
|
||||
INT32 x;
|
||||
INT32 y;
|
||||
INT32 cx;
|
||||
INT32 cy;
|
||||
INT32 xBitmap; // x offest from the upperleft of bitmap
|
||||
INT32 yBitmap; // y offset from the upperleft of bitmap
|
||||
COLORREF rgbBk;
|
||||
COLORREF rgbFg;
|
||||
UINT32 fStyle;
|
||||
DWORD dwRop;
|
||||
} IMAGELISTDRAWPARAMS, *LPIMAGELISTDRAWPARAMS;
|
||||
{
|
||||
DWORD cbSize;
|
||||
HIMAGELIST himl;
|
||||
INT32 i;
|
||||
HDC32 hdcDst;
|
||||
INT32 x;
|
||||
INT32 y;
|
||||
INT32 cx;
|
||||
INT32 cy;
|
||||
INT32 xBitmap; /* x offest from the upperleft of bitmap */
|
||||
INT32 yBitmap; /* y offset from the upperleft of bitmap */
|
||||
COLORREF rgbBk;
|
||||
COLORREF rgbFg;
|
||||
UINT32 fStyle;
|
||||
DWORD dwRop;
|
||||
} IMAGELISTDRAWPARAMS, *LPIMAGELISTDRAWPARAMS;
|
||||
|
||||
|
||||
INT32 WINAPI ImageList_Add(HIMAGELIST,HBITMAP32,HBITMAP32);
|
||||
|
@ -265,4 +322,144 @@ BOOL32 WINAPI ImageList_SetOverlayImage(HIMAGELIST,INT32,INT32);
|
|||
#define ImageList_RemoveAll(himl) ImageList_Remove(himl,-1)
|
||||
|
||||
|
||||
/* Header control */
|
||||
|
||||
#define WC_HEADER16 "SysHeader"
|
||||
#define WC_HEADER32A "SysHeader32"
|
||||
#define WC_HEADER32W L"SysHeader32"
|
||||
|
||||
#define WC_HEADER WINELIB_NAME_AW(WC_HEADER)
|
||||
|
||||
#define HDS_HORZ 0x0000
|
||||
#define HDS_BUTTONS 0x0002
|
||||
#define HDS_HOTTRACK 0x0004
|
||||
#define HDS_HIDDEN 0x0008
|
||||
#define HDS_DRAGDROP 0x0040
|
||||
#define HDS_FULLDRAG 0x0080
|
||||
|
||||
#define HDI_WIDTH 0x0001
|
||||
#define HDI_HEIGHT HDI_WIDTH
|
||||
#define HDI_TEXT 0x0002
|
||||
#define HDI_FORMAT 0x0004
|
||||
#define HDI_LPARAM 0x0008
|
||||
#define HDI_BITMAP 0x0010
|
||||
#define HDI_IMAGE 0x0020
|
||||
#define HDI_DI_SETITEM 0x0040
|
||||
#define HDI_ORDER 0x0080
|
||||
|
||||
#define HDF_LEFT 0x0000
|
||||
#define HDF_RIGHT 0x0001
|
||||
#define HDF_CENTER 0x0002
|
||||
#define HDF_JUSTIFYMASK 0x0003
|
||||
|
||||
#define HDF_IMAGE 0x0800
|
||||
#define HDF_BITMAP_ON_RIGHT 0x1000
|
||||
#define HDF_BITMAP 0x2000
|
||||
#define HDF_STRING 0x4000
|
||||
#define HDF_OWNERDRAW 0x8000
|
||||
|
||||
#define HHT_NOWHERE 0x0001
|
||||
#define HHT_ONHEADER 0x0002
|
||||
#define HHT_ONDIVIDER 0x0004
|
||||
#define HHT_ONDIVOPEN 0x0008
|
||||
#define HHT_ABOVE 0x0100
|
||||
#define HHT_BELOW 0x0200
|
||||
#define HHT_TORIGHT 0x0400
|
||||
#define HHT_TOLEFT 0x0800
|
||||
|
||||
#define HDM_FIRST 0x1200
|
||||
#define HDM_GETITEMCOUNT (HDM_FIRST+0)
|
||||
#define HDM_INSERTITEM32A (HDM_FIRST+1)
|
||||
#define HDM_INSERTITEM32W (HDM_FIRST+10)
|
||||
#define HDM_INSERTITEM WINELIB_NAME_AW(HDM_INSERTITEM)
|
||||
#define HDM_DELETEITEM (HDM_FIRST+2)
|
||||
#define HDM_GETITEM32A (HDM_FIRST+3)
|
||||
#define HDM_GETITEM32W (HDM_FIRST+11)
|
||||
#define HDM_GETITEM WINELIB_NAME_AW(HDM_GETITEM)
|
||||
#define HDM_SETITEM32A (HDM_FIRST+4)
|
||||
#define HDM_SETITEM32W (HDM_FIRST+12)
|
||||
#define HDM_SETITEM WINELIB_NAME_AW(HDM_SETITEM)
|
||||
#define HDM_LAYOUT (HDM_FIRST+5)
|
||||
#define HDM_HITTEST (HDM_FIRST+6)
|
||||
#define HDM_GETITEMRECT (HDM_FIRST+7)
|
||||
#define HDM_SETIMAGELIST (HDM_FIRST+8)
|
||||
#define HDM_GETIMAGELIST (HDM_FIRST+9)
|
||||
|
||||
|
||||
#define HDM_ORDERTOINDEX (HDM_FIRST+15)
|
||||
#define HDM_CREATEDRAGIMAGE (HDM_FIRST+16)
|
||||
#define HDM_GETORDERARRAY (HDM_FIRST+17)
|
||||
#define HDM_SETORDERARRAY (HDM_FIRST+18)
|
||||
#define HDM_SETHOTDIVIDER (HDM_FIRST+19)
|
||||
|
||||
#define HDN_FIRST (0U-300U)
|
||||
#define HDN_LAST (0U-399U)
|
||||
#define HDN_ITEMCHANGING32A (HDN_FIRST-0)
|
||||
#define HDN_ITEMCHANGING32W (HDN_FIRST-20)
|
||||
#define HDN_ITEMCHANGED32A (HDN_FIRST-1)
|
||||
#define HDN_ITEMCHANGED32W (HDN_FIRST-21)
|
||||
#define HDN_ITEMCLICK32A (HDN_FIRST-2)
|
||||
#define HDN_ITEMCLICK32W (HDN_FIRST-22)
|
||||
#define HDN_ITEMDBLCLICK32A (HDN_FIRST-3)
|
||||
#define HDN_ITEMDBLCLICK32W (HDN_FIRST-23)
|
||||
#define HDN_DIVIDERDBLCLICK32A (HDN_FIRST-5)
|
||||
#define HDN_DIVIDERDBLCLICK32W (HDN_FIRST-25)
|
||||
#define HDN_BEGINTRACK32A (HDN_FIRST-6)
|
||||
#define HDN_BEGINTRACK32W (HDN_FIRST-26)
|
||||
#define HDN_ENDTRACK32A (HDN_FIRST-7)
|
||||
#define HDN_ENDTRACK32W (HDN_FIRST-27)
|
||||
#define HDN_TRACK32A (HDN_FIRST-8)
|
||||
#define HDN_TRACK32W (HDN_FIRST-28)
|
||||
#define HDN_GETDISPINFO32A (HDN_FIRST-9)
|
||||
#define HDN_GETDISPINFO32W (HDN_FIRST-29)
|
||||
#define HDN_BEGINDRACK (HDN_FIRST-10)
|
||||
#define HDN_ENDDRACK (HDN_FIRST-11)
|
||||
|
||||
|
||||
#define Header_Layout(hwndHD,playout) \
|
||||
(BOOL32)SendMessage32A((hwndHD),HDM_LAYOUT,0,(LPARAM)(LPHDLAYOUT)(playout))
|
||||
|
||||
|
||||
typedef struct _HD_LAYOUT
|
||||
{
|
||||
RECT32 *prc;
|
||||
WINDOWPOS32 *pwpos;
|
||||
} HDLAYOUT, *LPHDLAYOUT;
|
||||
|
||||
#define HD_LAYOUT HDLAYOUT
|
||||
|
||||
|
||||
typedef struct _HD_ITEMA
|
||||
{
|
||||
UINT32 mask;
|
||||
INT32 cxy;
|
||||
LPSTR pszText;
|
||||
HBITMAP32 hbm;
|
||||
INT32 cchTextMax;
|
||||
INT32 fmt;
|
||||
LPARAM lParam;
|
||||
INT32 iImage;
|
||||
INT32 iOrder;
|
||||
} HD_ITEMA;
|
||||
|
||||
|
||||
typedef struct _HD_HITTESTINFO
|
||||
{
|
||||
POINT32 pt;
|
||||
UINT32 flags;
|
||||
INT32 iItem;
|
||||
} HDHITTESTINFO, *LPHDHITTESTINFO;
|
||||
|
||||
#define HD_HITTESTINFO HDHITTESTINFO
|
||||
|
||||
|
||||
typedef struct tagNMHEADERA
|
||||
{
|
||||
NMHDR hdr;
|
||||
INT32 iItem;
|
||||
INT32 iButton;
|
||||
HD_ITEMA *pitem;
|
||||
} NMHEADERA, *LPNMHEADERA;
|
||||
|
||||
|
||||
#endif /* __WINE_COMMCTRL_H */
|
||||
|
|
|
@ -116,6 +116,8 @@ typedef struct {
|
|||
DECL_WINELIB_TYPE_AW(OPENFILENAME);
|
||||
DECL_WINELIB_TYPE_AW(LPOPENFILENAME);
|
||||
|
||||
typedef UINT32 (CALLBACK *LPCCHOOKPROC) (HWND32, UINT32, WPARAM32, LPARAM);
|
||||
|
||||
typedef struct {
|
||||
DWORD lStructSize;
|
||||
HWND16 hwndOwner;
|
||||
|
@ -126,8 +128,38 @@ typedef struct {
|
|||
LPARAM lCustData;
|
||||
WNDPROC16 lpfnHook;
|
||||
SEGPTR lpTemplateName;
|
||||
} CHOOSECOLOR;
|
||||
typedef CHOOSECOLOR *LPCHOOSECOLOR;
|
||||
} CHOOSECOLOR16;
|
||||
typedef CHOOSECOLOR16 *LPCHOOSECOLOR16;
|
||||
|
||||
typedef struct {
|
||||
DWORD lStructSize;
|
||||
HWND32 hwndOwner;
|
||||
HWND32 hInstance;
|
||||
DWORD rgbResult;
|
||||
LPDWORD lpCustColors;
|
||||
DWORD Flags;
|
||||
DWORD lCustData;
|
||||
LPCCHOOKPROC lpfnHook;
|
||||
LPCSTR lpTemplateName;
|
||||
} CHOOSECOLOR32A;
|
||||
typedef CHOOSECOLOR32A *LPCHOOSECOLOR32A;
|
||||
|
||||
typedef struct {
|
||||
DWORD lStructSize;
|
||||
HWND32 hwndOwner;
|
||||
HWND32 hInstance;
|
||||
DWORD rgbResult;
|
||||
LPDWORD *lpCustColors;
|
||||
DWORD Flags;
|
||||
DWORD lCustData;
|
||||
LPCCHOOKPROC lpfnHook;
|
||||
LPCWSTR lpTemplateName;
|
||||
} CHOOSECOLOR32W;
|
||||
typedef CHOOSECOLOR32W *LPCHOOSECOLOR32W;
|
||||
|
||||
DECL_WINELIB_TYPE_AW(CHOOSECOLOR);
|
||||
DECL_WINELIB_TYPE_AW(LPCHOOSECOLOR);
|
||||
|
||||
|
||||
#define CC_RGBINIT 0x00000001
|
||||
#define CC_FULLOPEN 0x00000002
|
||||
|
@ -230,6 +262,7 @@ typedef struct
|
|||
/* CF_LIMITSIZE is used */
|
||||
} CHOOSEFONT16, *LPCHOOSEFONT16;
|
||||
|
||||
|
||||
typedef struct
|
||||
{
|
||||
UINT32 lStructSize;
|
||||
|
@ -452,7 +485,10 @@ typedef DEVNAMES * LPDEVNAMES;
|
|||
#define CDERR_NOHOOK 0x000B
|
||||
#define CDERR_REGISTERMSGFAIL 0x000C
|
||||
|
||||
BOOL16 WINAPI ChooseColor(LPCHOOSECOLOR lpChCol);
|
||||
BOOL16 WINAPI ChooseColor16(LPCHOOSECOLOR16 lpChCol);
|
||||
BOOL32 WINAPI ChooseColor32A(LPCHOOSECOLOR32A lpChCol);
|
||||
BOOL32 WINAPI ChooseColor32W(LPCHOOSECOLOR32W lpChCol);
|
||||
#define ChooseColor WINELIB_NAME_AW(ChooseColor)
|
||||
DWORD WINAPI CommDlgExtendedError(void);
|
||||
HWND16 WINAPI FindText16( SEGPTR find);
|
||||
HWND32 WINAPI FindText32A(LPFINDREPLACE32A lpFind);
|
||||
|
|
|
@ -39,6 +39,18 @@
|
|||
/* Define if the struct statfs has the member bfree */
|
||||
#undef STATFS_HAS_BFREE
|
||||
|
||||
/* Define if we have a working sigaltstack */
|
||||
#undef HAVE_WORKING_SIGALTSTACK
|
||||
|
||||
/* Define if the struct statfs is defined by <sys/vfs.h> */
|
||||
#undef STATFS_DEFINED_BY_SYS_VFS
|
||||
|
||||
/* Define if the struct statfs is defined by <sys/statfs.h> */
|
||||
#undef STATFS_DEFINED_BY_SYS_STATFS
|
||||
|
||||
/* Define if the struct statfs is defined by <sys/mount.h> */
|
||||
#undef STATFS_DEFINED_BY_SYS_MOUNT
|
||||
|
||||
/* The number of bytes in a long long. */
|
||||
#undef SIZEOF_LONG_LONG
|
||||
|
||||
|
|
|
@ -21,6 +21,7 @@ extern BOOL32 DC_SetupGCForPatBlt( DC * dc, GC gc, BOOL32 fMapColors );
|
|||
extern BOOL32 DC_SetupGCForBrush( DC * dc );
|
||||
extern BOOL32 DC_SetupGCForPen( DC * dc );
|
||||
extern BOOL32 DC_SetupGCForText( DC * dc );
|
||||
extern void DC_UpdateXforms( DC * dc );
|
||||
|
||||
extern const int DC_XROPfunction[];
|
||||
|
||||
|
|
195
include/debug.h
195
include/debug.h
|
@ -19,102 +19,105 @@
|
|||
#define dbch_clipping 11
|
||||
#define dbch_combo 12
|
||||
#define dbch_comm 13
|
||||
#define dbch_commdlg 14
|
||||
#define dbch_console 15
|
||||
#define dbch_crtdll 16
|
||||
#define dbch_cursor 17
|
||||
#define dbch_dc 18
|
||||
#define dbch_dde 19
|
||||
#define dbch_ddeml 20
|
||||
#define dbch_ddraw 21
|
||||
#define dbch_debug 22
|
||||
#define dbch_dialog 23
|
||||
#define dbch_dll 24
|
||||
#define dbch_dosfs 25
|
||||
#define dbch_dosmem 26
|
||||
#define dbch_driver 27
|
||||
#define dbch_dsound 28
|
||||
#define dbch_edit 29
|
||||
#define dbch_event 30
|
||||
#define dbch_exec 31
|
||||
#define dbch_file 32
|
||||
#define dbch_fixup 33
|
||||
#define dbch_font 34
|
||||
#define dbch_gdi 35
|
||||
#define dbch_global 36
|
||||
#define dbch_graphics 37
|
||||
#define dbch_heap 38
|
||||
#define dbch_hook 39
|
||||
#define dbch_icon 40
|
||||
#define dbch_imagelist 41
|
||||
#define dbch_int 42
|
||||
#define dbch_int21 43
|
||||
#define dbch_int31 44
|
||||
#define dbch_key 45
|
||||
#define dbch_keyboard 46
|
||||
#define dbch_ldt 47
|
||||
#define dbch_listbox 48
|
||||
#define dbch_local 49
|
||||
#define dbch_mci 50
|
||||
#define dbch_mcianim 51
|
||||
#define dbch_mciwave 52
|
||||
#define dbch_mdi 53
|
||||
#define dbch_menu 54
|
||||
#define dbch_message 55
|
||||
#define dbch_metafile 56
|
||||
#define dbch_midi 57
|
||||
#define dbch_mmaux 58
|
||||
#define dbch_mmio 59
|
||||
#define dbch_mmsys 60
|
||||
#define dbch_mmtime 61
|
||||
#define dbch_module 62
|
||||
#define dbch_mpr 63
|
||||
#define dbch_msg 64
|
||||
#define dbch_nonclient 65
|
||||
#define dbch_ntdll 66
|
||||
#define dbch_ole 67
|
||||
#define dbch_palette 68
|
||||
#define dbch_print 69
|
||||
#define dbch_profile 70
|
||||
#define dbch_progress 71
|
||||
#define dbch_prop 72
|
||||
#define dbch_reg 73
|
||||
#define dbch_region 74
|
||||
#define dbch_relay 75
|
||||
#define dbch_resource 76
|
||||
#define dbch_scroll 77
|
||||
#define dbch_security 78
|
||||
#define dbch_segment 79
|
||||
#define dbch_selector 80
|
||||
#define dbch_sem 81
|
||||
#define dbch_sendmsg 82
|
||||
#define dbch_shell 83
|
||||
#define dbch_shm 84
|
||||
#define dbch_sound 85
|
||||
#define dbch_static 86
|
||||
#define dbch_stress 87
|
||||
#define dbch_string 88
|
||||
#define dbch_system 89
|
||||
#define dbch_task 90
|
||||
#define dbch_text 91
|
||||
#define dbch_thread 92
|
||||
#define dbch_thunk 93
|
||||
#define dbch_timer 94
|
||||
#define dbch_toolhelp 95
|
||||
#define dbch_tweak 96
|
||||
#define dbch_uitools 97
|
||||
#define dbch_updown 98
|
||||
#define dbch_ver 99
|
||||
#define dbch_virtual 100
|
||||
#define dbch_vxd 101
|
||||
#define dbch_win 102
|
||||
#define dbch_win16drv 103
|
||||
#define dbch_win32 104
|
||||
#define dbch_wing 105
|
||||
#define dbch_winsock 106
|
||||
#define dbch_wnet 107
|
||||
#define dbch_x11 108
|
||||
#define dbch_x11drv 109
|
||||
#define dbch_commctrl 14
|
||||
#define dbch_commdlg 15
|
||||
#define dbch_console 16
|
||||
#define dbch_crtdll 17
|
||||
#define dbch_cursor 18
|
||||
#define dbch_dc 19
|
||||
#define dbch_dde 20
|
||||
#define dbch_ddeml 21
|
||||
#define dbch_ddraw 22
|
||||
#define dbch_debug 23
|
||||
#define dbch_dialog 24
|
||||
#define dbch_dll 25
|
||||
#define dbch_dosfs 26
|
||||
#define dbch_dosmem 27
|
||||
#define dbch_driver 28
|
||||
#define dbch_dsound 29
|
||||
#define dbch_edit 30
|
||||
#define dbch_event 31
|
||||
#define dbch_exec 32
|
||||
#define dbch_file 33
|
||||
#define dbch_fixup 34
|
||||
#define dbch_font 35
|
||||
#define dbch_gdi 36
|
||||
#define dbch_global 37
|
||||
#define dbch_graphics 38
|
||||
#define dbch_header 39
|
||||
#define dbch_heap 40
|
||||
#define dbch_hook 41
|
||||
#define dbch_icon 42
|
||||
#define dbch_imagelist 43
|
||||
#define dbch_int 44
|
||||
#define dbch_int21 45
|
||||
#define dbch_int31 46
|
||||
#define dbch_key 47
|
||||
#define dbch_keyboard 48
|
||||
#define dbch_ldt 49
|
||||
#define dbch_listbox 50
|
||||
#define dbch_local 51
|
||||
#define dbch_mci 52
|
||||
#define dbch_mcianim 53
|
||||
#define dbch_mciwave 54
|
||||
#define dbch_mdi 55
|
||||
#define dbch_menu 56
|
||||
#define dbch_message 57
|
||||
#define dbch_metafile 58
|
||||
#define dbch_midi 59
|
||||
#define dbch_mmaux 60
|
||||
#define dbch_mmio 61
|
||||
#define dbch_mmsys 62
|
||||
#define dbch_mmtime 63
|
||||
#define dbch_module 64
|
||||
#define dbch_mpr 65
|
||||
#define dbch_msg 66
|
||||
#define dbch_nonclient 67
|
||||
#define dbch_ntdll 68
|
||||
#define dbch_ole 69
|
||||
#define dbch_palette 70
|
||||
#define dbch_print 71
|
||||
#define dbch_profile 72
|
||||
#define dbch_progress 73
|
||||
#define dbch_prop 74
|
||||
#define dbch_reg 75
|
||||
#define dbch_region 76
|
||||
#define dbch_relay 77
|
||||
#define dbch_resource 78
|
||||
#define dbch_scroll 79
|
||||
#define dbch_security 80
|
||||
#define dbch_segment 81
|
||||
#define dbch_selector 82
|
||||
#define dbch_sem 83
|
||||
#define dbch_sendmsg 84
|
||||
#define dbch_shell 85
|
||||
#define dbch_shm 86
|
||||
#define dbch_sound 87
|
||||
#define dbch_static 88
|
||||
#define dbch_status 89
|
||||
#define dbch_stress 90
|
||||
#define dbch_string 91
|
||||
#define dbch_system 92
|
||||
#define dbch_task 93
|
||||
#define dbch_text 94
|
||||
#define dbch_thread 95
|
||||
#define dbch_thunk 96
|
||||
#define dbch_timer 97
|
||||
#define dbch_toolhelp 98
|
||||
#define dbch_tweak 99
|
||||
#define dbch_uitools 100
|
||||
#define dbch_updown 101
|
||||
#define dbch_ver 102
|
||||
#define dbch_virtual 103
|
||||
#define dbch_vxd 104
|
||||
#define dbch_win 105
|
||||
#define dbch_win16drv 106
|
||||
#define dbch_win32 107
|
||||
#define dbch_wing 108
|
||||
#define dbch_winsock 109
|
||||
#define dbch_wnet 110
|
||||
#define dbch_x11 111
|
||||
#define dbch_x11drv 112
|
||||
/* Definitions for classes identifiers */
|
||||
#define dbcl_fixme 0
|
||||
#define dbcl_err 1
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
#include "debugtools.h"
|
||||
#endif
|
||||
|
||||
#define DEBUG_CHANNEL_COUNT 110
|
||||
#define DEBUG_CHANNEL_COUNT 113
|
||||
#ifdef DEBUG_RUNTIME
|
||||
short debug_msg_enabled[][DEBUG_CLASS_COUNT] = {
|
||||
{1, 1, 0, 0},
|
||||
|
@ -117,6 +117,9 @@ 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},
|
||||
};
|
||||
const char* debug_ch_name[] = {
|
||||
"accel",
|
||||
|
@ -133,6 +136,7 @@ const char* debug_ch_name[] = {
|
|||
"clipping",
|
||||
"combo",
|
||||
"comm",
|
||||
"commctrl",
|
||||
"commdlg",
|
||||
"console",
|
||||
"crtdll",
|
||||
|
@ -157,6 +161,7 @@ const char* debug_ch_name[] = {
|
|||
"gdi",
|
||||
"global",
|
||||
"graphics",
|
||||
"header",
|
||||
"heap",
|
||||
"hook",
|
||||
"icon",
|
||||
|
@ -206,6 +211,7 @@ const char* debug_ch_name[] = {
|
|||
"shm",
|
||||
"sound",
|
||||
"static",
|
||||
"status",
|
||||
"stress",
|
||||
"string",
|
||||
"system",
|
||||
|
|
103
include/gdi.h
103
include/gdi.h
|
@ -12,6 +12,7 @@
|
|||
#include "local.h"
|
||||
#include "x11drv.h"
|
||||
#include "path.h"
|
||||
#include <math.h>
|
||||
|
||||
/* GDI objects magic numbers */
|
||||
#define PEN_MAGIC 0x4f47
|
||||
|
@ -132,10 +133,10 @@ typedef struct
|
|||
INT32 CursPosX; /* Current position */
|
||||
INT32 CursPosY;
|
||||
INT32 ArcDirection;
|
||||
BOOL32 UseWorldXform; /* Should we use the world transform? */
|
||||
/* (i.e. is it not equal to the */
|
||||
/* identity transformation?) */
|
||||
XFORM WorldXform; /* World transform */
|
||||
XFORM xformWorld2Wnd; /* World-to-window transformation */
|
||||
XFORM xformWorld2Vport; /* World-to-viewport transformation */
|
||||
XFORM xformVport2World; /* Inverse of the above transformation */
|
||||
BOOL32 vport2WorldValid; /* Is xformVport2World valid? */
|
||||
} WIN_DC_INFO;
|
||||
|
||||
typedef X11DRV_PDEVICE X_DC_INFO; /* Temporary */
|
||||
|
@ -283,6 +284,100 @@ typedef struct tagDC_FUNCS
|
|||
|
||||
/* Device <-> logical coords conversion */
|
||||
|
||||
/* A floating point version of the POINT structure */
|
||||
typedef struct tagFLOAT_POINT
|
||||
{
|
||||
FLOAT x, y;
|
||||
} FLOAT_POINT;
|
||||
|
||||
/* Rounds a floating point number to integer. The world-to-viewport
|
||||
* transformation process is done in floating point internally. This function
|
||||
* is then used to round these coordinates to integer values.
|
||||
*/
|
||||
static __inline__ INT32 GDI_ROUND(FLOAT val)
|
||||
{
|
||||
return (int)floor(val + 0.5);
|
||||
}
|
||||
|
||||
/* Performs a viewport-to-world transformation on the specified point (which
|
||||
* is in floating point format). Returns TRUE if successful, else FALSE.
|
||||
*/
|
||||
static __inline__ BOOL32 INTERNAL_DPTOLP_FLOAT(DC *dc, FLOAT_POINT *point)
|
||||
{
|
||||
FLOAT x, y;
|
||||
|
||||
/* Check that the viewport-to-world transformation is valid */
|
||||
if (!dc->w.vport2WorldValid)
|
||||
return FALSE;
|
||||
|
||||
/* Perform the transformation */
|
||||
x = point->x;
|
||||
y = point->y;
|
||||
point->x = x * dc->w.xformVport2World.eM11 +
|
||||
y * dc->w.xformVport2World.eM21 +
|
||||
dc->w.xformVport2World.eDx;
|
||||
point->y = x * dc->w.xformVport2World.eM12 +
|
||||
y * dc->w.xformVport2World.eM22 +
|
||||
dc->w.xformVport2World.eDy;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* Performs a viewport-to-world transformation on the specified point (which
|
||||
* is in integer format). Returns TRUE if successful, else FALSE.
|
||||
*/
|
||||
static __inline__ BOOL32 INTERNAL_DPTOLP(DC *dc, LPPOINT32 point)
|
||||
{
|
||||
FLOAT_POINT floatPoint;
|
||||
|
||||
/* Perform operation with floating point */
|
||||
floatPoint.x=(FLOAT)point->x;
|
||||
floatPoint.y=(FLOAT)point->y;
|
||||
if (!INTERNAL_DPTOLP_FLOAT(dc, &floatPoint))
|
||||
return FALSE;
|
||||
|
||||
/* Round to integers */
|
||||
point->x = GDI_ROUND(floatPoint.x);
|
||||
point->y = GDI_ROUND(floatPoint.y);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* Performs a world-to-viewport transformation on the specified point (which
|
||||
* is in floating point format).
|
||||
*/
|
||||
static __inline__ void INTERNAL_LPTODP_FLOAT(DC *dc, FLOAT_POINT *point)
|
||||
{
|
||||
FLOAT x, y;
|
||||
|
||||
/* Perform the transformation */
|
||||
x = point->x;
|
||||
y = point->y;
|
||||
point->x = x * dc->w.xformWorld2Vport.eM11 +
|
||||
y * dc->w.xformWorld2Vport.eM21 +
|
||||
dc->w.xformWorld2Vport.eDx;
|
||||
point->y = x * dc->w.xformWorld2Vport.eM12 +
|
||||
y * dc->w.xformWorld2Vport.eM22 +
|
||||
dc->w.xformWorld2Vport.eDy;
|
||||
}
|
||||
|
||||
/* Performs a world-to-viewport transformation on the specified point (which
|
||||
* is in integer format).
|
||||
*/
|
||||
static __inline__ void INTERNAL_LPTODP(DC *dc, LPPOINT32 point)
|
||||
{
|
||||
FLOAT_POINT floatPoint;
|
||||
|
||||
/* Perform operation with floating point */
|
||||
floatPoint.x=(FLOAT)point->x;
|
||||
floatPoint.y=(FLOAT)point->y;
|
||||
INTERNAL_LPTODP_FLOAT(dc, &floatPoint);
|
||||
|
||||
/* Round to integers */
|
||||
point->x = GDI_ROUND(floatPoint.x);
|
||||
point->y = GDI_ROUND(floatPoint.y);
|
||||
}
|
||||
|
||||
#define XDPTOLP(dc,x) \
|
||||
(((x)-(dc)->vportOrgX) * (dc)->wndExtX / (dc)->vportExtX+(dc)->wndOrgX)
|
||||
#define YDPTOLP(dc,y) \
|
||||
|
|
|
@ -0,0 +1,52 @@
|
|||
/*
|
||||
* Header window definitions
|
||||
*
|
||||
* Copyright 1998 Eric Kohl
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __WINE_HEADER_H_
|
||||
#define __WINE_HEADER_H_
|
||||
|
||||
typedef struct
|
||||
{
|
||||
UINT32 mask;
|
||||
INT32 cxy;
|
||||
HBITMAP32 hbm;
|
||||
LPSTR pszText;
|
||||
INT32 cchTextMax;
|
||||
INT32 fmt;
|
||||
LPARAM lParam;
|
||||
INT32 iImage;
|
||||
INT32 iOrder;
|
||||
|
||||
BOOL32 bDown;
|
||||
RECT32 rect;
|
||||
} HEADER_ITEM;
|
||||
|
||||
|
||||
typedef struct
|
||||
{
|
||||
UINT32 uNumItem;
|
||||
INT32 nHeight;
|
||||
HFONT32 hFont;
|
||||
HCURSOR32 hcurArrow;
|
||||
HCURSOR32 hcurDivider;
|
||||
HCURSOR32 hcurDivopen;
|
||||
BOOL32 bCaptured;
|
||||
BOOL32 bPressed;
|
||||
BOOL32 bTracking;
|
||||
INT32 iMoveItem;
|
||||
INT32 xTrackOffset;
|
||||
INT32 xOldTrack;
|
||||
INT32 nOldWidth;
|
||||
INT32 iHotItem;
|
||||
|
||||
HIMAGELIST himl;
|
||||
HEADER_ITEM *items;
|
||||
} HEADER_INFO;
|
||||
|
||||
|
||||
void HEADER_Register( void );
|
||||
|
||||
#endif /* __WINE_HEADER_H_ */
|
|
@ -7,13 +7,8 @@
|
|||
#include "wintypes.h"
|
||||
#include "resource.h"
|
||||
|
||||
extern INT32 LIBRES_AccessResource( HINSTANCE32 hModule, HRSRC32 hRsrc );
|
||||
extern HGLOBAL32 LIBRES_AllocResource( HINSTANCE32 hModule, HRSRC32 hRsrc, DWORD size );
|
||||
extern HRSRC32 LIBRES_FindResource16( HINSTANCE32 hModule, LPCSTR name, LPCSTR type );
|
||||
extern HRSRC32 LIBRES_FindResource32( HINSTANCE32 hModule, LPCWSTR name, LPCWSTR type );
|
||||
extern BOOL32 LIBRES_FreeResource( HGLOBAL32 handle );
|
||||
extern HRSRC32 LIBRES_FindResource( HINSTANCE32 hModule, LPCWSTR name, LPCWSTR type );
|
||||
extern HGLOBAL32 LIBRES_LoadResource( HINSTANCE32 hModule, HRSRC32 hRsrc );
|
||||
extern LPVOID LIBRES_LockResource( HGLOBAL32 handle );
|
||||
extern DWORD LIBRES_SizeofResource( HINSTANCE32 hModule, HRSRC32 hRsrc );
|
||||
|
||||
#endif
|
||||
#endif /* __WINE_LIBRES_H */
|
||||
|
|
|
@ -6,13 +6,13 @@
|
|||
#ifndef __WINE_LZEXPAND_H
|
||||
#define __WINE_LZEXPAND_H
|
||||
|
||||
#define LZERROR_BADINHANDLE 0xFFFF /* -1 */
|
||||
#define LZERROR_BADOUTHANDLE 0xFFFE /* -2 */
|
||||
#define LZERROR_READ 0xFFFD /* -3 */
|
||||
#define LZERROR_WRITE 0xFFFC /* -4 */
|
||||
#define LZERROR_GLOBALLOC 0xFFFB /* -5 */
|
||||
#define LZERROR_GLOBLOCK 0xFFFA /* -6 */
|
||||
#define LZERROR_BADVALUE 0xFFF9 /* -7 */
|
||||
#define LZERROR_UNKNOWNALG 0xFFF8 /* -8 */
|
||||
#define LZERROR_BADINHANDLE -1 /* -1 */
|
||||
#define LZERROR_BADOUTHANDLE -2 /* -2 */
|
||||
#define LZERROR_READ -3 /* -3 */
|
||||
#define LZERROR_WRITE -4 /* -4 */
|
||||
#define LZERROR_GLOBALLOC -5 /* -5 */
|
||||
#define LZERROR_GLOBLOCK -6 /* -6 */
|
||||
#define LZERROR_BADVALUE -7 /* -7 */
|
||||
#define LZERROR_UNKNOWNALG -8 /* -8 */
|
||||
|
||||
#endif /* __WINE_LZEXPAND_H */
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
/*
|
||||
* Wine initialization definitions
|
||||
*/
|
||||
|
||||
#ifndef __WINE_MAIN_H
|
||||
#define __WINE_MAIN_H
|
||||
|
||||
extern BOOL32 MAIN_KernelInit(void);
|
||||
extern void MAIN_Usage(char*);
|
||||
extern BOOL32 MAIN_UserInit(void);
|
||||
extern BOOL32 MAIN_WineInit( int *argc, char *argv[] );
|
||||
|
||||
#endif /* __WINE_MAIN_H */
|
|
@ -115,9 +115,8 @@ typedef struct _wine_modref
|
|||
HMODULE32 module;
|
||||
|
||||
char *modname;
|
||||
char *fullname;
|
||||
char *shortname;
|
||||
char *unixname;
|
||||
char *longname;
|
||||
} WINE_MODREF;
|
||||
|
||||
/* Resource types */
|
||||
|
@ -134,35 +133,28 @@ typedef struct resource_nameinfo_s NE_NAMEINFO;
|
|||
(((OFSTRUCT *)((char*)(pModule) + (pModule)->fileinfo))->szPathName)
|
||||
|
||||
/* module.c */
|
||||
extern NE_MODULE *MODULE_GetPtr16( HMODULE16 hModule );
|
||||
extern NE_MODULE *MODULE_GetPtr32( HMODULE32 hModule );
|
||||
extern HMODULE16 MODULE_HANDLEtoHMODULE16( HANDLE32 handle );
|
||||
extern int MODULE_OpenFile( HMODULE32 hModule );
|
||||
extern LPSTR MODULE_GetModuleName( HMODULE32 hModule );
|
||||
extern FARPROC32 MODULE_GetProcAddress32( struct _PDB32*pdb,HMODULE32 hModule,LPCSTR function );
|
||||
extern WINE_MODREF *MODULE32_LookupHMODULE( struct _PDB32 *process, HMODULE32 hModule );
|
||||
extern HMODULE32 MODULE_FindModule16( LPCSTR path );
|
||||
extern HMODULE32 MODULE_FindModule32( struct _PDB32 *process, LPCSTR path );
|
||||
extern HINSTANCE16 MODULE_CreateInstance( HMODULE16 hModule, HINSTANCE16 *prev,
|
||||
BOOL32 lib_only );
|
||||
extern HMODULE32 MODULE_CreateDummyModule( const OFSTRUCT *ofs );
|
||||
extern HINSTANCE16 MODULE_Load( LPCSTR name, UINT16 uFlags, LPCSTR cmd_line,
|
||||
extern HINSTANCE16 MODULE_Load( LPCSTR name, BOOL32 implicit, LPCSTR cmd_line,
|
||||
LPCSTR env, UINT32 show_cmd );
|
||||
extern FARPROC16 MODULE_GetWndProcEntry16( const char *name );
|
||||
extern FARPROC16 WINAPI WIN32_GetProcAddress16( HMODULE32 hmodule, LPSTR name );
|
||||
extern FARPROC16 WINAPI WIN32_GetProcAddress16( HMODULE32 hmodule, LPCSTR name );
|
||||
|
||||
typedef HGLOBAL16 (CALLBACK *RESOURCEHANDLER16)(HGLOBAL16,HMODULE16,HRSRC16);
|
||||
|
||||
/* loader/ne/module.c */
|
||||
extern NE_MODULE *NE_GetPtr( HMODULE16 hModule );
|
||||
extern void NE_DumpModule( HMODULE16 hModule );
|
||||
extern void NE_WalkModules(void);
|
||||
extern void NE_RegisterModule( NE_MODULE *pModule );
|
||||
extern WORD NE_GetOrdinal( HMODULE16 hModule, const char *name );
|
||||
extern FARPROC16 NE_GetEntryPoint( HMODULE16 hModule, WORD ordinal );
|
||||
extern BOOL16 NE_SetEntryPoint( HMODULE16 hModule, WORD ordinal, WORD offset );
|
||||
extern HINSTANCE16 NE_LoadModule( HFILE32 hFile, OFSTRUCT *ofs, UINT16 flags,
|
||||
LPCSTR cmd_line, LPCSTR env,
|
||||
UINT32 show_cmd );
|
||||
extern int NE_OpenFile( NE_MODULE *pModule );
|
||||
extern HINSTANCE16 NE_LoadModule( LPCSTR name, HINSTANCE16 *hPrevInstance,
|
||||
BOOL32 implicit, BOOL32 lib_only );
|
||||
|
||||
/* loader/ne/resource.c */
|
||||
extern HGLOBAL16 WINAPI NE_DefResourceHandler(HGLOBAL16,HMODULE16,HRSRC16);
|
||||
|
@ -173,14 +165,14 @@ extern BOOL32 NE_LoadSegment( NE_MODULE *pModule, WORD segnum );
|
|||
extern BOOL32 NE_LoadAllSegments( NE_MODULE *pModule );
|
||||
extern void NE_FixupPrologs( NE_MODULE *pModule );
|
||||
extern void NE_InitializeDLLs( HMODULE16 hModule );
|
||||
extern BOOL32 NE_CreateSegments( HMODULE16 hModule );
|
||||
extern BOOL32 NE_CreateSegments( NE_MODULE *pModule );
|
||||
extern HINSTANCE16 NE_CreateInstance( NE_MODULE *pModule, HINSTANCE16 *prev,
|
||||
BOOL32 lib_only );
|
||||
|
||||
/* builtin.c */
|
||||
/* if1632/builtin.c */
|
||||
extern BOOL32 BUILTIN_Init(void);
|
||||
extern HMODULE32 BUILTIN_LoadModule( LPCSTR name, BOOL32 force );
|
||||
extern HMODULE16 BUILTIN_LoadModule( LPCSTR name, BOOL32 force );
|
||||
extern LPCSTR BUILTIN_GetEntryPoint16( WORD cs, WORD ip, WORD *pOrd );
|
||||
extern FARPROC32 BUILTIN_GetEntryPoint32( char *buffer, void *relay,
|
||||
DWORD *typemask );
|
||||
extern BOOL32 BUILTIN_ParseDLLOptions( const char *str );
|
||||
extern void BUILTIN_PrintDLLs(void);
|
||||
|
||||
|
@ -189,6 +181,6 @@ extern HMODULE32 BUILTIN32_LoadModule( LPCSTR name, BOOL32 force,
|
|||
struct _PDB32 *process );
|
||||
|
||||
/* if1632/builtin.c */
|
||||
extern HMODULE32 (*fnBUILTIN_LoadModule)(LPCSTR name, BOOL32 force);
|
||||
extern HMODULE16 (*fnBUILTIN_LoadModule)(LPCSTR name, BOOL32 force);
|
||||
|
||||
#endif /* __WINE_MODULE_H */
|
||||
|
|
|
@ -88,7 +88,6 @@ typedef struct
|
|||
#define NE_FFLAGS_MULTIPLEDATA 0x0002
|
||||
#define NE_FFLAGS_WIN32 0x0010
|
||||
#define NE_FFLAGS_BUILTIN 0x0020 /* Wine built-in module */
|
||||
#define NE_FFLAGS_IMPLICIT 0x0040
|
||||
#define NE_FFLAGS_FRAMEBUF 0x0100 /* OS/2 fullscreen app */
|
||||
#define NE_FFLAGS_CONSOLE 0x0200 /* OS/2 console app */
|
||||
#define NE_FFLAGS_GUI 0x0300 /* right, (NE_FFLAGS_FRAMEBUF | NE_FFLAGS_CONSOLE) */
|
||||
|
|
|
@ -15,16 +15,20 @@ extern "C" {
|
|||
|
||||
/* Security Ids of NT */
|
||||
|
||||
/* Moved to windows.h
|
||||
typedef struct {
|
||||
BYTE Value[6];
|
||||
} SID_IDENTIFIER_AUTHORITY,*PSID_IDENTIFIER_AUTHORITY,*LPSID_IDENTIFIER_AUTHORITY;
|
||||
*/
|
||||
|
||||
/* Moved to windows.h
|
||||
typedef struct _SID {
|
||||
BYTE Revision;
|
||||
BYTE SubAuthorityCount;
|
||||
SID_IDENTIFIER_AUTHORITY IdentifierAuthority;
|
||||
DWORD SubAuthority[1]; /* more than one */
|
||||
DWORD SubAuthority[1];
|
||||
} SID,*PSID,*LPSID;
|
||||
*/
|
||||
|
||||
#define SID_REVISION (1) /* Current revision */
|
||||
#define SID_MAX_SUB_AUTHORITIES (15) /* current max subauths */
|
||||
|
@ -37,6 +41,7 @@ typedef struct _SID {
|
|||
#define ACL_REVISION1 1
|
||||
#define ACL_REVISION2 2
|
||||
|
||||
/* Moved to windows.h
|
||||
typedef struct _ACL {
|
||||
BYTE AclRevision;
|
||||
BYTE Sbz1;
|
||||
|
@ -44,6 +49,7 @@ typedef struct _ACL {
|
|||
WORD AceCount;
|
||||
WORD Sbz2;
|
||||
} ACL,*LPACL;
|
||||
*/
|
||||
|
||||
/* ACEs, directly starting after an ACL */
|
||||
typedef struct _ACE_HEADER {
|
||||
|
@ -103,7 +109,9 @@ typedef struct _SYSTEM_ALARM_ACE {
|
|||
#define SECURITY_DESCRIPTOR_REVISION 1
|
||||
#define SECURITY_DESCRIPTOR_REVISION1 1
|
||||
|
||||
/*
|
||||
typedef WORD SECURITY_DESCRIPTOR_CONTROL;
|
||||
*/
|
||||
|
||||
#define SE_OWNER_DEFAULTED 0x0001
|
||||
#define SE_GROUP_DEFAULTED 0x0002
|
||||
|
@ -113,6 +121,7 @@ typedef WORD SECURITY_DESCRIPTOR_CONTROL;
|
|||
#define SE_SACL_DEFAULTED 0x0020
|
||||
#define SE_SELF_RELATIVE 0x8000
|
||||
|
||||
/* This was moved to windows.h
|
||||
typedef struct {
|
||||
BYTE Revision;
|
||||
BYTE Sbz1;
|
||||
|
@ -122,6 +131,7 @@ typedef struct {
|
|||
LPACL Sacl;
|
||||
LPACL Dacl;
|
||||
} SECURITY_DESCRIPTOR,*PSECURITY_DESCRIPTOR,*LPSECURITY_DESCRIPTOR;
|
||||
*/
|
||||
|
||||
typedef enum tagSID_NAME_USE {
|
||||
SidTypeUser = 1,
|
||||
|
|
|
@ -5,8 +5,6 @@
|
|||
#ifndef __WINE_OLE2_H
|
||||
#define __WINE_OLE2_H
|
||||
|
||||
typedef LONG HRESULT;
|
||||
|
||||
/* to be implemented */
|
||||
typedef LPVOID LPMESSAGEFILTER;
|
||||
typedef LPVOID LPDROPTARGET;
|
||||
|
|
|
@ -42,6 +42,8 @@ extern BOOL32 PATH_AssignGdiPath(GdiPath *pPathDest,
|
|||
|
||||
extern BOOL32 PATH_MoveTo(HDC32 hdc);
|
||||
extern BOOL32 PATH_LineTo(HDC32 hdc, INT32 x, INT32 y);
|
||||
extern BOOL32 PATH_Rectangle(HDC32 hdc, INT32 x1, INT32 y1,
|
||||
INT32 x2, INT32 y2);
|
||||
extern BOOL32 PATH_Ellipse(HDC32 hdc, INT32 x1, INT32 y1,
|
||||
INT32 x2, INT32 y2);
|
||||
extern BOOL32 PATH_Arc(HDC32 hdc, INT32 x1, INT32 y1, INT32 x2, INT32 y2,
|
||||
|
|
|
@ -40,8 +40,8 @@ extern HRSRC32 PE_FindResourceEx32W(struct _wine_modref*,LPCWSTR,LPCWSTR,WORD);
|
|||
extern DWORD PE_SizeofResource32(HMODULE32,HRSRC32);
|
||||
extern HMODULE32 PE_LoadLibraryEx32A(LPCSTR,struct _PDB32*,HFILE32,DWORD);
|
||||
extern HGLOBAL32 PE_LoadResource32(struct _wine_modref *wm,HRSRC32);
|
||||
extern HINSTANCE16 PE_LoadModule( HFILE32 hFile, OFSTRUCT *ofs,
|
||||
LPCSTR cmd_line, LPCSTR env, UINT16 showCmd);
|
||||
extern HINSTANCE16 PE_LoadModule( LPCSTR name, LPCSTR cmd_line,
|
||||
LPCSTR env, UINT16 showCmd );
|
||||
|
||||
struct _PDB32; /* forward definition */
|
||||
struct _THDB; /* forward definition */
|
||||
|
|
|
@ -20,6 +20,6 @@ typedef struct
|
|||
COLORREF ColorBk; /* Background color */
|
||||
} PROGRESS_INFO;
|
||||
|
||||
LRESULT WINAPI ProgressWindowProc(HWND32, UINT32, WPARAM32, LPARAM);
|
||||
extern void PROGRESS_Register (void);
|
||||
|
||||
#endif /* __WINE_PROGRESS_H */
|
||||
|
|
|
@ -7,8 +7,7 @@
|
|||
#ifndef __WINE_STATUS_H
|
||||
#define __WINE_STATUS_H
|
||||
|
||||
LRESULT WINAPI StatusWindowProc( HWND32 hwnd, UINT32 msg,
|
||||
WPARAM32 wParam, LPARAM lParam );
|
||||
extern void STATUS_Register(void);
|
||||
|
||||
typedef struct
|
||||
{
|
||||
|
@ -16,13 +15,17 @@ typedef struct
|
|||
INT32 style;
|
||||
RECT32 bound;
|
||||
LPSTR text;
|
||||
HICON32 hIcon;
|
||||
} STATUSWINDOWPART;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
UINT16 numParts;
|
||||
UINT16 textHeight;
|
||||
UINT32 height;
|
||||
BOOL32 simple;
|
||||
HFONT32 hFont;
|
||||
COLORREF clrBk; /* background color */
|
||||
STATUSWINDOWPART part0; /* simple window */
|
||||
STATUSWINDOWPART *parts;
|
||||
} STATUSWINDOWINFO;
|
||||
|
|
|
@ -29,7 +29,6 @@ typedef struct tagNM_UPDOWN
|
|||
int iDelta;
|
||||
} NM_UPDOWN;
|
||||
|
||||
LRESULT WINAPI UpDownWindowProc(HWND32 hwnd, UINT32 message, WPARAM32 wParam,
|
||||
LPARAM lParam);
|
||||
extern void UPDOWN_Register (void);
|
||||
|
||||
#endif /* __WINE_UPDOWN_H */
|
||||
|
|
|
@ -1 +1 @@
|
|||
#define WINE_RELEASE_INFO "Wine release 980503"
|
||||
#define WINE_RELEASE_INFO "Wine release 980517"
|
||||
|
|
|
@ -1259,6 +1259,11 @@ typedef struct
|
|||
FONTSIGNATURE fs;
|
||||
} CHARSETINFO,*LPCHARSETINFO;
|
||||
|
||||
/* Flags for ModifyWorldTransform */
|
||||
#define MWT_IDENTITY 1
|
||||
#define MWT_LEFTMULTIPLY 2
|
||||
#define MWT_RIGHTMULTIPLY 3
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FLOAT eM11;
|
||||
|
@ -2212,8 +2217,26 @@ typedef struct
|
|||
#define DDL_DRIVES 0x4000
|
||||
#define DDL_EXCLUSIVE 0x8000
|
||||
|
||||
/* The security attributes structure
|
||||
*/
|
||||
typedef struct _ACL {
|
||||
BYTE AclRevision;
|
||||
BYTE Sbz1;
|
||||
WORD AclSize;
|
||||
WORD AceCount;
|
||||
WORD Sbz2;
|
||||
} ACL, *LPACL;
|
||||
|
||||
typedef struct {
|
||||
BYTE Value[6];
|
||||
} SID_IDENTIFIER_AUTHORITY,*PSID_IDENTIFIER_AUTHORITY,*LPSID_IDENTIFIER_AUTHORITY;
|
||||
|
||||
typedef struct _SID {
|
||||
BYTE Revision;
|
||||
BYTE SubAuthorityCount;
|
||||
SID_IDENTIFIER_AUTHORITY IdentifierAuthority;
|
||||
DWORD SubAuthority[1];
|
||||
} SID,*PSID,*LPSID;
|
||||
|
||||
/* The security attributes structure */
|
||||
typedef struct
|
||||
{
|
||||
DWORD nLength;
|
||||
|
@ -2221,6 +2244,19 @@ typedef struct
|
|||
BOOL32 bInheritHandle;
|
||||
} SECURITY_ATTRIBUTES, *LPSECURITY_ATTRIBUTES;
|
||||
|
||||
typedef WORD SECURITY_DESCRIPTOR_CONTROL;
|
||||
|
||||
/* The security descriptor structure */
|
||||
typedef struct {
|
||||
BYTE Revision;
|
||||
BYTE Sbz1;
|
||||
SECURITY_DESCRIPTOR_CONTROL Control;
|
||||
LPSID Owner;
|
||||
LPSID Group;
|
||||
LPACL Sacl;
|
||||
LPACL Dacl;
|
||||
} SECURITY_DESCRIPTOR, *LPSECURITY_DESCRIPTOR;
|
||||
|
||||
typedef DWORD SECURITY_INFORMATION;
|
||||
|
||||
|
||||
|
@ -6064,7 +6100,6 @@ DWORD WINAPI SetViewportOrg(HDC16,INT16,INT16);
|
|||
BOOL16 WINAPI SetWinDebugInfo(LPWINDEBUGINFO);
|
||||
DWORD WINAPI SetWindowExt(HDC16,INT16,INT16);
|
||||
DWORD WINAPI SetWindowOrg(HDC16,INT16,INT16);
|
||||
VOID WINAPI SwitchStackBack(void);
|
||||
VOID WINAPI SwitchStackTo(WORD,WORD,WORD);
|
||||
VOID WINAPI TileChildWindows(HWND16,WORD);
|
||||
INT16 WINAPI UngetCommChar(INT16,CHAR);
|
||||
|
@ -6083,6 +6118,7 @@ BOOL32 WINAPI Beep(DWORD,DWORD);
|
|||
BOOL32 WINAPI ClearCommError(INT32,LPDWORD,LPCOMSTAT);
|
||||
BOOL32 WINAPI CloseHandle(HANDLE32);
|
||||
BOOL32 WINAPI CloseServiceHandle(HANDLE32);
|
||||
BOOL32 WINAPI CombineTransform(LPXFORM,const XFORM *,const XFORM *);
|
||||
INT32 WINAPI CopyAcceleratorTable32A(HACCEL32,LPACCEL32,INT32);
|
||||
INT32 WINAPI CopyAcceleratorTable32W(HACCEL32,LPACCEL32,INT32);
|
||||
#define CopyAcceleratorTable WINELIB_NAME_AW(CopyAcceleratorTable)
|
||||
|
@ -6215,6 +6251,9 @@ BOOL32 WINAPI GetHandleInformation(HANDLE32,LPDWORD);
|
|||
DWORD WINAPI GetLargestConsoleWindowSize(HANDLE32);
|
||||
VOID WINAPI GetLocalTime(LPSYSTEMTIME);
|
||||
DWORD WINAPI GetLogicalDrives(void);
|
||||
DWORD WINAPI GetLongPathName32A(LPCSTR,LPSTR,DWORD);
|
||||
DWORD WINAPI GetLongPathName32W(LPCWSTR,LPWSTR,DWORD);
|
||||
#define GetLongPathName WINELIB_NAME_AW(GetLongPathName)
|
||||
BOOL32 WINAPI GetMenuItemInfo32A(HMENU32,UINT32,BOOL32,MENUITEMINFO32A*);
|
||||
BOOL32 WINAPI GetMenuItemInfo32W(HMENU32,UINT32,BOOL32,MENUITEMINFO32W*);
|
||||
#define GetMenuItemInfo WINELIB_NAME_AW(GetMenuItemInfo)
|
||||
|
@ -6239,6 +6278,7 @@ BOOL32 WINAPI GetStringTypeEx32W(LCID,DWORD,LPCWSTR,INT32,LPWORD);
|
|||
VOID WINAPI GetSystemInfo(LPSYSTEM_INFO);
|
||||
BOOL32 WINAPI GetSystemPowerStatus(LPSYSTEM_POWER_STATUS);
|
||||
VOID WINAPI GetSystemTime(LPSYSTEMTIME);
|
||||
INT32 WINAPI GetTextCharsetInfo(HDC32,LPCHARSETINFO,DWORD);
|
||||
BOOL32 WINAPI GetTextExtentExPoint32A(HDC32,LPCSTR,INT32,INT32,
|
||||
LPINT32,LPINT32,LPSIZE32);
|
||||
BOOL32 WINAPI GetTextExtentExPoint32W(HDC32,LPCWSTR,INT32,INT32,
|
||||
|
@ -6286,6 +6326,7 @@ LPVOID WINAPI MapViewOfFileEx(HANDLE32,DWORD,DWORD,DWORD,DWORD,LPVOID);
|
|||
INT32 WINAPI MessageBoxEx32A(HWND32,LPCSTR,LPCSTR,UINT32,WORD);
|
||||
INT32 WINAPI MessageBoxEx32W(HWND32,LPCWSTR,LPCWSTR,UINT32,WORD);
|
||||
#define MessageBoxEx WINELIB_NAME_AW(MessageBoxEx)
|
||||
BOOL32 WINAPI ModifyWorldTransform(HDC32,const XFORM *, DWORD);
|
||||
BOOL32 WINAPI MoveFile32A(LPCSTR,LPCSTR);
|
||||
BOOL32 WINAPI MoveFile32W(LPCWSTR,LPCWSTR);
|
||||
#define MoveFile WINELIB_NAME_AW(MoveFile)
|
||||
|
@ -6326,6 +6367,9 @@ BOOL32 WINAPI ReadConsole32A(HANDLE32,LPVOID,DWORD,LPDWORD,LPVOID);
|
|||
BOOL32 WINAPI ReadConsole32W(HANDLE32,LPVOID,DWORD,LPDWORD,LPVOID);
|
||||
#define ReadConsole WINELIB_NAME_AW(ReadConsole)
|
||||
BOOL32 WINAPI ReadFile(HANDLE32,LPVOID,DWORD,LPDWORD,LPOVERLAPPED);
|
||||
LONG WINAPI RegConnectRegistry32A(LPCSTR,HKEY,LPHKEY);
|
||||
LONG WINAPI RegConnectRegistry32W(LPCWSTR,HKEY,LPHKEY);
|
||||
#define RegConnectRegistry WINELIB_NAME_AW(RegConnectRegistry)
|
||||
DWORD WINAPI RegCreateKeyEx32A(HKEY,LPCSTR,DWORD,LPSTR,DWORD,REGSAM,
|
||||
LPSECURITY_ATTRIBUTES,LPHKEY,LPDWORD);
|
||||
DWORD WINAPI RegCreateKeyEx32W(HKEY,LPCWSTR,DWORD,LPWSTR,DWORD,REGSAM,
|
||||
|
@ -6336,10 +6380,14 @@ DWORD WINAPI RegEnumKeyEx32A(HKEY,DWORD,LPSTR,LPDWORD,LPDWORD,LPSTR,
|
|||
DWORD WINAPI RegEnumKeyEx32W(HKEY,DWORD,LPWSTR,LPDWORD,LPDWORD,LPWSTR,
|
||||
LPDWORD,LPFILETIME);
|
||||
#define RegEnumKeyEx WINELIB_NAME_AW(RegEnumKeyEx)
|
||||
LONG WINAPI RegGetKeySecurity(HKEY,SECURITY_INFORMATION,LPVOID,LPDWORD);
|
||||
LONG WINAPI RegGetKeySecurity(HKEY,SECURITY_INFORMATION,LPSECURITY_DESCRIPTOR,LPDWORD);
|
||||
HANDLE32 WINAPI RegisterEventSource32A(LPCSTR,LPCSTR);
|
||||
HANDLE32 WINAPI RegisterEventSource32W(LPCWSTR,LPCWSTR);
|
||||
#define RegisterEventSource WINELIB_NAME_AW(RegisterEventSource)
|
||||
LONG WINAPI RegLoadKey32A(HKEY,LPCSTR,LPCSTR);
|
||||
LONG WINAPI RegLoadKey32W(HKEY,LPCWSTR,LPCWSTR);
|
||||
#define RegLoadKey WINELIB_NAME_AW(RegLoadKey)
|
||||
LONG WINAPI RegNotifyChangeKeyValue(HKEY,BOOL32,DWORD,HANDLE32,BOOL32);
|
||||
DWORD WINAPI RegOpenKeyEx32W(HKEY,LPCWSTR,DWORD,REGSAM,LPHKEY);
|
||||
DWORD WINAPI RegOpenKeyEx32A(HKEY,LPCSTR,DWORD,REGSAM,LPHKEY);
|
||||
#define RegOpenKeyEx WINELIB_NAME_AW(RegOpenKeyEx)
|
||||
|
@ -7553,6 +7601,9 @@ UINT32 WINAPI GetTextAlign32(HDC32);
|
|||
INT16 WINAPI GetTextCharacterExtra16(HDC16);
|
||||
INT32 WINAPI GetTextCharacterExtra32(HDC32);
|
||||
#define GetTextCharacterExtra WINELIB_NAME(GetTextCharacterExtra)
|
||||
INT16 WINAPI GetTextCharset16(HDC16);
|
||||
INT32 WINAPI GetTextCharset32(HDC32);
|
||||
#define GetTextCharset WINELIB_NAME(GetTextCharset)
|
||||
COLORREF WINAPI GetTextColor16(HDC16);
|
||||
COLORREF WINAPI GetTextColor32(HDC32);
|
||||
#define GetTextColor WINELIB_NAME(GetTextColor)
|
||||
|
@ -8738,7 +8789,7 @@ HPEN32 WINAPI GetSysColorPen32(INT32);
|
|||
INT32 WINAPI LoadMessage32A(HMODULE32,UINT32,WORD,LPSTR,INT32);
|
||||
INT32 WINAPI LoadMessage32W(HMODULE32,UINT32,WORD,LPWSTR,INT32);
|
||||
SEGPTR WINAPI WIN16_GlobalLock16(HGLOBAL16);
|
||||
SEGPTR WINAPI WIN16_LockResource(HGLOBAL16);
|
||||
SEGPTR WINAPI WIN16_LockResource16(HGLOBAL16);
|
||||
LONG WINAPI WIN16_hread(HFILE16,SEGPTR,LONG);
|
||||
INT32 WINAPI lstrncmp32A(LPCSTR,LPCSTR,INT32);
|
||||
INT32 WINAPI lstrncmp32W(LPCWSTR,LPCWSTR,INT32);
|
||||
|
|
|
@ -30,11 +30,13 @@ extern int WIN32_LastError;
|
|||
#define ERROR_INVALID_HANDLE 6
|
||||
#define ERROR_NOT_ENOUGH_MEMORY 8
|
||||
#define ERROR_BAD_FORMAT 11
|
||||
#define ERROR_INVALID_ACCESS 12
|
||||
#define ERROR_OUTOFMEMORY 14
|
||||
#define ERROR_NO_MORE_FILES 18
|
||||
#define ERROR_SHARING_VIOLATION 32
|
||||
#define ERROR_LOCK_VIOLATION 33
|
||||
#define ERROR_DUP_NAME 52
|
||||
#define ERROR_BAD_NETPATH 53
|
||||
#define ERROR_FILE_EXISTS 80
|
||||
#define ERROR_CANNOT_MAKE 82
|
||||
#define ERROR_INVALID_PARAMETER 87
|
||||
|
@ -44,6 +46,7 @@ extern int WIN32_LastError;
|
|||
#define ERROR_INSUFFICIENT_BUFFER 122
|
||||
#define ERROR_SEEK_ON_DEVICE 132
|
||||
#define ERROR_DIR_NOT_EMPTY 145
|
||||
#define ERROR_BAD_PATHNAME 161
|
||||
#define ERROR_BUSY 170
|
||||
#define ERROR_ALREADY_EXISTS 183
|
||||
#define ERROR_FILENAME_EXCED_RANGE 206
|
||||
|
@ -53,11 +56,14 @@ extern int WIN32_LastError;
|
|||
#define ERROR_TOO_MANY_POSTS 298
|
||||
#define ERROR_INVALID_ADDRESS 487
|
||||
#define ERROR_CAN_NOT_COMPLETE 1003
|
||||
#define ERROR_BADKEY 1010 /* Config reg key invalid */
|
||||
#define ERROR_CANTWRITE 1013 /* Config reg key couldn't be written */
|
||||
#define ERROR_IO_DEVICE 1117
|
||||
#define ERROR_POSSIBLE_DEADLOCK 1131
|
||||
#define ERROR_BAD_DEVICE 1200
|
||||
#define ERROR_NO_NETWORK 1222
|
||||
#define ERROR_ALREADY_INITIALIZED 1247
|
||||
#define ERROR_PRIVILEGE_NOT_HELD 1314
|
||||
#define ERROR_COMMITMENT_LIMIT 1455
|
||||
|
||||
/* HRESULT values for OLE, SHELL and other Interface stuff */
|
||||
|
|
|
@ -62,6 +62,9 @@
|
|||
#define REG_CREATED_NEW_KEY 0x00000001
|
||||
#define REG_OPENED_EXISTING_KEY 0x00000002
|
||||
|
||||
/* For RegNotifyChangeKeyValue */
|
||||
#define REG_NOTIFY_CHANGE_NAME 0x1
|
||||
|
||||
#define KEY_QUERY_VALUE 0x00000001
|
||||
#define KEY_SET_VALUE 0x00000002
|
||||
#define KEY_CREATE_SUB_KEY 0x00000004
|
||||
|
|
|
@ -88,6 +88,7 @@ typedef UINT32 HANDLE32;
|
|||
typedef UINT16 WPARAM16;
|
||||
typedef UINT32 WPARAM32;
|
||||
typedef LONG LPARAM;
|
||||
typedef LONG HRESULT;
|
||||
typedef LONG LRESULT;
|
||||
typedef WORD ATOM;
|
||||
typedef WORD CATCHBUF[9];
|
||||
|
|
|
@ -107,6 +107,9 @@
|
|||
#define WNNC_ERR_GetError 0x0001
|
||||
#define WNNC_ERR_GetErrorText 0x0002
|
||||
|
||||
#define WNDT_NORMAL 0x0
|
||||
#define WNDT_NETWORK 0x1
|
||||
|
||||
#define WIN30X 0x0
|
||||
#define WIN31X 0x1
|
||||
#define WIN311X 0x2
|
||||
|
|
|
@ -76,7 +76,7 @@ HRSRC32 LIBRES_FindResource( HINSTANCE32 hModule, LPCWSTR name, LPCWSTR type )
|
|||
for(Res=ResBlock->Resources; *Res; Res++)
|
||||
if(name)
|
||||
{
|
||||
if((*Res)->type==typeid && !lstrcmpi32W((*Res)->name,name))
|
||||
if((*Res)->type==typeid && !lstrcmpi32W((LPCWSTR)(*Res)->name,name))
|
||||
return (HRSRC32)*Res;
|
||||
}
|
||||
else
|
||||
|
|
|
@ -14,6 +14,7 @@
|
|||
#include "bitmap.h"
|
||||
#include "comm.h"
|
||||
#include "win.h"
|
||||
#include "main.h"
|
||||
#include "menu.h"
|
||||
#include "atom.h"
|
||||
#include "dialog.h"
|
||||
|
|
567
loader/module.c
567
loader/module.c
|
@ -25,18 +25,11 @@
|
|||
#include "selectors.h"
|
||||
#include "stackframe.h"
|
||||
#include "task.h"
|
||||
#include "toolhelp.h"
|
||||
#include "debug.h"
|
||||
#include "callback.h"
|
||||
|
||||
extern BOOL32 THREAD_InitDone;
|
||||
|
||||
extern HMODULE16 hFirstModule; /* FIXME */
|
||||
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;
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
* MODULE32_LookupHMODULE
|
||||
|
@ -58,116 +51,6 @@ MODULE32_LookupHMODULE(PDB32 *process,HMODULE32 hmod) {
|
|||
return NULL;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* MODULE_GetPtr16
|
||||
*/
|
||||
NE_MODULE *MODULE_GetPtr16( HMODULE16 hModule )
|
||||
{
|
||||
return (NE_MODULE*)GlobalLock16( GetExePtr(hModule) );
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* MODULE_GetPtr32
|
||||
*/
|
||||
NE_MODULE *MODULE_GetPtr32( HMODULE32 hModule )
|
||||
{
|
||||
return (NE_MODULE*)GlobalLock16( MODULE_HANDLEtoHMODULE16(hModule) );
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* MODULE_HANDLEtoHMODULE16
|
||||
*/
|
||||
HMODULE16
|
||||
MODULE_HANDLEtoHMODULE16(HANDLE32 handle) {
|
||||
NE_MODULE *pModule;
|
||||
|
||||
if (HIWORD(handle))
|
||||
{
|
||||
WARN(module,"looking up 0x%08x in win16 function!\n",handle);
|
||||
/* this is a HMODULE32 */
|
||||
|
||||
/* walk the list looking for the correct startaddress */
|
||||
pModule = (NE_MODULE *)GlobalLock16( hFirstModule );
|
||||
while (pModule)
|
||||
{
|
||||
if (pModule->module32 == handle) return pModule->self;
|
||||
pModule = (NE_MODULE*)GlobalLock16(pModule->next);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
return GetExePtr(handle);
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* MODULE_OpenFile
|
||||
*/
|
||||
int MODULE_OpenFile( HMODULE32 hModule )
|
||||
{
|
||||
NE_MODULE *pModule;
|
||||
DOS_FULL_NAME full_name;
|
||||
char *name;
|
||||
|
||||
static int cachedfd = -1;
|
||||
|
||||
hModule = MODULE_HANDLEtoHMODULE16(hModule);
|
||||
TRACE(module, "(%04x) cache: mod=%04x fd=%d\n",
|
||||
hModule, hCachedModule, cachedfd );
|
||||
if (!(pModule = MODULE_GetPtr32( hModule ))) return -1;
|
||||
if (hCachedModule == hModule) return cachedfd;
|
||||
close( cachedfd );
|
||||
hCachedModule = hModule;
|
||||
name = NE_MODULE_NAME( pModule );
|
||||
if (!DOSFS_GetFullName( name, TRUE, &full_name ) ||
|
||||
(cachedfd = open( full_name.long_name, O_RDONLY )) == -1)
|
||||
WARN( module, "Can't open file '%s' for module %04x\n",
|
||||
name, hModule );
|
||||
TRACE(module, "opened '%s' -> %d\n",
|
||||
name, cachedfd );
|
||||
return cachedfd;
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* MODULE_CreateInstance
|
||||
*
|
||||
* If lib_only is TRUE, handle the module like a library even if it is a .EXE
|
||||
*/
|
||||
HINSTANCE16 MODULE_CreateInstance( HMODULE16 hModule, HINSTANCE16 *prev,
|
||||
BOOL32 lib_only )
|
||||
{
|
||||
SEGTABLEENTRY *pSegment;
|
||||
NE_MODULE *pModule;
|
||||
int minsize;
|
||||
HINSTANCE16 hNewInstance;
|
||||
|
||||
if (!(pModule = MODULE_GetPtr16( hModule ))) return 0;
|
||||
if (pModule->dgroup == 0)
|
||||
{
|
||||
if (prev) *prev = hModule;
|
||||
return hModule;
|
||||
}
|
||||
|
||||
pSegment = NE_SEG_TABLE( pModule ) + pModule->dgroup - 1;
|
||||
if (prev) *prev = pSegment->selector;
|
||||
|
||||
/* if it's a library, create a new instance only the first time */
|
||||
if (pSegment->selector)
|
||||
{
|
||||
if (pModule->flags & NE_FFLAGS_LIBMODULE) return pSegment->selector;
|
||||
if (lib_only) return pSegment->selector;
|
||||
}
|
||||
|
||||
minsize = pSegment->minsize ? pSegment->minsize : 0x10000;
|
||||
if (pModule->ss == pModule->dgroup) minsize += pModule->stack_size;
|
||||
minsize += pModule->heap_size;
|
||||
hNewInstance = GLOBAL_Alloc( GMEM_ZEROINIT | GMEM_FIXED,
|
||||
minsize, hModule, FALSE, FALSE, FALSE );
|
||||
if (!hNewInstance) return 0;
|
||||
pSegment->selector = hNewInstance;
|
||||
return hNewInstance;
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* MODULE_CreateDummyModule
|
||||
|
@ -312,63 +195,6 @@ FARPROC16 MODULE_GetWndProcEntry16( LPCSTR name )
|
|||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* MODULE_GetModuleName
|
||||
*/
|
||||
LPSTR MODULE_GetModuleName( HMODULE32 hModule )
|
||||
{
|
||||
NE_MODULE *pModule;
|
||||
BYTE *p, len;
|
||||
static char buffer[10];
|
||||
|
||||
if (!(pModule = MODULE_GetPtr32( hModule ))) return NULL;
|
||||
p = (BYTE *)pModule + pModule->name_table;
|
||||
len = MIN( *p, 8 );
|
||||
memcpy( buffer, p + 1, len );
|
||||
buffer[len] = '\0';
|
||||
return buffer;
|
||||
}
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
* MODULE_FindModule
|
||||
*
|
||||
* Find a module from a path name.
|
||||
* RETURNS
|
||||
* the win16 module handle if found
|
||||
* 0 if not
|
||||
*/
|
||||
HMODULE32 MODULE_FindModule16(
|
||||
LPCSTR path /* [in] path of the module to be found */
|
||||
) {
|
||||
HMODULE32 hModule = hFirstModule;
|
||||
LPCSTR filename, dotptr, modulepath, modulename;
|
||||
BYTE len, *name_table;
|
||||
|
||||
if (!(filename = strrchr( path, '\\' ))) filename = path;
|
||||
else filename++;
|
||||
if ((dotptr = strrchr( filename, '.' )) != NULL)
|
||||
len = (BYTE)(dotptr - filename);
|
||||
else len = strlen( filename );
|
||||
|
||||
while(hModule)
|
||||
{
|
||||
NE_MODULE *pModule = MODULE_GetPtr16( hModule );
|
||||
if (!pModule) break;
|
||||
modulepath = NE_MODULE_NAME(pModule);
|
||||
if (!(modulename = strrchr( modulepath, '\\' )))
|
||||
modulename = modulepath;
|
||||
else modulename++;
|
||||
if (!lstrcmpi32A( modulename, filename )) return hModule;
|
||||
|
||||
name_table = (BYTE *)pModule + pModule->name_table;
|
||||
if ((*name_table == len) && !lstrncmpi32A(filename, name_table+1, len))
|
||||
return hModule;
|
||||
hModule = pModule->next;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**********************************************************************
|
||||
* MODULE_FindModule32
|
||||
*
|
||||
|
@ -426,105 +252,6 @@ HMODULE32 MODULE_FindModule32(
|
|||
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
* MODULE_CallWEP
|
||||
*
|
||||
* Call a DLL's WEP, allowing it to shut down.
|
||||
* FIXME: we always pass the WEP WEP_FREE_DLL, never WEP_SYSTEM_EXIT
|
||||
*/
|
||||
static BOOL16 MODULE_CallWEP( HMODULE16 hModule )
|
||||
{
|
||||
FARPROC16 WEP = (FARPROC16)0;
|
||||
WORD ordinal = NE_GetOrdinal( hModule, "WEP" );
|
||||
|
||||
if (ordinal) WEP = NE_GetEntryPoint( hModule, ordinal );
|
||||
if (!WEP)
|
||||
{
|
||||
WARN(module, "module %04x doesn't have a WEP\n", hModule );
|
||||
return FALSE;
|
||||
}
|
||||
return Callbacks->CallWindowsExitProc( WEP, WEP_FREE_DLL );
|
||||
}
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
* MODULE_FreeModule
|
||||
*
|
||||
* Remove a module from memory.
|
||||
*/
|
||||
BOOL16 MODULE_FreeModule( HMODULE32 hModule, TDB* pTaskContext )
|
||||
{
|
||||
HMODULE16 *hPrevModule;
|
||||
NE_MODULE *pModule;
|
||||
SEGTABLEENTRY *pSegment;
|
||||
HMODULE16 *pModRef;
|
||||
int i;
|
||||
|
||||
if (!(pModule = MODULE_GetPtr32( hModule ))) return FALSE;
|
||||
hModule = pModule->self;
|
||||
|
||||
if (((INT16)(--pModule->count)) > 0 ) return TRUE;
|
||||
else pModule->count = 0;
|
||||
|
||||
if (pModule->flags & NE_FFLAGS_BUILTIN)
|
||||
return FALSE; /* Can't free built-in module */
|
||||
|
||||
if (pModule->flags & NE_FFLAGS_LIBMODULE)
|
||||
{
|
||||
MODULE_CallWEP( hModule );
|
||||
|
||||
/* Free the objects owned by the DLL module */
|
||||
|
||||
if( pTaskContext && pTaskContext->userhandler )
|
||||
{
|
||||
pTaskContext->userhandler( hModule, USIG_DLL_UNLOAD, 0,
|
||||
pTaskContext->hInstance,
|
||||
pTaskContext->hQueue );
|
||||
}
|
||||
}
|
||||
/* Clear magic number just in case */
|
||||
|
||||
pModule->magic = pModule->self = 0;
|
||||
|
||||
/* Remove it from the linked list */
|
||||
|
||||
hPrevModule = &hFirstModule;
|
||||
while (*hPrevModule && (*hPrevModule != hModule))
|
||||
{
|
||||
hPrevModule = &(MODULE_GetPtr16( *hPrevModule ))->next;
|
||||
}
|
||||
if (*hPrevModule) *hPrevModule = pModule->next;
|
||||
|
||||
/* Free all the segments */
|
||||
|
||||
pSegment = NE_SEG_TABLE( pModule );
|
||||
for (i = 1; i <= pModule->seg_count; i++, pSegment++)
|
||||
{
|
||||
GlobalFree16( pSegment->selector );
|
||||
}
|
||||
|
||||
/* Free the referenced modules */
|
||||
|
||||
pModRef = (HMODULE16*)NE_MODULE_TABLE( pModule );
|
||||
for (i = 0; i < pModule->modref_count; i++, pModRef++)
|
||||
{
|
||||
FreeModule16( *pModRef );
|
||||
}
|
||||
|
||||
/* Free the module storage */
|
||||
|
||||
if (pModule->nrname_handle) GlobalFree16( pModule->nrname_handle );
|
||||
if (pModule->dlls_to_init) GlobalFree16( pModule->dlls_to_init );
|
||||
GlobalFree16( hModule );
|
||||
|
||||
/* Remove module from cache */
|
||||
|
||||
if (hCachedModule == hModule) hCachedModule = 0;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
* MODULE_Load
|
||||
*
|
||||
|
@ -534,74 +261,34 @@ BOOL16 MODULE_FreeModule( HMODULE32 hModule, TDB* pTaskContext )
|
|||
* without a preceding length byte).
|
||||
* If cmd_line is NULL, the module is loaded as a library even if it is a .exe
|
||||
*/
|
||||
HINSTANCE16 MODULE_Load( LPCSTR name, UINT16 uFlags,
|
||||
HINSTANCE16 MODULE_Load( LPCSTR name, BOOL32 implicit,
|
||||
LPCSTR cmd_line, LPCSTR env, UINT32 show_cmd )
|
||||
{
|
||||
HMODULE32 hModule;
|
||||
HMODULE16 hModule;
|
||||
HINSTANCE16 hInstance, hPrevInstance;
|
||||
NE_MODULE *pModule;
|
||||
OFSTRUCT ofs;
|
||||
HFILE32 hFile;
|
||||
|
||||
if (__winelib)
|
||||
{
|
||||
OFSTRUCT ofs;
|
||||
lstrcpyn32A( ofs.szPathName, name, sizeof(ofs.szPathName) );
|
||||
if ((hModule = MODULE_CreateDummyModule( &ofs )) < 32) return hModule;
|
||||
pModule = (NE_MODULE *)GlobalLock16( hModule );
|
||||
hInstance = MODULE_CreateInstance( hModule, &hPrevInstance,
|
||||
(cmd_line == NULL) );
|
||||
hInstance = NE_CreateInstance( pModule, &hPrevInstance,
|
||||
(cmd_line == NULL) );
|
||||
}
|
||||
else
|
||||
{
|
||||
hModule = MODULE_FindModule16( name );
|
||||
|
||||
if (!hModule) /* We have to load the module */
|
||||
{
|
||||
/* Try to load the built-in first if not disabled */
|
||||
if ((hModule = fnBUILTIN_LoadModule( name, FALSE )))
|
||||
return MODULE_HANDLEtoHMODULE16( hModule );
|
||||
|
||||
if ((hFile = OpenFile32( name, &ofs, OF_READ )) == HFILE_ERROR32)
|
||||
{
|
||||
/* Now try the built-in even if disabled */
|
||||
if ((hModule = fnBUILTIN_LoadModule( name, TRUE )))
|
||||
{
|
||||
WARN(module, "Could not load Windows DLL '%s', using built-in module.\n", name );
|
||||
return MODULE_HANDLEtoHMODULE16( hModule );
|
||||
}
|
||||
return 2; /* File not found */
|
||||
}
|
||||
|
||||
/* Create the module structure */
|
||||
|
||||
hModule = NE_LoadModule( hFile, &ofs, uFlags, cmd_line,
|
||||
env, show_cmd );
|
||||
if (hModule < 32)
|
||||
{
|
||||
if ((hModule == 21) && cmd_line)
|
||||
hModule = PE_LoadModule( hFile, &ofs, cmd_line,
|
||||
env, show_cmd );
|
||||
}
|
||||
|
||||
if (hModule < 32)
|
||||
fprintf( stderr, "LoadModule: can't load '%s', error=%d\n",
|
||||
name, hModule );
|
||||
_lclose32( hFile );
|
||||
return hModule;
|
||||
}
|
||||
else /* module is already loaded, just create a new data segment if it's a task */
|
||||
{
|
||||
pModule = MODULE_GetPtr32( hModule );
|
||||
hInstance = MODULE_CreateInstance( hModule, &hPrevInstance,
|
||||
(cmd_line == NULL) );
|
||||
if (hInstance != hPrevInstance) /* not a library */
|
||||
NE_LoadSegment( pModule, pModule->dgroup );
|
||||
pModule->count++;
|
||||
}
|
||||
} /* !winelib */
|
||||
hInstance = NE_LoadModule( name, &hPrevInstance, implicit,
|
||||
(cmd_line == NULL) );
|
||||
if ((hInstance == 21) && cmd_line)
|
||||
return PE_LoadModule( name, cmd_line, env, show_cmd );
|
||||
}
|
||||
|
||||
/* Create a task for this instance */
|
||||
|
||||
if (hInstance < 32) return hInstance;
|
||||
pModule = NE_GetPtr( hInstance );
|
||||
if (cmd_line && !(pModule->flags & NE_FFLAGS_LIBMODULE))
|
||||
{
|
||||
PDB32 *pdb;
|
||||
|
@ -622,9 +309,8 @@ HINSTANCE16 MODULE_Load( LPCSTR name, UINT16 uFlags,
|
|||
*/
|
||||
HINSTANCE16 LoadModule16( LPCSTR name, LPVOID paramBlock )
|
||||
{
|
||||
LOADPARAMS *params = (LOADPARAMS *)paramBlock;
|
||||
LPSTR cmd_line = (LPSTR)PTR_SEG_TO_LIN( params->cmdLine );
|
||||
LPSTR new_cmd_line;
|
||||
LOADPARAMS *params;
|
||||
LPSTR cmd_line, new_cmd_line;
|
||||
UINT16 show_cmd = 0;
|
||||
LPCVOID env = NULL;
|
||||
HINSTANCE16 hInstance;
|
||||
|
@ -649,7 +335,7 @@ HINSTANCE16 LoadModule16( LPCSTR name, LPVOID paramBlock )
|
|||
strcat( new_cmd_line, cmd_line );
|
||||
|
||||
if (params->hEnvironment) env = GlobalLock16( params->hEnvironment );
|
||||
hInstance = MODULE_Load( name, 0, new_cmd_line, env, show_cmd );
|
||||
hInstance = MODULE_Load( name, FALSE, new_cmd_line, env, show_cmd );
|
||||
if (params->hEnvironment) GlobalUnlock16( params->hEnvironment );
|
||||
HeapFree( GetProcessHeap(), 0, new_cmd_line );
|
||||
return hInstance;
|
||||
|
@ -682,41 +368,12 @@ DWORD LoadModule32( LPCSTR name, LPVOID paramBlock )
|
|||
CloseHandle32(pi.hThread);
|
||||
|
||||
#else
|
||||
return MODULE_Load( name, 0, params->lpCmdLine, params->lpEnvAddress,
|
||||
return MODULE_Load( name, FALSE, params->lpCmdLine, params->lpEnvAddress,
|
||||
*((UINT16 *)params->lpCmdShow + 1) );
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
* FreeModule16 (KERNEL.46)
|
||||
*/
|
||||
BOOL16 WINAPI FreeModule16( HMODULE16 hModule )
|
||||
{
|
||||
NE_MODULE *pModule;
|
||||
|
||||
if (!(pModule = MODULE_GetPtr16( hModule ))) return FALSE;
|
||||
TRACE(module, "%s count %d\n",
|
||||
MODULE_GetModuleName(hModule), pModule->count );
|
||||
|
||||
return MODULE_FreeModule( hModule, GlobalLock16(GetCurrentTask()) );
|
||||
}
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
* GetModuleHandle16 (KERNEL.47)
|
||||
*/
|
||||
HMODULE16 WINAPI WIN16_GetModuleHandle( SEGPTR name )
|
||||
{
|
||||
if (HIWORD(name) == 0) return GetExePtr( (HINSTANCE16)name );
|
||||
return MODULE_FindModule16( PTR_SEG_TO_LIN(name) );
|
||||
}
|
||||
|
||||
HMODULE16 WINAPI GetModuleHandle16( LPCSTR name )
|
||||
{
|
||||
return MODULE_FindModule16( name );
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* GetModuleHandle (KERNEL32.237)
|
||||
*/
|
||||
|
@ -740,52 +397,23 @@ HMODULE32 WINAPI GetModuleHandle32W(LPCWSTR module)
|
|||
}
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
* GetModuleUsage (KERNEL.48)
|
||||
*/
|
||||
INT16 WINAPI GetModuleUsage( HINSTANCE16 hModule )
|
||||
{
|
||||
NE_MODULE *pModule;
|
||||
|
||||
if (!(pModule = MODULE_GetPtr16( hModule ))) return 0;
|
||||
TRACE(module, "(%04x): returning %d\n",
|
||||
hModule, pModule->count );
|
||||
return pModule->count;
|
||||
}
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
* GetModuleFileName16 (KERNEL.49)
|
||||
*/
|
||||
INT16 WINAPI GetModuleFileName16( HINSTANCE16 hModule, LPSTR lpFileName,
|
||||
INT16 nSize )
|
||||
{
|
||||
NE_MODULE *pModule;
|
||||
|
||||
if (!hModule) hModule = GetCurrentTask();
|
||||
if (!(pModule = MODULE_GetPtr16( hModule ))) return 0;
|
||||
lstrcpyn32A( lpFileName, NE_MODULE_NAME(pModule), nSize );
|
||||
TRACE(module, "%s\n", lpFileName );
|
||||
return strlen(lpFileName);
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* GetModuleFileName32A (KERNEL32.235)
|
||||
* FIXME FIXME
|
||||
*/
|
||||
DWORD WINAPI GetModuleFileName32A( HMODULE32 hModule, LPSTR lpFileName,
|
||||
DWORD size )
|
||||
{
|
||||
NE_MODULE *pModule;
|
||||
|
||||
if (!hModule)
|
||||
{
|
||||
TDB *pTask = (TDB *)GlobalLock16( GetCurrentTask() );
|
||||
hModule = pTask->hInstance;
|
||||
}
|
||||
if (!(pModule = MODULE_GetPtr32( hModule ))) return 0;
|
||||
lstrcpyn32A( lpFileName, NE_MODULE_NAME(pModule), size );
|
||||
DWORD WINAPI GetModuleFileName32A(
|
||||
HMODULE32 hModule, /* [in] module handle (32bit) */
|
||||
LPSTR lpFileName, /* [out] filenamebuffer */
|
||||
DWORD size /* [in] size of filenamebuffer */
|
||||
) {
|
||||
WINE_MODREF *wm = MODULE32_LookupHMODULE(PROCESS_Current(),hModule);
|
||||
|
||||
if (!wm) /* can happen on start up or the like */
|
||||
return 0;
|
||||
|
||||
/* FIXME: we should probably get a real long name, but wm->longname
|
||||
* is currently a UNIX filename!
|
||||
*/
|
||||
lstrcpyn32A( lpFileName, wm->shortname, size );
|
||||
TRACE(module, "%s\n", lpFileName );
|
||||
return strlen(lpFileName);
|
||||
}
|
||||
|
@ -805,19 +433,6 @@ DWORD WINAPI GetModuleFileName32W( HMODULE32 hModule, LPWSTR lpFileName,
|
|||
}
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
* GetModuleName (KERNEL.27)
|
||||
*/
|
||||
BOOL16 WINAPI GetModuleName( HINSTANCE16 hinst, LPSTR buf, INT16 nSize )
|
||||
{
|
||||
LPSTR name = MODULE_GetModuleName(hinst);
|
||||
|
||||
if (!name) return FALSE;
|
||||
lstrcpyn32A( buf, name, nSize );
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* LoadLibraryEx32W (KERNEL.513)
|
||||
* FIXME
|
||||
|
@ -882,29 +497,8 @@ HMODULE32 WINAPI LoadLibraryEx32W(LPCWSTR libnameW,HFILE32 hfile,DWORD flags)
|
|||
*/
|
||||
BOOL32 WINAPI FreeLibrary32(HINSTANCE32 hLibModule)
|
||||
{
|
||||
TRACE(module,"hLibModule=%08x\n", hLibModule);
|
||||
return MODULE_FreeModule(hLibModule,GlobalLock16(GetCurrentTask()) );
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* LoadLibrary (KERNEL.95)
|
||||
*/
|
||||
HINSTANCE16 WINAPI LoadLibrary16( LPCSTR libname )
|
||||
{
|
||||
HINSTANCE16 handle;
|
||||
|
||||
TRACE(module, "(%08x) %s\n", (int)libname, libname);
|
||||
|
||||
handle = MODULE_Load( libname, 0, NULL, NULL, 0 );
|
||||
if (handle == (HINSTANCE16)2) /* file not found */
|
||||
{
|
||||
char buffer[256];
|
||||
lstrcpyn32A( buffer, libname, 252 );
|
||||
strcat( buffer, ".dll" );
|
||||
handle = MODULE_Load( buffer, 0, NULL, NULL, 0 );
|
||||
}
|
||||
return handle;
|
||||
WARN(module,"(%08x): stub\n", hLibModule);
|
||||
return TRUE; /* FIXME */
|
||||
}
|
||||
|
||||
|
||||
|
@ -919,15 +513,6 @@ HINSTANCE32 WINAPI PrivateLoadLibrary(LPCSTR libname)
|
|||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* FreeLibrary16 (KERNEL.96)
|
||||
*/
|
||||
void WINAPI FreeLibrary16( HINSTANCE16 handle )
|
||||
{
|
||||
TRACE(module,"%04x\n", handle );
|
||||
FreeModule16( handle );
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* PrivateFreeLibrary (KERNEL32)
|
||||
|
@ -1001,7 +586,7 @@ HINSTANCE32 WINAPI WinExec32( LPCSTR lpCmdLine, UINT32 nCmdShow )
|
|||
{
|
||||
/* Winelib: Use LoadModule() only for the program itself */
|
||||
if (__winelib) use_load_module = 0;
|
||||
handle = MODULE_Load( filename, 0, lpCmdLine, NULL, nCmdShow );
|
||||
handle = MODULE_Load( filename, FALSE, lpCmdLine, NULL, nCmdShow );
|
||||
if (handle == 2) /* file not found */
|
||||
{
|
||||
/* Check that the original file name did not have a suffix */
|
||||
|
@ -1011,7 +596,7 @@ HINSTANCE32 WINAPI WinExec32( LPCSTR lpCmdLine, UINT32 nCmdShow )
|
|||
{
|
||||
p = filename + strlen(filename);
|
||||
strcpy( p, ".exe" );
|
||||
handle = MODULE_Load( filename, 0, lpCmdLine,
|
||||
handle = MODULE_Load( filename, FALSE, lpCmdLine,
|
||||
NULL, nCmdShow );
|
||||
*p = '\0'; /* Remove extension */
|
||||
}
|
||||
|
@ -1094,7 +679,7 @@ HINSTANCE32 WINAPI WinExec32( LPCSTR lpCmdLine, UINT32 nCmdShow )
|
|||
* WIN32_GetProcAddress16 (KERNEL32.36)
|
||||
* Get procaddress in 16bit module from win32... (kernel32 undoc. ordinal func)
|
||||
*/
|
||||
FARPROC16 WINAPI WIN32_GetProcAddress16( HMODULE32 hModule, LPSTR name )
|
||||
FARPROC16 WINAPI WIN32_GetProcAddress16( HMODULE32 hModule, LPCSTR name )
|
||||
{
|
||||
WORD ordinal;
|
||||
FARPROC16 ret;
|
||||
|
@ -1103,7 +688,12 @@ FARPROC16 WINAPI WIN32_GetProcAddress16( HMODULE32 hModule, LPSTR name )
|
|||
WARN(module,"hModule may not be 0!\n");
|
||||
return (FARPROC16)0;
|
||||
}
|
||||
hModule = MODULE_HANDLEtoHMODULE16(hModule);
|
||||
if (HIWORD(hModule))
|
||||
{
|
||||
WARN( module, "hModule is Win32 handle (%08x)\n", hModule );
|
||||
return (FARPROC16)0;
|
||||
}
|
||||
hModule = GetExePtr( hModule );
|
||||
if (HIWORD(name)) {
|
||||
ordinal = NE_GetOrdinal( hModule, name );
|
||||
TRACE(module, "%04x '%s'\n",
|
||||
|
@ -1201,78 +791,3 @@ LPIMAGE_NT_HEADERS WINAPI RtlImageNtHeader(HMODULE32 hModule)
|
|||
if (!wm || (wm->type != MODULE32_PE)) return (LPIMAGE_NT_HEADERS)0;
|
||||
return PE_HEADER(wm->module);
|
||||
}
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
* GetExpWinVer (KERNEL.167)
|
||||
*/
|
||||
WORD WINAPI GetExpWinVer( HMODULE16 hModule )
|
||||
{
|
||||
NE_MODULE *pModule = MODULE_GetPtr16( hModule );
|
||||
return pModule ? pModule->expected_version : 0;
|
||||
}
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
* IsSharedSelector (KERNEL.345)
|
||||
*/
|
||||
BOOL16 WINAPI IsSharedSelector( HANDLE16 selector )
|
||||
{
|
||||
/* Check whether the selector belongs to a DLL */
|
||||
NE_MODULE *pModule = MODULE_GetPtr16( selector );
|
||||
if (!pModule) return FALSE;
|
||||
return (pModule->flags & NE_FFLAGS_LIBMODULE) != 0;
|
||||
}
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
* ModuleFirst (TOOLHELP.59)
|
||||
*/
|
||||
BOOL16 WINAPI ModuleFirst( MODULEENTRY *lpme )
|
||||
{
|
||||
lpme->wNext = hFirstModule;
|
||||
return ModuleNext( lpme );
|
||||
}
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
* ModuleNext (TOOLHELP.60)
|
||||
*/
|
||||
BOOL16 WINAPI ModuleNext( MODULEENTRY *lpme )
|
||||
{
|
||||
NE_MODULE *pModule;
|
||||
char *name;
|
||||
|
||||
if (!lpme->wNext) return FALSE;
|
||||
if (!(pModule = MODULE_GetPtr16( lpme->wNext ))) return FALSE;
|
||||
name = (char *)pModule + pModule->name_table;
|
||||
memcpy( lpme->szModule, name + 1, *name );
|
||||
lpme->szModule[(BYTE)*name] = '\0';
|
||||
lpme->hModule = lpme->wNext;
|
||||
lpme->wcUsage = pModule->count;
|
||||
strncpy( lpme->szExePath, NE_MODULE_NAME(pModule), MAX_PATH );
|
||||
lpme->szExePath[MAX_PATH] = '\0';
|
||||
lpme->wNext = pModule->next;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
* ModuleFindName (TOOLHELP.61)
|
||||
*/
|
||||
BOOL16 WINAPI ModuleFindName( MODULEENTRY *lpme, LPCSTR name )
|
||||
{
|
||||
lpme->wNext = GetModuleHandle16( name );
|
||||
return ModuleNext( lpme );
|
||||
}
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
* ModuleFindHandle (TOOLHELP.62)
|
||||
*/
|
||||
BOOL16 WINAPI ModuleFindHandle( MODULEENTRY *lpme, HMODULE16 hModule )
|
||||
{
|
||||
hModule = GetExePtr( hModule );
|
||||
lpme->wNext = hModule;
|
||||
return ModuleNext( lpme );
|
||||
}
|
||||
|
|
|
@ -5,15 +5,36 @@
|
|||
*/
|
||||
|
||||
#include <assert.h>
|
||||
#include <fcntl.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include "module.h"
|
||||
#include "file.h"
|
||||
#include "ldt.h"
|
||||
#include "callback.h"
|
||||
#include "heap.h"
|
||||
#include "task.h"
|
||||
#include "global.h"
|
||||
#include "process.h"
|
||||
#include "toolhelp.h"
|
||||
#include "debug.h"
|
||||
|
||||
HMODULE16 hFirstModule = 0;
|
||||
static HMODULE16 hFirstModule = 0;
|
||||
static NE_MODULE *pCachedModule = 0; /* Module cached by NE_OpenFile */
|
||||
|
||||
static HMODULE16 NE_LoadBuiltin(LPCSTR name,BOOL32 force) { return 0; }
|
||||
HMODULE16 (*fnBUILTIN_LoadModule)(LPCSTR name,BOOL32 force) = NE_LoadBuiltin;
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* NE_GetPtr
|
||||
*/
|
||||
NE_MODULE *NE_GetPtr( HMODULE16 hModule )
|
||||
{
|
||||
return (NE_MODULE *)GlobalLock16( GetExePtr(hModule) );
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* NE_DumpModule
|
||||
|
@ -26,7 +47,7 @@ void NE_DumpModule( HMODULE16 hModule )
|
|||
WORD *pword;
|
||||
NE_MODULE *pModule;
|
||||
|
||||
if (!(pModule = MODULE_GetPtr16( hModule )))
|
||||
if (!(pModule = NE_GetPtr( hModule )))
|
||||
{
|
||||
fprintf( stderr, "**** %04x is not a module handle\n", hModule );
|
||||
return;
|
||||
|
@ -99,8 +120,9 @@ void NE_DumpModule( HMODULE16 hModule )
|
|||
pword = (WORD *)((BYTE *)pModule + pModule->modref_table);
|
||||
for (i = 0; i < pModule->modref_count; i++, pword++)
|
||||
{
|
||||
DUMP( "%d: %04x -> '%s'\n", i, *pword,
|
||||
MODULE_GetModuleName(*pword));
|
||||
char name[10];
|
||||
GetModuleName( *pword, name, sizeof(name) );
|
||||
DUMP( "%d: %04x -> '%s'\n", i, *pword, name );
|
||||
}
|
||||
}
|
||||
else DUMP( "None\n" );
|
||||
|
@ -170,7 +192,7 @@ void NE_WalkModules(void)
|
|||
fprintf( stderr, "Module Flags Name\n" );
|
||||
while (hModule)
|
||||
{
|
||||
NE_MODULE *pModule = MODULE_GetPtr16( hModule );
|
||||
NE_MODULE *pModule = NE_GetPtr( hModule );
|
||||
if (!pModule)
|
||||
{
|
||||
fprintf( stderr, "**** Bad module %04x in list\n", hModule );
|
||||
|
@ -205,7 +227,7 @@ WORD NE_GetOrdinal( HMODULE16 hModule, const char *name )
|
|||
BYTE len;
|
||||
NE_MODULE *pModule;
|
||||
|
||||
if (!(pModule = MODULE_GetPtr16( hModule ))) return 0;
|
||||
if (!(pModule = NE_GetPtr( hModule ))) return 0;
|
||||
assert( !(pModule->flags & NE_FFLAGS_WIN32) );
|
||||
|
||||
TRACE( module, "(%04x,'%s')\n", hModule, name );
|
||||
|
@ -270,7 +292,7 @@ FARPROC16 NE_GetEntryPoint( HMODULE16 hModule, WORD ordinal )
|
|||
BYTE *p;
|
||||
WORD sel, offset;
|
||||
|
||||
if (!(pModule = MODULE_GetPtr16( hModule ))) return 0;
|
||||
if (!(pModule = NE_GetPtr( hModule ))) return 0;
|
||||
assert( !(pModule->flags & NE_FFLAGS_WIN32) );
|
||||
|
||||
p = (BYTE *)pModule + pModule->entry_table;
|
||||
|
@ -321,7 +343,7 @@ BOOL16 NE_SetEntryPoint( HMODULE16 hModule, WORD ordinal, WORD offset )
|
|||
WORD curOrdinal = 1;
|
||||
BYTE *p;
|
||||
|
||||
if (!(pModule = MODULE_GetPtr16( hModule ))) return FALSE;
|
||||
if (!(pModule = NE_GetPtr( hModule ))) return FALSE;
|
||||
assert( !(pModule->flags & NE_FFLAGS_WIN32) );
|
||||
|
||||
p = (BYTE *)pModule + pModule->entry_table;
|
||||
|
@ -355,10 +377,36 @@ BOOL16 NE_SetEntryPoint( HMODULE16 hModule, WORD ordinal, WORD offset )
|
|||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* NE_OpenFile
|
||||
*/
|
||||
int NE_OpenFile( NE_MODULE *pModule )
|
||||
{
|
||||
DOS_FULL_NAME full_name;
|
||||
char *name;
|
||||
|
||||
static int cachedfd = -1;
|
||||
|
||||
TRACE( module, "(%p) cache: mod=%p fd=%d\n",
|
||||
pModule, pCachedModule, cachedfd );
|
||||
if (pCachedModule == pModule) return cachedfd;
|
||||
close( cachedfd );
|
||||
pCachedModule = pModule;
|
||||
name = NE_MODULE_NAME( pModule );
|
||||
if (!DOSFS_GetFullName( name, TRUE, &full_name ) ||
|
||||
(cachedfd = open( full_name.long_name, O_RDONLY )) == -1)
|
||||
WARN( module, "Can't open file '%s' for module %04x\n",
|
||||
name, pModule->self );
|
||||
TRACE(module, "opened '%s' -> %d\n",
|
||||
name, cachedfd );
|
||||
return cachedfd;
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* NE_LoadExeHeader
|
||||
*/
|
||||
static HMODULE16 NE_LoadExeHeader( HFILE32 hFile, OFSTRUCT *ofs )
|
||||
static HMODULE16 NE_LoadExeHeader( HFILE16 hFile, OFSTRUCT *ofs )
|
||||
{
|
||||
IMAGE_DOS_HEADER mz_header;
|
||||
IMAGE_OS2_HEADER ne_header;
|
||||
|
@ -374,23 +422,23 @@ static HMODULE16 NE_LoadExeHeader( HFILE32 hFile, OFSTRUCT *ofs )
|
|||
((fastload && ((offset) >= fastload_offset) && \
|
||||
((offset)+(size) <= fastload_offset+fastload_length)) ? \
|
||||
(memcpy( buffer, fastload+(offset)-fastload_offset, (size) ), TRUE) : \
|
||||
(_llseek32( hFile, (offset), SEEK_SET), \
|
||||
_lread32( hFile, (buffer), (size) ) == (size)))
|
||||
(_llseek16( hFile, (offset), SEEK_SET), \
|
||||
_hread16( hFile, (buffer), (size) ) == (size)))
|
||||
|
||||
_llseek32( hFile, 0, SEEK_SET );
|
||||
if ((_lread32(hFile,&mz_header,sizeof(mz_header)) != sizeof(mz_header)) ||
|
||||
_llseek16( hFile, 0, SEEK_SET );
|
||||
if ((_hread16(hFile,&mz_header,sizeof(mz_header)) != sizeof(mz_header)) ||
|
||||
(mz_header.e_magic != IMAGE_DOS_SIGNATURE))
|
||||
return (HMODULE16)11; /* invalid exe */
|
||||
|
||||
_llseek32( hFile, mz_header.e_lfanew, SEEK_SET );
|
||||
if (_lread32( hFile, &ne_header, sizeof(ne_header) ) != sizeof(ne_header))
|
||||
_llseek16( hFile, mz_header.e_lfanew, SEEK_SET );
|
||||
if (_hread16( hFile, &ne_header, sizeof(ne_header) ) != sizeof(ne_header))
|
||||
return (HMODULE16)11; /* invalid exe */
|
||||
|
||||
if (ne_header.ne_magic == IMAGE_NT_SIGNATURE) return (HMODULE16)21; /* win32 exe */
|
||||
if (ne_header.ne_magic != IMAGE_OS2_SIGNATURE) return (HMODULE16)11; /* invalid exe */
|
||||
|
||||
if (ne_header.ne_magic == IMAGE_OS2_SIGNATURE_LX) {
|
||||
fprintf(stderr, "Sorry, this is an OS/2 linear executable (LX) file !\n");
|
||||
MSG("Sorry, this is an OS/2 linear executable (LX) file !\n");
|
||||
return (HMODULE16)12;
|
||||
}
|
||||
|
||||
|
@ -425,7 +473,7 @@ static HMODULE16 NE_LoadExeHeader( HFILE32 hFile, OFSTRUCT *ofs )
|
|||
|
||||
/* Clear internal Wine flags in case they are set in the EXE file */
|
||||
|
||||
pModule->flags &= ~(NE_FFLAGS_BUILTIN|NE_FFLAGS_WIN32|NE_FFLAGS_IMPLICIT);
|
||||
pModule->flags &= ~(NE_FFLAGS_BUILTIN | NE_FFLAGS_WIN32);
|
||||
|
||||
/* Read the fast-load area */
|
||||
|
||||
|
@ -437,11 +485,11 @@ static HMODULE16 NE_LoadExeHeader( HFILE32 hFile, OFSTRUCT *ofs )
|
|||
fastload_offset, fastload_length );
|
||||
if ((fastload = HeapAlloc( SystemHeap, 0, fastload_length )) != NULL)
|
||||
{
|
||||
_llseek32( hFile, fastload_offset, SEEK_SET);
|
||||
if (_lread32(hFile, fastload, fastload_length) != fastload_length)
|
||||
_llseek16( hFile, fastload_offset, SEEK_SET);
|
||||
if (_hread16(hFile, fastload, fastload_length) != fastload_length)
|
||||
{
|
||||
HeapFree( SystemHeap, 0, fastload );
|
||||
fprintf(stderr, "Error reading fast-load area !\n");
|
||||
WARN( module, "Error reading fast-load area!\n");
|
||||
fastload = NULL;
|
||||
}
|
||||
}
|
||||
|
@ -575,8 +623,8 @@ static HMODULE16 NE_LoadExeHeader( HFILE32 hFile, OFSTRUCT *ofs )
|
|||
return (HMODULE16)11; /* invalid exe */
|
||||
}
|
||||
buffer = GlobalLock16( pModule->nrname_handle );
|
||||
_llseek32( hFile, ne_header.nrname_tab_offset, SEEK_SET );
|
||||
if (_lread32( hFile, buffer, ne_header.nrname_tab_length )
|
||||
_llseek16( hFile, ne_header.nrname_tab_offset, SEEK_SET );
|
||||
if (_hread16( hFile, buffer, ne_header.nrname_tab_length )
|
||||
!= ne_header.nrname_tab_length)
|
||||
{
|
||||
GlobalFree16( pModule->nrname_handle );
|
||||
|
@ -620,19 +668,18 @@ static BOOL32 NE_LoadDLLs( NE_MODULE *pModule )
|
|||
|
||||
for (i = 0; i < pModule->modref_count; i++, pModRef++)
|
||||
{
|
||||
char buffer[256];
|
||||
char buffer[260];
|
||||
BYTE *pstr = (BYTE *)pModule + pModule->import_table + *pModRef;
|
||||
memcpy( buffer, pstr + 1, *pstr );
|
||||
strcpy( buffer + *pstr, ".dll" );
|
||||
TRACE(module, "Loading '%s'\n", buffer );
|
||||
if (!(*pModRef = MODULE_FindModule16( buffer )))
|
||||
if (!(*pModRef = GetModuleHandle16( buffer )))
|
||||
{
|
||||
/* If the DLL is not loaded yet, load it and store */
|
||||
/* its handle in the list of DLLs to initialize. */
|
||||
HMODULE16 hDLL;
|
||||
|
||||
if ((hDLL = MODULE_Load( buffer, NE_FFLAGS_IMPLICIT,
|
||||
NULL, NULL, 0 )) == 2)
|
||||
if ((hDLL = NE_LoadModule( buffer, NULL, TRUE, TRUE )) == 2)
|
||||
{
|
||||
/* file not found */
|
||||
char *p;
|
||||
|
@ -642,13 +689,13 @@ static BOOL32 NE_LoadDLLs( NE_MODULE *pModule )
|
|||
if (!(p = strrchr( buffer, '\\' ))) p = buffer;
|
||||
memcpy( p + 1, pstr + 1, *pstr );
|
||||
strcpy( p + 1 + *pstr, ".dll" );
|
||||
hDLL = MODULE_Load( buffer, NE_FFLAGS_IMPLICIT, NULL, NULL, 0);
|
||||
hDLL = NE_LoadModule( buffer, NULL, TRUE, TRUE );
|
||||
}
|
||||
if (hDLL < 32)
|
||||
{
|
||||
/* FIXME: cleanup what was done */
|
||||
|
||||
fprintf( stderr, "Could not load '%s' required by '%.*s', error = %d\n",
|
||||
WARN( module, "Could not load '%s' required by '%.*s', error=%d\n",
|
||||
buffer, *((BYTE*)pModule + pModule->name_table),
|
||||
(char *)pModule + pModule->name_table + 1, hDLL );
|
||||
return FALSE;
|
||||
|
@ -658,7 +705,7 @@ static BOOL32 NE_LoadDLLs( NE_MODULE *pModule )
|
|||
}
|
||||
else /* Increment the reference count of the DLL */
|
||||
{
|
||||
NE_MODULE *pOldDLL = MODULE_GetPtr16( *pModRef );
|
||||
NE_MODULE *pOldDLL = NE_GetPtr( *pModRef );
|
||||
if (pOldDLL) pOldDLL->count++;
|
||||
}
|
||||
}
|
||||
|
@ -675,24 +722,60 @@ static BOOL32 NE_LoadDLLs( NE_MODULE *pModule )
|
|||
* without a preceding length byte).
|
||||
* If cmd_line is NULL, the module is loaded as a library even if it is a .exe
|
||||
*/
|
||||
HINSTANCE16 NE_LoadModule( HFILE32 hFile, OFSTRUCT *ofs, UINT16 flags,
|
||||
LPCSTR cmd_line, LPCSTR env, UINT32 show_cmd )
|
||||
HINSTANCE16 NE_LoadModule( LPCSTR name, HINSTANCE16 *hPrevInstance,
|
||||
BOOL32 implicit, BOOL32 lib_only )
|
||||
{
|
||||
HMODULE16 hModule;
|
||||
HINSTANCE16 hInstance;
|
||||
NE_MODULE *pModule;
|
||||
HFILE16 hFile;
|
||||
OFSTRUCT ofs;
|
||||
|
||||
/* Check if the module is already loaded */
|
||||
|
||||
if ((hModule = GetModuleHandle16( name )) != 0)
|
||||
{
|
||||
HINSTANCE16 prev;
|
||||
pModule = NE_GetPtr( hModule );
|
||||
hInstance = NE_CreateInstance( pModule, &prev, lib_only );
|
||||
if (hInstance != prev) /* not a library */
|
||||
NE_LoadSegment( pModule, pModule->dgroup );
|
||||
pModule->count++;
|
||||
if (hPrevInstance) *hPrevInstance = prev;
|
||||
return hInstance;
|
||||
}
|
||||
if (hPrevInstance) *hPrevInstance = 0;
|
||||
|
||||
/* Try to load the built-in first if not disabled */
|
||||
|
||||
if ((hModule = fnBUILTIN_LoadModule( name, FALSE ))) return hModule;
|
||||
|
||||
if ((hFile = OpenFile16( name, &ofs, OF_READ )) == HFILE_ERROR16)
|
||||
{
|
||||
/* Now try the built-in even if disabled */
|
||||
if ((hModule = fnBUILTIN_LoadModule( name, TRUE )))
|
||||
{
|
||||
WARN(module, "Could not load Windows DLL '%s', using built-in module.\n", name );
|
||||
return hModule;
|
||||
}
|
||||
return 2; /* File not found */
|
||||
}
|
||||
|
||||
/* Create the module structure */
|
||||
|
||||
if ((hModule = NE_LoadExeHeader( hFile, ofs )) < 32) return hModule;
|
||||
|
||||
pModule = MODULE_GetPtr16( hModule );
|
||||
pModule->flags |= flags; /* stamp implicitly loaded modules */
|
||||
hModule = NE_LoadExeHeader( hFile, &ofs );
|
||||
_lclose16( hFile );
|
||||
if (hModule < 32) return hModule;
|
||||
pModule = NE_GetPtr( hModule );
|
||||
|
||||
/* Allocate the segments for this module */
|
||||
|
||||
NE_CreateSegments( hModule );
|
||||
hInstance = MODULE_CreateInstance( hModule, NULL, (cmd_line == NULL) );
|
||||
if (!NE_CreateSegments( pModule ) ||
|
||||
!(hInstance = NE_CreateInstance( pModule, NULL, lib_only )))
|
||||
{
|
||||
GlobalFreeAll( hModule );
|
||||
return 8; /* Insufficient memory */
|
||||
}
|
||||
|
||||
/* Load the referenced DLLs */
|
||||
|
||||
|
@ -716,21 +799,307 @@ HINSTANCE16 NE_LoadModule( HFILE32 hFile, OFSTRUCT *ofs, UINT16 flags,
|
|||
* when we load implicitly linked DLLs this will be done by InitTask().
|
||||
*/
|
||||
|
||||
if ((pModule->flags & (NE_FFLAGS_LIBMODULE | NE_FFLAGS_IMPLICIT)) ==
|
||||
NE_FFLAGS_LIBMODULE)
|
||||
if (!implicit && (pModule->flags & NE_FFLAGS_LIBMODULE))
|
||||
NE_InitializeDLLs( hModule );
|
||||
|
||||
/* Create a task for this instance */
|
||||
|
||||
if (cmd_line && !(pModule->flags & NE_FFLAGS_LIBMODULE))
|
||||
{
|
||||
PDB32 *pdb;
|
||||
|
||||
pModule->flags |= NE_FFLAGS_GUI;
|
||||
|
||||
pdb = PROCESS_Create( pModule, cmd_line, env, hInstance, 0, show_cmd );
|
||||
if (pdb && (GetNumTasks() > 1)) Yield16();
|
||||
}
|
||||
|
||||
return hInstance;
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* LoadLibrary (KERNEL.95)
|
||||
*/
|
||||
HINSTANCE16 WINAPI LoadLibrary16( LPCSTR libname )
|
||||
{
|
||||
HINSTANCE16 handle;
|
||||
LPCSTR p;
|
||||
char *new_name;
|
||||
|
||||
TRACE(module, "(%08x) %s\n", (int)libname, libname);
|
||||
|
||||
/* Check for an extension */
|
||||
|
||||
if ((p = strrchr( libname, '.')) && !strchr( p, '/' ) && !strchr( p, '\\'))
|
||||
{
|
||||
/* An extension is present -> use the name as is */
|
||||
return NE_LoadModule( libname, NULL, FALSE, TRUE );
|
||||
}
|
||||
|
||||
/* Now append .dll before loading */
|
||||
|
||||
if (!(new_name = HeapAlloc( GetProcessHeap(), 0, strlen(libname) + 4 )))
|
||||
return 0;
|
||||
strcpy( new_name, libname );
|
||||
strcat( new_name, ".dll" );
|
||||
handle = NE_LoadModule( new_name, NULL, FALSE, TRUE );
|
||||
HeapFree( GetProcessHeap(), 0, new_name );
|
||||
return handle;
|
||||
}
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
* MODULE_CallWEP
|
||||
*
|
||||
* Call a DLL's WEP, allowing it to shut down.
|
||||
* FIXME: we always pass the WEP WEP_FREE_DLL, never WEP_SYSTEM_EXIT
|
||||
*/
|
||||
static BOOL16 MODULE_CallWEP( HMODULE16 hModule )
|
||||
{
|
||||
FARPROC16 WEP = (FARPROC16)0;
|
||||
WORD ordinal = NE_GetOrdinal( hModule, "WEP" );
|
||||
|
||||
if (ordinal) WEP = NE_GetEntryPoint( hModule, ordinal );
|
||||
if (!WEP)
|
||||
{
|
||||
WARN(module, "module %04x doesn't have a WEP\n", hModule );
|
||||
return FALSE;
|
||||
}
|
||||
return Callbacks->CallWindowsExitProc( WEP, WEP_FREE_DLL );
|
||||
}
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
* NE_FreeModule
|
||||
*
|
||||
* Implementation of FreeModule16().
|
||||
*/
|
||||
static BOOL16 NE_FreeModule( HMODULE16 hModule, BOOL32 call_wep )
|
||||
{
|
||||
HMODULE16 *hPrevModule;
|
||||
NE_MODULE *pModule;
|
||||
HMODULE16 *pModRef;
|
||||
int i;
|
||||
|
||||
if (!(pModule = NE_GetPtr( hModule ))) return FALSE;
|
||||
hModule = pModule->self;
|
||||
|
||||
TRACE( module, "%04x count %d\n", hModule, pModule->count );
|
||||
|
||||
if (((INT16)(--pModule->count)) > 0 ) return TRUE;
|
||||
else pModule->count = 0;
|
||||
|
||||
if (pModule->flags & NE_FFLAGS_BUILTIN)
|
||||
return FALSE; /* Can't free built-in module */
|
||||
|
||||
if (call_wep)
|
||||
{
|
||||
if (pModule->flags & NE_FFLAGS_LIBMODULE)
|
||||
{
|
||||
TDB *pTask = (TDB *)GlobalLock16( GetCurrentTask() );
|
||||
MODULE_CallWEP( hModule );
|
||||
|
||||
/* Free the objects owned by the DLL module */
|
||||
|
||||
if (pTask && pTask->userhandler)
|
||||
pTask->userhandler( hModule, USIG_DLL_UNLOAD, 0,
|
||||
pTask->hInstance, pTask->hQueue );
|
||||
}
|
||||
else
|
||||
call_wep = FALSE; /* We are freeing a task -> no more WEPs */
|
||||
}
|
||||
|
||||
|
||||
/* Clear magic number just in case */
|
||||
|
||||
pModule->magic = pModule->self = 0;
|
||||
|
||||
/* Remove it from the linked list */
|
||||
|
||||
hPrevModule = &hFirstModule;
|
||||
while (*hPrevModule && (*hPrevModule != hModule))
|
||||
{
|
||||
hPrevModule = &(NE_GetPtr( *hPrevModule ))->next;
|
||||
}
|
||||
if (*hPrevModule) *hPrevModule = pModule->next;
|
||||
|
||||
/* Free the referenced modules */
|
||||
|
||||
pModRef = (HMODULE16*)NE_MODULE_TABLE( pModule );
|
||||
for (i = 0; i < pModule->modref_count; i++, pModRef++)
|
||||
{
|
||||
NE_FreeModule( *pModRef, call_wep );
|
||||
}
|
||||
|
||||
/* Free the module storage */
|
||||
|
||||
GlobalFreeAll( hModule );
|
||||
|
||||
/* Remove module from cache */
|
||||
|
||||
if (pCachedModule == pModule) pCachedModule = NULL;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
* FreeModule16 (KERNEL.46)
|
||||
*/
|
||||
BOOL16 WINAPI FreeModule16( HMODULE16 hModule )
|
||||
{
|
||||
return NE_FreeModule( hModule, TRUE );
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* FreeLibrary16 (KERNEL.96)
|
||||
*/
|
||||
void WINAPI FreeLibrary16( HINSTANCE16 handle )
|
||||
{
|
||||
TRACE(module,"%04x\n", handle );
|
||||
FreeModule16( handle );
|
||||
}
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
* GetModuleName (KERNEL.27)
|
||||
*/
|
||||
BOOL16 WINAPI GetModuleName( HINSTANCE16 hinst, LPSTR buf, INT16 count )
|
||||
{
|
||||
NE_MODULE *pModule;
|
||||
BYTE *p;
|
||||
|
||||
if (!(pModule = NE_GetPtr( hinst ))) return FALSE;
|
||||
p = (BYTE *)pModule + pModule->name_table;
|
||||
if (count > *p) count = *p + 1;
|
||||
if (count > 0)
|
||||
{
|
||||
memcpy( buf, p + 1, count - 1 );
|
||||
buf[count-1] = '\0';
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
* GetModuleUsage (KERNEL.48)
|
||||
*/
|
||||
INT16 WINAPI GetModuleUsage( HINSTANCE16 hModule )
|
||||
{
|
||||
NE_MODULE *pModule = NE_GetPtr( hModule );
|
||||
return pModule ? pModule->count : 0;
|
||||
}
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
* GetExpWinVer (KERNEL.167)
|
||||
*/
|
||||
WORD WINAPI GetExpWinVer( HMODULE16 hModule )
|
||||
{
|
||||
NE_MODULE *pModule = NE_GetPtr( hModule );
|
||||
return pModule ? pModule->expected_version : 0;
|
||||
}
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
* GetModuleFileName16 (KERNEL.49)
|
||||
*/
|
||||
INT16 WINAPI GetModuleFileName16( HINSTANCE16 hModule, LPSTR lpFileName,
|
||||
INT16 nSize )
|
||||
{
|
||||
NE_MODULE *pModule;
|
||||
|
||||
if (!hModule) hModule = GetCurrentTask();
|
||||
if (!(pModule = NE_GetPtr( hModule ))) return 0;
|
||||
lstrcpyn32A( lpFileName, NE_MODULE_NAME(pModule), nSize );
|
||||
TRACE(module, "%s\n", lpFileName );
|
||||
return strlen(lpFileName);
|
||||
}
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
* GetModuleHandle16 (KERNEL.47)
|
||||
*
|
||||
* Find a module from a path name.
|
||||
*
|
||||
* RETURNS
|
||||
* the win16 module handle if found
|
||||
* 0 if not
|
||||
*/
|
||||
HMODULE16 WINAPI WIN16_GetModuleHandle( SEGPTR name )
|
||||
{
|
||||
if (HIWORD(name) == 0) return GetExePtr( (HINSTANCE16)name );
|
||||
return GetModuleHandle16( PTR_SEG_TO_LIN(name) );
|
||||
}
|
||||
|
||||
HMODULE16 WINAPI GetModuleHandle16( LPCSTR name )
|
||||
{
|
||||
HMODULE16 hModule = hFirstModule;
|
||||
LPCSTR filename, dotptr, modulepath, modulename;
|
||||
BYTE len, *name_table;
|
||||
|
||||
if (!(filename = strrchr( name, '\\' ))) filename = name;
|
||||
else filename++;
|
||||
if ((dotptr = strrchr( filename, '.' )) != NULL)
|
||||
len = (BYTE)(dotptr - filename);
|
||||
else len = strlen( filename );
|
||||
|
||||
while (hModule)
|
||||
{
|
||||
NE_MODULE *pModule = NE_GetPtr( hModule );
|
||||
if (!pModule) break;
|
||||
modulepath = NE_MODULE_NAME(pModule);
|
||||
if (!(modulename = strrchr( modulepath, '\\' )))
|
||||
modulename = modulepath;
|
||||
else modulename++;
|
||||
if (!lstrcmpi32A( modulename, filename )) return hModule;
|
||||
|
||||
name_table = (BYTE *)pModule + pModule->name_table;
|
||||
if ((*name_table == len) && !lstrncmpi32A(filename, name_table+1, len))
|
||||
return hModule;
|
||||
hModule = pModule->next;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
* ModuleFirst (TOOLHELP.59)
|
||||
*/
|
||||
BOOL16 WINAPI ModuleFirst( MODULEENTRY *lpme )
|
||||
{
|
||||
lpme->wNext = hFirstModule;
|
||||
return ModuleNext( lpme );
|
||||
}
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
* ModuleNext (TOOLHELP.60)
|
||||
*/
|
||||
BOOL16 WINAPI ModuleNext( MODULEENTRY *lpme )
|
||||
{
|
||||
NE_MODULE *pModule;
|
||||
char *name;
|
||||
|
||||
if (!lpme->wNext) return FALSE;
|
||||
if (!(pModule = NE_GetPtr( lpme->wNext ))) return FALSE;
|
||||
name = (char *)pModule + pModule->name_table;
|
||||
memcpy( lpme->szModule, name + 1, *name );
|
||||
lpme->szModule[(BYTE)*name] = '\0';
|
||||
lpme->hModule = lpme->wNext;
|
||||
lpme->wcUsage = pModule->count;
|
||||
strncpy( lpme->szExePath, NE_MODULE_NAME(pModule), MAX_PATH );
|
||||
lpme->szExePath[MAX_PATH] = '\0';
|
||||
lpme->wNext = pModule->next;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
* ModuleFindName (TOOLHELP.61)
|
||||
*/
|
||||
BOOL16 WINAPI ModuleFindName( MODULEENTRY *lpme, LPCSTR name )
|
||||
{
|
||||
lpme->wNext = GetModuleHandle16( name );
|
||||
return ModuleNext( lpme );
|
||||
}
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
* ModuleFindHandle (TOOLHELP.62)
|
||||
*/
|
||||
BOOL16 WINAPI ModuleFindHandle( MODULEENTRY *lpme, HMODULE16 hModule )
|
||||
{
|
||||
hModule = GetExePtr( hModule );
|
||||
lpme->wNext = hModule;
|
||||
return ModuleNext( lpme );
|
||||
}
|
||||
|
|
|
@ -183,8 +183,8 @@ HGLOBAL16 WINAPI NE_DefResourceHandler( HGLOBAL16 hMemObj, HMODULE16 hModule,
|
|||
HRSRC16 hRsrc )
|
||||
{
|
||||
int fd;
|
||||
NE_MODULE* pModule = MODULE_GetPtr16( hModule );
|
||||
if ( pModule && (fd = MODULE_OpenFile( hModule )) >= 0)
|
||||
NE_MODULE* pModule = NE_GetPtr( hModule );
|
||||
if (pModule && (fd = NE_OpenFile( pModule )) >= 0)
|
||||
{
|
||||
HGLOBAL16 handle;
|
||||
WORD sizeShift = *(WORD *)((char *)pModule + pModule->res_table);
|
||||
|
@ -215,7 +215,7 @@ HGLOBAL16 WINAPI NE_DefResourceHandler( HGLOBAL16 hMemObj, HMODULE16 hModule,
|
|||
*/
|
||||
BOOL32 NE_InitResourceHandler( HMODULE16 hModule )
|
||||
{
|
||||
NE_MODULE *pModule = MODULE_GetPtr16( hModule );
|
||||
NE_MODULE *pModule = NE_GetPtr( hModule );
|
||||
NE_TYPEINFO *pTypeInfo = (NE_TYPEINFO *)((char *)pModule + pModule->res_table + 2);
|
||||
|
||||
TRACE(resource,"InitResourceHandler[%04x]\n", hModule );
|
||||
|
@ -236,7 +236,7 @@ FARPROC16 WINAPI SetResourceHandler( HMODULE16 hModule, SEGPTR typeId,
|
|||
FARPROC16 resourceHandler )
|
||||
{
|
||||
FARPROC16 prevHandler = NULL;
|
||||
NE_MODULE *pModule = MODULE_GetPtr16( hModule );
|
||||
NE_MODULE *pModule = NE_GetPtr( hModule );
|
||||
NE_TYPEINFO *pTypeInfo = (NE_TYPEINFO *)((char *)pModule + pModule->res_table + 2);
|
||||
|
||||
if (!pModule || !pModule->res_table) return NULL;
|
||||
|
@ -264,7 +264,7 @@ HRSRC16 WINAPI FindResource16( HMODULE16 hModule, SEGPTR name, SEGPTR type )
|
|||
NE_TYPEINFO *pTypeInfo;
|
||||
HRSRC16 hRsrc;
|
||||
|
||||
NE_MODULE *pModule = MODULE_GetPtr16( hModule );
|
||||
NE_MODULE *pModule = NE_GetPtr( hModule );
|
||||
if (!pModule || !pModule->res_table) return 0;
|
||||
|
||||
assert( !__winelib ); /* Can't use Win16 resource functions in Winelib */
|
||||
|
@ -333,7 +333,7 @@ HGLOBAL16 WINAPI AllocResource( HMODULE16 hModule, HRSRC16 hRsrc, DWORD size)
|
|||
NE_NAMEINFO *pNameInfo=NULL;
|
||||
WORD sizeShift;
|
||||
|
||||
NE_MODULE *pModule = MODULE_GetPtr16( hModule );
|
||||
NE_MODULE *pModule = NE_GetPtr( hModule );
|
||||
if (!pModule || !pModule->res_table || !hRsrc) return 0;
|
||||
|
||||
TRACE( resource, "module=%04x res=%04x size=%ld\n", hModule, hRsrc, size );
|
||||
|
@ -361,7 +361,7 @@ HGLOBAL16 WINAPI DirectResAlloc( HINSTANCE16 hInstance, WORD wType,
|
|||
if (!(hInstance = GetExePtr( hInstance ))) return 0;
|
||||
if(wType != 0x10) /* 0x10 is the only observed value, passed from
|
||||
CreateCursorIndirect. */
|
||||
fprintf(stderr, "DirectResAlloc: wType = %x\n", wType);
|
||||
TRACE(resource, "(wType=%x)\n", wType);
|
||||
return GLOBAL_Alloc(GMEM_MOVEABLE, wSize, hInstance, FALSE, FALSE, FALSE);
|
||||
}
|
||||
|
||||
|
@ -373,7 +373,7 @@ INT16 WINAPI AccessResource16( HINSTANCE16 hModule, HRSRC16 hRsrc )
|
|||
{
|
||||
HFILE32 fd;
|
||||
|
||||
NE_MODULE *pModule = MODULE_GetPtr16( hModule );
|
||||
NE_MODULE *pModule = NE_GetPtr( hModule );
|
||||
if (!pModule || !pModule->res_table || !hRsrc) return -1;
|
||||
|
||||
TRACE(resource, "module=%04x res=%04x\n", hModule, hRsrc );
|
||||
|
@ -398,7 +398,7 @@ DWORD WINAPI SizeofResource16( HMODULE16 hModule, HRSRC16 hRsrc )
|
|||
NE_NAMEINFO *pNameInfo=NULL;
|
||||
WORD sizeShift;
|
||||
|
||||
NE_MODULE *pModule = MODULE_GetPtr16( hModule );
|
||||
NE_MODULE *pModule = NE_GetPtr( hModule );
|
||||
if (!pModule || !pModule->res_table) return 0;
|
||||
|
||||
TRACE(resource, "module=%04x res=%04x\n", hModule, hRsrc );
|
||||
|
@ -418,7 +418,7 @@ HGLOBAL16 WINAPI LoadResource16( HMODULE16 hModule, HRSRC16 hRsrc )
|
|||
{
|
||||
NE_TYPEINFO *pTypeInfo;
|
||||
NE_NAMEINFO *pNameInfo = NULL;
|
||||
NE_MODULE *pModule = MODULE_GetPtr16( hModule );
|
||||
NE_MODULE *pModule = NE_GetPtr( hModule );
|
||||
int d;
|
||||
|
||||
TRACE( resource, "module=%04x res=%04x\n", hModule, hRsrc );
|
||||
|
@ -464,7 +464,7 @@ HGLOBAL16 WINAPI LoadResource16( HMODULE16 hModule, HRSRC16 hRsrc )
|
|||
loader = (RESOURCEHANDLER16)pTypeInfo->resloader;
|
||||
else /* this is really bad */
|
||||
{
|
||||
fprintf( stderr, "[%04x]: Missing resource handler!!!...\n", hModule);
|
||||
ERR(resource, "[%04x]: Missing resource handler!\n", hModule);
|
||||
loader = NE_DefResourceHandler;
|
||||
}
|
||||
|
||||
|
@ -513,8 +513,7 @@ BOOL16 WINAPI FreeResource16( HGLOBAL16 handle )
|
|||
NE_TYPEINFO *pTypeInfo;
|
||||
NE_NAMEINFO *pNameInfo;
|
||||
WORD count;
|
||||
HMODULE16 hModule = GetExePtr( handle );
|
||||
NE_MODULE *pModule = MODULE_GetPtr16( hModule );
|
||||
NE_MODULE *pModule = NE_GetPtr( GetExePtr(handle) );
|
||||
|
||||
if (!handle || !pModule || !pModule->res_table) return handle;
|
||||
|
||||
|
@ -545,7 +544,7 @@ BOOL16 WINAPI FreeResource16( HGLOBAL16 handle )
|
|||
}
|
||||
|
||||
TRACE(resource, "[%04x]: no intrinsic resource for %04x, assuming DirectResAlloc()!\n",
|
||||
hModule, handle );
|
||||
pModule->self, handle );
|
||||
GlobalFree16( handle );
|
||||
return handle;
|
||||
}
|
||||
|
|
|
@ -72,7 +72,7 @@ BOOL32 NE_LoadSegment( NE_MODULE *pModule, WORD segnum )
|
|||
|
||||
if (!pSeg->filepos) return TRUE; /* No file image, just return */
|
||||
|
||||
fd = MODULE_OpenFile( pModule->self );
|
||||
fd = NE_OpenFile( pModule );
|
||||
TRACE(module, "Loading segment %d, selector=%04x, flags=%04x\n",
|
||||
segnum, pSeg->selector, pSeg->flags );
|
||||
lseek( fd, pSeg->filepos << pModule->alignment, SEEK_SET );
|
||||
|
@ -118,8 +118,8 @@ BOOL32 NE_LoadSegment( NE_MODULE *pModule, WORD segnum )
|
|||
pSeg->minsize ? pSeg->minsize : 0x10000);
|
||||
FreeSelector(newselector);
|
||||
pSeg->selector = oldselector;
|
||||
fprintf(stderr, "A new selector was allocated for the dgroup segment\n"
|
||||
"Old selector is %d, new one is %d", oldselector, newselector);
|
||||
TRACE(module, "New selector allocated for dgroup segment:Old=%d,New=%d\n",
|
||||
oldselector, newselector);
|
||||
} else {
|
||||
FreeSelector(pSeg->selector);
|
||||
pSeg->selector = newselector;
|
||||
|
@ -201,22 +201,22 @@ BOOL32 NE_LoadSegment( NE_MODULE *pModule, WORD segnum )
|
|||
address = NE_GetEntryPoint( module, ordinal );
|
||||
if (!address)
|
||||
{
|
||||
NE_MODULE *pTarget = MODULE_GetPtr16( module );
|
||||
NE_MODULE *pTarget = NE_GetPtr( module );
|
||||
if (!pTarget)
|
||||
fprintf( stderr, "Module not found: %04x, reference %d of module %*.*s\n",
|
||||
WARN(module, "Module not found: %04x, reference %d of module %*.*s\n",
|
||||
module, rep->target1,
|
||||
*((BYTE *)pModule + pModule->name_table),
|
||||
*((BYTE *)pModule + pModule->name_table),
|
||||
(char *)pModule + pModule->name_table + 1 );
|
||||
else
|
||||
fprintf( stderr, "Warning: no handler for %.*s.%d, setting to 0:0\n",
|
||||
WARN(module, "No handler for %.*s.%d, setting to 0:0\n",
|
||||
*((BYTE *)pTarget + pTarget->name_table),
|
||||
(char *)pTarget + pTarget->name_table + 1,
|
||||
ordinal );
|
||||
}
|
||||
if (TRACE_ON(fixup))
|
||||
{
|
||||
NE_MODULE *pTarget = MODULE_GetPtr16( module );
|
||||
NE_MODULE *pTarget = NE_GetPtr( module );
|
||||
TRACE( fixup, "%d: %.*s.%d=%04x:%04x %s\n", i + 1,
|
||||
*((BYTE *)pTarget + pTarget->name_table),
|
||||
(char *)pTarget + pTarget->name_table + 1,
|
||||
|
@ -236,14 +236,14 @@ BOOL32 NE_LoadSegment( NE_MODULE *pModule, WORD segnum )
|
|||
|
||||
if (ERR_ON(fixup) && !address)
|
||||
{
|
||||
NE_MODULE *pTarget = MODULE_GetPtr16( module );
|
||||
NE_MODULE *pTarget = NE_GetPtr( module );
|
||||
ERR(fixup, "Warning: no handler for %.*s.%s, setting to 0:0\n",
|
||||
*((BYTE *)pTarget + pTarget->name_table),
|
||||
(char *)pTarget + pTarget->name_table + 1, func_name );
|
||||
}
|
||||
if (TRACE_ON(fixup))
|
||||
{
|
||||
NE_MODULE *pTarget = MODULE_GetPtr16( module );
|
||||
NE_MODULE *pTarget = NE_GetPtr( module );
|
||||
TRACE( fixup, "%d: %.*s.%s=%04x:%04x %s\n", i + 1,
|
||||
*((BYTE *)pTarget + pTarget->name_table),
|
||||
(char *)pTarget + pTarget->name_table + 1,
|
||||
|
@ -288,8 +288,12 @@ BOOL32 NE_LoadSegment( NE_MODULE *pModule, WORD segnum )
|
|||
/* Apparently, high bit of address_type is sometimes set; */
|
||||
/* we ignore it for now */
|
||||
if (rep->address_type > NE_RADDR_OFFSET32)
|
||||
{
|
||||
char module[10];
|
||||
GetModuleName( pModule->self, module, sizeof(module) );
|
||||
ERR( fixup, "WARNING: module %s: unknown reloc addr type = 0x%02x. Please report.\n",
|
||||
MODULE_GetModuleName(pModule->self), rep->address_type );
|
||||
module, rep->address_type );
|
||||
}
|
||||
|
||||
if (additive)
|
||||
{
|
||||
|
@ -405,7 +409,7 @@ BOOL32 NE_LoadAllSegments( NE_MODULE *pModule )
|
|||
stack16Top->ip = 0;
|
||||
stack16Top->cs = 0;
|
||||
|
||||
hf = FILE_DupUnixHandle( MODULE_OpenFile( pModule->self ) );
|
||||
hf = FILE_DupUnixHandle( NE_OpenFile( pModule ) );
|
||||
Callbacks->CallBootAppProc(selfloadheader->BootApp, pModule->self, hf);
|
||||
_lclose32(hf);
|
||||
/* some BootApp procs overwrite the selector of dgroup */
|
||||
|
@ -490,7 +494,7 @@ void NE_FixupPrologs( NE_MODULE *pModule )
|
|||
if (pModule->flags & NE_FFLAGS_MULTIPLEDATA)
|
||||
{
|
||||
/* can this happen? */
|
||||
fprintf( stderr, "FixupPrologs got confused\n" );
|
||||
ERR(fixup, "FixupPrologs got confused\n" );
|
||||
}
|
||||
else if (pModule->flags & NE_FFLAGS_SINGLEDATA)
|
||||
{
|
||||
|
@ -523,9 +527,8 @@ void NE_FixupPrologs( NE_MODULE *pModule )
|
|||
*
|
||||
* Call the DLL initialization code
|
||||
*/
|
||||
static BOOL32 NE_InitDLL( TDB* pTask, HMODULE16 hModule )
|
||||
static BOOL32 NE_InitDLL( TDB* pTask, NE_MODULE *pModule )
|
||||
{
|
||||
NE_MODULE *pModule;
|
||||
SEGTABLEENTRY *pSegTable;
|
||||
CONTEXT context;
|
||||
|
||||
|
@ -536,7 +539,6 @@ static BOOL32 NE_InitDLL( TDB* pTask, HMODULE16 hModule )
|
|||
* es:si command line (always 0)
|
||||
*/
|
||||
|
||||
if (!(pModule = MODULE_GetPtr16( hModule ))) return FALSE;
|
||||
pSegTable = NE_SEG_TABLE( pModule );
|
||||
|
||||
if (!(pModule->flags & NE_FFLAGS_LIBMODULE) ||
|
||||
|
@ -548,7 +550,7 @@ static BOOL32 NE_InitDLL( TDB* pTask, HMODULE16 hModule )
|
|||
|
||||
if (pTask && pTask->userhandler)
|
||||
{
|
||||
pTask->userhandler( hModule, USIG_DLL_LOAD, 0, pTask->hInstance,
|
||||
pTask->userhandler( pModule->self, USIG_DLL_LOAD, 0, pTask->hInstance,
|
||||
pTask->hQueue );
|
||||
}
|
||||
|
||||
|
@ -561,7 +563,7 @@ static BOOL32 NE_InitDLL( TDB* pTask, HMODULE16 hModule )
|
|||
if (pModule->flags & NE_FFLAGS_MULTIPLEDATA || pModule->dgroup)
|
||||
{
|
||||
/* Not SINGLEDATA */
|
||||
fprintf(stderr, "Library is not marked SINGLEDATA\n");
|
||||
ERR(dll, "Library is not marked SINGLEDATA\n");
|
||||
exit(1);
|
||||
}
|
||||
else /* DATA NONE DLL */
|
||||
|
@ -589,7 +591,7 @@ static BOOL32 NE_InitDLL( TDB* pTask, HMODULE16 hModule )
|
|||
EIP_reg(&context) = pModule->ip;
|
||||
EBP_reg(&context) = OFFSETOF(THREAD_Current()->cur_stack)
|
||||
+ (WORD)&((STACK16FRAME*)0)->bp;
|
||||
EDI_reg(&context) = DS_reg(&context) ? DS_reg(&context) : hModule;
|
||||
EDI_reg(&context) = DS_reg(&context) ? DS_reg(&context) : pModule->self;
|
||||
|
||||
|
||||
pModule->cs = 0; /* Don't initialize it twice */
|
||||
|
@ -600,6 +602,44 @@ static BOOL32 NE_InitDLL( TDB* pTask, HMODULE16 hModule )
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* NE_CallDllEntryPoint
|
||||
*
|
||||
* Call the DllEntryPoint of DLLs with subsystem >= 4.0
|
||||
*/
|
||||
|
||||
static void NE_CallDllEntryPoint( NE_MODULE *pModule, DWORD dwReason )
|
||||
{
|
||||
FARPROC16 entryPoint;
|
||||
WORD ordinal;
|
||||
CONTEXT context;
|
||||
THDB *thdb = THREAD_Current();
|
||||
LPBYTE stack = (LPBYTE)THREAD_STACK16(thdb);
|
||||
|
||||
if (pModule->expected_version < 0x0400) return;
|
||||
if (!(ordinal = NE_GetOrdinal( pModule->self, "DllEntryPoint" ))) return;
|
||||
if (!(entryPoint = NE_GetEntryPoint( pModule->self, ordinal ))) return;
|
||||
|
||||
memset( &context, 0, sizeof(context) );
|
||||
|
||||
CS_reg(&context) = HIWORD(entryPoint);
|
||||
IP_reg(&context) = LOWORD(entryPoint);
|
||||
EBP_reg(&context) = OFFSETOF( thdb->cur_stack )
|
||||
+ (WORD)&((STACK16FRAME*)0)->bp;
|
||||
|
||||
*(DWORD *)(stack - 4) = dwReason; /* dwReason */
|
||||
*(WORD *) (stack - 6) = pModule->self; /* hInst */
|
||||
*(WORD *) (stack - 8) = 0; /* wDS */
|
||||
*(WORD *) (stack - 10) = 0; /* wHeapSize */
|
||||
*(DWORD *)(stack - 14) = 0; /* dwReserved1 */
|
||||
*(WORD *) (stack - 16) = 0; /* wReserved2 */
|
||||
|
||||
TRACE(dll, "Calling DllEntryPoint, cs:ip=%04lx:%04x\n",
|
||||
CS_reg(&context), IP_reg(&context));
|
||||
|
||||
Callbacks->CallRegisterShortProc( &context, 16 );
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* NE_InitializeDLLs
|
||||
|
@ -613,8 +653,8 @@ void NE_InitializeDLLs( HMODULE16 hModule )
|
|||
NE_MODULE *pModule;
|
||||
HMODULE16 *pDLL;
|
||||
|
||||
if (!(pModule = MODULE_GetPtr16( hModule ))) return;
|
||||
if (pModule->flags & NE_FFLAGS_WIN32) return;
|
||||
if (!(pModule = NE_GetPtr( hModule ))) return;
|
||||
assert( !(pModule->flags & NE_FFLAGS_WIN32) );
|
||||
|
||||
if (pModule->dlls_to_init)
|
||||
{
|
||||
|
@ -626,7 +666,47 @@ void NE_InitializeDLLs( HMODULE16 hModule )
|
|||
}
|
||||
GlobalFree16( to_init );
|
||||
}
|
||||
NE_InitDLL( pTask, hModule );
|
||||
NE_InitDLL( pTask, pModule );
|
||||
NE_CallDllEntryPoint( pModule, DLL_PROCESS_ATTACH );
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* NE_CreateInstance
|
||||
*
|
||||
* If lib_only is TRUE, handle the module like a library even if it is a .EXE
|
||||
*/
|
||||
HINSTANCE16 NE_CreateInstance( NE_MODULE *pModule, HINSTANCE16 *prev,
|
||||
BOOL32 lib_only )
|
||||
{
|
||||
SEGTABLEENTRY *pSegment;
|
||||
int minsize;
|
||||
HINSTANCE16 hNewInstance;
|
||||
|
||||
if (pModule->dgroup == 0)
|
||||
{
|
||||
if (prev) *prev = pModule->self;
|
||||
return pModule->self;
|
||||
}
|
||||
|
||||
pSegment = NE_SEG_TABLE( pModule ) + pModule->dgroup - 1;
|
||||
if (prev) *prev = pSegment->selector;
|
||||
|
||||
/* if it's a library, create a new instance only the first time */
|
||||
if (pSegment->selector)
|
||||
{
|
||||
if (pModule->flags & NE_FFLAGS_LIBMODULE) return pSegment->selector;
|
||||
if (lib_only) return pSegment->selector;
|
||||
}
|
||||
|
||||
minsize = pSegment->minsize ? pSegment->minsize : 0x10000;
|
||||
if (pModule->ss == pModule->dgroup) minsize += pModule->stack_size;
|
||||
minsize += pModule->heap_size;
|
||||
hNewInstance = GLOBAL_Alloc( GMEM_ZEROINIT | GMEM_FIXED, minsize,
|
||||
pModule->self, FALSE, FALSE, FALSE );
|
||||
if (!hNewInstance) return 0;
|
||||
pSegment->selector = hNewInstance;
|
||||
return hNewInstance;
|
||||
}
|
||||
|
||||
|
||||
|
@ -639,7 +719,7 @@ void NE_InitializeDLLs( HMODULE16 hModule )
|
|||
/* It does nothing */
|
||||
void WINAPI PatchCodeHandle(HANDLE16 hSel)
|
||||
{
|
||||
fprintf(stderr,"PatchCodeHandle(%04x),stub!\n",hSel);
|
||||
FIXME(module,"(%04x): stub.\n",hSel);
|
||||
}
|
||||
|
||||
|
||||
|
@ -682,13 +762,11 @@ DWORD WINAPI NE_AllocateSegment( WORD wFlags, WORD wSize, WORD wElem )
|
|||
/***********************************************************************
|
||||
* NE_CreateSegments
|
||||
*/
|
||||
BOOL32 NE_CreateSegments( HMODULE16 hModule )
|
||||
BOOL32 NE_CreateSegments( NE_MODULE *pModule )
|
||||
{
|
||||
SEGTABLEENTRY *pSegment;
|
||||
NE_MODULE *pModule;
|
||||
int i, minsize;
|
||||
|
||||
if (!(pModule = MODULE_GetPtr16( hModule ))) return FALSE;
|
||||
assert( !(pModule->flags & NE_FFLAGS_WIN32) );
|
||||
|
||||
pSegment = NE_SEG_TABLE( pModule );
|
||||
|
@ -696,10 +774,10 @@ BOOL32 NE_CreateSegments( HMODULE16 hModule )
|
|||
{
|
||||
minsize = pSegment->minsize ? pSegment->minsize : 0x10000;
|
||||
if (i == pModule->ss) minsize += pModule->stack_size;
|
||||
/* The DGROUP is allocated by MODULE_CreateInstance */
|
||||
/* The DGROUP is allocated by NE_CreateInstance */
|
||||
if (i == pModule->dgroup) continue;
|
||||
pSegment->selector = GLOBAL_Alloc( NE_Ne2MemFlags(pSegment->flags),
|
||||
minsize, hModule,
|
||||
minsize, pModule->self,
|
||||
!(pSegment->flags & NE_SEGFLAGS_DATA),
|
||||
FALSE,
|
||||
FALSE /*pSegment->flags & NE_SEGFLAGS_READONLY*/ );
|
||||
|
@ -710,3 +788,15 @@ BOOL32 NE_CreateSegments( HMODULE16 hModule )
|
|||
(pModule->dgroup - 1) * sizeof(SEGTABLEENTRY) : 0;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
* IsSharedSelector (KERNEL.345)
|
||||
*/
|
||||
BOOL16 WINAPI IsSharedSelector( HANDLE16 selector )
|
||||
{
|
||||
/* Check whether the selector belongs to a DLL */
|
||||
NE_MODULE *pModule = NE_GetPtr( selector );
|
||||
if (!pModule) return FALSE;
|
||||
return (pModule->flags & NE_FFLAGS_LIBMODULE) != 0;
|
||||
}
|
||||
|
|
|
@ -241,18 +241,14 @@ DWORD fixup_imports (PDB32 *process,WINE_MODREF *wm)
|
|||
/* don't use MODULE_Load, Win32 creates new task differently */
|
||||
res = PE_LoadLibraryEx32A( name, process, 0, 0 );
|
||||
if (res <= (HMODULE32) 32) {
|
||||
char buffer[1024];
|
||||
|
||||
/* Try with prepending the path of the current module */
|
||||
if (GetModuleFileName32A( wm->module, buffer, sizeof (buffer))) {
|
||||
char *p;
|
||||
|
||||
if (!(p = strrchr (buffer, '\\')))
|
||||
p = buffer;
|
||||
strcpy (p + 1, name);
|
||||
res = PE_LoadLibraryEx32A( buffer, process, 0, 0 );
|
||||
} else
|
||||
ERR(win32,"cannot find the module just loaded!\n");
|
||||
char *p,buffer[2000];
|
||||
|
||||
/* GetModuleFileName would use the wrong process, so don't use it */
|
||||
strcpy(buffer,wm->shortname);
|
||||
if (!(p = strrchr (buffer, '\\')))
|
||||
p = buffer;
|
||||
strcpy (p + 1, name);
|
||||
res = PE_LoadLibraryEx32A( buffer, process, 0, 0 );
|
||||
}
|
||||
if (res <= (HMODULE32) 32) {
|
||||
WARN (module, "Module %s not found\n", name);
|
||||
|
@ -533,36 +529,32 @@ error:
|
|||
/**********************************************************************
|
||||
* This maps a loaded PE dll into the address space of the specified process.
|
||||
*/
|
||||
static BOOL32 PE_MapImage( HMODULE32 *phModule, PDB32 *process,
|
||||
OFSTRUCT *ofs, DWORD flags )
|
||||
static BOOL32 PE_MapImage( PDB32 *process,WINE_MODREF *wm, OFSTRUCT *ofs, DWORD flags )
|
||||
{
|
||||
WINE_MODREF *wm;
|
||||
PE_MODREF *pem;
|
||||
int i, result;
|
||||
DWORD load_addr;
|
||||
IMAGE_DATA_DIRECTORY dir;
|
||||
char *modname;
|
||||
int vma_size;
|
||||
HMODULE32 hModule = *phModule;
|
||||
HMODULE32 hModule = wm->module;
|
||||
|
||||
IMAGE_SECTION_HEADER *pe_seg;
|
||||
IMAGE_DOS_HEADER *dos_header = (IMAGE_DOS_HEADER *)hModule;
|
||||
IMAGE_NT_HEADERS *nt_header = PE_HEADER(hModule);
|
||||
|
||||
|
||||
wm = (WINE_MODREF*)HeapAlloc(process->heap,HEAP_ZERO_MEMORY,
|
||||
sizeof(*wm));
|
||||
wm->type= MODULE32_PE;
|
||||
pem = &(wm->binfmt.pe);
|
||||
|
||||
/* NOTE: fixup_imports takes care of the correct order */
|
||||
wm->next = process->modref_list;
|
||||
process->modref_list = wm;
|
||||
result = GetLongPathName32A(ofs->szPathName,NULL,0);
|
||||
wm->longname = (char*)HeapAlloc(process->heap,0,result+1);
|
||||
GetLongPathName32A(ofs->szPathName,wm->longname,result+1);
|
||||
|
||||
wm->shortname = HEAP_strdupA(process->heap,0,ofs->szPathName);
|
||||
|
||||
if (!(nt_header->FileHeader.Characteristics & IMAGE_FILE_DLL))
|
||||
{
|
||||
if (process->exe_modref)
|
||||
WARN(win32,"overwriting old exe_modref... arrgh\n");
|
||||
FIXME(win32,"overwriting old exe_modref... arrgh\n");
|
||||
process->exe_modref = wm;
|
||||
}
|
||||
|
||||
|
@ -577,10 +569,10 @@ static BOOL32 PE_MapImage( HMODULE32 *phModule, PDB32 *process,
|
|||
MEM_RESERVE | MEM_COMMIT,
|
||||
PAGE_EXECUTE_READWRITE );
|
||||
}
|
||||
/* *phModule is the module32 entry in the NE_MODULE. We need to
|
||||
* change it here, since it can get referenced by fixup_imports()
|
||||
/* NOTE: this changes a value in the process modref chain, which can
|
||||
* be accessed independently from this function
|
||||
*/
|
||||
wm->module = *phModule = (HMODULE32)load_addr;
|
||||
wm->module = (HMODULE32)load_addr;
|
||||
|
||||
TRACE(win32, "Load addr is really %lx, range %x\n",
|
||||
load_addr, vma_size);
|
||||
|
@ -713,8 +705,6 @@ static BOOL32 PE_MapImage( HMODULE32 *phModule, PDB32 *process,
|
|||
modname = s = ofs->szPathName;
|
||||
while ((s=strchr(modname,'\\')))
|
||||
modname = s+1;
|
||||
if ((s=strchr(modname,'.')))
|
||||
*s='\0';
|
||||
wm->modname = HEAP_strdupA(process->heap,0,modname);
|
||||
}
|
||||
if(pem->pe_import) {
|
||||
|
@ -760,13 +750,9 @@ HMODULE32 PE_LoadLibraryEx32A (LPCSTR name, PDB32 *process,
|
|||
WINE_MODREF *wm;
|
||||
|
||||
if ((hModule = MODULE_FindModule32( process, name ))) {
|
||||
|
||||
pModule = MODULE_GetPtr32(hModule);
|
||||
for (wm= process->modref_list;wm;wm=wm->next)
|
||||
if (wm->module == hModule) {
|
||||
pModule->count++;
|
||||
if (wm->module == hModule)
|
||||
return hModule;
|
||||
}
|
||||
/* Since MODULE_FindModule32 uses the modref chain too, the
|
||||
* module MUST have been found above. If not, something has gone
|
||||
* terribly wrong.
|
||||
|
@ -781,31 +767,55 @@ HMODULE32 PE_LoadLibraryEx32A (LPCSTR name, PDB32 *process,
|
|||
if (HFILE_ERROR32==(hFile=OpenFile32(name,&ofs,OF_READ))) {
|
||||
/* Now try the built-in even if disabled */
|
||||
if ((hModule = BUILTIN32_LoadModule( name, TRUE, process ))) {
|
||||
fprintf( stderr, "Warning: could not load external DLL '%s', using built-in module.\n", name );
|
||||
return hModule;
|
||||
WARN( module, "Could not load external DLL '%s', using built-in module.\n", name );
|
||||
return hModule;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
/* will go away ... */
|
||||
if ((hModule = MODULE_CreateDummyModule( &ofs )) < 32) {
|
||||
_lclose32(hFile);
|
||||
return hModule;
|
||||
}
|
||||
pModule = (NE_MODULE *)GlobalLock16( hModule );
|
||||
pModule->flags = NE_FFLAGS_WIN32;
|
||||
pModule->module32 = PE_LoadImage( hFile );
|
||||
pModule = (NE_MODULE *)GlobalLock16( hModule );
|
||||
pModule->flags = NE_FFLAGS_WIN32;
|
||||
/* .. */
|
||||
|
||||
wm=(WINE_MODREF*)HeapAlloc(process->heap,HEAP_ZERO_MEMORY,sizeof(*wm));
|
||||
wm->type = MODULE32_PE;
|
||||
/* NOTE: fixup_imports takes care of the correct order */
|
||||
wm->next = process->modref_list;
|
||||
process->modref_list = wm;
|
||||
|
||||
wm->module = pModule->module32 = PE_LoadImage( hFile );
|
||||
|
||||
CloseHandle( hFile );
|
||||
if (pModule->module32 < 32)
|
||||
if (wm->module < 32)
|
||||
{
|
||||
FreeLibrary32( hModule);
|
||||
process->modref_list = wm->next;
|
||||
HeapFree(process->heap,0,wm);
|
||||
ERR(win32,"can't load %s\n",ofs.szPathName);
|
||||
return 21; /* FIXME: probably 0 */
|
||||
}
|
||||
|
||||
/* (possible) recursion */
|
||||
if (!PE_MapImage( &(pModule->module32), process, &ofs,flags)) {
|
||||
/* FIXME: should free this module and its referenced ones */
|
||||
return 0;
|
||||
if (!PE_MapImage(process,wm,&ofs,flags)) {
|
||||
/* ERROR cleanup ... */
|
||||
WINE_MODREF **xwm;
|
||||
|
||||
ERR(win32,"couldn't load %s\n",ofs.szPathName);
|
||||
/* unlink from process modref chain */
|
||||
for ( xwm=&(process->modref_list);
|
||||
*xwm && (*xwm!=wm);
|
||||
xwm=&((*xwm)->next)
|
||||
) /* EMPTY */;
|
||||
if (*xwm)
|
||||
*xwm=(*xwm)->next;
|
||||
|
||||
return 0;
|
||||
}
|
||||
return pModule->module32;
|
||||
pModule->module32 = wm->module;
|
||||
return wm->module;
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
|
@ -813,23 +823,30 @@ HMODULE32 PE_LoadLibraryEx32A (LPCSTR name, PDB32 *process,
|
|||
* FIXME: this function should use PE_LoadLibraryEx32A, but currently can't
|
||||
* due to the PROCESS_Create stuff.
|
||||
*/
|
||||
HINSTANCE16 PE_LoadModule( HFILE32 hFile, OFSTRUCT *ofs, LPCSTR cmd_line,
|
||||
HINSTANCE16 PE_LoadModule( LPCSTR name, LPCSTR cmd_line,
|
||||
LPCSTR env, UINT16 show_cmd )
|
||||
{
|
||||
HMODULE16 hModule16;
|
||||
HMODULE32 hModule32;
|
||||
HINSTANCE16 hInstance;
|
||||
NE_MODULE *pModule;
|
||||
HFILE32 hFile;
|
||||
OFSTRUCT ofs;
|
||||
THDB *thdb = THREAD_Current();
|
||||
|
||||
if ((hModule16 = MODULE_CreateDummyModule( ofs )) < 32) return hModule16;
|
||||
PDB32 *process;
|
||||
WINE_MODREF *wm;
|
||||
|
||||
if ((hFile = OpenFile32( name, &ofs, OF_READ )) == HFILE_ERROR32)
|
||||
return 2; /* File not found */
|
||||
|
||||
if ((hModule16 = MODULE_CreateDummyModule( &ofs )) < 32) return hModule16;
|
||||
pModule = (NE_MODULE *)GlobalLock16( hModule16 );
|
||||
pModule->flags = NE_FFLAGS_WIN32;
|
||||
|
||||
pModule->module32 = hModule32 = PE_LoadImage( hFile );
|
||||
if (hModule32 < 32) return 21;
|
||||
|
||||
hInstance = MODULE_CreateInstance( hModule16, NULL, (cmd_line == NULL) );
|
||||
hInstance = NE_CreateInstance( pModule, NULL, (cmd_line == NULL) );
|
||||
if (cmd_line &&
|
||||
!(PE_HEADER(hModule32)->FileHeader.Characteristics & IMAGE_FILE_DLL))
|
||||
{
|
||||
|
@ -838,11 +855,21 @@ HINSTANCE16 PE_LoadModule( HFILE32 hFile, OFSTRUCT *ofs, LPCSTR cmd_line,
|
|||
TDB *pTask = (TDB *)GlobalLock16( pdb->task );
|
||||
thdb = pTask->thdb;
|
||||
}
|
||||
if (!PE_MapImage( &(pModule->module32), thdb->process, ofs, 0 ))
|
||||
|
||||
process = thdb->process;
|
||||
|
||||
wm=(WINE_MODREF*)HeapAlloc(process->heap,HEAP_ZERO_MEMORY,sizeof(*wm));
|
||||
wm->type = MODULE32_PE;
|
||||
/* NOTE: fixup_imports takes care of the correct order */
|
||||
wm->next = process->modref_list;
|
||||
wm->module = hModule32;
|
||||
process->modref_list = wm;
|
||||
if (!PE_MapImage( process, wm, &ofs, 0 ))
|
||||
{
|
||||
/* FIXME: should destroy the task created and free referenced stuff */
|
||||
return 0;
|
||||
}
|
||||
pModule->module32 = wm->module;
|
||||
/* FIXME: Yuck. Is there no other good place to do that? */
|
||||
PE_InitTls( thdb );
|
||||
return hInstance;
|
||||
|
|
|
@ -187,7 +187,7 @@ DWORD WINAPI SizeofResource32( HINSTANCE32 hModule, HRSRC32 hRsrc )
|
|||
break;
|
||||
}
|
||||
if (__winelib)
|
||||
fprintf(stderr,"SizeofResource32: not implemented for WINELIB\n");
|
||||
FIXME(module,"Not implemented for WINELIB\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -158,7 +158,7 @@ BOOL32 SIGNAL_Init(void)
|
|||
{
|
||||
extern void SYNC_SetupSignals(void);
|
||||
|
||||
#ifdef HAVE_SIGALTSTACK
|
||||
#ifdef HAVE_WORKING_SIGALTSTACK
|
||||
struct sigaltstack ss;
|
||||
ss.ss_sp = SIGNAL_Stack;
|
||||
ss.ss_size = sizeof(SIGNAL_Stack);
|
||||
|
|
|
@ -37,7 +37,6 @@
|
|||
#define MIN_THUNKS 32
|
||||
|
||||
extern INT32 WINSOCK_DeleteTaskWSI( TDB* pTask, struct _WSINFO* );
|
||||
extern BOOL32 MODULE_FreeModule( HMODULE16 hModule, TDB* ptaskContext );
|
||||
|
||||
/* Pointer to function to switch to a larger stack */
|
||||
int (*IF1632_CallLargeStack)( int (*func)(), void *arg ) = NULL;
|
||||
|
@ -208,7 +207,7 @@ static void TASK_CallToStart(void)
|
|||
{
|
||||
int exit_code = 1;
|
||||
TDB *pTask = (TDB *)GlobalLock16( hCurrentTask );
|
||||
NE_MODULE *pModule = MODULE_GetPtr16( pTask->hModule );
|
||||
NE_MODULE *pModule = NE_GetPtr( pTask->hModule );
|
||||
SEGTABLEENTRY *pSegTable = NE_SEG_TABLE( pModule );
|
||||
|
||||
SET_CUR_THREAD( pTask->thdb );
|
||||
|
@ -276,9 +275,10 @@ HTASK16 TASK_Create( THDB *thdb, NE_MODULE *pModule, HINSTANCE16 hInstance,
|
|||
{
|
||||
HTASK16 hTask;
|
||||
TDB *pTask;
|
||||
LPSTR name, cmd_line;
|
||||
LPSTR cmd_line;
|
||||
WORD sp;
|
||||
char *stack32Top;
|
||||
char name[10];
|
||||
STACK16FRAME *frame16;
|
||||
STACK32FRAME *frame32;
|
||||
PDB32 *pdb32 = thdb->process;
|
||||
|
@ -319,7 +319,7 @@ HTASK16 TASK_Create( THDB *thdb, NE_MODULE *pModule, HINSTANCE16 hInstance,
|
|||
|
||||
/* Copy the module name */
|
||||
|
||||
name = MODULE_GetModuleName( pModule->self );
|
||||
GetModuleName( pModule->self, name, sizeof(name) );
|
||||
strncpy( pTask->module_name, name, sizeof(pTask->module_name) );
|
||||
|
||||
/* Allocate a selector for the PDB */
|
||||
|
@ -432,7 +432,7 @@ static void TASK_DeleteTask( HTASK16 hTask )
|
|||
|
||||
/* Free the task module */
|
||||
|
||||
MODULE_FreeModule( pTask->hModule, pTask );
|
||||
FreeModule16( pTask->hModule );
|
||||
|
||||
/* Free the selector aliases */
|
||||
|
||||
|
@ -660,7 +660,7 @@ void WINAPI InitTask( CONTEXT *context )
|
|||
|
||||
if (context) EAX_reg(context) = 0;
|
||||
if (!(pTask = (TDB *)GlobalLock16( hCurrentTask ))) return;
|
||||
if (!(pModule = MODULE_GetPtr16( pTask->hModule ))) return;
|
||||
if (!(pModule = NE_GetPtr( pTask->hModule ))) return;
|
||||
|
||||
/* This is a hack to install task USER signal handler before
|
||||
* implicitly loaded DLLs are initialized (see windows/user.c) */
|
||||
|
@ -855,7 +855,7 @@ FARPROC16 WINAPI MakeProcInstance16( FARPROC16 func, HANDLE16 hInstance )
|
|||
BYTE *thunk,*lfunc;
|
||||
SEGPTR thunkaddr;
|
||||
|
||||
if (!hInstance) return 0;
|
||||
if (!hInstance) hInstance = CURRENT_DS;
|
||||
thunkaddr = TASK_AllocThunk( hCurrentTask );
|
||||
if (!thunkaddr) return (FARPROC16)0;
|
||||
thunk = PTR_SEG_TO_LIN( thunkaddr );
|
||||
|
@ -995,12 +995,8 @@ void WINAPI SwitchStackTo( WORD seg, WORD ptr, WORD top )
|
|||
|
||||
/***********************************************************************
|
||||
* SwitchStackBack (KERNEL.109)
|
||||
*
|
||||
* Note: the function is declared as 'register' in the spec file in order
|
||||
* to make sure all registers are preserved, but we don't use them in any
|
||||
* way, so we don't need a CONTEXT* argument.
|
||||
*/
|
||||
void WINAPI SwitchStackBack(void)
|
||||
void WINAPI SwitchStackBack( CONTEXT *context )
|
||||
{
|
||||
TDB *pTask;
|
||||
STACK16FRAME *oldFrame, *newFrame;
|
||||
|
@ -1022,6 +1018,8 @@ void WINAPI SwitchStackBack(void)
|
|||
/* Switch back to the old stack */
|
||||
|
||||
pTask->thdb->cur_stack = pData->old_ss_sp;
|
||||
SS_reg(context) = SELECTOROF(pData->old_ss_sp);
|
||||
ESP_reg(context) = OFFSETOF(pData->old_ss_sp);
|
||||
pData->old_ss_sp = 0;
|
||||
|
||||
/* Build a stack frame for the return */
|
||||
|
|
|
@ -342,7 +342,7 @@ BOOL16 WINAPI LocalInit( HANDLE16 selector, WORD start, WORD end )
|
|||
if (start == 0) {
|
||||
/* Check if the segment is the DGROUP of a module */
|
||||
|
||||
if ((pModule = MODULE_GetPtr16( selector )))
|
||||
if ((pModule = NE_GetPtr( selector )))
|
||||
{
|
||||
SEGTABLEENTRY *pSeg = NE_SEG_TABLE( pModule ) + pModule->dgroup - 1;
|
||||
if (pModule->dgroup && (pSeg->selector == selector)) {
|
||||
|
@ -1601,7 +1601,7 @@ DWORD WINAPI GetHeapSpaces( HMODULE16 module )
|
|||
NE_MODULE *pModule;
|
||||
WORD ds;
|
||||
|
||||
if (!(pModule = MODULE_GetPtr16( module ))) return 0;
|
||||
if (!(pModule = NE_GetPtr( module ))) return 0;
|
||||
ds = (NE_SEG_TABLE( pModule ) + pModule->dgroup - 1)->selector;
|
||||
return MAKELONG( LOCAL_CountFree( ds ), LOCAL_HeapSize( ds ) );
|
||||
}
|
||||
|
|
|
@ -193,11 +193,10 @@ void SELECTOR_FreeBlock( WORD sel, WORD count )
|
|||
|
||||
/* Clear the saved 16-bit selector */
|
||||
frame = CURRENT_STACK16;
|
||||
while (frame)
|
||||
while (frame && frame->frame32)
|
||||
{
|
||||
if ((frame->ds >= sel) && (frame->ds < nextsel)) frame->ds = 0;
|
||||
if ((frame->es >= sel) && (frame->es < nextsel)) frame->es = 0;
|
||||
if (!frame->frame32) break;
|
||||
frame = PTR_SEG_TO_LIN( frame->frame32->frame16 );
|
||||
}
|
||||
}
|
||||
|
|
|
@ -823,7 +823,7 @@ SEGPTR WINAPI SetCommEventMask(INT16 fd,UINT16 fuEvtMask)
|
|||
if ((act = GetCommPort(fd)) == -1) {
|
||||
WARN(comm," fd %d not comm port\n",act);
|
||||
return NULL;}
|
||||
stol = unknown[act];
|
||||
stol = (unsigned char *)unknown[act];
|
||||
stol += msr;
|
||||
repid = ioctl(fd,TIOCMGET,&mstat);
|
||||
TRACE(comm, " ioctl %d, msr %x at %p %p\n",repid,mstat,stol,unknown[act]);
|
||||
|
|
|
@ -1589,7 +1589,7 @@ short WINAPI GetFileTitle16(LPCSTR lpFile, LPSTR lpTitle, UINT16 cbBuf)
|
|||
/***********************************************************************
|
||||
* ChooseColor (COMMDLG.5)
|
||||
*/
|
||||
BOOL16 WINAPI ChooseColor(LPCHOOSECOLOR lpChCol)
|
||||
BOOL16 WINAPI ChooseColor16(LPCHOOSECOLOR16 lpChCol)
|
||||
{
|
||||
HINSTANCE16 hInst;
|
||||
HANDLE16 hDlgTmpl = 0;
|
||||
|
@ -1662,7 +1662,7 @@ static const COLORREF predefcolors[6][8]=
|
|||
|
||||
struct CCPRIVATE
|
||||
{
|
||||
LPCHOOSECOLOR lpcc; /* points to public known data structure */
|
||||
LPCHOOSECOLOR16 lpcc; /* points to public known data structure */
|
||||
int nextuserdef; /* next free place in user defined color array */
|
||||
HDC16 hdcMem; /* color graph used for BitBlt() */
|
||||
HBITMAP16 hbmMem; /* color graph bitmap */
|
||||
|
@ -2342,7 +2342,7 @@ static void CC_PaintUserColorArray(HWND16 hDlg,int rows,int cols,COLORREF* lpcr)
|
|||
/***********************************************************************
|
||||
* CC_HookCallChk [internal]
|
||||
*/
|
||||
static BOOL32 CC_HookCallChk(LPCHOOSECOLOR lpcc)
|
||||
static BOOL32 CC_HookCallChk(LPCHOOSECOLOR16 lpcc)
|
||||
{
|
||||
if (lpcc)
|
||||
if(lpcc->Flags & CC_ENABLEHOOK)
|
||||
|
@ -2364,8 +2364,8 @@ static LONG CC_WMInitDialog(HWND16 hDlg, WPARAM16 wParam, LPARAM lParam)
|
|||
|
||||
TRACE(commdlg,"WM_INITDIALOG lParam=%08lX\n", lParam);
|
||||
lpp=calloc(1,sizeof(struct CCPRIVATE));
|
||||
lpp->lpcc=(LPCHOOSECOLOR)lParam;
|
||||
if (lpp->lpcc->lStructSize != sizeof(CHOOSECOLOR))
|
||||
lpp->lpcc=(LPCHOOSECOLOR16)lParam;
|
||||
if (lpp->lpcc->lStructSize != sizeof(CHOOSECOLOR16))
|
||||
{
|
||||
EndDialog32 (hDlg, 0) ;
|
||||
return FALSE;
|
||||
|
@ -3642,7 +3642,7 @@ static BOOL32 Commdlg_GetFileName32A( BOOL16 (*dofunction)(),
|
|||
ofn16->lStructSize = sizeof(*ofn16);
|
||||
ofn16->hwndOwner = ofn->hwndOwner;
|
||||
/* FIXME: OPENFILENAME16 got only 16 bit for HINSTANCE... */
|
||||
ofn16->hInstance = MODULE_HANDLEtoHMODULE16(ofn->hInstance);
|
||||
ofn16->hInstance = 0;
|
||||
if (ofn->lpstrFilter) {
|
||||
LPSTR s,x;
|
||||
|
||||
|
@ -3732,7 +3732,7 @@ static BOOL32 Commdlg_GetFileName32W( BOOL16 (*dofunction)(),
|
|||
ofn16->lStructSize = sizeof(*ofn16);
|
||||
ofn16->hwndOwner = ofn->hwndOwner;
|
||||
/* FIXME: OPENFILENAME16 got only 16 bit for HINSTANCE... */
|
||||
ofn16->hInstance = MODULE_HANDLEtoHMODULE16(ofn->hInstance);
|
||||
ofn16->hInstance = 0;
|
||||
if (ofn->lpstrFilter) {
|
||||
LPWSTR s;
|
||||
LPSTR x,y;
|
||||
|
@ -3861,3 +3861,71 @@ BOOL32 WINAPI GetSaveFileName32W( LPOPENFILENAME32W ofn )
|
|||
BOOL16 (WINAPI * dofunction)(SEGPTR ofn16) = GetSaveFileName16;
|
||||
return Commdlg_GetFileName32W(dofunction,ofn);
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* ChooseColorA (COMDLG32.1)
|
||||
*/
|
||||
BOOL32 WINAPI ChooseColor32A(LPCHOOSECOLOR32A lpChCol )
|
||||
|
||||
{
|
||||
BOOL16 ret;
|
||||
char *str = NULL;
|
||||
COLORREF* ccref=SEGPTR_ALLOC(64);
|
||||
LPCHOOSECOLOR16 lpcc16=SEGPTR_ALLOC(sizeof(CHOOSECOLOR16));
|
||||
|
||||
memset(lpcc16,'\0',sizeof(*lpcc16));
|
||||
lpcc16->lStructSize=sizeof(*lpcc16);
|
||||
lpcc16->hwndOwner=lpChCol->hwndOwner;
|
||||
lpcc16->hInstance=0; /* FIXME:MODULE_HANDLEtoHMODULE16(lpChCol->hInstance)*/
|
||||
lpcc16->rgbResult=lpChCol->rgbResult;
|
||||
memcpy(ccref,lpChCol->lpCustColors,64);
|
||||
lpcc16->lpCustColors=(COLORREF*)SEGPTR_GET(ccref);
|
||||
lpcc16->Flags=lpChCol->Flags;
|
||||
lpcc16->lCustData=lpChCol->lCustData;
|
||||
lpcc16->lpfnHook=(WNDPROC16)lpChCol->lpfnHook;
|
||||
if (lpChCol->lpTemplateName)
|
||||
str = SEGPTR_STRDUP(lpChCol->lpTemplateName );
|
||||
lpcc16->lpTemplateName=SEGPTR_GET(str);
|
||||
|
||||
ret = ChooseColor16(lpcc16);
|
||||
if(str)
|
||||
SEGPTR_FREE(str);
|
||||
memcpy(lpChCol->lpCustColors,ccref,64);
|
||||
SEGPTR_FREE(ccref);
|
||||
SEGPTR_FREE(lpcc16);
|
||||
return (BOOL32)ret;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* ChooseColorW (COMDLG32.2)
|
||||
*/
|
||||
BOOL32 WINAPI ChooseColor32W(LPCHOOSECOLOR32W lpChCol )
|
||||
|
||||
{
|
||||
BOOL16 ret;
|
||||
char *str = NULL;
|
||||
COLORREF* ccref=SEGPTR_ALLOC(64);
|
||||
LPCHOOSECOLOR16 lpcc16=SEGPTR_ALLOC(sizeof(CHOOSECOLOR16));
|
||||
|
||||
memset(lpcc16,'\0',sizeof(*lpcc16));
|
||||
lpcc16->lStructSize=sizeof(*lpcc16);
|
||||
lpcc16->hwndOwner=lpChCol->hwndOwner;
|
||||
lpcc16->hInstance=0; /*FIXME:MODULE_HANDLEtoHMODULE16(lpChCol->hInstance)*/
|
||||
lpcc16->rgbResult=lpChCol->rgbResult;
|
||||
memcpy(ccref,lpChCol->lpCustColors,64);
|
||||
lpcc16->lpCustColors=(COLORREF*)SEGPTR_GET(ccref);
|
||||
lpcc16->Flags=lpChCol->Flags;
|
||||
lpcc16->lCustData=lpChCol->lCustData;
|
||||
lpcc16->lpfnHook=(WNDPROC16)lpChCol->lpfnHook;
|
||||
if (lpChCol->lpTemplateName)
|
||||
str = SEGPTR_STRDUP_WtoA(lpChCol->lpTemplateName );
|
||||
lpcc16->lpTemplateName=SEGPTR_GET(str);
|
||||
|
||||
ret = ChooseColor16(lpcc16);
|
||||
if(str)
|
||||
SEGPTR_FREE(str);
|
||||
memcpy(lpChCol->lpCustColors,ccref,64);
|
||||
SEGPTR_FREE(ccref);
|
||||
SEGPTR_FREE(lpcc16);
|
||||
return (BOOL32)ret;
|
||||
}
|
||||
|
|
51
misc/cpu.c
51
misc/cpu.c
|
@ -11,7 +11,12 @@
|
|||
#include "global.h"
|
||||
#include "windows.h"
|
||||
#include "winnt.h"
|
||||
#include "winerror.h"
|
||||
#include "winreg.h"
|
||||
#include "debug.h"
|
||||
|
||||
/* Should this write to the registry? */
|
||||
#define DO_REG FALSE
|
||||
|
||||
static BYTE PF[64] = {0,};
|
||||
|
||||
|
@ -22,7 +27,7 @@ VOID WINAPI GetSystemInfo(LPSYSTEM_INFO si)
|
|||
{
|
||||
static int cache = 0;
|
||||
static SYSTEM_INFO cachedsi;
|
||||
HKEY xhkey=0,hkey;
|
||||
HKEY hkey;
|
||||
char buf[20];
|
||||
|
||||
if (cache) {
|
||||
|
@ -52,6 +57,16 @@ VOID WINAPI GetSystemInfo(LPSYSTEM_INFO si)
|
|||
|
||||
/* hmm, reasonable processor feature defaults? */
|
||||
|
||||
/* The registry calls were removed because they were being called
|
||||
before the registries were loaded, and they were giving errors */
|
||||
/* Create this registry key for all systems */
|
||||
|
||||
#if DO_REG
|
||||
if (RegCreateKey16(HKEY_LOCAL_MACHINE,"HARDWARE\\DESCRIPTION\\System\\CentralProcessor",&hkey)!=ERROR_SUCCESS) {
|
||||
WARN(reg,"Unable to register CPU information\n");
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef linux
|
||||
{
|
||||
char line[200];
|
||||
|
@ -59,8 +74,7 @@ VOID WINAPI GetSystemInfo(LPSYSTEM_INFO si)
|
|||
|
||||
if (!f)
|
||||
return;
|
||||
xhkey = 0;
|
||||
RegCreateKey16(HKEY_LOCAL_MACHINE,"\\HARDWARE\\DESCRIPTION\\System\\CentralProcessor",&hkey);
|
||||
/*xhkey = 0;*/
|
||||
while (fgets(line,200,f)!=NULL) {
|
||||
char *s,*value;
|
||||
|
||||
|
@ -94,10 +108,12 @@ VOID WINAPI GetSystemInfo(LPSYSTEM_INFO si)
|
|||
break;
|
||||
}
|
||||
}
|
||||
#if DO_REG
|
||||
/* set the CPU type of the current processor */
|
||||
sprintf(buf,"CPU %ld",cachedsi.dwProcessorType);
|
||||
if (xhkey)
|
||||
RegSetValueEx32A(xhkey,"Identifier",0,REG_SZ,buf,strlen(buf));
|
||||
if (hkey)
|
||||
RegSetValueEx32A(hkey,"Identifier",0,REG_SZ,buf,strlen(buf));
|
||||
#endif
|
||||
continue;
|
||||
}
|
||||
/* old 2.0 method */
|
||||
|
@ -122,10 +138,12 @@ VOID WINAPI GetSystemInfo(LPSYSTEM_INFO si)
|
|||
break;
|
||||
}
|
||||
}
|
||||
#if DO_REG
|
||||
/* set the CPU type of the current processor */
|
||||
sprintf(buf,"CPU %ld",cachedsi.dwProcessorType);
|
||||
if (xhkey)
|
||||
RegSetValueEx32A(xhkey,"Identifier",0,REG_SZ,buf,strlen(buf));
|
||||
if (hkey)
|
||||
RegSetValueEx32A(hkey,"Identifier",0,REG_SZ,buf,strlen(buf));
|
||||
#endif
|
||||
continue;
|
||||
}
|
||||
if (!lstrncmpi32A(line,"fdiv_bug",strlen("fdiv_bug"))) {
|
||||
|
@ -148,11 +166,14 @@ VOID WINAPI GetSystemInfo(LPSYSTEM_INFO si)
|
|||
if (x+1>cachedsi.dwNumberOfProcessors)
|
||||
cachedsi.dwNumberOfProcessors=x+1;
|
||||
|
||||
#if 0
|
||||
/* create a new processor subkey */
|
||||
/* What exactly is trying to be done here? */
|
||||
sprintf(buf,"%d",x);
|
||||
if (xhkey)
|
||||
RegCloseKey(xhkey);
|
||||
RegCreateKey16(hkey,buf,&xhkey);
|
||||
#endif
|
||||
}
|
||||
if (!lstrncmpi32A(line,"stepping",strlen("stepping"))) {
|
||||
int x;
|
||||
|
@ -174,14 +195,24 @@ VOID WINAPI GetSystemInfo(LPSYSTEM_INFO si)
|
|||
#else /* linux */
|
||||
/* FIXME: how do we do this on other systems? */
|
||||
|
||||
RegCreateKey16(hkey,"0",&xhkey);
|
||||
#if 0
|
||||
RegSetValueEx32A(xhkey,"Identifier",0,REG_SZ,"CPU 386",strlen("CPU 386"));
|
||||
#endif
|
||||
|
||||
#endif /* !linux */
|
||||
if (xhkey)
|
||||
|
||||
#if 0
|
||||
(xhkey)
|
||||
RegCloseKey(xhkey);
|
||||
RegCloseKey(hkey);
|
||||
#endif
|
||||
#if DO_REG
|
||||
if (hkey)
|
||||
RegCloseKey(hkey);
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* IsProcessorFeaturePresent [KERNELL32.880]
|
||||
*/
|
||||
|
|
106
misc/crtdll.c
106
misc/crtdll.c
|
@ -20,6 +20,7 @@ Unresolved issues Uwe Bonnes 970904:
|
|||
|
||||
/* FIXME: all the file handling is hopelessly broken -- AJ */
|
||||
|
||||
#include <errno.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdarg.h>
|
||||
|
@ -34,6 +35,7 @@ Unresolved issues Uwe Bonnes 970904:
|
|||
#include <setjmp.h>
|
||||
#include "win.h"
|
||||
#include "windows.h"
|
||||
#include "winerror.h"
|
||||
#include "debug.h"
|
||||
#include "module.h"
|
||||
#include "heap.h"
|
||||
|
@ -304,6 +306,20 @@ DWORD __cdecl CRTDLL_fread(LPVOID ptr, INT32 size, INT32 nmemb, LPVOID vfile)
|
|||
#endif
|
||||
}
|
||||
|
||||
/*********************************************************************
|
||||
* fscanf (CRTDLL.381)
|
||||
*/
|
||||
INT32 __cdecl CRTDLL_fscanf( LPVOID stream, LPSTR format, ... )
|
||||
{
|
||||
va_list valist;
|
||||
INT32 res;
|
||||
|
||||
va_start( valist, format );
|
||||
res = vfscanf( xlat_file_ptr(stream), format, valist );
|
||||
va_end( valist );
|
||||
return res;
|
||||
}
|
||||
|
||||
/*********************************************************************
|
||||
* fseek (CRTDLL.382)
|
||||
*/
|
||||
|
@ -322,6 +338,15 @@ LONG __cdecl CRTDLL_fseek(LPVOID stream, LONG offset, INT32 whence)
|
|||
return ret;
|
||||
}
|
||||
|
||||
/*********************************************************************
|
||||
* fsetpos (CRTDLL.383)
|
||||
*/
|
||||
INT32 __cdecl CRTDLL_fsetpos(LPVOID stream, fpos_t *pos)
|
||||
{
|
||||
TRACE(crtdll, "file %p\n", stream);
|
||||
return fseek(xlat_file_ptr(stream), *pos, SEEK_SET);
|
||||
}
|
||||
|
||||
/*********************************************************************
|
||||
* ftell (CRTDLL.384)
|
||||
*/
|
||||
|
@ -514,7 +539,7 @@ void __cdecl CRTDLL_exit(DWORD ret)
|
|||
|
||||
|
||||
/*********************************************************************
|
||||
* _abnormal_termination (CRTDLL.36 )
|
||||
* _abnormal_termination (CRTDLL.36)
|
||||
*/
|
||||
INT32 __cdecl CRTDLL__abnormal_termination(void)
|
||||
{
|
||||
|
@ -523,6 +548,32 @@ INT32 __cdecl CRTDLL__abnormal_termination(void)
|
|||
}
|
||||
|
||||
|
||||
/*********************************************************************
|
||||
* _access (CRTDLL.37)
|
||||
*/
|
||||
INT32 __cdecl CRTDLL__access(LPCSTR filename, INT32 mode)
|
||||
{
|
||||
DWORD attr = GetFileAttributes32A(filename);
|
||||
|
||||
if (attr == -1)
|
||||
{
|
||||
if (GetLastError() == ERROR_INVALID_ACCESS)
|
||||
errno = EACCES;
|
||||
else
|
||||
errno = ENOENT;
|
||||
return -1;
|
||||
}
|
||||
|
||||
if ((attr & FILE_ATTRIBUTE_READONLY) && (mode & W_OK))
|
||||
{
|
||||
errno = EACCES;
|
||||
return -1;
|
||||
}
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/*********************************************************************
|
||||
* fflush (CRTDLL.365)
|
||||
*/
|
||||
|
@ -1365,6 +1416,14 @@ INT32 __cdecl CRTDLL__setmode( INT32 fh,INT32 mode)
|
|||
return -1;
|
||||
}
|
||||
|
||||
/*********************************************************************
|
||||
* _fpreset (CRTDLL.107)
|
||||
*/
|
||||
VOID __cdecl CRTDLL__fpreset(void)
|
||||
{
|
||||
FIXME(crtdll," STUB.\n");
|
||||
}
|
||||
|
||||
/*********************************************************************
|
||||
* atexit (CRTDLL.345)
|
||||
*/
|
||||
|
@ -1475,11 +1534,14 @@ BOOL32 __cdecl CRTDLL__isctype(CHAR x,CHAR type)
|
|||
|
||||
/*********************************************************************
|
||||
* _chdrive (CRTDLL.52)
|
||||
*
|
||||
* newdir [I] drive to change to, A=1
|
||||
*
|
||||
*/
|
||||
BOOL32 __cdecl CRTDLL__chdrive(INT32 newdrive)
|
||||
{
|
||||
/* FIXME: generates errnos */
|
||||
return DRIVE_SetCurrentDrive(newdrive);
|
||||
return DRIVE_SetCurrentDrive(newdrive-1);
|
||||
}
|
||||
|
||||
/*********************************************************************
|
||||
|
@ -1488,7 +1550,7 @@ BOOL32 __cdecl CRTDLL__chdrive(INT32 newdrive)
|
|||
INT32 __cdecl CRTDLL__chdir(LPCSTR newdir)
|
||||
{
|
||||
if (!SetCurrentDirectory32A(newdir))
|
||||
return -1;
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1603,6 +1665,16 @@ CHAR* __cdecl CRTDLL__getcwd(LPSTR buf, INT32 size)
|
|||
|
||||
}
|
||||
|
||||
/*********************************************************************
|
||||
* _getdrive (CRTDLL.124)
|
||||
*
|
||||
* Return current drive, 1 for A, 2 for B
|
||||
*/
|
||||
INT32 __cdecl CRTDLL__getdrive(VOID)
|
||||
{
|
||||
return DRIVE_GetCurrentDrive() + 1;
|
||||
}
|
||||
|
||||
/*********************************************************************
|
||||
* _mkdir (CRTDLL.234)
|
||||
*/
|
||||
|
@ -1701,6 +1773,25 @@ LPSTR __cdecl CRTDLL__itoa(INT32 x,LPSTR buf,INT32 buflen)
|
|||
return buf;
|
||||
}
|
||||
|
||||
/*********************************************************************
|
||||
* _ltoa (CRTDLL.180)
|
||||
*/
|
||||
LPSTR __cdecl CRTDLL__ltoa(long x,LPSTR buf,INT32 radix)
|
||||
{
|
||||
switch(radix) {
|
||||
case 2: FIXME(crtdll, "binary format not implemented !\n");
|
||||
break;
|
||||
case 8: wsnprintf32A(buf,0x80,"%o",x);
|
||||
break;
|
||||
case 10: wsnprintf32A(buf,0x80,"%d",x);
|
||||
break;
|
||||
case 16: wsnprintf32A(buf,0x80,"%x",x);
|
||||
break;
|
||||
default: FIXME(crtdll, "radix %d not implemented !\n", radix);
|
||||
}
|
||||
return buf;
|
||||
}
|
||||
|
||||
typedef VOID (*sig_handler_type)(VOID);
|
||||
|
||||
/*********************************************************************
|
||||
|
@ -1725,6 +1816,7 @@ VOID __cdecl CRTDLL__sleep(unsigned long timeout)
|
|||
TRACE(crtdll,"CRTDLL__sleep for %ld milliseconds\n",timeout);
|
||||
Sleep((timeout)?timeout:1);
|
||||
}
|
||||
|
||||
/*********************************************************************
|
||||
* getenv (CRTDLL.437)
|
||||
*/
|
||||
|
@ -1751,3 +1843,11 @@ LPSTR __cdecl CRTDLL_getenv(const char *name)
|
|||
FreeEnvironmentStrings32A( environ );
|
||||
return pp;
|
||||
}
|
||||
|
||||
/*********************************************************************
|
||||
* _mbsrchr (CRTDLL.223)
|
||||
*/
|
||||
LPSTR __cdecl CRTDLL__mbsrchr(LPSTR s,CHAR x) {
|
||||
/* FIXME: handle multibyte strings */
|
||||
return strrchr(s,x);
|
||||
}
|
||||
|
|
20
misc/ddeml.c
20
misc/ddeml.c
|
@ -121,14 +121,24 @@ HCONVLIST WINAPI DdeConnectList32( DWORD idInst, HSZ hszService, HSZ hszTopic,
|
|||
|
||||
|
||||
/*****************************************************************
|
||||
* DdeQueryNextServer (DDEML.5)
|
||||
* DdeQueryNextServer16 [DDEML.5]
|
||||
*/
|
||||
HCONV WINAPI DdeQueryNextServer( HCONVLIST hConvList, HCONV hConvPrev )
|
||||
HCONV WINAPI DdeQueryNextServer16( HCONVLIST hConvList, HCONV hConvPrev )
|
||||
{
|
||||
FIXME( ddeml, "empty stub\n" );
|
||||
return DdeQueryNextServer32(hConvList, hConvPrev);
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************************
|
||||
* DdeQueryNextServer32 [USER32.112]
|
||||
*/
|
||||
HCONV WINAPI DdeQueryNextServer32( HCONVLIST hConvList, HCONV hConvPrev )
|
||||
{
|
||||
FIXME(ddeml, "(%ld,%ld): stub\n",hConvList,hConvPrev);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************************
|
||||
* DdeDisconnectList (DDEML.6)
|
||||
*/
|
||||
|
@ -273,7 +283,7 @@ BOOL16 WINAPI DdeFreeStringHandle16( DWORD idInst, HSZ hsz )
|
|||
*/
|
||||
BOOL32 WINAPI DdeFreeStringHandle32( DWORD idInst, HSZ hsz )
|
||||
{
|
||||
FIXME( ddeml, "empty stub\n" );
|
||||
FIXME( ddeml, "(%d,%d): stub\n",idInst, hsz );
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
@ -511,5 +521,3 @@ int WINAPI DdeCmpStringHandles( HSZ hsz1, HSZ hsz2 )
|
|||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -173,7 +173,7 @@ void debug_dumpstr (LPCSTR s)
|
|||
break;
|
||||
default:
|
||||
if (*s<' ')
|
||||
printf ("\\0x%02x", *s);
|
||||
fprintf (stderr, "\\0x%02x", *s);
|
||||
else
|
||||
fputc (*s, stderr);
|
||||
}
|
||||
|
|
1028
misc/imagelist.c
1028
misc/imagelist.c
File diff suppressed because it is too large
Load Diff
30
misc/lstr.c
30
misc/lstr.c
|
@ -152,15 +152,15 @@ SEGPTR WINAPI AnsiPrev16( SEGPTR start, SEGPTR current )
|
|||
*/
|
||||
void WINAPI OutputDebugString16( LPCSTR str )
|
||||
{
|
||||
char *module;
|
||||
char module[10];
|
||||
char *p, *buffer = HeapAlloc( GetProcessHeap(), 0, strlen(str)+2 );
|
||||
/* Remove CRs */
|
||||
for (p = buffer; *str; str++) if (*str != '\r') *p++ = *str;
|
||||
*p = '\0';
|
||||
if ((p > buffer) && (p[-1] == '\n')) p[1] = '\0'; /* Remove trailing \n */
|
||||
module = MODULE_GetModuleName( GetCurrentTask() );
|
||||
TRACE(resource, "%s says '%s'\n",
|
||||
module ? module : "???", buffer );
|
||||
if (!GetModuleName( GetCurrentTask(), module, sizeof(module) ))
|
||||
strcpy( module, "???" );
|
||||
TRACE(resource, "%s says '%s'\n", module, buffer );
|
||||
HeapFree( GetProcessHeap(), 0, buffer );
|
||||
}
|
||||
|
||||
|
@ -553,7 +553,7 @@ DWORD WINAPI FormatMessage32A(
|
|||
|
||||
if (from) {
|
||||
f=from;
|
||||
while (*f) {
|
||||
while (*f && !nolinefeed) {
|
||||
if (*f=='%') {
|
||||
int insertnr;
|
||||
char *fmtstr,*sprintfbuf,*x,*lastf;
|
||||
|
@ -646,14 +646,7 @@ DWORD WINAPI FormatMessage32A(
|
|||
}
|
||||
*t='\0';
|
||||
}
|
||||
if (nolinefeed) {
|
||||
/* remove linefeed */
|
||||
if(t>target && t[-1]=='\n') {
|
||||
*--t=0;
|
||||
if(t>target && t[-1]=='\r')
|
||||
*--t=0;
|
||||
}
|
||||
} else {
|
||||
if (!nolinefeed) {
|
||||
/* add linefeed */
|
||||
if(t==target || t[-1]!='\n')
|
||||
ADD_TO_T('\n'); /* FIXME: perhaps add \r too? */
|
||||
|
@ -732,7 +725,7 @@ DWORD WINAPI FormatMessage32W(
|
|||
|
||||
if (from) {
|
||||
f=from;
|
||||
while (*f) {
|
||||
while (*f && !nolinefeed) {
|
||||
if (*f=='%') {
|
||||
int insertnr;
|
||||
char *fmtstr,*sprintfbuf,*x;
|
||||
|
@ -826,14 +819,7 @@ DWORD WINAPI FormatMessage32W(
|
|||
}
|
||||
*t='\0';
|
||||
}
|
||||
if (nolinefeed) {
|
||||
/* remove linefeed */
|
||||
if(t>target && t[-1]=='\n') {
|
||||
*--t=0;
|
||||
if(t>target && t[-1]=='\r')
|
||||
*--t=0;
|
||||
}
|
||||
} else {
|
||||
if (!nolinefeed) {
|
||||
/* add linefeed */
|
||||
if(t==target || t[-1]!='\n')
|
||||
ADD_TO_T('\n'); /* FIXME: perhaps add \r too? */
|
||||
|
|
|
@ -473,17 +473,25 @@ LONG WINAPI LZCopy16( HFILE16 src, HFILE16 dest )
|
|||
*/
|
||||
LONG WINAPI LZCopy32( HFILE32 src, HFILE32 dest )
|
||||
{
|
||||
int i,ret,wret;
|
||||
int usedlzinit=0,i,ret,wret;
|
||||
LONG len;
|
||||
HFILE32 oldsrc = src;
|
||||
#define BUFLEN 1000
|
||||
BYTE buf[BUFLEN];
|
||||
INT32 WINAPI (*xread)(HFILE32,LPVOID,UINT32);
|
||||
|
||||
TRACE(file,"(%d,%d)\n",src,dest);
|
||||
if (src<0x400) {
|
||||
src = LZInit32(src);
|
||||
if (src!=oldsrc)
|
||||
usedlzinit=1;
|
||||
if (src>0xfff0)
|
||||
return 0;
|
||||
}
|
||||
|
||||
for (i=0;i<nroflzstates;i++)
|
||||
if (src==lzstates[i].lzfd)
|
||||
break;
|
||||
|
||||
/* not compressed? just copy */
|
||||
if (i==nroflzstates)
|
||||
xread=(INT32(*)(HFILE32,LPVOID,UINT32))_lread32;
|
||||
|
@ -504,6 +512,8 @@ LONG WINAPI LZCopy32( HFILE32 src, HFILE32 dest )
|
|||
if (wret!=ret)
|
||||
return LZERROR_WRITE;
|
||||
}
|
||||
if (usedlzinit)
|
||||
LZClose32(src);
|
||||
return len;
|
||||
#undef BUFLEN
|
||||
}
|
||||
|
|
24
misc/main.c
24
misc/main.c
|
@ -116,6 +116,7 @@ static XrmOptionDescRec optionsTable[] =
|
|||
#define NB_OPTIONS (sizeof(optionsTable) / sizeof(optionsTable[0]))
|
||||
|
||||
#define USAGE \
|
||||
"%s\n" \
|
||||
"Usage: %s [options] \"program_name [arguments]\"\n" \
|
||||
"\n" \
|
||||
"Options:\n" \
|
||||
|
@ -128,6 +129,7 @@ static XrmOptionDescRec optionsTable[] =
|
|||
" -dll name Enable or disable built-in DLLs\n" \
|
||||
" -failreadonly Read only files may not be opened in write mode\n" \
|
||||
" -fixedmap Use a \"standard\" color map\n" \
|
||||
" -help Show this help message\n" \
|
||||
" -iconic Start as an icon\n" \
|
||||
" -language xx Set the language (one of En,Es,De,No,Fr,Fi,Da,Cz,Eo,It,Ko,\n Hu,Pl,Po,Sw,Ca)\n" \
|
||||
" -managed Allow the window manager to manage created windows\n" \
|
||||
|
@ -146,7 +148,7 @@ static XrmOptionDescRec optionsTable[] =
|
|||
*/
|
||||
void MAIN_Usage( char *name )
|
||||
{
|
||||
MSG( USAGE, name );
|
||||
MSG( USAGE, WINE_RELEASE_INFO, name );
|
||||
exit(1);
|
||||
}
|
||||
|
||||
|
@ -199,12 +201,14 @@ static int MAIN_GetResource( XrmDatabase db, char *name, XrmValue *value )
|
|||
|
||||
|
||||
/***********************************************************************
|
||||
* ParseDebugOptions
|
||||
* MAIN_ParseDebugOptions
|
||||
*
|
||||
* Turns specific debug messages on or off, according to "options".
|
||||
* Returns TRUE if parsing was successful
|
||||
*
|
||||
* RETURNS
|
||||
* TRUE if parsing was successful
|
||||
*/
|
||||
BOOL32 ParseDebugOptions(char *options)
|
||||
static BOOL32 MAIN_ParseDebugOptions(char *options)
|
||||
{
|
||||
int l, cls;
|
||||
if (strlen(options)<3)
|
||||
|
@ -330,6 +334,11 @@ static void MAIN_ParseOptions( int *argc, char *argv[] )
|
|||
MSG( "%s\n", WINE_RELEASE_INFO );
|
||||
exit(0);
|
||||
}
|
||||
if (!strcmp( argv[i], "-h" ) || !strcmp( argv[i], "-help" ))
|
||||
{
|
||||
MAIN_Usage(argv[0]);
|
||||
exit(0);
|
||||
}
|
||||
}
|
||||
|
||||
/* Open display */
|
||||
|
@ -383,7 +392,7 @@ static void MAIN_ParseOptions( int *argc, char *argv[] )
|
|||
if (MAIN_GetResource( db, ".mode", &value))
|
||||
MAIN_ParseModeOption( (char *)value.addr );
|
||||
if (MAIN_GetResource( db, ".debugoptions", &value))
|
||||
ParseDebugOptions((char*)value.addr);
|
||||
MAIN_ParseDebugOptions((char*)value.addr);
|
||||
if (MAIN_GetResource( db, ".debugmsg", &value))
|
||||
{
|
||||
#ifndef DEBUG_RUNTIME
|
||||
|
@ -392,7 +401,7 @@ static void MAIN_ParseOptions( int *argc, char *argv[] )
|
|||
argv[0]);
|
||||
exit(1);
|
||||
#else
|
||||
if (ParseDebugOptions((char*)value.addr)==FALSE)
|
||||
if (MAIN_ParseDebugOptions((char*)value.addr)==FALSE)
|
||||
{
|
||||
int i;
|
||||
MSG("%s: Syntax: -debugmsg [class]+xxx,... or "
|
||||
|
@ -531,6 +540,9 @@ static void MAIN_RestoreSetup(void)
|
|||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* called_at_exit
|
||||
*/
|
||||
static void called_at_exit(void)
|
||||
{
|
||||
MAIN_RestoreSetup();
|
||||
|
|
|
@ -478,9 +478,14 @@ int WINAPI WNetPropertyDialog(HWND16 hwndParent,WORD iButton,
|
|||
*/
|
||||
int WINAPI WNetGetDirectoryType16(LPSTR lpName, LPINT16 lpType)
|
||||
{
|
||||
FIXME(wnet, "('%s',%p): stub\n",lpName,lpType);
|
||||
*lpType = 0;
|
||||
return WN_NO_NETWORK;
|
||||
UINT32 type = GetDriveType32A(lpName);
|
||||
|
||||
if (type == DRIVE_DOESNOTEXIST)
|
||||
type = GetDriveType32A(NULL);
|
||||
*lpType = (type==DRIVE_REMOTE)?WNDT_NETWORK:WNDT_NORMAL;
|
||||
TRACE(wnet,"%s is %s\n",lpName,(*lpType==WNDT_NETWORK)?
|
||||
"WNDT_NETWORK":"WNDT_NORMAL");
|
||||
return WN_SUCCESS;
|
||||
}
|
||||
|
||||
/*****************************************************************
|
||||
|
|
1712
misc/registry.c
1712
misc/registry.c
File diff suppressed because it is too large
Load Diff
19
misc/shell.c
19
misc/shell.c
|
@ -794,9 +794,14 @@ static DWORD SHELL_GetResourceTable(HFILE32 hFile,LPBYTE *retptr)
|
|||
_llseek32( hFile, 0, SEEK_SET );
|
||||
if ( (_lread32(hFile,&mz_header,sizeof(mz_header)) != sizeof(mz_header)) ||
|
||||
(mz_header.e_magic != IMAGE_DOS_SIGNATURE)
|
||||
)
|
||||
return 0;
|
||||
|
||||
) { /* .ICO file ? */
|
||||
if (mz_header.e_cblp == 1) { /* ICONHEADER.idType, must be 1 */
|
||||
*retptr = (LPBYTE)-1;
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
return 0; /* failed */
|
||||
}
|
||||
_llseek32( hFile, mz_header.e_lfanew, SEEK_SET );
|
||||
if (_lread32( hFile, magic, sizeof(magic) ) != sizeof(magic))
|
||||
return 0;
|
||||
|
@ -825,10 +830,9 @@ static DWORD SHELL_GetResourceTable(HFILE32 hFile,LPBYTE *retptr)
|
|||
}
|
||||
}
|
||||
*retptr = pTypeInfo;
|
||||
return IMAGE_OS2_SIGNATURE;
|
||||
} else
|
||||
*retptr = (LPBYTE)-1;
|
||||
return IMAGE_OS2_SIGNATURE; /* handles .ICO too */
|
||||
|
||||
return 0; /* failed */
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
|
@ -945,7 +949,8 @@ HGLOBAL16 WINAPI InternalExtractIcon(HINSTANCE16 hInstance,
|
|||
|
||||
sig = SHELL_GetResourceTable(hFile,&pData);
|
||||
|
||||
if(sig == IMAGE_OS2_SIGNATURE)
|
||||
if((sig == IMAGE_OS2_SIGNATURE)
|
||||
|| (sig == 1)) /* .ICO file */
|
||||
{
|
||||
HICON16 hIcon = 0;
|
||||
NE_TYPEINFO* pTInfo = (NE_TYPEINFO*)(pData + 2);
|
||||
|
|
|
@ -521,7 +521,7 @@ void __cdecl SHELL32_183(HMODULE32 hmod,HWND32 hwnd,DWORD id,DWORD x,DWORD type,
|
|||
strcpy(buf,"Desktop");
|
||||
LoadString32A(hmod,id,buf2,100);
|
||||
/* FIXME: the varargs handling doesn't. */
|
||||
FormatMessage32A(0x500,buf2,0,0,&buf3,256,&args);
|
||||
FormatMessage32A(0x500,buf2,0,0,(LPSTR)&buf3,256,(LPDWORD)&args);
|
||||
|
||||
FIXME(shell,"(%08lx,%08lx,%08lx(%s),%08lx(%s),%08lx,%p):stub.\n",
|
||||
(DWORD)hmod,(DWORD)hwnd,id,buf2,x,buf,type,arglist
|
||||
|
@ -660,3 +660,14 @@ DWORD WINAPI SHELL32_155(LPVOID x) {
|
|||
return SHELL32_195(x);
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
* SHELL32_85 [SHELL32.85]
|
||||
* unknown
|
||||
*/
|
||||
DWORD WINAPI SHELL32_85(DWORD x1,DWORD x2,DWORD x3,DWORD x4) {
|
||||
FIXME(shell,"(0x%08lx,0x%08lx,0x%08lx,0x%08lx):stub.\n",
|
||||
x1,x2,x3,x4
|
||||
);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
19
misc/spy.c
19
misc/spy.c
|
@ -669,8 +669,11 @@ void SPY_EnterMessage( INT32 iFlag, HWND32 hWnd, UINT32 msg,
|
|||
|
||||
if (hTask == GetCurrentTask()) strcpy( taskName, "self" );
|
||||
else if (!hTask) strcpy( taskName, "Wine" );
|
||||
else sprintf( taskName, "task %04x %s",
|
||||
hTask, MODULE_GetModuleName(hTask) );
|
||||
else
|
||||
{
|
||||
sprintf( taskName, "task %04x ???", hTask );
|
||||
GetModuleName( hTask, taskName + 10, sizeof(taskName) - 10 );
|
||||
}
|
||||
pname = SPY_GetWndName(hWnd);
|
||||
|
||||
if (iFlag == SPY_SENDMESSAGE16)
|
||||
|
@ -718,39 +721,39 @@ void SPY_ExitMessage( INT32 iFlag, HWND32 hWnd, UINT32 msg, LRESULT lReturn )
|
|||
switch(iFlag)
|
||||
{
|
||||
case SPY_RESULT_DEFWND16:
|
||||
TRACE(message,"%*s(%04x) DefWindowProc16: %s [%04x] returned %08lx\n",
|
||||
TRACE(message," %*s(%04x) DefWindowProc16: %s [%04x] returned %08lx\n",
|
||||
SPY_IndentLevel, "", hWnd, SPY_GetMsgName( msg ), msg, lReturn );
|
||||
break;
|
||||
|
||||
case SPY_RESULT_DEFWND32:
|
||||
TRACE(message,"%*s(%08x) DefWindowProc32: %s [%04x] returned %08lx\n",
|
||||
TRACE(message," %*s(%08x) DefWindowProc32: %s [%04x] returned %08lx\n",
|
||||
SPY_IndentLevel, "", hWnd, SPY_GetMsgName( msg ), msg, lReturn );
|
||||
break;
|
||||
|
||||
case SPY_RESULT_OK16:
|
||||
pname = SPY_GetWndName(hWnd);
|
||||
TRACE(message,"%*s(%04x) %-16s message [%04x] %s returned %08lx\n",
|
||||
TRACE(message," %*s(%04x) %-16s message [%04x] %s returned %08lx\n",
|
||||
SPY_IndentLevel, "", hWnd, pname, msg,
|
||||
SPY_GetMsgName( msg ), lReturn );
|
||||
break;
|
||||
|
||||
case SPY_RESULT_OK32:
|
||||
pname = SPY_GetWndName(hWnd);
|
||||
TRACE(message,"%*s(%08x) %-16s message [%04x] %s returned %08lx\n",
|
||||
TRACE(message," %*s(%08x) %-16s message [%04x] %s returned %08lx\n",
|
||||
SPY_IndentLevel, "", hWnd, pname, msg,
|
||||
SPY_GetMsgName( msg ), lReturn );
|
||||
break;
|
||||
|
||||
case SPY_RESULT_INVALIDHWND16:
|
||||
pname = SPY_GetWndName(hWnd);
|
||||
WARN(message, "%*s(%04x) %-16s message [%04x] %s HAS INVALID HWND\n",
|
||||
WARN(message, " %*s(%04x) %-16s message [%04x] %s HAS INVALID HWND\n",
|
||||
SPY_IndentLevel, "", hWnd, pname, msg,
|
||||
SPY_GetMsgName( msg ) );
|
||||
break;
|
||||
|
||||
case SPY_RESULT_INVALIDHWND32:
|
||||
pname = SPY_GetWndName(hWnd);
|
||||
WARN(message, "%*s(%08x) %-16s message [%04x] %s HAS INVALID HWND\n",
|
||||
WARN(message, " %*s(%08x) %-16s message [%04x] %s HAS INVALID HWND\n",
|
||||
SPY_IndentLevel, "", hWnd, pname, msg,
|
||||
SPY_GetMsgName( msg ) );
|
||||
break;
|
||||
|
|
|
@ -2581,11 +2581,10 @@ int WS_dup_se(LPWSINFO pwsi, struct servent* p_se, int flag)
|
|||
UINT16 wsaErrno(void)
|
||||
{
|
||||
int loc_errno = errno;
|
||||
#if defined(__FreeBSD__)
|
||||
ERR(winsock, "errno %d, (%s).\n",
|
||||
errno, strerror(errno));
|
||||
#ifdef HAVE_STRERROR
|
||||
WARN(winsock, "errno %d, (%s).\n", errno, strerror(errno));
|
||||
#else
|
||||
ERR(winsock, "errno %d\n", errno);
|
||||
WARN(winsock, "errno %d\n", errno);
|
||||
#endif
|
||||
|
||||
switch(loc_errno)
|
||||
|
@ -2657,11 +2656,10 @@ UINT16 wsaHerrno(void)
|
|||
{
|
||||
int loc_errno = h_errno;
|
||||
|
||||
#if defined(__FreeBSD__)
|
||||
ERR(winsock, "h_errno %d, (%s).\n",
|
||||
h_errno, strerror(h_errno));
|
||||
#ifdef HAVE_STRERROR
|
||||
WARN(winsock, "h_errno %d, (%s).\n", h_errno, strerror(h_errno));
|
||||
#else
|
||||
ERR(winsock, "h_errno %d.\n", h_errno);
|
||||
WARN(winsock, "h_errno %d.\n", h_errno);
|
||||
#endif
|
||||
|
||||
switch(loc_errno)
|
||||
|
|
|
@ -3,10 +3,10 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include "windows.h"
|
||||
#include "callback.h"
|
||||
#include "debugger.h"
|
||||
#include "main.h"
|
||||
#include "miscemu.h"
|
||||
#include "module.h"
|
||||
#include "options.h"
|
||||
|
@ -18,8 +18,6 @@
|
|||
*/
|
||||
BOOL32 MAIN_EmulatorInit(void)
|
||||
{
|
||||
extern BOOL32 MAIN_KernelInit(void);
|
||||
extern BOOL32 MAIN_UserInit(void);
|
||||
extern BOOL32 WIN16DRV_Init(void);
|
||||
extern BOOL32 RELAY_Init(void);
|
||||
|
||||
|
@ -46,7 +44,6 @@ BOOL32 MAIN_EmulatorInit(void)
|
|||
int main( int argc, char *argv[] )
|
||||
{
|
||||
extern BOOL32 PROCESS_Init(void);
|
||||
extern BOOL32 MAIN_WineInit( int *argc, char *argv[] );
|
||||
extern void *CALL32_Init(void);
|
||||
extern char * DEBUG_argv0;
|
||||
|
||||
|
@ -107,7 +104,6 @@ int main( int argc, char *argv[] )
|
|||
}
|
||||
|
||||
if (!loaded) { /* nothing loaded */
|
||||
extern void MAIN_Usage(char*);
|
||||
MAIN_Usage(argv[0]);
|
||||
return 1;
|
||||
}
|
||||
|
|
|
@ -224,13 +224,14 @@ static void INT_DoRealModeInt( CONTEXT *context )
|
|||
break;
|
||||
}
|
||||
|
||||
if (EFL_reg(context)&1)
|
||||
if (EFL_reg(context)&1) {
|
||||
FIXME(int31,"%02x: EAX=%08lx EBX=%08lx ECX=%08lx EDX=%08lx\n",
|
||||
BL_reg(context), EAX_reg(&realmode_ctx), EBX_reg(&realmode_ctx),
|
||||
ECX_reg(&realmode_ctx), EDX_reg(&realmode_ctx));
|
||||
FIXME(int31," ESI=%08lx EDI=%08lx DS=%04lx ES=%04lx\n",
|
||||
ESI_reg(&realmode_ctx), EDI_reg(&realmode_ctx),
|
||||
DS_reg(&realmode_ctx), ES_reg(&realmode_ctx) );
|
||||
}
|
||||
INT_SetRealModeContext( call, &realmode_ctx );
|
||||
}
|
||||
|
||||
|
|
|
@ -1318,7 +1318,7 @@ void WINAPI DOS3Call( CONTEXT *context )
|
|||
case 0x01:
|
||||
break;
|
||||
case 0x05:{ /* IOCTL - WRITE TO BLOCK DEVICE CONTROL CHANNEL */
|
||||
BYTE *dataptr = PTR_SEG_OFF_TO_LIN(DS_reg(context),DX_reg(context));
|
||||
/*BYTE *dataptr = PTR_SEG_OFF_TO_LIN(DS_reg(context),DX_reg(context));*/
|
||||
int drive = DOS_GET_DRIVE(BL_reg(context));
|
||||
|
||||
FIXME(int21,"program tried to write to block device control channel of drive %d:\n",drive);
|
||||
|
|
|
@ -72,6 +72,16 @@ void WINAPI INT_Int2fHandler( CONTEXT *context )
|
|||
INT_BARF( context, 0x2f );
|
||||
}
|
||||
break;
|
||||
case 0x56: /* INTERLNK */
|
||||
switch(AL_reg(context))
|
||||
{
|
||||
case 0x01: /* check if redirected drive */
|
||||
AL_reg(context) = 0; /* not redirected */
|
||||
break;
|
||||
default:
|
||||
INT_BARF( context, 0x2f );
|
||||
}
|
||||
break;
|
||||
case 0xb7: /* append */
|
||||
AL_reg(context) = 0; /* not installed */
|
||||
break;
|
||||
|
@ -217,7 +227,7 @@ void do_mscdex( CONTEXT *context )
|
|||
break;
|
||||
|
||||
default:
|
||||
FIXME(int, "Unimplemented MSCDEX function 0x%02.2X.\n", AL_reg(context));
|
||||
FIXME(int, "Unimplemented MSCDEX function 0x%02X.\n", AL_reg(context));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -780,9 +780,13 @@ static DWORD wodGetDevCaps(WORD wDevID, LPWAVEOUTCAPS16 lpCaps, DWORD dwSize)
|
|||
lpCaps->vDriverVersion = 0x0100;
|
||||
lpCaps->dwFormats = 0x00000000;
|
||||
lpCaps->dwSupport = WAVECAPS_VOLUME;
|
||||
|
||||
/* First bytespersampl, then stereo */
|
||||
bytespersmpl = (IOCTL(audio, SNDCTL_DSP_SAMPLESIZE, samplesize) != 0) ? 1 : 2;
|
||||
|
||||
lpCaps->wChannels = (IOCTL(audio, SNDCTL_DSP_STEREO, dsp_stereo) != 0) ? 1 : 2;
|
||||
if (lpCaps->wChannels > 1) lpCaps->dwSupport |= WAVECAPS_LRVOLUME;
|
||||
bytespersmpl = (IOCTL(audio, SNDCTL_DSP_SAMPLESIZE, samplesize) != 0) ? 1 : 2;
|
||||
|
||||
smplrate = 44100;
|
||||
if (IOCTL(audio, SNDCTL_DSP_SPEED, smplrate) == 0) {
|
||||
lpCaps->dwFormats |= WAVE_FORMAT_4M08;
|
||||
|
@ -901,9 +905,12 @@ static DWORD wodOpen(WORD wDevID, LPWAVEOPENDESC lpDesc, DWORD dwFlags)
|
|||
samplesize = WOutDev[wDevID].Format.wBitsPerSample;
|
||||
smplrate = WOutDev[wDevID].Format.wf.nSamplesPerSec;
|
||||
dsp_stereo = (WOutDev[wDevID].Format.wf.nChannels > 1) ? TRUE : FALSE;
|
||||
IOCTL(audio, SNDCTL_DSP_SPEED, smplrate);
|
||||
|
||||
/* First size and stereo then samplerate */
|
||||
IOCTL(audio, SNDCTL_DSP_SAMPLESIZE, samplesize);
|
||||
IOCTL(audio, SNDCTL_DSP_STEREO, dsp_stereo);
|
||||
IOCTL(audio, SNDCTL_DSP_SPEED, smplrate);
|
||||
|
||||
TRACE(mciwave,"wBitsPerSample=%u !\n",
|
||||
WOutDev[wDevID].Format.wBitsPerSample);
|
||||
TRACE(mciwave,"nAvgBytesPerSec=%lu !\n",
|
||||
|
|
|
@ -375,9 +375,12 @@ UINT16 WINAPI mmioSetInfo(HMMIO16 hmmio, const MMIOINFO16 * lpmmioinfo, UINT16 u
|
|||
UINT16 WINAPI mmioSetBuffer(HMMIO16 hmmio, LPSTR pchBuffer,
|
||||
LONG cchBuffer, UINT16 uFlags)
|
||||
{
|
||||
FIXME(mmio, "(hmmio=%d, pchBuf=%p, cchBuf=%d, uFlags=%#08x): stub\n",
|
||||
FIXME(mmio, "(hmmio=%d, pchBuf=%p, cchBuf=%ld, uFlags=%#08x): stub\n",
|
||||
hmmio, pchBuffer, cchBuffer, uFlags);
|
||||
return (UINT16) 0;
|
||||
/* stops Corel Draw 4 (16 bit) from working
|
||||
return MMIOERR_OUTOFMEMORY;
|
||||
*/
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue