Release 940524

Mon May 23 15:07:36 1994  Bob Amstadt  (bob@pooh)

	* [loader/selector.c]
	Allocate heap and stack segments as 64k.

Sat May 21 01:15:49 1994  Rick Sladkey  (jrs@world.std.com)

        * [loader/selector.c]
        Correct typos where memcpy is used instead of memset.

        * [loader/resource.c]
        Allow for legitimate cases where biSizeImage is 0 in LoadIcon
        by calculating the value when the bitmap is not compressed.

        * [miscemu/int21.c]
        Fix NULL dereference caused by superfluous DOS_closedir in FindNext.

        * [loader/resource.c]
        New function type_match to handle string resource types as
        well as IDs.  In addition, compare only low 4 bits of type_id
        when both numbers are IDs so that 0x0002 matches 0x8002.
        In FindResourceByNumber and FindResourceByName use type_match
        instead of comparing numbers.  In FindResource handle the
        "#number" syntax and empty strings in both the resource and
        type names.

Mon May 23 00:48:25 1994  Rick Sladkey  (jrs@world.std.com)

        * [windows/dialog.c]
        Fix inadvertent printing of string IDs as strings.

May 23, 94 martin2@trgcorp.solucorp.qc.ca (Martin Ayotte)

	* [controls/menu.c]
	New functions GetMenuItemCount(), GetMenuItemID().
		GetMenuString() & HiliteMenuItem().
	Bug fix in CheckMenuItem().
	Function SetMenu() now make client area recalc if menu removed.

	* [windows/winpos.c]
	Bug fix in SetWindowPos(), no more XMapping or XConfiguring	of
		windows with initial width or height equal zero.

	* [objects/gdiobj.c]
	New function EnumObjects(), using new lpPenBrushList buildup
		from calls to new function GDI_AppendToPenBrushList().
		('pbrush.exe' don't show its face yet ! ... :-( )
	New EMPTY STUB for function SetObjectOwner(),
		('mplayer.exe' call it via GetProcAddress() ...)

	* [objects/font.c]
	New internal functions ParseFontParms() & InitFontsList().
	EnumFonts() & EnumFontFamilies() enumerates fonts (no more dummies).
	FONT_MatchFont now make retries to find closest-smallest font.
		('charmap.exe' can now show the differents fonts available)

	* [windows/nonclient.c]
	Use small dos OBM_OLD_CLOSE button for MDI windows.

	* [windows/graphics.c] [objects/bitmap.c]
	Start to remove obsolete globals such XT_screen ...

	* [loader/library.c]
	Make function GetProcAddress() working also with builtin DLLs.

Tue May 24 20:18:02 1994  Erik Bos (erik@hacktic.nl)

        * [if1632/system.spec] [if1632/toolhelp.spec]
        system.dll & toolhelp.dll added.

        * [loader/library.c]
        Modified GetModuleFileName() to return the full
        filename.
        Added a check to LoadLibrary() to prevent loading
        built in dlls. (eg. user.exe)
        Added a check to FreeLibrary() to prevent built-in
        dlls from being freed.
        Modified GetProcAddress() to support builtin dlls.

        * [loader/signal.c] [miscemu/int2f.c]
        Added => pifedit runs.

        * [misc/dos_fs.c]
        Added a NULL-ptr check to DOS_closedir().
This commit is contained in:
Alexandre Julliard 1994-05-25 16:25:21 +00:00
parent 73450d65c3
commit 1f57929b17
40 changed files with 1407 additions and 535 deletions

View File

@ -1,3 +1,89 @@
----------------------------------------------------------------------
Mon May 23 15:07:36 1994 Bob Amstadt (bob@pooh)
* [loader/selector.c]
Allocate heap and stack segments as 64k.
Sat May 21 01:15:49 1994 Rick Sladkey (jrs@world.std.com)
* [loader/selector.c]
Correct typos where memcpy is used instead of memset.
* [loader/resource.c]
Allow for legitimate cases where biSizeImage is 0 in LoadIcon
by calculating the value when the bitmap is not compressed.
* [miscemu/int21.c]
Fix NULL dereference caused by superfluous DOS_closedir in FindNext.
* [loader/resource.c]
New function type_match to handle string resource types as
well as IDs. In addition, compare only low 4 bits of type_id
when both numbers are IDs so that 0x0002 matches 0x8002.
In FindResourceByNumber and FindResourceByName use type_match
instead of comparing numbers. In FindResource handle the
"#number" syntax and empty strings in both the resource and
type names.
Mon May 23 00:48:25 1994 Rick Sladkey (jrs@world.std.com)
* [windows/dialog.c]
Fix inadvertent printing of string IDs as strings.
May 16, 94 martin2@trgcorp.solucorp.qc.ca (Martin Ayotte)
* [controls/menu.c]
New functions GetMenuItemCount(), GetMenuItemID().
GetMenuString() & HiliteMenuItem().
Bug fix in CheckMenuItem().
Function SetMenu() now make client area recalc if menu removed.
* [windows/winpos.c]
Bug fix in SetWindowPos(), no more XMapping or XConfiguring of
windows with initial width or height equal zero.
* [objects/gdiobj.c]
New function EnumObjects(), using new lpPenBrushList buildup
from calls to new function GDI_AppendToPenBrushList().
('pbrush.exe' don't show its face yet ! ... :-( )
New EMPTY STUB for function SetObjectOwner(),
('mplayer.exe' call it via GetProcAddress() ...)
* [objects/font.c]
New internal functions ParseFontParms() & InitFontsList().
EnumFonts() & EnumFontFamilies() enumerates fonts (no more dummies).
FONT_MatchFont now make retries to find closest-smallest font.
('charmap.exe' can now show the differents fonts available)
* [windows/nonclient.c]
Use small dos OBM_OLD_CLOSE button for MDI windows.
* [windows/graphics.c] [objects/bitmap.c]
Start to remove obsolete globals such XT_screen ...
* [loader/library.c]
Make function GetProcAddress() working also with builtin DLLs.
Tue May 24 20:18:02 1994 Erik Bos (erik@hacktic.nl)
* [if1632/system.spec] [if1632/toolhelp.spec]
system.dll & toolhelp.dll added.
* [loader/library.c]
Modified GetModuleFileName() to return the full
filename.
Added a check to LoadLibrary() to prevent loading
built in dlls. (eg. user.exe)
Added a check to FreeLibrary() to prevent built-in
dlls from being freed.
Modified GetProcAddress() to support builtin dlls.
* [loader/signal.c] [miscemu/int2f.c]
Added => pifedit runs.
* [misc/dos_fs.c]
Added a NULL-ptr check to DOS_closedir().
---------------------------------------------------------------------- ----------------------------------------------------------------------
Tue May 17 23:03:16 1994 Bob Amstadt (bob@pooh) Tue May 17 23:03:16 1994 Bob Amstadt (bob@pooh)

31
LICENSE
View File

@ -1 +1,30 @@
All code unless stated otherwise is covered by the GNU Pubic License. You may without charge, royalty or other payment, copy and
distribute copies of this work and derivative works of this work
in source or binary form provided that: (1)
you appropriately publish on each copy an appropriate copyright
notice; (2) faithfully reproduce all prior copyright notices
included in the original work (you may also add your own
copyright notice); and (3) agree to indemnify and hold all prior
authors, copyright holders and licensors of the work harmless
from and against all damages arising from use of the work.
You may distribute sources of derivative works of the work
provided that (1) (a) all source files of the original work that
have been modified, (b) all source files of the derivative work
that contain any party of the original work, and (c) all source
files of the derivative work that are necessary to compile, link
and run the derivative work without unresolved external calls and
with the same functionality of the original work ("Necessary
Sources") carry a prominent notice explaining the nature and date
of the modification and/or creation. You are encouraged to make
the Necessary Sources available under this license in order to
further the development and acceptance of the work.
EXCEPT AS OTHERWISE RESTRICTED BY LAW, THIS WORK IS PROVIDED
WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES OF ANY KIND, INCLUDING
BUT NOT LIMITED TO, ANY IMPLIED WARRANTIES OF FITNESS FOR A
PARTICULAR PURPOSE, MERCHANTABILITY OR TITLE. EXCEPT AS
OTHERWISE PROVIDED BY LAW, NO AUTHOR, COPYRIGHT HOLDER OR
LICENSOR SHALL BE LIABLE TO YOU FOR DAMAGES OF ANY KIND, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

37
README
View File

@ -1,8 +1,34 @@
Copyright Robert J. Amstadt, 1993. All code is provided without 0. LICENSE
warranty. All code is covered by the license contained in the file
LICENSE unless explicitly stated in the individual source file.
You may without charge, royalty or other payment, copy and
distribute copies of this work and derivative works of this work
in source or binary form provided that: (1)
you appropriately publish on each copy an appropriate copyright
notice; (2) faithfully reproduce all prior copyright notices
included in the original work (you may also add your own
copyright notice); and (3) agree to indemnify and hold all prior
authors, copyright holders and licensors of the work harmless
from and against all damages arising from use of the work.
You may distribute sources of derivative works of the work
provided that (1) (a) all source files of the original work that
have been modified, (b) all source files of the derivative work
that contain any party of the original work, and (c) all source
files of the derivative work that are necessary to compile, link
and run the derivative work without unresolved external calls and
with the same functionality of the original work ("Necessary
Sources") carry a prominent notice explaining the nature and date
of the modification and/or creation. You are encouraged to make
the Necessary Sources available under this license in order to
further the development and acceptance of the work.
EXCEPT AS OTHERWISE RESTRICTED BY LAW, THIS WORK IS PROVIDED
WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES OF ANY KIND, INCLUDING
BUT NOT LIMITED TO, ANY IMPLIED WARRANTIES OF FITNESS FOR A
PARTICULAR PURPOSE, MERCHANTABILITY OR TITLE. EXCEPT AS
OTHERWISE PROVIDED BY LAW, NO AUTHOR, COPYRIGHT HOLDER OR
LICENSOR SHALL BE LIABLE TO YOU FOR DAMAGES OF ANY KIND, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
1. COMPILATION: 1. COMPILATION:
@ -171,6 +197,11 @@ bob@amscons.com
7. WHAT'S NEW 7. WHAT'S NEW
WHAT'S NEW with Wine-940524: (see ChangeLog for details)
- New menu functions
- EnumObjects()
- and many many bug fixes!
WHAT'S NEW with Wine-940518: (see ChangeLog for details) WHAT'S NEW with Wine-940518: (see ChangeLog for details)
- debugger improvements - debugger improvements
- bug fixes to get some dialog boxes working. - bug fixes to get some dialog boxes working.

View File

@ -9,7 +9,7 @@ SRCS = \
menu.c \ menu.c \
scroll.c \ scroll.c \
static.c \ static.c \
edit.o \ edit.c \
desktop.c \ desktop.c \
widgets.c widgets.c

View File

@ -263,7 +263,9 @@ LONG ComboBoxWndProc( HWND hwnd, WORD message, WORD wParam, LONG lParam )
if (lphc == NULL) return 0; if (lphc == NULL) return 0;
return(SendMessage(lphc->hWndLBox, LB_ADDSTRING, wParam, lParam)); return(SendMessage(lphc->hWndLBox, LB_ADDSTRING, wParam, lParam));
case CB_GETLBTEXT: case CB_GETLBTEXT:
#ifdef DEBUG_COMBO
printf("CB_GETLBTEXT #%u !\n", wParam); printf("CB_GETLBTEXT #%u !\n", wParam);
#endif
lphc = ComboGetStorageHeader(hwnd); lphc = ComboGetStorageHeader(hwnd);
if (lphc == NULL) return 0; if (lphc == NULL) return 0;
return(SendMessage(lphc->hWndLBox, LB_GETTEXT, wParam, lParam)); return(SendMessage(lphc->hWndLBox, LB_GETTEXT, wParam, lParam));

View File

@ -309,7 +309,6 @@ LONG EditWndProc(HWND hwnd, WORD uMsg, WORD wParam, LONG lParam)
break; break;
case WM_KEYDOWN: case WM_KEYDOWN:
printf("EDIT WM_KEYDOWN w=%04X !\n", wParam);
EDIT_KeyDownMsg(hwnd, wParam); EDIT_KeyDownMsg(hwnd, wParam);
break; break;

View File

@ -14,6 +14,7 @@ static char Copyright[] = "Copyright Martin Ayotte, 1993";
#include "sysmetrics.h" #include "sysmetrics.h"
#include "prototypes.h" #include "prototypes.h"
#include "menu.h" #include "menu.h"
#include "user.h"
#include "heap.h" #include "heap.h"
#include "win.h" #include "win.h"
@ -50,6 +51,7 @@ WORD GetSelectionKey(LPSTR str);
LPSTR GetShortCutString(LPSTR str); LPSTR GetShortCutString(LPSTR str);
WORD GetShortCutPos(LPSTR str); WORD GetShortCutPos(LPSTR str);
BOOL HideAllSubPopupMenu(LPPOPUPMENU menu); BOOL HideAllSubPopupMenu(LPPOPUPMENU menu);
void InitStdBitmaps();
HMENU CopySysMenu(); HMENU CopySysMenu();
WORD * ParseMenuResource(WORD *first_item, int level, HMENU hMenu); WORD * ParseMenuResource(WORD *first_item, int level, HMENU hMenu);
void SetMenuLogicalParent(HMENU hMenu, HWND hWnd); void SetMenuLogicalParent(HMENU hMenu, HWND hWnd);
@ -84,10 +86,7 @@ LONG PopupMenuWndProc( HWND hwnd, WORD message, WORD wParam, LONG lParam )
#ifdef DEBUG_MENU #ifdef DEBUG_MENU
printf("PopupMenu WM_CREATE lppop=%08X !\n", lppop); printf("PopupMenu WM_CREATE lppop=%08X !\n", lppop);
#endif #endif
if (hStdCheck == (HBITMAP)NULL) InitStdBitmaps();
hStdCheck = LoadBitmap((HANDLE)NULL, (LPSTR)OBM_CHECK);
if (hStdMnArrow == (HBITMAP)NULL)
hStdMnArrow = LoadBitmap((HANDLE)NULL, (LPSTR)OBM_MNARROW);
#ifdef DEBUG_MENU #ifdef DEBUG_MENU
printf("PopupMenu End of WM_CREATE !\n"); printf("PopupMenu End of WM_CREATE !\n");
#endif #endif
@ -215,6 +214,7 @@ LONG PopupMenuWndProc( HWND hwnd, WORD message, WORD wParam, LONG lParam )
ShowWindow(hwnd, SW_HIDE); ShowWindow(hwnd, SW_HIDE);
hwnd = lppop->hWndParent; hwnd = lppop->hWndParent;
lppop = PopupMenuGetWindowAndStorage(hwnd, &wndPtr); lppop = PopupMenuGetWindowAndStorage(hwnd, &wndPtr);
printf("VK_LEFT // try to put focus on MenuBar %08X !\n", lppop);
if (lppop == NULL) break; if (lppop == NULL) break;
MenuItemSelect(hwnd, lppop, lppop->nItems - 1); MenuItemSelect(hwnd, lppop, lppop->nItems - 1);
break; break;
@ -241,6 +241,7 @@ LONG PopupMenuWndProc( HWND hwnd, WORD message, WORD wParam, LONG lParam )
ShowWindow(hwnd, SW_HIDE); ShowWindow(hwnd, SW_HIDE);
hwnd = lppop->hWndParent; hwnd = lppop->hWndParent;
lppop = PopupMenuGetWindowAndStorage(hwnd, &wndPtr); lppop = PopupMenuGetWindowAndStorage(hwnd, &wndPtr);
printf("VK_RIGHT // try to put focus on MenuBar %08X !\n", lppop);
if (lppop == NULL) break; if (lppop == NULL) break;
MenuItemSelect(hwnd, lppop, 0); MenuItemSelect(hwnd, lppop, 0);
break; break;
@ -262,11 +263,6 @@ LONG PopupMenuWndProc( HWND hwnd, WORD message, WORD wParam, LONG lParam )
} }
MenuItemSelect(hwnd, lppop, lppop->FocusedItem + 1); MenuItemSelect(hwnd, lppop, lppop->FocusedItem + 1);
break; break;
case VK_RETURN:
case VK_SPACE:
ProceedSPACE: lppop = PopupMenuGetWindowAndStorage(hwnd, &wndPtr);
ExecFocusedMenuItem(hwnd, lppop);
break;
default: default:
break; break;
} }
@ -280,6 +276,11 @@ ProceedSPACE: lppop = PopupMenuGetWindowAndStorage(hwnd, &wndPtr);
lppop = PopupMenuGetWindowAndStorage(hwnd, &wndPtr); lppop = PopupMenuGetWindowAndStorage(hwnd, &wndPtr);
if (lppop == NULL) break; if (lppop == NULL) break;
switch(wParam) { switch(wParam) {
case VK_RETURN:
case VK_SPACE:
ProceedSPACE: lppop = PopupMenuGetWindowAndStorage(hwnd, &wndPtr);
ExecFocusedMenuItem(hwnd, lppop);
break;
case VK_ESCAPE: case VK_ESCAPE:
if (lppop->BarFlag) { if (lppop->BarFlag) {
#ifdef DEBUG_MENU #ifdef DEBUG_MENU
@ -686,6 +687,7 @@ void StdDrawPopupMenu(HWND hwnd)
EndPaint(hwnd, &ps); EndPaint(hwnd, &ps);
return; return;
} }
InitStdBitmaps();
lppop = PopupMenuGetWindowAndStorage(hwnd, &wndPtr); lppop = PopupMenuGetWindowAndStorage(hwnd, &wndPtr);
if (lppop == NULL) goto EndOfPaint; if (lppop == NULL) goto EndOfPaint;
hBrush = GetStockObject(WHITE_BRUSH); hBrush = GetStockObject(WHITE_BRUSH);
@ -734,8 +736,13 @@ void StdDrawPopupMenu(HWND hwnd)
hMemDC = CreateCompatibleDC(hDC); hMemDC = CreateCompatibleDC(hDC);
SelectObject(hMemDC, hBitMap); SelectObject(hMemDC, hBitMap);
GetObject(hBitMap, sizeof(BITMAP), (LPSTR)&bm); GetObject(hBitMap, sizeof(BITMAP), (LPSTR)&bm);
#ifdef DEBUG_MENU
printf("StdDrawPopupMenu // MF_BITMAP hBit=%04X w=%d h=%d\n",
hBitMap, bm.bmWidth, bm.bmHeight);
#endif
BitBlt(hDC, rect2.left, rect2.top, BitBlt(hDC, rect2.left, rect2.top,
bm.bmWidth, bm.bmHeight, hMemDC, 0, 0, SRCCOPY); bm.bmWidth, bm.bmHeight,
hMemDC, 0, 0, SRCCOPY);
DeleteDC(hMemDC); DeleteDC(hMemDC);
if ((lpitem->item_flags & MF_HILITE) == MF_HILITE) if ((lpitem->item_flags & MF_HILITE) == MF_HILITE)
InvertRect(hDC, &lpitem->rect); InvertRect(hDC, &lpitem->rect);
@ -812,9 +819,7 @@ void StdDrawMenuBar(HDC hDC, LPRECT lprect, LPPOPUPMENU lppop,
printf("StdDrawMenuBar(%04X, %08X, %08X); !\n", hDC, lprect, lppop); printf("StdDrawMenuBar(%04X, %08X, %08X); !\n", hDC, lprect, lppop);
#endif #endif
MenuBarCalcSize(hDC, lprect, lppop); MenuBarCalcSize(hDC, lprect, lppop);
if (suppress_draw) if (suppress_draw) return;
return;
hOldFont = SelectObject(hDC, GetStockObject(SYSTEM_FONT)); hOldFont = SelectObject(hDC, GetStockObject(SYSTEM_FONT));
hOldPen = SelectObject(hDC, GetStockObject(BLACK_PEN)); hOldPen = SelectObject(hDC, GetStockObject(BLACK_PEN));
hBrush = GetStockObject(WHITE_BRUSH); hBrush = GetStockObject(WHITE_BRUSH);
@ -855,8 +860,13 @@ void StdDrawMenuBar(HDC hDC, LPRECT lprect, LPPOPUPMENU lppop,
hMemDC = CreateCompatibleDC(hDC); hMemDC = CreateCompatibleDC(hDC);
SelectObject(hMemDC, hBitMap); SelectObject(hMemDC, hBitMap);
GetObject(hBitMap, sizeof(BITMAP), (LPSTR)&bm); GetObject(hBitMap, sizeof(BITMAP), (LPSTR)&bm);
#ifdef DEBUG_MENU
printf("StdDrawMenuBar // MF_BITMAP hBit=%04X w=%d h=%d\n",
hBitMap, bm.bmWidth, bm.bmHeight);
#endif
BitBlt(hDC, rect2.left, rect2.top, BitBlt(hDC, rect2.left, rect2.top,
bm.bmWidth, bm.bmHeight, hMemDC, 0, 0, SRCCOPY); bm.bmWidth, bm.bmHeight,
hMemDC, 0, 0, SRCCOPY);
DeleteDC(hMemDC); DeleteDC(hMemDC);
} }
if (((lpitem->item_flags & MF_BITMAP) != MF_BITMAP) && if (((lpitem->item_flags & MF_BITMAP) != MF_BITMAP) &&
@ -955,6 +965,7 @@ void PopupMenuCalcSize(HWND hwnd)
#ifdef DEBUG_MENUCALC #ifdef DEBUG_MENUCALC
printf("PopupMenuCalcSize hWnd=%04X !\n", hWnd); printf("PopupMenuCalcSize hWnd=%04X !\n", hWnd);
#endif #endif
InitStdBitmaps();
lppop = PopupMenuGetWindowAndStorage(hwnd, &wndPtr); lppop = PopupMenuGetWindowAndStorage(hwnd, &wndPtr);
if (lppop == NULL) return; if (lppop == NULL) return;
if (lppop->nItems == 0) return; if (lppop->nItems == 0) return;
@ -1039,6 +1050,7 @@ void MenuBarCalcSize(HDC hDC, LPRECT lprect, LPPOPUPMENU lppop)
DWORD dwRet; DWORD dwRet;
if (lppop == NULL) return; if (lppop == NULL) return;
if (lppop->nItems == 0) return; if (lppop->nItems == 0) return;
InitStdBitmaps();
#ifdef DEBUG_MENUCALC #ifdef DEBUG_MENUCALC
printf("MenuBarCalcSize left=%d top=%d right=%d bottom=%d !\n", printf("MenuBarCalcSize left=%d top=%d right=%d bottom=%d !\n",
lprect->left, lprect->top, lprect->right, lprect->bottom); lprect->left, lprect->top, lprect->right, lprect->bottom);
@ -1245,29 +1257,21 @@ BOOL ChangeMenu(HMENU hMenu, WORD nPos, LPSTR lpNewItem,
*/ */
BOOL CheckMenuItem(HMENU hMenu, WORD wItemID, WORD wFlags) BOOL CheckMenuItem(HMENU hMenu, WORD wItemID, WORD wFlags)
{ {
WND *wndPtr;
LPPOPUPMENU menu;
LPMENUITEM lpitem; LPMENUITEM lpitem;
int i;
#ifdef DEBUG_MENU #ifdef DEBUG_MENU
printf("CheckMenuItem (%04X, %04X, %04X) !\n", hMenu, wItemID, wFlags); printf("CheckMenuItem (%04X, %04X, %04X) !\n", hMenu, wItemID, wFlags);
#endif #endif
menu = (LPPOPUPMENU) GlobalLock(hMenu); lpitem = FindMenuItem(hMenu, wItemID, wFlags);
if (menu == NULL) return FALSE; if (lpitem != NULL) {
lpitem = menu->firstItem; if ((wFlags & MF_CHECKED) == MF_CHECKED)
for (i = 0; i < menu->nItems; i++) { lpitem->item_flags |= MF_CHECKED;
if (lpitem == NULL) break; else
if (i == wItemID) { lpitem->item_flags &= ((WORD)-1 ^ MF_CHECKED);
if (wFlags && MF_CHECKED) #ifdef DEBUG_MENU
lpitem->item_flags |= MF_CHECKED; printf("CheckMenuItem // Found !\n");
else #endif
lpitem->item_flags &= ((WORD)-1 ^ MF_CHECKED); return(TRUE);
GlobalUnlock(hMenu);
return(TRUE);
}
lpitem = (LPMENUITEM)lpitem->next;
} }
GlobalUnlock(hMenu);
return FALSE; return FALSE;
} }
@ -1277,30 +1281,113 @@ BOOL CheckMenuItem(HMENU hMenu, WORD wItemID, WORD wFlags)
*/ */
BOOL EnableMenuItem(HMENU hMenu, WORD wItemID, WORD wFlags) BOOL EnableMenuItem(HMENU hMenu, WORD wItemID, WORD wFlags)
{ {
WND *wndPtr;
LPPOPUPMENU menu;
LPMENUITEM lpitem; LPMENUITEM lpitem;
int i;
#ifdef DEBUG_MENU #ifdef DEBUG_MENU
printf("EnableMenuItem (%04X, %04X, %04X) !\n", hMenu, wItemID, wFlags); printf("EnableMenuItem (%04X, %04X, %04X) !\n", hMenu, wItemID, wFlags);
#endif #endif
lpitem = FindMenuItem(hMenu, wItemID, wFlags);
if (lpitem != NULL) {
if (wFlags && MF_DISABLED)
lpitem->item_flags |= MF_DISABLED;
else
lpitem->item_flags &= ((WORD)-1 ^ MF_DISABLED);
#ifdef DEBUG_MENU
printf("EnableMenuItem // Found !\n");
#endif
return(TRUE);
}
return FALSE;
}
/**********************************************************************
* GetMenuString [USER.161]
*/
int GetMenuString(HMENU hMenu, WORD wItemID,
LPSTR str, short nMaxSiz, WORD wFlags)
{
LPMENUITEM lpitem;
int maxsiz;
#ifdef DEBUG_MENU
printf("GetMenuString(%04X, %04X, %08X, %d, %04X);\n",
hMenu, wItemID, str, nMaxSiz, wFlags);
#endif
if (str == NULL) return FALSE;
lpitem = FindMenuItem(hMenu, wItemID, wFlags);
if (lpitem != NULL) {
if (lpitem->item_text != NULL) {
maxsiz = min(nMaxSiz - 1, strlen(lpitem->item_text));
strncpy(str, lpitem->item_text, maxsiz + 1);
}
else
maxsiz = 0;
#ifdef DEBUG_MENU
printf("GetMenuString // Found !\n");
#endif
return maxsiz;
}
return 0;
}
/**********************************************************************
* HiliteMenuItem [USER.162]
*/
BOOL HiliteMenuItem(HWND hWnd, HMENU hMenu, WORD wItemID, WORD wHilite)
{
LPPOPUPMENU menu;
LPMENUITEM lpitem;
printf("HiliteMenuItem(%04X, %04X, %04X, %04X);\n",
hWnd, hMenu, wItemID, wHilite);
menu = (LPPOPUPMENU) GlobalLock(hMenu); menu = (LPPOPUPMENU) GlobalLock(hMenu);
if (menu == NULL) return FALSE; if (menu == NULL) return FALSE;
lpitem = FindMenuItem(hMenu, wItemID, wHilite);
if (lpitem == NULL) return FALSE;
return FALSE;
}
/**********************************************************************
* GetMenuItemCount [USER.263]
*/
WORD GetMenuItemCount(HMENU hMenu)
{
LPPOPUPMENU menu;
#ifdef DEBUG_MENU
printf("GetMenuItemCount(%04X);\n", hMenu);
#endif
menu = (LPPOPUPMENU) GlobalLock(hMenu);
if (menu == NULL) return (WORD)-1;
#ifdef DEBUG_MENU
printf("GetMenuItemCount(%04X) return %d \n", hMenu, menu->nItems);
#endif
return menu->nItems;
}
/**********************************************************************
* GetMenuItemID [USER.264]
*/
WORD GetMenuItemID(HMENU hMenu, int nPos)
{
WORD i;
LPPOPUPMENU menu;
LPMENUITEM lpitem;
printf("GetMenuItemID(%04X, %d);\n", hMenu, nPos);
menu = (LPPOPUPMENU) GlobalLock(hMenu);
if (menu == NULL) return -1;
lpitem = menu->firstItem; lpitem = menu->firstItem;
for (i = 0; i < menu->nItems; i++) { for (i = 0; i < menu->nItems; i++) {
if (lpitem == NULL) break; if (lpitem == NULL) break;
if (i == wItemID) { if (i == nPos) {
if (wFlags && MF_DISABLED) #ifdef DEBUG_MENU
lpitem->item_flags |= MF_DISABLED; printf("GetMenuItemID // Found !\n");
else #endif
lpitem->item_flags &= ((WORD)-1 ^ MF_DISABLED); return lpitem->item_id;
GlobalUnlock(hMenu);
return(TRUE);
} }
lpitem = (LPMENUITEM)lpitem->next; lpitem = (LPMENUITEM)lpitem->next;
} }
GlobalUnlock(hMenu); return -1;
return FALSE;
} }
@ -1309,13 +1396,11 @@ BOOL EnableMenuItem(HMENU hMenu, WORD wItemID, WORD wFlags)
*/ */
BOOL InsertMenu(HMENU hMenu, WORD nPos, WORD wFlags, WORD wItemID, LPSTR lpNewItem) BOOL InsertMenu(HMENU hMenu, WORD nPos, WORD wFlags, WORD wItemID, LPSTR lpNewItem)
{ {
WND *wndPtr;
LPPOPUPMENU menu; LPPOPUPMENU menu;
HANDLE hNewItem; HANDLE hNewItem;
LPMENUITEM lpitem, lpitem2; LPMENUITEM lpitem, lpitem2;
int i;
#ifdef DEBUG_MENU #ifdef DEBUG_MENU
if (wFlags & MF_STRING) if ((wFlags & (MF_BITMAP | MF_SEPARATOR | MF_MENUBREAK | MF_OWNERDRAW)) == 0)
printf("InsertMenu (%04X, %04X, %04X, '%s') !\n", printf("InsertMenu (%04X, %04X, %04X, '%s') !\n",
hMenu, wFlags, wItemID, lpNewItem); hMenu, wFlags, wItemID, lpNewItem);
else else
@ -1377,7 +1462,6 @@ BOOL InsertMenu(HMENU hMenu, WORD nPos, WORD wFlags, WORD wItemID, LPSTR lpNewIt
*/ */
BOOL AppendMenu(HMENU hMenu, WORD wFlags, WORD wItemID, LPSTR lpNewItem) BOOL AppendMenu(HMENU hMenu, WORD wFlags, WORD wItemID, LPSTR lpNewItem)
{ {
WND *wndPtr;
LPPOPUPMENU menu; LPPOPUPMENU menu;
HANDLE hNewItem; HANDLE hNewItem;
LPMENUITEM lpitem, lpitem2; LPMENUITEM lpitem, lpitem2;
@ -1445,7 +1529,6 @@ BOOL AppendMenu(HMENU hMenu, WORD wFlags, WORD wItemID, LPSTR lpNewItem)
*/ */
BOOL RemoveMenu(HMENU hMenu, WORD nPos, WORD wFlags) BOOL RemoveMenu(HMENU hMenu, WORD nPos, WORD wFlags)
{ {
WND *wndPtr;
LPPOPUPMENU menu; LPPOPUPMENU menu;
LPMENUITEM lpitem; LPMENUITEM lpitem;
int i; int i;
@ -1521,13 +1604,16 @@ BOOL DeleteMenu(HMENU hMenu, WORD nPos, WORD wFlags)
*/ */
BOOL ModifyMenu(HMENU hMenu, WORD nPos, WORD wFlags, WORD wItemID, LPSTR lpNewItem) BOOL ModifyMenu(HMENU hMenu, WORD nPos, WORD wFlags, WORD wItemID, LPSTR lpNewItem)
{ {
WND *wndPtr;
LPPOPUPMENU menu; LPPOPUPMENU menu;
LPMENUITEM lpitem; LPMENUITEM lpitem;
int i; int i;
#ifdef DEBUG_MENU #ifdef DEBUG_MENU
printf("ModifyMenu (%04X, %04X, %04X, %04X, %08X) !\n", if ((wFlags & (MF_BITMAP | MF_SEPARATOR | MF_MENUBREAK | MF_OWNERDRAW)) == 0)
hMenu, nPos, wFlags, wItemID, lpNewItem); printf("ModifyMenu (%04X, %04X, %04X, %04X, '%s') !\n",
hMenu, nPos, wFlags, wItemID, lpNewItem);
else
printf("ModifyMenu (%04X, %04X, %04X, %04X, %08X) !\n",
hMenu, nPos, wFlags, wItemID, lpNewItem);
#endif #endif
menu = (LPPOPUPMENU) GlobalLock(hMenu); menu = (LPPOPUPMENU) GlobalLock(hMenu);
if (menu == NULL) return FALSE; if (menu == NULL) return FALSE;
@ -1593,6 +1679,9 @@ HMENU CreatePopupMenu()
menu->Width = 100; menu->Width = 100;
menu->Height = 0; menu->Height = 0;
GlobalUnlock(hMenu); GlobalUnlock(hMenu);
#ifdef DEBUG_MENU
printf("CreatePopupMenu // return %04X\n", hMenu);
#endif
return hMenu; return hMenu;
} }
@ -1692,7 +1781,6 @@ BOOL ActivateMenuBarFocus(HWND hWnd)
BOOL MenuFocusLoop(HWND hWnd, LPPOPUPMENU lpmenu) BOOL MenuFocusLoop(HWND hWnd, LPPOPUPMENU lpmenu)
{ {
WND *wndPtr;
MSG msg; MSG msg;
#ifdef DEBUG_MENU #ifdef DEBUG_MENU
printf("Enter in Menu Focus Loop !\n"); printf("Enter in Menu Focus Loop !\n");
@ -1808,8 +1896,7 @@ void NC_TrackSysMenu(HWND hWnd)
DWORD GetMenuCheckMarkDimensions() DWORD GetMenuCheckMarkDimensions()
{ {
BITMAP bm; BITMAP bm;
if (hStdCheck == (HBITMAP)NULL) InitStdBitmaps();
hStdCheck = LoadBitmap((HANDLE)NULL, (LPSTR)OBM_CHECK);
GetObject(hStdCheck, sizeof(BITMAP), (LPSTR)&bm); GetObject(hStdCheck, sizeof(BITMAP), (LPSTR)&bm);
return MAKELONG(bm.bmWidth, bm.bmHeight); return MAKELONG(bm.bmWidth, bm.bmHeight);
} }
@ -1821,7 +1908,6 @@ DWORD GetMenuCheckMarkDimensions()
BOOL SetMenuItemBitmaps(HMENU hMenu, WORD nPos, WORD wFlags, BOOL SetMenuItemBitmaps(HMENU hMenu, WORD nPos, WORD wFlags,
HBITMAP hNewCheck, HBITMAP hNewUnCheck) HBITMAP hNewCheck, HBITMAP hNewUnCheck)
{ {
WND *wndPtr;
LPPOPUPMENU menu; LPPOPUPMENU menu;
LPMENUITEM lpitem; LPMENUITEM lpitem;
int i; int i;
@ -1856,7 +1942,7 @@ HMENU CreateMenu()
HMENU hMenu; HMENU hMenu;
LPPOPUPMENU menu; LPPOPUPMENU menu;
#ifdef DEBUG_MENU #ifdef DEBUG_MENU
printf("CreatePopupMenu !\n"); printf("CreateMenu !\n");
#endif #endif
hMenu = GlobalAlloc(GMEM_MOVEABLE, sizeof(POPUPMENU)); hMenu = GlobalAlloc(GMEM_MOVEABLE, sizeof(POPUPMENU));
menu = (LPPOPUPMENU) GlobalLock(hMenu); menu = (LPPOPUPMENU) GlobalLock(hMenu);
@ -1877,6 +1963,9 @@ HMENU CreateMenu()
menu->Width = 100; menu->Width = 100;
menu->Height = 0; menu->Height = 0;
GlobalUnlock(hMenu); GlobalUnlock(hMenu);
#ifdef DEBUG_MENU
printf("CreateMenu // return %04X\n", hMenu);
#endif
return hMenu; return hMenu;
} }
@ -1983,7 +2072,10 @@ HMENU GetMenu(HWND hWnd)
*/ */
BOOL SetMenu(HWND hWnd, HMENU hMenu) BOOL SetMenu(HWND hWnd, HMENU hMenu)
{ {
RECT rect;
LPPOPUPMENU lpmenu; LPPOPUPMENU lpmenu;
NCCALCSIZE_PARAMS *params;
HANDLE hparams;
WND * wndPtr = WIN_FindWndPtr(hWnd); WND * wndPtr = WIN_FindWndPtr(hWnd);
if (wndPtr == NULL) { if (wndPtr == NULL) {
printf("SetMenu(%04X, %04X) // Bad window handle !\n", hWnd, hMenu); printf("SetMenu(%04X, %04X) // Bad window handle !\n", hWnd, hMenu);
@ -1992,7 +2084,22 @@ BOOL SetMenu(HWND hWnd, HMENU hMenu)
#ifdef DEBUG_MENU #ifdef DEBUG_MENU
printf("SetMenu(%04X, %04X);\n", hWnd, hMenu); printf("SetMenu(%04X, %04X);\n", hWnd, hMenu);
#endif #endif
if (GetCapture() == hWnd) ReleaseCapture();
wndPtr->wIDmenu = hMenu; wndPtr->wIDmenu = hMenu;
if (hMenu == 0) {
printf("SetMenu(%04X, %04X) // Menu removed !\n", hWnd, hMenu);
hparams = USER_HEAP_ALLOC(GMEM_MOVEABLE, sizeof(NCCALCSIZE_PARAMS));
if (hparams) {
params = (NCCALCSIZE_PARAMS *) USER_HEAP_ADDR(hparams);
params->rgrc[0] = wndPtr->rectWindow;
params->lppos = NULL;
SendMessage(hWnd, WM_NCCALCSIZE, FALSE, (LONG)params);
wndPtr->rectClient = params->rgrc[0];
USER_HEAP_FREE(hparams);
}
SendMessage(hWnd, WM_NCPAINT, 0, 0L);
return TRUE;
}
lpmenu = (LPPOPUPMENU) GlobalLock(hMenu); lpmenu = (LPPOPUPMENU) GlobalLock(hMenu);
if (lpmenu == NULL) { if (lpmenu == NULL) {
printf("SetMenu(%04X, %04X) // Bad menu handle !\n", hWnd, hMenu); printf("SetMenu(%04X, %04X) // Bad menu handle !\n", hWnd, hMenu);
@ -2000,7 +2107,6 @@ BOOL SetMenu(HWND hWnd, HMENU hMenu)
} }
lpmenu->ownerWnd = hWnd; lpmenu->ownerWnd = hWnd;
ResetHiliteFlags(lpmenu); ResetHiliteFlags(lpmenu);
if (GetCapture() == hWnd) ReleaseCapture();
GlobalUnlock(hMenu); GlobalUnlock(hMenu);
return TRUE; return TRUE;
} }
@ -2092,6 +2198,18 @@ HMENU LoadMenuIndirect(LPSTR menu_template)
} }
/**********************************************************************
* InitStdBitmaps (Internal)
*/
void InitStdBitmaps()
{
if (hStdCheck == (HBITMAP)NULL)
hStdCheck = LoadBitmap((HANDLE)NULL, (LPSTR)OBM_CHECK);
if (hStdMnArrow == (HBITMAP)NULL)
hStdMnArrow = LoadBitmap((HANDLE)NULL, (LPSTR)OBM_MNARROW);
}
/********************************************************************** /**********************************************************************
* CopySysMenu (Internal) * CopySysMenu (Internal)
*/ */

View File

@ -16,6 +16,8 @@ DLLOBJS = \
dll_shell.o \ dll_shell.o \
dll_sound.o \ dll_sound.o \
dll_stress.o \ dll_stress.o \
dll_system.o \
dll_toolhelp.o \
dll_unixlib.o \ dll_unixlib.o \
dll_user.o \ dll_user.o \
dll_win87em.o \ dll_win87em.o \
@ -39,6 +41,8 @@ MakeDllFromSpec(shell,$(TOP)/$(MODULE))
MakeDllFromSpec(mmsystem,$(TOP)/$(MODULE)) MakeDllFromSpec(mmsystem,$(TOP)/$(MODULE))
MakeDllFromSpec(sound,$(TOP)/$(MODULE)) MakeDllFromSpec(sound,$(TOP)/$(MODULE))
MakeDllFromSpec(stress,$(TOP)/$(MODULE)) MakeDllFromSpec(stress,$(TOP)/$(MODULE))
MakeDllFromSpec(system,$(TOP)/$(MODULE))
MakeDllFromSpec(toolhelp,$(TOP)/$(MODULE))
MakeDllFromSpec(unixlib,$(TOP)/$(MODULE)) MakeDllFromSpec(unixlib,$(TOP)/$(MODULE))
MakeDllFromSpec(user,$(TOP)/$(MODULE)) MakeDllFromSpec(user,$(TOP)/$(MODULE))
MakeDllFromSpec(win87em,$(TOP)/$(MODULE)) MakeDllFromSpec(win87em,$(TOP)/$(MODULE))

View File

@ -85,7 +85,7 @@ length 490
68 pascal DeleteDC(word) DeleteDC(1) 68 pascal DeleteDC(word) DeleteDC(1)
69 pascal DeleteObject(word) DeleteObject(1) 69 pascal DeleteObject(word) DeleteObject(1)
70 pascal EnumFonts(word ptr ptr ptr) EnumFonts(1 2 3 4) 70 pascal EnumFonts(word ptr ptr ptr) EnumFonts(1 2 3 4)
#71 pascal EnumObjects 71 pascal EnumObjects(word word ptr ptr) EnumObjects(1 2 3 4)
72 pascal EqualRgn(word word) EqualRgn(1 2) 72 pascal EqualRgn(word word) EqualRgn(1 2)
73 pascal ExcludeVisRect(word s_word s_word s_word s_word) 73 pascal ExcludeVisRect(word s_word s_word s_word s_word)
ExcludeVisRect(1 2 3 4 5) ExcludeVisRect(1 2 3 4 5)
@ -136,8 +136,8 @@ length 490
129 pascal SaveVisRgn(word) SaveVisRgn(1) 129 pascal SaveVisRgn(word) SaveVisRgn(1)
130 pascal RestoreVisRgn(word) RestoreVisRgn(1) 130 pascal RestoreVisRgn(word) RestoreVisRgn(1)
131 pascal InquireVisRgn(word) InquireVisRgn(1) 131 pascal InquireVisRgn(word) InquireVisRgn(1)
#132 pascal SetEnvironment 132 pascal SetEnvironment(ptr ptr word) SetEnvironment(1 2 3)
#133 pascal GetEnvironment 133 pascal GetEnvironment(ptr ptr word) GetEnvironment(1 2 3)
134 pascal GetRgnBox(word ptr) GetRgnBox(1 2) 134 pascal GetRgnBox(word ptr) GetRgnBox(1 2)
#135 pascal ScanLr #135 pascal ScanLr
#136 pascal RemoveFontResource #136 pascal RemoveFontResource
@ -276,7 +276,7 @@ length 490
CreatePolyPolygonRgn(1 2 3 4) CreatePolyPolygonRgn(1 2 3 4)
#452 pascal GDISEEGDIDO #452 pascal GDISEEGDIDO
#460 pascal GDITASKTERMINATION #460 pascal GDITASKTERMINATION
#461 pascal SETOBJECTOWNER 461 pascal SetObjectOwner(word) SetObjectOwner(1)
#462 pascal ISGDIOBJECT #462 pascal ISGDIOBJECT
#463 pascal MAKEOBJECTPRIVATE #463 pascal MAKEOBJECTPRIVATE
#464 pascal FIXUPBOGUSPUBLISHERMETAFILE #464 pascal FIXUPBOGUSPUBLISHERMETAFILE

View File

@ -67,8 +67,33 @@ length 706
509 pascal WAVEINSTART(word) waveInStart(1) 509 pascal WAVEINSTART(word) waveInStart(1)
510 pascal WAVEINSTOP(word) waveInStop(1) 510 pascal WAVEINSTOP(word) waveInStop(1)
511 pascal WAVEINRESET(word) waveInReset(1) 511 pascal WAVEINRESET(word) waveInReset(1)
512 pascal WAVEINGETPOSITION(word ptr word) waveInGetPosition(1 2 3)
513 pascal WAVEINGETID(word ptr) waveInGetID(1 2) 513 pascal WAVEINGETID(word ptr) waveInGetID(1 2)
701 pascal MCISENDCOMMAND(word word long long) mciSendCommand(1 2 3 4) 701 pascal MCISENDCOMMAND(word word long long) mciSendCommand(1 2 3 4)
702 pascal MCISENDSTRING(ptr ptr word word) mciSendString(1 2 3 4) 702 pascal MCISENDSTRING(ptr ptr word word) mciSendString(1 2 3 4)
703 pascal MCIGETDEVICEID(ptr) mciSendCommand(1) 703 pascal MCIGETDEVICEID(ptr) mciSendCommand(1)
706 pascal MCIGETERRORSTRING(long ptr word) mciGetErrorString(1 2 3) 706 pascal MCIGETERRORSTRING(long ptr word) mciGetErrorString(1 2 3)
#1100 pascal DRVOPEN
#1101 pascal DRVCLOSE
#1102 pascal DRVSENDMESSAGE
#1103 pascal DRVGETMODULEHANDLE
#1104 pascal DRVDEFDRIVERPROC
#1210 pascal MMIOOPEN
#1211 pascal MMIOCLOSE
#1212 pascal MMIOREAD
#1213 pascal MMIOWRITE
#1214 pascal MMIOSEEK
#1215 pascal MMIOGETINFO
#1216 pascal MMIOSETINFO
#1217 pascal MMIOSETBUFFER
#1218 pascal MMIOFLUSH
#1219 pascal MMIOADVANCE
#1220 pascal MMIOSTRINGTOFOURCC
#1221 pascal MMIOINSTALLIOPROC
#1222 pascal MMIOSENDMESSAGE
#1223 pascal MMIODESCEND
#1224 pascal MMIOASCEND
#1225 pascal MMIOCREATECHUNK
#1226 pascal MMIORENAME

View File

@ -24,8 +24,6 @@ static char Copyright[] = "Copyright Robert J. Amstadt, 1993";
#define DEBUG_RELAY /* */ #define DEBUG_RELAY /* */
#define N_BUILTINS 11
struct dll_name_table_entry_s dll_builtin_table[N_BUILTINS] = struct dll_name_table_entry_s dll_builtin_table[N_BUILTINS] =
{ {
{ "KERNEL", KERNEL_table, 410, 1 }, { "KERNEL", KERNEL_table, 410, 1 },
@ -39,7 +37,10 @@ struct dll_name_table_entry_s dll_builtin_table[N_BUILTINS] =
{ "WINSOCK", WINSOCK_table, 155, 9 }, { "WINSOCK", WINSOCK_table, 155, 9 },
{ "STRESS", STRESS_table, 15, 10}, { "STRESS", STRESS_table, 15, 10},
{ "MMSYSTEM",MMSYSTEM_table,1023,11}, { "MMSYSTEM",MMSYSTEM_table,1023,11},
{ "SYSTEM", SYSTEM_table, 20 ,12},
{ "TOOLHELP",TOOLHELP_table, 83, 13},
}; };
/* don't forget to increase N_BUILTINS in dll.h if you add a dll */
unsigned short *Stack16Frame; unsigned short *Stack16Frame;
@ -220,7 +221,7 @@ FindDLLTable(char *dll_name)
int i; int i;
for (i = 0; i < N_BUILTINS; i++) for (i = 0; i < N_BUILTINS; i++)
if (strcmp(dll_builtin_table[i].dll_name, dll_name) == 0) if (strcasecmp(dll_builtin_table[i].dll_name, dll_name) == 0)
return dll_builtin_table[i].dll_table; return dll_builtin_table[i].dll_table;
return NULL; return NULL;

View File

@ -163,8 +163,8 @@ length 540
158 pascal SetMenu(word word) SetMenu(1 2) 158 pascal SetMenu(word word) SetMenu(1 2)
159 pascal GetSubMenu(word word) GetSubMenu(1 2) 159 pascal GetSubMenu(word word) GetSubMenu(1 2)
160 pascal DrawMenuBar(word) DrawMenuBar(1) 160 pascal DrawMenuBar(word) DrawMenuBar(1)
#161 GETMENUSTRING 161 pascal GetMenuString(word word ptr s_word word) GetMenuString(1 2 3 4 5)
#162 HILITEMENUITEM 162 pascal HiliteMenuItem(word word word word) HiliteMenuItem(1 2 3 4)
163 pascal CreateCaret(word word word word) CreateCaret(1 2 3 4) 163 pascal CreateCaret(word word word word) CreateCaret(1 2 3 4)
164 pascal DestroyCaret() DestroyCaret() 164 pascal DestroyCaret() DestroyCaret()
165 pascal SetCaretPos(word word) SetCaretPos(1 2) 165 pascal SetCaretPos(word word) SetCaretPos(1 2)
@ -272,8 +272,8 @@ length 540
#260 DEFERWINDOWPOS #260 DEFERWINDOWPOS
#261 ENDDEFERWINDOWPOS #261 ENDDEFERWINDOWPOS
262 pascal GetWindow(word word) GetWindow(1 2) 262 pascal GetWindow(word word) GetWindow(1 2)
#263 GETMENUITEMCOUNT 263 pascal GetMenuItemCount(word) GetMenuItemCount(1)
#264 GETMENUITEMID 264 pascal GetMenuItemID(word word) GetMenuItemID(1 2)
#265 SHOWOWNEDPOPUPS #265 SHOWOWNEDPOPUPS
266 pascal SetMessageQueue(word) SetMessageQueue(1) 266 pascal SetMessageQueue(word) SetMessageQueue(1)
267 pascal ShowScrollBar(word word word) ShowScrollBar(1 2 3) 267 pascal ShowScrollBar(word word word) ShowScrollBar(1 2 3)

View File

@ -65,5 +65,9 @@ extern struct dll_table_entry_s SOUND_table[];
extern struct dll_table_entry_s KEYBOARD_table[]; extern struct dll_table_entry_s KEYBOARD_table[];
extern struct dll_table_entry_s WINSOCK_table[]; extern struct dll_table_entry_s WINSOCK_table[];
extern struct dll_table_entry_s STRESS_table[]; extern struct dll_table_entry_s STRESS_table[];
extern struct dll_table_entry_s SYSTEM_table[];
extern struct dll_table_entry_s TOOLHELP_table[];
#define N_BUILTINS 13
#endif /* DLLS_H */ #endif /* DLLS_H */

View File

@ -301,8 +301,6 @@ extern BOOL GDI_FreeObject( HANDLE );
extern GDIOBJHDR * GDI_GetObjPtr( HANDLE, WORD ); extern GDIOBJHDR * GDI_GetObjPtr( HANDLE, WORD );
extern Display * XT_display; /* Will be removed */ extern Display * XT_display; /* Will be removed */
extern Screen * XT_screen; /* Will be removed */
extern Display * display; extern Display * display;
extern Screen * screen; extern Screen * screen;
extern Window rootWindow; extern Window rootWindow;

View File

@ -2975,7 +2975,7 @@ Fe(int,DlgDirListComboBox,HWND,a,LPSTR,b,int,c,int,d,WORD,e)
Fe(int,Escape,HDC,a,int,b,int,c,LPSTR,d,LPSTR,e) Fe(int,Escape,HDC,a,int,b,int,c,LPSTR,d,LPSTR,e)
Fe(int,ExcludeClipRect,HDC,a,short,b,short,c,short,d,short,e) Fe(int,ExcludeClipRect,HDC,a,short,b,short,c,short,d,short,e)
Fe(int,ExcludeVisRect,HDC,a,short,b,short,c,short,d,short,e) Fe(int,ExcludeVisRect,HDC,a,short,b,short,c,short,d,short,e)
Fe(int,GetMenuString,HMENU,a,WORD,b,LPSTR,c,int,d,WORD,e) Fe(int,GetMenuString,HMENU,a,WORD,b,LPSTR,c,short,d,WORD,e)
Fe(int,GetProfileString,LPSTR,a,LPSTR,b,LPSTR,c,LPSTR,d,int,e) Fe(int,GetProfileString,LPSTR,a,LPSTR,b,LPSTR,c,LPSTR,d,int,e)
Fe(int,IntersectClipRect,HDC,a,short,b,short,c,short,d,short,e) Fe(int,IntersectClipRect,HDC,a,short,b,short,c,short,d,short,e)
Fe(int,IntersectVisRect,HDC,a,short,b,short,c,short,d,short,e) Fe(int,IntersectVisRect,HDC,a,short,b,short,c,short,d,short,e)

View File

@ -35,9 +35,9 @@ typedef MODULEENTRY *LPMODULEENTRY;
static LPMODULEENTRY lpModList = NULL; static LPMODULEENTRY lpModList = NULL;
extern struct w_files * wine_files; extern struct w_files * wine_files;
#define N_BUILTINS 11 extern struct dll_name_table_entry_s dll_builtin_table[];
extern struct dll_name_table_entry_s dll_builtin_table[N_BUILTINS];
#define IS_BUILTIN_DLL(handle) ((handle >> 16) == 0xff)
/********************************************************************** /**********************************************************************
* GetModuleHandle [KERNEL.47] * GetModuleHandle [KERNEL.47]
@ -50,7 +50,7 @@ HANDLE GetModuleHandle(LPSTR lpModuleName)
printf("GetModuleHandle // searching in loaded modules\n"); printf("GetModuleHandle // searching in loaded modules\n");
while (w) { while (w) {
/* printf("GetModuleHandle // '%s' \n", w->name); */ /* printf("GetModuleHandle // '%s' \n", w->name); */
if (strcmp(w->name, lpModuleName) == 0) { if (strcasecmp(w->name, lpModuleName) == 0) {
printf("GetModuleHandle('%s') return %04X \n", printf("GetModuleHandle('%s') return %04X \n",
lpModuleName, w->hinstance); lpModuleName, w->hinstance);
return w->hinstance; return w->hinstance;
@ -60,7 +60,7 @@ HANDLE GetModuleHandle(LPSTR lpModuleName)
printf("GetModuleHandle // searching in builtin libraries\n"); printf("GetModuleHandle // searching in builtin libraries\n");
for (i = 0; i < N_BUILTINS; i++) { for (i = 0; i < N_BUILTINS; i++) {
if (dll_builtin_table[i].dll_name == NULL) break; if (dll_builtin_table[i].dll_name == NULL) break;
if (strcmp(dll_builtin_table[i].dll_name, lpModuleName) == 0) { if (strcasecmp(dll_builtin_table[i].dll_name, lpModuleName) == 0) {
printf("GetModuleHandle('%s') return %04X \n", printf("GetModuleHandle('%s') return %04X \n",
lpModuleName, 0xFF00 + i); lpModuleName, 0xFF00 + i);
return (0xFF00 + i); return (0xFF00 + i);
@ -90,17 +90,30 @@ int GetModuleUsage(HANDLE hModule)
int GetModuleFileName(HANDLE hModule, LPSTR lpFileName, short nSize) int GetModuleFileName(HANDLE hModule, LPSTR lpFileName, short nSize)
{ {
struct w_files *w; struct w_files *w;
LPSTR str; LPSTR str;
char windir[256], temp[256];
printf("GetModuleFileName(%04X, %08X, %d);\n", hModule, lpFileName, nSize); printf("GetModuleFileName(%04X, %08X, %d);\n", hModule, lpFileName, nSize);
if (lpFileName == NULL) return 0; if (lpFileName == NULL) return 0;
if (nSize < 1) return 0; if (nSize < 1) return 0;
w = GetFileInfo(hModule);
if (w == NULL) return 0; /* built-in dll ? */
str = w->filename; if (IS_BUILTIN_DLL(hModule)) {
if (str[0] == '/') str++; GetWindowsDirectory(windir, sizeof(windir));
sprintf(temp, "%s\\%s.DLL", windir, dll_builtin_table[hModule & 0x00ff].dll_name);
ToDos(temp);
strncpy(lpFileName, temp, nSize);
printf("GetModuleFileName copied '%s' (internal dll) return %d \n", lpFileName, nSize);
return strlen(lpFileName);
}
/* check loaded dlls */
if ((w = GetFileInfo(hModule)) == NULL)
return 0;
str = GetDosFileName(w->filename);
if (nSize > strlen(str)) nSize = strlen(str) + 1; if (nSize > strlen(str)) nSize = strlen(str) + 1;
strncpy(lpFileName, str, nSize); strncpy(lpFileName, str, nSize);
ToDos(lpFileName);
printf("GetModuleFileName copied '%s' return %d \n", lpFileName, nSize); printf("GetModuleFileName copied '%s' return %d \n", lpFileName, nSize);
return nSize - 1; return nSize - 1;
} }
@ -114,14 +127,31 @@ HANDLE LoadLibrary(LPSTR libname)
HANDLE hModule; HANDLE hModule;
LPMODULEENTRY lpMod = lpModList; LPMODULEENTRY lpMod = lpModList;
LPMODULEENTRY lpNewMod; LPMODULEENTRY lpNewMod;
int i;
if (FindDLLTable(libname)) char temp[64];
{
printf("Library was a builtin - returning 0x23\n");
return WINE_CODE_SELECTOR;
}
printf("LoadLibrary '%s'\n", libname); printf("LoadLibrary '%s'\n", libname);
/* extract dllname */
strcpy(temp, libname);
if (strchr(temp, '\\') || strchr(temp, '/'))
for (i = strlen(temp) - 1; i ; i--)
if (temp[i] == '\\' || temp[i] == '/') {
strcpy(temp, temp + i + 1);
break;
}
for (i = strlen(temp) - 1; i ; i--)
if (temp[i] == '.') {
temp[i] = 0;
break;
}
if (FindDLLTable(temp))
{
printf("Library was a builtin - \n");
return GetModuleHandle(temp);
}
if (lpMod != NULL) if (lpMod != NULL)
{ {
while (TRUE) while (TRUE)
@ -176,7 +206,13 @@ HANDLE LoadLibrary(LPSTR libname)
void FreeLibrary(HANDLE hLib) void FreeLibrary(HANDLE hLib)
{ {
LPMODULEENTRY lpMod = lpModList; LPMODULEENTRY lpMod = lpModList;
printf("FreeLibrary(%04X);\n", hLib); printf("FreeLibrary(%04X);\n", hLib);
/* built-in dll ? */
if (IS_BUILTIN_DLL(hLib))
return;
while (lpMod != NULL) { while (lpMod != NULL) {
if (lpMod->hInst == hLib) { if (lpMod->hInst == hLib) {
if (lpMod->Count == 1) { if (lpMod->Count == 1) {
@ -201,80 +237,106 @@ void FreeLibrary(HANDLE hLib)
*/ */
FARPROC GetProcAddress(HANDLE hModule, char *proc_name) FARPROC GetProcAddress(HANDLE hModule, char *proc_name)
{ {
WORD wOrdin; int i, sel, addr, ret;
int sel, addr, ret;
register struct w_files *w = wine_files; register struct w_files *w = wine_files;
int ordinal, len; int ordinal, len;
char * cpnt; char * cpnt;
char C[128]; char C[128];
HTASK hTask; HTASK hTask;
LPTASKENTRY lpTask; LPTASKENTRY lpTask;
if (hModule >= 0xF000) {
if ((int) proc_name & 0xffff0000) { /* built-in dll ? */
printf("GetProcAddress: builtin %#04X, '%s'\n", if (IS_BUILTIN_DLL(hModule))
hModule, proc_name); {
/* wOrdin = FindOrdinalFromName(struct dll_table_entry_s *dll_table, proc_name); */ if ((int) proc_name & 0xffff0000)
} {
else { printf("GetProcAddress: builtin %#04X, '%s'\n",
printf("GetProcAddress: builtin %#04X, %d\n", hModule, proc_name);
hModule, (int)proc_name); if (GetEntryDLLName(dll_builtin_table[hModule - 0xFF00].dll_name,
} proc_name, &sel, &addr))
return NULL; {
} printf("Address not found !\n");
if (hModule == 0) { }
hTask = GetCurrentTask(); }
printf("GetProcAddress // GetCurrentTask()=%04X\n", hTask); else
lpTask = (LPTASKENTRY) GlobalLock(hTask); {
if (lpTask == NULL) { printf("GetProcAddress: builtin %#04X, %d\n",
printf("GetProcAddress: can't find current module handle !\n"); hModule, (int)proc_name);
return NULL; if (GetEntryDLLOrdinal(dll_builtin_table[hModule-0xFF00].dll_name,
} (int)proc_name & 0x0000FFFF, &sel, &addr))
hModule = lpTask->hInst; {
printf("GetProcAddress: current module=%04X instance=%04X!\n", printf("Address not found !\n");
lpTask->hModule, lpTask->hInst); }
GlobalUnlock(hTask); }
} ret = MAKELONG(addr, sel);
while (w && w->hinstance != hModule) w = w->next; printf("GetProcAddress // ret=%08X sel=%04X addr=%04X\n",
if (w == NULL) return NULL; ret, sel, addr);
printf("GetProcAddress // Module Found ! w->filename='%s'\n", w->filename); return (FARPROC)ret;
if ((int)proc_name & 0xFFFF0000) { }
AnsiUpper(proc_name); if (hModule == 0)
printf("GetProcAddress: %04X, '%s'\n", hModule, proc_name); {
cpnt = w->nrname_table; hTask = GetCurrentTask();
while(TRUE) { printf("GetProcAddress // GetCurrentTask()=%04X\n", hTask);
if (((int) cpnt) - ((int)w->nrname_table) > lpTask = (LPTASKENTRY) GlobalLock(hTask);
w->ne_header->nrname_tab_length) return NULL; if (lpTask == NULL)
len = *cpnt++; {
strncpy(C, cpnt, len); printf("GetProcAddress: can't find current module handle !\n");
C[len] = '\0'; return NULL;
}
hModule = lpTask->hInst;
printf("GetProcAddress: current module=%04X instance=%04X!\n",
lpTask->hModule, lpTask->hInst);
GlobalUnlock(hTask);
}
while (w && w->hinstance != hModule)
w = w->next;
if (w == NULL)
return NULL;
printf("GetProcAddress // Module Found ! w->filename='%s'\n", w->filename);
if ((int)proc_name & 0xFFFF0000)
{
AnsiUpper(proc_name);
printf("GetProcAddress: %04X, '%s'\n", hModule, proc_name);
cpnt = w->nrname_table;
while(TRUE)
{
if (((int) cpnt) - ((int)w->nrname_table) >
w->ne_header->nrname_tab_length) return NULL;
len = *cpnt++;
strncpy(C, cpnt, len);
C[len] = '\0';
#ifdef DEBUG_MODULE #ifdef DEBUG_MODULE
printf("pointing Function '%s' ordinal=%d !\n", printf("pointing Function '%s' ordinal=%d !\n",
C, *((unsigned short *)(cpnt + len))); C, *((unsigned short *)(cpnt + len)));
#endif #endif
if (strncmp(cpnt, proc_name, len) == 0) { if (strncmp(cpnt, proc_name, len) == 0)
ordinal = *((unsigned short *)(cpnt + len)); {
break; ordinal = *((unsigned short *)(cpnt + len));
} break;
cpnt += len + 2; }
}; cpnt += len + 2;
if (ordinal == 0) { };
printf("GetProcAddress // function '%s' not found !\n", proc_name); if (ordinal == 0)
return NULL; {
} printf("GetProcAddress // function '%s' not found !\n", proc_name);
} return NULL;
else { }
printf("GetProcAddress: %#04x, %d\n", hModule, (int) proc_name); }
ordinal = (int)proc_name; else
} {
ret = GetEntryPointFromOrdinal(w, ordinal); printf("GetProcAddress: %#04x, %d\n", hModule, (int) proc_name);
if (ret == -1) { ordinal = (int)proc_name;
printf("GetProcAddress // Function #%d not found !\n", ordinal); }
return NULL; ret = GetEntryPointFromOrdinal(w, ordinal);
} if (ret == -1)
addr = ret & 0xffff; {
sel = (ret >> 16); printf("GetProcAddress // Function #%d not found !\n", ordinal);
printf("GetProcAddress // ret=%08X sel=%04X addr=%04X\n", ret, sel, addr); return NULL;
return (FARPROC) ret; }
addr = ret & 0xffff;
sel = (ret >> 16);
printf("GetProcAddress // ret=%08X sel=%04X addr=%04X\n", ret, sel, addr);
return (FARPROC) ret;
} }
#endif /* ifndef WINELIB */ #endif /* ifndef WINELIB */

View File

@ -248,6 +248,43 @@ load_typeinfo (int fd, struct resource_typeinfo_s *typeinfo)
return read (fd, typeinfo, sizeof (*typeinfo)) == sizeof (*typeinfo); return read (fd, typeinfo, sizeof (*typeinfo)) == sizeof (*typeinfo);
} }
#endif #endif
int
type_match(int type_id1, int type_id2, int fd, off_t off)
{
off_t old_pos;
unsigned char c;
size_t nbytes;
char name[256];
if (type_id1 == -1)
return 1;
if ((type_id1 & 0xffff0000) == 0) {
if ((type_id2 & 0x8000) == 0)
return 0;
return (type_id1 & 0x000f) == (type_id2 & 0x000f);
}
if ((type_id2 & 0x8000) != 0)
return 0;
#ifdef DEBUG_RESOURCE
printf("type_compare: type_id2=%04X !\n", type_id2);
#endif
old_pos = lseek(fd, 0, SEEK_CUR);
lseek(fd, off + type_id2, SEEK_SET);
read(fd, &c, 1);
nbytes = CONV_CHAR_TO_LONG (c);
#ifdef DEBUG_RESOURCE
printf("type_compare: namesize=%d\n", nbytes);
#endif
read(fd, name, nbytes);
lseek(fd, old_pos, SEEK_SET);
name[nbytes] = '\0';
#ifdef DEBUG_RESOURCE
printf("type_compare: name=`%s'\n", name);
#endif
return strcasecmp((char *) type_id1, name) == 0;
}
/********************************************************************** /**********************************************************************
* FindResourceByNumber * FindResourceByNumber
*/ */
@ -281,8 +318,7 @@ FindResourceByNumber(struct resource_nameinfo_s *result_p,
/* /*
* Find resource. * Find resource.
*/ */
typeinfo.type_id = 0xffff; for (;;) {
while (typeinfo.type_id != 0) {
if (!load_typeinfo (ResourceFd, &typeinfo)){ if (!load_typeinfo (ResourceFd, &typeinfo)){
printf("FindResourceByNumber (%X) bad typeinfo size !\n", resource_id); printf("FindResourceByNumber (%X) bad typeinfo size !\n", resource_id);
return -1; return -1;
@ -292,7 +328,8 @@ FindResourceByNumber(struct resource_nameinfo_s *result_p,
typeinfo.type_id, typeinfo.count, type_id); typeinfo.type_id, typeinfo.count, type_id);
#endif #endif
if (typeinfo.type_id == 0) break; if (typeinfo.type_id == 0) break;
if (typeinfo.type_id == type_id || type_id == -1) { if (type_match(type_id, typeinfo.type_id, ResourceFd, rtoff)) {
for (i = 0; i < typeinfo.count; i++) { for (i = 0; i < typeinfo.count; i++) {
#ifndef WINELIB #ifndef WINELIB
if (read(ResourceFd, &nameinfo, sizeof(nameinfo)) != if (read(ResourceFd, &nameinfo, sizeof(nameinfo)) !=
@ -306,7 +343,7 @@ FindResourceByNumber(struct resource_nameinfo_s *result_p,
} }
#ifdef DEBUG_RESOURCE #ifdef DEBUG_RESOURCE
printf("FindResource: search type=%X id=%X // type=%X id=%X\n", printf("FindResource: search type=%X id=%X // type=%X id=%X\n",
type_id, resource_id, typeinfo.type_id, nameinfo.id); type_id, resource_id, typeinfo.type_id, type_id2);
#endif #endif
if (nameinfo.id == resource_id) { if (nameinfo.id == resource_id) {
memcpy(result_p, &nameinfo, sizeof(nameinfo)); memcpy(result_p, &nameinfo, sizeof(nameinfo));
@ -377,8 +414,7 @@ FindResourceByName(struct resource_nameinfo_s *result_p,
/* /*
* Find resource. * Find resource.
*/ */
typeinfo.type_id = 0xffff; for (;;)
while (typeinfo.type_id != 0)
{ {
if (!load_typeinfo (ResourceFd, &typeinfo)) if (!load_typeinfo (ResourceFd, &typeinfo))
{ {
@ -390,7 +426,7 @@ FindResourceByName(struct resource_nameinfo_s *result_p,
typeinfo.type_id, typeinfo.count, type_id); typeinfo.type_id, typeinfo.count, type_id);
#endif #endif
if (typeinfo.type_id == 0) break; if (typeinfo.type_id == 0) break;
if (typeinfo.type_id == type_id || type_id == -1) if (type_match(type_id, typeinfo.type_id, ResourceFd, rtoff))
{ {
for (i = 0; i < typeinfo.count; i++) for (i = 0; i < typeinfo.count; i++)
{ {
@ -529,6 +565,16 @@ HICON LoadIcon(HANDLE instance, LPSTR icon_name)
rgbq[1].rgbGreen = 0x00; rgbq[1].rgbGreen = 0x00;
rgbq[1].rgbRed = 0x00; rgbq[1].rgbRed = 0x00;
rgbq[1].rgbReserved = 0x00; rgbq[1].rgbReserved = 0x00;
if (bih->biSizeImage == 0) {
if (bih->biCompression != BI_RGB) {
printf("Unknown size for compressed Icon bitmap.\n");
GlobalFree(rsc_mem);
ReleaseDC(GetDesktopWindow(), hdc);
return 0;
}
bih->biSizeImage = (bih->biWidth * bih->biHeight * bih->biBitCount
+ 7) / 8;
}
lpico->hBitMask = CreateDIBitmap(hdc, bih, CBM_INIT, lpico->hBitMask = CreateDIBitmap(hdc, bih, CBM_INIT,
(LPSTR)lp + bih->biSizeImage - sizeof(BITMAPINFOHEADER) / 2 - 4, (LPSTR)lp + bih->biSizeImage - sizeof(BITMAPINFOHEADER) / 2 - 4,
(BITMAPINFO *)bih, DIB_RGB_COLORS ); (BITMAPINFO *)bih, DIB_RGB_COLORS );
@ -667,6 +713,7 @@ HANDLE FindResource(HANDLE instance, LPSTR resource_name, LPSTR type_name)
{ {
RESOURCE *r; RESOURCE *r;
HANDLE rh; HANDLE rh;
int type;
if (instance == 0) if (instance == 0)
return 0; return 0;
@ -688,15 +735,39 @@ HANDLE FindResource(HANDLE instance, LPSTR resource_name, LPSTR type_name)
r->info_mem = rh; r->info_mem = rh;
r->rsc_mem = 0; r->rsc_mem = 0;
if (((int) resource_name & 0xffff0000) == 0) if (((int) type_name & 0xffff0000) == 0)
{ {
r->size_shift = FindResourceByNumber(&r->nameinfo, (int)type_name, type = (int) type_name;
(int) resource_name | 0x8000); }
else if (type_name[0] == '\0')
{
type = -1;
}
else if (type_name[0] == '#')
{
type = atoi(type_name + 1);
} }
else else
{ {
r->size_shift = FindResourceByName(&r->nameinfo, (int)type_name, type = (int) type_name;
resource_name); }
if (((int) resource_name & 0xffff0000) == 0)
{
r->size_shift = FindResourceByNumber(&r->nameinfo, type,
(int) resource_name | 0x8000);
}
else if (resource_name[0] == '\0')
{
r->size_shift = FindResourceByNumber(&r->nameinfo, type, -1);
}
else if (resource_name[0] == '#')
{
r->size_shift = FindResourceByNumber(&r->nameinfo, type,
atoi(resource_name + 1));
}
else
{
r->size_shift = FindResourceByName(&r->nameinfo, type, resource_name);
} }
if (r->size_shift == -1) if (r->size_shift == -1)
@ -906,7 +977,7 @@ LoadString(HANDLE instance, WORD resource_id, LPSTR buffer, int buflen)
GlobalFree(hmem); GlobalFree(hmem);
#ifdef DEBUG_RESOURCE #ifdef DEBUG_RESOURCE
printf(" '%s'\n", buffer); printf("LoadString // '%s' copied !\n", buffer);
#endif #endif
return i; return i;
} }

View File

@ -417,7 +417,7 @@ WORD FreeSelector(WORD sel)
if (s->shm_key == 0) if (s->shm_key == 0)
{ {
munmap(s->base_addr, ((s->length + PAGE_SIZE) & ~(PAGE_SIZE - 1))); munmap(s->base_addr, ((s->length + PAGE_SIZE) & ~(PAGE_SIZE - 1)));
memcpy(s, 0, sizeof(*s)); memset(s, 0, sizeof(*s));
SelectorMap[sel_idx] = 0; SelectorMap[sel_idx] = 0;
} }
else else
@ -432,7 +432,7 @@ WORD FreeSelector(WORD sel)
if (alias_count == 1) if (alias_count == 1)
shmctl(s->shm_key, IPC_RMID, NULL); shmctl(s->shm_key, IPC_RMID, NULL);
memcpy(s, 0, sizeof(*s)); memset(s, 0, sizeof(*s));
SelectorMap[sel_idx] = 0; SelectorMap[sel_idx] = 0;
} }
@ -457,7 +457,7 @@ WORD FreeSelector(WORD sel)
{ {
s = &Segments[sel_idx]; s = &Segments[sel_idx];
munmap(s->base_addr, ((s->length + PAGE_SIZE) & ~(PAGE_SIZE - 1))); munmap(s->base_addr, ((s->length + PAGE_SIZE) & ~(PAGE_SIZE - 1)));
memcpy(s, 0, sizeof(*s)); memset(s, 0, sizeof(*s));
SelectorMap[sel >> 3] = 0; SelectorMap[sel >> 3] = 0;
} }
#endif /* HAVE_IPC */ #endif /* HAVE_IPC */
@ -847,15 +847,10 @@ CreateSelectors(struct w_files * wpnt)
* First we need to check for local heap. Second we nee to see if * First we need to check for local heap. Second we nee to see if
* this is also the stack segment. * this is also the stack segment.
*/ */
if (i + 1 == ne_header->auto_data_seg) if (i + 1 == ne_header->auto_data_seg || i + 1 == ne_header->ss)
{ {
s->length += ne_header->local_heap_length; s->length = 0x10000;
ne_header->sp = s->length - 2;
if (i + 1 == ne_header->ss)
{
s->length += ne_header->stack_length;
ne_header->sp = s->length;
}
} }
/* /*

View File

@ -131,6 +131,11 @@ static void win_fault(int signal, int code, struct sigcontext *scp)
if (!do_int26(scp)) if (!do_int26(scp))
goto oops; goto oops;
break; break;
case 0x2f:
if (!do_int2f(scp))
goto oops;
break;
default: default:
fprintf(stderr,"Unexpected Windows interrupt %x\n", *instr); fprintf(stderr,"Unexpected Windows interrupt %x\n", *instr);

View File

@ -790,5 +790,6 @@ DWORD GetFreeSpace(UINT wFlags)
if (free_map[i] == 1) if (free_map[i] == 1)
total_free++; total_free++;
printf("GetFreeSpace // return %ld !\n", total_free << 16);
return total_free << 16; return total_free << 16;
} }

View File

@ -171,7 +171,7 @@ HCURSOR LoadCursor(HANDLE instance, LPSTR cursor_name)
ReleaseDC(GetDesktopWindow(), hdc); ReleaseDC(GetDesktopWindow(), hdc);
return 0; return 0;
} }
(char *)lp += 2; lp++;
for (j = 0; j < 16; j++) for (j = 0; j < 16; j++)
printf("%04X ", *(lp + j)); printf("%04X ", *(lp + j));
/* /*

View File

@ -273,7 +273,7 @@ void ToDos(char *s)
*s++ = toupper(*p); *s++ = toupper(*p);
else { else {
*s++ = '\\'; *s++ = '\\';
if (*s == '/' || *s == '\\') if (*(p+1) == '/' || *(p+1) == '\\')
p++; p++;
} }
} }
@ -390,6 +390,26 @@ char *GetUnixFileName(char *dosfilename)
return(temp); return(temp);
} }
char *GetDosFileName(char *unixfilename)
{
int i;
char temp[256];
/* /dos/windows/system.ini => c:\windows\system.ini */
for (i = 0 ; i != MAX_DOS_DRIVES; i++) {
if (DosDrives[i].rootdir != NULL) {
if (strncmp(DosDrives[i].rootdir, unixfilename, strlen(DosDrives[i].rootdir)) == 0) {
sprintf(temp, "%c:\\%s", 'A' + i, unixfilename + strlen(DosDrives[i].rootdir) + 1);
ToDos(temp);
return temp;
}
}
}
strcpy(temp, unixfilename);
ToDos(temp);
return(temp);
}
char *DOS_GetCurrentDir(int drive) char *DOS_GetCurrentDir(int drive)
{ {
/* should return 'WINDOWS\SYSTEM' */ /* should return 'WINDOWS\SYSTEM' */
@ -734,11 +754,7 @@ struct dosdirent *DOS_readdir(struct dosdirent *de)
do { do {
if ((d = readdir(de->ds)) == NULL) if ((d = readdir(de->ds)) == NULL)
{ return NULL;
closedir(de->ds);
de->inuse = 0;
return de;
}
strcpy(de->filename, d->d_name); strcpy(de->filename, d->d_name);
if (d->d_reclen > 12) if (d->d_reclen > 12)
@ -765,7 +781,7 @@ struct dosdirent *DOS_readdir(struct dosdirent *de)
void DOS_closedir(struct dosdirent *de) void DOS_closedir(struct dosdirent *de)
{ {
if (de->inuse) if (de && de->inuse)
{ {
closedir(de->ds); closedir(de->ds);
de->inuse = 0; de->inuse = 0;

View File

@ -58,19 +58,25 @@ INT lstrlen(LPCSTR str)
return strlen(str); return strlen(str);
} }
/* AnsiUpper USER.431 */ /* AnsiUpper USER.431 */
char FAR* AnsiUpper(char FAR* strOrChar) char FAR* AnsiUpper(char FAR* strOrChar)
{ {
/* I am not sure if the locale stuff works with toupper, but then again /* I am not sure if the locale stuff works with toupper, but then again
I am not sure if the Linux libc locale stuffs works at all */ I am not sure if the Linux libc locale stuffs works at all */
if((int)strOrChar<256) /* if((int)strOrChar<256)
return (char FAR*) toupper((int)strOrChar); return (char FAR*) toupper((int)strOrChar);
else { else {
int i; int i;
for(i=0;(i<65536)&&strOrChar[i];i++) for(i=0;(i<65536) && strOrChar[i];i++)
strOrChar[i]=toupper(strOrChar[i]); strOrChar[i]=toupper(strOrChar[i]);
return strOrChar; return strOrChar;
} } */
int i;
for (i = 0; (i < 65536 && strOrChar[i]);i++)
strOrChar[i] = (strOrChar[i] >= 'a' && strOrChar[i] <= 'z') ?
strOrChar[i] - ('a' - 'A') : strOrChar[i];
return strOrChar;
} }
/* AnsiLower USER.432 */ /* AnsiLower USER.432 */
@ -78,14 +84,18 @@ char FAR* AnsiLower(char FAR* strOrChar)
{ {
/* I am not sure if the locale stuff works with tolower, but then again /* I am not sure if the locale stuff works with tolower, but then again
I am not sure if the Linux libc locale stuffs works at all */ I am not sure if the Linux libc locale stuffs works at all */
if((int)strOrChar<256) /* if((int)strOrChar<256)
return (char FAR*)tolower((int)strOrChar); return (char FAR*)tolower((int)strOrChar);
else { else {
int i; int i;
for(i=0;(i<65536)&&strOrChar[i];i++) for(i=0;(i<65536)&&strOrChar[i];i++)
strOrChar[i]=tolower(strOrChar[i]); strOrChar[i]=tolower(strOrChar[i]);
return strOrChar; return strOrChar;
} }*/
int i;
for (i = 0; (i < 65536 && strOrChar[i]);i++)
strOrChar[i] = (strOrChar[i] >= 'A' && strOrChar[i] <= 'Z') ?
strOrChar[i] + ('a' - 'A') : strOrChar[i];
} }
/* AnsiUpperBuff USER.437 */ /* AnsiUpperBuff USER.437 */

View File

@ -20,8 +20,9 @@ static char Copyright[] = "Copyright Alexandre Julliard, 1994";
#define WINE_CLASS "Wine" /* Class name for resources */ #define WINE_CLASS "Wine" /* Class name for resources */
LPSTR lpEnvList;
Display * XT_display; /* To be removed */ Display * XT_display; /* To be removed */
Screen * XT_screen; /* To be removed */
Display *display; Display *display;
Screen *screen; Screen *screen;
@ -298,7 +299,6 @@ int main( int argc, char *argv[] )
screenWidth = WidthOfScreen( screen ); screenWidth = WidthOfScreen( screen );
screenHeight = HeightOfScreen( screen ); screenHeight = HeightOfScreen( screen );
XT_display = display; XT_display = display;
XT_screen = screen;
if (screenDepth) /* -depth option specified */ if (screenDepth) /* -depth option specified */
{ {
depth_list = XListDepths(display,DefaultScreen(display),&depth_count); depth_list = XListDepths(display,DefaultScreen(display),&depth_count);
@ -359,6 +359,26 @@ LONG GetWinFlags(void)
return (WF_STANDARD | WF_CPU286 | WF_PMODE | WF_80x87); return (WF_STANDARD | WF_CPU286 | WF_PMODE | WF_80x87);
} }
/***********************************************************************
* SetEnvironment (GDI.132)
*/
int SetEnvironment(LPSTR lpPortName, LPSTR lpEnviron, WORD nCount)
{
printf("EMPTY STUB ! // SetEnvironnement('%s', '%s', %d) !\n",
lpPortName, lpEnviron, nCount);
return 0;
}
/***********************************************************************
* GetEnvironment (GDI.134)
*/
int GetEnvironment(LPSTR lpPortName, LPSTR lpEnviron, WORD nMaxSiz)
{
printf("EMPTY STUB ! // GetEnvironnement('%s', '%s', %d) !\n",
lpPortName, lpEnviron, nMaxSiz);
return 0;
}
/*********************************************************************** /***********************************************************************
* GetTimerResolution (USER.14) * GetTimerResolution (USER.14)
*/ */

View File

@ -58,13 +58,15 @@ int MessageBox(HWND hWnd, LPSTR str, LPSTR title, WORD type)
if (wndPtr == NULL) { if (wndPtr == NULL) {
hInst = hSysRes; hInst = hSysRes;
#ifdef DEBUG_MSGBOX #ifdef DEBUG_MSGBOX
printf("MessageBox(NULL, '%s', '%s', %04X)\n", str, title, type); printf("MessageBox(NULL, %08X='%s', %08X='%s', %04X)\n",
str, str, title, title, type);
#endif #endif
} }
else { else {
hInst = wndPtr->hInstance; hInst = wndPtr->hInstance;
#ifdef DEBUG_MSGBOX #ifdef DEBUG_MSGBOX
printf("MessageBox(%04X, '%s', '%s', %04X)\n", hWnd, str, title, type); printf("MessageBox(%04X, %08X='%s', %08X='%s', %04X)\n",
hWnd, str, str, title, title, type);
#endif #endif
} }
lpmb = (LPMSGBOX) malloc(sizeof(MSGBOX)); lpmb = (LPMSGBOX) malloc(sizeof(MSGBOX));
@ -379,7 +381,7 @@ BOOL FAR PASCAL AboutWine_Proc(HWND hDlg, WORD msg, WORD wParam, LONG lParam)
strcpy(str, "WINELOGO"); strcpy(str, "WINELOGO");
hBitMap = LoadBitmap((HINSTANCE)NULL, (LPSTR)str); hBitMap = LoadBitmap((HINSTANCE)NULL, (LPSTR)str);
strcpy(str, "PROPOSED_LICENSE"); strcpy(str, "LICENSE");
printf("str = '%s'\n", str); printf("str = '%s'\n", str);
hFile = OpenFile((LPSTR)str, &ofstruct, OF_READ); hFile = OpenFile((LPSTR)str, &ofstruct, OF_READ);
ptr = (LPSTR)malloc(2048); ptr = (LPSTR)malloc(2048);

View File

@ -13,6 +13,10 @@ static char Copyright[] = "Copyright Martin Ayotte, 1993";
static WORD mciActiveDev = 0; static WORD mciActiveDev = 0;
UINT WINAPI midiGetErrorText(UINT uError, LPSTR lpText, UINT uSize);
UINT WINAPI waveGetErrorText(UINT uError, LPSTR lpText, UINT uSize);
int MCI_LibMain(HANDLE hInstance, WORD wDataSeg, int MCI_LibMain(HANDLE hInstance, WORD wDataSeg,
WORD cbHeapSize, LPSTR lpCmdLine) WORD cbHeapSize, LPSTR lpCmdLine)
{ {
@ -87,6 +91,7 @@ BOOL mciGetErrorString (DWORD wError, LPSTR lpstrBuffer, UINT uLength)
{ {
LPSTR msgptr; LPSTR msgptr;
int maxbuf; int maxbuf;
printf("mciGetErrorString(%04X, %08X, %d);\n", wError, lpstrBuffer, uLength);
if ((lpstrBuffer == NULL) || (uLength < 1)) return(FALSE); if ((lpstrBuffer == NULL) || (uLength < 1)) return(FALSE);
lpstrBuffer[0] = '\0'; lpstrBuffer[0] = '\0';
switch(wError) { switch(wError) {
@ -358,6 +363,7 @@ DWORD mciWaveOpen(UINT wDevID, DWORD dwParam, LPMCI_WAVE_OPEN_PARMS lpParms)
*/ */
DWORD mciOpen(UINT wDevID, DWORD dwParam, LPMCI_OPEN_PARMS lpParms) DWORD mciOpen(UINT wDevID, DWORD dwParam, LPMCI_OPEN_PARMS lpParms)
{ {
char str[128];
DWORD dwDevTyp = 0; DWORD dwDevTyp = 0;
if (lpParms == NULL) return MCIERR_INTERNAL; if (lpParms == NULL) return MCIERR_INTERNAL;
printf("mciOpen(%04X, %08X, %08X)\n", wDevID, dwParam, lpParms); printf("mciOpen(%04X, %08X, %08X)\n", wDevID, dwParam, lpParms);
@ -368,19 +374,22 @@ DWORD mciOpen(UINT wDevID, DWORD dwParam, LPMCI_OPEN_PARMS lpParms)
dwDevTyp = (DWORD)lpParms->lpstrDeviceType; dwDevTyp = (DWORD)lpParms->lpstrDeviceType;
} }
else { else {
if (strcmp(lpParms->lpstrDeviceType, "cdaudio") == 0) { printf("MCI_OPEN // Dev='%s' !\n", lpParms->lpstrDeviceType);
strcpy(str, lpParms->lpstrDeviceType);
AnsiUpper(str);
if (strcmp(str, "CDAUDIO") == 0) {
dwDevTyp = MCI_DEVTYPE_CD_AUDIO; dwDevTyp = MCI_DEVTYPE_CD_AUDIO;
} }
else else
if (strcmp(lpParms->lpstrDeviceType, "waveaudio") == 0) { if (strcmp(str, "WAVEAUDIO") == 0) {
dwDevTyp = MCI_DEVTYPE_WAVEFORM_AUDIO; dwDevTyp = MCI_DEVTYPE_WAVEFORM_AUDIO;
} }
else else
if (strcmp(lpParms->lpstrDeviceType, "Sequencer") == 0) { if (strcmp(str, "SEQUENCER") == 0) {
dwDevTyp = MCI_DEVTYPE_SEQUENCER; dwDevTyp = MCI_DEVTYPE_SEQUENCER;
} }
else else
if (strcmp(lpParms->lpstrDeviceType, "Animation1") == 0) { if (strcmp(str, "ANIMATION1") == 0) {
dwDevTyp = MCI_DEVTYPE_ANIMATION; dwDevTyp = MCI_DEVTYPE_ANIMATION;
} }
} }
@ -393,7 +402,8 @@ DWORD mciOpen(UINT wDevID, DWORD dwParam, LPMCI_OPEN_PARMS lpParms)
return MCIERR_DEVICE_NOT_INSTALLED; return MCIERR_DEVICE_NOT_INSTALLED;
case MCI_DEVTYPE_SEQUENCER: case MCI_DEVTYPE_SEQUENCER:
printf("MCI_OPEN // No SEQUENCER yet !\n"); printf("MCI_OPEN // No SEQUENCER yet !\n");
return MCIERR_DEVICE_NOT_INSTALLED; break;
/* return MCIERR_DEVICE_NOT_INSTALLED; */
case MCI_DEVTYPE_ANIMATION: case MCI_DEVTYPE_ANIMATION:
printf("MCI_OPEN // No ANIMATION yet !\n"); printf("MCI_OPEN // No ANIMATION yet !\n");
return MCIERR_DEVICE_NOT_INSTALLED; return MCIERR_DEVICE_NOT_INSTALLED;
@ -556,45 +566,6 @@ DWORD WINAPI mciSendString (LPCSTR lpstrCommand,
HMMIO WINAPI mmioOpen(LPSTR szFileName, MMIOINFO FAR* lpmmioinfo, DWORD dwOpenFlags)
{
printf("mmioOpen('%s', %08X, %08X);\n", szFileName, lpmmioinfo, dwOpenFlags);
return 0;
}
UINT WINAPI mmioClose(HMMIO hmmio, UINT uFlags)
{
printf("mmioClose(%04X, %04X);\n", hmmio, uFlags);
return 0;
}
LONG WINAPI mmioRead(HMMIO hmmio, HPSTR pch, LONG cch)
{
printf("mmioRead\n");
return 0;
}
LONG WINAPI mmioWrite(HMMIO hmmio, HPCSTR pch, LONG cch)
{
printf("mmioWrite\n");
return 0;
}
LONG WINAPI mmioSeek(HMMIO hmmio, LONG lOffset, int iOrigin)
{
printf("mmioSeek\n");
return 0;
}
UINT WINAPI midiOutGetNumDevs(void) UINT WINAPI midiOutGetNumDevs(void)
{ {
printf("midiOutGetNumDevs\n"); printf("midiOutGetNumDevs\n");
@ -625,6 +596,9 @@ UINT WINAPI midiOutSetVolume(UINT uDeviceID, DWORD dwVolume)
} }
/**************************************************************************
* midiOutGetErrorText [MMSYSTEM.203]
*/
UINT WINAPI midiOutGetErrorText(UINT uError, LPSTR lpText, UINT uSize) UINT WINAPI midiOutGetErrorText(UINT uError, LPSTR lpText, UINT uSize)
{ {
printf("midiOutGetErrorText\n"); printf("midiOutGetErrorText\n");
@ -632,6 +606,9 @@ UINT WINAPI midiOutGetErrorText(UINT uError, LPSTR lpText, UINT uSize)
} }
/**************************************************************************
* midiGetErrorText [internal]
*/
UINT WINAPI midiGetErrorText(UINT uError, LPSTR lpText, UINT uSize) UINT WINAPI midiGetErrorText(UINT uError, LPSTR lpText, UINT uSize)
{ {
LPSTR msgptr; LPSTR msgptr;
@ -781,6 +758,9 @@ UINT WINAPI midiInGetDevCaps(UINT uDeviceID,
/**************************************************************************
* midiInGetErrorText [MMSYSTEM.303]
*/
UINT WINAPI midiInGetErrorText(UINT uError, LPSTR lpText, UINT uSize) UINT WINAPI midiInGetErrorText(UINT uError, LPSTR lpText, UINT uSize)
{ {
printf("midiInGetErrorText\n"); printf("midiInGetErrorText\n");
@ -851,35 +831,38 @@ UINT WINAPI midiInStart(HMIDIIN hMidiIn)
UINT WINAPI midiInStop(HMIDIIN hMidiIn) UINT WINAPI midiInStop(HMIDIIN hMidiIn)
{ {
printf("midiInStop\n"); printf("midiInStop\n");
return 0; return 0;
} }
UINT WINAPI midiInReset(HMIDIIN hMidiIn) UINT WINAPI midiInReset(HMIDIIN hMidiIn)
{ {
printf("midiInReset\n"); printf("midiInReset\n");
return 0; return 0;
} }
UINT WINAPI waveOutGetNumDevs() UINT WINAPI waveOutGetNumDevs()
{ {
printf("waveOutGetNumDevs\n"); printf("waveOutGetNumDevs\n");
return 0; return 0;
} }
UINT WINAPI waveOutGetDevCaps(UINT uDeviceID, WAVEOUTCAPS FAR* lpCaps, UINT uSize) UINT WINAPI waveOutGetDevCaps(UINT uDeviceID, WAVEOUTCAPS FAR* lpCaps, UINT uSize)
{ {
printf("waveOutGetDevCaps\n"); printf("waveOutGetDevCaps\n");
return 0; return MMSYSERR_INVALHANDLE;
} }
/**************************************************************************
* waveOutGetErrorText [MMSYSTEM.403]
*/
UINT WINAPI waveOutGetErrorText(UINT uError, LPSTR lpText, UINT uSize) UINT WINAPI waveOutGetErrorText(UINT uError, LPSTR lpText, UINT uSize)
{ {
printf("waveOutGetErrorText\n"); printf("waveOutGetErrorText\n");
@ -887,6 +870,9 @@ UINT WINAPI waveOutGetErrorText(UINT uError, LPSTR lpText, UINT uSize)
} }
/**************************************************************************
* waveGetErrorText [internal]
*/
UINT WINAPI waveGetErrorText(UINT uError, LPSTR lpText, UINT uSize) UINT WINAPI waveGetErrorText(UINT uError, LPSTR lpText, UINT uSize)
{ {
LPSTR msgptr; LPSTR msgptr;
@ -957,17 +943,17 @@ UINT WINAPI waveGetErrorText(UINT uError, LPSTR lpText, UINT uSize)
UINT WINAPI waveOutOpen(HWAVEOUT FAR* lphWaveOut, UINT uDeviceID, UINT WINAPI waveOutOpen(HWAVEOUT FAR* lphWaveOut, UINT uDeviceID,
const WAVEFORMAT FAR* lpFormat, DWORD dwCallback, DWORD dwInstance, DWORD dwFlags) const WAVEFORMAT FAR* lpFormat, DWORD dwCallback, DWORD dwInstance, DWORD dwFlags)
{ {
printf("waveOutOpen\n"); printf("waveOutOpen\n");
if (lphWaveOut != NULL) *lphWaveOut = 0; if (lphWaveOut != NULL) *lphWaveOut = 0;
return 0; return MMSYSERR_BADDEVICEID;
} }
UINT WINAPI waveOutClose(HWAVEOUT hWaveOut) UINT WINAPI waveOutClose(HWAVEOUT hWaveOut)
{ {
printf("waveOutClose\n"); printf("waveOutClose\n");
return 0; return MMSYSERR_INVALHANDLE;
} }
@ -975,8 +961,8 @@ return 0;
UINT WINAPI waveOutPrepareHeader(HWAVEOUT hWaveOut, UINT WINAPI waveOutPrepareHeader(HWAVEOUT hWaveOut,
WAVEHDR FAR* lpWaveOutHdr, UINT uSize) WAVEHDR FAR* lpWaveOutHdr, UINT uSize)
{ {
printf("waveOutPrepareHeader\n"); printf("waveOutPrepareHeader\n");
return 0; return MMSYSERR_INVALHANDLE;
} }
@ -984,99 +970,99 @@ return 0;
UINT WINAPI waveOutUnprepareHeader(HWAVEOUT hWaveOut, UINT WINAPI waveOutUnprepareHeader(HWAVEOUT hWaveOut,
WAVEHDR FAR* lpWaveOutHdr, UINT uSize) WAVEHDR FAR* lpWaveOutHdr, UINT uSize)
{ {
printf("waveOutUnprepareHeader\n"); printf("waveOutUnprepareHeader\n");
return 0; return MMSYSERR_INVALHANDLE;
} }
UINT WINAPI waveOutWrite(HWAVEOUT hWaveOut, WAVEHDR FAR* lpWaveOutHdr, UINT uSize) UINT WINAPI waveOutWrite(HWAVEOUT hWaveOut, WAVEHDR FAR* lpWaveOutHdr, UINT uSize)
{ {
printf("waveOutWrite\n"); printf("waveOutWrite\n");
return 0; return MMSYSERR_INVALHANDLE;
} }
UINT WINAPI waveOutPause(HWAVEOUT hWaveOut) UINT WINAPI waveOutPause(HWAVEOUT hWaveOut)
{ {
printf("waveOutPause\n"); printf("waveOutPause\n");
return 0; return MMSYSERR_INVALHANDLE;
} }
UINT WINAPI waveOutRestart(HWAVEOUT hWaveOut) UINT WINAPI waveOutRestart(HWAVEOUT hWaveOut)
{ {
printf("waveOutRestart\n"); printf("waveOutRestart\n");
return 0; return MMSYSERR_INVALHANDLE;
} }
UINT WINAPI waveOutReset(HWAVEOUT hWaveOut) UINT WINAPI waveOutReset(HWAVEOUT hWaveOut)
{ {
printf("waveOutReset\n"); printf("waveOutReset\n");
return 0; return MMSYSERR_INVALHANDLE;
} }
UINT WINAPI waveOutGetPosition(HWAVEOUT hWaveOut, MMTIME FAR* lpInfo, UINT uSize) UINT WINAPI waveOutGetPosition(HWAVEOUT hWaveOut, MMTIME FAR* lpInfo, UINT uSize)
{ {
printf("waveOutGetPosition\n"); printf("waveOutGetPosition\n");
return 0; return MMSYSERR_INVALHANDLE;
} }
UINT WINAPI waveOutGetVolume(UINT uDeviceID, DWORD FAR* lpdwVolume) UINT WINAPI waveOutGetVolume(UINT uDeviceID, DWORD FAR* lpdwVolume)
{ {
printf("waveOutGetVolume\n"); printf("waveOutGetVolume\n");
return 0; return MMSYSERR_INVALHANDLE;
} }
UINT WINAPI waveOutSetVolume(UINT uDeviceID, DWORD dwVolume) UINT WINAPI waveOutSetVolume(UINT uDeviceID, DWORD dwVolume)
{ {
printf("waveOutSetVolume\n"); printf("waveOutSetVolume\n");
return 0; return MMSYSERR_INVALHANDLE;
} }
UINT WINAPI waveOutGetID(HWAVEOUT hWaveOut, UINT FAR* lpuDeviceID) UINT WINAPI waveOutGetID(HWAVEOUT hWaveOut, UINT FAR* lpuDeviceID)
{ {
printf("waveOutGetID\n"); printf("waveOutGetID\n");
return 0; return MMSYSERR_INVALHANDLE;
} }
UINT WINAPI waveOutGetPitch(HWAVEOUT hWaveOut, DWORD FAR* lpdwPitch) UINT WINAPI waveOutGetPitch(HWAVEOUT hWaveOut, DWORD FAR* lpdwPitch)
{ {
printf("waveOutGetPitch\n"); printf("waveOutGetPitch\n");
return 0; return MMSYSERR_INVALHANDLE;
} }
UINT WINAPI waveOutSetPitch(HWAVEOUT hWaveOut, DWORD dwPitch) UINT WINAPI waveOutSetPitch(HWAVEOUT hWaveOut, DWORD dwPitch)
{ {
printf("waveOutSetPitch\n"); printf("waveOutSetPitch\n");
return 0; return MMSYSERR_INVALHANDLE;
} }
UINT WINAPI waveOutGetPlaybackRate(HWAVEOUT hWaveOut, DWORD FAR* lpdwRate) UINT WINAPI waveOutGetPlaybackRate(HWAVEOUT hWaveOut, DWORD FAR* lpdwRate)
{ {
printf("waveOutGetPlaybackRate\n"); printf("waveOutGetPlaybackRate\n");
return 0; return MMSYSERR_INVALHANDLE;
} }
UINT WINAPI waveOutSetPlaybackRate(HWAVEOUT hWaveOut, DWORD dwRate) UINT WINAPI waveOutSetPlaybackRate(HWAVEOUT hWaveOut, DWORD dwRate)
{ {
printf("waveOutSetPlaybackRate\n"); printf("waveOutSetPlaybackRate\n");
return 0; return MMSYSERR_INVALHANDLE;
} }
@ -1084,26 +1070,29 @@ return 0;
UINT WINAPI waveOutBreakLoop(HWAVEOUT hWaveOut) UINT WINAPI waveOutBreakLoop(HWAVEOUT hWaveOut)
{ {
printf("waveOutBreakLoop\n"); printf("waveOutBreakLoop\n");
return 0; return MMSYSERR_INVALHANDLE;
} }
UINT WINAPI waveInGetNumDevs() UINT WINAPI waveInGetNumDevs()
{ {
printf("waveInGetNumDevs\n"); /* printf("waveInGetNumDevs\n"); */
return 0; return 0;
} }
UINT WINAPI waveInGetDevCaps(UINT uDeviceID, WAVEINCAPS FAR* lpCaps, UINT uSize) UINT WINAPI waveInGetDevCaps(UINT uDeviceID, WAVEINCAPS FAR* lpCaps, UINT uSize)
{ {
printf("waveInGetDevCaps\n"); printf("waveInGetDevCaps\n");
return 0; return MMSYSERR_INVALHANDLE;
} }
/**************************************************************************
* waveInGetErrorText [MMSYSTEM.503]
*/
UINT WINAPI waveInGetErrorText(UINT uError, LPSTR lpText, UINT uSize) UINT WINAPI waveInGetErrorText(UINT uError, LPSTR lpText, UINT uSize)
{ {
printf("waveInGetErrorText\n"); printf("waveInGetErrorText\n");
@ -1111,83 +1100,191 @@ UINT WINAPI waveInGetErrorText(UINT uError, LPSTR lpText, UINT uSize)
} }
/**************************************************************************
* waveInOpen [MMSYSTEM.504]
*/
UINT WINAPI waveInOpen(HWAVEIN FAR* lphWaveIn, UINT uDeviceID, UINT WINAPI waveInOpen(HWAVEIN FAR* lphWaveIn, UINT uDeviceID,
const WAVEFORMAT FAR* lpFormat, DWORD dwCallback, DWORD dwInstance, DWORD dwFlags) const WAVEFORMAT FAR* lpFormat, DWORD dwCallback, DWORD dwInstance, DWORD dwFlags)
{ {
printf("waveInOpen\n"); printf("waveInOpen\n");
if (lphWaveIn != NULL) *lphWaveIn = 0; if (lphWaveIn != NULL) *lphWaveIn = 0;
return 0; return MMSYSERR_BADDEVICEID;
} }
/**************************************************************************
* waveInClose [MMSYSTEM.505]
*/
UINT WINAPI waveInClose(HWAVEIN hWaveIn) UINT WINAPI waveInClose(HWAVEIN hWaveIn)
{ {
printf("waveInClose\n"); printf("waveInClose\n");
return 0; return MMSYSERR_INVALHANDLE;
} }
/**************************************************************************
* waveInPrepareHeader [MMSYSTEM.506]
*/
UINT WINAPI waveInPrepareHeader(HWAVEIN hWaveIn, UINT WINAPI waveInPrepareHeader(HWAVEIN hWaveIn,
WAVEHDR FAR* lpWaveInHdr, UINT uSize) WAVEHDR FAR* lpWaveInHdr, UINT uSize)
{ {
printf("waveInPrepareHeader\n"); printf("waveInPrepareHeader\n");
return 0; return MMSYSERR_INVALHANDLE;
} }
/**************************************************************************
* waveInUnprepareHeader [MMSYSTEM.507]
*/
UINT WINAPI waveInUnprepareHeader(HWAVEIN hWaveIn, UINT WINAPI waveInUnprepareHeader(HWAVEIN hWaveIn,
WAVEHDR FAR* lpWaveInHdr, UINT uSize) WAVEHDR FAR* lpWaveInHdr, UINT uSize)
{ {
printf("waveInUnprepareHeader\n"); printf("waveInUnprepareHeader\n");
return 0; return MMSYSERR_INVALHANDLE;
} }
/**************************************************************************
* waveInAddBuffer [MMSYSTEM.508]
*/
UINT WINAPI waveInAddBuffer(HWAVEIN hWaveIn, UINT WINAPI waveInAddBuffer(HWAVEIN hWaveIn,
WAVEHDR FAR* lpWaveInHdr, UINT uSize) WAVEHDR FAR* lpWaveInHdr, UINT uSize)
{ {
printf("waveInAddBuffer\n"); printf("waveInAddBuffer\n");
return 0; return 0;
}
UINT WINAPI waveInReset(HWAVEIN hWaveIn)
{
printf("waveInReset\n");
return 0;
} }
/**************************************************************************
* waveInStart [MMSYSTEM.509]
*/
UINT WINAPI waveInStart(HWAVEIN hWaveIn) UINT WINAPI waveInStart(HWAVEIN hWaveIn)
{ {
printf("waveInStart\n"); printf("waveInStart\n");
return 0; return MMSYSERR_INVALHANDLE;
} }
/**************************************************************************
* waveInStop [MMSYSTEM.510]
*/
UINT WINAPI waveInStop(HWAVEIN hWaveIn) UINT WINAPI waveInStop(HWAVEIN hWaveIn)
{ {
printf("waveInStop\n"); printf("waveInStop\n");
return 0; return MMSYSERR_INVALHANDLE;
} }
/**************************************************************************
* waveInReset [MMSYSTEM.511]
*/
UINT WINAPI waveInReset(HWAVEIN hWaveIn)
{
printf("waveInReset\n");
return MMSYSERR_INVALHANDLE;
}
/**************************************************************************
* waveInGetPosition [MMSYSTEM.512]
*/
UINT WINAPI waveInGetPosition(HWAVEIN hWaveIn, MMTIME FAR* lpInfo, UINT uSize) UINT WINAPI waveInGetPosition(HWAVEIN hWaveIn, MMTIME FAR* lpInfo, UINT uSize)
{ {
printf("waveInGetPosition\n"); printf("waveInGetPosition\n");
return 0; return MMSYSERR_INVALHANDLE;
} }
/**************************************************************************
* waveInGetID [MMSYSTEM.513]
*/
UINT WINAPI waveInGetID(HWAVEIN hWaveIn, UINT FAR* lpuDeviceID) UINT WINAPI waveInGetID(HWAVEIN hWaveIn, UINT FAR* lpuDeviceID)
{ {
printf("waveInGetID\n"); printf("waveInGetID\n");
return 0; return 0;
}
/**************************************************************************
* mmioOpen [MMSYSTEM.1210]
*/
HMMIO WINAPI mmioOpen(LPSTR szFileName, MMIOINFO FAR* lpmmioinfo, DWORD dwOpenFlags)
{
printf("mmioOpen('%s', %08X, %08X);\n", szFileName, lpmmioinfo, dwOpenFlags);
return 0;
}
/**************************************************************************
* mmioClose [MMSYSTEM.1211]
*/
UINT WINAPI mmioClose(HMMIO hmmio, UINT uFlags)
{
printf("mmioClose(%04X, %04X);\n", hmmio, uFlags);
return 0;
}
/**************************************************************************
* mmioRead [MMSYSTEM.1212]
*/
LONG WINAPI mmioRead(HMMIO hmmio, HPSTR pch, LONG cch)
{
printf("mmioRead\n");
return 0;
}
/**************************************************************************
* mmioWrite [MMSYSTEM.1213]
*/
LONG WINAPI mmioWrite(HMMIO hmmio, HPCSTR pch, LONG cch)
{
printf("mmioWrite\n");
return 0;
}
/**************************************************************************
* mmioSeek [MMSYSTEM.1214]
*/
LONG WINAPI mmioSeek(HMMIO hmmio, LONG lOffset, int iOrigin)
{
printf("mmioSeek\n");
return 0;
}
/**************************************************************************
* mmioGetInfo [MMSYSTEM.1215]
*/
UINT WINAPI mmioGetInfo(HMMIO hmmio, MMIOINFO FAR* lpmmioinfo, UINT uFlags)
{
printf("mmioGetInfo\n");
return 0;
}
/**************************************************************************
* mmioGetInfo [MMSYSTEM.1216]
*/
UINT WINAPI mmioSetInfo(HMMIO hmmio, const MMIOINFO FAR* lpmmioinfo, UINT uFlags)
{
printf("mmioSetInfo\n");
return 0;
} }
/* /*
#1100 pascal DRVOPEN
#1101 pascal DRVCLOSE
#1102 pascal DRVSENDMESSAGE
#1103 pascal DRVGETMODULEHANDLE
#1104 pascal DRVDEFDRIVERPROC
UINT WINAPI mciGetDeviceIDFromElementID (DWORD dwElementID, UINT WINAPI mciGetDeviceIDFromElementID (DWORD dwElementID,
LPCSTR lpstrType); LPCSTR lpstrType);
@ -1201,8 +1298,6 @@ YIELDPROC WINAPI mciGetYieldProc (UINT uDeviceID, DWORD FAR* lpdwYieldData);
FOURCC WINAPI mmioStringToFOURCC(LPCSTR sz, UINT uFlags); FOURCC WINAPI mmioStringToFOURCC(LPCSTR sz, UINT uFlags);
LPMMIOPROC WINAPI mmioInstallIOProc(FOURCC fccIOProc, LPMMIOPROC pIOProc, LPMMIOPROC WINAPI mmioInstallIOProc(FOURCC fccIOProc, LPMMIOPROC pIOProc,
DWORD dwFlags); DWORD dwFlags);
UINT WINAPI mmioGetInfo(HMMIO hmmio, MMIOINFO FAR* lpmmioinfo, UINT uFlags);
UINT WINAPI mmioSetInfo(HMMIO hmmio, const MMIOINFO FAR* lpmmioinfo, UINT uFlags);
UINT WINAPI mmioSetBuffer(HMMIO hmmio, LPSTR pchBuffer, LONG cchBuffer, UINT WINAPI mmioSetBuffer(HMMIO hmmio, LPSTR pchBuffer, LONG cchBuffer,
UINT uFlags); UINT uFlags);
UINT WINAPI mmioFlush(HMMIO hmmio, UINT uFlags); UINT WINAPI mmioFlush(HMMIO hmmio, UINT uFlags);

View File

@ -43,11 +43,15 @@ HANDLE RemoveProp(HWND hWnd, LPSTR lpStr)
return FALSE; return FALSE;
} }
lpProp = (LPPROPENTRY) GlobalLock(wndPtr->hProp); lpProp = (LPPROPENTRY) GlobalLock(wndPtr->hProp);
if (lpProp == NULL) return 0; if (lpProp == NULL) {
printf("Property List Empty !\n");
return 0;
}
while (TRUE) { while (TRUE) {
if ((((DWORD)lpStr & 0xFFFF0000) == 0L && if ((((DWORD)lpStr & 0xFFFF0000) == 0L &&
lpProp->Atom == LOWORD((DWORD)lpStr)) || lpProp->Atom == LOWORD((DWORD)lpStr)) ||
(((DWORD)lpStr & 0xFFFF0000) != 0L && (((DWORD)lpStr & 0xFFFF0000) != 0L &&
lpProp->PropName != NULL &&
strcmp(lpProp->PropName, lpStr) == 0)) { strcmp(lpProp->PropName, lpStr) == 0)) {
printf("RemoveProp // Property found ! hData=%04X\n", lpProp->hData); printf("RemoveProp // Property found ! hData=%04X\n", lpProp->hData);
hOldData = lpProp->hData; hOldData = lpProp->hData;
@ -90,11 +94,15 @@ HANDLE GetProp(HWND hWnd, LPSTR lpStr)
return 0; return 0;
} }
lpProp = (LPPROPENTRY) GlobalLock(wndPtr->hProp); lpProp = (LPPROPENTRY) GlobalLock(wndPtr->hProp);
if (lpProp == NULL) return 0; if (lpProp == NULL) {
printf("Property List Empty !\n");
return 0;
}
while (TRUE) { while (TRUE) {
if ((((DWORD)lpStr & 0xFFFF0000) == 0L && if ((((DWORD)lpStr & 0xFFFF0000) == 0L &&
lpProp->Atom == LOWORD((DWORD)lpStr)) || lpProp->Atom == LOWORD((DWORD)lpStr)) ||
(((DWORD)lpStr & 0xFFFF0000) != 0L && (((DWORD)lpStr & 0xFFFF0000) != 0L &&
lpProp->PropName != NULL &&
strcmp(lpProp->PropName, lpStr) == 0)) { strcmp(lpProp->PropName, lpStr) == 0)) {
printf("GetProp // Property found ! hData=%04X\n", lpProp->hData); printf("GetProp // Property found ! hData=%04X\n", lpProp->hData);
GlobalUnlock(wndPtr->hProp); GlobalUnlock(wndPtr->hProp);
@ -136,6 +144,7 @@ BOOL SetProp(HWND hWnd, LPSTR lpStr, HANDLE hData)
if ((((DWORD)lpStr & 0xFFFF0000) == 0L && if ((((DWORD)lpStr & 0xFFFF0000) == 0L &&
lpProp->Atom == LOWORD((DWORD)lpStr)) || lpProp->Atom == LOWORD((DWORD)lpStr)) ||
(((DWORD)lpStr & 0xFFFF0000) != 0L && (((DWORD)lpStr & 0xFFFF0000) != 0L &&
lpProp->PropName != NULL &&
strcmp(lpProp->PropName, lpStr) == 0)) { strcmp(lpProp->PropName, lpStr) == 0)) {
#ifdef DEBUG_PROP #ifdef DEBUG_PROP
printf("SetProp // change already exinsting property !\n"); printf("SetProp // change already exinsting property !\n");
@ -177,7 +186,7 @@ BOOL SetProp(HWND hWnd, LPSTR lpStr, HANDLE hData)
} }
else { else {
lpNewProp->Atom = 0; lpNewProp->Atom = 0;
lpNewProp->PropName = malloc(strlen(lpStr)); lpNewProp->PropName = malloc(strlen(lpStr) + 1);
if (lpNewProp->PropName == NULL) { if (lpNewProp->PropName == NULL) {
printf("SetProp // Can't allocate memory for Property Name !\n"); printf("SetProp // Can't allocate memory for Property Name !\n");
GlobalUnlock(wndPtr->hProp); GlobalUnlock(wndPtr->hProp);
@ -207,7 +216,10 @@ int EnumProps(HWND hWnd, FARPROC lpEnumFunc)
return 0; return 0;
} }
lpProp = (LPPROPENTRY) GlobalLock(wndPtr->hProp); lpProp = (LPPROPENTRY) GlobalLock(wndPtr->hProp);
if (lpProp == NULL) return 0; if (lpProp == NULL) {
printf("Property List Empty !\n");
return 0;
}
if (lpEnumFunc != NULL) return 0; if (lpEnumFunc != NULL) return 0;
while (TRUE) { while (TRUE) {
printf("EnumProps // lpProp->Atom=%04X !\n", lpProp->Atom); printf("EnumProps // lpProp->Atom=%04X !\n", lpProp->Atom);

View File

@ -9,6 +9,7 @@ SRCS = \
int21.c \ int21.c \
int25.c \ int25.c \
int26.c \ int26.c \
int2f.c \
ioports.c \ ioports.c \
kernel.c kernel.c

View File

@ -1,6 +1,3 @@
static char RCSId[] = "$Id: heap.c,v 1.3 1993/07/04 04:04:21 root Exp root $";
static char Copyright[] = "Copyright Robert J. Amstadt, 1993";
#include <stdlib.h> #include <stdlib.h>
#include <stdio.h> #include <stdio.h>
#include "prototypes.h" #include "prototypes.h"
@ -19,9 +16,9 @@ int
WIN87_fpmath() WIN87_fpmath()
{ {
printf( "_fpmath: (%x:%x %x %x)\n",_CONTEXT->sc_cs, _CONTEXT->sc_eip, printf( "_fpmath: (%x:%x %x %x)\n",_CONTEXT->sc_cs, _CONTEXT->sc_eip,
_CONTEXT->sc_es, _BX); _CONTEXT->sc_es, _BX & 0xffff);
switch(_BX ) switch(_BX & 0xffff)
{ {
case 11: case 11:
return 1; return 1;

View File

@ -709,7 +709,6 @@ static void FindNext(struct sigcontext_struct *context)
do { do {
if ((dp = DOS_readdir(dp)) == NULL) { if ((dp = DOS_readdir(dp)) == NULL) {
DOS_closedir(dp);
Error(NoMoreFiles, EC_MediaError , EL_Disk); Error(NoMoreFiles, EC_MediaError , EL_Disk);
EAX = (EAX & 0xffffff00L) | NoMoreFiles; EAX = (EAX & 0xffffff00L) | NoMoreFiles;
SetCflag; SetCflag;
@ -1026,7 +1025,6 @@ static void DeleteFileFCB(struct sigcontext_struct *context)
fprintf(stderr, "int21: delete file %s\n", temp); fprintf(stderr, "int21: delete file %s\n", temp);
/* unlink(GetUnixFileName(temp)); */ /* unlink(GetUnixFileName(temp)); */
} }
DOS_closedir(dp); DOS_closedir(dp);
EAX = (EAX & 0xffffff00L); EAX = (EAX & 0xffffff00L);
} }
@ -1072,7 +1070,6 @@ static void RenameFileFCB(struct sigcontext_struct *context)
strcpy(newnameptr, fcb + 1); strcpy(newnameptr, fcb + 1);
fprintf(stderr, "int21: renamefile %s -> %s\n", oldname, newname); fprintf(stderr, "int21: renamefile %s -> %s\n", oldname, newname);
} }
DOS_closedir(dp); DOS_closedir(dp);
EAX = (EAX & 0xffffff00L); EAX = (EAX & 0xffffff00L);
} }

View File

@ -61,7 +61,7 @@ static XImage *BITMAP_BmpToImage( BITMAP * bmp, void * bmpData )
extern void _XInitImageFuncPtrs( XImage* ); extern void _XInitImageFuncPtrs( XImage* );
XImage * image; XImage * image;
image = XCreateImage( XT_display, DefaultVisualOfScreen(XT_screen), image = XCreateImage( XT_display, DefaultVisualOfScreen(screen),
bmp->bmBitsPixel, ZPixmap, 0, bmpData, bmp->bmBitsPixel, ZPixmap, 0, bmpData,
bmp->bmWidth, bmp->bmHeight, 16, bmp->bmWidthBytes ); bmp->bmWidth, bmp->bmHeight, 16, bmp->bmWidthBytes );
if (!image) return 0; if (!image) return 0;

View File

@ -13,6 +13,8 @@ static char Copyright[] = "Copyright Alexandre Julliard, 1993";
#include "user.h" #include "user.h"
#include "gdi.h" #include "gdi.h"
#define MAX_FONTS 256
static LPLOGFONT lpLogFontList[MAX_FONTS] = { NULL };
/*********************************************************************** /***********************************************************************
* FONT_MatchFont * FONT_MatchFont
@ -45,34 +47,35 @@ static XFontStruct * FONT_MatchFont( LOGFONT * font )
case FF_DECORATIVE: family = "*"; break; case FF_DECORATIVE: family = "*"; break;
default: family = "*"; break; default: family = "*"; break;
} }
AnsiLower(family);
/* Width==0 seems not to be a valid wildcard on SGI's, using * instead */ while (TRUE) {
if ( width == 0 ) /* Width==0 seems not to be a valid wildcard on SGI's, using * instead */
sprintf( pattern, "-*-%s-%s-%c-normal--*-%d-*-*-%c-*-%s", if ( width == 0 )
family, weight, slant, height, spacing, charset sprintf( pattern, "-*-%s-%s-%c-normal--*-%d-*-*-%c-*-%s",
); family, weight, slant, height, spacing, charset);
else else
sprintf( pattern, "-*-%s-%s-%c-normal--*-%d-*-*-%c-%d-%s", sprintf( pattern, "-*-%s-%s-%c-normal--*-%d-*-*-%c-%d-%s",
family, weight, slant, height, spacing, width, charset family, weight, slant, height, spacing, width, charset);
);
#ifdef DEBUG_FONT #ifdef DEBUG_FONT
printf( "FONT_MatchFont: '%s'\n", pattern ); printf( "FONT_MatchFont: '%s'\n", pattern );
#endif #endif
names = XListFonts( XT_display, pattern, 1, &count ); names = XListFonts( XT_display, pattern, 1, &count );
if (!count) if (count > 0) break;
{ height -= 10;
if (height < 10) {
#ifdef DEBUG_FONT #ifdef DEBUG_FONT
printf( " No matching font found\n" ); printf( " No matching font found\n" );
#endif #endif
return NULL; return NULL;
} }
}
#ifdef DEBUG_FONT #ifdef DEBUG_FONT
printf( " Found '%s'\n", *names ); printf( " Found '%s'\n", *names );
#endif #endif
fontStruct = XLoadQueryFont( XT_display, *names ); fontStruct = XLoadQueryFont( XT_display, *names );
XFreeFontNames( names ); XFreeFontNames( names );
return fontStruct; return fontStruct;
} }
@ -134,6 +137,9 @@ HFONT CreateFontIndirect( LOGFONT * font )
if (!hfont) return 0; if (!hfont) return 0;
fontPtr = (FONTOBJ *) GDI_HEAP_ADDR( hfont ); fontPtr = (FONTOBJ *) GDI_HEAP_ADDR( hfont );
memcpy( &fontPtr->logfont, font, sizeof(LOGFONT) ); memcpy( &fontPtr->logfont, font, sizeof(LOGFONT) );
#ifdef DEBUG_FONT
printf("CreateFontIndirect(%08X); return %04X !\n", font, hfont);
#endif
return hfont; return hfont;
} }
@ -173,7 +179,9 @@ HFONT FONT_SelectObject( DC * dc, HFONT hfont, FONTOBJ * font )
X_PHYSFONT * stockPtr; X_PHYSFONT * stockPtr;
HFONT prevHandle = dc->w.hFont; HFONT prevHandle = dc->w.hFont;
XFontStruct * fontStruct; XFontStruct * fontStruct;
#ifdef DEBUG_FONT
printf("FONT_SelectObject(%04X, %04X, %08X); !\n", dc, hfont, font);
#endif
/* Load font if necessary */ /* Load font if necessary */
if (!font) if (!font)
@ -422,6 +430,117 @@ BOOL GetCharWidth(HDC hdc, WORD wFirstChar, WORD wLastChar, LPINT lpBuffer)
return TRUE; return TRUE;
} }
/*************************************************************************
* ParseFontParms [internal]
*/
int ParseFontParms(LPSTR lpFont, WORD wParmsNo, LPSTR lpRetStr, WORD wMaxSiz)
{
int i, j;
#ifdef DEBUG_FONT
printf("ParseFontParms('%s', %d, %08X, %d);\n",
lpFont, wParmsNo, lpRetStr, wMaxSiz);
#endif
if (lpFont == NULL) return 0;
if (lpRetStr == NULL) return 0;
for (i = 0; (*lpFont != '\0' && i != wParmsNo); ) {
if (*lpFont == '-') i++;
lpFont++;
}
if (i == wParmsNo) {
if (*lpFont == '-') lpFont++;
wMaxSiz--;
for (i = 0; (*lpFont != '\0' && *lpFont != '-' && i < wMaxSiz); i++)
*(lpRetStr + i) = *lpFont++;
*(lpRetStr + i) = '\0';
#ifdef DEBUG_FONT
printf("ParseFontParms // '%s'\n", lpRetStr);
#endif
return i;
}
else
lpRetStr[0] = '\0';
return 0;
}
/*************************************************************************
* InitFontsList [internal]
*/
void InitFontsList()
{
char str[32];
char pattern[100];
char *family, *weight, *charset;
char **names;
char slant, spacing;
int i, width, count;
LPLOGFONT lpNewFont;
weight = "medium";
slant = 'r';
spacing = '*';
charset = "*";
family = "*";
printf("InitFontsList !\n");
sprintf( pattern, "-*-%s-%s-%c-normal--*-*-*-*-%c-*-%s",
family, weight, slant, spacing, charset);
names = XListFonts( XT_display, pattern, MAX_FONTS, &count );
#ifdef DEBUG_FONT
printf("InitFontsList // count=%d \n", count);
#endif
for (i = 0; i < count; i++) {
lpNewFont = malloc(sizeof(LOGFONT) + LF_FACESIZE);
if (lpNewFont == NULL) {
printf("InitFontsList // Error alloc new font structure !\n");
break;
}
#ifdef DEBUG_FONT
printf("InitFontsList // names[%d]='%s' \n", i, names[i]);
#endif
ParseFontParms(names[i], 2, str, sizeof(str));
if (strcmp(str, "fixed") == 0) strcat(str, "sys");
AnsiUpper(str);
strcpy(lpNewFont->lfFaceName, str);
ParseFontParms(names[i], 7, str, sizeof(str));
lpNewFont->lfHeight = atoi(str) / 10;
ParseFontParms(names[i], 12, str, sizeof(str));
lpNewFont->lfWidth = atoi(str) / 10;
lpNewFont->lfEscapement = 0;
lpNewFont->lfOrientation = 0;
lpNewFont->lfWeight = FW_REGULAR;
lpNewFont->lfItalic = 0;
lpNewFont->lfUnderline = 0;
lpNewFont->lfStrikeOut = 0;
ParseFontParms(names[i], 13, str, sizeof(str));
if (strcmp(str, "iso8859") == 0)
lpNewFont->lfCharSet = ANSI_CHARSET;
else
lpNewFont->lfCharSet = OEM_CHARSET;
lpNewFont->lfOutPrecision = OUT_DEFAULT_PRECIS;
lpNewFont->lfClipPrecision = CLIP_DEFAULT_PRECIS;
lpNewFont->lfQuality = DEFAULT_QUALITY;
ParseFontParms(names[i], 11, str, sizeof(str));
switch(str[0]) {
case 'p':
lpNewFont->lfPitchAndFamily = VARIABLE_PITCH | FF_SWISS;
break;
case 'm':
lpNewFont->lfPitchAndFamily = FIXED_PITCH | FF_MODERN;
break;
default:
lpNewFont->lfPitchAndFamily = DEFAULT_PITCH | FF_DONTCARE;
break;
}
#ifdef DEBUG_FONT
printf("InitFontsList // lpNewFont->lfHeight=%d \n", lpNewFont->lfHeight);
printf("InitFontsList // lpNewFont->lfWidth=%d \n", lpNewFont->lfWidth);
printf("InitFontsList // lfFaceName='%s' \n", lpNewFont->lfFaceName);
#endif
lpLogFontList[i] = lpNewFont;
lpLogFontList[i+1] = NULL;
}
XFreeFontNames(names);
}
/************************************************************************* /*************************************************************************
* EnumFonts [GDI.70] * EnumFonts [GDI.70]
@ -430,11 +549,16 @@ int EnumFonts(HDC hDC, LPSTR lpFaceName, FARPROC lpEnumFunc, LPSTR lpData)
{ {
HANDLE hLog; HANDLE hLog;
HANDLE hMet; HANDLE hMet;
HFONT hFont;
HFONT hOldFont;
LPLOGFONT lpLogFont; LPLOGFONT lpLogFont;
LPTEXTMETRIC lptm; LPTEXTMETRIC lptm;
LPSTR lpFaceList[MAX_FONTS];
char FaceName[LF_FACESIZE];
int nRet; int nRet;
printf("EnumFonts(%04X, %08X, %08X, %08X)\n", int j, i = 0;
hDC, lpFaceName, lpEnumFunc, lpData); printf("EnumFonts(%04X, %08X='%s', %08X, %08X)\n",
hDC, lpFaceName, lpFaceName, lpEnumFunc, lpData);
if (lpEnumFunc == NULL) return 0; if (lpEnumFunc == NULL) return 0;
hLog = USER_HEAP_ALLOC(GMEM_MOVEABLE, sizeof(LOGFONT) + LF_FACESIZE); hLog = USER_HEAP_ALLOC(GMEM_MOVEABLE, sizeof(LOGFONT) + LF_FACESIZE);
lpLogFont = (LPLOGFONT) USER_HEAP_ADDR(hLog); lpLogFont = (LPLOGFONT) USER_HEAP_ADDR(hLog);
@ -449,41 +573,49 @@ int EnumFonts(HDC hDC, LPSTR lpFaceName, FARPROC lpEnumFunc, LPSTR lpData)
printf("EnumFonts // can't alloc TEXTMETRIC struct !\n"); printf("EnumFonts // can't alloc TEXTMETRIC struct !\n");
return 0; return 0;
} }
if (lpFaceName != NULL) {
strcpy(FaceName, lpFaceName);
AnsiUpper(FaceName);
}
if (lpLogFontList[0] == NULL) InitFontsList();
memset(lpFaceList, 0, MAX_FONTS * sizeof(LPSTR));
while (TRUE) { while (TRUE) {
printf("EnumFonts // !\n"); if (lpLogFontList[i] == NULL) break;
lpLogFont->lfHeight = 18; if (lpFaceName == NULL) {
lpLogFont->lfWidth = 12; for (j = 0; j < MAX_FONTS; j++) {
lpLogFont->lfEscapement = 0; if (lpFaceList[j] == NULL) break;
lpLogFont->lfOrientation = 0; if (strcmp(lpFaceList[j], lpLogFontList[i]->lfFaceName) == 0) {
lpLogFont->lfWeight = FW_REGULAR; i++; j = 0;
lpLogFont->lfItalic = 0; }
lpLogFont->lfUnderline = 0; }
lpLogFont->lfStrikeOut = 0; if (lpLogFontList[i] == NULL) break;
lpLogFont->lfCharSet = ANSI_CHARSET; lpFaceList[j] = lpLogFontList[i]->lfFaceName;
lpLogFont->lfOutPrecision = OUT_DEFAULT_PRECIS; printf("EnumFonts // enum all 'lpFaceName' '%s' !\n", lpFaceList[j]);
lpLogFont->lfClipPrecision = CLIP_DEFAULT_PRECIS; }
lpLogFont->lfQuality = DEFAULT_QUALITY; else {
lpLogFont->lfPitchAndFamily = FIXED_PITCH | FF_MODERN; while(lpLogFontList[i] != NULL) {
strcpy(lpLogFont->lfFaceName, "Courier"); if (strcmp(FaceName, lpLogFontList[i]->lfFaceName) == 0) break;
printf("lpLogFont=%08X lptm=%08X\n", lpLogFont, lptm); i++;
}
if (lpLogFontList[i] == NULL) break;
}
memcpy(lpLogFont, lpLogFontList[i++], sizeof(LOGFONT) + LF_FACESIZE);
hFont = CreateFontIndirect(lpLogFont);
hOldFont = SelectObject(hDC, hFont);
GetTextMetrics(hDC, lptm);
SelectObject(hDC, hOldFont);
DeleteObject(hFont);
printf("EnumFonts // i=%d lpLogFont=%08X lptm=%08X\n", i, lpLogFont, lptm);
#ifdef WINELIB #ifdef WINELIB
nRet = (*lpEnumFunc)(lpLogFont, lptm, 0, lpData); nRet = (*lpEnumFunc)(lpLogFont, lptm, 0, lpData);
#else #else
nRet = CallBack16(lpEnumFunc, 4, 2, (int)lpLogFont, nRet = CallBack16(lpEnumFunc, 4, 2, (int)lpLogFont,
2, (int)lptm, 0, (int)0, 2, (int)lpData); 2, (int)lptm, 0, (int)0, 2, (int)lpData);
#endif #endif
if (nRet == 0) break; if (nRet == 0) {
lpLogFont->lfPitchAndFamily = VARIABLE_PITCH | FF_SWISS; printf("EnumFonts // EnumEnd requested by application !\n");
strcpy(lpLogFont->lfFaceName, "Helvetica"); break;
printf("lpLogFont=%08X lptm=%08X\n", lpLogFont, lptm); }
#ifdef WINELIB
nRet = (*lpEnumFunc)(lpLogFont, lptm, 0, lpData);
#else
nRet = CallBack16(lpEnumFunc, 4, 2, (int)lpLogFont,
2, (int)lptm, 0, (int)0, 2, (int)lpData);
#endif
if (nRet == 0) break;
else break;
} }
USER_HEAP_FREE(hMet); USER_HEAP_FREE(hMet);
USER_HEAP_FREE(hLog); USER_HEAP_FREE(hLog);
@ -498,9 +630,14 @@ int EnumFontFamilies(HDC hDC, LPSTR lpszFamily, FARPROC lpEnumFunc, LPSTR lpData
{ {
HANDLE hLog; HANDLE hLog;
HANDLE hMet; HANDLE hMet;
HFONT hFont;
HFONT hOldFont;
LPLOGFONT lpLogFont; LPLOGFONT lpLogFont;
LPTEXTMETRIC lptm; LPTEXTMETRIC lptm;
LPSTR lpFaceList[MAX_FONTS];
char FaceName[LF_FACESIZE];
int nRet; int nRet;
int j, i = 0;
printf("EnumFontFamilies(%04X, %08X, %08X, %08X)\n", printf("EnumFontFamilies(%04X, %08X, %08X, %08X)\n",
hDC, lpszFamily, lpEnumFunc, lpData); hDC, lpszFamily, lpEnumFunc, lpData);
if (lpEnumFunc == NULL) return 0; if (lpEnumFunc == NULL) return 0;
@ -517,43 +654,49 @@ int EnumFontFamilies(HDC hDC, LPSTR lpszFamily, FARPROC lpEnumFunc, LPSTR lpData
printf("EnumFontFamilies // can't alloc TEXTMETRIC struct !\n"); printf("EnumFontFamilies // can't alloc TEXTMETRIC struct !\n");
return 0; return 0;
} }
if (lpszFamily != NULL) {
strcpy(FaceName, lpszFamily);
AnsiUpper(FaceName);
}
if (lpLogFontList[0] == NULL) InitFontsList();
memset(lpFaceList, 0, MAX_FONTS * sizeof(LPSTR));
while (TRUE) { while (TRUE) {
printf("EnumFontFamilies // !\n"); if (lpLogFontList[i] == NULL) break;
lpLogFont->lfHeight = 12; if (lpszFamily == NULL) {
lpLogFont->lfWidth = 8; for (j = 0; j < MAX_FONTS; j++) {
lpLogFont->lfEscapement = 0; if (lpFaceList[j] == NULL) break;
lpLogFont->lfOrientation = 0; if (strcmp(lpFaceList[j], lpLogFontList[i]->lfFaceName) == 0) {
lpLogFont->lfWeight = FW_REGULAR; i++; j = 0;
lpLogFont->lfItalic = 0; }
lpLogFont->lfUnderline = 0; }
lpLogFont->lfStrikeOut = 0; if (lpLogFontList[i] == NULL) break;
lpLogFont->lfCharSet = ANSI_CHARSET; lpFaceList[j] = lpLogFontList[i]->lfFaceName;
lpLogFont->lfOutPrecision = OUT_DEFAULT_PRECIS; printf("EnumFontFamilies // enum all 'lpszFamily' '%s' !\n", lpFaceList[j]);
lpLogFont->lfClipPrecision = CLIP_DEFAULT_PRECIS; }
lpLogFont->lfQuality = DEFAULT_QUALITY; else {
lpLogFont->lfPitchAndFamily = FIXED_PITCH | FF_MODERN; while(lpLogFontList[i] != NULL) {
strcpy(lpLogFont->lfFaceName, "Courier"); if (strcmp(FaceName, lpLogFontList[i]->lfFaceName) == 0) break;
/* lpLogFont->lfFullName[LF_FACESIZE] = 12; i++;
lpLogFont->lfStyle[LF_FACESIZE] = 12; */ }
printf("lpLogFont=%08X lptm=%08X\n", lpLogFont, lptm); if (lpLogFontList[i] == NULL) break;
}
memcpy(lpLogFont, lpLogFontList[i++], sizeof(LOGFONT) + LF_FACESIZE);
hFont = CreateFontIndirect(lpLogFont);
hOldFont = SelectObject(hDC, hFont);
GetTextMetrics(hDC, lptm);
SelectObject(hDC, hOldFont);
DeleteObject(hFont);
printf("EnumFontFamilies // i=%d lpLogFont=%08X lptm=%08X\n", i, lpLogFont, lptm);
#ifdef WINELIB #ifdef WINELIB
nRet = (*lpEnumFunc)(lpLogFont, lptm, 0, lpData); nRet = (*lpEnumFunc)(lpLogFont, lptm, 0, lpData);
#else #else
nRet = CallBack16(lpEnumFunc, 4, 2, (int)lpLogFont, nRet = CallBack16(lpEnumFunc, 4, 2, (int)lpLogFont,
2, (int)lptm, 0, (int)0, 2, (int)lpData); 2, (int)lptm, 0, (int)0, 2, (int)lpData);
#endif #endif
if (nRet == 0) break; if (nRet == 0) {
lpLogFont->lfPitchAndFamily = VARIABLE_PITCH | FF_SWISS; printf("EnumFontFamilies // EnumEnd requested by application !\n");
strcpy(lpLogFont->lfFaceName, "Helvetica"); break;
printf("lpLogFont=%08X lptm=%08X\n", lpLogFont, lptm); }
#ifdef WINELIB
nRet = (*lpEnumFunc)(lpLogFont, lptm, 0, lpData);
#else
nRet = CallBack16(lpEnumFunc, 4, 2, (int)lpLogFont,
2, (int)lptm, 0, (int)0, 2, (int)lpData);
#endif
if (nRet == 0) break;
else break;
} }
USER_HEAP_FREE(hMet); USER_HEAP_FREE(hMet);
USER_HEAP_FREE(hLog); USER_HEAP_FREE(hLog);

View File

@ -8,11 +8,19 @@ static char Copyright[] = "Copyright Alexandre Julliard, 1993";
#include <stdlib.h> #include <stdlib.h>
#include <stdio.h> #include <stdio.h>
#include "user.h"
#include "gdi.h" #include "gdi.h"
#include "prototypes.h" #include "prototypes.h"
MDESC *GDI_Heap = NULL; MDESC *GDI_Heap = NULL;
/* Object types for EnumObjects() */
#define OBJ_PEN 1
#define OBJ_BRUSH 2
#define MAX_OBJ 1024
HANDLE *lpPenBrushList = NULL;
extern HPALETTE COLOR_Init(); /* color.c */ extern HPALETTE COLOR_Init(); /* color.c */
/*********************************************************************** /***********************************************************************
@ -177,6 +185,36 @@ BOOL GDI_Init()
} }
/***********************************************************************
* GDI_AppendToPenBrushList
*/
BOOL GDI_AppendToPenBrushList(HANDLE hNewObj)
{
HANDLE *lphObj;
int i = 1;
if (hNewObj == 0) return FALSE;
if (lpPenBrushList == NULL) {
lpPenBrushList = malloc(MAX_OBJ * sizeof(HANDLE));
lpPenBrushList[0] = 0;
#ifdef DEBUG_GDI
printf("GDI_AppendToPenBrushList() lpPenBrushList allocated !\n");
#endif
}
for (lphObj = lpPenBrushList; i < MAX_OBJ; i++) {
if (*lphObj == 0) {
*lphObj = hNewObj;
*(lphObj + 1) = 0;
#ifdef DEBUG_GDI
printf("GDI_AppendToPenBrushList(%04X) appended (count=%d)\n", hNewObj, i);
#endif
return TRUE;
}
lphObj++;
}
return FALSE;
}
/*********************************************************************** /***********************************************************************
* GDI_FindPrevObject * GDI_FindPrevObject
* *
@ -212,6 +250,9 @@ HANDLE GDI_AllocObject( WORD size, WORD magic )
obj->hNext = 0; obj->hNext = 0;
obj->wMagic = magic; obj->wMagic = magic;
obj->dwCount = ++count; obj->dwCount = ++count;
if (magic == PEN_MAGIC || magic == BRUSH_MAGIC) {
GDI_AppendToPenBrushList(handle);
}
return handle; return handle;
} }
@ -389,3 +430,136 @@ BOOL UnrealizeObject( HANDLE handle )
#endif #endif
return TRUE; return TRUE;
} }
/***********************************************************************
* EnumObjects (GDI.71)
*/
int EnumObjects(HDC hDC, int nObjType, FARPROC lpEnumFunc, LPSTR lpData)
{
HANDLE handle;
DC *dc;
HANDLE *lphObj;
GDIOBJHDR *header;
WORD wMagic;
LPSTR lpLog; /* Point to a LOGBRUSH or LOGPEN struct */
HANDLE hLog;
int i, nRet;
if (lpEnumFunc == NULL) {
printf("EnumObjects // Bad EnumProc callback address !\n");
return 0;
}
switch (nObjType) {
case OBJ_PEN:
wMagic = PEN_MAGIC;
printf("EnumObjects(%04X, OBJ_PEN, %08X, %08X);\n",
hDC, lpEnumFunc, lpData);
hLog = USER_HEAP_ALLOC(GMEM_MOVEABLE, sizeof(LOGPEN));
lpLog = (LPSTR) USER_HEAP_ADDR(hLog);
if (lpLog == NULL) {
printf("EnumObjects // Unable to alloc LOGPEN struct !\n");
return 0;
}
break;
case OBJ_BRUSH:
wMagic = BRUSH_MAGIC;
printf("EnumObjects(%04X, OBJ_BRUSH, %08X, %08X);\n",
hDC, lpEnumFunc, lpData);
hLog = USER_HEAP_ALLOC(GMEM_MOVEABLE, sizeof(LOGBRUSH));
lpLog = (LPSTR) USER_HEAP_ADDR(hLog);
if (lpLog == NULL) {
printf("EnumObjects // Unable to alloc LOGBRUSH struct !\n");
return 0;
}
break;
default:
printf("EnumObjects(%04X, %04X, %08X, %08X); // Unknown OBJ type !\n",
hDC, nObjType, lpEnumFunc, lpData);
return 0;
}
printf("EnumObjects // Stock Objects first !\n");
for (i = 0; i < NB_STOCK_OBJECTS; i++) {
header = StockObjects[i];
if (header->wMagic == wMagic) {
PEN_GetObject( (PENOBJ *)header, sizeof(LOGPEN), (LPLOGPEN)lpLog);
BRUSH_GetObject( (BRUSHOBJ *)header, sizeof(LOGBRUSH), (LPLOGBRUSH)lpLog);
printf("EnumObjects // StockObj lpLog=%08X lpData=%08X\n", lpLog, lpData);
if (header->wMagic == BRUSH_MAGIC) {
printf("EnumObjects // StockBrush lbStyle=%04X\n", ((LPLOGBRUSH)lpLog)->lbStyle);
printf("EnumObjects // StockBrush lbColor=%08X\n", ((LPLOGBRUSH)lpLog)->lbColor);
printf("EnumObjects // StockBrush lbHatch=%04X\n", ((LPLOGBRUSH)lpLog)->lbHatch);
}
if (header->wMagic == PEN_MAGIC) {
printf("EnumObjects // StockPen lopnStyle=%04X\n", ((LPLOGPEN)lpLog)->lopnStyle);
printf("EnumObjects // StockPen lopnWidth=%08X\n", ((LPLOGPEN)lpLog)->lopnWidth);
printf("EnumObjects // StockPen lopnColor=%08X\n", ((LPLOGPEN)lpLog)->lopnColor);
}
nRet = 1;
/*
#ifdef WINELIB
nRet = (*lpEnumFunc)(lpLog, lpData);
#else
nRet = CallBack16(lpEnumFunc, 4, 2, (int)lpLog, 2, (int)lpData);
#endif
*/
printf("EnumObjects // after CallBack16 !\n");
if (nRet == 0) {
USER_HEAP_FREE(hLog);
printf("EnumObjects // EnumEnd requested by application !\n");
return 0;
}
}
}
if (lpPenBrushList == NULL) return 0;
printf("EnumObjects // Now DC owned objects %08X !\n", header);
for (lphObj = lpPenBrushList; *lphObj != 0; ) {
#ifdef DEBUG_GDI
printf("EnumObjects // *lphObj=%04X\n", *lphObj);
#endif
header = (GDIOBJHDR *) GDI_HEAP_ADDR(*lphObj++);
if (header->wMagic == wMagic) {
#ifdef DEBUG_GDI
printf("EnumObjects // DC_Obj lpLog=%08X lpData=%08X\n", lpLog, lpData);
#endif
if (header->wMagic == BRUSH_MAGIC) {
BRUSH_GetObject( (BRUSHOBJ *)header, sizeof(LOGBRUSH), (LPLOGBRUSH)lpLog);
printf("EnumObjects // DC_Brush lbStyle=%04X\n", ((LPLOGBRUSH)lpLog)->lbStyle);
printf("EnumObjects // DC_Brush lbColor=%08X\n", ((LPLOGBRUSH)lpLog)->lbColor);
printf("EnumObjects // DC_Brush lbHatch=%04X\n", ((LPLOGBRUSH)lpLog)->lbHatch);
}
if (header->wMagic == PEN_MAGIC) {
PEN_GetObject( (PENOBJ *)header, sizeof(LOGPEN), (LPLOGPEN)lpLog);
printf("EnumObjects // DC_Pen lopnStyle=%04X\n", ((LPLOGPEN)lpLog)->lopnStyle);
printf("EnumObjects // DC_Pen lopnWidth=%08X\n", ((LPLOGPEN)lpLog)->lopnWidth);
printf("EnumObjects // DC_Pen lopnColor=%08X\n", ((LPLOGPEN)lpLog)->lopnColor);
}
/*
#ifdef WINELIB
nRet = (*lpEnumFunc)(lpLog, lpData);
#else
nRet = CallBack16(lpEnumFunc, 4, 2, (int)lpLog, 2, (int)lpData);
#endif
*/
nRet = 1;
printf("EnumObjects // after CallBack16 !\n");
if (nRet == 0) {
USER_HEAP_FREE(hLog);
printf("EnumObjects // EnumEnd requested by application !\n");
return 0;
}
}
}
USER_HEAP_FREE(hLog);
printf("EnumObjects // End of enumeration !\n");
return 0;
}
/***********************************************************************
* SetObjectOwner (GDI.461)
*/
int SetObjectOwner(HANDLE hObj)
{
printf("EMPTY STUB !!! SetObjectOwner() (I don't know its prototype !\n");
return 0;
}

View File

@ -418,7 +418,7 @@ BOOL GrayString(HDC hdc, HBRUSH hbr, FARPROC gsprc, LPARAM lParam,
BOOL ExtTextOut(HDC hDC, short x, short y, WORD wOptions, LPRECT lprect, BOOL ExtTextOut(HDC hDC, short x, short y, WORD wOptions, LPRECT lprect,
LPSTR str, WORD count, LPINT lpDx) LPSTR str, WORD count, LPINT lpDx)
{ {
printf("EMPTY STUB !!! ExtTextOut(); ! (call TextOut() for new)\n"); printf("EMPTY STUB !!! ExtTextOut(); ! call TextOut() for now !\n");
TextOut(hDC, x, y, str, count); TextOut(hDC, x, y, str, count);
return FALSE; return FALSE;
} }

View File

@ -156,7 +156,7 @@ HWND CreateDialogParam( HINSTANCE hInst, LPCSTR dlgTemplate,
LPCSTR data; LPCSTR data;
#ifdef DEBUG_DIALOG #ifdef DEBUG_DIALOG
printf( "CreateDialogParam: %d,'%s',%d,%p,%d\n", printf( "CreateDialogParam: %d,'%x',%d,%p,%d\n",
hInst, dlgTemplate, owner, dlgProc, param ); hInst, dlgTemplate, owner, dlgProc, param );
#endif #endif
@ -295,10 +295,10 @@ HWND CreateDialogIndirectParam( HINSTANCE hInst, LPCSTR dlgTemplate,
} }
header->style |= WS_CHILD; header->style |= WS_CHILD;
CreateWindowEx( WS_EX_NOPARENTNOTIFY, CreateWindowEx( WS_EX_NOPARENTNOTIFY,
class, text, header->style, class, text, header->style,
header->x * xUnit / 4, header->y * yUnit / 8, header->x * xUnit / 4, header->y * yUnit / 8,
header->cx * xUnit / 4, header->cy * yUnit / 8, header->cx * xUnit / 4, header->cy * yUnit / 8,
hwnd, header->id, hInst, NULL ); hwnd, header->id, hInst, NULL );
header = next_header; header = next_header;
} }
@ -381,7 +381,7 @@ int DialogBoxParam( HINSTANCE hInst, LPCSTR dlgTemplate,
HWND hwnd; HWND hwnd;
#ifdef DEBUG_DIALOG #ifdef DEBUG_DIALOG
printf( "DialogBoxParam: %d,'%s',%d,%p,%d\n", printf( "DialogBoxParam: %d,'%x',%d,%p,%d\n",
hInst, dlgTemplate, owner, dlgProc, param ); hInst, dlgTemplate, owner, dlgProc, param );
#endif #endif
hwnd = CreateDialogParam( hInst, dlgTemplate, owner, dlgProc, param ); hwnd = CreateDialogParam( hInst, dlgTemplate, owner, dlgProc, param );
@ -451,6 +451,7 @@ BOOL IsDialogMessage( HWND hwndDlg, LPMSG msg )
int dlgCode = SendMessage( msg->hwnd, WM_GETDLGCODE, 0, 0 ); int dlgCode = SendMessage( msg->hwnd, WM_GETDLGCODE, 0, 0 );
/* Process key message */ /* Process key message */
/* .... */ /* .... */
SendMessage( msg->hwnd, msg->message, msg->wParam, msg->lParam );
} }
return TRUE; return TRUE;
} }

View File

@ -35,7 +35,7 @@ BOOL LineTo( HDC hdc, short x, short y )
} }
if (DC_SetupGCForPen( dc )) if (DC_SetupGCForPen( dc ))
XDrawLine(XT_display, dc->u.x.drawable, dc->u.x.gc, XDrawLine(display, dc->u.x.drawable, dc->u.x.gc,
dc->w.DCOrgX + XLPTODP( dc, dc->w.CursPosX ), dc->w.DCOrgX + XLPTODP( dc, dc->w.CursPosX ),
dc->w.DCOrgY + YLPTODP( dc, dc->w.CursPosY ), dc->w.DCOrgY + YLPTODP( dc, dc->w.CursPosY ),
dc->w.DCOrgX + XLPTODP( dc, x ), dc->w.DCOrgX + XLPTODP( dc, x ),
@ -145,7 +145,7 @@ BOOL GRAPH_DrawArc( HDC hdc, int left, int top, int right, int bottom,
diff_angle = end_angle - start_angle; diff_angle = end_angle - start_angle;
if (diff_angle < 0.0) diff_angle += 2*PI; if (diff_angle < 0.0) diff_angle += 2*PI;
XDrawArc( XT_display, dc->u.x.drawable, dc->u.x.gc, XDrawArc( display, dc->u.x.drawable, dc->u.x.gc,
dc->w.DCOrgX + left, dc->w.DCOrgY + top, dc->w.DCOrgX + left, dc->w.DCOrgY + top,
right-left-1, bottom-top-1, right-left-1, bottom-top-1,
(int)(start_angle * 180 * 64 / PI), (int)(start_angle * 180 * 64 / PI),
@ -162,7 +162,7 @@ BOOL GRAPH_DrawArc( HDC hdc, int left, int top, int right, int bottom,
points[1].x = dc->w.DCOrgX + xcenter; points[1].x = dc->w.DCOrgX + xcenter;
points[1].y = dc->w.DCOrgY + ycenter; points[1].y = dc->w.DCOrgY + ycenter;
} }
XDrawLines( XT_display, dc->u.x.drawable, dc->u.x.gc, XDrawLines( display, dc->u.x.drawable, dc->u.x.gc,
points, lines+1, CoordModeOrigin ); points, lines+1, CoordModeOrigin );
return TRUE; return TRUE;
} }
@ -222,11 +222,11 @@ BOOL Ellipse( HDC hdc, int left, int top, int right, int bottom )
if ((left == right) || (top == bottom)) return FALSE; if ((left == right) || (top == bottom)) return FALSE;
if (DC_SetupGCForBrush( dc )) if (DC_SetupGCForBrush( dc ))
XFillArc( XT_display, dc->u.x.drawable, dc->u.x.gc, XFillArc( display, dc->u.x.drawable, dc->u.x.gc,
dc->w.DCOrgX + left, dc->w.DCOrgY + top, dc->w.DCOrgX + left, dc->w.DCOrgY + top,
right-left-1, bottom-top-1, 0, 360*64 ); right-left-1, bottom-top-1, 0, 360*64 );
if (DC_SetupGCForPen( dc )) if (DC_SetupGCForPen( dc ))
XDrawArc( XT_display, dc->u.x.drawable, dc->u.x.gc, XDrawArc( display, dc->u.x.drawable, dc->u.x.gc,
dc->w.DCOrgX + left, dc->w.DCOrgY + top, dc->w.DCOrgX + left, dc->w.DCOrgY + top,
right-left-1, bottom-top-1, 0, 360*64 ); right-left-1, bottom-top-1, 0, 360*64 );
return TRUE; return TRUE;
@ -253,11 +253,11 @@ BOOL Rectangle( HDC hdc, int left, int top, int right, int bottom )
bottom = YLPTODP( dc, bottom ); bottom = YLPTODP( dc, bottom );
if (DC_SetupGCForBrush( dc )) if (DC_SetupGCForBrush( dc ))
XFillRectangle( XT_display, dc->u.x.drawable, dc->u.x.gc, XFillRectangle( display, dc->u.x.drawable, dc->u.x.gc,
dc->w.DCOrgX + left, dc->w.DCOrgY + top, dc->w.DCOrgX + left, dc->w.DCOrgY + top,
right-left-1, bottom-top-1 ); right-left-1, bottom-top-1 );
if (DC_SetupGCForPen( dc )) if (DC_SetupGCForPen( dc ))
XDrawRectangle( XT_display, dc->u.x.drawable, dc->u.x.gc, XDrawRectangle( display, dc->u.x.drawable, dc->u.x.gc,
dc->w.DCOrgX + left, dc->w.DCOrgY + top, dc->w.DCOrgX + left, dc->w.DCOrgY + top,
right-left-1, bottom-top-1 ); right-left-1, bottom-top-1 );
return TRUE; return TRUE;
@ -289,41 +289,41 @@ BOOL RoundRect( HDC hDC, short left, short top, short right, short bottom,
x2 = XLPTODP(dc, right - ell_width); x2 = XLPTODP(dc, right - ell_width);
y2 = YLPTODP(dc, bottom - ell_height); y2 = YLPTODP(dc, bottom - ell_height);
if (DC_SetupGCForBrush(dc)) { if (DC_SetupGCForBrush(dc)) {
XFillArc(XT_display, dc->u.x.drawable, dc->u.x.gc, XFillArc(display, dc->u.x.drawable, dc->u.x.gc,
dc->w.DCOrgX + x1, dc->w.DCOrgY + y1, dc->w.DCOrgX + x1, dc->w.DCOrgY + y1,
ell_width, ell_height, 90 * 64, 90 * 64); ell_width, ell_height, 90 * 64, 90 * 64);
XFillArc(XT_display, dc->u.x.drawable, dc->u.x.gc, XFillArc(display, dc->u.x.drawable, dc->u.x.gc,
dc->w.DCOrgX + x1, dc->w.DCOrgY + y2, dc->w.DCOrgX + x1, dc->w.DCOrgY + y2,
ell_width, ell_height, 180 * 64, 90 * 64); ell_width, ell_height, 180 * 64, 90 * 64);
XFillArc(XT_display, dc->u.x.drawable, dc->u.x.gc, XFillArc(display, dc->u.x.drawable, dc->u.x.gc,
dc->w.DCOrgX + x2, dc->w.DCOrgY + y2, dc->w.DCOrgX + x2, dc->w.DCOrgY + y2,
ell_width, ell_height, 270 * 64, 90 * 64); ell_width, ell_height, 270 * 64, 90 * 64);
XFillArc(XT_display, dc->u.x.drawable, dc->u.x.gc, XFillArc(display, dc->u.x.drawable, dc->u.x.gc,
dc->w.DCOrgX + x2, dc->w.DCOrgY + y1, dc->w.DCOrgX + x2, dc->w.DCOrgY + y1,
ell_width, ell_height, 0, 90 * 64); ell_width, ell_height, 0, 90 * 64);
ell_width /= 2; ell_height /= 2; ell_width /= 2; ell_height /= 2;
XFillRectangle(XT_display, dc->u.x.drawable, dc->u.x.gc, XFillRectangle(display, dc->u.x.drawable, dc->u.x.gc,
dc->w.DCOrgX + left + ell_width, dc->w.DCOrgY + top, dc->w.DCOrgX + left + ell_width, dc->w.DCOrgY + top,
right - left - 2 * ell_width, bottom - top); right - left - 2 * ell_width, bottom - top);
XFillRectangle(XT_display, dc->u.x.drawable, dc->u.x.gc, XFillRectangle(display, dc->u.x.drawable, dc->u.x.gc,
dc->w.DCOrgX + left, dc->w.DCOrgY + top + ell_height, dc->w.DCOrgX + left, dc->w.DCOrgY + top + ell_height,
ell_width, bottom - top - 2 * ell_height); ell_width, bottom - top - 2 * ell_height);
XFillRectangle(XT_display, dc->u.x.drawable, dc->u.x.gc, XFillRectangle(display, dc->u.x.drawable, dc->u.x.gc,
dc->w.DCOrgX + right - ell_width, dc->w.DCOrgY + top + ell_height, dc->w.DCOrgX + right - ell_width, dc->w.DCOrgY + top + ell_height,
ell_width, bottom - top - 2 * ell_height); ell_width, bottom - top - 2 * ell_height);
ell_width *= 2; ell_height *= 2; ell_width *= 2; ell_height *= 2;
} }
if (DC_SetupGCForPen(dc)) { if (DC_SetupGCForPen(dc)) {
XDrawArc(XT_display, dc->u.x.drawable, dc->u.x.gc, XDrawArc(display, dc->u.x.drawable, dc->u.x.gc,
dc->w.DCOrgX + x1, dc->w.DCOrgY + y1, dc->w.DCOrgX + x1, dc->w.DCOrgY + y1,
ell_width, ell_height, 90 * 64, 90 * 64); ell_width, ell_height, 90 * 64, 90 * 64);
XDrawArc(XT_display, dc->u.x.drawable, dc->u.x.gc, XDrawArc(display, dc->u.x.drawable, dc->u.x.gc,
dc->w.DCOrgX + x1, dc->w.DCOrgY + y2, dc->w.DCOrgX + x1, dc->w.DCOrgY + y2,
ell_width, ell_height, 180 * 64, 90 * 64); ell_width, ell_height, 180 * 64, 90 * 64);
XDrawArc(XT_display, dc->u.x.drawable, dc->u.x.gc, XDrawArc(display, dc->u.x.drawable, dc->u.x.gc,
dc->w.DCOrgX + x2, dc->w.DCOrgY + y2, dc->w.DCOrgX + x2, dc->w.DCOrgY + y2,
ell_width, ell_height, 270 * 64, 90 * 64); ell_width, ell_height, 270 * 64, 90 * 64);
XDrawArc(XT_display, dc->u.x.drawable, dc->u.x.gc, XDrawArc(display, dc->u.x.drawable, dc->u.x.gc,
dc->w.DCOrgX + x2, dc->w.DCOrgY + y1, dc->w.DCOrgX + x2, dc->w.DCOrgY + y1,
ell_width, ell_height, 0, 90 * 64); ell_width, ell_height, 0, 90 * 64);
} }
@ -423,9 +423,9 @@ COLORREF SetPixel( HDC hdc, short x, short y, COLORREF color )
pixel = COLOR_ToPhysical( dc, color ); pixel = COLOR_ToPhysical( dc, color );
GetPaletteEntries( dc->w.hPalette, pixel, 1, &entry ); GetPaletteEntries( dc->w.hPalette, pixel, 1, &entry );
XSetForeground( XT_display, dc->u.x.gc, pixel ); XSetForeground( display, dc->u.x.gc, pixel );
XSetFunction( XT_display, dc->u.x.gc, GXcopy ); XSetFunction( display, dc->u.x.gc, GXcopy );
XDrawPoint( XT_display, dc->u.x.drawable, dc->u.x.gc, x, y ); XDrawPoint( display, dc->u.x.drawable, dc->u.x.gc, x, y );
return RGB( entry.peRed, entry.peGreen, entry.peBlue ); return RGB( entry.peRed, entry.peGreen, entry.peBlue );
} }
@ -450,13 +450,13 @@ COLORREF GetPixel( HDC hdc, short x, short y )
{ {
XWindowAttributes win_attr; XWindowAttributes win_attr;
if (!XGetWindowAttributes( XT_display, dc->u.x.drawable, &win_attr )) if (!XGetWindowAttributes( display, dc->u.x.drawable, &win_attr ))
return 0; return 0;
if (win_attr.map_state != IsViewable) return 0; if (win_attr.map_state != IsViewable) return 0;
if ((x >= win_attr.width) || (y >= win_attr.height)) return 0; if ((x >= win_attr.width) || (y >= win_attr.height)) return 0;
} }
image = XGetImage( XT_display, dc->u.x.drawable, x, y, image = XGetImage( display, dc->u.x.drawable, x, y,
1, 1, AllPlanes, ZPixmap ); 1, 1, AllPlanes, ZPixmap );
GetPaletteEntries( dc->w.hPalette, XGetPixel( image, 0, 0 ), 1, &entry ); GetPaletteEntries( dc->w.hPalette, XGetPixel( image, 0, 0 ), 1, &entry );
XDestroyImage( image ); XDestroyImage( image );
@ -494,7 +494,7 @@ BOOL PaintRgn( HDC hdc, HRGN hrgn )
GetClipBox( hdc, &box ); GetClipBox( hdc, &box );
if (DC_SetupGCForBrush( dc )) if (DC_SetupGCForBrush( dc ))
XFillRectangle( XT_display, dc->u.x.drawable, dc->u.x.gc, XFillRectangle( display, dc->u.x.drawable, dc->u.x.gc,
dc->w.DCOrgX + box.left, dc->w.DCOrgY + box.top, dc->w.DCOrgX + box.left, dc->w.DCOrgY + box.top,
box.right-box.left, box.bottom-box.top ); box.right-box.left, box.bottom-box.top );
@ -541,7 +541,7 @@ void DrawFocusRect( HDC hdc, LPRECT rc )
oldBkMode = SetBkMode(hdc, TRANSPARENT); oldBkMode = SetBkMode(hdc, TRANSPARENT);
if (DC_SetupGCForPen( dc )) if (DC_SetupGCForPen( dc ))
XDrawRectangle( XT_display, dc->u.x.drawable, dc->u.x.gc, XDrawRectangle( display, dc->u.x.drawable, dc->u.x.gc,
dc->w.DCOrgX + left, dc->w.DCOrgY + top, dc->w.DCOrgX + left, dc->w.DCOrgY + top,
right-left-1, bottom-top-1 ); right-left-1, bottom-top-1 );
@ -601,12 +601,12 @@ BOOL Polyline (HDC hdc, LPPOINT pt, int count)
if (DC_SetupGCForPen( dc )) if (DC_SetupGCForPen( dc ))
{ {
for (i = 0; i < count-1; i ++) for (i = 0; i < count-1; i ++)
XDrawLine (XT_display, dc->u.x.drawable, dc->u.x.gc, XDrawLine (display, dc->u.x.drawable, dc->u.x.gc,
dc->w.DCOrgX + XLPTODP(dc, pt [i].x), dc->w.DCOrgX + XLPTODP(dc, pt [i].x),
dc->w.DCOrgY + YLPTODP(dc, pt [i].y), dc->w.DCOrgY + YLPTODP(dc, pt [i].y),
dc->w.DCOrgX + XLPTODP(dc, pt [i+1].x), dc->w.DCOrgX + XLPTODP(dc, pt [i+1].x),
dc->w.DCOrgY + YLPTODP(dc, pt [i+1].y)); dc->w.DCOrgY + YLPTODP(dc, pt [i+1].y));
XDrawLine (XT_display, dc->u.x.drawable, dc->u.x.gc, XDrawLine (display, dc->u.x.drawable, dc->u.x.gc,
dc->w.DCOrgX + XLPTODP(dc, pt [count-1].x), dc->w.DCOrgX + XLPTODP(dc, pt [count-1].x),
dc->w.DCOrgY + YLPTODP(dc, pt [count-1].y), dc->w.DCOrgY + YLPTODP(dc, pt [count-1].y),
dc->w.DCOrgX + XLPTODP(dc, pt [0].x), dc->w.DCOrgX + XLPTODP(dc, pt [0].x),
@ -644,12 +644,12 @@ BOOL Polygon (HDC hdc, LPPOINT pt, int count)
} }
points [count] = points [0]; points [count] = points [0];
XFillPolygon( XT_display, dc->u.x.drawable, dc->u.x.gc, XFillPolygon( display, dc->u.x.drawable, dc->u.x.gc,
points, count, Complex, CoordModeOrigin); points, count, Complex, CoordModeOrigin);
if (DC_SetupGCForPen ( dc )) if (DC_SetupGCForPen ( dc ))
{ {
XDrawLines( XT_display, dc->u.x.drawable, dc->u.x.gc, XDrawLines( display, dc->u.x.drawable, dc->u.x.gc,
points, count, CoordModeOrigin ); points, count, CoordModeOrigin );
} }
} }

View File

@ -16,6 +16,7 @@ static char Copyright[] = "Copyright Alexandre Julliard, 1994";
#include "syscolor.h" #include "syscolor.h"
static HBITMAP hbitmapClose = 0; static HBITMAP hbitmapClose = 0;
static HBITMAP hbitmapMDIClose = 0;
static HBITMAP hbitmapMinimize = 0; static HBITMAP hbitmapMinimize = 0;
static HBITMAP hbitmapMinimizeD = 0; static HBITMAP hbitmapMinimizeD = 0;
static HBITMAP hbitmapMaximize = 0; static HBITMAP hbitmapMaximize = 0;
@ -287,11 +288,15 @@ LONG NC_HandleNCHitTest( HWND hwnd, POINT pt )
static void NC_DrawSysButton( HWND hwnd, HDC hdc, BOOL down ) static void NC_DrawSysButton( HWND hwnd, HDC hdc, BOOL down )
{ {
RECT rect; RECT rect;
WND *wndPtr = WIN_FindWndPtr( hwnd );
HDC hdcMem = CreateCompatibleDC( hdc ); HDC hdcMem = CreateCompatibleDC( hdc );
if (hdcMem) if (hdcMem)
{ {
NC_GetInsideRect( hwnd, &rect ); NC_GetInsideRect( hwnd, &rect );
SelectObject( hdcMem, hbitmapClose ); if (wndPtr->dwStyle & WS_CHILD)
SelectObject( hdcMem, hbitmapMDIClose );
else
SelectObject( hdcMem, hbitmapClose );
BitBlt( hdc, rect.left, rect.top, SYSMETRICS_CXSIZE, BitBlt( hdc, rect.left, rect.top, SYSMETRICS_CXSIZE,
SYSMETRICS_CYSIZE, hdcMem, 1, 1, down ? NOTSRCCOPY : SRCCOPY ); SYSMETRICS_CYSIZE, hdcMem, 1, 1, down ? NOTSRCCOPY : SRCCOPY );
DeleteDC( hdcMem ); DeleteDC( hdcMem );
@ -457,6 +462,8 @@ static void NC_DrawCaption( HDC hdc, RECT *rect, HWND hwnd,
{ {
if (!(hbitmapClose = LoadBitmap( 0, MAKEINTRESOURCE(OBM_CLOSE) ))) if (!(hbitmapClose = LoadBitmap( 0, MAKEINTRESOURCE(OBM_CLOSE) )))
return; return;
if (!(hbitmapMDIClose = LoadBitmap( 0, MAKEINTRESOURCE(OBM_OLD_CLOSE) )))
return;
hbitmapMinimize = LoadBitmap( 0, MAKEINTRESOURCE(OBM_REDUCE) ); hbitmapMinimize = LoadBitmap( 0, MAKEINTRESOURCE(OBM_REDUCE) );
hbitmapMinimizeD = LoadBitmap( 0, MAKEINTRESOURCE(OBM_REDUCED) ); hbitmapMinimizeD = LoadBitmap( 0, MAKEINTRESOURCE(OBM_REDUCED) );
hbitmapMaximize = LoadBitmap( 0, MAKEINTRESOURCE(OBM_ZOOM) ); hbitmapMaximize = LoadBitmap( 0, MAKEINTRESOURCE(OBM_ZOOM) );

View File

@ -285,113 +285,72 @@ char *UTILITY_convertArgs(char *format, char *winarg)
#ifndef WINELIB #ifndef WINELIB
INT windows_wsprintf(BYTE *win_stack) INT windows_wsprintf(BYTE *win_stack)
{ {
LPSTR lpOutput, lpFormat; LPSTR lpOutput, lpFormat, ptr;
BYTE *new_stack, *stack_ptr, *ptr; BYTE new_stack[1024], *stack_ptr;
int stacklength, result;
lpOutput = (LPSTR) *(DWORD*)win_stack; lpOutput = (LPSTR) *(DWORD*)win_stack;
win_stack += 4; win_stack += 4;
lpFormat = (LPSTR) *(DWORD*)win_stack; lpFormat = (LPSTR) *(DWORD*)win_stack;
win_stack += 4; win_stack += 4;
/* determine # of bytes pushed on 16-bit stack by checking printf's
format string */
ptr = lpFormat;
stacklength = 0;
do {
if (*ptr++ != '%')
continue;
/* skip width/precision */
while ( *ptr == '-' || *ptr == '+' || *ptr == '.' ||
*ptr == ' ' || isdigit(*ptr))
ptr++;
switch(*ptr++) {
case 'l': ptr++; /* skip next type character */
stacklength += 4;
continue;
case 's':
stacklength += 4;
continue;
case 'c':
case 'd':
case 'i':
case 'u':
case 'x':
case 'X':
stacklength += 2;
continue;
default:
fprintf(stderr, "wsprintf: oops, unknown formattype `%c' used!\n", *ptr);
}
} while (*ptr);
/* create 32-bit stack for libc's vsprintf() */ /* create 32-bit stack for libc's vsprintf() */
new_stack = malloc(2 * stacklength); for (ptr = lpFormat, stack_ptr = new_stack; *ptr; ptr++) {
stack_ptr = new_stack + 2 * stacklength; if (*ptr != '%' || *++ptr == '%')
win_stack += stacklength;
ptr = lpFormat;
do {
if (*ptr++ != '%')
continue; continue;
/* skip width/precision */ /* skip width/precision */
while ( *ptr == '-' || *ptr == '+' || *ptr == '.' || while (*ptr == '-' || *ptr == '+' || *ptr == '.' ||
*ptr == ' ' || isdigit(*ptr)) *ptr == ' ' || isdigit(*ptr))
ptr++; ptr++;
switch(*ptr++) { switch (*ptr++) {
case 's': case 's':
stack_ptr -= 4;
win_stack -= 4;
*(DWORD*)stack_ptr = *(DWORD*)win_stack; *(DWORD*)stack_ptr = *(DWORD*)win_stack;
continue; stack_ptr += 4;
win_stack += 4;
break;
case 'l': case 'l':
stack_ptr -= 4;
win_stack -= 4;
*(DWORD*)stack_ptr = *(DWORD*)win_stack; *(DWORD*)stack_ptr = *(DWORD*)win_stack;
stack_ptr += 4;
win_stack += 4;
ptr++; /* skip next type character */ ptr++; /* skip next type character */
continue; break;
case 'c': case 'c':
stack_ptr -= 4;
win_stack -= 2;
/* windows' wsprintf() %c ignores 0's, we replace 0 with 1 to make sure /* windows' wsprintf() %c ignores 0's, we replace 0 with SPACE to make sure
that the remaining part of the string isn't ignored by the winapp */ that the remaining part of the string isn't ignored by the winapp */
if (*(WORD*)win_stack) if (*(WORD*)win_stack)
*(DWORD*)stack_ptr = *(WORD*)win_stack; *(DWORD*)stack_ptr = *(WORD*)win_stack;
else else
*(DWORD*)stack_ptr = 1; *(DWORD*)stack_ptr = ' ';
continue; stack_ptr += 4;
win_stack += 2;
break;
case 'd': case 'd':
case 'i': case 'i':
stack_ptr -= 4;
win_stack -= 2;
*(int*)stack_ptr = *(INT*)win_stack; *(int*)stack_ptr = *(INT*)win_stack;
continue; stack_ptr += 4;
win_stack += 2;
break;
case 'u': case 'u':
case 'x': case 'x':
case 'X': case 'X':
stack_ptr -= 4;
win_stack -= 2;
*(DWORD*)stack_ptr = *(WORD*)win_stack; *(DWORD*)stack_ptr = *(WORD*)win_stack;
continue; stack_ptr += 4;
win_stack += 2;
break;
default: default:
stack_ptr -= 4;
win_stack -= 4;
*(DWORD*)stack_ptr = 0; *(DWORD*)stack_ptr = 0;
stack_ptr += 4;
win_stack += 4;
fprintf(stderr, "wsprintf: oops, unknown formattype %c used!\n", *ptr); fprintf(stderr, "wsprintf: oops, unknown formattype %c used!\n", *ptr);
break;
} }
} while (*ptr); }
result = vsprintf(lpOutput, lpFormat, stack_ptr); return vsprintf(lpOutput, lpFormat, new_stack);
free(new_stack);
return result;
} }
#endif #endif

View File

@ -444,6 +444,9 @@ HWND CreateWindowEx( DWORD exStyle, LPSTR className, LPSTR windowName,
WIN_SendParentNotify( hwnd, WM_CREATE, MAKELONG( hwnd, wndPtr->wIDmenu ) ); WIN_SendParentNotify( hwnd, WM_CREATE, MAKELONG( hwnd, wndPtr->wIDmenu ) );
if (style & WS_VISIBLE) ShowWindow( hwnd, SW_SHOW ); if (style & WS_VISIBLE) ShowWindow( hwnd, SW_SHOW );
#ifdef DEBUG_WIN
printf( "CreateWindowEx: return %04X \n", hwnd);
#endif
return hwnd; return hwnd;
} }

View File

@ -230,7 +230,7 @@ BOOL ShowWindow( HWND hwnd, int cmd )
int swpflags = 0; int swpflags = 0;
#ifdef DEBUG_WIN #ifdef DEBUG_WIN
printf("ShowWindow: hwnd=%d, cmd=%d\n", hwnd, cmd); printf("ShowWindow: hwnd=%04X, cmd=%d\n", hwnd, cmd);
#endif #endif
if (!wndPtr) return FALSE; if (!wndPtr) return FALSE;
@ -456,7 +456,7 @@ BOOL SetWindowPos( HWND hwnd, HWND hwndInsertAfter, short x, short y,
int changeMask = 0; int changeMask = 0;
#ifdef DEBUG_WIN #ifdef DEBUG_WIN
printf( "SetWindowPos: %d %d %d,%d %dx%d 0x%x\n", printf( "SetWindowPos: %04X %d %d,%d %dx%d 0x%x\n",
hwnd, hwndInsertAfter, x, y, cx, cy, flags ); hwnd, hwndInsertAfter, x, y, cx, cy, flags );
#endif #endif
@ -592,10 +592,14 @@ BOOL SetWindowPos( HWND hwnd, HWND hwndInsertAfter, short x, short y,
} }
changeMask |= CWStackMode; changeMask |= CWStackMode;
} }
if (changeMask) XConfigureWindow( display, wndPtr->window, if ((newWindowRect.right - newWindowRect.left) != 0 &&
changeMask, &winChanges ); (newWindowRect.bottom - newWindowRect.top) != 0)
if (changeMask) XConfigureWindow( display, wndPtr->window,
changeMask, &winChanges );
if (winPos->flags & SWP_SHOWWINDOW) if ((newWindowRect.right - newWindowRect.left) != 0 &&
(newWindowRect.bottom - newWindowRect.top) != 0 &&
(winPos->flags & SWP_SHOWWINDOW))
{ {
wndPtr->dwStyle |= WS_VISIBLE; wndPtr->dwStyle |= WS_VISIBLE;
XMapWindow( display, wndPtr->window ); XMapWindow( display, wndPtr->window );