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:
parent
73450d65c3
commit
1f57929b17
86
ChangeLog
86
ChangeLog
|
@ -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
31
LICENSE
|
@ -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
37
README
|
@ -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.
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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));
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
234
controls/menu.c
234
controls/menu.c
|
@ -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)
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -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))
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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)
|
||||||
|
|
238
loader/library.c
238
loader/library.c
|
@ -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 */
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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));
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -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;
|
||||||
|
|
24
misc/lstr.c
24
misc/lstr.c
|
@ -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 */
|
||||||
|
|
24
misc/main.c
24
misc/main.c
|
@ -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)
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -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);
|
||||||
|
|
331
misc/mmsystem.c
331
misc/mmsystem.c
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
307
objects/font.c
307
objects/font.c
|
@ -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);
|
||||||
|
|
174
objects/gdiobj.c
174
objects/gdiobj.c
|
@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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) );
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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 );
|
||||||
|
|
Loading…
Reference in New Issue