From d7d4fdf8987925a03b3ec1ffe6719aac85838fa0 Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Tue, 26 Dec 1995 15:05:24 +0000 Subject: [PATCH] Release 951226 Sat Dec 23 18:15:59 1995 Alexandre Julliard * [configure.in] [Makefile.in] [tools/install-sh] New 'install' target installs Wine binary, library and man page. Library is now more logically named libwine.a. Split toolkit/ directory into library (for library code) and libtest (for test programs). * [controls/edit.c] Quick hack to partially support EM_PASSWORD style (avoids displaying your passwords on the screen when testing programs...) * [configure.in] [controls/menu.c] [include/resource.h] [misc/commdlg.c] [misc/ole2nls.c] [misc/shell.c] [windows/msgbox.c] Language is now a run-time option (wine -language xx). * [debugger/dbg.y] Dump some more debugging info on crash. * [misc/profile.c] Only consider ';' as a comment if it's the first non-blank character on the line. * [miscemu/dpmi.c] More debugging info for real-mode callback. * [objects/gdiobj.c] Rewrote EnumObjects() to do the Right Thing. * [resources/sysres*] New directory containing system resources. Fri Dec 22 11:24:39 GMT 1995 John Harvey * [win32/file.c] [win32/memory.c] Unixware doesn't have MAP_ANON ifdefed out for now. * [misc/dos_fs.c] DOS_GetDosFileName didn't truncate paths starting ./ properly. * [tools/build.c] Produces assembly code that works with the unixware assembler. Wed Dec 20 22:22:29 +0100 1995 Morten Welinder * [miscemu/instr.c] INSTR_GetOperandAddr: 16-bit addresses should be masked to 16 bits. * [misc/dos_fs.c] DOS_readdir should always return directories, even if they don't match the file name mask. Tue Dec 19 18:00:00 1995 Uwe Bonnes * [misc/exec.c] Give arguments to winhelp. * [miscemu/int21.c] Implemented Interrupt 21 AX=6C00 EXTENDED OPEN/CREATE. Created function ExtendedOpenCreateFile. Give for some Windows95 interrupts the return value 'not implemented'. Sun Dec 17 16:51:56 EST 1995 Jim Peterson * [include/kernel32.h] [include/windows.h] Moved the typedefs for SYSTEMTIME and LPSYSTEMTIME from include/kernel32.h to include/windows.h and declared the new Win32 API functions Sleep(), GetLocalTime(), and GetSystemTime(). Redefined INFINITE as 0xFFFFFFFF if WINELIB32. * [rc/rc (new file)] Created the shell script 'rc', which should simplify resource compilation. * [win32/environment.c] Kludged around an undefined reference to wine_files. This change should be fixed some time. * [win32/time.c] [if1632/kernel32.spec] Added the functions GetSystemTime(), and Sleep(). * [miscemu/int21.c] Renamed static function GetSystemTime to INT21_GetSystemTime to avoid conflicts with the API function of the same name. * [include/wintypes.h] Added the SPFMT definition for printf statements. * [misc/shell.c] [include/shell.h] Changed ERROR_* defines to SHELL_ERROR_*, as they were conflicting with the ones in include/winerror.h. They should probably use the versions in winerror.h, but I'm not certain, and that can be done later. * [windows/mdi.c] Translated WM_MDIACTIVATE(?,(LOhwnd,HIhwnd)) messages to WM_MDIACTIVATE(HIhwnd,LOhwnd) for WINELIB32. The ? parameter (boolean) was discarded with this translation. Translated handler of WM_MDISETMENU(ref,(loHMENU,hiHMENU)) to handle WM_MDISETMENU(loHMENU, hiHMENU) messages in WINELIB32 (ref assumed false, call DrawMenuBar() if desired). * [*/*] General explicit casts and more rigid typing to remove warnings. * [include/winpos.h] [windows/winpos.c] Changed return type of WINPOS_ChangeActiveWindow to BOOL. * [include/commdlg.h] [misc/commdlg.c] Added prototypes for ChooseColor(), CommDlgExtendedError(), FindText() GetFileTitle(), GetOpenFileName(), GetSaveFileName(), PrintDlg, and ReplaceText(). Renamed the CommDlgExtendError() function to CommDlgExtendedError(). Made GetFileTitle return a short, as per the API definition. * [Makefile.in] Added line to clean and distclean that removes temporaries from the include directory. Sat Dec 16 19:39:14 MET 1995 Steffen Moeller * [controls/edit.c] Almost rewrote EDIT_GetLineMsg. Sat Dec 16 13:51:48 MST 1995 Andrew Taylor * [windows/mdi.c] Fixed MDITile() bug that occurs when 0 windows are present or all windows are minimized. Wed Dec 12 23:30:00 1995 Uwe Bonnes * [misc/profile.c] Try harder to find files, especially in the working directory. Look in $HOME/.wine too and create it there if it isn't found. --- ANNOUNCE | 16 +- ChangeLog | 138 ++++++++++ Make.rules.in | 53 +++- Makefile.in | 78 ++++-- Wine.tmpl | 17 -- configure | 477 +++++++++++++++++++++++++--------- configure.in | 58 +++-- controls/combo.c | 4 +- controls/edit.c | 46 +++- controls/listbox.c | 6 +- controls/menu.c | 50 ++-- debugger/Makefile.in | 2 +- debugger/dbg.y | 13 + debugger/stack.c | 4 +- if1632/Makefile.in | 3 +- if1632/commdlg.spec | 58 ++--- if1632/kernel32.spec | 4 +- if1632/relay.c | 13 +- include/commdlg.h | 9 + include/global.h | 2 +- include/kernel32.h | 11 +- include/libres.h | 46 ++-- include/message.h | 2 +- include/module.h | 2 +- include/resource.h | 46 +++- include/selectors.h | 7 +- include/shell.h | 18 +- include/windows.h | 24 +- include/winpos.h | 2 +- include/wintypes.h | 5 +- library/Makefile.in | 17 ++ {toolkit => library}/README.libres | 0 {toolkit => library}/README.resources | 0 {toolkit => library}/arch.c | 0 {toolkit => library}/atom.c | 0 {toolkit => library}/heap.c | 14 +- {toolkit => library}/libres.c | 21 +- {toolkit => library}/miscstubs.c | 4 +- {toolkit => library}/sup.c | 0 {toolkit => library}/winmain.c | 0 libtest/Makefile.in | 34 +++ libtest/README.rolex | 8 + {toolkit => libtest}/hello.c | 0 {toolkit => libtest}/hello2.c | 0 {toolkit => libtest}/hello3.c | 6 +- {toolkit => libtest}/hello3res.rc | 0 libtest/rolex.c | 241 +++++++++++++++++ loader/module.c | 20 +- loader/ne_resource.c | 2 +- loader/task.c | 8 +- memory/global.c | 2 +- memory/selector.c | 6 +- misc/Makefile.in | 8 +- misc/commdlg.c | 97 +++---- misc/dos_fs.c | 24 +- misc/exec.c | 5 +- misc/ole2nls.c | 41 +-- misc/profile.c | 65 +++-- misc/shell.c | 67 +++-- misc/user32.c | 2 +- miscemu/dpmi.c | 62 ++++- miscemu/instr.c | 2 + miscemu/int21.c | 105 +++++++- objects/bitmap.c | 2 +- objects/cursoricon.c | 4 +- objects/dc.c | 4 +- objects/gdiobj.c | 96 ++++--- objects/metafile.c | 2 +- rc/Makefile.in | 64 ++--- rc/sysres.rc | 17 -- rc/winerc.c | 34 +-- resources/Makefile.in | 20 ++ resources/sysres.c | 56 ++++ {rc => resources}/sysres_Da.rc | 0 {rc => resources}/sysres_De.rc | 0 {rc => resources}/sysres_En.rc | 0 {rc => resources}/sysres_Es.rc | 0 {rc => resources}/sysres_Fi.rc | 0 {rc => resources}/sysres_Fr.rc | 0 {rc => resources}/sysres_No.rc | 0 toolkit/Makefile.in | 40 --- tools/build.c | 37 ++- tools/install-sh | 238 +++++++++++++++++ win32/advapi.c | 1 + win32/environment.c | 4 + win32/file.c | 8 +- win32/memory.c | 4 + win32/object_mgt.c | 2 +- win32/time.c | 32 +++ windows/defwnd.c | 2 +- windows/dialog.c | 8 +- windows/event.c | 4 +- windows/focus.c | 15 +- windows/hook.c | 6 +- windows/mdi.c | 52 +++- windows/message.c | 6 +- windows/msgbox.c | 9 +- windows/nonclient.c | 12 +- windows/property.c | 6 +- windows/scroll.c | 25 +- windows/win.c | 12 +- windows/winpos.c | 28 +- Wine.man => wine.man | 0 103 files changed, 2147 insertions(+), 778 deletions(-) delete mode 100644 Wine.tmpl rewrite if1632/commdlg.spec (98%) rewrite include/libres.h (78%) create mode 100644 library/Makefile.in rename {toolkit => library}/README.libres (100%) rename {toolkit => library}/README.resources (100%) rename {toolkit => library}/arch.c (100%) rename {toolkit => library}/atom.c (100%) rename {toolkit => library}/heap.c (96%) rename {toolkit => library}/libres.c (89%) rename {toolkit => library}/miscstubs.c (98%) rename {toolkit => library}/sup.c (100%) rename {toolkit => library}/winmain.c (100%) create mode 100644 libtest/Makefile.in create mode 100644 libtest/README.rolex rename {toolkit => libtest}/hello.c (100%) rename {toolkit => libtest}/hello2.c (100%) rename {toolkit => libtest}/hello3.c (92%) rename {toolkit => libtest}/hello3res.rc (100%) create mode 100644 libtest/rolex.c rewrite rc/Makefile.in (82%) delete mode 100644 rc/sysres.rc create mode 100644 resources/Makefile.in create mode 100644 resources/sysres.c rename {rc => resources}/sysres_Da.rc (100%) rename {rc => resources}/sysres_De.rc (100%) rename {rc => resources}/sysres_En.rc (100%) rename {rc => resources}/sysres_Es.rc (100%) rename {rc => resources}/sysres_Fi.rc (100%) rename {rc => resources}/sysres_Fr.rc (100%) rename {rc => resources}/sysres_No.rc (100%) delete mode 100644 toolkit/Makefile.in create mode 100755 tools/install-sh rename Wine.man => wine.man (100%) diff --git a/ANNOUNCE b/ANNOUNCE index 3b5dff6b08c..86723e9ff15 100644 --- a/ANNOUNCE +++ b/ANNOUNCE @@ -1,13 +1,13 @@ -This is release 951212 of Wine the MS Windows emulator. This is still a +This is release 951226 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. Patches should be submitted to "wine-new@amscons.com". Please don't forget to include a ChangeLog entry. I'll make a new release every other week. -WHAT'S NEW with Wine-951212: (see ChangeLog for details) - - Many more Winelib and Win32 fixes. - - Window management and MDI improvements. +WHAT'S NEW with Wine-951226: (see ChangeLog for details) + - Many more Winelib fixes. + - Language is now a run-time option. - Lots of bug fixes. See the README file in the distribution for installation instructions. @@ -16,10 +16,10 @@ Because of lags created by using mirror, this message may reach you before the release is available at the ftp sites. The sources will be available from the following locations: - sunsite.unc.edu:/pub/Linux/ALPHA/wine/Wine-951212.tar.gz - tsx-11.mit.edu:/pub/linux/ALPHA/Wine/development/Wine-951212.tar.gz - ftp.infomagic.com:/pub/mirrors/linux/wine/development/Wine-951212.tar.gz - aris.com:/pub/linux/ALPHA/Wine/development/Wine-951212.tar.gz + sunsite.unc.edu:/pub/Linux/ALPHA/wine/Wine-951226.tar.gz + tsx-11.mit.edu:/pub/linux/ALPHA/Wine/development/Wine-951226.tar.gz + ftp.infomagic.com:/pub/mirrors/linux/wine/development/Wine-951226.tar.gz + aris.com:/pub/linux/ALPHA/Wine/development/Wine-951226.tar.gz It should also be available from any site that mirrors tsx-11 or sunsite. diff --git a/ChangeLog b/ChangeLog index efd9fa46c77..fc9e70be8d7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,4 +1,142 @@ ---------------------------------------------------------------------- +Sat Dec 23 18:15:59 1995 Alexandre Julliard + + * [configure.in] [Makefile.in] [tools/install-sh] + New 'install' target installs Wine binary, library and man page. + Library is now more logically named libwine.a. + Split toolkit/ directory into library (for library code) and + libtest (for test programs). + + * [controls/edit.c] + Quick hack to partially support EM_PASSWORD style (avoids + displaying your passwords on the screen when testing programs...) + + * [configure.in] [controls/menu.c] [include/resource.h] + [misc/commdlg.c] [misc/ole2nls.c] [misc/shell.c] [windows/msgbox.c] + Language is now a run-time option (wine -language xx). + + * [debugger/dbg.y] + Dump some more debugging info on crash. + + * [misc/profile.c] + Only consider ';' as a comment if it's the first non-blank + character on the line. + + * [miscemu/dpmi.c] + More debugging info for real-mode callback. + + * [objects/gdiobj.c] + Rewrote EnumObjects() to do the Right Thing. + + * [resources/sysres*] + New directory containing system resources. + +Fri Dec 22 11:24:39 GMT 1995 John Harvey + + * [win32/file.c] [win32/memory.c] + Unixware doesn't have MAP_ANON ifdefed out for now. + + * [misc/dos_fs.c] + DOS_GetDosFileName didn't truncate paths starting ./ properly. + + * [tools/build.c] + Produces assembly code that works with the unixware assembler. + +Wed Dec 20 22:22:29 +0100 1995 Morten Welinder + + * [miscemu/instr.c] + INSTR_GetOperandAddr: 16-bit addresses should be masked to 16 bits. + + * [misc/dos_fs.c] + DOS_readdir should always return directories, even if they don't + match the file name mask. + +Tue Dec 19 18:00:00 1995 Uwe Bonnes + + * [misc/exec.c] + Give arguments to winhelp. + + * [miscemu/int21.c] + Implemented Interrupt 21 AX=6C00 EXTENDED OPEN/CREATE. + Created function ExtendedOpenCreateFile. + Give for some Windows95 interrupts the return value 'not + implemented'. + +Sun Dec 17 16:51:56 EST 1995 Jim Peterson + + * [include/kernel32.h] [include/windows.h] + Moved the typedefs for SYSTEMTIME and LPSYSTEMTIME from + include/kernel32.h to include/windows.h and declared the new Win32 + API functions Sleep(), GetLocalTime(), and GetSystemTime(). + Redefined INFINITE as 0xFFFFFFFF if WINELIB32. + + * [rc/rc (new file)] + Created the shell script 'rc', which should simplify resource + compilation. + + * [win32/environment.c] + Kludged around an undefined reference to wine_files. This change + should be fixed some time. + + * [win32/time.c] [if1632/kernel32.spec] + Added the functions GetSystemTime(), and Sleep(). + + * [miscemu/int21.c] + Renamed static function GetSystemTime to INT21_GetSystemTime to + avoid conflicts with the API function of the same name. + + * [include/wintypes.h] + Added the SPFMT definition for printf statements. + + * [misc/shell.c] [include/shell.h] + Changed ERROR_* defines to SHELL_ERROR_*, as they were conflicting + with the ones in include/winerror.h. They should probably use the + versions in winerror.h, but I'm not certain, and that can be done + later. + + * [windows/mdi.c] + Translated WM_MDIACTIVATE(?,(LOhwnd,HIhwnd)) messages to + WM_MDIACTIVATE(HIhwnd,LOhwnd) for WINELIB32. The ? parameter + (boolean) was discarded with this translation. Translated handler + of WM_MDISETMENU(ref,(loHMENU,hiHMENU)) to handle + WM_MDISETMENU(loHMENU, hiHMENU) messages in WINELIB32 (ref assumed + false, call DrawMenuBar() if desired). + + * [*/*] + General explicit casts and more rigid typing to remove warnings. + + * [include/winpos.h] [windows/winpos.c] + Changed return type of WINPOS_ChangeActiveWindow to BOOL. + + * [include/commdlg.h] [misc/commdlg.c] + Added prototypes for ChooseColor(), CommDlgExtendedError(), + FindText() GetFileTitle(), GetOpenFileName(), GetSaveFileName(), + PrintDlg, and ReplaceText(). + Renamed the CommDlgExtendError() function to CommDlgExtendedError(). + Made GetFileTitle return a short, as per the API definition. + + * [Makefile.in] + Added line to clean and distclean that removes temporaries from + the include directory. + +Sat Dec 16 19:39:14 MET 1995 Steffen Moeller + + * [controls/edit.c] + Almost rewrote EDIT_GetLineMsg. + +Sat Dec 16 13:51:48 MST 1995 Andrew Taylor + + * [windows/mdi.c] + Fixed MDITile() bug that occurs when 0 windows are present or all + windows are minimized. + +Wed Dec 12 23:30:00 1995 Uwe Bonnes + + * [misc/profile.c] + Try harder to find files, especially in the working directory. + Look in $HOME/.wine too and create it there if it isn't found. + +---------------------------------------------------------------------- Mon Dec 11 19:08:55 1995 Alexandre Julliard * [misc/lstr.c] diff --git a/Make.rules.in b/Make.rules.in index 4dd971da6b0..a6d40638711 100644 --- a/Make.rules.in +++ b/Make.rules.in @@ -1,21 +1,36 @@ # Global rules shared by all makefiles # The makefile must define at least TOPSRC and MODULE +# First some useful definitions + CC = @CC@ +CPP = @CPP@ CFLAGS = @CFLAGS@ DEFS = @DEFS@ -LANG = @LANG@ X_CFLAGS = @X_CFLAGS@ +X_LIBS = @X_LIBS@ +XPM_LIB = -lXpm +XLIB = @X_PRE_LIBS@ -lXext -lX11 @X_EXTRA_LIBS@ +LDLIBS = @LDLIBS@ YACC = @YACC@ LEX = @LEX@ LEXLIB = @LEXLIB@ DIVINCL = -I$(TOPSRC)/include -ALLCFLAGS = $(CFLAGS) $(DEFS) -ALANG\($(LANG)\) $(X_CFLAGS) $(DIVINCL) $(EXTRA_DEFS) +ALLCFLAGS = $(CFLAGS) $(DEFS) $(X_CFLAGS) $(DIVINCL) $(EXTRA_DEFS) LDCOMBINE = ld -r RM = rm -f +BUILD = $(TOPSRC)/tools/build +WINERC = $(TOPSRC)/rc/winerc +WINELIB = $(TOPSRC)/libwine.a +SUBMAKE = $(MAKE) 'CC=$(CC)' 'CFLAGS=$(CFLAGS)' 'DEFS=$(DEFS)' @SET_MAKE@ -OBJS = $(C_SRCS:.c=.o) $(ASM_SRCS:.S=.o) +OBJS = $(C_SRCS:.c=.o) $(ASM_SRCS:.S=.o) $(EXTRA_OBJS) + + +# Implicit rules + +.SUFFIXES: .rc .c.o: $(CC) -c $(ALLCFLAGS) -o $*.o $< @@ -23,20 +38,46 @@ OBJS = $(C_SRCS:.c=.o) $(ASM_SRCS:.S=.o) .S.o: $(CC) -c -o $*.o $< +.rc.c: + echo "#include \"windows.h\"" >winerctmp.c + echo WINDOWS_H_ENDS_HERE >>winerctmp.c + cat $< >>winerctmp.c + $(CPP) $(DEFS) $(DIVINCL) -P winerctmp.c | sed -e '1,/^WINDOWS_H_ENDS_HERE/d' | $(WINERC) -c -o $* -p $* + $(RM) winerctmp.c + +.rc.h: + echo "#include \"windows.h\"" >winerctmp.c + echo WINDOWS_H_ENDS_HERE >>winerctmp.c + cat $< >>winerctmp.c + $(CPP) $(DEFS) $(DIVINCL) -P winerctmp.c | sed -e '1,/^WINDOWS_H_ENDS_HERE/d' | $(WINERC) -c -o $* -p $* + $(RM) winerctmp.c + + +# Rule to rebuild resource compiler + +$(WINERC) check_winerc: + cd $(TOPSRC)/rc; $(SUBMAKE) winerc + + +# Rule for main module + $(MODULE).o: $(OBJS) $(LDCOMBINE) $(OBJS) -o $(MODULE).o + +# Misc. rules + depend:: $(C_SRCS) sed '/\#\#\# Dependencies/q' < Makefile > tmp_make $(CC) $(ALLCFLAGS) -MM $(C_SRCS) >> tmp_make mv tmp_make Makefile clean:: - $(RM) *.o \#*\# *~ *.bak *.flc tmp_make + $(RM) *.o \#*\# *~ *.bak *.flc tmp_make winerctmp.c distclean:: clean $(RM) Makefile -langclean:: - dummy: + +# End of global rules diff --git a/Makefile.in b/Makefile.in index e7a7bb9a39c..faea81911fe 100644 --- a/Makefile.in +++ b/Makefile.in @@ -3,18 +3,18 @@ # all (default): build wine # clean: remove all intermediate files # distclean: also remove all files created by configure -# langclean: remove all files which have to be remade if -# a different LANGuage is selected # depend: create the dependencies # etags: Create a TAGS file for Emacs. # # Author: Michael Patra # +# First some useful definitions + CC = @CC@ +CPP = @CPP@ CFLAGS = @CFLAGS@ -DEFS = @DEFS@ -LANG = @LANG@ +DEFS = @DEFS@ -DWINE_INI_GLOBAL=\"$(WINE_INI_GLOBAL)\" X_CFLAGS = @X_CFLAGS@ X_LIBS = @X_LIBS@ TOPSRC = @top_srcdir@ @@ -25,17 +25,50 @@ LDLIBS = @LDLIBS@ AR = ar rc RANLIB = @RANLIB@ RM = rm -f +SUBMAKE = $(MAKE) 'CC=$(CC)' 'CFLAGS=$(CFLAGS)' 'DEFS=$(DEFS)' @SET_MAKE@ -MAIN_TARGET = @MAIN_TARGET@ +# Installation infos -COMMONSUBDIRS = rc controls ipc loader misc multimedia objects win32 windows +INSTALL = @INSTALL@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_DATA = @INSTALL_DATA@ +prefix = @prefix@ +exec_prefix = @exec_prefix@ +bindir = @bindir@ +libdir = @libdir@ +sysconfdir = @sysconfdir@ +mandir = @mandir@/man1 +manext = .1 +WINE_INI_GLOBAL = $(sysconfdir)/wine.conf -EMUSUBDIRS = tools debugger debugger/readline if1632 memory miscemu +# Main target to build -LIBSUBDIRS = toolkit +MAIN_TARGET = @MAIN_TARGET@ -ALLSUBDIRS = $(COMMONSUBDIRS) $(EMUSUBDIRS) $(LIBSUBDIRS) +COMMONSUBDIRS = \ + rc \ + controls \ + ipc \ + loader \ + misc \ + multimedia \ + objects \ + resources \ + win32 \ + windows + +EMUSUBDIRS = \ + tools \ + debugger \ + debugger/readline \ + if1632 \ + memory \ + miscemu + +LIBSUBDIRS = library + +ALLSUBDIRS = $(COMMONSUBDIRS) $(EMUSUBDIRS) $(LIBSUBDIRS) libtest COMMONOBJS = \ controls/controls.o \ @@ -44,7 +77,7 @@ COMMONOBJS = \ misc/misc.o \ multimedia/multimedia.o \ objects/objects.o \ - rc/rc.o \ + resources/resources.o \ win32/win32.o \ windows/windows.o @@ -55,22 +88,31 @@ EMUOBJS = \ memory/memory.o \ miscemu/miscemu.o -LIBOBJS = toolkit/toolkit.o +LIBOBJS = library/library.o all: $(MAIN_TARGET) +install: install_$(MAIN_TARGET) + wine wine.sym: $(COMMONSUBDIRS) $(EMUSUBDIRS) dummy $(CC) -o wine $(COMMONOBJS) $(EMUOBJS) $(LDOPTIONS) $(X_LIBS) $(XPM_LIB) $(XLIB) $(LDLIBS) nm -n wine | grep -v _compiled >wine.sym -winelib.a: $(COMMONSUBDIRS) $(LIBSUBDIRS) dummy +install_wine: dummy + $(INSTALL_PROGRAM) wine $(bindir)/wine + $(INSTALL_DATA) wine.man $(mandir)/wine$(manext) + +libwine.a: $(COMMONSUBDIRS) $(LIBSUBDIRS) dummy $(RM) $@ $(AR) $@ $(COMMONOBJS) $(LIBOBJS) $(RANLIB) $@ +install_libwine.a: dummy + $(INSTALL_DATA) libwine.a $(libdir) + $(ALLSUBDIRS): dummy - @cd $@; $(MAKE) 'CC=$(CC)' 'CFLAGS=$(CFLAGS)' 'DEFS=$(DEFS)' 'LANG=$(LANG)' + @cd $@; $(SUBMAKE) depend: for i in $(ALLSUBDIRS); do (cd $$i; $(MAKE) depend); done @@ -80,15 +122,13 @@ etags: clean: for i in $(ALLSUBDIRS); do (cd $$i; $(MAKE) clean); done - $(RM) *.o \#*\# *~ *.bak *.flc wine wine.sym winelib.a TAGS + $(RM) *.o \#*\# *~ *.bak *.flc wine wine.sym libwine.a TAGS + $(RM) include/\#*\# include/*~ include/*.bak include/*.flc distclean: for i in $(ALLSUBDIRS); do (cd $$i; $(MAKE) distclean); done - $(RM) *.o \#*\# *~ *.bak wine wine.sym winelib.a TAGS + $(RM) *.o \#*\# *~ *.bak wine wine.sym libwine.a TAGS + $(RM) include/\#*\# include/*~ include/*.bak include/*.flc $(RM) config.* include/config.h Make.rules Makefile -langclean: - for i in $(ALLSUBDIRS); do (cd $$i; $(MAKE) langclean); done - $(RM) wine wine.sym winelib.a - dummy: diff --git a/Wine.tmpl b/Wine.tmpl deleted file mode 100644 index 1cc33203f2d..00000000000 --- a/Wine.tmpl +++ /dev/null @@ -1,17 +0,0 @@ -INCLUDES = -I$(TOP)/include -I$(TOP) - -XCOMM Imake rules go here - -/* - * WineRelocatableTarget - generate rules to produce a relocatable object - * file instead of a library. - */ -#ifndef WineRelocatableTarget -#define WineRelocatableTarget(objname,objlist,depobj) @@\ -AllTarget(objname.o) @@\ - @@\ -objname.o: depobj @@\ - $(RM) $@ @@\ - $(LD) $(LDCOMBINEFLAGS) objlist depobj -o $@ -#endif /* WineRelocatableTarget */ - diff --git a/configure b/configure index 3223ea75dcd..704cc35a345 100755 --- a/configure +++ b/configure @@ -2,7 +2,7 @@ # From configure.in configure.in 1.00 # Guess values for system-dependent variables and create Makefiles. -# Generated automatically using autoconf version 2.4 +# Generated automatically using autoconf version 2.7 # Copyright (C) 1992, 1993, 1994 Free Software Foundation, Inc. # # This configure script is free software; the Free Software Foundation @@ -15,8 +15,6 @@ ac_default_prefix=/usr/local ac_help="$ac_help --with-library build Wine as a library instead of an emulator" ac_help="$ac_help - --with-language=LANG change the language (LANG=En/De/Fr/Es/No/Fi/Da)" -ac_help="$ac_help --with-ipc use inter-process communication for DDE" ac_help="$ac_help --with-malloc-debug enable malloc() debugging" @@ -44,9 +42,22 @@ target=NONE verbose= x_includes=NONE x_libraries=NONE +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datadir='${prefix}/share' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +libdir='${exec_prefix}/lib' +includedir='${prefix}/include' +oldincludedir='/usr/include' +infodir='${prefix}/info' +mandir='${prefix}/man' # Initialize some other variables. subdirs= +MFLAGS= MAKEFLAGS= ac_prev= for ac_option @@ -68,9 +79,14 @@ do case "$ac_option" in - -build | --build | --buil | --bui | --bu | --b) + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir="$ac_optarg" ;; + + -build | --build | --buil | --bui | --bu) ac_prev=build ;; - -build=* | --build=* | --buil=* | --bui=* | --bu=* | --b=*) + -build=* | --build=* | --buil=* | --bui=* | --bu=*) build="$ac_optarg" ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ @@ -80,6 +96,12 @@ do | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file="$ac_optarg" ;; + -datadir | --datadir | --datadi | --datad | --data | --dat | --da) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ + | --da=*) + datadir="$ac_optarg" ;; + -disable-* | --disable-*) ac_feature=`echo $ac_option|sed -e 's/-*disable-//'` # Reject names that are not valid shell variable names. @@ -130,12 +152,29 @@ Configuration: Directory and file names: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] - --exec-prefix=PREFIX install architecture-dependent files in PREFIX + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [same as prefix] + --bindir=DIR user executables in DIR [EPREFIX/bin] + --sbindir=DIR system admin executables in DIR [EPREFIX/sbin] + --libexecdir=DIR program executables in DIR [EPREFIX/libexec] + --datadir=DIR read-only architecture-independent data in DIR + [PREFIX/share] + --sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data in DIR + [PREFIX/com] + --localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var] + --libdir=DIR object code libraries in DIR [EPREFIX/lib] + --includedir=DIR C header files in DIR [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc in DIR [/usr/include] + --infodir=DIR info documentation in DIR [PREFIX/info] + --mandir=DIR man documentation in DIR [PREFIX/man] --srcdir=DIR find the sources in DIR [configure dir or ..] --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names - --program-transform-name=PROGRAM run sed PROGRAM on installed program names + --program-transform-name=PROGRAM + run sed PROGRAM on installed program names +EOF + cat << EOF Host type: --build=BUILD configure for building on BUILD [BUILD=HOST] --host=HOST configure for HOST [guessed] @@ -147,8 +186,10 @@ Features and packages: --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --x-includes=DIR X include files are in DIR --x-libraries=DIR X library files are in DIR ---enable and --with options recognized:$ac_help EOF + if test -n "$ac_help"; then + echo "--enable and --with options recognized:$ac_help" + fi exit 0 ;; -host | --host | --hos | --ho) @@ -156,6 +197,44 @@ EOF -host=* | --host=* | --hos=* | --ho=*) host="$ac_optarg" ;; + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir="$ac_optarg" ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir="$ac_optarg" ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir="$ac_optarg" ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir="$ac_optarg" ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst \ + | --locals | --local | --loca | --loc | --lo) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* \ + | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) + localstatedir="$ac_optarg" ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir="$ac_optarg" ;; + -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; @@ -168,6 +247,15 @@ EOF | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir="$ac_optarg" ;; + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) @@ -208,6 +296,23 @@ EOF | -silent | --silent | --silen | --sile | --sil) silent=yes ;; + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir="$ac_optarg" ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir="$ac_optarg" ;; + -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) @@ -218,6 +323,13 @@ EOF -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir="$ac_optarg" ;; + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir="$ac_optarg" ;; + -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) @@ -227,7 +339,7 @@ EOF verbose=yes ;; -version | --version | --versio | --versi | --vers) - echo "configure generated by autoconf version 2.4" + echo "configure generated by autoconf version 2.7" exit 0 ;; -with-* | --with-*) @@ -273,7 +385,7 @@ EOF -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; } ;; - *) + *) if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then echo "configure: warning: $ac_option: invalid host type" 1>&2 fi @@ -392,9 +504,12 @@ fi ac_ext=c # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. -ac_cpp='$CPP $CPPFLAGS' -ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5 2>&5' -ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5 2>&5' +ac_cpp='echo $CPP $CPPFLAGS 1>&5; +$CPP $CPPFLAGS' +ac_compile='echo ${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5; +${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5 2>&5' +ac_link='echo ${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5; +${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5 2>&5' if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu. @@ -409,39 +524,48 @@ else fi +ac_aux_dir= +for ac_dir in tools $srcdir/tools; do + if test -f $ac_dir/install-sh; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f $ac_dir/install.sh; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + fi +done +if test -z "$ac_aux_dir"; then + { echo "configure: error: can not find install-sh or install.sh in tools $srcdir/tools" 1>&2; exit 1; } +fi +ac_config_guess=$ac_aux_dir/config.guess +ac_config_sub=$ac_aux_dir/config.sub +ac_configure=$ac_aux_dir/configure # This should be Cygnus configure. + # We want these before the checks, so the checks can modify their values. -test -z "$CFLAGS" && CFLAGS="-g -O2 -Wall" +test -z "$CFLAGS" && CFLAGS="-g -O2" test -z "$LDFLAGS" && LDFLAGS=-g test -z "$LDLIBS" && LDLIBS=-lm # Check whether --with-library or --without-library was given. -withval="$with_library" -if test -n "$withval"; then +if test "${with_library+set}" = set; then + withval="$with_library" cat >> confdefs.h <<\EOF #define WINELIB 1 EOF - MAIN_TARGET="winelib.a" + MAIN_TARGET="libwine.a" else MAIN_TARGET="wine" fi -# Check whether --with-language or --without-language was given. -withval="$with_language" -if test -n "$withval"; then - LANG="$withval" -else - LANG=En -fi - - - # Check whether --with-ipc or --without-ipc was given. -withval="$with_ipc" -if test -n "$withval"; then +if test "${with_ipc+set}" = set; then + withval="$with_ipc" cat >> confdefs.h <<\EOF #define CONFIG_IPC 1 EOF @@ -450,8 +574,8 @@ fi # Check whether --with-malloc-debug or --without-malloc-debug was given. -withval="$with_malloc_debug" -if test -n "$withval"; then +if test "${with_malloc_debug+set}" = set; then + withval="$with_malloc_debug" cat >> confdefs.h <<\EOF #define MALLOC_DEBUGGING 1 EOF @@ -530,6 +654,7 @@ else ac_cv_prog_gcc=no fi fi + echo "$ac_t""$ac_cv_prog_gcc" 1>&6 if test $ac_cv_prog_gcc = yes; then GCC=yes @@ -547,7 +672,8 @@ fi rm -f conftest* fi - echo "$ac_t""$ac_cv_prog_gcc_g" 1>&6 + +echo "$ac_t""$ac_cv_prog_gcc_g" 1>&6 if test $ac_cv_prog_gcc_g = yes; then CFLAGS="-g -O" else @@ -559,6 +685,7 @@ else test "${CFLAGS+set}" = set || CFLAGS="-g" fi +test "x${GCC}" = "xyes" && CFLAGS="$CFLAGS -Wall -fno-strength-reduce" echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then @@ -574,7 +701,7 @@ else # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. cat > conftest.$ac_ext < Syntax Error @@ -588,7 +715,7 @@ else rm -rf conftest* CPP="${CC-cc} -E -traditional-cpp" cat > conftest.$ac_ext < Syntax Error @@ -640,8 +767,8 @@ fi echo $ac_n "checking for X""... $ac_c" 1>&6 # Check whether --with-x or --without-x was given. -withval="$with_x" -if test -n "$withval"; then +if test "${with_x+set}" = set; then + withval="$with_x" : fi @@ -667,7 +794,7 @@ EOF if (xmkmf) >/dev/null 2>/dev/null && test -f Makefile; then no_x= # GNU make sometimes prints "make[1]: Entering...", which would confuse us. - eval `make acfindx 2>/dev/null | grep -v make` + eval `${MAKE-make} acfindx 2>/dev/null | grep -v make` # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR. for ac_extension in a so sl; do if test ! -f $ac_im_usrlibdir/libX11.$ac_extension && @@ -694,7 +821,7 @@ test -z "$x_direct_test_library" && x_direct_test_library=Xt test -z "$x_direct_test_function" && x_direct_test_function=XtMalloc test -z "$x_direct_test_include" && x_direct_test_include=X11/Intrinsic.h cat > conftest.$ac_ext < EOF @@ -757,7 +884,7 @@ rm -f conftest* ac_save_LIBS="$LIBS" LIBS="-l$x_direct_test_library $LIBS" cat > conftest.$ac_ext </dev/null`" = SunOS && uname -r | grep '^5' >/dev/null; then - X_LIBS="$X_LIBS -R$x_libraries" + X_LIBS="$X_LIBS -R $x_libraries" fi fi @@ -869,13 +996,14 @@ else # libraries we check for below, so use a different variable. # --interran@uluru.Stanford.EDU, kb@cs.umb.edu. echo $ac_n "checking for -lICE""... $ac_c" 1>&6 -if eval "test \"`echo '$''{'ac_cv_lib_ICE'+set}'`\" = set"; then +ac_lib_var=`echo ICE | tr '.-/+' '___p'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lICE $LIBS" cat > conftest.$ac_ext <&6 X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE" else @@ -912,13 +1040,14 @@ fi # libraries were built with DECnet support. And karl@cs.umb.edu says # the Alpha needs dnet_stub (dnet does not exist). echo $ac_n "checking for -ldnet""... $ac_c" 1>&6 -if eval "test \"`echo '$''{'ac_cv_lib_dnet'+set}'`\" = set"; then +ac_lib_var=`echo dnet | tr '.-/+' '___p'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-ldnet $LIBS" cat > conftest.$ac_ext <&6 X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet" else @@ -946,13 +1075,14 @@ fi if test $ac_cv_lib_dnet = no; then echo $ac_n "checking for -ldnet_stub""... $ac_c" 1>&6 -if eval "test \"`echo '$''{'ac_cv_lib_dnet_stub'+set}'`\" = set"; then +ac_lib_var=`echo dnet_stub | tr '.-/+' '___p'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-ldnet_stub $LIBS" cat > conftest.$ac_ext <&6 X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub" else @@ -985,13 +1115,14 @@ fi # Not sure which flavor of 386 UNIX this is, but it seems harmless to # check for it. echo $ac_n "checking for -lnsl""... $ac_c" 1>&6 -if eval "test \"`echo '$''{'ac_cv_lib_nsl'+set}'`\" = set"; then +ac_lib_var=`echo nsl | tr '.-/+' '___p'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lnsl $LIBS" cat > conftest.$ac_ext <&6 X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl" else @@ -1023,13 +1154,14 @@ fi # But -lsocket is broken on IRIX, according to simon@lia.di.epfl.ch. if test "`(uname) 2>/dev/null`" != IRIX; then echo $ac_n "checking for -lsocket""... $ac_c" 1>&6 -if eval "test \"`echo '$''{'ac_cv_lib_socket'+set}'`\" = set"; then +ac_lib_var=`echo socket | tr '.-/+' '___p'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lsocket $LIBS" cat > conftest.$ac_ext <&6 X_EXTRA_LIBS="$X_EXTRA_LIBS -lsocket" else @@ -1127,13 +1259,14 @@ then *) ac_lib=l ;; esac echo $ac_n "checking for -l$ac_lib""... $ac_c" 1>&6 -if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib'+set}'`\" = set"; then +ac_lib_var=`echo $ac_lib | tr '.-/+' '___p'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-l$ac_lib $LIBS" cat > conftest.$ac_ext <&6 LEXLIB="-l$ac_lib" else @@ -1189,14 +1322,74 @@ else echo "$ac_t""no" 1>&6 fi +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# ./install, which can be erroneously created by make from ./install.sh. +echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 +if test -z "$INSTALL"; then +if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in $PATH; do + # Account for people who put trailing slashes in PATH elements. + case "$ac_dir/" in + /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + for ac_prog in ginstall installbsd scoinst install; do + if test -f $ac_dir/$ac_prog; then + if test $ac_prog = install && + grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + # OSF/1 installbsd also uses dspmsg, but is usable. + : + else + ac_cv_path_install="$ac_dir/$ac_prog -c" + break 2 + fi + fi + done + ;; + esac + done + IFS="$ac_save_ifs" + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL="$ac_cv_path_install" + else + # As a last resort, use the slow shell script. We don't cache a + # path for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the path is relative. + INSTALL="$ac_install_sh" + fi +fi +echo "$ac_t""$INSTALL" 1>&6 + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + echo $ac_n "checking for -li386""... $ac_c" 1>&6 -if eval "test \"`echo '$''{'ac_cv_lib_i386'+set}'`\" = set"; then +ac_lib_var=`echo i386 | tr '.-/+' '___p'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-li386 $LIBS" cat > conftest.$ac_ext <&6 LDLIBS="$LDLIBS -li386" else @@ -1231,13 +1424,13 @@ 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 < /* Override any gcc2 internal prototype to avoid an error. */ -char $ac_func(); +char $ac_func(); int main() { return 0; } int t() { @@ -1265,7 +1458,7 @@ rm -f conftest* fi if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then echo "$ac_t""yes" 1>&6 - ac_tr_func=HAVE_`echo $ac_func | tr '[a-z]' '[A-Z]'` + ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` cat >> confdefs.h <&6 else cat > conftest.$ac_ext < EOF @@ -1301,7 +1494,7 @@ rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 - ac_tr_hdr=HAVE_`echo $ac_hdr | tr '[a-z]./\055' '[A-Z]___'` + ac_tr_hdr=HAVE_`echo $ac_hdr | tr 'abcdefghijklmnopqrstuvwxyz./\055' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ___'` cat >> confdefs.h <&6 else cat > conftest.$ac_ext < #include @@ -1357,6 +1550,7 @@ fi rm -f conftest* fi + echo "$ac_t""$ac_cv_header_stat_broken" 1>&6 if test $ac_cv_header_stat_broken = yes; then cat >> confdefs.h <<\EOF @@ -1370,7 +1564,7 @@ if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&6 if test $ac_cv_c_const = no; then cat >> confdefs.h <<\EOF @@ -1447,7 +1642,7 @@ else ac_cv_c_cross=yes else cat > conftest.$ac_ext <&6 +cross_compiling=$ac_cv_c_cross echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -1490,7 +1686,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 @@ -1508,7 +1704,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 @@ -1526,10 +1722,10 @@ fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then - ac_cv_header_stdc=no + : else cat > conftest.$ac_ext < #define ISLOWER(c) ('a' <= (c) && (c) <= 'z') @@ -1550,6 +1746,7 @@ fi rm -fr conftest* fi fi + echo "$ac_t""$ac_cv_header_stdc" 1>&6 if test $ac_cv_header_stdc = yes; then cat >> confdefs.h <<\EOF @@ -1563,7 +1760,7 @@ 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 < #if STDC_HEADERS @@ -1590,27 +1787,8 @@ EOF fi -if test -z "${top_srcdir}"; then -TOP_SRCDIR=`pwd` -else -TOP_SRCDIR="${top_srcdir}" -fi -echo $ac_n "checking for /usr/local/etc/wine.conf""... $ac_c" 1>&6 -if test -f /usr/local/etc/wine.conf; then -echo "$ac_t""yes" 1>&6 -WINE_INI_GLOBAL='"/usr/local/etc/wine.conf"' -else -echo "$ac_t""no" 1>&6 -WINE_INI_GLOBAL="\"${TOP_SRCDIR}/wine.ini\"" -fi - -cat >> confdefs.h <> $CONFIG_STATUS < conftest.subs <<\CEOF +# Protect against being on the right side of a sed subst in config.status. +sed 's/%@/@@/; s/@%/@@/; s/%g\$/@g/; /@g\$/s/[\\\\&%]/\\\\&/g; + s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF $ac_vpsub $extrasub s%@CFLAGS@%$CFLAGS%g @@ -1727,9 +1928,20 @@ s%@LIBS@%$LIBS%g s%@exec_prefix@%$exec_prefix%g s%@prefix@%$prefix%g s%@program_transform_name@%$program_transform_name%g +s%@bindir@%$bindir%g +s%@sbindir@%$sbindir%g +s%@libexecdir@%$libexecdir%g +s%@datadir@%$datadir%g +s%@sysconfdir@%$sysconfdir%g +s%@sharedstatedir@%$sharedstatedir%g +s%@localstatedir@%$localstatedir%g +s%@libdir@%$libdir%g +s%@includedir@%$includedir%g +s%@oldincludedir@%$oldincludedir%g +s%@infodir@%$infodir%g +s%@mandir@%$mandir%g s%@LDLIBS@%$LDLIBS%g s%@MAIN_TARGET@%$MAIN_TARGET%g -s%@LANG@%$LANG%g s%@SET_MAKE@%$SET_MAKE%g s%@CC@%$CC%g s%@CPP@%$CPP%g @@ -1741,7 +1953,8 @@ s%@YACC@%$YACC%g s%@LEX@%$LEX%g s%@LEXLIB@%$LEXLIB%g s%@RANLIB@%$RANLIB%g -s%@WINE_INI_GLOBAL@%$WINE_INI_GLOBAL%g +s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g +s%@INSTALL_DATA@%$INSTALL_DATA%g /@MAKE_RULES@/r $MAKE_RULES s%@MAKE_RULES@%%g @@ -1749,7 +1962,26 @@ CEOF EOF cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then @@ -1784,6 +2016,10 @@ for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then top_srcdir="$ac_dots$ac_given_srcdir" ;; esac + case "$ac_given_INSTALL" in + [/$]*) INSTALL="$ac_given_INSTALL" ;; + *) INSTALL="$ac_dots$ac_given_INSTALL" ;; + esac echo creating "$ac_file" rm -f "$ac_file" configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure." @@ -1796,6 +2032,7 @@ for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then s%@configure_input@%$configure_input%g s%@srcdir@%$srcdir%g s%@top_srcdir@%$top_srcdir%g +s%@INSTALL@%$INSTALL%g " -f conftest.subs $ac_given_srcdir/$ac_file_in > $ac_file fi; done rm -f conftest.subs diff --git a/configure.in b/configure.in index 7eee8424b0c..27490d1f892 100644 --- a/configure.in +++ b/configure.in @@ -3,9 +3,10 @@ dnl Author: Michael Patra dnl AC_REVISION([configure.in 1.00]) AC_INIT(controls/edit.c) +AC_CONFIG_AUX_DIR(tools) # We want these before the checks, so the checks can modify their values. -test -z "$CFLAGS" && CFLAGS="-g -O2 -Wall" AC_SUBST(CFLAGS) +test -z "$CFLAGS" && CFLAGS="-g -O2" AC_SUBST(CFLAGS) test -z "$LDFLAGS" && LDFLAGS=-g AC_SUBST(LDFLAGS) test -z "$LDLIBS" && LDLIBS=-lm AC_SUBST(LDLIBS) @@ -13,15 +14,9 @@ dnl **** Command-line arguments **** AC_ARG_WITH(library, [ --with-library build Wine as a library instead of an emulator], -[AC_DEFINE(WINELIB) MAIN_TARGET="winelib.a"],[MAIN_TARGET="wine"]) +[AC_DEFINE(WINELIB) MAIN_TARGET="libwine.a"],[MAIN_TARGET="wine"]) AC_SUBST(MAIN_TARGET) -AC_ARG_WITH(language, -[ --with-language=LANG change the language (LANG=En/De/Fr/Es/No/Fi/Da)], -[LANG="$withval"], -[LANG=En],) -AC_SUBST(LANG) - AC_ARG_WITH(ipc, [ --with-ipc use inter-process communication for DDE], [AC_DEFINE(CONFIG_IPC)]) @@ -34,10 +29,14 @@ dnl **** Check for some programs and libraries **** AC_PROG_MAKE_SET AC_PROG_CC +dnl Add some options for gcc +test "x${GCC}" = "xyes" && CFLAGS="$CFLAGS -Wall -fno-strength-reduce" +AC_PROG_CPP AC_PATH_XTRA AC_PROG_YACC AC_PROG_LEX AC_PROG_RANLIB +AC_PROG_INSTALL dnl Check for -li386 for NetBSD AC_CHECK_LIB(i386,i386_set_ldt,LDLIBS="$LDLIBS -li386") @@ -49,27 +48,32 @@ AC_HEADER_STAT() AC_C_CONST() AC_TYPE_SIZE_T() -if test -z "${top_srcdir}"; then -TOP_SRCDIR=`pwd` -else -TOP_SRCDIR="${top_srcdir}" -fi - -AC_MSG_CHECKING(for /usr/local/etc/wine.conf) -if test -f /usr/local/etc/wine.conf; then -AC_MSG_RESULT(yes) -WINE_INI_GLOBAL='"/usr/local/etc/wine.conf"' -else -AC_MSG_RESULT(no) -WINE_INI_GLOBAL="\"${TOP_SRCDIR}/wine.ini\"" -fi -AC_SUBST(WINE_INI_GLOBAL) -AC_DEFINE_UNQUOTED(WINE_INI_GLOBAL,$WINE_INI_GLOBAL) +dnl **** Generate output files **** -MAKE_RULES=$TOP_SRCDIR/Make.rules +MAKE_RULES=Make.rules AC_SUBST_FILE(MAKE_RULES) -AC_OUTPUT(Make.rules controls/Makefile ipc/Makefile loader/Makefile memory/Makefile misc/Makefile miscemu/Makefile multimedia/Makefile objects/Makefile win32/Makefile windows/Makefile rc/Makefile debugger/Makefile debugger/readline/Makefile tools/Makefile if1632/Makefile toolkit/Makefile Makefile) +AC_OUTPUT([ +Make.rules +Makefile +controls/Makefile +debugger/Makefile +debugger/readline/Makefile +if1632/Makefile +ipc/Makefile +library/Makefile +libtest/Makefile +loader/Makefile +memory/Makefile +misc/Makefile +miscemu/Makefile +multimedia/Makefile +objects/Makefile +rc/Makefile +resources/Makefile +tools/Makefile +win32/Makefile +windows/Makefile ]) echo echo "Configure finished. Do 'make depend; make' to compile Wine." @@ -79,5 +83,5 @@ dnl Local Variables: dnl comment-start: "dnl " dnl comment-end: "" dnl comment-start-skip: "\\bdnl\\b\\s *" -dnl compile-command: "make configure config.h.in" +dnl compile-command: "autoconf" dnl End: diff --git a/controls/combo.c b/controls/combo.c index e82deaa8e1d..6c3f320212c 100644 --- a/controls/combo.c +++ b/controls/combo.c @@ -434,7 +434,7 @@ static LRESULT CBSelectString(HWND hwnd, WPARAM wParam, LPARAM lParam) LPHEADLIST lphl = ComboGetListHeader(hwnd); WORD wRet; - wRet = ListBoxFindString(lphl, wParam, lParam); + wRet = ListBoxFindString(lphl, wParam, (SEGPTR)lParam); /* XXX add functionality here */ @@ -447,7 +447,7 @@ static LRESULT CBSelectString(HWND hwnd, WPARAM wParam, LPARAM lParam) static LRESULT CBFindString(HWND hwnd, WPARAM wParam, LPARAM lParam) { LPHEADLIST lphl = ComboGetListHeader(hwnd); - return ListBoxFindString(lphl, wParam, lParam); + return ListBoxFindString(lphl, wParam, (SEGPTR)lParam); } /*********************************************************************** diff --git a/controls/edit.c b/controls/edit.c index 8663d409bd2..98c28419f09 100644 --- a/controls/edit.c +++ b/controls/edit.c @@ -63,7 +63,7 @@ typedef struct int SelEndLine; /* ending line of selection */ int SelEndCol; /* ending column of selection */ HFONT hFont; /* handle of current font (if not default) */ - HANDLE hDeletedText; /* handle to deleted txet buffer for undo */ + HANDLE hDeletedText; /* handle to deleted text buffer for undo */ int DeletedLength; /* length of deleted text */ int DeletedCurrLine; /* starting line from which text was deleted */ int DeletedCurrCol; /* starting col from which text was deleted */ @@ -509,7 +509,15 @@ static void EDIT_WriteText(HWND hwnd, char *lp, int off, int len, int row, es->BlankLine[(es->ClientWidth / es->CharWidths[32]) + 1] = 0; } - if (!(cp = strchr(str, VK_TAB))) + if ((GetWindowLong( hwnd, GWL_STYLE ) & ES_PASSWORD)) + { + int len = strlen(str); + char *buff = xmalloc( len+1 ); + memset( buff, '*', len ); + buff[len] = '\0'; + TextOut( hdc, col - diff, row * es->txtht, buff, len ); + } + else if (!(cp = strchr(str, VK_TAB))) TextOut(hdc, col - diff, row * es->txtht, str, strlen(str)); else { @@ -1920,15 +1928,35 @@ static LONG EDIT_SetTabStopsMsg(HWND hwnd, WORD wParam, LONG lParam) */ static LONG EDIT_GetLineMsg(HWND hwnd, WORD wParam, LONG lParam) { - char *cp, *cp1; - int len; - unsigned char *buffer = (char *)lParam; + char *cp; + int len = 0; + unsigned char *buffer = (char *)PTR_SEG_TO_LIN(lParam); + + /* the line wanted */ + cp = EDIT_TextLine (hwnd, wParam); + len = EDIT_LineLength(hwnd, wParam); + + /* if cp==NULL nothing will be copied - I hope */ + if ((char *) NULL == cp && 0 != len) { + fprintf(stdnimp,"edit: EDIT_GetLineMsg cp == NULL && len != 0"); + return 0L; + } + + if (0>len) + fprintf(stdnimp,"edit: EDIT_GetLineMsg len < 0"); + + /* suggested reason for the following line: + never copy more than the buffer's size ? + I thought that this would make sense only if + the lstrcpyn fun was used instead of the gnu strncpy. + */ + len = MIN(len, (WORD)(*buffer)); + + if (0>len) + fprintf(stdnimp,"edit: EDIT_GetLineMsg len < 0 after MIN"); - cp = EDIT_TextLine(hwnd, wParam); - cp1 = EDIT_TextLine(hwnd, wParam + 1); - len = MIN((int)(cp1 - cp), (WORD)(*buffer)); dprintf_edit( stddeb, "EDIT_GetLineMsg: %d %d, len %d\n", (int)(WORD)(*buffer), (int)(WORD)(*(char *)buffer), len); - strncpy(buffer, cp, len); + lstrcpyn(buffer, cp, len); return (LONG)len; } diff --git a/controls/listbox.c b/controls/listbox.c index 0beca3e4fd3..d1b0df79207 100644 --- a/controls/listbox.c +++ b/controls/listbox.c @@ -759,7 +759,7 @@ static LONG LBCreate(HWND hwnd, WORD wParam, LONG lParam) CreateListBoxStruct(hwnd, ODT_LISTBOX, dwStyle, GetParent(hwnd)); lphl = ListBoxGetStorageHeader(hwnd); - dprintf_listbox(stddeb,"ListBox created: lphl = %p dwStyle = "NPFMT":"NPFMT"\n", + dprintf_listbox(stddeb,"ListBox created: lphl = %p dwStyle = %04x:%04x\n", lphl, HIWORD(dwStyle), LOWORD(dwStyle)); GetClientRect(hwnd,&rect); @@ -1431,7 +1431,7 @@ static LONG LBDeleteString(HWND hwnd, WORD wParam, LONG lParam) static LONG LBFindString(HWND hwnd, WORD wParam, LONG lParam) { LPHEADLIST lphl = ListBoxGetStorageHeader(hwnd); - return ListBoxFindString(lphl, wParam, lParam); + return ListBoxFindString(lphl, wParam, (SEGPTR)lParam); } /*********************************************************************** @@ -1600,7 +1600,7 @@ static LONG LBSelectString(HWND hwnd, WORD wParam, LONG lParam) LPHEADLIST lphl = ListBoxGetStorageHeader(hwnd); WORD wRet; - wRet = ListBoxFindString(lphl, wParam, lParam); + wRet = ListBoxFindString(lphl, wParam, (SEGPTR)lParam); /* XXX add functionality here */ diff --git a/controls/menu.c b/controls/menu.c index 41f5a8bc9bf..63f424d4d03 100644 --- a/controls/menu.c +++ b/controls/menu.c @@ -23,14 +23,10 @@ #include "win.h" #include "message.h" #include "graphics.h" +#include "resource.h" #include "stddebug.h" -/* #define DEBUG_MENU */ -/* #define DEBUG_MENUCALC */ -/* #define DEBUG_MENUSHORTCUT */ #include "debug.h" -#include "../rc/sysres.h" - /* Dimension of the menu bitmaps */ static WORD check_bitmap_width = 0, check_bitmap_height = 0; static WORD arrow_bitmap_width = 0, arrow_bitmap_height = 0; @@ -265,7 +261,7 @@ static void MENU_CalcItemSize( HDC hdc, LPMENUITEM lpitem, HWND hwndOwner, mistruct->itemData = (long int)lpitem->item_text; mistruct->itemHeight = 16; mistruct->itemWidth = 30; - SendMessage(hwndOwner,WM_MEASUREITEM,0,mistrsegp); + SendMessage(hwndOwner,WM_MEASUREITEM,0,(LPARAM)mistrsegp); lpitem->rect.bottom += mistruct->itemHeight; lpitem->rect.right += mistruct->itemWidth; dprintf_menu(stddeb,"DrawMenuItem: MeasureItem %04x %d:%d!\n", @@ -475,7 +471,7 @@ static void MENU_DrawMenuItem( HWND hwnd, HDC hdc, LPMENUITEM lpitem, distruct->hwndItem = hwnd; distruct->hDC = hdc; distruct->rcItem = lpitem->rect; - SendMessage(hwnd,WM_DRAWITEM,0,distrsegp); + SendMessage(hwnd,WM_DRAWITEM,0,(LPARAM)distrsegp); return; } if (menuBar && (lpitem->item_flags & MF_SEPARATOR)) return; @@ -633,7 +629,7 @@ UINT MENU_DrawMenuBar(HDC hDC, LPRECT lprect, HWND hwnd, BOOL suppress_draw) int i; WND *wndPtr = WIN_FindWndPtr( hwnd ); - lppop = (LPPOPUPMENU) USER_HEAP_LIN_ADDR( wndPtr->wIDmenu ); + lppop = (LPPOPUPMENU) USER_HEAP_LIN_ADDR( (HMENU)wndPtr->wIDmenu ); if (lppop == NULL || lprect == NULL) return SYSMETRICS_CYMENU; dprintf_menu(stddeb,"MENU_DrawMenuBar("NPFMT", %p, %p); !\n", hDC, lprect, lppop); @@ -1454,7 +1450,7 @@ void MENU_TrackKbdMenuBar( HWND hwnd, UINT wParam ) SendMessage( hwnd, WM_ENTERMENULOOP, 0, 0 ); SendMessage( hwnd, WM_INITMENU, wndPtr->wIDmenu, 0 ); /* Select first selectable item */ - MENU_SelectItem( hwnd, wndPtr->wIDmenu, NO_SELECTED_ITEM ); + MENU_SelectItem( hwnd, (HMENU)wndPtr->wIDmenu, NO_SELECTED_ITEM ); MENU_SelectNextItem( hwnd, (HMENU)wndPtr->wIDmenu ); MENU_TrackMenu( (HMENU)wndPtr->wIDmenu, TPM_LEFTALIGN | TPM_LEFTBUTTON, 0, 0, hwnd, NULL ); @@ -1672,7 +1668,7 @@ UINT GetMenuState(HMENU hMenu, UINT wItemID, UINT wFlags) /********************************************************************** * GetMenuItemCount [USER.263] */ -WORD GetMenuItemCount(HMENU hMenu) +INT GetMenuItemCount(HMENU hMenu) { LPPOPUPMENU menu; dprintf_menu(stddeb,"GetMenuItemCount("NPFMT");\n", hMenu); @@ -1724,7 +1720,7 @@ BOOL InsertMenu(HMENU hMenu, UINT nPos, UINT wFlags, UINT wItemID, LPSTR lpNewIt /* Find where to insert new item */ if ((wFlags & MF_BYPOSITION) && - ((nPos == (UINT)-1) || (nPos == GetMenuItemCount(hMenu)))) + ((nPos == (UINT)-1) || (nPos == (UINT)GetMenuItemCount(hMenu)))) { /* Special case: append to menu Some programs specify the menu length to do that */ @@ -1857,7 +1853,7 @@ BOOL DeleteMenu(HMENU hMenu, UINT nPos, UINT wFlags) { MENUITEM *item = MENU_FindItem( &hMenu, &nPos, wFlags ); if (!item) return FALSE; - if (item->item_flags & MF_POPUP) DestroyMenu( item->item_id ); + if (item->item_flags & MF_POPUP) DestroyMenu( (HMENU)item->item_id ); /* nPos is now the position of the item */ RemoveMenu( hMenu, nPos, wFlags | MF_BYPOSITION ); return TRUE; @@ -2093,7 +2089,7 @@ HMENU GetSubMenu(HMENU hMenu, short nPos) if ((UINT)nPos >= lppop->nItems) return 0; lpitem = (MENUITEM *) USER_HEAP_LIN_ADDR( lppop->hItems ); if (!(lpitem[nPos].item_flags & MF_POPUP)) return 0; - return lpitem[nPos].item_id; + return (HMENU)lpitem[nPos].item_id; } @@ -2190,9 +2186,12 @@ HMENU LoadMenuIndirect(LPSTR menu_template) HMENU CopySysMenu() { HMENU hMenu; + HGLOBAL handle; LPPOPUPMENU menu; - hMenu = LoadMenuIndirect( sysres_MENU_SYSMENU.bytes ); + if (!(handle = SYSRES_LoadResource( SYSRES_MENU_SYSMENU ))) return 0; + hMenu = LoadMenuIndirect( GlobalLock( handle ) ); + SYSRES_FreeResource( handle ); if(!hMenu) { dprintf_menu(stddeb,"No SYSMENU\n"); @@ -2230,17 +2229,18 @@ WORD * ParseMenuResource(WORD *first_item, int level, HMENU hMenu) AppendMenu(hMenu, popup_item->item_flags, (UINT)hSubMenu, popup_item->item_text); } - else { - MENUITEMTEMPLATE *normal_item = (MENUITEMTEMPLATE *) item; - next_item = (WORD *) (normal_item->item_text + - strlen(normal_item->item_text) + 1); - if (strlen(normal_item->item_text) == 0 && normal_item->item_id == 0) - normal_item->item_flags |= MF_SEPARATOR; - AppendMenu(hMenu, normal_item->item_flags, - normal_item->item_id, normal_item->item_text); - } - } - while (!(*item & MF_END)); + else + { + MENUITEMTEMPLATE *normal_item = (MENUITEMTEMPLATE *) item; + WORD flags = normal_item->item_flags; + next_item = (WORD *) (normal_item->item_text + + strlen(normal_item->item_text) + 1); + if (!normal_item->item_text[0] && !normal_item->item_id) + flags |= MF_SEPARATOR; /* FIXME: do this in InsertMenu? */ + AppendMenu( hMenu, flags, normal_item->item_id, + normal_item->item_text ); + } + } while (!(*item & MF_END)); return next_item; } diff --git a/debugger/Makefile.in b/debugger/Makefile.in index c91b01edbb1..3962061d6c2 100644 --- a/debugger/Makefile.in +++ b/debugger/Makefile.in @@ -25,6 +25,6 @@ lex.yy.c: debug.l $(LEX) -8 -I debug.l clean:: - rm -f y.tab.c y.tab.h lex.yy.c + $(RM) y.tab.c y.tab.h lex.yy.c ### Dependencies: diff --git a/debugger/dbg.y b/debugger/dbg.y index fbca65e53b9..0d9f94c0c77 100644 --- a/debugger/dbg.y +++ b/debugger/dbg.y @@ -235,6 +235,19 @@ void wine_debug( int signal, struct sigcontext_struct *regs ) if (newmode != dbg_mode) fprintf(stderr,"In %d bit mode.\n", dbg_mode = newmode); + if (signal != SIGTRAP) /* This is a real crash, dump some info */ + { + DEBUG_InfoRegisters(); + DEBUG_InfoStack(); + if (dbg_mode == 16) + { + LDT_Print( SELECTOR_TO_ENTRY(DS_reg(DEBUG_context)), 1 ); + if (ES_reg(DEBUG_context) != DS_reg(DEBUG_context)) + LDT_Print( SELECTOR_TO_ENTRY(ES_reg(DEBUG_context)), 1 ); + } + DEBUG_BackTrace(); + } + /* Show where we crashed */ DEBUG_PrintAddress( &addr, dbg_mode ); fprintf(stderr,": "); diff --git a/debugger/stack.c b/debugger/stack.c index be7fb9b1037..9b4e09fe8a4 100644 --- a/debugger/stack.c +++ b/debugger/stack.c @@ -40,13 +40,13 @@ void DEBUG_InfoStack(void) { /* 32-bit mode */ addr.seg = 0; addr.off = ESP_reg(DEBUG_context); - DEBUG_ExamineMemory( &addr, 10, 'x' ); + DEBUG_ExamineMemory( &addr, 24, 'x' ); } else /* 16-bit mode */ { addr.seg = SS_reg(DEBUG_context); addr.off = SP_reg(DEBUG_context); - DEBUG_ExamineMemory( &addr, 10, 'w' ); + DEBUG_ExamineMemory( &addr, 24, 'w' ); } fprintf(stderr,"\n"); } diff --git a/if1632/Makefile.in b/if1632/Makefile.in index 60ac9072797..b8926e20f89 100644 --- a/if1632/Makefile.in +++ b/if1632/Makefile.in @@ -1,5 +1,4 @@ TOPSRC = @top_srcdir@ -BUILD = $(TOPSRC)/tools/build MODULE = if1632 @@ -41,7 +40,7 @@ all: checkbuild $(MODULE).o $(SPEC16_FILES) $(SPEC32_FILES): $(BUILD) $(BUILD) checkbuild: - cd $(TOPSRC)/tools; $(MAKE) 'CC=$(CC)' 'CFLAGS=$(CFLAGS)' 'DEFS=$(DEFS)' 'LANG=$(LANG)' build + cd $(TOPSRC)/tools; $(SUBMAKE) build call16.S: $(TOPSRC)/include/callback.h $(BUILD) $(BUILD) -call16 `cat $(TOPSRC)/include/callback.h | grep "extern.*CallTo16_" | sed 's/.*CallTo16_\(.*\)(.*/\1/' | sort | uniq` > call16.S diff --git a/if1632/commdlg.spec b/if1632/commdlg.spec dissimilarity index 98% index 127e064119d..3f2e25c242f 100644 --- a/if1632/commdlg.spec +++ b/if1632/commdlg.spec @@ -1,29 +1,29 @@ -name commdlg -id 14 - - 1 pascal GETOPENFILENAME(ptr) GetOpenFileName - 2 pascal GETSAVEFILENAME(ptr) GetSaveFileName - 5 pascal CHOOSECOLOR(ptr) ChooseColor - 6 pascal FILEOPENDLGPROC(word word word long) FileOpenDlgProc - 7 pascal FILESAVEDLGPROC(word word word long) FileSaveDlgProc - 8 pascal COLORDLGPROC(word word word long) ColorDlgProc -# 9 pascal LOADALTERBITMAP exported, shared data - 11 pascal FINDTEXT(ptr) FindText - 12 pascal REPLACETEXT(ptr) ReplaceText - 13 pascal FINDTEXTDLGPROC(word word word long) FindTextDlgProc - 14 pascal REPLACETEXTDLGPROC(word word word long) ReplaceTextDlgProc - 15 stub ChooseFont -# 16 pascal FORMATCHARDLGPROC exported, shared data -# 18 pascal FONTSTYLEENUMPROC exported, shared data -# 19 pascal FONTFAMILYENUMPROC exported, shared data - 20 pascal PRINTDLG(ptr) PrintDlg - 21 pascal PRINTDLGPROC(word word word long) PrintDlgProc - 22 pascal PRINTSETUPDLGPROC(word word word long) PrintSetupDlgProc -# 23 pascal EDITINTEGERONLY exported, shared data -# 25 pascal WANTARROWS exported, shared data - 26 pascal COMMDLGEXTENDEDERROR() CommDlgExtendError - 27 pascal GETFILETITLE(ptr ptr word) GetFileTitle -# 28 pascal WEP exported, shared data -# 29 pascal DWLBSUBCLASS exported, shared data -# 30 pascal DWUPARROWHACK exported, shared data -# 31 pascal DWOKSUBCLASS exported, shared data +name commdlg +id 14 + +1 pascal16 GetOpenFileName(ptr) GetOpenFileName +2 pascal16 GetSaveFileName(ptr) GetSaveFileName +5 pascal16 ChooseColor(ptr) ChooseColor +6 pascal FileOpenDlgProc(word word word long) FileOpenDlgProc +7 pascal FileSaveDlgProc(word word word long) FileSaveDlgProc +8 pascal ColorDlgProc(word word word long) ColorDlgProc +#9 pascal LOADALTERBITMAP exported, shared data +11 pascal16 FindText(ptr) FindText +12 pascal16 ReplaceText(ptr) ReplaceText +13 pascal FindTextDlgProc(word word word long) FindTextDlgProc +14 pascal ReplaceTextDlgProc(word word word long) ReplaceTextDlgProc +15 stub ChooseFont +#16 pascal FORMATCHARDLGPROC exported, shared data +#18 pascal FONTSTYLEENUMPROC exported, shared data +#19 pascal FONTFAMILYENUMPROC exported, shared data +20 pascal16 PrintDlg(ptr) PrintDlg +21 pascal PrintDlgProc(word word word long) PrintDlgProc +22 pascal PrintSetupDlgProc(word word word long) PrintSetupDlgProc +#23 pascal EDITINTEGERONLY exported, shared data +#25 pascal WANTARROWS exported, shared data +26 pascal CommDlgExtendedError() CommDlgExtendedError +27 pascal16 GetFileTitle(ptr ptr word) GetFileTitle +#28 pascal WEP exported, shared data +#29 pascal DWLBSUBCLASS exported, shared data +#30 pascal DWUPARROWHACK exported, shared data +#31 pascal DWOKSUBCLASS exported, shared data diff --git a/if1632/kernel32.spec b/if1632/kernel32.spec index bb122a01686..e7d35234056 100644 --- a/if1632/kernel32.spec +++ b/if1632/kernel32.spec @@ -286,7 +286,7 @@ base 1 0282 stub GetSystemDirectoryA 0283 stub GetSystemDirectoryW 0284 stub GetSystemInfo -0285 stub GetSystemTime +0285 stdcall GetSystemTime(ptr) GetSystemTime 0286 stub GetSystemTimeAdjustment 0287 stub GetTapeParameters 0288 stub GetTapePosition @@ -525,7 +525,7 @@ base 1 0520 stub SetupComm 0521 stub ShowConsoleCursor 0522 stub SizeofResource -0523 stub Sleep +0523 stdcall Sleep(long) Sleep 0524 stub SleepEx 0525 stub SuspendThread 0526 stub SystemTimeToFileTime diff --git a/if1632/relay.c b/if1632/relay.c index df41747e415..6f6f7c89abc 100644 --- a/if1632/relay.c +++ b/if1632/relay.c @@ -173,8 +173,10 @@ void RELAY_DebugReturn( int func_type, int ret_val, int args32 ) struct dll_table_s *table; char *name; - if (*(DWORD *)PTR_SEG_TO_LIN(IF1632_Stack32_base) != 0xDEADBEEF) { + if (*(DWORD *)PTR_SEG_TO_LIN(IF1632_Stack32_base) != 0xDEADBEEF) + { fprintf(stderr, "Wine wrote past the end of the 32 bit stack. Please report this.\n"); + exit(1); /* There's probably no point in going on */ } if (!debugging_relay) return; @@ -186,13 +188,16 @@ void RELAY_DebugReturn( int func_type, int ret_val, int args32 ) switch(func_type) { case 0: /* long */ - printf( "retval=0x%08x ds=%04x\n", ret_val, frame->ds ); + printf( "retval=0x%08x ret=%04x:%04x ds=%04x\n", + ret_val, frame->cs, frame->ip, frame->ds ); break; case 1: /* word */ - printf( "retval=0x%04x ds=%04x\n", ret_val & 0xffff, frame->ds ); + printf( "retval=0x%04x ret=%04x:%04x ds=%04x\n", + ret_val & 0xffff, frame->cs, frame->ip, frame->ds ); break; case 2: /* regs */ - printf( "retval=none ds=%04x\n", frame->ds ); + printf( "retval=none ret=%04x:%04x ds=%04x\n", + frame->cs, frame->ip, frame->ds ); { struct sigcontext_struct *context = (struct sigcontext_struct *)&args32; printf( " AX=%04x BX=%04x CX=%04x DX=%04x SI=%04x DI=%04x ES=%04x EFL=%08lx\n", diff --git a/include/commdlg.h b/include/commdlg.h index dcc96b99fb3..f51e4b669e2 100644 --- a/include/commdlg.h +++ b/include/commdlg.h @@ -290,6 +290,15 @@ typedef DEVNAMES * LPDEVNAMES; #define FINDDLG 9 #define REPLACEDLG 10 +BOOL ChooseColor(LPCHOOSECOLOR lpChCol); +DWORD CommDlgExtendedError(void); +BOOL FindText(LPFINDREPLACE lpFind); +short GetFileTitle(LPCSTR lpFile, LPSTR lpTitle, UINT cbBuf); +BOOL GetOpenFileName(LPOPENFILENAME lpofn); +BOOL GetSaveFileName(LPOPENFILENAME lpofn); +BOOL PrintDlg(LPPRINTDLG lpPrint); +BOOL ReplaceText(LPFINDREPLACE lpFind); + LRESULT FileOpenDlgProc(HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam); LRESULT FileSaveDlgProc(HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam); LRESULT ColorDlgProc(HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam); diff --git a/include/global.h b/include/global.h index 6ea7b40a631..d1692bea681 100644 --- a/include/global.h +++ b/include/global.h @@ -16,7 +16,7 @@ typedef struct int shmid; } SHMDATA; -extern HGLOBAL GLOBAL_CreateBlock( WORD flags, void *ptr, DWORD size, +extern HGLOBAL GLOBAL_CreateBlock( WORD flags, const void *ptr, DWORD size, HGLOBAL hOwner, BOOL isCode, BOOL is32Bit, BOOL isReadOnly, SHMDATA *shmdata); diff --git a/include/kernel32.h b/include/kernel32.h index 501e8d8a55a..367a6399c19 100644 --- a/include/kernel32.h +++ b/include/kernel32.h @@ -56,16 +56,7 @@ typedef struct { HANDLE hStdError; } STARTUPINFO, *LPSTARTUPINFO; -typedef struct { - WORD wYear; - WORD wMonth; - WORD wDayOfWeek; - WORD wDay; - WORD wHour; - WORD wMinute; - WORD wSecond; - WORD wMilliseconds; -} SYSTEMTIME, *LPSYSTEMTIME; +/* SYSTEMTIME, and LPSYSTEMTIME moved to include/windows.h (JBP) */ typedef struct { LONG Bias; diff --git a/include/libres.h b/include/libres.h dissimilarity index 78% index 918f0426d9c..a719692f69e 100644 --- a/include/libres.h +++ b/include/libres.h @@ -1,24 +1,22 @@ -/* - * WINElib-Resources - */ -#ifndef __WINE_LIBRES_H -#define __WINE_LIBRES_H - -#ifdef WINELIB - -#include "windows.h" -#include "resource.h" - -void LIBRES_RegisterResources(struct resource** Res); - -INT LIBRES_AccessResource( HINSTANCE hModule, HRSRC hRsrc ); -HGLOBAL LIBRES_AllocResource( HINSTANCE hModule, HRSRC hRsrc, DWORD size ); -HRSRC LIBRES_FindResource( HINSTANCE hModule, LPCSTR name, LPCSTR type ); -BOOL LIBRES_FreeResource( HGLOBAL handle ); -HGLOBAL LIBRES_LoadResource( HINSTANCE hModule, HRSRC hRsrc ); -LPVOID LIBRES_LockResource( HGLOBAL handle ); -DWORD LIBRES_SizeofResource( HINSTANCE hModule, HRSRC hRsrc ); - -#endif /* WINELIB */ - -#endif +/* + * WINElib-Resources + */ +#ifndef __WINE_LIBRES_H +#define __WINE_LIBRES_H + +#ifdef WINELIB + +#include "wintypes.h" +#include "resource.h" + +extern INT LIBRES_AccessResource( HINSTANCE hModule, HRSRC hRsrc ); +extern HGLOBAL LIBRES_AllocResource( HINSTANCE hModule, HRSRC hRsrc, DWORD size ); +extern HRSRC LIBRES_FindResource( HINSTANCE hModule, LPCSTR name, LPCSTR type ); +extern BOOL LIBRES_FreeResource( HGLOBAL handle ); +extern HGLOBAL LIBRES_LoadResource( HINSTANCE hModule, HRSRC hRsrc ); +extern LPVOID LIBRES_LockResource( HGLOBAL handle ); +extern DWORD LIBRES_SizeofResource( HINSTANCE hModule, HRSRC hRsrc ); + +#endif /* WINELIB */ + +#endif diff --git a/include/message.h b/include/message.h index 8956faf6a5d..85159b0d960 100644 --- a/include/message.h +++ b/include/message.h @@ -23,7 +23,7 @@ typedef struct tagQMSG typedef struct tagMESSAGEQUEUE { - WORD next; /* 00 Next queue */ + HANDLE next; /* 00 Next queue */ HTASK hTask; /* 02 hTask owning the queue */ WORD msgSize; /* 04 Size of messages in the queue */ WORD msgCount; /* 06 Number of waiting messages */ diff --git a/include/module.h b/include/module.h index 5ab729f3bb1..3ca58cc4150 100644 --- a/include/module.h +++ b/include/module.h @@ -113,7 +113,7 @@ extern BOOL MODULE_Init(void); extern int MODULE_OpenFile( HMODULE hModule ); extern LPSTR MODULE_GetModuleName( HMODULE hModule ); extern WORD MODULE_GetOrdinal( HMODULE hModule, char *name ); -extern DWORD MODULE_GetEntryPoint( HMODULE hModule, WORD ordinal ); +extern SEGPTR MODULE_GetEntryPoint( HMODULE hModule, WORD ordinal ); extern BOOL MODULE_SetEntryPoint( HMODULE hModule, WORD ordinal, WORD offset ); extern LPSTR MODULE_GetEntryPointName( HMODULE hModule, WORD ordinal ); diff --git a/include/resource.h b/include/resource.h index 26d5897d23b..358a43e9c80 100644 --- a/include/resource.h +++ b/include/resource.h @@ -9,22 +9,33 @@ #include "wintypes.h" -extern int NE_AccessResource( HMODULE hModule, HRSRC hRsrc ); -extern BOOL NE_FreeResource( HMODULE hModule, HGLOBAL handle ); -extern HRSRC NE_FindResource( HMODULE hModule, SEGPTR typeId, SEGPTR resId ); -extern DWORD NE_SizeofResource( HMODULE hModule, HRSRC hRsrc ); -extern SEGPTR NE_LockResource( HMODULE hModule, HGLOBAL handle ); -extern HGLOBAL NE_AllocResource( HMODULE hModule, HRSRC hRsrc, DWORD size ); -extern HGLOBAL NE_LoadResource( HMODULE hModule, HRSRC hRsrc ); - struct resource { - int id,type; - char *name; - unsigned char* bytes; - unsigned size; + int id; + int type; + const char *name; + const unsigned char* bytes; + unsigned size; }; +/* Built-in resources */ +typedef enum +{ + SYSRES_MENU_SYSMENU, + SYSRES_DIALOG_MSGBOX, + SYSRES_DIALOG_SHELL_ABOUT_MSGBOX, + SYSRES_DIALOG_OPEN_FILE, + SYSRES_DIALOG_SAVE_FILE, + SYSRES_DIALOG_PRINT, + SYSRES_DIALOG_PRINT_SETUP, + SYSRES_DIALOG_CHOOSE_FONT, + SYSRES_DIALOG_CHOOSE_COLOR, + SYSRES_DIALOG_FIND_TEXT, + SYSRES_DIALOG_REPLACE_TEXT +} SYSTEM_RESOURCE; + +extern void LIBRES_RegisterResources(const struct resource* const * Res); + #if defined(__GNUC__) && (__GNUC__ == 2) && (__GNUC_MINOR__ >= 7) #define WINE_CONSTRUCTOR __attribute__((constructor)) #define HAVE_WINE_CONSTRUCTOR @@ -32,4 +43,15 @@ struct resource #define WINE_CONSTRUCTOR #endif +extern int NE_AccessResource( HMODULE hModule, HRSRC hRsrc ); +extern BOOL NE_FreeResource( HMODULE hModule, HGLOBAL handle ); +extern HRSRC NE_FindResource( HMODULE hModule, SEGPTR typeId, SEGPTR resId ); +extern DWORD NE_SizeofResource( HMODULE hModule, HRSRC hRsrc ); +extern SEGPTR NE_LockResource( HMODULE hModule, HGLOBAL handle ); +extern HGLOBAL NE_AllocResource( HMODULE hModule, HRSRC hRsrc, DWORD size ); +extern HGLOBAL NE_LoadResource( HMODULE hModule, HRSRC hRsrc ); + +extern HANDLE SYSRES_LoadResource( SYSTEM_RESOURCE id ); +extern void SYSRES_FreeResource( HANDLE handle ); + #endif /* __WINE_RESOURCE_H */ diff --git a/include/selectors.h b/include/selectors.h index 83a5309bc9f..d06f13df4c7 100644 --- a/include/selectors.h +++ b/include/selectors.h @@ -10,9 +10,10 @@ #include "windows.h" #include "ldt.h" -extern WORD SELECTOR_AllocBlock( void *base, DWORD size, enum seg_type type, - BOOL is32bit, BOOL readonly ); -extern WORD SELECTOR_ReallocBlock( WORD sel, void *base, DWORD size, +extern WORD SELECTOR_AllocBlock( const void *base, DWORD size, + enum seg_type type, BOOL is32bit, + BOOL readonly ); +extern WORD SELECTOR_ReallocBlock( WORD sel, const void *base, DWORD size, enum seg_type type, BOOL is32bit, BOOL readonly ); diff --git a/include/shell.h b/include/shell.h index 652f481d737..88ca4b1fbaa 100644 --- a/include/shell.h +++ b/include/shell.h @@ -7,15 +7,15 @@ extern void SHELL_LoadRegistry(); extern void SHELL_SaveRegistry(); extern BOOL SHELL_Init(); -#define ERROR_SUCCESS 0L -#define ERROR_BADDB 1L -#define ERROR_BADKEY 2L -#define ERROR_CANTOPEN 3L -#define ERROR_CANTREAD 4L -#define ERROR_CANTWRITE 5L -#define ERROR_OUTOFMEMORY 6L -#define ERROR_INVALID_PARAMETER 7L -#define ERROR_ACCESS_DENIED 8L +#define SHELL_ERROR_SUCCESS 0L +#define SHELL_ERROR_BADDB 1L +#define SHELL_ERROR_BADKEY 2L +#define SHELL_ERROR_CANTOPEN 3L +#define SHELL_ERROR_CANTREAD 4L +#define SHELL_ERROR_CANTWRITE 5L +#define SHELL_ERROR_OUTOFMEMORY 6L +#define SHELL_ERROR_INVALID_PARAMETER 7L +#define SHELL_ERROR_ACCESS_DENIED 8L #define REG_SZ 1 /* string type */ diff --git a/include/windows.h b/include/windows.h index e0430aa25cf..3934834a878 100644 --- a/include/windows.h +++ b/include/windows.h @@ -1104,7 +1104,11 @@ typedef OFSTRUCT *LPOFSTRUCT; #define ONE5STOPBITS 1 #define TWOSTOPBITS 2 #define IGNORE 0 +#ifdef WINELIB32 +#define INFINITE 0xFFFFFFFF +#else #define INFINITE 0xFFFF +#endif #define CE_RXOVER 0x0001 #define CE_OVERRUN 0x0002 @@ -2273,7 +2277,6 @@ typedef COMPAREITEMSTRUCT FAR* LPCOMPAREITEMSTRUCT; #define LMEM_ZEROINIT 0x0040 #define LMEM_MODIFY 0x0080 #define LMEM_DISCARDABLE 0x0F00 -#define LMEM_WINE_ALIGN 0x1000 #define GMEM_FIXED 0x0000 #define GMEM_MOVEABLE 0x0002 @@ -2510,6 +2513,18 @@ typedef struct #define DBF_APPLICATION 0x0008 #define DBF_DRIVER 0x0010 +/* Win32-specific structures */ + +typedef struct { + WORD wYear; + WORD wMonth; + WORD wDayOfWeek; + WORD wDay; + WORD wHour; + WORD wMinute; + WORD wSecond; + WORD wMilliseconds; +} SYSTEMTIME, *LPSYSTEMTIME; #ifndef WINELIB #pragma pack(4) @@ -2657,7 +2672,7 @@ BOOL EnumChildWindows(HWND,FARPROC,LONG); WORD EnumClipboardFormats(WORD); int EnumFonts(HDC,LPSTR,FARPROC,LPSTR); BOOL EnumMetaFile(HDC,LOCALHANDLE,FARPROC,BYTE*); -int EnumObjects(HDC,int,FARPROC,LPSTR); +int EnumObjects(HDC,int,FARPROC,LPARAM); int EnumProps(HWND,FARPROC); BOOL EnumTaskWindows(HANDLE,FARPROC,LONG); BOOL EnumWindows(FARPROC,LONG); @@ -2762,10 +2777,11 @@ int GetKeyState(int); void GetKeyboardState(BYTE*); int GetKeyboardType(int); HWND GetLastActivePopup(HWND); +VOID GetLocalTime(LPSYSTEMTIME); /* Win32 */ WORD GetMapMode(HDC); HMENU GetMenu(HWND); DWORD GetMenuCheckMarkDimensions(void); -WORD GetMenuItemCount(HMENU); +INT GetMenuItemCount(HMENU); UINT GetMenuItemID(HMENU,int); UINT GetMenuState(HMENU,UINT,UINT); int GetMenuString(HMENU,UINT,LPSTR,short,UINT); @@ -2815,6 +2831,7 @@ HMENU GetSystemMenu(HWND,BOOL); int GetSystemMetrics(WORD); WORD GetSystemPaletteEntries(HDC,WORD,WORD,LPPALETTEENTRY); WORD GetSystemPaletteUse(HDC); +VOID GetSystemTime(LPSYSTEMTIME); /* Win32 */ DWORD GetTabbedTextExtent(HDC,LPSTR,int,int,LPINT); HINSTANCE GetTaskDS(void); HGLOBAL GetTaskQueue(HTASK); @@ -3143,6 +3160,7 @@ void ShowOwnedPopups(HWND,BOOL); void ShowScrollBar(HWND,WORD,BOOL); BOOL ShowWindow(HWND,int); DWORD SizeofResource(HINSTANCE,HRSRC); +VOID Sleep(DWORD); /* Win32 */ int StartSound(void); int StopSound(void); BOOL StretchBlt(HDC,short,short,short,short,HDC,short,short,short,short,DWORD); diff --git a/include/winpos.h b/include/winpos.h index 56cabb7f780..8660036dd55 100644 --- a/include/winpos.h +++ b/include/winpos.h @@ -28,7 +28,7 @@ typedef struct extern void WINPOS_FindIconPos( HWND hwnd ); extern BOOL WINPOS_SetActiveWindow( HWND hWnd, BOOL fMouse, BOOL fChangeFocus); -extern HWND WINPOS_ChangeActiveWindow( HWND hwnd, BOOL mouseMsg ); +extern BOOL WINPOS_ChangeActiveWindow( HWND hwnd, BOOL mouseMsg ); extern LONG WINPOS_SendNCCalcSize( HWND hwnd, BOOL calcValidRect, RECT *newWindowRect, RECT *oldWindowRect, RECT *oldClientRect, WINDOWPOS *winpos, diff --git a/include/wintypes.h b/include/wintypes.h index 0d7689aced4..30ecb94bc7b 100644 --- a/include/wintypes.h +++ b/include/wintypes.h @@ -34,6 +34,7 @@ typedef void* NPVOID; typedef void* SEGPTR; #define UIFMT "%u" #define NPFMT "%p" +#define SPFMT "%p" #else typedef short INT; typedef unsigned short UINT; @@ -42,13 +43,15 @@ typedef WORD HANDLE; typedef WORD NPVOID; typedef DWORD SEGPTR; #define UIFMT "%hu" -#define NPFMT "%04X" +#define NPFMT "%04x" +#define SPFMT "%08lx" #endif typedef LONG LPARAM; typedef LONG LRESULT; typedef DWORD HHOOK; typedef char *LPSTR; typedef const char *LPCSTR; +typedef LPCSTR LPCTSTR; typedef char *NPSTR; typedef INT *LPINT; typedef UINT *LPUINT; diff --git a/library/Makefile.in b/library/Makefile.in new file mode 100644 index 00000000000..9e27caabe51 --- /dev/null +++ b/library/Makefile.in @@ -0,0 +1,17 @@ +TOPSRC = @top_srcdir@ +MODULE = library + +C_SRCS = \ + atom.c \ + arch.c \ + heap.c \ + libres.c \ + miscstubs.c \ + sup.c \ + winmain.c + +all: $(MODULE).o + +@MAKE_RULES@ + +### Dependencies: diff --git a/toolkit/README.libres b/library/README.libres similarity index 100% rename from toolkit/README.libres rename to library/README.libres diff --git a/toolkit/README.resources b/library/README.resources similarity index 100% rename from toolkit/README.resources rename to library/README.resources diff --git a/toolkit/arch.c b/library/arch.c similarity index 100% rename from toolkit/arch.c rename to library/arch.c diff --git a/toolkit/atom.c b/library/atom.c similarity index 100% rename from toolkit/atom.c rename to library/atom.c diff --git a/toolkit/heap.c b/library/heap.c similarity index 96% rename from toolkit/heap.c rename to library/heap.c index 7bb3afd6a98..6148c532430 100644 --- a/toolkit/heap.c +++ b/library/heap.c @@ -79,11 +79,8 @@ HANDLE LocalAlloc (WORD flags, WORD bytes) HANDLE hMem; slot = HEAP_GetFreeSlot (&hMem); - if (flags & LMEM_WINE_ALIGN) - m = memalign (4, bytes); - else - m = malloc (bytes); - if (m){ + if ((m = malloc (bytes))) + { *slot = m; if (flags & LMEM_ZEROINIT) bzero (m, bytes); @@ -221,11 +218,8 @@ HANDLE HEAP_Alloc (WORD flags, DWORD bytes) HeapData* m; bytes+=sizeof(HeapData); - if (flags & LMEM_WINE_ALIGN) - m = memalign (4, bytes); - else - m = malloc (bytes); - if (m){ + if ((m = malloc (bytes))) + { if (flags & LMEM_ZEROINIT) bzero (m, bytes); } diff --git a/toolkit/libres.c b/library/libres.c similarity index 89% rename from toolkit/libres.c rename to library/libres.c index ae23b415d90..5f4c5b52c5b 100644 --- a/toolkit/libres.c +++ b/library/libres.c @@ -7,29 +7,26 @@ #include #include #include "libres.h" +#include "windows.h" +#include "xmalloc.h" typedef struct RLE { - struct resource** Resources; /* NULL-terminated array of pointers */ - struct RLE* next; + const struct resource* const * Resources; /* NULL-terminated array of pointers */ + struct RLE* next; } ResListE; static ResListE* ResourceList=NULL; -void LIBRES_RegisterResources(struct resource** Res) +void LIBRES_RegisterResources(const struct resource* const * Res) { ResListE** Curr; ResListE* n; for(Curr=&ResourceList; *Curr; Curr=&((*Curr)->next)) { } n=xmalloc(sizeof(ResListE)); - if(n) - { - n->Resources=Res; - n->next=NULL; - *Curr=n; - } - else - fprintf(stderr,"LIBRES_RegisterResources(): Out of memory.\n"); + n->Resources=Res; + n->next=NULL; + *Curr=n; } /********************************************************************** @@ -39,7 +36,7 @@ HRSRC LIBRES_FindResource( HINSTANCE hModule, LPCSTR name, LPCSTR type ) { int nameid=0,typeid; ResListE* ResBlock; - struct resource** Res; + const struct resource* const * Res; if(HIWORD(name)) { diff --git a/toolkit/miscstubs.c b/library/miscstubs.c similarity index 98% rename from toolkit/miscstubs.c rename to library/miscstubs.c index edab69edf59..8f62d4ca15c 100644 --- a/toolkit/miscstubs.c +++ b/library/miscstubs.c @@ -109,13 +109,13 @@ HGLOBAL GLOBAL_Alloc( WORD flags, DWORD size, HGLOBAL hOwner, return handle; } -HGLOBAL GLOBAL_CreateBlock( WORD flags, void *ptr, DWORD size, +HGLOBAL GLOBAL_CreateBlock( WORD flags, const void *ptr, DWORD size, HGLOBAL hOwner, BOOL isCode, BOOL is32Bit, BOOL isReadOnly, SHMDATA *shmdata) { /* fprintf(stderr,"JBP: GLOBAL_CreateBlock() faked.\n");*/ - return ptr; + return (HGLOBAL)ptr; } BOOL GLOBAL_FreeBlock( HGLOBAL handle ) diff --git a/toolkit/sup.c b/library/sup.c similarity index 100% rename from toolkit/sup.c rename to library/sup.c diff --git a/toolkit/winmain.c b/library/winmain.c similarity index 100% rename from toolkit/winmain.c rename to library/winmain.c diff --git a/libtest/Makefile.in b/libtest/Makefile.in new file mode 100644 index 00000000000..23e4a667fc1 --- /dev/null +++ b/libtest/Makefile.in @@ -0,0 +1,34 @@ +TOPSRC = @top_srcdir@ +MODULE = none +PROGRAMS = hello hello2 hello3 rolex +ALL_LIBS = $(WINELIB) $(X_LIBS) $(XPM_LIB) $(XLIB) $(LDLIBS) + +C_SRCS = \ + hello.c \ + hello2.c \ + hello3.c \ + hello3res.c \ + rolex.c + +all: check_winerc $(PROGRAMS) + +@MAKE_RULES@ + +hello: hello.o $(WINELIB) + $(CC) -o hello hello.o $(LDOPTIONS) $(ALL_LIBS) + +hello2: hello2.o $(WINELIB) + $(CC) -o hello2 hello2.o $(LDOPTIONS) $(ALL_LIBS) + +hello3: hello3res.o hello3.o $(WINELIB) + $(CC) -o hello3 hello3.o hello3res.o $(LDOPTIONS) $(ALL_LIBS) + +rolex: rolex.o $(WINELIB) + $(CC) -o rolex rolex.o $(LDOPTIONS) $(ALL_LIBS) + +clean:: + $(RM) hello hello2 hello3 hello3res.c hello3res.h rolex + +hello3res.c hello3res.h: $(WINERC) + +### Dependencies: diff --git a/libtest/README.rolex b/libtest/README.rolex new file mode 100644 index 00000000000..a481683285c --- /dev/null +++ b/libtest/README.rolex @@ -0,0 +1,8 @@ +Windows clock application for WINE (by Jim Peterson) + +This is a translation of a Turbo Pascal OWL application I made once, +so it's a little flaky (tons of globals, functions that could have +been in-lined, etc.). The file rolex.exe is a Win32 application +compiled using this source code and Borland C++ 4.0. + +To try it out, type 'make rolex' or 'wine ./rolex.exe' (which fails). diff --git a/toolkit/hello.c b/libtest/hello.c similarity index 100% rename from toolkit/hello.c rename to libtest/hello.c diff --git a/toolkit/hello2.c b/libtest/hello2.c similarity index 100% rename from toolkit/hello2.c rename to libtest/hello2.c diff --git a/toolkit/hello3.c b/libtest/hello3.c similarity index 92% rename from toolkit/hello3.c rename to libtest/hello3.c index 5b9cd5118ed..fe532cb7b58 100644 --- a/toolkit/hello3.c +++ b/libtest/hello3.c @@ -33,12 +33,12 @@ LRESULT WndProc (HWND wnd, UINT msg, WPARAM w, LPARAM l) case WM_COMMAND: switch(w){ case 100: - CreateDialogIndirect(0,hello3_DIALOG_DIADEMO.bytes,wnd,(WNDPROC)DlgProc); + CreateDialogIndirect(0,hello3res_DIALOG_DIADEMO.bytes,wnd,(WNDPROC)DlgProc); return 0; case 101: { - BITMAPINFO *bm=hello3_BITMAP_BITDEMO.bytes; - char *bits=bm; + BITMAPINFO *bm=(BITMAPINFO*)hello3res_BITMAP_BITDEMO.bytes; + char *bits=(char*)bm; HDC hdc=GetDC(wnd); bits+=bm->bmiHeader.biSize; bits+=(1<bmiHeader.biBitCount)*sizeof(RGBQUAD); diff --git a/toolkit/hello3res.rc b/libtest/hello3res.rc similarity index 100% rename from toolkit/hello3res.rc rename to libtest/hello3res.rc diff --git a/libtest/rolex.c b/libtest/rolex.c new file mode 100644 index 00000000000..fc71f796952 --- /dev/null +++ b/libtest/rolex.c @@ -0,0 +1,241 @@ +#include +#include +#include "windows.h" + +char* AppName = "Rolex"; +char* WindowName = "Rolex"; +int WindowWidth = 100; +int WindowHeight = 121; +COLORREF FaceColor = RGB(192,192,192); +COLORREF HandColor = RGB(0,0,0); +COLORREF EtchColor = RGB(0,0,0); + +float Pi=3.1415926; + +typedef struct +{ + int StartX,StartY,EndX,EndY; +} HandData; + +int MaxX,MaxY; +HandData OldSecond,OldHour,OldMinute; + +HWND HWindow; + +void DrawFace(HDC dc) +{ + int MidX, MidY, t; + + MidX=MaxX/2; + MidY=MaxY/2; + SelectObject(dc,CreateSolidBrush(FaceColor)); + SelectObject(dc,CreatePen(PS_SOLID,1,EtchColor)); + Ellipse(dc,0,0,MaxX,MaxY); + + for(t=0; t<12; t++) + { + MoveToEx(dc,MidX+sin(t*Pi/6)*0.9*MidX,MidY-cos(t*Pi/6)*0.9*MidY,NULL); + LineTo(dc,MidX+sin(t*Pi/6)*0.8*MidX,MidY-cos(t*Pi/6)*0.8*MidY); + } + if(MaxX>64 && MaxY>64) + for(t=0; t<60; t++) + SetPixel(dc,MidX+sin(t*Pi/30)*0.9*MidX,MidY-cos(t*Pi/30)*0.9*MidY + ,EtchColor); + DeleteObject(SelectObject(dc,GetStockObject(NULL_BRUSH))); + DeleteObject(SelectObject(dc,GetStockObject(NULL_PEN))); + memset(&OldSecond,0,sizeof(OldSecond)); + memset(&OldMinute,0,sizeof(OldMinute)); + memset(&OldHour,0,sizeof(OldHour)); +} + +void DrawHourHand(HDC dc) +{ + MoveToEx(dc, OldHour.StartX, OldHour.StartY, NULL); + LineTo(dc, OldHour.EndX, OldHour.EndY); +} + +void DrawMinuteHand(HDC dc) +{ + MoveToEx(dc, OldMinute.StartX, OldMinute.StartY, NULL); + LineTo(dc, OldMinute.EndX, OldMinute.EndY); +} + +void DrawSecondHand(HDC dc) +{ + MoveToEx(dc, OldSecond.StartX, OldSecond.StartY, NULL); + LineTo(dc, OldSecond.EndX, OldSecond.EndY); +} + +BOOL UpdateHourHand(HDC dc,int MidX,int MidY,int XExt,int YExt,WORD Pos) +{ + int Sx, Sy, Ex, Ey; + BOOL rv; + + rv = FALSE; + Sx = MidX; Sy = MidY; + Ex = MidX+sin(Pos*Pi/6000)*XExt; + Ey = MidY-cos(Pos*Pi/6000)*YExt; + rv = ( Sx!=OldHour.StartX || Ex!=OldHour.EndX || + Sy!=OldHour.StartY || Ey!=OldHour.EndY ); + if(rv)DrawHourHand(dc); + OldHour.StartX = Sx; OldHour.EndX = Ex; + OldHour.StartY = Sy; OldHour.EndY = Ey; + return rv; +} + +BOOL UpdateMinuteHand(HDC dc,int MidX,int MidY,int XExt,int YExt,WORD Pos) +{ + int Sx, Sy, Ex, Ey; + BOOL rv; + + rv = FALSE; + Sx = MidX; Sy = MidY; + Ex = MidX+sin(Pos*Pi/30000)*XExt; + Ey = MidY-cos(Pos*Pi/30000)*YExt; + rv = ( Sx!=OldMinute.StartX || Ex!=OldMinute.EndX || + Sy!=OldMinute.StartY || Ey!=OldMinute.EndY ); + if(rv)DrawMinuteHand(dc); + OldMinute.StartX = Sx; OldMinute.EndX = Ex; + OldMinute.StartY = Sy; OldMinute.EndY = Ey; + return rv; +} + +BOOL UpdateSecondHand(HDC dc,int MidX,int MidY,int XExt,int YExt,WORD Pos) +{ + int Sx, Sy, Ex, Ey; + BOOL rv; + + rv = FALSE; + Sx = MidX; Sy = MidY; + Ex = MidX+sin(Pos*Pi/3000)*XExt; + Ey = MidY-cos(Pos*Pi/3000)*YExt; + rv = ( Sx!=OldSecond.StartX || Ex!=OldSecond.EndX || + Sy!=OldSecond.StartY || Ey!=OldSecond.EndY ); + if(rv)DrawSecondHand(dc); + OldSecond.StartX = Sx; OldSecond.EndX = Ex; + OldSecond.StartY = Sy; OldSecond.EndY = Ey; + return rv; +} + +void Idle(HDC idc) +{ + SYSTEMTIME st; + WORD H, M, S, F; + int MidX, MidY; + HDC dc; + BOOL Redraw; + + if(idc) + dc=idc; + else + dc=GetDC(HWindow); + if(!dc)return; + + GetLocalTime(&st); + H = st.wHour; + M = st.wMinute; + S = st.wSecond; + F = st.wMilliseconds / 10; + F = F + S*100; + M = M*1000+F/6; + H = H*1000+M/60; + MidX = MaxX/2; + MidY = MaxY/2; + SelectObject(dc,CreatePen(PS_SOLID,1,FaceColor)); + Redraw = FALSE; + if(UpdateHourHand(dc,MidX,MidY,MidX*0.5,MidY*0.5,H)) Redraw = TRUE; + if(UpdateMinuteHand(dc,MidX,MidY,MidX*0.65,MidY*0.65,M)) Redraw = TRUE; + if(UpdateSecondHand(dc,MidX,MidY,MidX*0.79,MidY*0.79,F)) Redraw = TRUE; + DeleteObject(SelectObject(dc,CreatePen(PS_SOLID,1,HandColor))); + if(Redraw) + { + DrawSecondHand(dc); + DrawMinuteHand(dc); + DrawHourHand(dc); + } + DeleteObject(SelectObject(dc,GetStockObject(NULL_PEN))); + if(!idc) ReleaseDC(HWindow,dc); +} + +LRESULT ProcessAppMsg(HWND wnd,UINT msg,WPARAM w,LPARAM l) +{ + PAINTSTRUCT PaintInfo; + HDC dc; + + switch(msg) + { + case WM_PAINT: + if(GetUpdateRect(wnd,NULL,FALSE)) + { + dc=BeginPaint(wnd,&PaintInfo); + DrawFace(dc); + Idle(dc); + EndPaint(wnd,&PaintInfo); + } + break; + + case WM_SIZE: + MaxX = LOWORD(l); + MaxY = HIWORD(l); + break; + + case WM_DESTROY: + PostQuitMessage (0); + break; + + default: + return DefWindowProc (wnd, msg, w, l); + } + return 0l; +} + +WPARAM MessageLoop() +{ + MSG msg; + + while(1) + { + Sleep(1); /* sleep 1 millisecond */ + if(PeekMessage(&msg,0,0,0,PM_REMOVE)) + { + if(msg.message == WM_QUIT) return msg.wParam; + TranslateMessage(&msg); + DispatchMessage(&msg); + } + else + Idle(NULL); + } +} + +int PASCAL WinMain (HANDLE inst, HANDLE prev, LPSTR cmdline, int show) +{ + WNDCLASS class; + if(!prev) + { + class.style = CS_HREDRAW | CS_VREDRAW; + class.lpfnWndProc = ProcessAppMsg; + class.cbClsExtra = 0; + class.cbWndExtra = 0; + class.hInstance = inst; + class.hIcon = 0; /* Draw my own icon */ + class.hCursor = LoadCursor (0, IDC_ARROW); + class.hbrBackground = (HBRUSH)(COLOR_BACKGROUND + 1); + class.lpszMenuName = 0; + class.lpszClassName = AppName; + } + if (!RegisterClass (&class)) return -1; + + HWindow=CreateWindowEx(WS_EX_TOPMOST,AppName,WindowName,WS_OVERLAPPEDWINDOW, + CW_USEDEFAULT,CW_USEDEFAULT,WindowWidth,WindowHeight, + 0,0,inst,0); + memset(&OldSecond,0,sizeof(OldSecond)); + memset(&OldMinute,0,sizeof(OldMinute)); + memset(&OldHour,0,sizeof(OldHour)); + MaxX = WindowWidth; + MaxY = WindowHeight; + + ShowWindow (HWindow, show); + UpdateWindow (HWindow); + + return MessageLoop(); +} diff --git a/loader/module.c b/loader/module.c index 1137f3dcd36..d46529dee6f 100644 --- a/loader/module.c +++ b/loader/module.c @@ -271,7 +271,9 @@ int MODULE_OpenFile( HMODULE hModule ) close( cachedfd ); hCachedModule = hModule; name = ((LOADEDFILEINFO*)((char*)pModule + pModule->fileinfo))->filename; - cachedfd = open( DOS_GetUnixFileName( name ), O_RDONLY ); + if ((cachedfd = open( DOS_GetUnixFileName( name ), O_RDONLY )) == -1) + fprintf( stderr, "MODULE_OpenFile: can't open file '%s' for module "NPFMT"\n", + name, hModule ); dprintf_module( stddeb, "MODULE_OpenFile: opened '%s' -> %d\n", name, cachedfd ); return cachedfd; @@ -457,7 +459,7 @@ HMODULE MODULE_LoadExeHeader( int fd, OFSTRUCT *ofs ) hModule = GlobalAlloc( GMEM_MOVEABLE | GMEM_ZEROINIT, size ); if (!hModule) return (HMODULE)11; /* invalid exe */ - FarSetOwner( hModule, hModule ); + FarSetOwner( hModule, (WORD)(DWORD)hModule ); pModule = (NE_MODULE *)GlobalLock( hModule ); memcpy( pModule, &ne_header, sizeof(NE_MODULE) ); pModule->count = 0; @@ -666,7 +668,7 @@ WORD MODULE_GetOrdinal( HMODULE hModule, char *name ) * * Return the entry point for a given ordinal. */ -DWORD MODULE_GetEntryPoint( HMODULE hModule, WORD ordinal ) +SEGPTR MODULE_GetEntryPoint( HMODULE hModule, WORD ordinal ) { NE_MODULE *pModule; WORD curOrdinal = 1; @@ -706,8 +708,8 @@ DWORD MODULE_GetEntryPoint( HMODULE hModule, WORD ordinal ) } if (sel == 0xfe) sel = 0xffff; /* constant entry */ - else sel = (WORD)NE_SEG_TABLE(pModule)[sel-1].selector; - return MAKELONG( offset, sel ); + else sel = (WORD)(DWORD)NE_SEG_TABLE(pModule)[sel-1].selector; + return (SEGPTR)MAKELONG( offset, sel ); } @@ -884,7 +886,7 @@ static void MODULE_FreeModule( HMODULE hModule ) /* Free the referenced modules */ - pModRef = NE_MODULE_TABLE( pModule ); + pModRef = (HMODULE*)NE_MODULE_TABLE( pModule ); for (i = 0; i < pModule->modref_count; i++, pModRef++) { FreeModule( *pModRef ); @@ -1268,7 +1270,11 @@ HANDLE WinExec( LPSTR lpCmdLine, WORD nCmdShow ) /* Now load the executable file */ +#ifdef WINELIB32 + params.hEnvironment = (HANDLE)GetDOSEnvironment(); +#else params.hEnvironment = (HANDLE)SELECTOROF( GetDOSEnvironment() ); +#endif params.cmdLine = (SEGPTR)WIN16_GlobalLock( cmdLineHandle ); params.showCmd = (SEGPTR)WIN16_GlobalLock( cmdShowHandle ); params.reserved = 0; @@ -1328,7 +1334,7 @@ FARPROC GetProcAddress( HANDLE hModule, SEGPTR name ) ret = MODULE_GetEntryPoint( hModule, ordinal ); - dprintf_module( stddeb, "GetProcAddress: returning %08lx\n", ret ); + dprintf_module( stddeb, "GetProcAddress: returning "SPFMT"\n", ret ); return (FARPROC)ret; } diff --git a/loader/ne_resource.c b/loader/ne_resource.c index 18fd1648354..caf1e0da997 100644 --- a/loader/ne_resource.c +++ b/loader/ne_resource.c @@ -57,7 +57,7 @@ static DWORD NE_FindNameTableId( HMODULE hModule, SEGPTR typeId, SEGPTR resId ) pTypeInfo->type_id, pNameInfo->id ); handle = LoadResource( hModule, (HANDLE)((int)pNameInfo - (int)pModule) ); - for(p = (WORD*)LockResource(handle); *p; p = (WORD *)((char*)p+*p)) + for(p = (WORD*)LockResource(handle); p && *p; p = (WORD *)((char*)p+*p)) { dprintf_resource( stddeb," type=%04x '%s' id=%04x '%s'\n", p[1], (char *)(p+3), p[2], diff --git a/loader/task.c b/loader/task.c index 345b9f796ba..e7f2835d3b9 100644 --- a/loader/task.c +++ b/loader/task.c @@ -311,6 +311,7 @@ static BOOL TASK_FreeThunk( HTASK hTask, SEGPTR thunk ) * 32-bit entry point for a new task. This function is responsible for * setting up the registers and jumping to the 16-bit entry point. */ +#ifndef WINELIB static void TASK_CallToStart(void) { int cs_reg, ds_reg, ip_reg; @@ -357,6 +358,7 @@ static void TASK_CallToStart(void) fprintf( stderr, "TASK_CallToStart: Main program returned!\n" ); TASK_KillCurrentTask( 1 ); } +#endif /*********************************************************************** @@ -747,7 +749,6 @@ void InitTask( struct sigcontext_struct context ) #ifndef WINELIB NE_InitializeDLLs( pTask->hModule ); -#endif /* Registers on return are: * ax 1 if OK, 0 on error @@ -764,6 +765,7 @@ void InitTask( struct sigcontext_struct context ) ESI_reg(&context) = (DWORD)pTask->hPrevInstance; EDI_reg(&context) = (DWORD)pTask->hInstance; ES_reg (&context) = (WORD)pTask->hPDB; +#endif /* Initialize the local heap */ if ( pModule->heap_size ) @@ -910,7 +912,7 @@ FARPROC MakeProcInstance( FARPROC func, HANDLE hInstance ) if (!thunkaddr) return (FARPROC)0; thunk = PTR_SEG_TO_LIN( thunkaddr ); - dprintf_task( stddeb, "MakeProcInstance(%08lx,"NPFMT"): got thunk %08lx\n", + dprintf_task( stddeb, "MakeProcInstance("SPFMT","NPFMT"): got thunk "SPFMT"\n", (SEGPTR)func, hInstance, (SEGPTR)thunkaddr ); *thunk++ = 0xb8; /* movw instance, %ax */ @@ -929,7 +931,7 @@ FARPROC MakeProcInstance( FARPROC func, HANDLE hInstance ) */ void FreeProcInstance( FARPROC func ) { - dprintf_task( stddeb, "FreeProcInstance(%08lx)\n", (SEGPTR)func ); + dprintf_task( stddeb, "FreeProcInstance("SPFMT")\n", (SEGPTR)func ); TASK_FreeThunk( hCurrentTask, (SEGPTR)func ); } diff --git a/memory/global.c b/memory/global.c index 0689c88faff..6d540a37462 100644 --- a/memory/global.c +++ b/memory/global.c @@ -88,7 +88,7 @@ void debug_handles() * * Create a global heap block for a fixed range of linear memory. */ -HGLOBAL GLOBAL_CreateBlock( WORD flags, void *ptr, DWORD size, +HGLOBAL GLOBAL_CreateBlock( WORD flags, const void *ptr, DWORD size, HGLOBAL hOwner, BOOL isCode, BOOL is32Bit, BOOL isReadOnly, SHMDATA *shmdata ) diff --git a/memory/selector.c b/memory/selector.c index 5b420035f68..d6c2db187df 100644 --- a/memory/selector.c +++ b/memory/selector.c @@ -98,7 +98,7 @@ WORD FreeSelector( WORD sel ) * * Set the LDT entries for an array of selectors. */ -static void SELECTOR_SetEntries( WORD sel, void *base, DWORD size, +static void SELECTOR_SetEntries( WORD sel, const void *base, DWORD size, enum seg_type type, BOOL is32bit, BOOL readonly ) { @@ -131,7 +131,7 @@ static void SELECTOR_SetEntries( WORD sel, void *base, DWORD size, * * Allocate selectors for a block of linear memory. */ -WORD SELECTOR_AllocBlock( void *base, DWORD size, enum seg_type type, +WORD SELECTOR_AllocBlock( const void *base, DWORD size, enum seg_type type, BOOL is32bit, BOOL readonly ) { WORD sel, count; @@ -149,7 +149,7 @@ WORD SELECTOR_AllocBlock( void *base, DWORD size, enum seg_type type, * * Change the size of a block of selectors. */ -WORD SELECTOR_ReallocBlock( WORD sel, void *base, DWORD size, +WORD SELECTOR_ReallocBlock( WORD sel, const void *base, DWORD size, enum seg_type type, BOOL is32bit, BOOL readonly ) { WORD i, oldcount, newcount; diff --git a/misc/Makefile.in b/misc/Makefile.in index f4c201ee481..d6374a565d4 100644 --- a/misc/Makefile.in +++ b/misc/Makefile.in @@ -31,13 +31,7 @@ C_SRCS = \ winsocket.c \ xmalloc.c -all: checkrc $(MODULE).o - -checkrc: dummy - cd $(TOPSRC)/rc; $(MAKE) 'CC=$(CC)' 'CFLAGS=$(CFLAGS)' 'DEFS=$(DEFS)' 'LANG=$(LANG)' - -langclean:: - $(RM) ole2nls.o +all: $(MODULE).o @MAKE_RULES@ diff --git a/misc/commdlg.c b/misc/commdlg.c index d6c881524af..d147dde9b3c 100644 --- a/misc/commdlg.c +++ b/misc/commdlg.c @@ -9,12 +9,11 @@ #include #include "win.h" #include "user.h" -#include "global.h" #include "message.h" #include "commdlg.h" #include "dlgs.h" #include "selectors.h" -#include "../rc/sysres.h" +#include "resource.h" #include "dos_fs.h" #include "stackframe.h" @@ -72,11 +71,7 @@ BOOL GetOpenFileName(LPOPENFILENAME lpofn) } hDlgTmpl = LoadResource( lpofn->hInstance, hResInfo ); } - else hDlgTmpl = GLOBAL_CreateBlock( GMEM_FIXED, - sysres_DIALOG_OPEN_FILE.bytes, - sysres_DIALOG_OPEN_FILE.size, - GetCurrentPDB(), FALSE, FALSE, - TRUE, NULL ); + else hDlgTmpl = SYSRES_LoadResource( SYSRES_DIALOG_OPEN_FILE ); if (!hDlgTmpl) { CommDlgLastError = CDERR_LOADRESFAILURE; @@ -91,7 +86,7 @@ BOOL GetOpenFileName(LPOPENFILENAME lpofn) if (!(lpofn->Flags & OFN_ENABLETEMPLATEHANDLE)) { if (lpofn->Flags & OFN_ENABLETEMPLATE) FreeResource( hDlgTmpl ); - else GLOBAL_FreeBlock( hDlgTmpl ); + else SYSRES_FreeResource( hDlgTmpl ); } printf("GetOpenFileName // return lpstrFile='%s' !\n", @@ -123,12 +118,7 @@ BOOL GetSaveFileName(LPOPENFILENAME lpofn) } hDlgTmpl = LoadResource( lpofn->hInstance, hResInfo ); } - else hDlgTmpl = GLOBAL_CreateBlock( GMEM_FIXED, - sysres_DIALOG_SAVE_FILE.bytes, - sysres_DIALOG_SAVE_FILE.size, - GetCurrentPDB(), FALSE, FALSE, - TRUE, NULL ); - + else hDlgTmpl = SYSRES_LoadResource( SYSRES_DIALOG_SAVE_FILE ); hInst = WIN_GetWindowInstance( lpofn->hwndOwner ); bRet = DialogBoxIndirectParam( hInst, hDlgTmpl, lpofn->hwndOwner, @@ -137,7 +127,7 @@ BOOL GetSaveFileName(LPOPENFILENAME lpofn) if (!(lpofn->Flags & OFN_ENABLETEMPLATEHANDLE)) { if (lpofn->Flags & OFN_ENABLETEMPLATE) FreeResource( hDlgTmpl ); - else GLOBAL_FreeBlock( hDlgTmpl ); + else SYSRES_FreeResource( hDlgTmpl ); } printf( "GetSaveFileName // return lpstrFile='%s' !\n", @@ -153,7 +143,7 @@ static void FILEDLG_StripEditControl(HWND hwnd) { char temp[512], *cp; - SendDlgItemMessage(hwnd, edt1, WM_GETTEXT, 511, MAKE_SEGPTR(temp)); + SendDlgItemMessage(hwnd, edt1, WM_GETTEXT, 511, (LPARAM)MAKE_SEGPTR(temp)); cp = strrchr(temp, '\\'); if (cp != NULL) { strcpy(temp, cp+1); @@ -172,7 +162,7 @@ static BOOL FILEDLG_ScanDir(HWND hWnd, LPSTR newPath) char str[512],str2[512]; strncpy(str,newPath,511); str[511]=0; - SendDlgItemMessage(hWnd, edt1, WM_GETTEXT, 511, MAKE_SEGPTR(str2)); + SendDlgItemMessage(hWnd, edt1, WM_GETTEXT, 511, (LPARAM)MAKE_SEGPTR(str2)); strncat(str,str2,511-strlen(str)); str[511]=0; if (!DlgDirList(hWnd, str, lst1, 0, 0x0000)) return FALSE; DlgDirList(hWnd, "*.*", lst2, stc1, 0x8010); @@ -225,7 +215,7 @@ static LONG FILEDLG_WMDrawItem(HWND hWnd, WPARAM wParam, LPARAM lParam) SelectObject(lpdis->hDC, hBrush); FillRect(lpdis->hDC, &lpdis->rcItem, hBrush); SendMessage(lpdis->hwndItem, LB_GETTEXT, lpdis->itemID, - MAKE_SEGPTR(str)); + (LPARAM)MAKE_SEGPTR(str)); TextOut(lpdis->hDC, lpdis->rcItem.left, lpdis->rcItem.top, str, strlen(str)); if (lpdis->itemState != 0) { @@ -239,7 +229,7 @@ static LONG FILEDLG_WMDrawItem(HWND hWnd, WPARAM wParam, LPARAM lParam) SelectObject(lpdis->hDC, hBrush); FillRect(lpdis->hDC, &lpdis->rcItem, hBrush); SendMessage(lpdis->hwndItem, LB_GETTEXT, lpdis->itemID, - MAKE_SEGPTR(str)); + (LPARAM)MAKE_SEGPTR(str)); hBitmap = hFolder; GetObject(hBitmap, sizeof(BITMAP), (LPSTR)&bm); @@ -261,7 +251,7 @@ static LONG FILEDLG_WMDrawItem(HWND hWnd, WPARAM wParam, LPARAM lParam) SelectObject(lpdis->hDC, hBrush); FillRect(lpdis->hDC, &lpdis->rcItem, hBrush); SendMessage(lpdis->hwndItem, CB_GETLBTEXT, lpdis->itemID, - MAKE_SEGPTR(str)); + (LPARAM)MAKE_SEGPTR(str)); switch(str[2]) { case 'a': case 'b': hBitmap = hFloppy; @@ -323,7 +313,7 @@ static LONG FILEDLG_WMInitDialog(HWND hWnd, WPARAM wParam, LPARAM lParam) n = strlen(pstr); strncpy(tmpstr, pstr, 511); tmpstr[511]=0; printf("lpstrCustomFilter // add tmpstr='%s' ", tmpstr); - SendDlgItemMessage(hWnd, cmb1, CB_ADDSTRING, 0, MAKE_SEGPTR(tmpstr)); + SendDlgItemMessage(hWnd, cmb1, CB_ADDSTRING, 0, (LPARAM)MAKE_SEGPTR(tmpstr)); pstr += n + 1; n = strlen(pstr); printf("associated to '%s'\n", pstr); @@ -337,7 +327,7 @@ static LONG FILEDLG_WMInitDialog(HWND hWnd, WPARAM wParam, LPARAM lParam) n = strlen(pstr); strncpy(tmpstr, pstr, 511); tmpstr[511]=0; printf("lpstrFilter // add tmpstr='%s' ", tmpstr); - SendDlgItemMessage(hWnd, cmb1, CB_ADDSTRING, 0, MAKE_SEGPTR(tmpstr)); + SendDlgItemMessage(hWnd, cmb1, CB_ADDSTRING, 0, (LPARAM)MAKE_SEGPTR(tmpstr)); pstr += n + 1; n = strlen(pstr); printf("associated to '%s'\n", pstr); @@ -352,7 +342,7 @@ static LONG FILEDLG_WMInitDialog(HWND hWnd, WPARAM wParam, LPARAM lParam) tmpstr[511]=0; printf("nFilterIndex = %ld // SetText of edt1 to '%s'\n", lpofn->nFilterIndex, tmpstr); - SendDlgItemMessage(hWnd, edt1, WM_SETTEXT, 0, MAKE_SEGPTR(tmpstr)); + SendDlgItemMessage(hWnd, edt1, WM_SETTEXT, 0, (LPARAM)MAKE_SEGPTR(tmpstr)); /* get drive list */ *tmpstr = 0; DlgDirListComboBox(hWnd, MAKE_SEGPTR(tmpstr), cmb2, 0, 0xC000); @@ -399,8 +389,8 @@ static LRESULT FILEDLG_WMCommand(HWND hWnd, WPARAM wParam, LPARAM lParam) lRet = SendDlgItemMessage(hWnd, lst1, LB_GETCURSEL, 0, 0); if (lRet == LB_ERR) return TRUE; SendDlgItemMessage(hWnd, lst1, LB_GETTEXT, lRet, - MAKE_SEGPTR(tmpstr)); - SendDlgItemMessage(hWnd, edt1, WM_SETTEXT, 0, MAKE_SEGPTR(tmpstr)); + (LPARAM)MAKE_SEGPTR(tmpstr)); + SendDlgItemMessage(hWnd, edt1, WM_SETTEXT, 0, (LPARAM)MAKE_SEGPTR(tmpstr)); return TRUE; case lst2: /* directory list */ FILEDLG_StripEditControl(hWnd); @@ -409,7 +399,7 @@ static LRESULT FILEDLG_WMCommand(HWND hWnd, WPARAM wParam, LPARAM lParam) lRet = SendDlgItemMessage(hWnd, lst2, LB_GETCURSEL, 0, 0); if (lRet == LB_ERR) return TRUE; SendDlgItemMessage(hWnd, lst2, LB_GETTEXT, lRet, - MAKE_SEGPTR(tmpstr)); + (LPARAM)MAKE_SEGPTR(tmpstr)); if (tmpstr[0] == '[') { tmpstr[strlen(tmpstr) - 1] = 0; @@ -430,7 +420,7 @@ static LRESULT FILEDLG_WMCommand(HWND hWnd, WPARAM wParam, LPARAM lParam) FILEDLG_StripEditControl(hWnd); lRet = SendDlgItemMessage(hWnd, cmb2, CB_GETCURSEL, 0, 0L); if (lRet == LB_ERR) return 0; - SendDlgItemMessage(hWnd, cmb2, CB_GETLBTEXT, lRet, MAKE_SEGPTR(tmpstr)); + SendDlgItemMessage(hWnd, cmb2, CB_GETLBTEXT, lRet, (LPARAM)MAKE_SEGPTR(tmpstr)); sprintf(tmpstr, "%c:", tmpstr[2]); reset_scan: lRet = SendDlgItemMessage(hWnd, cmb1, CB_GETCURSEL, 0, 0); @@ -440,7 +430,7 @@ static LRESULT FILEDLG_WMCommand(HWND hWnd, WPARAM wParam, LPARAM lParam) PTR_SEG_TO_LIN(lpofn->lpstrFilter), lRet); strncpy(tmpstr2, pstr, 511); tmpstr2[511]=0; - SendDlgItemMessage(hWnd, edt1, WM_SETTEXT, 0, MAKE_SEGPTR(tmpstr2)); + SendDlgItemMessage(hWnd, edt1, WM_SETTEXT, 0, (LPARAM)MAKE_SEGPTR(tmpstr2)); FILEDLG_ScanDir(hWnd, tmpstr); return TRUE; case chx1: @@ -449,7 +439,7 @@ static LRESULT FILEDLG_WMCommand(HWND hWnd, WPARAM wParam, LPARAM lParam) return TRUE; case IDOK: almost_ok: - SendDlgItemMessage(hWnd, edt1, WM_GETTEXT, 511, MAKE_SEGPTR(tmpstr)); + SendDlgItemMessage(hWnd, edt1, WM_GETTEXT, 511, (LPARAM)MAKE_SEGPTR(tmpstr)); pstr = strrchr(tmpstr, '\\'); if (pstr == NULL) pstr = strrchr(tmpstr, ':'); @@ -467,7 +457,7 @@ static LRESULT FILEDLG_WMCommand(HWND hWnd, WPARAM wParam, LPARAM lParam) *tmpstr=0; } printf("commdlg: %s, %s\n", tmpstr, tmpstr2); - SendDlgItemMessage(hWnd, edt1, WM_SETTEXT, 0, MAKE_SEGPTR(tmpstr2)); + SendDlgItemMessage(hWnd, edt1, WM_SETTEXT, 0, (LPARAM)MAKE_SEGPTR(tmpstr2)); FILEDLG_ScanDir(hWnd, tmpstr); return TRUE; } @@ -485,7 +475,7 @@ static LRESULT FILEDLG_WMCommand(HWND hWnd, WPARAM wParam, LPARAM lParam) PTR_SEG_TO_LIN(lpofn->lpstrFilter), lRet), 511); tmpstr2[511]=0; - SendDlgItemMessage(hWnd, edt1, WM_SETTEXT, 0, MAKE_SEGPTR(tmpstr2)); + SendDlgItemMessage(hWnd, edt1, WM_SETTEXT, 0, (LPARAM)MAKE_SEGPTR(tmpstr2)); /* if ScanDir succeeds, we have changed the directory */ if (FILEDLG_ScanDir(hWnd, tmpstr)) return TRUE; /* if not, this must be a filename */ @@ -495,13 +485,13 @@ static LRESULT FILEDLG_WMCommand(HWND hWnd, WPARAM wParam, LPARAM lParam) /* strip off the pathname */ *pstr = 0; strncpy(tmpstr2, pstr+1, 511); tmpstr2[511]=0; - SendDlgItemMessage(hWnd, edt1, WM_SETTEXT, 0, MAKE_SEGPTR(tmpstr2)); + SendDlgItemMessage(hWnd, edt1, WM_SETTEXT, 0, (LPARAM)MAKE_SEGPTR(tmpstr2)); /* Should we MessageBox() if this fails? */ if (!FILEDLG_ScanDir(hWnd, tmpstr)) return TRUE; strcpy(tmpstr, tmpstr2); } else - SendDlgItemMessage(hWnd, edt1, WM_SETTEXT, 0, MAKE_SEGPTR(tmpstr)); + SendDlgItemMessage(hWnd, edt1, WM_SETTEXT, 0, (LPARAM)MAKE_SEGPTR(tmpstr)); ShowWindow(hWnd, SW_HIDE); { int drive; @@ -527,7 +517,7 @@ static LRESULT FILEDLG_WMCommand(HWND hWnd, WPARAM wParam, LPARAM lParam) { lRet = SendDlgItemMessage(hWnd, lst1, LB_GETCURSEL, 0, 0); SendDlgItemMessage(hWnd, lst1, LB_GETTEXT, lRet, - MAKE_SEGPTR(tmpstr)); + (LPARAM)MAKE_SEGPTR(tmpstr)); printf("strcpy'ing '%s'\n",tmpstr); fflush(stdout); strcpy(PTR_SEG_TO_LIN(lpofn->lpstrFileTitle), tmpstr); } @@ -621,14 +611,12 @@ BOOL ChooseColor(LPCHOOSECOLOR lpChCol) HANDLE hInst, hDlgTmpl; BOOL bRet; - hDlgTmpl = GLOBAL_CreateBlock(GMEM_FIXED, sysres_DIALOG_CHOOSE_COLOR.bytes, - sysres_DIALOG_CHOOSE_COLOR.size, - GetCurrentPDB(), FALSE, FALSE, TRUE, NULL ); + hDlgTmpl = SYSRES_LoadResource( SYSRES_DIALOG_CHOOSE_COLOR ); hInst = WIN_GetWindowInstance( lpChCol->hwndOwner ); bRet = DialogBoxIndirectParam( hInst, hDlgTmpl, lpChCol->hwndOwner, GetWndProcEntry16("ColorDlgProc"), (DWORD)lpChCol ); - GLOBAL_FreeBlock( hDlgTmpl ); + SYSRES_FreeResource( hDlgTmpl ); return bRet; } @@ -668,14 +656,12 @@ BOOL FindText(LPFINDREPLACE lpFind) HANDLE hInst, hDlgTmpl; BOOL bRet; - hDlgTmpl = GLOBAL_CreateBlock(GMEM_FIXED, sysres_DIALOG_FIND_TEXT.bytes, - sysres_DIALOG_FIND_TEXT.size, - GetCurrentPDB(), FALSE, FALSE, TRUE, NULL ); + hDlgTmpl = SYSRES_LoadResource( SYSRES_DIALOG_FIND_TEXT ); hInst = WIN_GetWindowInstance( lpFind->hwndOwner ); bRet = DialogBoxIndirectParam( hInst, hDlgTmpl, lpFind->hwndOwner, GetWndProcEntry16("FindTextDlgProc"), (DWORD)lpFind ); - GLOBAL_FreeBlock( hDlgTmpl ); + SYSRES_FreeResource( hDlgTmpl ); return bRet; } @@ -688,14 +674,12 @@ BOOL ReplaceText(LPFINDREPLACE lpFind) HANDLE hInst, hDlgTmpl; BOOL bRet; - hDlgTmpl = GLOBAL_CreateBlock(GMEM_FIXED, sysres_DIALOG_REPLACE_TEXT.bytes, - sysres_DIALOG_REPLACE_TEXT.size, - GetCurrentPDB(), FALSE, FALSE, TRUE, NULL ); + hDlgTmpl = SYSRES_LoadResource( SYSRES_DIALOG_REPLACE_TEXT ); hInst = WIN_GetWindowInstance( lpFind->hwndOwner ); bRet = DialogBoxIndirectParam( hInst, hDlgTmpl, lpFind->hwndOwner, GetWndProcEntry16("ReplaceTextDlgProc"), (DWORD)lpFind ); - GLOBAL_FreeBlock( hDlgTmpl ); + SYSRES_FreeResource( hDlgTmpl ); return bRet; } @@ -769,16 +753,9 @@ BOOL PrintDlg(LPPRINTDLG lpPrint) return TRUE; if (lpPrint->Flags & PD_PRINTSETUP) - hDlgTmpl = GLOBAL_CreateBlock( GMEM_FIXED, - sysres_DIALOG_PRINT_SETUP.bytes, - sysres_DIALOG_PRINT_SETUP.size, - GetCurrentPDB(), FALSE, - FALSE, TRUE, NULL ); + hDlgTmpl = SYSRES_LoadResource( SYSRES_DIALOG_PRINT_SETUP ); else - hDlgTmpl = GLOBAL_CreateBlock( GMEM_FIXED, sysres_DIALOG_PRINT.bytes, - sysres_DIALOG_PRINT.size, - GetCurrentPDB(), FALSE, - FALSE, TRUE, NULL ); + hDlgTmpl = SYSRES_LoadResource( SYSRES_DIALOG_PRINT ); hInst = WIN_GetWindowInstance( lpPrint->hwndOwner ); bRet = DialogBoxIndirectParam( hInst, hDlgTmpl, lpPrint->hwndOwner, @@ -786,7 +763,7 @@ BOOL PrintDlg(LPPRINTDLG lpPrint) GetWndProcEntry16("PrintSetupDlgProc") : GetWndProcEntry16("PrintDlgProc"), (DWORD)lpPrint ); - GLOBAL_FreeBlock( hDlgTmpl ); + SYSRES_FreeResource( hDlgTmpl ); return bRet; } @@ -845,9 +822,9 @@ LRESULT PrintSetupDlgProc(HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam) /*********************************************************************** - * CommDlgExtendError (COMMDLG.26) + * CommDlgExtendedError (COMMDLG.26) */ -DWORD CommDlgExtendError(void) +DWORD CommDlgExtendedError(void) { return CommDlgLastError; } @@ -856,7 +833,7 @@ DWORD CommDlgExtendError(void) /*********************************************************************** * GetFileTitle (COMMDLG.27) */ -int GetFileTitle(LPCSTR lpFile, LPSTR lpTitle, UINT cbBuf) +short GetFileTitle(LPCSTR lpFile, LPSTR lpTitle, UINT cbBuf) { int i, len; printf("GetFileTitle(%p %p %d); \n", lpFile, lpTitle, cbBuf); @@ -879,7 +856,7 @@ int GetFileTitle(LPCSTR lpFile, LPSTR lpTitle, UINT cbBuf) printf("\n---> '%s' ", &lpFile[i]); len = strlen(lpFile+i)+1; - if (cbBuf < len); + if (cbBuf < len) return len; strncpy(lpTitle, &lpFile[i], len); diff --git a/misc/dos_fs.c b/misc/dos_fs.c index 0d88d8fea4d..6235df63f38 100644 --- a/misc/dos_fs.c +++ b/misc/dos_fs.c @@ -453,7 +453,7 @@ char *DOS_GetDosFileName(char *unixfilename) } else { /* Expand it if it's a relative name. */ getcwd(temp, 255); - if(strncmp(unixfilename, "./", 2) != 0) { + if(strncmp(unixfilename, "./", 2) == 0) { strcat(temp, unixfilename + 1); } else { strcat(temp, "/"); @@ -934,20 +934,20 @@ struct dosdirent *DOS_readdir(struct dosdirent *de) strcpy(de->filename, d->d_name); if (d->d_reclen > 12) de->filename[12] = '\0'; - ToDos(de->filename); - } while ( !match(de->filename, de->filemask) ); - strcpy(temp,de->unixpath); - strcat(temp,"/"); - strcat(temp,de->filename); - ToUnix(temp + strlen(de->unixpath)); + strcpy(temp,de->unixpath); + strcat(temp,"/"); + strcat(temp,d->d_name); + stat (temp, &st); + de->attribute = 0x0; + if S_ISDIR(st.st_mode) + de->attribute |= FA_DIREC; + + } while (!(de->attribute & FA_DIREC) && + !match(de->filename, de->filemask) ); + - stat (temp, &st); - de->attribute = 0x0; - if S_ISDIR(st.st_mode) - de->attribute |= FA_DIREC; - de->filesize = st.st_size; de->filetime = st.st_mtime; diff --git a/misc/exec.c b/misc/exec.c index ab5bc0eb5e5..12356610193 100644 --- a/misc/exec.c +++ b/misc/exec.c @@ -57,12 +57,13 @@ BOOL WinHelp(HWND hWnd, LPSTR lpHelpFile, WORD wCommand, DWORD dwData) case 0: case HELP_HELPONHELP: GetWindowsDirectory(str, sizeof(str)); - strcat(str, "\\winhelp.exe"); + strcat(str, "\\winhelp.exe winhelp.hlp"); dprintf_exec(stddeb,"'%s'\n", str); break; case HELP_INDEX: GetWindowsDirectory(str, sizeof(str)); - strcat(str, "\\winhelp.exe"); + strcat(str, "\\winhelp.exe "); + strcat(str, lpHelpFile); dprintf_exec(stddeb,"'%s'\n", str); break; default: diff --git a/misc/ole2nls.c b/misc/ole2nls.c index 0a20cf99b75..b02fe65a829 100644 --- a/misc/ole2nls.c +++ b/misc/ole2nls.c @@ -10,6 +10,7 @@ #include #include "windows.h" #include "ole.h" +#include "options.h" #include "winnls.h" #include "stddebug.h" #include "debug.h" @@ -20,20 +21,18 @@ DWORD WINAPI GetUserDefaultLCID() { /* Default sorting, neutral sublanguage */ -#if #LANG(En) - return 9; -#elif #LANG(De) - return 7; -#elif #LANG(Es) - return 7; /* Just a Guess :-) */ -#elif #LANG(Fr) - return 7; /* ditto :-) */ -#elif #LANG(No) - return 0x14; -#else - /* Neutral language */ - return 0; -#endif + switch(Options.language) + { + case LANG_En: return 0x09; + case LANG_Es: return 0x07; /* Just a Guess :-) */ + case LANG_De: return 0x07; + case LANG_No: return 0x14; + case LANG_Fr: + case LANG_Fi: + case LANG_Da: + default: + return 0; /* Neutral language */ + } } /*********************************************************************** @@ -192,7 +191,9 @@ UNSUPPORTED(LOCALE_INEGSEPBYSPACE) /* Now, the language specific definitions. They don't have to be complete */ -#if #LANG(De) + switch(Options.language) + { + case LANG_De: /* This definitions apply to Germany only. Users in Austria or Switzerland might want to modify them */ LOCVAL(LOCALE_ILANGUAGE,"9") @@ -315,9 +316,9 @@ LOCVAL(LOCALE_IPOSSEPBYSPACE) LOCVAL(LOCALE_INEGSYMPRECEDES) LOCVAL(LOCALE_INEGSEPBYSPACE) */ -#endif /* LANG(De) */ + break; /* LANG(De) */ -#if #LANG(Da) + case LANG_Da: /* LOCVAL(LOCALE_ILANGUAGE,"9") */ LOCVAL(LOCALE_SLANGUAGE,"Dansk") LOCVAL(LOCALE_SENGLANGUAGE,"Danish") @@ -417,11 +418,13 @@ LOCVAL(LOCALE_SABBREVMONTHNAME13,"") /* LOCVAL(LOCALE_IPOSSEPBYSPACE) */ /* LOCVAL(LOCALE_INEGSYMPRECEDES) */ /* LOCVAL(LOCALE_INEGSEPBYSPACE) */ -#endif /* LANG(Da) */ + break; /* LANG(Da) */ /*Insert other languages here*/ - + default: + break; + } /* switch */ if(!retLen) { diff --git a/misc/profile.c b/misc/profile.c index 043eb28ebcd..ecd1b72a031 100644 --- a/misc/profile.c +++ b/misc/profile.c @@ -74,13 +74,13 @@ static char *GetIniFileName(char *name, char *dir) if (strchr(name, '/')) return name; - if (strchr(name, '\\')) - return DOS_GetUnixFileName(name); - + if (strlen(dir)) { strcpy(temp, dir); strcat(temp, "\\"); strcat(temp, name); - + } + else + strcpy(temp, name); return DOS_GetUnixFileName(temp); } @@ -92,23 +92,37 @@ static TSecHeader *load (char *filename, char **pfullname) char *bufptr; char *lastnonspc; int bufsize; - char *file; + char *file, *purefilename; int c; char path[MAX_PATH+1]; BOOL firstbrace; *pfullname = NULL; - /* Try the Windows directory */ - - GetWindowsDirectory(path, sizeof(path)); - file = GetIniFileName(filename, path); + dprintf_profile(stddeb,"Trying to load file %s \n", filename); - dprintf_profile(stddeb,"Load %s\n", file); + /* First try it as is */ + file = GetIniFileName(filename, ""); f = fopen(file, "r"); if (f == NULL) { - /* Try the path of the current executable */ + + if ((purefilename = strrchr( filename, '\\' ))) + purefilename++; + else if ((purefilename = strrchr( filename, '/' ))) + purefilename++; + else + purefilename = filename; + ToUnix(purefilename); + + /* Now try the Windows directory */ + GetWindowsDirectory(path, sizeof(path)); + file = GetIniFileName(purefilename, path); + dprintf_profile(stddeb,"Trying to load in windows directory file %s\n", + file); + f = fopen(file, "r"); + + if (f == NULL) { /* Try the path of the current executable */ if (GetCurrentTask()) { @@ -116,16 +130,37 @@ static TSecHeader *load (char *filename, char **pfullname) GetModuleFileName( GetCurrentTask(), path, MAX_PATH ); if ((p = strrchr( path, '\\' ))) { - p[1] = '\0'; - file = GetIniFileName(filename, path); + p[0] = '\0'; /* Remove trailing slash */ + file = GetIniFileName(purefilename, path); + dprintf_profile(stddeb, + "Trying to load in current directory%s\n", + file); f = fopen(file, "r"); } } } + if (f == NULL) { /* And now in $HOME/.wine */ + + strcpy(file,getenv("HOME")); + strcat(file, "/.wine/"); + strcat(file, purefilename); + dprintf_profile(stddeb,"Trying to load in user-directory %s\n", file); + f = fopen(file, "r"); + } + + if (f == NULL) { + /* FIXED: we ought to create it now (in which directory?) */ + /* lets do it in ~/.wine */ + strcpy(file,getenv("HOME")); + strcat(file, "/.wine/"); + strcat(file, purefilename); + dprintf_profile(stddeb,"Creating %s\n", file); + f = fopen(file, "w+"); if (f == NULL) { fprintf(stderr, "profile.c: load() can't find file %s\n", filename); - /* FIXME: we ought to create it now (in which directory?) */ return NULL; + } + } } *pfullname = strdup(file); @@ -206,7 +241,7 @@ static TSecHeader *load (char *filename, char **pfullname) skipspc = TRUE; do { c = fgetc(f); - if (c == EOF || c == '\n' || c == ';') break; + if (c == EOF || c == '\n') break; if (!isspace(c) || !skipspc) { skipspc = FALSE; bufsize++; diff --git a/misc/shell.c b/misc/shell.c index 5e1911c15a8..5e50505bb7d 100644 --- a/misc/shell.c +++ b/misc/shell.c @@ -8,12 +8,11 @@ #include #include "windows.h" #include "shell.h" -#include "global.h" #include "neexe.h" #include "selectors.h" #include "alias.h" #include "relay32.h" -#include "../rc/sysres.h" +#include "resource.h" #include "dlgs.h" #include "win.h" #include "stddebug.h" @@ -224,7 +223,7 @@ LONG RegOpenKey(HKEY hKey, LPCSTR lpSubKey, HKEY FAR *lphKey) dprintf_reg(stddeb, "RegOpenKey(%08lX, %p='%s', %p)\n", (DWORD)hKey, lpSubKey, lpSubKey, lphKey); - if (lphKey == NULL) return ERROR_INVALID_PARAMETER; + if (lphKey == NULL) return SHELL_ERROR_INVALID_PARAMETER; switch((DWORD)hKey) { case 0: lpKey = lphTopKey; break; @@ -237,7 +236,7 @@ LONG RegOpenKey(HKEY hKey, LPCSTR lpSubKey, HKEY FAR *lphKey) } if (lpSubKey == NULL || !*lpSubKey) { *lphKey = hKey; - return ERROR_SUCCESS; + return SHELL_ERROR_SUCCESS; } while(*lpSubKey) { ptr = strchr(lpSubKey,'\\'); @@ -254,11 +253,11 @@ LONG RegOpenKey(HKEY hKey, LPCSTR lpSubKey, HKEY FAR *lphKey) } if (lpKey == NULL) { dprintf_reg(stddeb,"RegOpenKey: key %s not found!\n",str); - return ERROR_BADKEY; + return SHELL_ERROR_BADKEY; } } *lphKey = lpKey->hKey; - return ERROR_SUCCESS; + return SHELL_ERROR_SUCCESS; } @@ -275,7 +274,7 @@ LONG RegCreateKey(HKEY hKey, LPCSTR lpSubKey, HKEY FAR *lphKey) char str[128]; dprintf_reg(stddeb, "RegCreateKey(%08lX, '%s', %p)\n", (DWORD)hKey, lpSubKey, lphKey); - if (lphKey == NULL) return ERROR_INVALID_PARAMETER; + if (lphKey == NULL) return SHELL_ERROR_INVALID_PARAMETER; switch((DWORD)hKey) { case 0: lpKey = lphTopKey; break; @@ -288,7 +287,7 @@ LONG RegCreateKey(HKEY hKey, LPCSTR lpSubKey, HKEY FAR *lphKey) } if (lpSubKey == NULL || !*lpSubKey) { *lphKey = hKey; - return ERROR_SUCCESS; + return SHELL_ERROR_SUCCESS; } while (*lpSubKey) { dprintf_reg(stddeb, "RegCreateKey: Looking for subkey %s\n", lpSubKey); @@ -309,13 +308,13 @@ LONG RegCreateKey(HKEY hKey, LPCSTR lpSubKey, HKEY FAR *lphKey) lpNewKey = (LPKEYSTRUCT) GlobalLock(hNewKey); if (lpNewKey == NULL) { printf("RegCreateKey // Can't alloc new key !\n"); - return ERROR_OUTOFMEMORY; + return SHELL_ERROR_OUTOFMEMORY; } lpNewKey->hKey = hNewKey; lpNewKey->lpSubKey = malloc(strlen(str) + 1); if (lpNewKey->lpSubKey == NULL) { printf("RegCreateKey // Can't alloc key string !\n"); - return ERROR_OUTOFMEMORY; + return SHELL_ERROR_OUTOFMEMORY; } strcpy(lpNewKey->lpSubKey, str); lpNewKey->lpNextKey = lpPrevKey->lpSubLvl; @@ -333,7 +332,7 @@ LONG RegCreateKey(HKEY hKey, LPCSTR lpSubKey, HKEY FAR *lphKey) dprintf_reg(stddeb,"RegCreateKey // found '%s', key=%08lX\n", str, (DWORD)*lphKey); } } - return ERROR_SUCCESS; + return SHELL_ERROR_SUCCESS; } @@ -343,7 +342,7 @@ LONG RegCreateKey(HKEY hKey, LPCSTR lpSubKey, HKEY FAR *lphKey) LONG RegCloseKey(HKEY hKey) { dprintf_reg(stdnimp, "EMPTY STUB !!! RegCloseKey(%08lX);\n", (DWORD)hKey); - return ERROR_SUCCESS; + return SHELL_ERROR_SUCCESS; } @@ -354,7 +353,7 @@ LONG RegDeleteKey(HKEY hKey, LPCSTR lpSubKey) { dprintf_reg(stdnimp, "EMPTY STUB !!! RegDeleteKey(%08lX, '%s');\n", (DWORD)hKey, lpSubKey); - return ERROR_SUCCESS; + return SHELL_ERROR_SUCCESS; } @@ -369,22 +368,22 @@ LONG RegSetValue(HKEY hKey, LPCSTR lpSubKey, DWORD dwType, LONG dwRet; dprintf_reg(stddeb, "RegSetValue(%08lX, '%s', %08lX, '%s', %08lX);\n", (DWORD)hKey, lpSubKey, dwType, lpVal, dwIgnored); - /*if (lpSubKey == NULL) return ERROR_INVALID_PARAMETER;*/ - if (lpVal == NULL) return ERROR_INVALID_PARAMETER; - if ((dwRet = RegOpenKey(hKey, lpSubKey, &hRetKey)) != ERROR_SUCCESS) { + /*if (lpSubKey == NULL) return SHELL_ERROR_INVALID_PARAMETER;*/ + if (lpVal == NULL) return SHELL_ERROR_INVALID_PARAMETER; + if ((dwRet = RegOpenKey(hKey, lpSubKey, &hRetKey)) != SHELL_ERROR_SUCCESS) { dprintf_reg(stddeb, "RegSetValue // key not found ... so create it !\n"); - if ((dwRet = RegCreateKey(hKey, lpSubKey, &hRetKey)) != ERROR_SUCCESS) { + if ((dwRet = RegCreateKey(hKey, lpSubKey, &hRetKey)) != SHELL_ERROR_SUCCESS) { fprintf(stderr, "RegSetValue // key creation error %08lX !\n", dwRet); return dwRet; } } lpKey = (LPKEYSTRUCT)GlobalLock(hRetKey); - if (lpKey == NULL) return ERROR_BADKEY; + if (lpKey == NULL) return SHELL_ERROR_BADKEY; if (lpKey->lpValue != NULL) free(lpKey->lpValue); lpKey->lpValue = xmalloc(strlen(lpVal) + 1); strcpy(lpKey->lpValue, lpVal); dprintf_reg(stddeb,"RegSetValue // successful key='%s' val='%s' !\n", lpSubKey, lpKey->lpValue); - return ERROR_SUCCESS; + return SHELL_ERROR_SUCCESS; } @@ -400,16 +399,16 @@ LONG RegQueryValue(HKEY hKey, LPCSTR lpSubKey, LPSTR lpVal, LONG FAR *lpcb) dprintf_reg(stddeb, "RegQueryValue(%08lX, '%s', %p, %p);\n", (DWORD)hKey, lpSubKey, lpVal, lpcb); /*if (lpSubKey == NULL) return ERROR_INVALID_PARAMETER;*/ - if (lpVal == NULL) return ERROR_INVALID_PARAMETER; - if (lpcb == NULL) return ERROR_INVALID_PARAMETER; - if (!*lpcb) return ERROR_INVALID_PARAMETER; + if (lpVal == NULL) return SHELL_ERROR_INVALID_PARAMETER; + if (lpcb == NULL) return SHELL_ERROR_INVALID_PARAMETER; + if (!*lpcb) return SHELL_ERROR_INVALID_PARAMETER; - if ((dwRet = RegOpenKey(hKey, lpSubKey, &hRetKey)) != ERROR_SUCCESS) { + if ((dwRet = RegOpenKey(hKey, lpSubKey, &hRetKey)) != SHELL_ERROR_SUCCESS) { fprintf(stderr, "RegQueryValue // key not found !\n"); return dwRet; } lpKey = (LPKEYSTRUCT)GlobalLock(hRetKey); - if (lpKey == NULL) return ERROR_BADKEY; + if (lpKey == NULL) return SHELL_ERROR_BADKEY; if (lpKey->lpValue != NULL) { if ((size = strlen(lpKey->lpValue)+1) > *lpcb){ strncpy(lpVal,lpKey->lpValue,*lpcb-1); @@ -423,7 +422,7 @@ LONG RegQueryValue(HKEY hKey, LPCSTR lpSubKey, LPSTR lpVal, LONG FAR *lpcb) *lpcb = (LONG)1; } dprintf_reg(stddeb,"RegQueryValue // return '%s' !\n", lpVal); - return ERROR_SUCCESS; + return SHELL_ERROR_SUCCESS; } @@ -436,7 +435,7 @@ LONG RegEnumKey(HKEY hKey, DWORD dwSubKey, LPSTR lpBuf, DWORD dwSize) LONG len; dprintf_reg(stddeb, "RegEnumKey(%08lX, %ld)\n", (DWORD)hKey, dwSubKey); - if (lpBuf == NULL) return ERROR_INVALID_PARAMETER; + if (lpBuf == NULL) return SHELL_ERROR_INVALID_PARAMETER; switch((DWORD)hKey) { case 0: lpKey = lphTopKey; break; @@ -454,13 +453,13 @@ LONG RegEnumKey(HKEY hKey, DWORD dwSubKey, LPSTR lpBuf, DWORD dwSize) strncpy(lpBuf,lpKey->lpSubKey,len); lpBuf[len] = 0; dprintf_reg(stddeb, "RegEnumKey: found %s\n",lpBuf); - return ERROR_SUCCESS; + return SHELL_ERROR_SUCCESS; } dwSubKey--; lpKey = lpKey->lpNextKey; } dprintf_reg(stddeb, "RegEnumKey: key not found!\n"); - return ERROR_INVALID_PARAMETER; + return SHELL_ERROR_INVALID_PARAMETER; } @@ -584,7 +583,7 @@ HINSTANCE ShellExecute(HWND hWnd, LPCSTR lpOperation, LPCSTR lpFile, LPCSTR lpPa } } else { len=200; - if (RegQueryValue((HKEY)HKEY_CLASSES_ROOT,p,subclass,&len)==ERROR_SUCCESS) { + if (RegQueryValue((HKEY)HKEY_CLASSES_ROOT,p,subclass,&len)==SHELL_ERROR_SUCCESS) { if (len>20) fprintf(stddeb,"ShellExecute:subclass with len %ld? (%s), please report.\n",len,subclass); subclass[len]='\0'; @@ -593,7 +592,7 @@ HINSTANCE ShellExecute(HWND hWnd, LPCSTR lpOperation, LPCSTR lpFile, LPCSTR lpPa strcat(subclass,"\\command"); dprintf_exec(stddeb,"ShellExecute:looking for %s.\n",subclass); len=400; - if (RegQueryValue((HKEY)HKEY_CLASSES_ROOT,subclass,cmd,&len)==ERROR_SUCCESS) { + if (RegQueryValue((HKEY)HKEY_CLASSES_ROOT,subclass,cmd,&len)==SHELL_ERROR_SUCCESS) { char *t; dprintf_exec(stddeb,"ShellExecute:...got %s\n",cmd); cmd[len]='\0'; @@ -701,17 +700,13 @@ INT ShellAbout(HWND hWnd, LPCSTR szApp, LPCSTR szOtherStuff, HICON hIcon) initialized=1; } - handle = GLOBAL_CreateBlock( GMEM_FIXED, - sysres_DIALOG_SHELL_ABOUT_MSGBOX.bytes, - sysres_DIALOG_SHELL_ABOUT_MSGBOX.size, - GetCurrentPDB(), FALSE, FALSE, - TRUE, NULL ); + handle = SYSRES_LoadResource( SYSRES_DIALOG_SHELL_ABOUT_MSGBOX ); if (!handle) return FALSE; bRet = DialogBoxIndirectParam( WIN_GetWindowInstance( hWnd ), handle, hWnd, GetWndProcEntry16("AboutDlgProc"), (LONG)hIcon ); - GLOBAL_FreeBlock( handle ); + SYSRES_FreeResource( handle ); return bRet; } diff --git a/misc/user32.c b/misc/user32.c index a9ce9af90f8..5deaa83f07a 100644 --- a/misc/user32.c +++ b/misc/user32.c @@ -158,5 +158,5 @@ DWORD USER32_CreateWindowExA(long flags,char* class,char *title, return (DWORD) CreateWindowEx(flags,MAKE_SEGPTR(classbuf), MAKE_SEGPTR(titlebuf),style,x,y,width,height, (HWND)parent,(HMENU)menu,(HINSTANCE)instance, - param); + (LPVOID)param); } diff --git a/miscemu/dpmi.c b/miscemu/dpmi.c index 73893966a33..1ba8f1a42ba 100644 --- a/miscemu/dpmi.c +++ b/miscemu/dpmi.c @@ -17,6 +17,28 @@ #include "debug.h" +/* Structure for real-mode callbacks */ +typedef struct +{ + DWORD edi; + DWORD esi; + DWORD ebp; + DWORD reserved; + DWORD ebx; + DWORD edx; + DWORD ecx; + DWORD eax; + WORD flags; + WORD es; + WORD ds; + WORD fs; + WORD gs; + WORD ip; + WORD cs; + WORD sp; + WORD ss; +} REALMODECALL; + /********************************************************************** * INT_Int31Handler * @@ -132,13 +154,39 @@ void INT_Int31Handler( struct sigcontext_struct context ) * ES:DI points to real-mode call structure * Currently we just print it out and return error. */ - ptr = (BYTE *)PTR_SEG_OFF_TO_LIN( ES_reg(&context), DI_reg(&context) ); - fprintf(stdnimp, - "RealModeInt %02x: AX=%04x BX=%04x CX=%04x DX=%04x SI=%04x DI=%04x ES=%04x DS=%04x\n", - BL_reg(&context), - *(WORD*)(ptr+0x1c),*(WORD*)(ptr+0x10),*(WORD*)(ptr+0x18),*(WORD*)(ptr+0x14), - *(WORD*)(ptr+0x04),*(WORD*)(ptr+0x00),*(WORD*)(ptr+0x22),*(WORD*)(ptr+0x24)); - SET_CFLAG(&context); + { + REALMODECALL *p = (REALMODECALL *)PTR_SEG_OFF_TO_LIN( ES_reg(&context), DI_reg(&context) ); + fprintf(stdnimp, + "RealModeInt %02x: EAX=%08lx EBX=%08lx ECX=%08lx EDX=%08lx\n" + " ESI=%08lx EDI=%08lx ES=%04x DS=%04x\n", + BL_reg(&context), p->eax, p->ebx, p->ecx, p->edx, + p->esi, p->edi, p->es, p->ds ); + SET_CFLAG(&context); + } + break; + + case 0x0301: /* Call real mode procedure with far return */ + { + REALMODECALL *p = (REALMODECALL *)PTR_SEG_OFF_TO_LIN( ES_reg(&context), DI_reg(&context) ); + fprintf(stdnimp, + "RealModeCall: EAX=%08lx EBX=%08lx ECX=%08lx EDX=%08lx\n" + " ESI=%08lx EDI=%08lx ES=%04x DS=%04x CS:IP=%04x:%04x\n", + p->eax, p->ebx, p->ecx, p->edx, + p->esi, p->edi, p->es, p->ds, p->cs, p->ip ); + SET_CFLAG(&context); + } + break; + + case 0x0302: /* Call real mode procedure with interrupt return */ + { + REALMODECALL *p = (REALMODECALL *)PTR_SEG_OFF_TO_LIN( ES_reg(&context), DI_reg(&context) ); + fprintf(stdnimp, + "RealModeCallIret: EAX=%08lx EBX=%08lx ECX=%08lx EDX=%08lx\n" + " ESI=%08lx EDI=%08lx ES=%04x DS=%04x CS:IP=%04x:%04x\n", + p->eax, p->ebx, p->ecx, p->edx, + p->esi, p->edi, p->es, p->ds, p->cs, p->ip ); + SET_CFLAG(&context); + } break; case 0x0400: /* Get DPMI version */ diff --git a/miscemu/instr.c b/miscemu/instr.c index 09daf43e2a7..8b795a960cf 100644 --- a/miscemu/instr.c +++ b/miscemu/instr.c @@ -181,9 +181,11 @@ static BYTE *INSTR_GetOperandAddr( struct sigcontext_struct *context, base += (signed short)off; break; } + base &= 0xffff; } if (segprefix != -1) seg = segprefix; + /* FIXME: should check limit of the segment here */ return (BYTE *)PTR_SEG_OFF_TO_LIN( seg, (base + (index << ss)) ); } diff --git a/miscemu/int21.c b/miscemu/int21.c index 8c6fac43266..143e04aba0f 100644 --- a/miscemu/int21.c +++ b/miscemu/int21.c @@ -444,7 +444,7 @@ static void GetSystemDate(struct sigcontext_struct *context) AX_reg(context) = now->tm_wday; } -static void GetSystemTime(struct sigcontext_struct *context) +static void INT21_GetSystemTime(struct sigcontext_struct *context) { struct tm *now; struct timeval tv; @@ -603,6 +603,92 @@ static void CloseFile(struct sigcontext_struct *context) RESET_CFLAG(context); } +void ExtendedOpenCreateFile(struct sigcontext_struct *context) +{ + dprintf_int(stddeb, "int21: extended open/create: file= %s \n", + DOS_GetUnixFileName(PTR_SEG_OFF_TO_LIN(DS_reg(context),SI_reg(context)))); + /* Shuffle arguments to call OpenExistingFile */ + AL_reg(context) = BL_reg(context); + DX_reg(context) = SI_reg(context); + /* BX,CX and DX should be preserved */ + OpenExistingFile(context); + if ((EFL_reg(context) & 0x0001)==0) + { /* It exists */ + dprintf_int(stddeb, "int21: extended open/create %s exists \n", + DOS_GetUnixFileName(PTR_SEG_OFF_TO_LIN(DS_reg(context),SI_reg(context)))); + /* Now decide what do do */ + if ((DL_reg(context) & 0x0007)== 0) + { + BX_reg(context) = AX_reg(context); + CloseFile(context); + AX_reg(context) = 0x0050;/*File exists*/ + CX_reg(context) = 0; + SET_CFLAG(context); + dprintf_int(stddeb, "int21: extended open/create: failed because file exixts \n"); + return; + } + if ((DL_reg(context) & 0x0007)== 2) { + /* Truncate it, but first check if opend for write */ + if ((BL_reg(context) & 0x0007)== 0) { + BX_reg(context) = AX_reg(context); + CloseFile(context); + dprintf_int(stddeb, "int21: extended open/create: failed, trunc on ro file"); + AX_reg(context) = 0x000C;/*Access code invalid*/ + CX_reg(context) = 0; + SET_CFLAG(context); + return; + } + /* Shuffle arguments to call CloseFile */ + dprintf_int(stddeb, "int21: extended open/create: Closing before truncate\n"); + BX_reg(context) = AX_reg(context); + /* BX and DX should be preserved */ + CloseFile(context); + if (EFL_reg(context) & 0x0001) { + dprintf_int(stddeb, "int21: extended open/create: close before trunc failed"); + AX_reg(context) = 0x0019;/*Seek Error*/ + CX_reg(context) = 0; + SET_CFLAG(context); + } + /* Shuffle arguments to call CreateFile */ + dprintf_int(stddeb, "int21: extended open/create: Truncating\n"); + AL_reg(context) = BL_reg(context); + /* CX is still the same */ + DX_reg(context) = SI_reg(context); + CreateFile(context); + if (EFL_reg(context) & 0x0001) { /*no file open, flags set */ + dprintf_int(stddeb, "int21: extended open/create: truncfailed"); + return; + } + CX_reg(context) = 3; + return; + } + CX_reg(context) = 1; + return; + } + else /* file does not exist */ + { + dprintf_int(stddeb, "int21: extended open/create %s dosen't exists \n", + DOS_GetUnixFileName(PTR_SEG_OFF_TO_LIN(DS_reg(context),SI_reg(context)))); + if ((DL_reg(context) & 0x00F0)== 0) { + CX_reg(context) = 0; + SET_CFLAG(context); + dprintf_int(stddeb, "int21: extended open/create: failed, file dosen't exist\n"); + return; + } + /* Shuffle arguments to call CreateFile */ + dprintf_int(stddeb, "int21: extended open/create: Creating\n"); + AL_reg(context) = BL_reg(context); + /* CX should still be the same */ + DX_reg(context) = SI_reg(context); + CreateFile(context); + if (EFL_reg(context) & 0x0001) { /*no file open, flags set */ + dprintf_int(stddeb, "int21: extended open/create: create failed\n"); + return; + } + CX_reg(context) = 2; + return; + } +} static void RenameFile(struct sigcontext_struct *context) { char *newname, *oldname; @@ -1312,7 +1398,7 @@ void DOS3Call( struct sigcontext_struct context ) break; case 0x2c: /* GET SYSTEM TIME */ - GetSystemTime(&context); + INT21_GetSystemTime(&context); break; case 0x2d: /* SET SYSTEM TIME */ @@ -1738,6 +1824,21 @@ void DOS3Call( struct sigcontext_struct context ) } break; + case 0x6C: /* Extended Open/Create*/ + ExtendedOpenCreateFile(&context); + break; + + case 0x70: /* MS-DOS 7 (Windows95) - ??? (country-specific?)*/ + case 0x71: /* MS-DOS 7 (Chicago) - LONG FILENAME FUNCTIONS */ + case 0x72: /* MS-DOS 7 (Windows95) - ??? */ + case 0x73: /* MS-DOS 7 (Windows95) - DRIVE LOCKING ??? */ + dprintf_int(stddeb,"int21: windows95 function AX %04x\n", + AX_reg(&context)); + dprintf_int(stddeb, " returning unimplemented\n"); + SET_CFLAG(&context); + AL_reg(&context) = 0; + break; + case 0xdc: /* CONNECTION SERVICES - GET CONNECTION NUMBER */ break; diff --git a/objects/bitmap.c b/objects/bitmap.c index 72e18adf153..7408f3b0d89 100644 --- a/objects/bitmap.c +++ b/objects/bitmap.c @@ -227,7 +227,7 @@ HBITMAP LoadBitmap( HANDLE instance, SEGPTR name ) { char *str = (char *)PTR_SEG_TO_LIN( name ); dprintf_bitmap( stddeb, "LoadBitmap("NPFMT",'%s')\n", instance, str ); - if (str[0] == '#') name = (SEGPTR)(WORD)atoi( str + 1 ); + if (str[0] == '#') name = (SEGPTR)(DWORD)(WORD)atoi( str + 1 ); } else dprintf_bitmap( stddeb, "LoadBitmap("NPFMT",%04x)\n", diff --git a/objects/cursoricon.c b/objects/cursoricon.c index 4dc22b28ed7..4098051b845 100644 --- a/objects/cursoricon.c +++ b/objects/cursoricon.c @@ -368,7 +368,7 @@ static HANDLE CURSORICON_Load( HANDLE hInstance, SEGPTR name, int width, return 0; } /* Make it owned by the module */ - FarSetOwner( handle, GetExePtr( hInstance ) ); + FarSetOwner( handle, (WORD)(DWORD)GetExePtr( hInstance ) ); info = (CURSORICONINFO *)GlobalLock( handle ); info->ptHotSpot.x = hotspot.x; info->ptHotSpot.y = hotspot.y; @@ -404,7 +404,7 @@ static HANDLE CURSORICON_Copy( HANDLE hInstance, HANDLE handle ) if (!(hInstance = GetExePtr( hInstance ))) return 0; size = GlobalSize( handle ); hNew = GlobalAlloc( GMEM_MOVEABLE, size ); - FarSetOwner( hNew, hInstance ); + FarSetOwner( hNew, (WORD)(DWORD)hInstance ); ptrNew = (char *)GlobalLock( hNew ); memcpy( ptrNew, ptrOld, size ); GlobalUnlock( handle ); diff --git a/objects/dc.c b/objects/dc.c index 41c981aa85a..68e7ff3bc20 100644 --- a/objects/dc.c +++ b/objects/dc.c @@ -106,8 +106,8 @@ void DC_FillDevCaps( DeviceCaps * caps ) caps->vertRes = screenHeight; caps->bitsPixel = screenDepth; caps->planes = 1; - caps->numBrushes = 0; - caps->numPens = 0; + caps->numBrushes = 16+6; /* 16 solid + 6 hatched brushes */ + caps->numPens = 16; /* 16 solid pens */ caps->numMarkers = 0; caps->numFonts = 0; caps->numColors = 1 << caps->bitsPixel; diff --git a/objects/gdiobj.c b/objects/gdiobj.c index bde259bde1e..12cacd3d73b 100644 --- a/objects/gdiobj.c +++ b/objects/gdiobj.c @@ -193,32 +193,6 @@ BOOL GDI_Init(void) /*********************************************************************** - * GDI_AppendToPenBrushList - */ -BOOL GDI_AppendToPenBrushList(HANDLE hNewObj) -{ - HANDLE *lphObj; - int i = 1; - if (hNewObj == 0) return FALSE; - if (lpPenBrushList == NULL) { - lpPenBrushList = xmalloc(MAX_OBJ * sizeof(HANDLE)); - lpPenBrushList[0] = 0; - dprintf_gdi(stddeb,"GDI_AppendToPenBrushList() lpPenBrushList allocated !\n"); - } - for (lphObj = lpPenBrushList; i < MAX_OBJ; i++) { - if (*lphObj == 0) { - *lphObj = hNewObj; - *(lphObj + 1) = 0; - dprintf_gdi(stddeb,"GDI_AppendToPenBrushList("NPFMT") appended (count=%d)\n", hNewObj, i); - return TRUE; - } - lphObj++; - } - return FALSE; -} - - -/*********************************************************************** * GDI_AllocObject */ HANDLE GDI_AllocObject( WORD size, WORD magic ) @@ -231,9 +205,6 @@ HANDLE GDI_AllocObject( WORD size, WORD magic ) obj->hNext = 0; obj->wMagic = magic; obj->dwCount = ++count; - if (magic == PEN_MAGIC || magic == BRUSH_MAGIC) { - GDI_AppendToPenBrushList(handle); - } return handle; } @@ -406,8 +377,71 @@ BOOL UnrealizeObject( HANDLE handle ) /*********************************************************************** * EnumObjects (GDI.71) */ -int EnumObjects(HDC hDC, int nObjType, FARPROC lpEnumFunc, LPSTR lpData) +int EnumObjects( HDC hdc, int nObjType, FARPROC lpEnumFunc, LPARAM lParam ) { + /* Solid colors to enumerate */ + static const COLORREF solid_colors[] = + { RGB(0x00,0x00,0x00), RGB(0xff,0xff,0xff), + RGB(0xff,0x00,0x00), RGB(0x00,0xff,0x00), + RGB(0x00,0x00,0xff), RGB(0xff,0xff,0x00), + RGB(0xff,0x00,0xff), RGB(0x00,0xff,0xff), + RGB(0x80,0x00,0x00), RGB(0x00,0x80,0x00), + RGB(0x80,0x80,0x00), RGB(0x00,0x00,0x80), + RGB(0x80,0x00,0x80), RGB(0x00,0x80,0x80), + RGB(0x80,0x80,0x80), RGB(0xc0,0xc0,0xc0) + }; + + int i, retval = 0; + + dprintf_gdi( stddeb, "EnumObjects: "NPFMT" %d %08lx %08lx\n", + hdc, nObjType, (DWORD)lpEnumFunc, lParam ); + switch(nObjType) + { + case OBJ_PEN: + /* Enumerate solid pens */ + for (i = 0; i < sizeof(solid_colors)/sizeof(solid_colors[0]); i++) + { + LOGPEN pen = { PS_SOLID, { 1, 0 }, solid_colors[i] }; + retval = CallEnumObjectsProc( lpEnumFunc, MAKE_SEGPTR(&pen), + lParam ); + dprintf_gdi( stddeb, "EnumObject: solid pen %08lx, ret=%d\n", + solid_colors[i], retval); + if (!retval) break; + } + break; + + case OBJ_BRUSH: + /* Enumerate solid brushes */ + for (i = 0; i < sizeof(solid_colors)/sizeof(solid_colors[0]); i++) + { + LOGBRUSH brush = { BS_SOLID, solid_colors[i], 0 }; + retval = CallEnumObjectsProc( lpEnumFunc, MAKE_SEGPTR(&brush), + lParam ); + dprintf_gdi( stddeb, "EnumObject: solid brush %08lx, ret=%d\n", + solid_colors[i], retval); + if (!retval) break; + } + if (!retval) break; + + /* Now enumerate hatched brushes */ + for (i = HS_HORIZONTAL; i <= HS_DIAGCROSS; i++) + { + LOGBRUSH brush = { BS_HATCHED, RGB(0,0,0), i }; + retval = CallEnumObjectsProc( lpEnumFunc, MAKE_SEGPTR(&brush), + lParam ); + dprintf_gdi( stddeb, "EnumObject: hatched brush %d, ret=%d\n", + i, retval); + if (!retval) break; + } + break; + + default: + fprintf( stderr, "EnumObjects: invalid type %d\n", nObjType ); + break; + } + return retval; +#if 0 + /* HANDLE handle; DC *dc;*/ HANDLE *lphObj; @@ -508,8 +542,10 @@ int EnumObjects(HDC hDC, int nObjType, FARPROC lpEnumFunc, LPSTR lpData) GDI_HEAP_FREE(hLog); dprintf_gdi(stddeb,"EnumObjects // End of enumeration !\n"); return nRet; +#endif } + /*********************************************************************** * IsGDIObject(GDI.462) */ diff --git a/objects/metafile.c b/objects/metafile.c index 297f514dade..ab0b7dfb858 100644 --- a/objects/metafile.c +++ b/objects/metafile.c @@ -910,7 +910,7 @@ BOOL MF_CreatePatternBrush(DC *dc, HBRUSH hBrush, LOGBRUSH *logbrush) infohdr->biPlanes = bmp->bitmap.bmPlanes; infohdr->biBitCount = bmp->bitmap.bmBitsPixel; memcpy(mr->rdParam + (sizeof(BITMAPINFOHEADER) / 2) + 4, - bmp->bitmap.bmBits, + PTR_SEG_TO_LIN(bmp->bitmap.bmBits), bmp->bitmap.bmHeight * bmp->bitmap.bmWidthBytes); break; diff --git a/rc/Makefile.in b/rc/Makefile.in dissimilarity index 82% index f84578430ec..6778692cea9 100644 --- a/rc/Makefile.in +++ b/rc/Makefile.in @@ -1,40 +1,24 @@ -TOPSRC = @top_srcdir@ - -MODULE = rc - -C_SRCS = sysres.c - -LANGUAGES = En Es De No Fr Fi Da - -all: $(MODULE).o - -@MAKE_RULES@ - -y.tab.c y.tab.h: parser.y - $(YACC) -d -t parser.y - -lex.yy.c: parser.l - $(LEX) -8 -I parser.l - -winerc: lex.yy.o winerc.o y.tab.o - $(CC) $(ALLCFLAGS) lex.yy.o winerc.o y.tab.o -o winerc $(LEXLIB) - -sysres.rct: sysres.rc $(LANGUAGES:%=sysres_%.rc) - echo "#include \"windows.h\"" >sysres.rct - echo WINDOWS_H_ENDS_HERE >>sysres.rct - cat sysres.rc >>sysres.rct - -sysres.c sysres.h: sysres.rct winerc - $(CC) $(ALLCFLAGS) -E -x c -P sysres.rct | sed -e '1,/^WINDOWS_H_ENDS_HERE/d' | ./winerc -o sysres -v -p sysres - -clean:: - $(RM) lex.yy.c sysres.rct winerc y.tab.c y.tab.h sysres.c sysres.h - -langclean:: - $(RM) sysres.c sysres.h sysres.o - -y.tab.o: y.tab.c y.tab.h parser.h -lex.yy.o: lex.yy.c y.tab.h parser.h -winerc.o: $(TOPSRC)/include/windows.h $(TOPSRC)/include/neexe.h parser.h y.tab.h - -### Dependencies: +TOPSRC = @top_srcdir@ + +PROGRAM = winerc +MODULE = none + +C_SRCS = y.tab.c lex.yy.c winerc.c + +all: $(PROGRAM) + +@MAKE_RULES@ + +$(PROGRAM): $(OBJS) + $(CC) $(CFLAGS) -o winerc $(OBJS) $(LEXLIB) + +y.tab.c y.tab.h: parser.y + $(YACC) -d -t parser.y + +lex.yy.c: parser.l + $(LEX) -8 -I parser.l + +clean:: + $(RM) y.tab.c y.tab.h lex.yy.c $(PROGRAM) + +### Dependencies: diff --git a/rc/sysres.rc b/rc/sysres.rc deleted file mode 100644 index 52e3749c9b7..00000000000 --- a/rc/sysres.rc +++ /dev/null @@ -1,17 +0,0 @@ -#if #LANG(En) -#include "sysres_En.rc" -#elif #LANG(De) -#include "sysres_De.rc" -#elif #LANG(No) -#include "sysres_No.rc" -#elif #LANG(Es) -#include "sysres_Es.rc" -#elif #LANG(Fr) -#include "sysres_Fr.rc" -#elif #LANG(Fi) -#include "sysres_Fi.rc" -#elif #LANG(Da) -#include "sysres_Da.rc" -#else -#error LANG not set to an implemented language. -#endif diff --git a/rc/winerc.c b/rc/winerc.c index c01227f7733..f5ec38074bd 100644 --- a/rc/winerc.c +++ b/rc/winerc.c @@ -18,6 +18,7 @@ char usage[]="winerc -bdvc -p prefix -o outfile < infile \n" " -b Create a C array from a binary .res file\n" + " -c Add 'const' prefix to C constants\n" " -d Output debugging information\n" " -p prefix Give a prefix for the generated names\n" " -v Show each resource as it is processed\n" @@ -54,7 +55,7 @@ int main(int argc,char *argv[]) extern char* optarg; int optc,lose,ret,binary; lose=binary=0; - while((optc=getopt(argc,argv,"bdp:vo:"))!=EOF) + while((optc=getopt(argc,argv,"bcdp:vo:"))!=EOF) switch(optc) { /* bison will print state transitions on stderr */ @@ -546,8 +547,8 @@ void create_output(gen_res* top) for (it=top;it;it=it->next) fprintf( header,"extern %sstruct resource %s;\n", ISCONSTANT, get_resource_name(it) ); - fprintf( header,"\nextern %sstruct resource * %sTable[];\n", - ISCONSTANT, prefix ); + fprintf( header,"\nextern %sstruct resource * %s%s_Table[];\n", + ISCONSTANT, ISCONSTANT, prefix ); /* Print the resources bytes */ @@ -562,10 +563,10 @@ void create_output(gen_res* top) ISCONSTANT, get_resource_name(it) ); for (i=0;isize-1;i++) { - fprintf(code,"%#4x,",it->res[i]); + fprintf(code,"0x%02x, ",it->res[i]); if ((i&7)==7)fputc('\n',code); } - fprintf(code,"%#4x};\n\n",it->res[i]); + fprintf(code,"0x%02x };\n\n",it->res[i]); } /* Print the resources */ @@ -574,15 +575,15 @@ void create_output(gen_res* top) int type; switch(it->type) { - case acc:type=RT_ACCELERATOR;break; - case bmp:type=RT_BITMAP;break; - case cur:type=RT_CURSOR;break; - case dlg:type=RT_DIALOG;break; - case fnt:type=RT_FONT;break; - case ico:type=RT_ICON;break; - case men:type=RT_MENU;break; - case rdt:type=RT_RCDATA;break; - case str:type=RT_STRING;break; + case acc:type=(int)RT_ACCELERATOR;break; + case bmp:type=(int)RT_BITMAP;break; + case cur:type=(int)RT_CURSOR;break; + case dlg:type=(int)RT_DIALOG;break; + case fnt:type=(int)RT_FONT;break; + case ico:type=(int)RT_ICON;break; + case men:type=(int)RT_MENU;break; + case rdt:type=(int)RT_RCDATA;break; + case str:type=(int)RT_STRING;break; default:fprintf(stderr,"Unknown restype\n");type=-1;break; } if(it->n_type) @@ -597,7 +598,8 @@ void create_output(gen_res* top) /* Print the resource table (NULL terminated) */ - fprintf(code,"\n%sstruct resource * %sTable[] = {\n", ISCONSTANT, prefix); + fprintf(code,"\n%sstruct resource * %s%s_Table[] = {\n", + ISCONSTANT, ISCONSTANT, prefix); for (it=top;it;it=it->next) fprintf( code, " &%s,\n", get_resource_name(it) ); fprintf( code, " 0\n};\n" ); @@ -608,7 +610,7 @@ void create_output(gen_res* top) "static void DoIt() WINE_CONSTRUCTOR;\n" "static void DoIt()\n" "{\n" - "\tLIBRES_RegisterResources(%sTable);\n" + "\tLIBRES_RegisterResources(%s_Table);\n" "}\n\n" "#ifndef HAVE_WINE_CONSTRUCTOR\n" "void LIBWINE_Register_%s(){\n" diff --git a/resources/Makefile.in b/resources/Makefile.in new file mode 100644 index 00000000000..3ccf2b040e9 --- /dev/null +++ b/resources/Makefile.in @@ -0,0 +1,20 @@ +TOPSRC = @top_srcdir@ + +MODULE = resources + +LANGUAGES = En Es De No Fr Fi Da + +SYSRES_SRCS = $(LANGUAGES:%=sysres_%.c) + +C_SRCS = $(SYSRES_SRCS) sysres.c + +all: check_winerc $(MODULE).o + +@MAKE_RULES@ + +$(SYSRES_SRCS): $(WINERC) + +clean:: + $(RM) $(SYSRES_SRCS) $(SYSRES_SRCS:.c=.h) + +### Dependencies: diff --git a/resources/sysres.c b/resources/sysres.c new file mode 100644 index 00000000000..04a6d52029d --- /dev/null +++ b/resources/sysres.c @@ -0,0 +1,56 @@ +/* + * System resources loading + * + * Copyright 1995 Alexandre Julliard + */ + +#include "windows.h" +#include "global.h" +#include "options.h" +#include "resource.h" + +#include "sysres_En.h" +#include "sysres_Es.h" +#include "sysres_De.h" +#include "sysres_No.h" +#include "sysres_Fr.h" +#include "sysres_Fi.h" +#include "sysres_Da.h" + + +static const struct resource * const * SYSRES_Resources[] = +{ + sysres_En_Table, /* LANG_En */ + sysres_Es_Table, /* LANG_Es */ + sysres_De_Table, /* LANG_De */ + sysres_No_Table, /* LANG_No */ + sysres_Fr_Table, /* LANG_Fr */ + sysres_Fi_Table, /* LANG_Fi */ + sysres_Da_Table /* LANG_Da */ +}; + + +/*********************************************************************** + * SYSRES_LoadResource + * + * Create a global memory block for a system resource. + */ +HANDLE SYSRES_LoadResource( SYSTEM_RESOURCE id ) +{ + const struct resource *resPtr; + + resPtr = SYSRES_Resources[Options.language][id]; + return GLOBAL_CreateBlock( GMEM_FIXED, resPtr->bytes, resPtr->size, + GetCurrentPDB(), FALSE, FALSE, TRUE, NULL ); +} + + +/*********************************************************************** + * SYSRES_FreeResource + * + * Free a global memory block for a system resource. + */ +void SYSRES_FreeResource( HANDLE handle ) +{ + GLOBAL_FreeBlock( handle ); +} diff --git a/rc/sysres_Da.rc b/resources/sysres_Da.rc similarity index 100% rename from rc/sysres_Da.rc rename to resources/sysres_Da.rc diff --git a/rc/sysres_De.rc b/resources/sysres_De.rc similarity index 100% rename from rc/sysres_De.rc rename to resources/sysres_De.rc diff --git a/rc/sysres_En.rc b/resources/sysres_En.rc similarity index 100% rename from rc/sysres_En.rc rename to resources/sysres_En.rc diff --git a/rc/sysres_Es.rc b/resources/sysres_Es.rc similarity index 100% rename from rc/sysres_Es.rc rename to resources/sysres_Es.rc diff --git a/rc/sysres_Fi.rc b/resources/sysres_Fi.rc similarity index 100% rename from rc/sysres_Fi.rc rename to resources/sysres_Fi.rc diff --git a/rc/sysres_Fr.rc b/resources/sysres_Fr.rc similarity index 100% rename from rc/sysres_Fr.rc rename to resources/sysres_Fr.rc diff --git a/rc/sysres_No.rc b/resources/sysres_No.rc similarity index 100% rename from rc/sysres_No.rc rename to resources/sysres_No.rc diff --git a/toolkit/Makefile.in b/toolkit/Makefile.in deleted file mode 100644 index 46befbf67ad..00000000000 --- a/toolkit/Makefile.in +++ /dev/null @@ -1,40 +0,0 @@ -TOPSRC = @top_srcdir@ -X_LIBS = @X_LIBS@ -XLIB = @X_PRE_LIBS@ -lXext -lX11 @X_EXTRA_LIBS@ -MODULE = toolkit - -C_SRCS = \ - atom.c \ - arch.c \ - heap.c \ - libres.c \ - miscstubs.c \ - sup.c \ - winmain.c - -all: $(MODULE).o - -hello: hello.o ../winelib.a - gcc -g -o hello hello.o ../winelib.a -lm $(X_LIBS) -lXpm $(XLIB) - -hello2: hello2.o ../winelib.a - gcc -g -o hello2 hello2.o ../winelib.a -lm $(X_LIBS) -lXpm $(XLIB) - -hello3: hello3res.o hello3.o - gcc -g -o hello3 hello3.o hello3res.o ../winelib.a -lm $(X_LIBS) -lXpm $(XLIB) - -hello3.o: hello3res.o - -hello3res.o: hello3res.rc - echo "#include \"windows.h\"" >hello3res.rct - echo WINDOWS_H_ENDS_HERE >>hello3res.rct - cat hello3res.rc >>hello3res.rct - $(CC) $(ALLCFLAGS) -E -x c -P hello3res.rct | sed -e '1,/^WINDOWS_H_ENDS_HERE/d' | ../rc/winerc -o hello3res -v -p hello3 - gcc -c $(ALLCFLAGS) hello3res.c - -@MAKE_RULES@ - -clean:: - $(RM) hello hello2 hello3 - -### Dependencies: diff --git a/tools/build.c b/tools/build.c index 53a0150754d..c2571e0dbef 100644 --- a/tools/build.c +++ b/tools/build.c @@ -808,7 +808,7 @@ static void BuildSpec32Files( char *specname ) if(fdp->arg_types[argno]!='.') putchar( 'a'+argno ); if (argno!=argc-1) putchar( ',' ); } - printf( ") __attribute((stdcall));" ); + printf( ") __attribute((stdcall));\n" ); } printf( "void %s_%d(", UpperDLLName, i); @@ -1071,15 +1071,15 @@ static void BuildCall32LargeStack(void) printf( "\tmovl " PREFIX "IF1632_Original32_esp, %%eax\n" ); printf( "\torl %%eax,%%eax\n" ); - printf( "\tje 0f\n" ); + printf( "\tje no_orig_esp\n" ); printf( "\tmovl %%eax,%%esp\n" ); - printf( "0:\n" ); + printf( "no_orig_esp:\n" ); /* Transfer the arguments */ printf( "\tmovl 12(%%ebp),%%ecx\n" ); printf( "\torl %%ecx,%%ecx\n" ); - printf( "\tje 1f\n" ); + printf( "\tje no_args\n" ); printf( "\tleal 16(%%ebp),%%esi\n" ); printf( "\tshll $2,%%ecx\n" ); printf( "\tsubl %%ecx,%%esp\n" ); @@ -1087,7 +1087,7 @@ static void BuildCall32LargeStack(void) printf( "\tshrl $2,%%ecx\n" ); printf( "\tcld\n" ); printf( "\trep; movsl\n" ); - printf( "1:\n" ); + printf( "no_args:\n" ); /* Call the function */ @@ -1321,6 +1321,9 @@ static void BuildCall32Func( char *profile ) printf( "\tpushw " PREFIX "IF1632_Saved16_sp\n" ); printf( "\tpushw " PREFIX "IF1632_Saved16_ss\n" ); +#ifdef __svr4__ + printf("\tdata16\n"); +#endif printf( "\tmovw %%ss," PREFIX "IF1632_Saved16_ss\n" ); printf( "\tmovw %%sp," PREFIX "IF1632_Saved16_sp\n" ); @@ -1380,9 +1383,18 @@ static void BuildCall32Func( char *profile ) /* Restore the 16-bit stack */ +#ifdef __svr4__ + printf( "\tdata16\n"); +#endif printf( "\tmovw " PREFIX "IF1632_Saved16_ss,%%ss\n" ); printf( "\tmovw " PREFIX "IF1632_Saved16_sp,%%sp\n" ); +#ifdef __svr4__ + printf( "\tdata16\n"); +#endif printf( "\tpopw " PREFIX "IF1632_Saved16_ss\n" ); +#ifdef __svr4__ + printf( "\tdata16\n"); +#endif printf( "\tpopw " PREFIX "IF1632_Saved16_sp\n" ); if (reg_func) @@ -1547,6 +1559,9 @@ static void BuildCall16Func( char *profile ) /* Switch to the 16-bit stack */ +#ifdef __svr4__ + printf("\tdata16\n"); +#endif printf( "\tmovw " PREFIX "IF1632_Saved16_ss,%%ss\n" ); printf( "\tmovw " PREFIX "IF1632_Saved16_sp,%%sp\n" ); @@ -1608,6 +1623,9 @@ static void BuildCall16Func( char *profile ) { /* Set ax equal to ds for window procedures */ printf( "\tmovw 16(%%ebx),%%ax\n" ); +#ifdef __svr4__ + printf( "\tdata16\n"); +#endif printf( "\tmovw %%ax,%%ds\n" ); } @@ -1639,8 +1657,17 @@ static void BuildRet16Func() /* Restore 32-bit segment registers */ printf( "\tmovw $0x%04x,%%bx\n", WINE_DATA_SELECTOR ); +#ifdef __svr4__ + printf( "\tdata16\n"); +#endif printf( "\tmovw %%bx,%%ds\n" ); +#ifdef __svr4__ + printf( "\tdata16\n"); +#endif printf( "\tmovw %%bx,%%es\n" ); +#ifdef __svr4__ + printf( "\tdata16\n"); +#endif printf( "\tmovw %%bx,%%ss\n" ); /* Restore the 32-bit stack */ diff --git a/tools/install-sh b/tools/install-sh new file mode 100755 index 00000000000..89fc9b098b8 --- /dev/null +++ b/tools/install-sh @@ -0,0 +1,238 @@ +#! /bin/sh +# +# install - install a program, script, or datafile +# This comes from X11R5. +# +# Calling this script install-sh is preferred over install.sh, to prevent +# `make' implicit rules from creating a file called install from it +# when there is no Makefile. +# +# This script is compatible with the BSD install script, but was written +# from scratch. +# + + +# set DOITPROG to echo to test this script + +# Don't use :- since 4.3BSD and earlier shells don't like it. +doit="${DOITPROG-}" + + +# put in absolute paths if you don't have them in your path; or use env. vars. + +mvprog="${MVPROG-mv}" +cpprog="${CPPROG-cp}" +chmodprog="${CHMODPROG-chmod}" +chownprog="${CHOWNPROG-chown}" +chgrpprog="${CHGRPPROG-chgrp}" +stripprog="${STRIPPROG-strip}" +rmprog="${RMPROG-rm}" +mkdirprog="${MKDIRPROG-mkdir}" + +tranformbasename="" +transform_arg="" +instcmd="$mvprog" +chmodcmd="$chmodprog 0755" +chowncmd="" +chgrpcmd="" +stripcmd="" +rmcmd="$rmprog -f" +mvcmd="$mvprog" +src="" +dst="" +dir_arg="" + +while [ x"$1" != x ]; do + case $1 in + -c) instcmd="$cpprog" + shift + continue;; + + -d) dir_arg=true + shift + continue;; + + -m) chmodcmd="$chmodprog $2" + shift + shift + continue;; + + -o) chowncmd="$chownprog $2" + shift + shift + continue;; + + -g) chgrpcmd="$chgrpprog $2" + shift + shift + continue;; + + -s) stripcmd="$stripprog" + shift + continue;; + + -t=*) transformarg=`echo $1 | sed 's/-t=//'` + shift + continue;; + + -b=*) transformbasename=`echo $1 | sed 's/-b=//'` + shift + continue;; + + *) if [ x"$src" = x ] + then + src=$1 + else + # this colon is to work around a 386BSD /bin/sh bug + : + dst=$1 + fi + shift + continue;; + esac +done + +if [ x"$src" = x ] +then + echo "install: no input file specified" + exit 1 +else + true +fi + +if [ x"$dir_arg" != x ]; then + dst=$src + src="" + + if [ -d $dst ]; then + instcmd=: + else + instcmd=mkdir + fi +else + +# Waiting for this to be detected by the "$instcmd $src $dsttmp" command +# might cause directories to be created, which would be especially bad +# if $src (and thus $dsttmp) contains '*'. + + if [ -f $src -o -d $src ] + then + true + else + echo "install: $src does not exist" + exit 1 + fi + + if [ x"$dst" = x ] + then + echo "install: no destination specified" + exit 1 + else + true + fi + +# If destination is a directory, append the input filename; if your system +# does not like double slashes in filenames, you may need to add some logic + + if [ -d $dst ] + then + dst="$dst"/`basename $src` + else + true + fi +fi + +## this sed command emulates the dirname command +dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` + +# Make sure that the destination directory exists. +# this part is taken from Noah Friedman's mkinstalldirs script + +# Skip lots of stat calls in the usual case. +if [ ! -d "$dstdir" ]; then +defaultIFS=' +' +IFS="${IFS-${defaultIFS}}" + +oIFS="${IFS}" +# Some sh's can't handle IFS=/ for some reason. +IFS='%' +set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` +IFS="${oIFS}" + +pathcomp='' + +while [ $# -ne 0 ] ; do + pathcomp="${pathcomp}${1}" + shift + + if [ ! -d "${pathcomp}" ] ; + then + $mkdirprog "${pathcomp}" + else + true + fi + + pathcomp="${pathcomp}/" +done +fi + +if [ x"$dir_arg" != x ] +then + $doit $instcmd $dst && + + if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi && + if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi && + if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi && + if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi +else + +# If we're going to rename the final executable, determine the name now. + + if [ x"$transformarg" = x ] + then + dstfile=`basename $dst` + else + dstfile=`basename $dst $transformbasename | + sed $transformarg`$transformbasename + fi + +# don't allow the sed command to completely eliminate the filename + + if [ x"$dstfile" = x ] + then + dstfile=`basename $dst` + else + true + fi + +# Make a temp file name in the proper directory. + + dsttmp=$dstdir/#inst.$$# + +# Move or copy the file name to the temp name + + $doit $instcmd $src $dsttmp && + + trap "rm -f ${dsttmp}" 0 && + +# and set any options; do chmod last to preserve setuid bits + +# If any of these fail, we abort the whole thing. If we want to +# ignore errors from any of these, just make sure not to ignore +# errors from the above "$doit $instcmd $src $dsttmp" command. + + if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi && + if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi && + if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi && + if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi && + +# Now rename the file to the real destination. + + $doit $rmcmd -f $dstdir/$dstfile && + $doit $mvcmd $dsttmp $dstdir/$dstfile + +fi && + + +exit 0 diff --git a/win32/advapi.c b/win32/advapi.c index 7c9baf2a101..e60c784b1cc 100644 --- a/win32/advapi.c +++ b/win32/advapi.c @@ -35,6 +35,7 @@ BOOL WINAPI GetUserNameA(LPSTR lpszName, LPDWORD lpSize) /*********************************************************************** * RegCreateKeyEx (ADVAPI32.130) */ +LONG RegCreateKey(HKEY,LPCTSTR,LPHKEY); WINAPI LONG RegCreateKeyEx(HKEY key, const char *subkey, long dontuse, diff --git a/win32/environment.c b/win32/environment.c index e754f41b978..a9152f1d688 100644 --- a/win32/environment.c +++ b/win32/environment.c @@ -25,9 +25,13 @@ LPSTR GetCommandLineA(void) char *cp; PDB *pdb = (PDB *)GlobalLock( GetCurrentPDB() ); +#ifndef WINELIB strcpy(buffer, wine_files->name); cp = buffer+strlen(buffer); *cp++ = ' '; +#else + cp = buffer; +#endif; memcpy( cp, &pdb->cmdLine[1], pdb->cmdLine[0] ); dprintf_win32(stddeb,"CommandLine = %s\n", buffer ); return buffer; diff --git a/win32/file.c b/win32/file.c index 91469641d16..2188ff55d65 100644 --- a/win32/file.c +++ b/win32/file.c @@ -30,6 +30,9 @@ extern FILE_OBJECT *hstderr; static void UnixTimeToFileTime(time_t unix_time, FILETIME *filetime); static int TranslateCreationFlags(DWORD create_flags); static int TranslateAccessFlags(DWORD access_flags); +#ifndef MAP_ANON +#define MAP_ANON 0 +#endif /*********************************************************************** * OpenFileMappingA (KERNEL32.397) @@ -43,6 +46,7 @@ WINAPI HANDLE32 OpenFileMapping(DWORD access, BOOL inherit,const char *fname) * CreateFileMappingA (KERNEL32.46) * */ +int TranslateProtectionFlags(DWORD); WINAPI HANDLE32 CreateFileMapping(HANDLE32 h,SECURITY_ATTRIBUTES *ats, DWORD pot, DWORD sh, DWORD hlow, const char * lpName ) { @@ -97,7 +101,7 @@ WINAPI void *MapViewOfFileEx(HANDLE32 handle, DWORD access, DWORD offhi, DWORD offlo, DWORD size, DWORD st) { if (!size) size = ((FILEMAP_OBJECT *)handle)->size; - return mmap (st, size, ((FILEMAP_OBJECT *)handle)->prot, + return mmap ((caddr_t)st, size, ((FILEMAP_OBJECT *)handle)->prot, MAP_ANON|MAP_PRIVATE, ((FILEMAP_OBJECT *)handle)->file_obj->fd, offlo); @@ -138,7 +142,7 @@ DWORD WINAPI GetFileInformationByHandle(FILE_OBJECT *hFile, lpfi->dwFileAttributes |= FILE_ATTRIBUTE_NORMAL; if(file_stat.st_mode & S_IFDIR) lpfi->dwFileAttributes |= FILE_ATTRIBUTE_DIRECTORY; - if(file_stat.st_mode & S_IWRITE == 0) + if((file_stat.st_mode & S_IWRITE) == 0) lpfi->dwFileAttributes |= FILE_ATTRIBUTE_READONLY; /* Translate the file times. Use the last modification time diff --git a/win32/memory.c b/win32/memory.c index 78b04fef20a..352db665bf4 100644 --- a/win32/memory.c +++ b/win32/memory.c @@ -20,6 +20,9 @@ #ifndef PROT_NONE /* FreeBSD doesn't define PROT_NONE */ #define PROT_NONE 0 #endif +#ifndef MAP_ANON +#define MAP_ANON 0 +#endif typedef struct { caddr_t ptr; @@ -33,6 +36,7 @@ int mem_used = 0; /*********************************************************************** * VirtualAlloc (KERNEL32.548) */ +int TranslateProtectionFlags(DWORD); LPVOID VirtualAlloc(LPVOID lpvAddress, DWORD cbSize, DWORD fdwAllocationType, DWORD fdwProtect) { diff --git a/win32/object_mgt.c b/win32/object_mgt.c index 07a6ed463a3..649569496dc 100644 --- a/win32/object_mgt.c +++ b/win32/object_mgt.c @@ -14,6 +14,6 @@ int ValidateKernelObject(KERNEL_OBJECT *ptr) { - return (!ptr || (short int)ptr==-1); + return (!ptr || (short int)(int)ptr==-1); } diff --git a/win32/time.c b/win32/time.c index 04d6780d682..24be6a3deed 100644 --- a/win32/time.c +++ b/win32/time.c @@ -38,6 +38,29 @@ VOID GetLocalTime(LPSYSTEMTIME systime) } /*********************************************************************** + * GetSystemTime (KERNEL32.285) + */ +VOID GetSystemTime(LPSYSTEMTIME systime) +{ + time_t local_time; + struct tm *local_tm; + struct timeval tv; + + time(&local_time); + local_tm = gmtime(&local_time); + gettimeofday(&tv, NULL); + + systime->wYear = local_tm->tm_year + 1900; + systime->wMonth = local_tm->tm_mon + 1; + systime->wDayOfWeek = local_tm->tm_wday; + systime->wDay = local_tm->tm_mday; + systime->wHour = local_tm->tm_hour; + systime->wMinute = local_tm->tm_min; + systime->wSecond = local_tm->tm_sec; + systime->wMilliseconds = (tv.tv_usec / 1000) % 1000; +} + +/*********************************************************************** * GetTimeZoneInformation (KERNEL32.302) */ DWORD GetTimeZoneInformation(LPTIME_ZONE_INFORMATION tzinfo) @@ -55,3 +78,12 @@ DWORD GetTimeZoneInformation(LPTIME_ZONE_INFORMATION tzinfo) return TIME_ZONE_ID_UNKNOWN; } +/*********************************************************************** + * Sleep (KERNEL32.523) + */ +VOID Sleep(DWORD cMilliseconds) +{ + if(cMilliseconds == INFINITE) + while(1) { /* Spin forever */ } + usleep(cMilliseconds*1000); +} diff --git a/windows/defwnd.c b/windows/defwnd.c index bc901b046ea..42aad583b46 100644 --- a/windows/defwnd.c +++ b/windows/defwnd.c @@ -328,7 +328,7 @@ LRESULT DefWindowProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam ) len = 1; while(len < 64) if( (hI = LoadIcon(wndPtr->hInstance,MAKEINTRESOURCE(len))) ) - return hI; + return (LRESULT)hI; } break; diff --git a/windows/dialog.c b/windows/dialog.c index 8f7cdb0141d..1ed5fe1d733 100644 --- a/windows/dialog.c +++ b/windows/dialog.c @@ -218,7 +218,7 @@ HWND CreateDialogParam( HINSTANCE hInst, SEGPTR dlgTemplate, HGLOBAL hmem; SEGPTR data; - dprintf_dialog(stddeb, "CreateDialogParam: "NPFMT",%08lx,"NPFMT",%08lx,%ld\n", + dprintf_dialog(stddeb, "CreateDialogParam: "NPFMT","SPFMT","NPFMT",%08lx,%ld\n", hInst, dlgTemplate, owner, (DWORD)dlgProc, param ); if (!(hRsrc = FindResource( hInst, dlgTemplate, RT_DIALOG ))) return 0; @@ -523,7 +523,7 @@ int DialogBoxParam( HINSTANCE hInst, SEGPTR dlgTemplate, { HWND hwnd; - dprintf_dialog(stddeb, "DialogBoxParam: "NPFMT",%08lx,"NPFMT",%08lx,%ld\n", + dprintf_dialog(stddeb, "DialogBoxParam: "NPFMT","SPFMT","NPFMT",%08lx,%ld\n", hInst, dlgTemplate, owner, (DWORD)dlgProc, param ); hwnd = CreateDialogParam( hInst, dlgTemplate, owner, dlgProc, param ); if (hwnd) return DIALOG_DoDialogBox( hwnd, owner ); @@ -751,7 +751,7 @@ void SetDlgItemInt( HWND hwnd, WORD id, WORD value, BOOL fSigned ) if (fSigned) sprintf( str, "%d", (int)value ); else sprintf( str, "%u", value ); - SendDlgItemMessage( hwnd, id, WM_SETTEXT, 0, MAKE_SEGPTR(str) ); + SendDlgItemMessage( hwnd, id, WM_SETTEXT, 0, (LPARAM)MAKE_SEGPTR(str) ); } @@ -764,7 +764,7 @@ WORD GetDlgItemInt( HWND hwnd, WORD id, BOOL * translated, BOOL fSigned ) long result = 0; if (translated) *translated = FALSE; - if (SendDlgItemMessage( hwnd, id, WM_GETTEXT, 30, MAKE_SEGPTR(str) )) + if (SendDlgItemMessage( hwnd, id, WM_GETTEXT, 30, (LPARAM)MAKE_SEGPTR(str) )) { char * endptr; result = strtol( str, &endptr, 10 ); diff --git a/windows/event.c b/windows/event.c index 301e91fd8a5..780cc3119f5 100644 --- a/windows/event.c +++ b/windows/event.c @@ -534,7 +534,7 @@ static void EVENT_ConfigureNotify( HWND hwnd, XConfigureEvent *event ) winpos.flags |= SWP_NOSIZE; /* Send WM_WINDOWPOSCHANGING */ - SendMessage(hwnd, WM_WINDOWPOSCHANGING, 0, MAKE_SEGPTR(&winpos)); + SendMessage(hwnd, WM_WINDOWPOSCHANGING, 0, (LPARAM)MAKE_SEGPTR(&winpos)); /* Calculate new position and size */ newWindowRect.left = event->x; @@ -549,7 +549,7 @@ static void EVENT_ConfigureNotify( HWND hwnd, XConfigureEvent *event ) /* Set new size and position */ wndPtr->rectWindow = newWindowRect; wndPtr->rectClient = newClientRect; - SendMessage(hwnd, WM_WINDOWPOSCHANGED, 0, MAKE_SEGPTR(&winpos)); + SendMessage(hwnd, WM_WINDOWPOSCHANGED, 0, (LPARAM)MAKE_SEGPTR(&winpos)); } } diff --git a/windows/focus.c b/windows/focus.c index 6e8e46a1297..bbd591bded7 100644 --- a/windows/focus.c +++ b/windows/focus.c @@ -11,7 +11,7 @@ #include "winpos.h" #include "hook.h" #include "color.h" - +#include "options.h" static HWND hwndFocus = 0; @@ -25,8 +25,9 @@ static void FOCUS_SetXFocus( HWND hwnd ) XWindowAttributes win_attr; Window win; - /* Only mess with the X focus if there's no desktop window */ - if (rootWindow != DefaultRootWindow(display)) return; + /* Only mess with the X focus if there's */ + /* no desktop window and no window manager. */ + if ((rootWindow != DefaultRootWindow(display)) || Options.managed) return; if (!hwnd) /* If setting the focus to 0, uninstall the colormap */ { @@ -53,11 +54,11 @@ void FOCUS_SwitchFocus(HWND hFocusFrom, HWND hFocusTo) { hwndFocus = hFocusTo; - if (hFocusFrom) SendMessage( hFocusFrom, WM_KILLFOCUS, hFocusTo, 0L); + if (hFocusFrom) SendMessage( hFocusFrom, WM_KILLFOCUS, (WPARAM)hFocusTo, 0L); if( !hFocusTo || hFocusTo != hwndFocus ) return; - SendMessage( hFocusTo, WM_SETFOCUS, hFocusFrom, 0L); + SendMessage( hFocusTo, WM_SETFOCUS, (WPARAM)hFocusFrom, 0L); FOCUS_SetXFocus( hFocusTo ); } @@ -88,7 +89,7 @@ HWND SetFocus(HWND hwnd) if( hwnd == hwndFocus ) return hwnd; /* call hooks */ - if( HOOK_CallHooks( WH_CBT, HCBT_SETFOCUS, hwnd, hwndFocus) ) + if( HOOK_CallHooks( WH_CBT, HCBT_SETFOCUS, (WPARAM)hwnd, (LPARAM)hwndFocus) ) return 0; /* activate hwndTop if needed. */ @@ -99,7 +100,7 @@ HWND SetFocus(HWND hwnd) if (!IsWindow( hwnd )) return 0; /* Abort if window destroyed */ } } - else if( HOOK_CallHooks( WH_CBT, HCBT_SETFOCUS, 0, hwndFocus ) ) + else if( HOOK_CallHooks( WH_CBT, HCBT_SETFOCUS, 0, (LPARAM)hwndFocus ) ) return 0; /* Change focus and send messages */ diff --git a/windows/hook.c b/windows/hook.c index 2460cad52fd..abb6c7f8356 100644 --- a/windows/hook.c +++ b/windows/hook.c @@ -226,7 +226,7 @@ FARPROC SetWindowsHook( short id, HOOKPROC proc ) HTASK hTask = (id == WH_MSGFILTER) ? GetCurrentTask() : 0; HANDLE handle = HOOK_SetHook( id, proc, hInst, hTask ); - if (!handle) return -1; + if (!handle) return (FARPROC)-1; if (!((HOOKDATA *)USER_HEAP_LIN_ADDR( handle ))->next) return 0; /* Not sure if the return value is correct; should not matter much * since it's never used (see DefHookProc). -- AJ */ @@ -319,7 +319,11 @@ BOOL UnhookWindowsHookEx( HHOOK hhook ) DWORD CallNextHookEx( HHOOK hhook, short code, WPARAM wParam, LPARAM lParam ) { HANDLE next; +#ifdef WINELIB32 + if (!(next = HOOK_GetNextHook( (HANDLE)hhook ))) return 0; +#else if (HIWORD(hhook) != HOOK_MAGIC) return 0; /* Not a new format hook */ if (!(next = HOOK_GetNextHook( LOWORD(hhook) ))) return 0; +#endif return HOOK_CallHook( next, code, wParam, lParam ); } diff --git a/windows/mdi.c b/windows/mdi.c index 0fe19aa4479..86d54132a36 100644 --- a/windows/mdi.c +++ b/windows/mdi.c @@ -58,6 +58,7 @@ static HWND MDI_GetChildByID(WND* mdiClient,int id) /********************************************************************** * MDI_MenuAppendItem */ +#ifdef SUPERFLUOUS_FUNCTIONS static BOOL MDI_MenuAppendItem(WND *clientWnd, HWND hWndChild) { char buffer[128]; @@ -74,6 +75,7 @@ static BOOL MDI_MenuAppendItem(WND *clientWnd, HWND hWndChild) return AppendMenu(clientInfo->hWindowMenu,MF_STRING, wndPtr->wIDmenu,(LPSTR)buffer); } +#endif /********************************************************************** * MDI_MenuModifyItem @@ -245,7 +247,8 @@ HWND MDICreateChild(WND *w, MDICLIENTINFO *ci, HWND parent, LPARAM lParam ) WS_MAXIMIZEBOX | WS_MINIMIZEBOX | WS_SYSMENU | WS_THICKFRAME | WS_VISIBLE | cs->style, cs->x, cs->y, cs->cx, cs->cy, parent, - (HMENU) wIDmenu, w->hInstance, (SEGPTR)lParam); + (HMENU)(DWORD)(WORD)wIDmenu, w->hInstance, + (SEGPTR)lParam); if (hwnd) { @@ -376,7 +379,7 @@ HWND MDIDestroyChild(WND *w_parent, MDICLIENTINFO *ci, HWND parent, ci->nActiveChildren--; if( ci->flagChildMaximized == child ) - ci->flagChildMaximized = 1; + ci->flagChildMaximized = (HWND)1; if (flagDestroy) { @@ -477,8 +480,13 @@ LONG MDI_ChildActivate(WND *clientPtr, HWND hWndChild) if( wndPrev ) { SendMessage( prevActiveWnd, WM_NCACTIVATE, FALSE, 0L ); +#ifdef WINELIB32 + SendMessage( prevActiveWnd, WM_MDIACTIVATE, (WPARAM)prevActiveWnd, + (LPARAM)hWndChild); +#else SendMessage( prevActiveWnd, WM_MDIACTIVATE, FALSE, MAKELONG(hWndChild,prevActiveWnd)); +#endif /* uncheck menu item */ if( clientInfo->hWindowMenu ) CheckMenuItem( clientInfo->hWindowMenu, @@ -517,13 +525,18 @@ LONG MDI_ChildActivate(WND *clientPtr, HWND hWndChild) SendMessage( hWndChild, WM_NCACTIVATE, TRUE, 0L); if( GetFocus() == GetParent(hWndChild) ) SendMessage( GetParent(hWndChild), WM_SETFOCUS, - GetParent(hWndChild), 0L ); + (WPARAM)GetParent(hWndChild), 0L ); else SetFocus( GetParent(hWndChild) ); } +#ifdef WINELIB32 + SendMessage( hWndChild, WM_MDIACTIVATE, (WPARAM)hWndChild, + (LPARAM)prevActiveWnd ); +#else SendMessage( hWndChild, WM_MDIACTIVATE, TRUE, MAKELONG(prevActiveWnd,hWndChild) ); +#endif return 1; } @@ -678,6 +691,10 @@ LONG MDITile(HWND parent, MDICLIENTINFO *ci) if( !listTop ) return 0; + /* just free memory and return if zero windows to tile */ + if ( iToPosition == 0 ) + goto MDITile_free; + GetClientRect(parent, &rect); rows = (int) sqrt((double) iToPosition); @@ -725,7 +742,8 @@ LONG MDITile(HWND parent, MDICLIENTINFO *ci) x += xsize; } - + + MDITile_free: /* free the rest if any */ while( listTop ) { listPrev = listTop->prev; @@ -791,7 +809,7 @@ LONG MDIPaintMaximized(HWND hwndFrame, HWND hwndClient, WORD message, dprintf_mdi(stddeb, "MDIPaintMaximized: frame "NPFMT", client "NPFMT ", max flag %d, menu %04x\n", hwndFrame, hwndClient, - ci->flagChildMaximized, wndPtr ? wndPtr->wIDmenu : 0); + (int)ci->flagChildMaximized, wndPtr ? wndPtr->wIDmenu : 0); if (ci->flagChildMaximized && wndPtr && wndPtr->wIDmenu != 0) { @@ -881,7 +899,7 @@ LRESULT MDIClientWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) return 0; case WM_MDIACTIVATE: - SetWindowPos(wParam,0,0,0,0,0, SWP_NOSIZE | SWP_NOMOVE ); + SetWindowPos((HWND)wParam,0,0,0,0,0, SWP_NOSIZE | SWP_NOMOVE ); return 0; case WM_MDICASCADE: @@ -891,7 +909,7 @@ LRESULT MDIClientWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) return (LONG)MDICreateChild(w, ci, hwnd, lParam ); case WM_MDIDESTROY: - return MDIDestroyChild(w, ci, hwnd, wParam, TRUE); + return (LONG)MDIDestroyChild(w, ci, hwnd, (HWND)wParam, TRUE); case WM_MDIGETACTIVE: return ((LONG) ci->hwndActiveChild | @@ -905,7 +923,7 @@ LRESULT MDIClientWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) return 0; case WM_MDIMAXIMIZE: - return MDIMaximizeChild(hwnd, wParam, ci); + return MDIMaximizeChild(hwnd, (HWND)wParam, ci); case WM_MDINEXT: MDI_SwitchActiveChild(hwnd, (HWND)wParam, lParam); @@ -915,7 +933,11 @@ LRESULT MDIClientWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) return MDIRestoreChild(hwnd, ci); case WM_MDISETMENU: - return MDISetMenu(hwnd, wParam, LOWORD(lParam), HIWORD(lParam)); +#ifdef WINELIB32 + return (LRESULT)MDISetMenu(hwnd, FALSE, (HMENU)wParam, (HMENU)lParam); +#else + return (LRESULT)MDISetMenu(hwnd, wParam, LOWORD(lParam), HIWORD(lParam)); +#endif case WM_MDITILE: ci->sbStop = TRUE; @@ -989,7 +1011,11 @@ LRESULT DefFrameProc(HWND hwnd, HWND hwndMDIClient, UINT message, childHwnd = MDI_GetChildByID( WIN_FindWndPtr(hwndMDIClient), wParam ); if( childHwnd ) +#ifdef WINELIB32 /* FIXME: need to find out the equivalent Win32 message */ + SendMessage(hwndMDIClient, WM_MDIACTIVATE, 0 , 0); +#else SendMessage(hwndMDIClient, WM_MDIACTIVATE, childHwnd , 0L); +#endif break; case WM_NCLBUTTONDOWN: @@ -1048,7 +1074,7 @@ LONG DefMDIChildProc(HWND hwnd, WORD message, WORD wParam, LONG lParam) return 0; case WM_CLOSE: - SendMessage(GetParent(hwnd),WM_MDIDESTROY,hwnd,0L); + SendMessage(GetParent(hwnd),WM_MDIDESTROY,(WPARAM)hwnd,0L); return 0; case WM_SIZE: @@ -1158,11 +1184,11 @@ void CalcChildScroll( HWND hwnd, WORD scroll ) void ScrollChildren(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { WND *wndPtr = WIN_FindWndPtr(hWnd); - short newPos; + short newPos=-1; short curPos; short length; - short minPos; - short maxPos; + INT minPos; + INT maxPos; short shift; if( !wndPtr ) return; diff --git a/windows/message.c b/windows/message.c index 23afe53f92a..43bb4e4e9d3 100644 --- a/windows/message.c +++ b/windows/message.c @@ -1152,7 +1152,7 @@ LRESULT SendMessage( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam ) EnterSpyMessage(SPY_SENDMESSAGE, hwnd, msg, wParam, lParam); - HOOK_CallHooks( WH_CALLWNDPROC, HC_ACTION, 1, MAKE_SEGPTR(&msgstruct) ); + HOOK_CallHooks( WH_CALLWNDPROC, HC_ACTION, 1, (LPARAM)MAKE_SEGPTR(&msgstruct) ); if (!(wndPtr = WIN_FindWndPtr( hwnd ))) { ExitSpyMessage(SPY_RESULT_INVALIDHWND,hwnd,msg,0); @@ -1225,8 +1225,10 @@ LONG DispatchMessage( LPMSG msg ) { if (msg->lParam) { +#ifndef WINELIB32 HINSTANCE ds = msg->hwnd ? WIN_GetWindowInstance( msg->hwnd ) : (HINSTANCE)CURRENT_DS; +#endif /* HOOK_CallHooks( WH_CALLWNDPROC, HC_ACTION, 0, FIXME ); */ return CallWndProc( (WNDPROC)msg->lParam, ds, msg->hwnd, msg->message, msg->wParam, GetTickCount() ); @@ -1293,7 +1295,7 @@ LONG GetMessageExtraInfo(void) */ WORD RegisterWindowMessage( SEGPTR str ) { - dprintf_msg(stddeb, "RegisterWindowMessage: '%08lx'\n", str ); + dprintf_msg(stddeb, "RegisterWindowMessage: '"SPFMT"'\n", str ); return GlobalAddAtom( str ); } diff --git a/windows/msgbox.c b/windows/msgbox.c index ddb9690b67d..a83b8cc647c 100644 --- a/windows/msgbox.c +++ b/windows/msgbox.c @@ -7,12 +7,11 @@ #include "windows.h" #include "dlgs.h" -#include "global.h" #include "selectors.h" #include "alias.h" #include "relay32.h" #include "win.h" -#include "../rc/sysres.h" +#include "resource.h" #include "task.h" typedef struct { @@ -201,15 +200,13 @@ int MessageBox(HWND hWnd, LPSTR text, LPSTR title, WORD type) initialized=1; } - handle = GLOBAL_CreateBlock( GMEM_FIXED, sysres_DIALOG_MSGBOX.bytes, - sysres_DIALOG_MSGBOX.size, GetCurrentPDB(), - FALSE, FALSE, TRUE, NULL ); + handle = SYSRES_LoadResource( SYSRES_DIALOG_MSGBOX ); if (!handle) return 0; ret = DialogBoxIndirectParam( WIN_GetWindowInstance(hWnd), handle, hWnd, GetWndProcEntry16("SystemMessageBoxProc"), (LONG)&mbox ); - GLOBAL_FreeBlock( handle ); + SYSRES_FreeResource( handle ); return ret; } diff --git a/windows/nonclient.c b/windows/nonclient.c index 9df7ae5e45f..863b1c17495 100644 --- a/windows/nonclient.c +++ b/windows/nonclient.c @@ -174,16 +174,16 @@ void NC_GetMinMaxInfo( HWND hwnd, POINT *maxSize, POINT *maxPos, MinMax.ptMaxPosition.y = -yinc; } - SendMessage( hwnd, WM_GETMINMAXINFO, 0, MAKE_SEGPTR(&MinMax) ); + SendMessage( hwnd, WM_GETMINMAXINFO, 0, (LPARAM)MAKE_SEGPTR(&MinMax) ); /* Some sanity checks */ dprintf_nonclient(stddeb, "NC_GetMinMaxInfo: %d %d / %d %d / %d %d / %d %d\n", - MinMax.ptMaxSize.x,MinMax.ptMaxSize.y, - MinMax.ptMaxPosition.x,MinMax.ptMaxPosition.y, - MinMax.ptMaxTrackSize.x,MinMax.ptMaxTrackSize.y, - MinMax.ptMinTrackSize.x,MinMax.ptMinTrackSize.y); + (int)MinMax.ptMaxSize.x,(int)MinMax.ptMaxSize.y, + (int)MinMax.ptMaxPosition.x,(int)MinMax.ptMaxPosition.y, + (int)MinMax.ptMaxTrackSize.x,(int)MinMax.ptMaxTrackSize.y, + (int)MinMax.ptMinTrackSize.x,(int)MinMax.ptMinTrackSize.y); MinMax.ptMaxTrackSize.x = MAX( MinMax.ptMaxTrackSize.x, MinMax.ptMinTrackSize.x ); MinMax.ptMaxTrackSize.y = MAX( MinMax.ptMaxTrackSize.y, @@ -892,7 +892,7 @@ static LONG NC_StartSizeMove( HWND hwnd, WPARAM wParam, POINT *capturePoint ) } *capturePoint = pt; SetCursorPos( capturePoint->x, capturePoint->y ); - NC_HandleSetCursor( hwnd, hwnd, MAKELONG( hittest, WM_MOUSEMOVE )); + NC_HandleSetCursor( hwnd, (WPARAM)hwnd, MAKELONG( hittest, WM_MOUSEMOVE )); return hittest; } diff --git a/windows/property.c b/windows/property.c index 601615f8536..1dcafb82d55 100644 --- a/windows/property.c +++ b/windows/property.c @@ -31,7 +31,7 @@ BOOL SetProp( HWND hwnd, SEGPTR str, HANDLE hData ) PROPERTY *prop; WND *wndPtr; - dprintf_prop( stddeb, "SetProp: "NPFMT" %08lx "NPFMT"\n", hwnd, str, hData ); + dprintf_prop( stddeb, "SetProp: "NPFMT" "SPFMT" "NPFMT"\n", hwnd, str, hData ); if (!(wndPtr = WIN_FindWndPtr( hwnd ))) return FALSE; hProp = USER_HEAP_ALLOC( sizeof(PROPERTY) + (HIWORD(str) ? strlen(PTR_SEG_TO_LIN(str)) : 0 )); @@ -62,7 +62,7 @@ HANDLE GetProp( HWND hwnd, SEGPTR str ) HANDLE hProp; WND *wndPtr; - dprintf_prop( stddeb, "GetProp: "NPFMT" %08lx\n", hwnd, str ); + dprintf_prop( stddeb, "GetProp: "NPFMT" "SPFMT"\n", hwnd, str ); if (!(wndPtr = WIN_FindWndPtr( hwnd ))) return 0; hProp = wndPtr->hProp; while (hProp) @@ -88,7 +88,7 @@ HANDLE RemoveProp( HWND hwnd, SEGPTR str ) HANDLE *hProp; WND *wndPtr; - dprintf_prop( stddeb, "RemoveProp: "NPFMT" %08lx\n", hwnd, str ); + dprintf_prop( stddeb, "RemoveProp: "NPFMT" "SPFMT"\n", hwnd, str ); if (!(wndPtr = WIN_FindWndPtr( hwnd ))) return 0; hProp = &wndPtr->hProp; while (*hProp) diff --git a/windows/scroll.c b/windows/scroll.c index e8652cffa18..9c5ad2bf982 100644 --- a/windows/scroll.c +++ b/windows/scroll.c @@ -19,7 +19,7 @@ -extern DCE_GetVisRgn(HWND, WORD); +extern HRGN DCE_GetVisRgn(HWND, WORD); static int RgnType; @@ -127,10 +127,10 @@ void ScrollWindow(HWND hwnd, short dx, short dy, LPRECT rect, LPRECT clipRect) RECT rc, cliprc; dprintf_scroll(stddeb,"ScrollWindow: dx=%d, dy=%d, lpRect =%08lx clipRect=%i,%i,%i,%i\n", - dx, dy, (LONG)rect, (clipRect)?clipRect->left:0, - (clipRect)?clipRect->top:0, - (clipRect)?clipRect->right:0, - (clipRect)?clipRect->bottom:0); + dx, dy, (LONG)rect, (int)((clipRect)?clipRect->left:0), + (int)((clipRect)?clipRect->top:0), + (int)((clipRect)?clipRect->right:0), + (int)((clipRect)?clipRect->bottom:0)); /* if rect is NULL children have to be moved */ if ( !rect ) @@ -146,8 +146,9 @@ void ScrollWindow(HWND hwnd, short dx, short dy, LPRECT rect, LPRECT clipRect) { GetClientRect(hwnd,&rc); dprintf_scroll(stddeb,"\trect=%i %i %i %i client=%i %i %i %i\n", - rect->left,rect->top,rect->right,rect->bottom,rc.left,rc.top, - rc.right,rc.bottom); + (int)rect->left,(int)rect->top,(int)rect->right, + (int)rect->bottom,(int)rc.left,(int)rc.top, + (int)rc.right,(int)rc.bottom); CopyRect(&rc, rect); hdc = GetDC(hwnd); @@ -206,10 +207,10 @@ BOOL ScrollDC(HDC hdc, short dx, short dy, LPRECT rc, LPRECT cliprc, DC *dc = (DC *)GDI_GetObjPtr(hdc, DC_MAGIC); dprintf_scroll(stddeb,"ScrollDC: dx=%d dy=%d, hrgnUpdate="NPFMT" rc=%i %i %i %i\n", - dx,dy,hrgnUpdate,(rc)?rc->left:0, - (rc)?rc->top:0, - (rc)?rc->right:0, - (rc)?rc->bottom:0); + dx,dy,hrgnUpdate,(int)((rc)?rc->left:0), + (int)((rc)?rc->top:0), + (int)((rc)?rc->right:0), + (int)((rc)?rc->bottom:0)); if (rc == NULL) return FALSE; @@ -288,7 +289,7 @@ int ScrollWindowEx(HWND hwnd, short dx, short dy, LPRECT rect, LPRECT clipRect, HDC hdc; RECT rc, cliprc; - dprintf_scroll(stddeb,"ScrollWindowEx: dx=%d, dy=%d, wFlags="NPFMT"\n",dx, dy, flags); + dprintf_scroll(stddeb,"ScrollWindowEx: dx=%d, dy=%d, wFlags=%04x\n",dx, dy, flags); hdc = GetDC(hwnd); diff --git a/windows/win.c b/windows/win.c index 1848a3bd2d1..da50aec5734 100644 --- a/windows/win.c +++ b/windows/win.c @@ -496,7 +496,7 @@ HWND CreateWindowEx( DWORD exStyle, SEGPTR className, SEGPTR windowName, createStruct.lpszClass = className; createStruct.dwExStyle = 0; - wmcreate = SendMessage( hwnd, WM_NCCREATE, 0, MAKE_SEGPTR(&createStruct) ); + wmcreate = SendMessage( hwnd, WM_NCCREATE, 0, (LPARAM)MAKE_SEGPTR(&createStruct) ); if (!wmcreate) { dprintf_win(stddeb,"CreateWindowEx: WM_NCCREATE return 0\n"); @@ -506,7 +506,7 @@ HWND CreateWindowEx( DWORD exStyle, SEGPTR className, SEGPTR windowName, { WINPOS_SendNCCalcSize( hwnd, FALSE, &wndPtr->rectWindow, NULL, NULL, NULL, &wndPtr->rectClient ); - wmcreate = SendMessage(hwnd, WM_CREATE, 0, MAKE_SEGPTR(&createStruct)); + wmcreate = SendMessage(hwnd, WM_CREATE, 0, (LPARAM)MAKE_SEGPTR(&createStruct)); } if (wmcreate == -1) @@ -1309,8 +1309,8 @@ BOOL DRAG_QueryUpdate( HWND hQueryWnd, SEGPTR spDragInfo ) if(ptrWnd) dprintf_msg(stddeb,"DragQueryUpdate: hwnd = "NPFMT", %i %i - %i %i\n",hWnd, - ptrWnd->rectWindow.left,ptrWnd->rectWindow.top, - ptrWnd->rectWindow.right,ptrWnd->rectWindow.bottom); + (int)ptrWnd->rectWindow.left,(int)ptrWnd->rectWindow.top, + (int)ptrWnd->rectWindow.right,(int)ptrWnd->rectWindow.bottom); else dprintf_msg(stddeb,"DragQueryUpdate: hwnd = "NPFMT"\n",hWnd); @@ -1460,7 +1460,7 @@ DWORD DragObject(HWND hwndScope, HWND hWnd, WORD wObj, HANDLE hOfStruct, if( hCurrentCursor ) SetCursor(hCurrentCursor); - dprintf_msg(stddeb,"drag: got "NPFMT"\n",btemp); + dprintf_msg(stddeb,"drag: got %04x\n",btemp); /* send WM_DRAGLOOP */ SendMessage( hWnd, WM_DRAGLOOP, (WPARAM)(hCurrentCursor != hBummer) , @@ -1498,7 +1498,7 @@ DWORD DragObject(HWND hwndScope, HWND hWnd, WORD wObj, HANDLE hOfStruct, if( hCurrentCursor != hBummer ) dwRet = SendMessage( lpDragInfo->hScope, WM_DROPOBJECT, - hWnd, (LPARAM)spDragInfo ); + (WPARAM)hWnd, (LPARAM)spDragInfo ); GlobalFree(hDragInfo); return dwRet; diff --git a/windows/winpos.c b/windows/winpos.c index 97109b7df83..659cd2f963f 100644 --- a/windows/winpos.c +++ b/windows/winpos.c @@ -583,7 +583,7 @@ BOOL ACTIVATEAPP_callback(HWND hWnd, LPARAM lParam) return 1; SendMessage( hWnd, WM_ACTIVATEAPP, lpActStruct->wFlag, - (LPARAM)(lpActStruct->hWindowTask)?lpActStruct->hWindowTask:0); + (LPARAM)((lpActStruct->hWindowTask)?lpActStruct->hWindowTask:0)); return 1; } @@ -615,7 +615,7 @@ BOOL WINPOS_SetActiveWindow( HWND hWnd, BOOL fMouse, BOOL fChangeFocus ) dprintf_win(stddeb,"WINPOS_ActivateWindow: no current active window.\n"); /* call CBT hook chain */ - wRet = HOOK_CallHooks(WH_CBT, HCBT_ACTIVATE, hWnd, + wRet = HOOK_CallHooks(WH_CBT, HCBT_ACTIVATE, (WPARAM)hWnd, (LPARAM)MAKE_SEGPTR(&cbtStruct)); if( wRet ) return wRet; @@ -623,6 +623,7 @@ BOOL WINPOS_SetActiveWindow( HWND hWnd, BOOL fMouse, BOOL fChangeFocus ) /* set prev active wnd to current active wnd and send notification */ if( (hwndPrevActive = hwndActive) ) { +/* FIXME: need a Win32 translation for WINELIB32 */ if( !SendMessage(hwndPrevActive, WM_NCACTIVATE, 0, MAKELONG(hWnd,wIconized)) ) { if (GetSysModalWindow() != hWnd) return 0; @@ -647,7 +648,7 @@ BOOL WINPOS_SetActiveWindow( HWND hWnd, BOOL fMouse, BOOL fChangeFocus ) /* send palette messages */ if( SendMessage( hWnd, WM_QUERYNEWPALETTE, 0, 0L) ) - SendMessage((HWND)-1, WM_PALETTEISCHANGING, hWnd, 0L ); + SendMessage((HWND)-1, WM_PALETTEISCHANGING, (WPARAM)hWnd, 0L ); /* if prev wnd is minimized redraw icon title if( hwndPrevActive ) @@ -718,6 +719,7 @@ BOOL WINPOS_SetActiveWindow( HWND hWnd, BOOL fMouse, BOOL fChangeFocus ) wndTemp->hwndLastActive = hWnd; wIconized = HIWORD(wndTemp->dwStyle & WS_MINIMIZE); +/* FIXME: Needs a Win32 translation for WINELIB32 */ SendMessage( hWnd, WM_NCACTIVATE, 1, MAKELONG(hwndPrevActive,wIconized)); #ifdef WINELIB32 @@ -753,26 +755,26 @@ BOOL WINPOS_SetActiveWindow( HWND hWnd, BOOL fMouse, BOOL fChangeFocus ) * WINPOS_ChangeActiveWindow * */ -HWND WINPOS_ChangeActiveWindow( HWND hWnd, BOOL mouseMsg ) +BOOL WINPOS_ChangeActiveWindow( HWND hWnd, BOOL mouseMsg ) { WND *wndPtr = WIN_FindWndPtr(hWnd); - if( !wndPtr ) return 0; + if( !wndPtr ) return FALSE; /* minors are not allowed */ if( (wndPtr->dwStyle & WS_CHILD) && !( wndPtr->dwStyle & WS_POPUP)) return SendMessage(hWnd, WM_CHILDACTIVATE, 0, 0L); - if( hWnd == hwndActive ) return 0; + if( hWnd == hwndActive ) return FALSE; if( !WINPOS_SetActiveWindow(hWnd ,mouseMsg ,TRUE) ) - return 0; + return FALSE; /* switch desktop queue to current active here */ if( wndPtr->hwndParent == GetDesktopWindow()) { } - return 1; + return TRUE; } @@ -799,10 +801,10 @@ LONG WINPOS_SendNCCalcSize( HWND hwnd, BOOL calcValidRect, RECT *newWindowRect, params.lppos = winpos; } result = SendMessage( hwnd, WM_NCCALCSIZE, calcValidRect, - MAKE_SEGPTR( ¶ms ) ); + (LPARAM)MAKE_SEGPTR( ¶ms ) ); dprintf_win(stddeb, "WINPOS_SendNCCalcSize: %d %d %d %d\n", - params.rgrc[0].top, params.rgrc[0].left, - params.rgrc[0].bottom, params.rgrc[0].right); + (int)params.rgrc[0].top, (int)params.rgrc[0].left, + (int)params.rgrc[0].bottom, (int)params.rgrc[0].right); *newClientRect = params.rgrc[0]; return result; } @@ -1006,7 +1008,7 @@ BOOL SetWindowPos( HWND hwnd, HWND hwndInsertAfter, INT x, INT y, /* Send WM_WINDOWPOSCHANGING message */ if (!(flags & SWP_NOSENDCHANGING)) - SendMessage( hwnd, WM_WINDOWPOSCHANGING, 0, MAKE_SEGPTR(&winpos) ); + SendMessage( hwnd, WM_WINDOWPOSCHANGING, 0, (LPARAM)MAKE_SEGPTR(&winpos) ); /* Calculate new position and size */ @@ -1162,7 +1164,7 @@ BOOL SetWindowPos( HWND hwnd, HWND hwndInsertAfter, INT x, INT y, if (!(winpos.flags & SWP_NOSENDCHANGING)) SendMessage( winpos.hwnd, WM_WINDOWPOSCHANGED, - 0, MAKE_SEGPTR(&winpos) ); + 0, (LPARAM)MAKE_SEGPTR(&winpos) ); return TRUE; } diff --git a/Wine.man b/wine.man similarity index 100% rename from Wine.man rename to wine.man -- 2.11.4.GIT