Commit d7d4fdf8 authored by Alexandre Julliard's avatar Alexandre Julliard

Release 951226

Sat Dec 23 18:15:59 1995 Alexandre Julliard <julliard@sunsite.unc.edu> * [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 <john@division.co.uk> * [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 <terra@diku.dk> * [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 <bon@elektron.ikp.physik.th-darmstadt.de> * [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 <jspeter@birch.ee.vt.edu> * [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 <smoe0024@rz.uni-hildesheim.de> * [controls/edit.c] Almost rewrote EDIT_GetLineMsg. Sat Dec 16 13:51:48 MST 1995 Andrew Taylor <andrew@riscan.com> * [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 <bon@elektron.ikp.physik.th-darmstadt.de> * [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.
parent d471965c
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.
......
----------------------------------------------------------------------
Sat Dec 23 18:15:59 1995 Alexandre Julliard <julliard@sunsite.unc.edu>
* [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 <john@division.co.uk>
* [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 <terra@diku.dk>
* [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 <bon@elektron.ikp.physik.th-darmstadt.de>
* [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 <jspeter@birch.ee.vt.edu>
* [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 <smoe0024@rz.uni-hildesheim.de>
* [controls/edit.c]
Almost rewrote EDIT_GetLineMsg.
Sat Dec 16 13:51:48 MST 1995 Andrew Taylor <andrew@riscan.com>
* [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 <bon@elektron.ikp.physik.th-darmstadt.de>
* [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 <julliard@sunsite.unc.edu>
* [misc/lstr.c]
......
# 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
......@@ -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 <micky@marie.physik.tu-berlin.de>
# <patra@itp1.physik.tu-berlin.de>
# 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:
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 */
......@@ -3,9 +3,10 @@ dnl Author: Michael Patra <micky@marie.physik.tu-berlin.de>
dnl <patra@itp1.physik.tu-berlin.de>
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:
......@@ -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);
}
/***********************************************************************
......
......@@ -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;
}
......
......@@ -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 */
......
......@@ -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 {
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 (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);
}
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));
} while (!(*item & MF_END));
return next_item;
}
......
......@@ -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:
......@@ -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,": ");
......
......@@ -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");
}
......
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
......
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
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
......@@ -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
......
......@@ -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",
......
......@@ -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);
......
......@@ -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);
......
......@@ -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;
......
......@@ -6,18 +6,16 @@
#ifdef WINELIB
#include "windows.h"
#include "wintypes.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 );
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 */
......
......@@ -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 */
......
......@@ -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 );
......
......@@ -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;
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 */
......@@ -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 );
......
......@@ -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 */
......
......@@ -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);
......
......@@ -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,
......
......@@ -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;
......
TOPSRC = @top_srcdir@
X_LIBS = @X_LIBS@
XLIB = @X_PRE_LIBS@ -lXext -lX11 @X_EXTRA_LIBS@
MODULE = toolkit
MODULE = library
C_SRCS = \
atom.c \
......@@ -14,27 +12,6 @@ C_SRCS = \
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:
......@@ -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);
}
......
......@@ -7,29 +7,26 @@
#include <stdio.h>
#include <stdlib.h>
#include "libres.h"
#include "windows.h"
#include "xmalloc.h"
typedef struct RLE
{
struct resource** Resources; /* NULL-terminated array of pointers */
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");
}
/**********************************************************************
......@@ -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))
{
......
......@@ -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 )
......
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:
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).
......@@ -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<<bm->bmiHeader.biBitCount)*sizeof(RGBQUAD);
......
#include <math.h>
#include <string.h>
#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();
}
......@@ -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;
}
......
......@@ -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],
......
......@@ -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 );
}
......
......@@ -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 )
......
......@@ -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;
......
......@@ -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@
......
......@@ -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));
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) );
de->filesize = st.st_size;
de->filetime = st.st_mtime;
......
......@@ -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:
......
......@@ -10,6 +10,7 @@
#include <string.h>
#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)
{
......
......@@ -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,17 +130,38 @@ 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);
dprintf_profile(stddeb,"Loading %s\n", 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++;
......
......@@ -8,12 +8,11 @@
#include <ctype.h>
#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;
}
......
......@@ -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);
}
......@@ -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) );
{
REALMODECALL *p = (REALMODECALL *)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));
"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 */
......
......@@ -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)) );
}
......
......@@ -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;
......
......@@ -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",
......
......@@ -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 );
......
......@@ -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;
......
......@@ -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)
*/
......
......@@ -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;
......
TOPSRC = @top_srcdir@
MODULE = rc
PROGRAM = winerc
MODULE = none
C_SRCS = sysres.c
C_SRCS = y.tab.c lex.yy.c winerc.c
LANGUAGES = En Es De No Fr Fi Da
all: $(MODULE).o
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
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
$(RM) y.tab.c y.tab.h lex.yy.c $(PROGRAM)
### Dependencies:
#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
......@@ -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;i<it->size-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"
......
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:
/*
* 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 );
}
......@@ -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 */
......
#! /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
......@@ -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,
......
......@@ -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;
......
......@@ -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
......
......@@ -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)
{
......
......@@ -14,6 +14,6 @@
int ValidateKernelObject(KERNEL_OBJECT *ptr)
{
return (!ptr || (short int)ptr==-1);
return (!ptr || (short int)(int)ptr==-1);
}
......@@ -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);
}
......@@ -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;
......
......@@ -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 );
......
......@@ -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));
}
}
......
......@@ -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 */
......
......@@ -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 );
}
......@@ -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);
......@@ -726,6 +743,7 @@ 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;
......
......@@ -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 );
}
......
......@@ -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;
}
......
......@@ -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;
}
......
......@@ -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)
......
......@@ -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);
......
......@@ -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;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment