Release 960717
Wed Jul 17 16:10:16 1996 Alexandre Julliard <julliard@lrc.epfl.ch>
* [configure.in]
Generate include/config.h instead of putting everything on the
command-line.
Removed -with-malloc-debug option (not useful for end users
anyway).
Added check for memmove().
* [include/wintypes.h] [*/Makefile.in]
Added definition of __WINE__ symbol when compiling Wine code
(emulator or library) as opposed to user programs.
* [debugger/editline.c] [debugger/readline/*]
Moved all the readline code into debugger/editline.c. Removed the
readline subdirectory.
* [files/profile.c]
Added PROFILE_GetWineIniInt().
* [include/stackframe.h] [loader/task.c]
The 16-bit stackframe now also exists for Winelib (even though it
only ever contains one frame).
* [loader/module.c]
Added function MODULE_CreateDummyModule() to create a dummy Win16
module for Winelib and Win32.
* [memory/ldt.c]
Make sure the ldt entry contents will be acceptable for the Linux
kernel.
* [memory/selector.c]
Fixed SetSelectorLimit() when the limit is in pages.
* [misc/port.c]
Added memmove().
* [miscemu/dpmi.c]
Clear the segment registers that contain the selector being freed
in int31/ax=0001.
Added missing break after SelectorAccessRights call.
* [win32/struct32.c]
Added conversions for MDICREATESTRUCT.
* [windows/winproc.c]
Added message conversions for WM_MDICREATE.
Tue Jul 16 19:46:24 1996 Pavel Kankovsky <KAN@frode.dcit.cz>
* [windows/class.c]
Added GetExePtr() call in CLASS_FindClassByAtom().
Mon Jul 15 17:49:38 1996 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>
* [if1632/*.spec]
Some more trivial specs added.
* [if1632/gdi32.spec] [objects/font.c][windows/dialog.c]
CreateFont32* added, changed to new naming std.
* [include/windows.h] [include/mmsystem.h] [include/wintypes.h]
Some defines/types added.
* [win32/thread.c]
TlsSetValue() returns boolean.
* [win32/resource.c] [loader/pe_resource.c] [loader/resource.c]
[controls/menu.c] [objects/bitmap.c]
Cleanup of the resource functions, mostly changes to new naming
standard and fixing of argument types so that they agree with the
win16/win32 API.
Thu Jul 11 15:00:00 1996 Alex Korobka <alex@phm30.pharm.sunysb.edu>
* [windows/winpos.c]
ShowWindow() fixes.
* [windows/mdi.c]
Fix reversed LPARAM in WM_MDIACTIVATE.
* [wine.ini]
New option AllocSystemColors tells Wine how many colors to grab
from the system colormap.
* [objects/bitblt.c] [objects/dc.c]
Fixed pink garbage over Word buttons in PseudoColor. Added
optional DSTINVERT shortcut for faster text selection.
* [misc/wsprintf.c]
Skip bogus segmented pointers in wsvnprintf16().
* [objects/gdiobj.c]
Added palette handling to UnrealizeObject().
* [objects/color.c] [objects/palette.c] [windows/dce.c]
Wine gets palette manager with support for more than 20 colors.
Only PseudoColor and TrueColor visuals tested so far.
* [windows/winpos.c] [windows/win.c]
Set X size hints for WS_EX_DLGMODALFRAME windows (no resize) and
use XReconfigureWMWindows() instead of XConfigureWindow() in
managed mode.
* [memory/global.c]
Do not allocate more than 640K of DOS memory.
* [misc/main.c]
Do not allow -desktop and -managed together.
diff --git a/controls/Makefile.in b/controls/Makefile.in
index 3b018a4..6dde058 100644
--- a/controls/Makefile.in
+++ b/controls/Makefile.in
@@ -1,6 +1,6 @@
-TOPSRC = @top_srcdir@
-
-MODULE = controls
+DEFS = -D__WINE__
+TOPSRC = @top_srcdir@
+MODULE = controls
C_SRCS = \
button.c \
diff --git a/controls/button.c b/controls/button.c
index 620f288..c0aca7e 100644
--- a/controls/button.c
+++ b/controls/button.c
@@ -98,7 +98,7 @@
if (!hbitmapCheckBoxes)
{
BITMAP16 bmp;
- hbitmapCheckBoxes = LoadBitmap(0, MAKEINTRESOURCE(OBM_CHECKBOXES));
+ hbitmapCheckBoxes = LoadBitmap16(0, MAKEINTRESOURCE(OBM_CHECKBOXES));
GetObject16( hbitmapCheckBoxes, sizeof(bmp), &bmp );
checkBoxWidth = bmp.bmWidth / 4;
checkBoxHeight = bmp.bmHeight / 3;
diff --git a/controls/combo.c b/controls/combo.c
index 7006776..989c0b2 100644
--- a/controls/combo.c
+++ b/controls/combo.c
@@ -51,7 +51,7 @@
BITMAP16 bm;
dprintf_combo(stddeb, "COMBO_Init\n");
- hComboBit = LoadBitmap(0, MAKEINTRESOURCE(OBM_COMBO));
+ hComboBit = LoadBitmap16(0, MAKEINTRESOURCE(OBM_COMBO));
GetObject16( hComboBit, sizeof(bm), &bm );
CBitHeight = bm.bmHeight;
CBitWidth = bm.bmWidth;
diff --git a/controls/desktop.c b/controls/desktop.c
index 9b01ae7..b9fa9dd 100644
--- a/controls/desktop.c
+++ b/controls/desktop.c
@@ -154,7 +154,7 @@
ExitWindows( 0, 0 );
case WM_SETCURSOR:
- return (LRESULT)SetCursor( LoadCursor( 0, IDC_ARROW ) );
+ return (LRESULT)SetCursor( LoadCursor16( 0, IDC_ARROW ) );
}
return 0;
diff --git a/controls/edit.c b/controls/edit.c
index f96c3c1..5dae7f9 100644
--- a/controls/edit.c
+++ b/controls/edit.c
@@ -617,7 +617,7 @@
EDITWORDBREAKPROC wbp = (EDITWORDBREAKPROC)EDIT_EM_GetWordBreakProc(wndPtr, 0, 0L);
if (wbp) {
- return CallWordBreakProc((FARPROC)wbp,
+ return CallWordBreakProc((FARPROC16)wbp,
(LONG)MAKE_SEGPTR(s), index, count, action);
} else
return EDIT_WordBreakProc(s, index, count, action);
@@ -2107,7 +2107,7 @@
static LRESULT EDIT_WM_Char(WND *wndPtr, WPARAM wParam, LPARAM lParam)
{
char str[2];
- char c = (char)wParam;
+ unsigned char c = (unsigned char)wParam;
switch (c) {
case '\r':
@@ -2739,7 +2739,7 @@
static LRESULT EDIT_WM_SetCursor(WND *wndPtr, WPARAM wParam, LPARAM lParam)
{
if (LOWORD(lParam) == HTCLIENT) {
- SetCursor(LoadCursor(0, IDC_IBEAM));
+ SetCursor(LoadCursor16(0, IDC_IBEAM));
return -1L;
} else
return 0L;
diff --git a/controls/menu.c b/controls/menu.c
index 49bd762..c880829 100644
--- a/controls/menu.c
+++ b/controls/menu.c
@@ -136,12 +136,12 @@
/* Load bitmaps */
- if (!(hStdCheck = LoadBitmap( 0, MAKEINTRESOURCE(OBM_CHECK) )))
+ if (!(hStdCheck = LoadBitmap16( 0, MAKEINTRESOURCE(OBM_CHECK) )))
return FALSE;
GetObject16( hStdCheck, sizeof(bm), &bm );
check_bitmap_width = bm.bmWidth;
check_bitmap_height = bm.bmHeight;
- if (!(hStdMnArrow = LoadBitmap( 0, MAKEINTRESOURCE(OBM_MNARROW) )))
+ if (!(hStdMnArrow = LoadBitmap16( 0, MAKEINTRESOURCE(OBM_MNARROW) )))
return FALSE;
GetObject16( hStdMnArrow, sizeof(bm), &bm );
arrow_bitmap_width = bm.bmWidth;
@@ -2514,11 +2514,11 @@
/**********************************************************************
* LoadMenu (USER.150)
*/
-HMENU LoadMenu( HINSTANCE instance, SEGPTR name )
+HMENU16 LoadMenu16( HINSTANCE16 instance, SEGPTR name )
{
- HRSRC hRsrc;
- HGLOBAL handle;
- HMENU hMenu;
+ HRSRC16 hRsrc;
+ HGLOBAL16 handle;
+ HMENU16 hMenu;
if (HIWORD(name))
{
@@ -2534,16 +2534,38 @@
/* check for Win32 module */
instance = GetExePtr( instance );
if (MODULE_GetPtr(instance)->flags & NE_FFLAGS_WIN32)
- return WIN32_LoadMenuA(instance,PTR_SEG_TO_LIN(name));
+ return LoadMenu32A(instance,PTR_SEG_TO_LIN(name));
- if (!(hRsrc = FindResource( instance, name, RT_MENU ))) return 0;
- if (!(handle = LoadResource( instance, hRsrc ))) return 0;
- hMenu = LoadMenuIndirect16( LockResource(handle) );
- FreeResource( handle );
+ if (!(hRsrc = FindResource16( instance, name, RT_MENU ))) return 0;
+ if (!(handle = LoadResource16( instance, hRsrc ))) return 0;
+ hMenu = LoadMenuIndirect16(LockResource16(handle));
+ FreeResource16( handle );
return hMenu;
}
+/*****************************************************************
+ * LoadMenu32A (USER32.370)
+ */
+HMENU32 LoadMenu32A( HINSTANCE32 instance, LPCSTR name )
+{
+ HRSRC32 hrsrc = FindResource32A( instance, name, (LPSTR)RT_MENU );
+ if (!hrsrc) return 0;
+ return LoadMenuIndirect32A( (LPCVOID)LoadResource32( instance, hrsrc ));
+}
+
+
+/*****************************************************************
+ * LoadMenu32W (USER32.372)
+ */
+HMENU32 LoadMenu32W( HINSTANCE32 instance, LPCWSTR name )
+{
+ HRSRC32 hrsrc = FindResource32W( instance, name, (LPWSTR)RT_MENU );
+ if (!hrsrc) return 0;
+ return LoadMenuIndirect32W( (LPCVOID)LoadResource32( instance, hrsrc ));
+}
+
+
/**********************************************************************
* LoadMenuIndirect16 (USER.220)
*/
diff --git a/controls/scroll.c b/controls/scroll.c
index 04321df..649c81f 100644
--- a/controls/scroll.c
+++ b/controls/scroll.c
@@ -79,18 +79,18 @@
*/
static void SCROLL_LoadBitmaps(void)
{
- hUpArrow = LoadBitmap((HINSTANCE)NULL, MAKEINTRESOURCE(OBM_UPARROW));
- hDnArrow = LoadBitmap((HINSTANCE)NULL, MAKEINTRESOURCE(OBM_DNARROW));
- hLfArrow = LoadBitmap((HINSTANCE)NULL, MAKEINTRESOURCE(OBM_LFARROW));
- hRgArrow = LoadBitmap((HINSTANCE)NULL, MAKEINTRESOURCE(OBM_RGARROW));
- hUpArrowD = LoadBitmap((HINSTANCE)NULL, MAKEINTRESOURCE(OBM_UPARROWD));
- hDnArrowD = LoadBitmap((HINSTANCE)NULL, MAKEINTRESOURCE(OBM_DNARROWD));
- hLfArrowD = LoadBitmap((HINSTANCE)NULL, MAKEINTRESOURCE(OBM_LFARROWD));
- hRgArrowD = LoadBitmap((HINSTANCE)NULL, MAKEINTRESOURCE(OBM_RGARROWD));
- hUpArrowI = LoadBitmap((HINSTANCE)NULL, MAKEINTRESOURCE(OBM_UPARROWI));
- hDnArrowI = LoadBitmap((HINSTANCE)NULL, MAKEINTRESOURCE(OBM_DNARROWI));
- hLfArrowI = LoadBitmap((HINSTANCE)NULL, MAKEINTRESOURCE(OBM_LFARROWI));
- hRgArrowI = LoadBitmap((HINSTANCE)NULL, MAKEINTRESOURCE(OBM_RGARROWI));
+ hUpArrow = LoadBitmap16((HINSTANCE)NULL, MAKEINTRESOURCE(OBM_UPARROW));
+ hDnArrow = LoadBitmap16((HINSTANCE)NULL, MAKEINTRESOURCE(OBM_DNARROW));
+ hLfArrow = LoadBitmap16((HINSTANCE)NULL, MAKEINTRESOURCE(OBM_LFARROW));
+ hRgArrow = LoadBitmap16((HINSTANCE)NULL, MAKEINTRESOURCE(OBM_RGARROW));
+ hUpArrowD = LoadBitmap16((HINSTANCE)NULL, MAKEINTRESOURCE(OBM_UPARROWD));
+ hDnArrowD = LoadBitmap16((HINSTANCE)NULL, MAKEINTRESOURCE(OBM_DNARROWD));
+ hLfArrowD = LoadBitmap16((HINSTANCE)NULL, MAKEINTRESOURCE(OBM_LFARROWD));
+ hRgArrowD = LoadBitmap16((HINSTANCE)NULL, MAKEINTRESOURCE(OBM_RGARROWD));
+ hUpArrowI = LoadBitmap16((HINSTANCE)NULL, MAKEINTRESOURCE(OBM_UPARROWI));
+ hDnArrowI = LoadBitmap16((HINSTANCE)NULL, MAKEINTRESOURCE(OBM_DNARROWI));
+ hLfArrowI = LoadBitmap16((HINSTANCE)NULL, MAKEINTRESOURCE(OBM_LFARROWI));
+ hRgArrowI = LoadBitmap16((HINSTANCE)NULL, MAKEINTRESOURCE(OBM_RGARROWI));
}
diff --git a/controls/static.c b/controls/static.c
index aa8e1a7..72ded64 100644
--- a/controls/static.c
+++ b/controls/static.c
@@ -87,9 +87,9 @@
CREATESTRUCT16 *cs = (CREATESTRUCT16 *)PTR_SEG_TO_LIN(lParam);
if (cs->lpszName)
{
- HICON hicon = LoadIcon( cs->hInstance, cs->lpszName );
+ HICON16 hicon = LoadIcon16( cs->hInstance, cs->lpszName );
if (!hicon) /* Try OEM icon (FIXME: is this right?) */
- hicon = LoadIcon( 0, cs->lpszName );
+ hicon = LoadIcon16( 0, cs->lpszName );
STATIC_SetIcon( wndPtr, hicon );
}
return 1;
@@ -136,7 +136,7 @@
case WM_SETTEXT:
if (style == SS_ICON)
/* FIXME : should we also return the previous hIcon here ??? */
- STATIC_SetIcon( wndPtr, LoadIcon( wndPtr->hInstance,
+ STATIC_SetIcon( wndPtr, LoadIcon16( wndPtr->hInstance,
(SEGPTR)lParam ));
else
DEFWND_SetText( wndPtr, (LPSTR)PTR_SEG_TO_LIN(lParam) );
diff --git a/controls/widgets.c b/controls/widgets.c
index 7205bc0..4f8a78c 100644
--- a/controls/widgets.c
+++ b/controls/widgets.c
@@ -15,32 +15,35 @@
#include "module.h"
#include "heap.h"
-static WNDCLASS16 WIDGETS_BuiltinClasses16[] =
+typedef struct
+{
+ UINT16 style;
+ INT16 wndExtra;
+ HBRUSH16 background;
+ LPCSTR procName;
+ LPCSTR className;
+} BUILTIN_CLASS_INFO16;
+
+static const BUILTIN_CLASS_INFO16 WIDGETS_BuiltinClasses16[] =
{
{ CS_GLOBALCLASS | CS_PARENTDC,
- (WNDPROC16)"StaticWndProc", 0, sizeof(STATICINFO),
- 0, 0, 0, 0, 0, (SEGPTR)"STATIC" },
+ sizeof(STATICINFO), 0, "StaticWndProc", "STATIC" },
{ CS_GLOBALCLASS | CS_DBLCLKS | CS_VREDRAW | CS_HREDRAW | CS_PARENTDC,
- (WNDPROC16)"ScrollBarWndProc", 0, sizeof(SCROLLINFO),
- 0, 0, 0, 0, 0, (SEGPTR)"SCROLLBAR" },
+ sizeof(SCROLLINFO), 0, "ScrollBarWndProc", "SCROLLBAR" },
{ CS_GLOBALCLASS | CS_PARENTDC | CS_DBLCLKS,
- (WNDPROC16)"ListBoxWndProc", 0, 8,
- 0, 0, 0, 0, 0, (SEGPTR)"LISTBOX" },
+ 8, 0, "ListBoxWndProc", "LISTBOX" },
{ CS_GLOBALCLASS | CS_PARENTDC | CS_DBLCLKS,
- (WNDPROC16)"ComboBoxWndProc", 0, 8,
- 0, 0, 0, 0, 0, (SEGPTR)"COMBOBOX" },
+ 8, 0, "ComboBoxWndProc", "COMBOBOX" },
{ CS_GLOBALCLASS | CS_DBLCLKS | CS_SAVEBITS,
- (WNDPROC16)"ComboLBoxWndProc", 0, 8,
- 0, 0, 0, 0, 0, (SEGPTR)"COMBOLBOX" },
+ 8, 0, "ComboLBoxWndProc", "COMBOLBOX" },
{ CS_GLOBALCLASS | CS_PARENTDC | CS_DBLCLKS,
- (WNDPROC16)"EditWndProc", 0, sizeof(DWORD),
- 0, 0, 0, 0, 0, (SEGPTR)"EDIT" },
- { CS_GLOBALCLASS | CS_SAVEBITS, (WNDPROC16)"PopupMenuWndProc", 0, 8,
- 0, 0, 0, 0, 0, (SEGPTR)POPUPMENU_CLASS_NAME },
- { CS_GLOBALCLASS | CS_SAVEBITS, (WNDPROC16)"DefDlgProc", 0, DLGWINDOWEXTRA,
- 0, 0, 0, 0, 0, (SEGPTR)DIALOG_CLASS_NAME },
- { CS_GLOBALCLASS, (WNDPROC16)"MDIClientWndProc", 0, sizeof(MDICLIENTINFO),
- 0, 0, 0, STOCK_LTGRAY_BRUSH, 0, (SEGPTR)"MDICLIENT" }
+ sizeof(DWORD), 0, "EditWndProc", "EDIT" },
+ { CS_GLOBALCLASS | CS_SAVEBITS,
+ sizeof(HMENU32), 0, "PopupMenuWndProc", POPUPMENU_CLASS_NAME },
+ { CS_GLOBALCLASS | CS_SAVEBITS,
+ DLGWINDOWEXTRA, 0, "DefDlgProc", DIALOG_CLASS_NAME },
+ { CS_GLOBALCLASS, sizeof(MDICLIENTINFO),
+ STOCK_LTGRAY_BRUSH, "MDIClientWndProc", "MDICLIENT" }
};
#define NB_BUILTIN_CLASSES16 \
@@ -67,20 +70,28 @@
{
int i;
char *name;
- WNDCLASS16 *class16 = WIDGETS_BuiltinClasses16;
+ const BUILTIN_CLASS_INFO16 *info16 = WIDGETS_BuiltinClasses16;
+ WNDCLASS16 class16;
WNDCLASS32A *class32 = WIDGETS_BuiltinClasses32;
if (!(name = SEGPTR_ALLOC( 20 * sizeof(char) ))) return FALSE;
/* Create 16-bit classes */
- for (i = 0; i < NB_BUILTIN_CLASSES16; i++, class16++)
+ class16.cbClsExtra = 0;
+ class16.hInstance = 0;
+ class16.hIcon = 0;
+ class16.hCursor = LoadCursor16( 0, IDC_ARROW );
+ class16.lpszMenuName = (SEGPTR)0;
+ class16.lpszClassName = SEGPTR_GET(name);
+ for (i = 0; i < NB_BUILTIN_CLASSES16; i++, info16++)
{
- strcpy( name, (char *)class16->lpszClassName );
- class16->lpszClassName = SEGPTR_GET(name);
- class16->hCursor = LoadCursor( 0, IDC_ARROW );
- class16->lpfnWndProc = MODULE_GetWndProcEntry16( (char *)class16->lpfnWndProc );
- if (!RegisterClass16( class16 )) return FALSE;
+ class16.style = info16->style;
+ class16.lpfnWndProc = (WNDPROC16)MODULE_GetWndProcEntry16( info16->procName );
+ class16.cbWndExtra = info16->wndExtra;
+ class16.hbrBackground = info16->background;
+ strcpy( name, info16->className );
+ if (!RegisterClass16( &class16 )) return FALSE;
}
/* Create 32-bit classes */
@@ -90,7 +101,7 @@
/* Just to make sure the string is > 0x10000 */
strcpy( name, (char *)class32->lpszClassName );
class32->lpszClassName = name;
- class32->hCursor = LoadCursor( 0, IDC_ARROW );
+ class32->hCursor = LoadCursor16( 0, IDC_ARROW );
if (!RegisterClass32A( class32 )) return FALSE;
}