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)
|
||||
|
||||
|
|
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
|
||||
warranty. All code is covered by the license contained in the file
|
||||
LICENSE unless explicitly stated in the individual source file.
|
||||
0. 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.
|
||||
|
||||
1. COMPILATION:
|
||||
|
||||
|
@ -171,6 +197,11 @@ bob@amscons.com
|
|||
|
||||
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)
|
||||
- debugger improvements
|
||||
- bug fixes to get some dialog boxes working.
|
||||
|
|
|
@ -9,7 +9,7 @@ SRCS = \
|
|||
menu.c \
|
||||
scroll.c \
|
||||
static.c \
|
||||
edit.o \
|
||||
edit.c \
|
||||
desktop.c \
|
||||
widgets.c
|
||||
|
||||
|
|
|
@ -263,7 +263,9 @@ LONG ComboBoxWndProc( HWND hwnd, WORD message, WORD wParam, LONG lParam )
|
|||
if (lphc == NULL) return 0;
|
||||
return(SendMessage(lphc->hWndLBox, LB_ADDSTRING, wParam, lParam));
|
||||
case CB_GETLBTEXT:
|
||||
#ifdef DEBUG_COMBO
|
||||
printf("CB_GETLBTEXT #%u !\n", wParam);
|
||||
#endif
|
||||
lphc = ComboGetStorageHeader(hwnd);
|
||||
if (lphc == NULL) return 0;
|
||||
return(SendMessage(lphc->hWndLBox, LB_GETTEXT, wParam, lParam));
|
||||
|
|
|
@ -309,7 +309,6 @@ LONG EditWndProc(HWND hwnd, WORD uMsg, WORD wParam, LONG lParam)
|
|||
break;
|
||||
|
||||
case WM_KEYDOWN:
|
||||
printf("EDIT WM_KEYDOWN w=%04X !\n", wParam);
|
||||
EDIT_KeyDownMsg(hwnd, wParam);
|
||||
break;
|
||||
|
||||
|
|
222
controls/menu.c
222
controls/menu.c
|
@ -14,6 +14,7 @@ static char Copyright[] = "Copyright Martin Ayotte, 1993";
|
|||
#include "sysmetrics.h"
|
||||
#include "prototypes.h"
|
||||
#include "menu.h"
|
||||
#include "user.h"
|
||||
#include "heap.h"
|
||||
#include "win.h"
|
||||
|
||||
|
@ -50,6 +51,7 @@ WORD GetSelectionKey(LPSTR str);
|
|||
LPSTR GetShortCutString(LPSTR str);
|
||||
WORD GetShortCutPos(LPSTR str);
|
||||
BOOL HideAllSubPopupMenu(LPPOPUPMENU menu);
|
||||
void InitStdBitmaps();
|
||||
HMENU CopySysMenu();
|
||||
WORD * ParseMenuResource(WORD *first_item, int level, HMENU hMenu);
|
||||
void SetMenuLogicalParent(HMENU hMenu, HWND hWnd);
|
||||
|
@ -84,10 +86,7 @@ LONG PopupMenuWndProc( HWND hwnd, WORD message, WORD wParam, LONG lParam )
|
|||
#ifdef DEBUG_MENU
|
||||
printf("PopupMenu WM_CREATE lppop=%08X !\n", lppop);
|
||||
#endif
|
||||
if (hStdCheck == (HBITMAP)NULL)
|
||||
hStdCheck = LoadBitmap((HANDLE)NULL, (LPSTR)OBM_CHECK);
|
||||
if (hStdMnArrow == (HBITMAP)NULL)
|
||||
hStdMnArrow = LoadBitmap((HANDLE)NULL, (LPSTR)OBM_MNARROW);
|
||||
InitStdBitmaps();
|
||||
#ifdef DEBUG_MENU
|
||||
printf("PopupMenu End of WM_CREATE !\n");
|
||||
#endif
|
||||
|
@ -215,6 +214,7 @@ LONG PopupMenuWndProc( HWND hwnd, WORD message, WORD wParam, LONG lParam )
|
|||
ShowWindow(hwnd, SW_HIDE);
|
||||
hwnd = lppop->hWndParent;
|
||||
lppop = PopupMenuGetWindowAndStorage(hwnd, &wndPtr);
|
||||
printf("VK_LEFT // try to put focus on MenuBar %08X !\n", lppop);
|
||||
if (lppop == NULL) break;
|
||||
MenuItemSelect(hwnd, lppop, lppop->nItems - 1);
|
||||
break;
|
||||
|
@ -241,6 +241,7 @@ LONG PopupMenuWndProc( HWND hwnd, WORD message, WORD wParam, LONG lParam )
|
|||
ShowWindow(hwnd, SW_HIDE);
|
||||
hwnd = lppop->hWndParent;
|
||||
lppop = PopupMenuGetWindowAndStorage(hwnd, &wndPtr);
|
||||
printf("VK_RIGHT // try to put focus on MenuBar %08X !\n", lppop);
|
||||
if (lppop == NULL) break;
|
||||
MenuItemSelect(hwnd, lppop, 0);
|
||||
break;
|
||||
|
@ -262,11 +263,6 @@ LONG PopupMenuWndProc( HWND hwnd, WORD message, WORD wParam, LONG lParam )
|
|||
}
|
||||
MenuItemSelect(hwnd, lppop, lppop->FocusedItem + 1);
|
||||
break;
|
||||
case VK_RETURN:
|
||||
case VK_SPACE:
|
||||
ProceedSPACE: lppop = PopupMenuGetWindowAndStorage(hwnd, &wndPtr);
|
||||
ExecFocusedMenuItem(hwnd, lppop);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
@ -280,6 +276,11 @@ ProceedSPACE: lppop = PopupMenuGetWindowAndStorage(hwnd, &wndPtr);
|
|||
lppop = PopupMenuGetWindowAndStorage(hwnd, &wndPtr);
|
||||
if (lppop == NULL) break;
|
||||
switch(wParam) {
|
||||
case VK_RETURN:
|
||||
case VK_SPACE:
|
||||
ProceedSPACE: lppop = PopupMenuGetWindowAndStorage(hwnd, &wndPtr);
|
||||
ExecFocusedMenuItem(hwnd, lppop);
|
||||
break;
|
||||
case VK_ESCAPE:
|
||||
if (lppop->BarFlag) {
|
||||
#ifdef DEBUG_MENU
|
||||
|
@ -686,6 +687,7 @@ void StdDrawPopupMenu(HWND hwnd)
|
|||
EndPaint(hwnd, &ps);
|
||||
return;
|
||||
}
|
||||
InitStdBitmaps();
|
||||
lppop = PopupMenuGetWindowAndStorage(hwnd, &wndPtr);
|
||||
if (lppop == NULL) goto EndOfPaint;
|
||||
hBrush = GetStockObject(WHITE_BRUSH);
|
||||
|
@ -734,8 +736,13 @@ void StdDrawPopupMenu(HWND hwnd)
|
|||
hMemDC = CreateCompatibleDC(hDC);
|
||||
SelectObject(hMemDC, hBitMap);
|
||||
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,
|
||||
bm.bmWidth, bm.bmHeight, hMemDC, 0, 0, SRCCOPY);
|
||||
bm.bmWidth, bm.bmHeight,
|
||||
hMemDC, 0, 0, SRCCOPY);
|
||||
DeleteDC(hMemDC);
|
||||
if ((lpitem->item_flags & MF_HILITE) == MF_HILITE)
|
||||
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);
|
||||
#endif
|
||||
MenuBarCalcSize(hDC, lprect, lppop);
|
||||
if (suppress_draw)
|
||||
return;
|
||||
|
||||
if (suppress_draw) return;
|
||||
hOldFont = SelectObject(hDC, GetStockObject(SYSTEM_FONT));
|
||||
hOldPen = SelectObject(hDC, GetStockObject(BLACK_PEN));
|
||||
hBrush = GetStockObject(WHITE_BRUSH);
|
||||
|
@ -855,8 +860,13 @@ void StdDrawMenuBar(HDC hDC, LPRECT lprect, LPPOPUPMENU lppop,
|
|||
hMemDC = CreateCompatibleDC(hDC);
|
||||
SelectObject(hMemDC, hBitMap);
|
||||
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,
|
||||
bm.bmWidth, bm.bmHeight, hMemDC, 0, 0, SRCCOPY);
|
||||
bm.bmWidth, bm.bmHeight,
|
||||
hMemDC, 0, 0, SRCCOPY);
|
||||
DeleteDC(hMemDC);
|
||||
}
|
||||
if (((lpitem->item_flags & MF_BITMAP) != MF_BITMAP) &&
|
||||
|
@ -955,6 +965,7 @@ void PopupMenuCalcSize(HWND hwnd)
|
|||
#ifdef DEBUG_MENUCALC
|
||||
printf("PopupMenuCalcSize hWnd=%04X !\n", hWnd);
|
||||
#endif
|
||||
InitStdBitmaps();
|
||||
lppop = PopupMenuGetWindowAndStorage(hwnd, &wndPtr);
|
||||
if (lppop == NULL) return;
|
||||
if (lppop->nItems == 0) return;
|
||||
|
@ -1039,6 +1050,7 @@ void MenuBarCalcSize(HDC hDC, LPRECT lprect, LPPOPUPMENU lppop)
|
|||
DWORD dwRet;
|
||||
if (lppop == NULL) return;
|
||||
if (lppop->nItems == 0) return;
|
||||
InitStdBitmaps();
|
||||
#ifdef DEBUG_MENUCALC
|
||||
printf("MenuBarCalcSize left=%d top=%d right=%d bottom=%d !\n",
|
||||
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)
|
||||
{
|
||||
WND *wndPtr;
|
||||
LPPOPUPMENU menu;
|
||||
LPMENUITEM lpitem;
|
||||
int i;
|
||||
#ifdef DEBUG_MENU
|
||||
printf("CheckMenuItem (%04X, %04X, %04X) !\n", hMenu, wItemID, wFlags);
|
||||
#endif
|
||||
menu = (LPPOPUPMENU) GlobalLock(hMenu);
|
||||
if (menu == NULL) return FALSE;
|
||||
lpitem = menu->firstItem;
|
||||
for (i = 0; i < menu->nItems; i++) {
|
||||
if (lpitem == NULL) break;
|
||||
if (i == wItemID) {
|
||||
if (wFlags && MF_CHECKED)
|
||||
lpitem = FindMenuItem(hMenu, wItemID, wFlags);
|
||||
if (lpitem != NULL) {
|
||||
if ((wFlags & MF_CHECKED) == MF_CHECKED)
|
||||
lpitem->item_flags |= MF_CHECKED;
|
||||
else
|
||||
lpitem->item_flags &= ((WORD)-1 ^ MF_CHECKED);
|
||||
GlobalUnlock(hMenu);
|
||||
#ifdef DEBUG_MENU
|
||||
printf("CheckMenuItem // Found !\n");
|
||||
#endif
|
||||
return(TRUE);
|
||||
}
|
||||
lpitem = (LPMENUITEM)lpitem->next;
|
||||
}
|
||||
GlobalUnlock(hMenu);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
@ -1277,30 +1281,113 @@ BOOL CheckMenuItem(HMENU hMenu, WORD wItemID, WORD wFlags)
|
|||
*/
|
||||
BOOL EnableMenuItem(HMENU hMenu, WORD wItemID, WORD wFlags)
|
||||
{
|
||||
WND *wndPtr;
|
||||
LPPOPUPMENU menu;
|
||||
LPMENUITEM lpitem;
|
||||
int i;
|
||||
#ifdef DEBUG_MENU
|
||||
printf("EnableMenuItem (%04X, %04X, %04X) !\n", hMenu, wItemID, wFlags);
|
||||
#endif
|
||||
menu = (LPPOPUPMENU) GlobalLock(hMenu);
|
||||
if (menu == NULL) return FALSE;
|
||||
lpitem = menu->firstItem;
|
||||
for (i = 0; i < menu->nItems; i++) {
|
||||
if (lpitem == NULL) break;
|
||||
if (i == wItemID) {
|
||||
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);
|
||||
GlobalUnlock(hMenu);
|
||||
#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);
|
||||
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;
|
||||
for (i = 0; i < menu->nItems; i++) {
|
||||
if (lpitem == NULL) break;
|
||||
if (i == nPos) {
|
||||
#ifdef DEBUG_MENU
|
||||
printf("GetMenuItemID // Found !\n");
|
||||
#endif
|
||||
return lpitem->item_id;
|
||||
}
|
||||
lpitem = (LPMENUITEM)lpitem->next;
|
||||
}
|
||||
GlobalUnlock(hMenu);
|
||||
return FALSE;
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
|
@ -1309,13 +1396,11 @@ BOOL EnableMenuItem(HMENU hMenu, WORD wItemID, WORD wFlags)
|
|||
*/
|
||||
BOOL InsertMenu(HMENU hMenu, WORD nPos, WORD wFlags, WORD wItemID, LPSTR lpNewItem)
|
||||
{
|
||||
WND *wndPtr;
|
||||
LPPOPUPMENU menu;
|
||||
HANDLE hNewItem;
|
||||
LPMENUITEM lpitem, lpitem2;
|
||||
int i;
|
||||
#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",
|
||||
hMenu, wFlags, wItemID, lpNewItem);
|
||||
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)
|
||||
{
|
||||
WND *wndPtr;
|
||||
LPPOPUPMENU menu;
|
||||
HANDLE hNewItem;
|
||||
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)
|
||||
{
|
||||
WND *wndPtr;
|
||||
LPPOPUPMENU menu;
|
||||
LPMENUITEM lpitem;
|
||||
int i;
|
||||
|
@ -1521,11 +1604,14 @@ BOOL DeleteMenu(HMENU hMenu, WORD nPos, WORD wFlags)
|
|||
*/
|
||||
BOOL ModifyMenu(HMENU hMenu, WORD nPos, WORD wFlags, WORD wItemID, LPSTR lpNewItem)
|
||||
{
|
||||
WND *wndPtr;
|
||||
LPPOPUPMENU menu;
|
||||
LPMENUITEM lpitem;
|
||||
int i;
|
||||
#ifdef DEBUG_MENU
|
||||
if ((wFlags & (MF_BITMAP | MF_SEPARATOR | MF_MENUBREAK | MF_OWNERDRAW)) == 0)
|
||||
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
|
||||
|
@ -1593,6 +1679,9 @@ HMENU CreatePopupMenu()
|
|||
menu->Width = 100;
|
||||
menu->Height = 0;
|
||||
GlobalUnlock(hMenu);
|
||||
#ifdef DEBUG_MENU
|
||||
printf("CreatePopupMenu // return %04X\n", hMenu);
|
||||
#endif
|
||||
return hMenu;
|
||||
}
|
||||
|
||||
|
@ -1692,7 +1781,6 @@ BOOL ActivateMenuBarFocus(HWND hWnd)
|
|||
|
||||
BOOL MenuFocusLoop(HWND hWnd, LPPOPUPMENU lpmenu)
|
||||
{
|
||||
WND *wndPtr;
|
||||
MSG msg;
|
||||
#ifdef DEBUG_MENU
|
||||
printf("Enter in Menu Focus Loop !\n");
|
||||
|
@ -1808,8 +1896,7 @@ void NC_TrackSysMenu(HWND hWnd)
|
|||
DWORD GetMenuCheckMarkDimensions()
|
||||
{
|
||||
BITMAP bm;
|
||||
if (hStdCheck == (HBITMAP)NULL)
|
||||
hStdCheck = LoadBitmap((HANDLE)NULL, (LPSTR)OBM_CHECK);
|
||||
InitStdBitmaps();
|
||||
GetObject(hStdCheck, sizeof(BITMAP), (LPSTR)&bm);
|
||||
return MAKELONG(bm.bmWidth, bm.bmHeight);
|
||||
}
|
||||
|
@ -1821,7 +1908,6 @@ DWORD GetMenuCheckMarkDimensions()
|
|||
BOOL SetMenuItemBitmaps(HMENU hMenu, WORD nPos, WORD wFlags,
|
||||
HBITMAP hNewCheck, HBITMAP hNewUnCheck)
|
||||
{
|
||||
WND *wndPtr;
|
||||
LPPOPUPMENU menu;
|
||||
LPMENUITEM lpitem;
|
||||
int i;
|
||||
|
@ -1856,7 +1942,7 @@ HMENU CreateMenu()
|
|||
HMENU hMenu;
|
||||
LPPOPUPMENU menu;
|
||||
#ifdef DEBUG_MENU
|
||||
printf("CreatePopupMenu !\n");
|
||||
printf("CreateMenu !\n");
|
||||
#endif
|
||||
hMenu = GlobalAlloc(GMEM_MOVEABLE, sizeof(POPUPMENU));
|
||||
menu = (LPPOPUPMENU) GlobalLock(hMenu);
|
||||
|
@ -1877,6 +1963,9 @@ HMENU CreateMenu()
|
|||
menu->Width = 100;
|
||||
menu->Height = 0;
|
||||
GlobalUnlock(hMenu);
|
||||
#ifdef DEBUG_MENU
|
||||
printf("CreateMenu // return %04X\n", hMenu);
|
||||
#endif
|
||||
return hMenu;
|
||||
}
|
||||
|
||||
|
@ -1983,7 +2072,10 @@ HMENU GetMenu(HWND hWnd)
|
|||
*/
|
||||
BOOL SetMenu(HWND hWnd, HMENU hMenu)
|
||||
{
|
||||
RECT rect;
|
||||
LPPOPUPMENU lpmenu;
|
||||
NCCALCSIZE_PARAMS *params;
|
||||
HANDLE hparams;
|
||||
WND * wndPtr = WIN_FindWndPtr(hWnd);
|
||||
if (wndPtr == NULL) {
|
||||
printf("SetMenu(%04X, %04X) // Bad window handle !\n", hWnd, hMenu);
|
||||
|
@ -1992,7 +2084,22 @@ BOOL SetMenu(HWND hWnd, HMENU hMenu)
|
|||
#ifdef DEBUG_MENU
|
||||
printf("SetMenu(%04X, %04X);\n", hWnd, hMenu);
|
||||
#endif
|
||||
if (GetCapture() == hWnd) ReleaseCapture();
|
||||
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);
|
||||
if (lpmenu == NULL) {
|
||||
printf("SetMenu(%04X, %04X) // Bad menu handle !\n", hWnd, hMenu);
|
||||
|
@ -2000,7 +2107,6 @@ BOOL SetMenu(HWND hWnd, HMENU hMenu)
|
|||
}
|
||||
lpmenu->ownerWnd = hWnd;
|
||||
ResetHiliteFlags(lpmenu);
|
||||
if (GetCapture() == hWnd) ReleaseCapture();
|
||||
GlobalUnlock(hMenu);
|
||||
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)
|
||||
*/
|
||||
|
|
|
@ -16,6 +16,8 @@ DLLOBJS = \
|
|||
dll_shell.o \
|
||||
dll_sound.o \
|
||||
dll_stress.o \
|
||||
dll_system.o \
|
||||
dll_toolhelp.o \
|
||||
dll_unixlib.o \
|
||||
dll_user.o \
|
||||
dll_win87em.o \
|
||||
|
@ -39,6 +41,8 @@ MakeDllFromSpec(shell,$(TOP)/$(MODULE))
|
|||
MakeDllFromSpec(mmsystem,$(TOP)/$(MODULE))
|
||||
MakeDllFromSpec(sound,$(TOP)/$(MODULE))
|
||||
MakeDllFromSpec(stress,$(TOP)/$(MODULE))
|
||||
MakeDllFromSpec(system,$(TOP)/$(MODULE))
|
||||
MakeDllFromSpec(toolhelp,$(TOP)/$(MODULE))
|
||||
MakeDllFromSpec(unixlib,$(TOP)/$(MODULE))
|
||||
MakeDllFromSpec(user,$(TOP)/$(MODULE))
|
||||
MakeDllFromSpec(win87em,$(TOP)/$(MODULE))
|
||||
|
|
|
@ -85,7 +85,7 @@ length 490
|
|||
68 pascal DeleteDC(word) DeleteDC(1)
|
||||
69 pascal DeleteObject(word) DeleteObject(1)
|
||||
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)
|
||||
73 pascal ExcludeVisRect(word s_word s_word s_word s_word)
|
||||
ExcludeVisRect(1 2 3 4 5)
|
||||
|
@ -136,8 +136,8 @@ length 490
|
|||
129 pascal SaveVisRgn(word) SaveVisRgn(1)
|
||||
130 pascal RestoreVisRgn(word) RestoreVisRgn(1)
|
||||
131 pascal InquireVisRgn(word) InquireVisRgn(1)
|
||||
#132 pascal SetEnvironment
|
||||
#133 pascal GetEnvironment
|
||||
132 pascal SetEnvironment(ptr ptr word) SetEnvironment(1 2 3)
|
||||
133 pascal GetEnvironment(ptr ptr word) GetEnvironment(1 2 3)
|
||||
134 pascal GetRgnBox(word ptr) GetRgnBox(1 2)
|
||||
#135 pascal ScanLr
|
||||
#136 pascal RemoveFontResource
|
||||
|
@ -276,7 +276,7 @@ length 490
|
|||
CreatePolyPolygonRgn(1 2 3 4)
|
||||
#452 pascal GDISEEGDIDO
|
||||
#460 pascal GDITASKTERMINATION
|
||||
#461 pascal SETOBJECTOWNER
|
||||
461 pascal SetObjectOwner(word) SetObjectOwner(1)
|
||||
#462 pascal ISGDIOBJECT
|
||||
#463 pascal MAKEOBJECTPRIVATE
|
||||
#464 pascal FIXUPBOGUSPUBLISHERMETAFILE
|
||||
|
|
|
@ -67,8 +67,33 @@ length 706
|
|||
509 pascal WAVEINSTART(word) waveInStart(1)
|
||||
510 pascal WAVEINSTOP(word) waveInStop(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)
|
||||
701 pascal MCISENDCOMMAND(word word long long) mciSendCommand(1 2 3 4)
|
||||
702 pascal MCISENDSTRING(ptr ptr word word) mciSendString(1 2 3 4)
|
||||
703 pascal MCIGETDEVICEID(ptr) mciSendCommand(1)
|
||||
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 N_BUILTINS 11
|
||||
|
||||
struct dll_name_table_entry_s dll_builtin_table[N_BUILTINS] =
|
||||
{
|
||||
{ "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 },
|
||||
{ "STRESS", STRESS_table, 15, 10},
|
||||
{ "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;
|
||||
|
||||
|
@ -220,7 +221,7 @@ FindDLLTable(char *dll_name)
|
|||
int 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 NULL;
|
||||
|
|
|
@ -163,8 +163,8 @@ length 540
|
|||
158 pascal SetMenu(word word) SetMenu(1 2)
|
||||
159 pascal GetSubMenu(word word) GetSubMenu(1 2)
|
||||
160 pascal DrawMenuBar(word) DrawMenuBar(1)
|
||||
#161 GETMENUSTRING
|
||||
#162 HILITEMENUITEM
|
||||
161 pascal GetMenuString(word word ptr s_word word) GetMenuString(1 2 3 4 5)
|
||||
162 pascal HiliteMenuItem(word word word word) HiliteMenuItem(1 2 3 4)
|
||||
163 pascal CreateCaret(word word word word) CreateCaret(1 2 3 4)
|
||||
164 pascal DestroyCaret() DestroyCaret()
|
||||
165 pascal SetCaretPos(word word) SetCaretPos(1 2)
|
||||
|
@ -272,8 +272,8 @@ length 540
|
|||
#260 DEFERWINDOWPOS
|
||||
#261 ENDDEFERWINDOWPOS
|
||||
262 pascal GetWindow(word word) GetWindow(1 2)
|
||||
#263 GETMENUITEMCOUNT
|
||||
#264 GETMENUITEMID
|
||||
263 pascal GetMenuItemCount(word) GetMenuItemCount(1)
|
||||
264 pascal GetMenuItemID(word word) GetMenuItemID(1 2)
|
||||
#265 SHOWOWNEDPOPUPS
|
||||
266 pascal SetMessageQueue(word) SetMessageQueue(1)
|
||||
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 WINSOCK_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 */
|
||||
|
|
|
@ -301,8 +301,6 @@ extern BOOL GDI_FreeObject( HANDLE );
|
|||
extern GDIOBJHDR * GDI_GetObjPtr( HANDLE, WORD );
|
||||
|
||||
extern Display * XT_display; /* Will be removed */
|
||||
extern Screen * XT_screen; /* Will be removed */
|
||||
|
||||
extern Display * display;
|
||||
extern Screen * screen;
|
||||
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,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,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,IntersectClipRect,HDC,a,short,b,short,c,short,d,short,e)
|
||||
Fe(int,IntersectVisRect,HDC,a,short,b,short,c,short,d,short,e)
|
||||
|
|
126
loader/library.c
126
loader/library.c
|
@ -35,9 +35,9 @@ typedef MODULEENTRY *LPMODULEENTRY;
|
|||
static LPMODULEENTRY lpModList = NULL;
|
||||
|
||||
extern struct w_files * wine_files;
|
||||
#define N_BUILTINS 11
|
||||
extern struct dll_name_table_entry_s dll_builtin_table[N_BUILTINS];
|
||||
extern struct dll_name_table_entry_s dll_builtin_table[];
|
||||
|
||||
#define IS_BUILTIN_DLL(handle) ((handle >> 16) == 0xff)
|
||||
|
||||
/**********************************************************************
|
||||
* GetModuleHandle [KERNEL.47]
|
||||
|
@ -50,7 +50,7 @@ HANDLE GetModuleHandle(LPSTR lpModuleName)
|
|||
printf("GetModuleHandle // searching in loaded modules\n");
|
||||
while (w) {
|
||||
/* printf("GetModuleHandle // '%s' \n", w->name); */
|
||||
if (strcmp(w->name, lpModuleName) == 0) {
|
||||
if (strcasecmp(w->name, lpModuleName) == 0) {
|
||||
printf("GetModuleHandle('%s') return %04X \n",
|
||||
lpModuleName, w->hinstance);
|
||||
return w->hinstance;
|
||||
|
@ -60,7 +60,7 @@ HANDLE GetModuleHandle(LPSTR lpModuleName)
|
|||
printf("GetModuleHandle // searching in builtin libraries\n");
|
||||
for (i = 0; i < N_BUILTINS; i++) {
|
||||
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",
|
||||
lpModuleName, 0xFF00 + i);
|
||||
return (0xFF00 + i);
|
||||
|
@ -91,16 +91,29 @@ int GetModuleFileName(HANDLE hModule, LPSTR lpFileName, short nSize)
|
|||
{
|
||||
struct w_files *w;
|
||||
LPSTR str;
|
||||
char windir[256], temp[256];
|
||||
|
||||
printf("GetModuleFileName(%04X, %08X, %d);\n", hModule, lpFileName, nSize);
|
||||
|
||||
if (lpFileName == NULL) return 0;
|
||||
if (nSize < 1) return 0;
|
||||
w = GetFileInfo(hModule);
|
||||
if (w == NULL) return 0;
|
||||
str = w->filename;
|
||||
if (str[0] == '/') str++;
|
||||
|
||||
/* built-in dll ? */
|
||||
if (IS_BUILTIN_DLL(hModule)) {
|
||||
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;
|
||||
strncpy(lpFileName, str, nSize);
|
||||
ToDos(lpFileName);
|
||||
printf("GetModuleFileName copied '%s' return %d \n", lpFileName, nSize);
|
||||
return nSize - 1;
|
||||
}
|
||||
|
@ -114,14 +127,31 @@ HANDLE LoadLibrary(LPSTR libname)
|
|||
HANDLE hModule;
|
||||
LPMODULEENTRY lpMod = lpModList;
|
||||
LPMODULEENTRY lpNewMod;
|
||||
|
||||
if (FindDLLTable(libname))
|
||||
{
|
||||
printf("Library was a builtin - returning 0x23\n");
|
||||
return WINE_CODE_SELECTOR;
|
||||
}
|
||||
int i;
|
||||
char temp[64];
|
||||
|
||||
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)
|
||||
{
|
||||
while (TRUE)
|
||||
|
@ -176,7 +206,13 @@ HANDLE LoadLibrary(LPSTR libname)
|
|||
void FreeLibrary(HANDLE hLib)
|
||||
{
|
||||
LPMODULEENTRY lpMod = lpModList;
|
||||
|
||||
printf("FreeLibrary(%04X);\n", hLib);
|
||||
|
||||
/* built-in dll ? */
|
||||
if (IS_BUILTIN_DLL(hLib))
|
||||
return;
|
||||
|
||||
while (lpMod != NULL) {
|
||||
if (lpMod->hInst == hLib) {
|
||||
if (lpMod->Count == 1) {
|
||||
|
@ -201,31 +237,49 @@ void FreeLibrary(HANDLE hLib)
|
|||
*/
|
||||
FARPROC GetProcAddress(HANDLE hModule, char *proc_name)
|
||||
{
|
||||
WORD wOrdin;
|
||||
int sel, addr, ret;
|
||||
int i, sel, addr, ret;
|
||||
register struct w_files *w = wine_files;
|
||||
int ordinal, len;
|
||||
char * cpnt;
|
||||
char C[128];
|
||||
HTASK hTask;
|
||||
LPTASKENTRY lpTask;
|
||||
if (hModule >= 0xF000) {
|
||||
if ((int) proc_name & 0xffff0000) {
|
||||
|
||||
/* built-in dll ? */
|
||||
if (IS_BUILTIN_DLL(hModule))
|
||||
{
|
||||
if ((int) proc_name & 0xffff0000)
|
||||
{
|
||||
printf("GetProcAddress: builtin %#04X, '%s'\n",
|
||||
hModule, proc_name);
|
||||
/* wOrdin = FindOrdinalFromName(struct dll_table_entry_s *dll_table, proc_name); */
|
||||
if (GetEntryDLLName(dll_builtin_table[hModule - 0xFF00].dll_name,
|
||||
proc_name, &sel, &addr))
|
||||
{
|
||||
printf("Address not found !\n");
|
||||
}
|
||||
else {
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("GetProcAddress: builtin %#04X, %d\n",
|
||||
hModule, (int)proc_name);
|
||||
if (GetEntryDLLOrdinal(dll_builtin_table[hModule-0xFF00].dll_name,
|
||||
(int)proc_name & 0x0000FFFF, &sel, &addr))
|
||||
{
|
||||
printf("Address not found !\n");
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
if (hModule == 0) {
|
||||
ret = MAKELONG(addr, sel);
|
||||
printf("GetProcAddress // ret=%08X sel=%04X addr=%04X\n",
|
||||
ret, sel, addr);
|
||||
return (FARPROC)ret;
|
||||
}
|
||||
if (hModule == 0)
|
||||
{
|
||||
hTask = GetCurrentTask();
|
||||
printf("GetProcAddress // GetCurrentTask()=%04X\n", hTask);
|
||||
lpTask = (LPTASKENTRY) GlobalLock(hTask);
|
||||
if (lpTask == NULL) {
|
||||
if (lpTask == NULL)
|
||||
{
|
||||
printf("GetProcAddress: can't find current module handle !\n");
|
||||
return NULL;
|
||||
}
|
||||
|
@ -234,14 +288,18 @@ FARPROC GetProcAddress(HANDLE hModule, char *proc_name)
|
|||
lpTask->hModule, lpTask->hInst);
|
||||
GlobalUnlock(hTask);
|
||||
}
|
||||
while (w && w->hinstance != hModule) w = w->next;
|
||||
if (w == NULL) return NULL;
|
||||
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) {
|
||||
if ((int)proc_name & 0xFFFF0000)
|
||||
{
|
||||
AnsiUpper(proc_name);
|
||||
printf("GetProcAddress: %04X, '%s'\n", hModule, proc_name);
|
||||
cpnt = w->nrname_table;
|
||||
while(TRUE) {
|
||||
while(TRUE)
|
||||
{
|
||||
if (((int) cpnt) - ((int)w->nrname_table) >
|
||||
w->ne_header->nrname_tab_length) return NULL;
|
||||
len = *cpnt++;
|
||||
|
@ -251,23 +309,27 @@ FARPROC GetProcAddress(HANDLE hModule, char *proc_name)
|
|||
printf("pointing Function '%s' ordinal=%d !\n",
|
||||
C, *((unsigned short *)(cpnt + len)));
|
||||
#endif
|
||||
if (strncmp(cpnt, proc_name, len) == 0) {
|
||||
if (strncmp(cpnt, proc_name, len) == 0)
|
||||
{
|
||||
ordinal = *((unsigned short *)(cpnt + len));
|
||||
break;
|
||||
}
|
||||
cpnt += len + 2;
|
||||
};
|
||||
if (ordinal == 0) {
|
||||
if (ordinal == 0)
|
||||
{
|
||||
printf("GetProcAddress // function '%s' not found !\n", proc_name);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
else {
|
||||
else
|
||||
{
|
||||
printf("GetProcAddress: %#04x, %d\n", hModule, (int) proc_name);
|
||||
ordinal = (int)proc_name;
|
||||
}
|
||||
ret = GetEntryPointFromOrdinal(w, ordinal);
|
||||
if (ret == -1) {
|
||||
if (ret == -1)
|
||||
{
|
||||
printf("GetProcAddress // Function #%d not found !\n", ordinal);
|
||||
return NULL;
|
||||
}
|
||||
|
|
|
@ -248,6 +248,43 @@ load_typeinfo (int fd, struct resource_typeinfo_s *typeinfo)
|
|||
return read (fd, typeinfo, sizeof (*typeinfo)) == sizeof (*typeinfo);
|
||||
}
|
||||
#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
|
||||
*/
|
||||
|
@ -281,8 +318,7 @@ FindResourceByNumber(struct resource_nameinfo_s *result_p,
|
|||
/*
|
||||
* Find resource.
|
||||
*/
|
||||
typeinfo.type_id = 0xffff;
|
||||
while (typeinfo.type_id != 0) {
|
||||
for (;;) {
|
||||
if (!load_typeinfo (ResourceFd, &typeinfo)){
|
||||
printf("FindResourceByNumber (%X) bad typeinfo size !\n", resource_id);
|
||||
return -1;
|
||||
|
@ -292,7 +328,8 @@ FindResourceByNumber(struct resource_nameinfo_s *result_p,
|
|||
typeinfo.type_id, typeinfo.count, type_id);
|
||||
#endif
|
||||
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++) {
|
||||
#ifndef WINELIB
|
||||
if (read(ResourceFd, &nameinfo, sizeof(nameinfo)) !=
|
||||
|
@ -306,7 +343,7 @@ FindResourceByNumber(struct resource_nameinfo_s *result_p,
|
|||
}
|
||||
#ifdef DEBUG_RESOURCE
|
||||
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
|
||||
if (nameinfo.id == resource_id) {
|
||||
memcpy(result_p, &nameinfo, sizeof(nameinfo));
|
||||
|
@ -377,8 +414,7 @@ FindResourceByName(struct resource_nameinfo_s *result_p,
|
|||
/*
|
||||
* Find resource.
|
||||
*/
|
||||
typeinfo.type_id = 0xffff;
|
||||
while (typeinfo.type_id != 0)
|
||||
for (;;)
|
||||
{
|
||||
if (!load_typeinfo (ResourceFd, &typeinfo))
|
||||
{
|
||||
|
@ -390,7 +426,7 @@ FindResourceByName(struct resource_nameinfo_s *result_p,
|
|||
typeinfo.type_id, typeinfo.count, type_id);
|
||||
#endif
|
||||
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++)
|
||||
{
|
||||
|
@ -529,6 +565,16 @@ HICON LoadIcon(HANDLE instance, LPSTR icon_name)
|
|||
rgbq[1].rgbGreen = 0x00;
|
||||
rgbq[1].rgbRed = 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,
|
||||
(LPSTR)lp + bih->biSizeImage - sizeof(BITMAPINFOHEADER) / 2 - 4,
|
||||
(BITMAPINFO *)bih, DIB_RGB_COLORS );
|
||||
|
@ -667,6 +713,7 @@ HANDLE FindResource(HANDLE instance, LPSTR resource_name, LPSTR type_name)
|
|||
{
|
||||
RESOURCE *r;
|
||||
HANDLE rh;
|
||||
int type;
|
||||
|
||||
if (instance == 0)
|
||||
return 0;
|
||||
|
@ -688,15 +735,39 @@ HANDLE FindResource(HANDLE instance, LPSTR resource_name, LPSTR type_name)
|
|||
r->info_mem = rh;
|
||||
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,
|
||||
(int) resource_name | 0x8000);
|
||||
type = (int) type_name;
|
||||
}
|
||||
else if (type_name[0] == '\0')
|
||||
{
|
||||
type = -1;
|
||||
}
|
||||
else if (type_name[0] == '#')
|
||||
{
|
||||
type = atoi(type_name + 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
r->size_shift = FindResourceByName(&r->nameinfo, (int)type_name,
|
||||
resource_name);
|
||||
type = (int) type_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)
|
||||
|
@ -906,7 +977,7 @@ LoadString(HANDLE instance, WORD resource_id, LPSTR buffer, int buflen)
|
|||
GlobalFree(hmem);
|
||||
|
||||
#ifdef DEBUG_RESOURCE
|
||||
printf(" '%s'\n", buffer);
|
||||
printf("LoadString // '%s' copied !\n", buffer);
|
||||
#endif
|
||||
return i;
|
||||
}
|
||||
|
|
|
@ -417,7 +417,7 @@ WORD FreeSelector(WORD sel)
|
|||
if (s->shm_key == 0)
|
||||
{
|
||||
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;
|
||||
}
|
||||
else
|
||||
|
@ -432,7 +432,7 @@ WORD FreeSelector(WORD sel)
|
|||
if (alias_count == 1)
|
||||
shmctl(s->shm_key, IPC_RMID, NULL);
|
||||
|
||||
memcpy(s, 0, sizeof(*s));
|
||||
memset(s, 0, sizeof(*s));
|
||||
SelectorMap[sel_idx] = 0;
|
||||
}
|
||||
|
||||
|
@ -457,7 +457,7 @@ WORD FreeSelector(WORD sel)
|
|||
{
|
||||
s = &Segments[sel_idx];
|
||||
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;
|
||||
}
|
||||
#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
|
||||
* 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;
|
||||
|
||||
if (i + 1 == ne_header->ss)
|
||||
{
|
||||
s->length += ne_header->stack_length;
|
||||
ne_header->sp = s->length;
|
||||
}
|
||||
s->length = 0x10000;
|
||||
ne_header->sp = s->length - 2;
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -132,6 +132,11 @@ static void win_fault(int signal, int code, struct sigcontext *scp)
|
|||
goto oops;
|
||||
break;
|
||||
|
||||
case 0x2f:
|
||||
if (!do_int2f(scp))
|
||||
goto oops;
|
||||
break;
|
||||
|
||||
default:
|
||||
fprintf(stderr,"Unexpected Windows interrupt %x\n", *instr);
|
||||
goto oops;
|
||||
|
|
|
@ -790,5 +790,6 @@ DWORD GetFreeSpace(UINT wFlags)
|
|||
if (free_map[i] == 1)
|
||||
total_free++;
|
||||
|
||||
printf("GetFreeSpace // return %ld !\n", total_free << 16);
|
||||
return total_free << 16;
|
||||
}
|
||||
|
|
|
@ -171,7 +171,7 @@ HCURSOR LoadCursor(HANDLE instance, LPSTR cursor_name)
|
|||
ReleaseDC(GetDesktopWindow(), hdc);
|
||||
return 0;
|
||||
}
|
||||
(char *)lp += 2;
|
||||
lp++;
|
||||
for (j = 0; j < 16; j++)
|
||||
printf("%04X ", *(lp + j));
|
||||
/*
|
||||
|
|
|
@ -273,7 +273,7 @@ void ToDos(char *s)
|
|||
*s++ = toupper(*p);
|
||||
else {
|
||||
*s++ = '\\';
|
||||
if (*s == '/' || *s == '\\')
|
||||
if (*(p+1) == '/' || *(p+1) == '\\')
|
||||
p++;
|
||||
}
|
||||
}
|
||||
|
@ -390,6 +390,26 @@ char *GetUnixFileName(char *dosfilename)
|
|||
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)
|
||||
{
|
||||
/* should return 'WINDOWS\SYSTEM' */
|
||||
|
@ -734,11 +754,7 @@ struct dosdirent *DOS_readdir(struct dosdirent *de)
|
|||
|
||||
do {
|
||||
if ((d = readdir(de->ds)) == NULL)
|
||||
{
|
||||
closedir(de->ds);
|
||||
de->inuse = 0;
|
||||
return de;
|
||||
}
|
||||
return NULL;
|
||||
|
||||
strcpy(de->filename, d->d_name);
|
||||
if (d->d_reclen > 12)
|
||||
|
@ -765,7 +781,7 @@ struct dosdirent *DOS_readdir(struct dosdirent *de)
|
|||
|
||||
void DOS_closedir(struct dosdirent *de)
|
||||
{
|
||||
if (de->inuse)
|
||||
if (de && de->inuse)
|
||||
{
|
||||
closedir(de->ds);
|
||||
de->inuse = 0;
|
||||
|
|
20
misc/lstr.c
20
misc/lstr.c
|
@ -58,19 +58,25 @@ INT lstrlen(LPCSTR str)
|
|||
return strlen(str);
|
||||
}
|
||||
|
||||
|
||||
/* AnsiUpper USER.431 */
|
||||
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 Linux libc locale stuffs works at all */
|
||||
if((int)strOrChar<256)
|
||||
/* if((int)strOrChar<256)
|
||||
return (char FAR*) toupper((int)strOrChar);
|
||||
else {
|
||||
int i;
|
||||
for(i=0;(i<65536)&&strOrChar[i];i++)
|
||||
for(i=0;(i<65536) && strOrChar[i];i++)
|
||||
strOrChar[i]=toupper(strOrChar[i]);
|
||||
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 */
|
||||
|
@ -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 Linux libc locale stuffs works at all */
|
||||
if((int)strOrChar<256)
|
||||
/* if((int)strOrChar<256)
|
||||
return (char FAR*)tolower((int)strOrChar);
|
||||
else {
|
||||
int i;
|
||||
for(i=0;(i<65536)&&strOrChar[i];i++)
|
||||
strOrChar[i]=tolower(strOrChar[i]);
|
||||
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 */
|
||||
|
|
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 */
|
||||
|
||||
LPSTR lpEnvList;
|
||||
|
||||
Display * XT_display; /* To be removed */
|
||||
Screen * XT_screen; /* To be removed */
|
||||
|
||||
Display *display;
|
||||
Screen *screen;
|
||||
|
@ -298,7 +299,6 @@ int main( int argc, char *argv[] )
|
|||
screenWidth = WidthOfScreen( screen );
|
||||
screenHeight = HeightOfScreen( screen );
|
||||
XT_display = display;
|
||||
XT_screen = screen;
|
||||
if (screenDepth) /* -depth option specified */
|
||||
{
|
||||
depth_list = XListDepths(display,DefaultScreen(display),&depth_count);
|
||||
|
@ -359,6 +359,26 @@ LONG GetWinFlags(void)
|
|||
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)
|
||||
*/
|
||||
|
|
|
@ -58,13 +58,15 @@ int MessageBox(HWND hWnd, LPSTR str, LPSTR title, WORD type)
|
|||
if (wndPtr == NULL) {
|
||||
hInst = hSysRes;
|
||||
#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
|
||||
}
|
||||
else {
|
||||
hInst = wndPtr->hInstance;
|
||||
#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
|
||||
}
|
||||
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");
|
||||
hBitMap = LoadBitmap((HINSTANCE)NULL, (LPSTR)str);
|
||||
|
||||
strcpy(str, "PROPOSED_LICENSE");
|
||||
strcpy(str, "LICENSE");
|
||||
printf("str = '%s'\n", str);
|
||||
hFile = OpenFile((LPSTR)str, &ofstruct, OF_READ);
|
||||
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;
|
||||
|
||||
|
||||
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,
|
||||
WORD cbHeapSize, LPSTR lpCmdLine)
|
||||
{
|
||||
|
@ -87,6 +91,7 @@ BOOL mciGetErrorString (DWORD wError, LPSTR lpstrBuffer, UINT uLength)
|
|||
{
|
||||
LPSTR msgptr;
|
||||
int maxbuf;
|
||||
printf("mciGetErrorString(%04X, %08X, %d);\n", wError, lpstrBuffer, uLength);
|
||||
if ((lpstrBuffer == NULL) || (uLength < 1)) return(FALSE);
|
||||
lpstrBuffer[0] = '\0';
|
||||
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)
|
||||
{
|
||||
char str[128];
|
||||
DWORD dwDevTyp = 0;
|
||||
if (lpParms == NULL) return MCIERR_INTERNAL;
|
||||
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;
|
||||
}
|
||||
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;
|
||||
}
|
||||
else
|
||||
if (strcmp(lpParms->lpstrDeviceType, "waveaudio") == 0) {
|
||||
if (strcmp(str, "WAVEAUDIO") == 0) {
|
||||
dwDevTyp = MCI_DEVTYPE_WAVEFORM_AUDIO;
|
||||
}
|
||||
else
|
||||
if (strcmp(lpParms->lpstrDeviceType, "Sequencer") == 0) {
|
||||
if (strcmp(str, "SEQUENCER") == 0) {
|
||||
dwDevTyp = MCI_DEVTYPE_SEQUENCER;
|
||||
}
|
||||
else
|
||||
if (strcmp(lpParms->lpstrDeviceType, "Animation1") == 0) {
|
||||
if (strcmp(str, "ANIMATION1") == 0) {
|
||||
dwDevTyp = MCI_DEVTYPE_ANIMATION;
|
||||
}
|
||||
}
|
||||
|
@ -393,7 +402,8 @@ DWORD mciOpen(UINT wDevID, DWORD dwParam, LPMCI_OPEN_PARMS lpParms)
|
|||
return MCIERR_DEVICE_NOT_INSTALLED;
|
||||
case MCI_DEVTYPE_SEQUENCER:
|
||||
printf("MCI_OPEN // No SEQUENCER yet !\n");
|
||||
return MCIERR_DEVICE_NOT_INSTALLED;
|
||||
break;
|
||||
/* return MCIERR_DEVICE_NOT_INSTALLED; */
|
||||
case MCI_DEVTYPE_ANIMATION:
|
||||
printf("MCI_OPEN // No ANIMATION yet !\n");
|
||||
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)
|
||||
{
|
||||
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)
|
||||
{
|
||||
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)
|
||||
{
|
||||
LPSTR msgptr;
|
||||
|
@ -781,6 +758,9 @@ UINT WINAPI midiInGetDevCaps(UINT uDeviceID,
|
|||
|
||||
|
||||
|
||||
/**************************************************************************
|
||||
* midiInGetErrorText [MMSYSTEM.303]
|
||||
*/
|
||||
UINT WINAPI midiInGetErrorText(UINT uError, LPSTR lpText, UINT uSize)
|
||||
{
|
||||
printf("midiInGetErrorText\n");
|
||||
|
@ -851,35 +831,38 @@ UINT WINAPI midiInStart(HMIDIIN hMidiIn)
|
|||
|
||||
UINT WINAPI midiInStop(HMIDIIN hMidiIn)
|
||||
{
|
||||
printf("midiInStop\n");
|
||||
return 0;
|
||||
printf("midiInStop\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
UINT WINAPI midiInReset(HMIDIIN hMidiIn)
|
||||
{
|
||||
printf("midiInReset\n");
|
||||
return 0;
|
||||
printf("midiInReset\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
UINT WINAPI waveOutGetNumDevs()
|
||||
{
|
||||
printf("waveOutGetNumDevs\n");
|
||||
return 0;
|
||||
printf("waveOutGetNumDevs\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
UINT WINAPI waveOutGetDevCaps(UINT uDeviceID, WAVEOUTCAPS FAR* lpCaps, UINT uSize)
|
||||
{
|
||||
printf("waveOutGetDevCaps\n");
|
||||
return 0;
|
||||
printf("waveOutGetDevCaps\n");
|
||||
return MMSYSERR_INVALHANDLE;
|
||||
}
|
||||
|
||||
|
||||
/**************************************************************************
|
||||
* waveOutGetErrorText [MMSYSTEM.403]
|
||||
*/
|
||||
UINT WINAPI waveOutGetErrorText(UINT uError, LPSTR lpText, UINT uSize)
|
||||
{
|
||||
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)
|
||||
{
|
||||
LPSTR msgptr;
|
||||
|
@ -957,17 +943,17 @@ UINT WINAPI waveGetErrorText(UINT uError, LPSTR lpText, UINT uSize)
|
|||
UINT WINAPI waveOutOpen(HWAVEOUT FAR* lphWaveOut, UINT uDeviceID,
|
||||
const WAVEFORMAT FAR* lpFormat, DWORD dwCallback, DWORD dwInstance, DWORD dwFlags)
|
||||
{
|
||||
printf("waveOutOpen\n");
|
||||
if (lphWaveOut != NULL) *lphWaveOut = 0;
|
||||
return 0;
|
||||
printf("waveOutOpen\n");
|
||||
if (lphWaveOut != NULL) *lphWaveOut = 0;
|
||||
return MMSYSERR_BADDEVICEID;
|
||||
}
|
||||
|
||||
|
||||
|
||||
UINT WINAPI waveOutClose(HWAVEOUT hWaveOut)
|
||||
{
|
||||
printf("waveOutClose\n");
|
||||
return 0;
|
||||
printf("waveOutClose\n");
|
||||
return MMSYSERR_INVALHANDLE;
|
||||
}
|
||||
|
||||
|
||||
|
@ -975,8 +961,8 @@ return 0;
|
|||
UINT WINAPI waveOutPrepareHeader(HWAVEOUT hWaveOut,
|
||||
WAVEHDR FAR* lpWaveOutHdr, UINT uSize)
|
||||
{
|
||||
printf("waveOutPrepareHeader\n");
|
||||
return 0;
|
||||
printf("waveOutPrepareHeader\n");
|
||||
return MMSYSERR_INVALHANDLE;
|
||||
}
|
||||
|
||||
|
||||
|
@ -984,99 +970,99 @@ return 0;
|
|||
UINT WINAPI waveOutUnprepareHeader(HWAVEOUT hWaveOut,
|
||||
WAVEHDR FAR* lpWaveOutHdr, UINT uSize)
|
||||
{
|
||||
printf("waveOutUnprepareHeader\n");
|
||||
return 0;
|
||||
printf("waveOutUnprepareHeader\n");
|
||||
return MMSYSERR_INVALHANDLE;
|
||||
}
|
||||
|
||||
|
||||
|
||||
UINT WINAPI waveOutWrite(HWAVEOUT hWaveOut, WAVEHDR FAR* lpWaveOutHdr, UINT uSize)
|
||||
{
|
||||
printf("waveOutWrite\n");
|
||||
return 0;
|
||||
printf("waveOutWrite\n");
|
||||
return MMSYSERR_INVALHANDLE;
|
||||
}
|
||||
|
||||
|
||||
UINT WINAPI waveOutPause(HWAVEOUT hWaveOut)
|
||||
{
|
||||
printf("waveOutPause\n");
|
||||
return 0;
|
||||
printf("waveOutPause\n");
|
||||
return MMSYSERR_INVALHANDLE;
|
||||
}
|
||||
|
||||
|
||||
UINT WINAPI waveOutRestart(HWAVEOUT hWaveOut)
|
||||
{
|
||||
printf("waveOutRestart\n");
|
||||
return 0;
|
||||
printf("waveOutRestart\n");
|
||||
return MMSYSERR_INVALHANDLE;
|
||||
}
|
||||
|
||||
|
||||
UINT WINAPI waveOutReset(HWAVEOUT hWaveOut)
|
||||
{
|
||||
printf("waveOutReset\n");
|
||||
return 0;
|
||||
printf("waveOutReset\n");
|
||||
return MMSYSERR_INVALHANDLE;
|
||||
}
|
||||
|
||||
|
||||
|
||||
UINT WINAPI waveOutGetPosition(HWAVEOUT hWaveOut, MMTIME FAR* lpInfo, UINT uSize)
|
||||
{
|
||||
printf("waveOutGetPosition\n");
|
||||
return 0;
|
||||
printf("waveOutGetPosition\n");
|
||||
return MMSYSERR_INVALHANDLE;
|
||||
}
|
||||
|
||||
|
||||
|
||||
UINT WINAPI waveOutGetVolume(UINT uDeviceID, DWORD FAR* lpdwVolume)
|
||||
{
|
||||
printf("waveOutGetVolume\n");
|
||||
return 0;
|
||||
printf("waveOutGetVolume\n");
|
||||
return MMSYSERR_INVALHANDLE;
|
||||
}
|
||||
|
||||
|
||||
UINT WINAPI waveOutSetVolume(UINT uDeviceID, DWORD dwVolume)
|
||||
{
|
||||
printf("waveOutSetVolume\n");
|
||||
return 0;
|
||||
printf("waveOutSetVolume\n");
|
||||
return MMSYSERR_INVALHANDLE;
|
||||
}
|
||||
|
||||
|
||||
|
||||
UINT WINAPI waveOutGetID(HWAVEOUT hWaveOut, UINT FAR* lpuDeviceID)
|
||||
{
|
||||
printf("waveOutGetID\n");
|
||||
return 0;
|
||||
printf("waveOutGetID\n");
|
||||
return MMSYSERR_INVALHANDLE;
|
||||
}
|
||||
|
||||
|
||||
|
||||
UINT WINAPI waveOutGetPitch(HWAVEOUT hWaveOut, DWORD FAR* lpdwPitch)
|
||||
{
|
||||
printf("waveOutGetPitch\n");
|
||||
return 0;
|
||||
printf("waveOutGetPitch\n");
|
||||
return MMSYSERR_INVALHANDLE;
|
||||
}
|
||||
|
||||
|
||||
|
||||
UINT WINAPI waveOutSetPitch(HWAVEOUT hWaveOut, DWORD dwPitch)
|
||||
{
|
||||
printf("waveOutSetPitch\n");
|
||||
return 0;
|
||||
printf("waveOutSetPitch\n");
|
||||
return MMSYSERR_INVALHANDLE;
|
||||
}
|
||||
|
||||
|
||||
UINT WINAPI waveOutGetPlaybackRate(HWAVEOUT hWaveOut, DWORD FAR* lpdwRate)
|
||||
{
|
||||
printf("waveOutGetPlaybackRate\n");
|
||||
return 0;
|
||||
printf("waveOutGetPlaybackRate\n");
|
||||
return MMSYSERR_INVALHANDLE;
|
||||
}
|
||||
|
||||
|
||||
|
||||
UINT WINAPI waveOutSetPlaybackRate(HWAVEOUT hWaveOut, DWORD dwRate)
|
||||
{
|
||||
printf("waveOutSetPlaybackRate\n");
|
||||
return 0;
|
||||
printf("waveOutSetPlaybackRate\n");
|
||||
return MMSYSERR_INVALHANDLE;
|
||||
}
|
||||
|
||||
|
||||
|
@ -1084,26 +1070,29 @@ return 0;
|
|||
|
||||
UINT WINAPI waveOutBreakLoop(HWAVEOUT hWaveOut)
|
||||
{
|
||||
printf("waveOutBreakLoop\n");
|
||||
return 0;
|
||||
printf("waveOutBreakLoop\n");
|
||||
return MMSYSERR_INVALHANDLE;
|
||||
}
|
||||
|
||||
|
||||
|
||||
UINT WINAPI waveInGetNumDevs()
|
||||
{
|
||||
printf("waveInGetNumDevs\n");
|
||||
return 0;
|
||||
/* printf("waveInGetNumDevs\n"); */
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
UINT WINAPI waveInGetDevCaps(UINT uDeviceID, WAVEINCAPS FAR* lpCaps, UINT uSize)
|
||||
{
|
||||
printf("waveInGetDevCaps\n");
|
||||
return 0;
|
||||
printf("waveInGetDevCaps\n");
|
||||
return MMSYSERR_INVALHANDLE;
|
||||
}
|
||||
|
||||
|
||||
/**************************************************************************
|
||||
* waveInGetErrorText [MMSYSTEM.503]
|
||||
*/
|
||||
UINT WINAPI waveInGetErrorText(UINT uError, LPSTR lpText, UINT uSize)
|
||||
{
|
||||
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,
|
||||
const WAVEFORMAT FAR* lpFormat, DWORD dwCallback, DWORD dwInstance, DWORD dwFlags)
|
||||
{
|
||||
printf("waveInOpen\n");
|
||||
if (lphWaveIn != NULL) *lphWaveIn = 0;
|
||||
return 0;
|
||||
printf("waveInOpen\n");
|
||||
if (lphWaveIn != NULL) *lphWaveIn = 0;
|
||||
return MMSYSERR_BADDEVICEID;
|
||||
}
|
||||
|
||||
|
||||
/**************************************************************************
|
||||
* waveInClose [MMSYSTEM.505]
|
||||
*/
|
||||
UINT WINAPI waveInClose(HWAVEIN hWaveIn)
|
||||
{
|
||||
printf("waveInClose\n");
|
||||
return 0;
|
||||
printf("waveInClose\n");
|
||||
return MMSYSERR_INVALHANDLE;
|
||||
}
|
||||
|
||||
|
||||
/**************************************************************************
|
||||
* waveInPrepareHeader [MMSYSTEM.506]
|
||||
*/
|
||||
UINT WINAPI waveInPrepareHeader(HWAVEIN hWaveIn,
|
||||
WAVEHDR FAR* lpWaveInHdr, UINT uSize)
|
||||
{
|
||||
printf("waveInPrepareHeader\n");
|
||||
return 0;
|
||||
printf("waveInPrepareHeader\n");
|
||||
return MMSYSERR_INVALHANDLE;
|
||||
}
|
||||
|
||||
|
||||
/**************************************************************************
|
||||
* waveInUnprepareHeader [MMSYSTEM.507]
|
||||
*/
|
||||
UINT WINAPI waveInUnprepareHeader(HWAVEIN hWaveIn,
|
||||
WAVEHDR FAR* lpWaveInHdr, UINT uSize)
|
||||
{
|
||||
printf("waveInUnprepareHeader\n");
|
||||
return 0;
|
||||
printf("waveInUnprepareHeader\n");
|
||||
return MMSYSERR_INVALHANDLE;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**************************************************************************
|
||||
* waveInAddBuffer [MMSYSTEM.508]
|
||||
*/
|
||||
UINT WINAPI waveInAddBuffer(HWAVEIN hWaveIn,
|
||||
WAVEHDR FAR* lpWaveInHdr, UINT uSize)
|
||||
{
|
||||
printf("waveInAddBuffer\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
UINT WINAPI waveInReset(HWAVEIN hWaveIn)
|
||||
{
|
||||
printf("waveInReset\n");
|
||||
return 0;
|
||||
printf("waveInAddBuffer\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/**************************************************************************
|
||||
* waveInStart [MMSYSTEM.509]
|
||||
*/
|
||||
UINT WINAPI waveInStart(HWAVEIN hWaveIn)
|
||||
{
|
||||
printf("waveInStart\n");
|
||||
return 0;
|
||||
printf("waveInStart\n");
|
||||
return MMSYSERR_INVALHANDLE;
|
||||
}
|
||||
|
||||
|
||||
/**************************************************************************
|
||||
* waveInStop [MMSYSTEM.510]
|
||||
*/
|
||||
UINT WINAPI waveInStop(HWAVEIN hWaveIn)
|
||||
{
|
||||
printf("waveInStop\n");
|
||||
return 0;
|
||||
printf("waveInStop\n");
|
||||
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)
|
||||
{
|
||||
printf("waveInGetPosition\n");
|
||||
return 0;
|
||||
printf("waveInGetPosition\n");
|
||||
return MMSYSERR_INVALHANDLE;
|
||||
}
|
||||
|
||||
|
||||
/**************************************************************************
|
||||
* waveInGetID [MMSYSTEM.513]
|
||||
*/
|
||||
UINT WINAPI waveInGetID(HWAVEIN hWaveIn, UINT FAR* lpuDeviceID)
|
||||
{
|
||||
printf("waveInGetID\n");
|
||||
return 0;
|
||||
printf("waveInGetID\n");
|
||||
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,
|
||||
LPCSTR lpstrType);
|
||||
|
||||
|
@ -1201,8 +1298,6 @@ YIELDPROC WINAPI mciGetYieldProc (UINT uDeviceID, DWORD FAR* lpdwYieldData);
|
|||
FOURCC WINAPI mmioStringToFOURCC(LPCSTR sz, UINT uFlags);
|
||||
LPMMIOPROC WINAPI mmioInstallIOProc(FOURCC fccIOProc, LPMMIOPROC pIOProc,
|
||||
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 uFlags);
|
||||
UINT WINAPI mmioFlush(HMMIO hmmio, UINT uFlags);
|
||||
|
|
|
@ -43,11 +43,15 @@ HANDLE RemoveProp(HWND hWnd, LPSTR lpStr)
|
|||
return FALSE;
|
||||
}
|
||||
lpProp = (LPPROPENTRY) GlobalLock(wndPtr->hProp);
|
||||
if (lpProp == NULL) return 0;
|
||||
if (lpProp == NULL) {
|
||||
printf("Property List Empty !\n");
|
||||
return 0;
|
||||
}
|
||||
while (TRUE) {
|
||||
if ((((DWORD)lpStr & 0xFFFF0000) == 0L &&
|
||||
lpProp->Atom == LOWORD((DWORD)lpStr)) ||
|
||||
(((DWORD)lpStr & 0xFFFF0000) != 0L &&
|
||||
lpProp->PropName != NULL &&
|
||||
strcmp(lpProp->PropName, lpStr) == 0)) {
|
||||
printf("RemoveProp // Property found ! hData=%04X\n", lpProp->hData);
|
||||
hOldData = lpProp->hData;
|
||||
|
@ -90,11 +94,15 @@ HANDLE GetProp(HWND hWnd, LPSTR lpStr)
|
|||
return 0;
|
||||
}
|
||||
lpProp = (LPPROPENTRY) GlobalLock(wndPtr->hProp);
|
||||
if (lpProp == NULL) return 0;
|
||||
if (lpProp == NULL) {
|
||||
printf("Property List Empty !\n");
|
||||
return 0;
|
||||
}
|
||||
while (TRUE) {
|
||||
if ((((DWORD)lpStr & 0xFFFF0000) == 0L &&
|
||||
lpProp->Atom == LOWORD((DWORD)lpStr)) ||
|
||||
(((DWORD)lpStr & 0xFFFF0000) != 0L &&
|
||||
lpProp->PropName != NULL &&
|
||||
strcmp(lpProp->PropName, lpStr) == 0)) {
|
||||
printf("GetProp // Property found ! hData=%04X\n", lpProp->hData);
|
||||
GlobalUnlock(wndPtr->hProp);
|
||||
|
@ -136,6 +144,7 @@ BOOL SetProp(HWND hWnd, LPSTR lpStr, HANDLE hData)
|
|||
if ((((DWORD)lpStr & 0xFFFF0000) == 0L &&
|
||||
lpProp->Atom == LOWORD((DWORD)lpStr)) ||
|
||||
(((DWORD)lpStr & 0xFFFF0000) != 0L &&
|
||||
lpProp->PropName != NULL &&
|
||||
strcmp(lpProp->PropName, lpStr) == 0)) {
|
||||
#ifdef DEBUG_PROP
|
||||
printf("SetProp // change already exinsting property !\n");
|
||||
|
@ -177,7 +186,7 @@ BOOL SetProp(HWND hWnd, LPSTR lpStr, HANDLE hData)
|
|||
}
|
||||
else {
|
||||
lpNewProp->Atom = 0;
|
||||
lpNewProp->PropName = malloc(strlen(lpStr));
|
||||
lpNewProp->PropName = malloc(strlen(lpStr) + 1);
|
||||
if (lpNewProp->PropName == NULL) {
|
||||
printf("SetProp // Can't allocate memory for Property Name !\n");
|
||||
GlobalUnlock(wndPtr->hProp);
|
||||
|
@ -207,7 +216,10 @@ int EnumProps(HWND hWnd, FARPROC lpEnumFunc)
|
|||
return 0;
|
||||
}
|
||||
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;
|
||||
while (TRUE) {
|
||||
printf("EnumProps // lpProp->Atom=%04X !\n", lpProp->Atom);
|
||||
|
|
|
@ -9,6 +9,7 @@ SRCS = \
|
|||
int21.c \
|
||||
int25.c \
|
||||
int26.c \
|
||||
int2f.c \
|
||||
ioports.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 <stdio.h>
|
||||
#include "prototypes.h"
|
||||
|
@ -19,9 +16,9 @@ int
|
|||
WIN87_fpmath()
|
||||
{
|
||||
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:
|
||||
return 1;
|
||||
|
|
|
@ -709,7 +709,6 @@ static void FindNext(struct sigcontext_struct *context)
|
|||
|
||||
do {
|
||||
if ((dp = DOS_readdir(dp)) == NULL) {
|
||||
DOS_closedir(dp);
|
||||
Error(NoMoreFiles, EC_MediaError , EL_Disk);
|
||||
EAX = (EAX & 0xffffff00L) | NoMoreFiles;
|
||||
SetCflag;
|
||||
|
@ -1026,7 +1025,6 @@ static void DeleteFileFCB(struct sigcontext_struct *context)
|
|||
fprintf(stderr, "int21: delete file %s\n", temp);
|
||||
/* unlink(GetUnixFileName(temp)); */
|
||||
}
|
||||
|
||||
DOS_closedir(dp);
|
||||
EAX = (EAX & 0xffffff00L);
|
||||
}
|
||||
|
@ -1072,7 +1070,6 @@ static void RenameFileFCB(struct sigcontext_struct *context)
|
|||
strcpy(newnameptr, fcb + 1);
|
||||
fprintf(stderr, "int21: renamefile %s -> %s\n", oldname, newname);
|
||||
}
|
||||
|
||||
DOS_closedir(dp);
|
||||
EAX = (EAX & 0xffffff00L);
|
||||
}
|
||||
|
|
|
@ -61,7 +61,7 @@ static XImage *BITMAP_BmpToImage( BITMAP * bmp, void * bmpData )
|
|||
extern void _XInitImageFuncPtrs( XImage* );
|
||||
XImage * image;
|
||||
|
||||
image = XCreateImage( XT_display, DefaultVisualOfScreen(XT_screen),
|
||||
image = XCreateImage( XT_display, DefaultVisualOfScreen(screen),
|
||||
bmp->bmBitsPixel, ZPixmap, 0, bmpData,
|
||||
bmp->bmWidth, bmp->bmHeight, 16, bmp->bmWidthBytes );
|
||||
if (!image) return 0;
|
||||
|
|
279
objects/font.c
279
objects/font.c
|
@ -13,6 +13,8 @@ static char Copyright[] = "Copyright Alexandre Julliard, 1993";
|
|||
#include "user.h"
|
||||
#include "gdi.h"
|
||||
|
||||
#define MAX_FONTS 256
|
||||
static LPLOGFONT lpLogFontList[MAX_FONTS] = { NULL };
|
||||
|
||||
/***********************************************************************
|
||||
* FONT_MatchFont
|
||||
|
@ -45,28 +47,29 @@ static XFontStruct * FONT_MatchFont( LOGFONT * font )
|
|||
case FF_DECORATIVE: family = "*"; break;
|
||||
default: family = "*"; break;
|
||||
}
|
||||
AnsiLower(family);
|
||||
|
||||
while (TRUE) {
|
||||
/* Width==0 seems not to be a valid wildcard on SGI's, using * instead */
|
||||
if ( width == 0 )
|
||||
sprintf( pattern, "-*-%s-%s-%c-normal--*-%d-*-*-%c-*-%s",
|
||||
family, weight, slant, height, spacing, charset
|
||||
);
|
||||
family, weight, slant, height, spacing, charset);
|
||||
else
|
||||
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
|
||||
printf( "FONT_MatchFont: '%s'\n", pattern );
|
||||
#endif
|
||||
names = XListFonts( XT_display, pattern, 1, &count );
|
||||
if (!count)
|
||||
{
|
||||
if (count > 0) break;
|
||||
height -= 10;
|
||||
if (height < 10) {
|
||||
#ifdef DEBUG_FONT
|
||||
printf( " No matching font found\n" );
|
||||
#endif
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
#ifdef DEBUG_FONT
|
||||
printf( " Found '%s'\n", *names );
|
||||
#endif
|
||||
|
@ -134,6 +137,9 @@ HFONT CreateFontIndirect( LOGFONT * font )
|
|||
if (!hfont) return 0;
|
||||
fontPtr = (FONTOBJ *) GDI_HEAP_ADDR( hfont );
|
||||
memcpy( &fontPtr->logfont, font, sizeof(LOGFONT) );
|
||||
#ifdef DEBUG_FONT
|
||||
printf("CreateFontIndirect(%08X); return %04X !\n", font, hfont);
|
||||
#endif
|
||||
return hfont;
|
||||
}
|
||||
|
||||
|
@ -173,7 +179,9 @@ HFONT FONT_SelectObject( DC * dc, HFONT hfont, FONTOBJ * font )
|
|||
X_PHYSFONT * stockPtr;
|
||||
HFONT prevHandle = dc->w.hFont;
|
||||
XFontStruct * fontStruct;
|
||||
|
||||
#ifdef DEBUG_FONT
|
||||
printf("FONT_SelectObject(%04X, %04X, %08X); !\n", dc, hfont, font);
|
||||
#endif
|
||||
/* Load font if necessary */
|
||||
|
||||
if (!font)
|
||||
|
@ -422,6 +430,117 @@ BOOL GetCharWidth(HDC hdc, WORD wFirstChar, WORD wLastChar, LPINT lpBuffer)
|
|||
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]
|
||||
|
@ -430,11 +549,16 @@ int EnumFonts(HDC hDC, LPSTR lpFaceName, FARPROC lpEnumFunc, LPSTR lpData)
|
|||
{
|
||||
HANDLE hLog;
|
||||
HANDLE hMet;
|
||||
HFONT hFont;
|
||||
HFONT hOldFont;
|
||||
LPLOGFONT lpLogFont;
|
||||
LPTEXTMETRIC lptm;
|
||||
LPSTR lpFaceList[MAX_FONTS];
|
||||
char FaceName[LF_FACESIZE];
|
||||
int nRet;
|
||||
printf("EnumFonts(%04X, %08X, %08X, %08X)\n",
|
||||
hDC, lpFaceName, lpEnumFunc, lpData);
|
||||
int j, i = 0;
|
||||
printf("EnumFonts(%04X, %08X='%s', %08X, %08X)\n",
|
||||
hDC, lpFaceName, lpFaceName, lpEnumFunc, lpData);
|
||||
if (lpEnumFunc == NULL) return 0;
|
||||
hLog = USER_HEAP_ALLOC(GMEM_MOVEABLE, sizeof(LOGFONT) + LF_FACESIZE);
|
||||
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");
|
||||
return 0;
|
||||
}
|
||||
if (lpFaceName != NULL) {
|
||||
strcpy(FaceName, lpFaceName);
|
||||
AnsiUpper(FaceName);
|
||||
}
|
||||
if (lpLogFontList[0] == NULL) InitFontsList();
|
||||
memset(lpFaceList, 0, MAX_FONTS * sizeof(LPSTR));
|
||||
while (TRUE) {
|
||||
printf("EnumFonts // !\n");
|
||||
lpLogFont->lfHeight = 18;
|
||||
lpLogFont->lfWidth = 12;
|
||||
lpLogFont->lfEscapement = 0;
|
||||
lpLogFont->lfOrientation = 0;
|
||||
lpLogFont->lfWeight = FW_REGULAR;
|
||||
lpLogFont->lfItalic = 0;
|
||||
lpLogFont->lfUnderline = 0;
|
||||
lpLogFont->lfStrikeOut = 0;
|
||||
lpLogFont->lfCharSet = ANSI_CHARSET;
|
||||
lpLogFont->lfOutPrecision = OUT_DEFAULT_PRECIS;
|
||||
lpLogFont->lfClipPrecision = CLIP_DEFAULT_PRECIS;
|
||||
lpLogFont->lfQuality = DEFAULT_QUALITY;
|
||||
lpLogFont->lfPitchAndFamily = FIXED_PITCH | FF_MODERN;
|
||||
strcpy(lpLogFont->lfFaceName, "Courier");
|
||||
printf("lpLogFont=%08X lptm=%08X\n", lpLogFont, lptm);
|
||||
if (lpLogFontList[i] == NULL) break;
|
||||
if (lpFaceName == NULL) {
|
||||
for (j = 0; j < MAX_FONTS; j++) {
|
||||
if (lpFaceList[j] == NULL) break;
|
||||
if (strcmp(lpFaceList[j], lpLogFontList[i]->lfFaceName) == 0) {
|
||||
i++; j = 0;
|
||||
}
|
||||
}
|
||||
if (lpLogFontList[i] == NULL) break;
|
||||
lpFaceList[j] = lpLogFontList[i]->lfFaceName;
|
||||
printf("EnumFonts // enum all 'lpFaceName' '%s' !\n", lpFaceList[j]);
|
||||
}
|
||||
else {
|
||||
while(lpLogFontList[i] != NULL) {
|
||||
if (strcmp(FaceName, lpLogFontList[i]->lfFaceName) == 0) break;
|
||||
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
|
||||
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;
|
||||
lpLogFont->lfPitchAndFamily = VARIABLE_PITCH | FF_SWISS;
|
||||
strcpy(lpLogFont->lfFaceName, "Helvetica");
|
||||
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;
|
||||
if (nRet == 0) {
|
||||
printf("EnumFonts // EnumEnd requested by application !\n");
|
||||
break;
|
||||
}
|
||||
}
|
||||
USER_HEAP_FREE(hMet);
|
||||
USER_HEAP_FREE(hLog);
|
||||
|
@ -498,9 +630,14 @@ int EnumFontFamilies(HDC hDC, LPSTR lpszFamily, FARPROC lpEnumFunc, LPSTR lpData
|
|||
{
|
||||
HANDLE hLog;
|
||||
HANDLE hMet;
|
||||
HFONT hFont;
|
||||
HFONT hOldFont;
|
||||
LPLOGFONT lpLogFont;
|
||||
LPTEXTMETRIC lptm;
|
||||
LPSTR lpFaceList[MAX_FONTS];
|
||||
char FaceName[LF_FACESIZE];
|
||||
int nRet;
|
||||
int j, i = 0;
|
||||
printf("EnumFontFamilies(%04X, %08X, %08X, %08X)\n",
|
||||
hDC, lpszFamily, lpEnumFunc, lpData);
|
||||
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");
|
||||
return 0;
|
||||
}
|
||||
if (lpszFamily != NULL) {
|
||||
strcpy(FaceName, lpszFamily);
|
||||
AnsiUpper(FaceName);
|
||||
}
|
||||
if (lpLogFontList[0] == NULL) InitFontsList();
|
||||
memset(lpFaceList, 0, MAX_FONTS * sizeof(LPSTR));
|
||||
while (TRUE) {
|
||||
printf("EnumFontFamilies // !\n");
|
||||
lpLogFont->lfHeight = 12;
|
||||
lpLogFont->lfWidth = 8;
|
||||
lpLogFont->lfEscapement = 0;
|
||||
lpLogFont->lfOrientation = 0;
|
||||
lpLogFont->lfWeight = FW_REGULAR;
|
||||
lpLogFont->lfItalic = 0;
|
||||
lpLogFont->lfUnderline = 0;
|
||||
lpLogFont->lfStrikeOut = 0;
|
||||
lpLogFont->lfCharSet = ANSI_CHARSET;
|
||||
lpLogFont->lfOutPrecision = OUT_DEFAULT_PRECIS;
|
||||
lpLogFont->lfClipPrecision = CLIP_DEFAULT_PRECIS;
|
||||
lpLogFont->lfQuality = DEFAULT_QUALITY;
|
||||
lpLogFont->lfPitchAndFamily = FIXED_PITCH | FF_MODERN;
|
||||
strcpy(lpLogFont->lfFaceName, "Courier");
|
||||
/* lpLogFont->lfFullName[LF_FACESIZE] = 12;
|
||||
lpLogFont->lfStyle[LF_FACESIZE] = 12; */
|
||||
printf("lpLogFont=%08X lptm=%08X\n", lpLogFont, lptm);
|
||||
if (lpLogFontList[i] == NULL) break;
|
||||
if (lpszFamily == NULL) {
|
||||
for (j = 0; j < MAX_FONTS; j++) {
|
||||
if (lpFaceList[j] == NULL) break;
|
||||
if (strcmp(lpFaceList[j], lpLogFontList[i]->lfFaceName) == 0) {
|
||||
i++; j = 0;
|
||||
}
|
||||
}
|
||||
if (lpLogFontList[i] == NULL) break;
|
||||
lpFaceList[j] = lpLogFontList[i]->lfFaceName;
|
||||
printf("EnumFontFamilies // enum all 'lpszFamily' '%s' !\n", lpFaceList[j]);
|
||||
}
|
||||
else {
|
||||
while(lpLogFontList[i] != NULL) {
|
||||
if (strcmp(FaceName, lpLogFontList[i]->lfFaceName) == 0) break;
|
||||
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("EnumFontFamilies // i=%d lpLogFont=%08X lptm=%08X\n", i, 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;
|
||||
lpLogFont->lfPitchAndFamily = VARIABLE_PITCH | FF_SWISS;
|
||||
strcpy(lpLogFont->lfFaceName, "Helvetica");
|
||||
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;
|
||||
if (nRet == 0) {
|
||||
printf("EnumFontFamilies // EnumEnd requested by application !\n");
|
||||
break;
|
||||
}
|
||||
}
|
||||
USER_HEAP_FREE(hMet);
|
||||
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 <stdio.h>
|
||||
#include "user.h"
|
||||
#include "gdi.h"
|
||||
#include "prototypes.h"
|
||||
|
||||
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 */
|
||||
|
||||
/***********************************************************************
|
||||
|
@ -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
|
||||
*
|
||||
|
@ -212,6 +250,9 @@ HANDLE GDI_AllocObject( WORD size, WORD magic )
|
|||
obj->hNext = 0;
|
||||
obj->wMagic = magic;
|
||||
obj->dwCount = ++count;
|
||||
if (magic == PEN_MAGIC || magic == BRUSH_MAGIC) {
|
||||
GDI_AppendToPenBrushList(handle);
|
||||
}
|
||||
return handle;
|
||||
}
|
||||
|
||||
|
@ -389,3 +430,136 @@ BOOL UnrealizeObject( HANDLE handle )
|
|||
#endif
|
||||
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,
|
||||
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);
|
||||
return FALSE;
|
||||
}
|
||||
|
|
|
@ -156,7 +156,7 @@ HWND CreateDialogParam( HINSTANCE hInst, LPCSTR dlgTemplate,
|
|||
LPCSTR data;
|
||||
|
||||
#ifdef DEBUG_DIALOG
|
||||
printf( "CreateDialogParam: %d,'%s',%d,%p,%d\n",
|
||||
printf( "CreateDialogParam: %d,'%x',%d,%p,%d\n",
|
||||
hInst, dlgTemplate, owner, dlgProc, param );
|
||||
#endif
|
||||
|
||||
|
@ -381,7 +381,7 @@ int DialogBoxParam( HINSTANCE hInst, LPCSTR dlgTemplate,
|
|||
HWND hwnd;
|
||||
|
||||
#ifdef DEBUG_DIALOG
|
||||
printf( "DialogBoxParam: %d,'%s',%d,%p,%d\n",
|
||||
printf( "DialogBoxParam: %d,'%x',%d,%p,%d\n",
|
||||
hInst, dlgTemplate, owner, dlgProc, param );
|
||||
#endif
|
||||
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 );
|
||||
/* Process key message */
|
||||
/* .... */
|
||||
SendMessage( msg->hwnd, msg->message, msg->wParam, msg->lParam );
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
|
|
@ -35,7 +35,7 @@ BOOL LineTo( HDC hdc, short x, short y )
|
|||
}
|
||||
|
||||
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.DCOrgY + YLPTODP( dc, dc->w.CursPosY ),
|
||||
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;
|
||||
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,
|
||||
right-left-1, bottom-top-1,
|
||||
(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].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 );
|
||||
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 (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,
|
||||
right-left-1, bottom-top-1, 0, 360*64 );
|
||||
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,
|
||||
right-left-1, bottom-top-1, 0, 360*64 );
|
||||
return TRUE;
|
||||
|
@ -253,11 +253,11 @@ BOOL Rectangle( HDC hdc, int left, int top, int right, int bottom )
|
|||
bottom = YLPTODP( dc, bottom );
|
||||
|
||||
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,
|
||||
right-left-1, bottom-top-1 );
|
||||
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,
|
||||
right-left-1, bottom-top-1 );
|
||||
return TRUE;
|
||||
|
@ -289,41 +289,41 @@ BOOL RoundRect( HDC hDC, short left, short top, short right, short bottom,
|
|||
x2 = XLPTODP(dc, right - ell_width);
|
||||
y2 = YLPTODP(dc, bottom - ell_height);
|
||||
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,
|
||||
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,
|
||||
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,
|
||||
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,
|
||||
ell_width, ell_height, 0, 90 * 64);
|
||||
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,
|
||||
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,
|
||||
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,
|
||||
ell_width, bottom - top - 2 * ell_height);
|
||||
ell_width *= 2; ell_height *= 2;
|
||||
}
|
||||
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,
|
||||
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,
|
||||
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,
|
||||
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,
|
||||
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 );
|
||||
GetPaletteEntries( dc->w.hPalette, pixel, 1, &entry );
|
||||
|
||||
XSetForeground( XT_display, dc->u.x.gc, pixel );
|
||||
XSetFunction( XT_display, dc->u.x.gc, GXcopy );
|
||||
XDrawPoint( XT_display, dc->u.x.drawable, dc->u.x.gc, x, y );
|
||||
XSetForeground( display, dc->u.x.gc, pixel );
|
||||
XSetFunction( display, dc->u.x.gc, GXcopy );
|
||||
XDrawPoint( display, dc->u.x.drawable, dc->u.x.gc, x, y );
|
||||
|
||||
return RGB( entry.peRed, entry.peGreen, entry.peBlue );
|
||||
}
|
||||
|
@ -450,13 +450,13 @@ COLORREF GetPixel( HDC hdc, short x, short y )
|
|||
{
|
||||
XWindowAttributes win_attr;
|
||||
|
||||
if (!XGetWindowAttributes( XT_display, dc->u.x.drawable, &win_attr ))
|
||||
if (!XGetWindowAttributes( display, dc->u.x.drawable, &win_attr ))
|
||||
return 0;
|
||||
if (win_attr.map_state != IsViewable) 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 );
|
||||
GetPaletteEntries( dc->w.hPalette, XGetPixel( image, 0, 0 ), 1, &entry );
|
||||
XDestroyImage( image );
|
||||
|
@ -494,7 +494,7 @@ BOOL PaintRgn( HDC hdc, HRGN hrgn )
|
|||
|
||||
GetClipBox( hdc, &box );
|
||||
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,
|
||||
box.right-box.left, box.bottom-box.top );
|
||||
|
||||
|
@ -541,7 +541,7 @@ void DrawFocusRect( HDC hdc, LPRECT rc )
|
|||
oldBkMode = SetBkMode(hdc, TRANSPARENT);
|
||||
|
||||
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,
|
||||
right-left-1, bottom-top-1 );
|
||||
|
||||
|
@ -601,12 +601,12 @@ BOOL Polyline (HDC hdc, LPPOINT pt, int count)
|
|||
if (DC_SetupGCForPen( dc ))
|
||||
{
|
||||
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.DCOrgY + YLPTODP(dc, pt [i].y),
|
||||
dc->w.DCOrgX + XLPTODP(dc, pt [i+1].x),
|
||||
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.DCOrgY + YLPTODP(dc, pt [count-1].y),
|
||||
dc->w.DCOrgX + XLPTODP(dc, pt [0].x),
|
||||
|
@ -644,12 +644,12 @@ BOOL Polygon (HDC hdc, LPPOINT pt, int count)
|
|||
}
|
||||
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);
|
||||
|
||||
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 );
|
||||
}
|
||||
}
|
||||
|
|
|
@ -16,6 +16,7 @@ static char Copyright[] = "Copyright Alexandre Julliard, 1994";
|
|||
#include "syscolor.h"
|
||||
|
||||
static HBITMAP hbitmapClose = 0;
|
||||
static HBITMAP hbitmapMDIClose = 0;
|
||||
static HBITMAP hbitmapMinimize = 0;
|
||||
static HBITMAP hbitmapMinimizeD = 0;
|
||||
static HBITMAP hbitmapMaximize = 0;
|
||||
|
@ -287,10 +288,14 @@ LONG NC_HandleNCHitTest( HWND hwnd, POINT pt )
|
|||
static void NC_DrawSysButton( HWND hwnd, HDC hdc, BOOL down )
|
||||
{
|
||||
RECT rect;
|
||||
WND *wndPtr = WIN_FindWndPtr( hwnd );
|
||||
HDC hdcMem = CreateCompatibleDC( hdc );
|
||||
if (hdcMem)
|
||||
{
|
||||
NC_GetInsideRect( hwnd, &rect );
|
||||
if (wndPtr->dwStyle & WS_CHILD)
|
||||
SelectObject( hdcMem, hbitmapMDIClose );
|
||||
else
|
||||
SelectObject( hdcMem, hbitmapClose );
|
||||
BitBlt( hdc, rect.left, rect.top, SYSMETRICS_CXSIZE,
|
||||
SYSMETRICS_CYSIZE, hdcMem, 1, 1, down ? NOTSRCCOPY : SRCCOPY );
|
||||
|
@ -457,6 +462,8 @@ static void NC_DrawCaption( HDC hdc, RECT *rect, HWND hwnd,
|
|||
{
|
||||
if (!(hbitmapClose = LoadBitmap( 0, MAKEINTRESOURCE(OBM_CLOSE) )))
|
||||
return;
|
||||
if (!(hbitmapMDIClose = LoadBitmap( 0, MAKEINTRESOURCE(OBM_OLD_CLOSE) )))
|
||||
return;
|
||||
hbitmapMinimize = LoadBitmap( 0, MAKEINTRESOURCE(OBM_REDUCE) );
|
||||
hbitmapMinimizeD = LoadBitmap( 0, MAKEINTRESOURCE(OBM_REDUCED) );
|
||||
hbitmapMaximize = LoadBitmap( 0, MAKEINTRESOURCE(OBM_ZOOM) );
|
||||
|
|
|
@ -285,113 +285,72 @@ char *UTILITY_convertArgs(char *format, char *winarg)
|
|||
#ifndef WINELIB
|
||||
INT windows_wsprintf(BYTE *win_stack)
|
||||
{
|
||||
LPSTR lpOutput, lpFormat;
|
||||
BYTE *new_stack, *stack_ptr, *ptr;
|
||||
int stacklength, result;
|
||||
LPSTR lpOutput, lpFormat, ptr;
|
||||
BYTE new_stack[1024], *stack_ptr;
|
||||
|
||||
lpOutput = (LPSTR) *(DWORD*)win_stack;
|
||||
win_stack += 4;
|
||||
lpFormat = (LPSTR) *(DWORD*)win_stack;
|
||||
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() */
|
||||
|
||||
new_stack = malloc(2 * stacklength);
|
||||
stack_ptr = new_stack + 2 * stacklength;
|
||||
win_stack += stacklength;
|
||||
ptr = lpFormat;
|
||||
do {
|
||||
if (*ptr++ != '%')
|
||||
for (ptr = lpFormat, stack_ptr = new_stack; *ptr; ptr++) {
|
||||
if (*ptr != '%' || *++ptr == '%')
|
||||
continue;
|
||||
|
||||
/* skip width/precision */
|
||||
while ( *ptr == '-' || *ptr == '+' || *ptr == '.' ||
|
||||
while (*ptr == '-' || *ptr == '+' || *ptr == '.' ||
|
||||
*ptr == ' ' || isdigit(*ptr))
|
||||
ptr++;
|
||||
|
||||
switch(*ptr++) {
|
||||
switch (*ptr++) {
|
||||
case 's':
|
||||
stack_ptr -= 4;
|
||||
win_stack -= 4;
|
||||
*(DWORD*)stack_ptr = *(DWORD*)win_stack;
|
||||
continue;
|
||||
stack_ptr += 4;
|
||||
win_stack += 4;
|
||||
break;
|
||||
case 'l':
|
||||
stack_ptr -= 4;
|
||||
win_stack -= 4;
|
||||
*(DWORD*)stack_ptr = *(DWORD*)win_stack;
|
||||
stack_ptr += 4;
|
||||
win_stack += 4;
|
||||
ptr++; /* skip next type character */
|
||||
continue;
|
||||
break;
|
||||
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 */
|
||||
|
||||
if (*(WORD*)win_stack)
|
||||
*(DWORD*)stack_ptr = *(WORD*)win_stack;
|
||||
else
|
||||
*(DWORD*)stack_ptr = 1;
|
||||
continue;
|
||||
*(DWORD*)stack_ptr = ' ';
|
||||
stack_ptr += 4;
|
||||
win_stack += 2;
|
||||
break;
|
||||
case 'd':
|
||||
case 'i':
|
||||
stack_ptr -= 4;
|
||||
win_stack -= 2;
|
||||
*(int*)stack_ptr = *(INT*)win_stack;
|
||||
continue;
|
||||
stack_ptr += 4;
|
||||
win_stack += 2;
|
||||
break;
|
||||
case 'u':
|
||||
case 'x':
|
||||
case 'X':
|
||||
stack_ptr -= 4;
|
||||
win_stack -= 2;
|
||||
*(DWORD*)stack_ptr = *(WORD*)win_stack;
|
||||
continue;
|
||||
stack_ptr += 4;
|
||||
win_stack += 2;
|
||||
break;
|
||||
default:
|
||||
stack_ptr -= 4;
|
||||
win_stack -= 4;
|
||||
*(DWORD*)stack_ptr = 0;
|
||||
stack_ptr += 4;
|
||||
win_stack += 4;
|
||||
fprintf(stderr, "wsprintf: oops, unknown formattype %c used!\n", *ptr);
|
||||
break;
|
||||
}
|
||||
}
|
||||
} while (*ptr);
|
||||
|
||||
result = vsprintf(lpOutput, lpFormat, stack_ptr);
|
||||
free(new_stack);
|
||||
|
||||
return result;
|
||||
return vsprintf(lpOutput, lpFormat, new_stack);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
|
@ -444,6 +444,9 @@ HWND CreateWindowEx( DWORD exStyle, LPSTR className, LPSTR windowName,
|
|||
WIN_SendParentNotify( hwnd, WM_CREATE, MAKELONG( hwnd, wndPtr->wIDmenu ) );
|
||||
|
||||
if (style & WS_VISIBLE) ShowWindow( hwnd, SW_SHOW );
|
||||
#ifdef DEBUG_WIN
|
||||
printf( "CreateWindowEx: return %04X \n", hwnd);
|
||||
#endif
|
||||
return hwnd;
|
||||
}
|
||||
|
||||
|
|
|
@ -230,7 +230,7 @@ BOOL ShowWindow( HWND hwnd, int cmd )
|
|||
int swpflags = 0;
|
||||
|
||||
#ifdef DEBUG_WIN
|
||||
printf("ShowWindow: hwnd=%d, cmd=%d\n", hwnd, cmd);
|
||||
printf("ShowWindow: hwnd=%04X, cmd=%d\n", hwnd, cmd);
|
||||
#endif
|
||||
|
||||
if (!wndPtr) return FALSE;
|
||||
|
@ -456,7 +456,7 @@ BOOL SetWindowPos( HWND hwnd, HWND hwndInsertAfter, short x, short y,
|
|||
int changeMask = 0;
|
||||
|
||||
#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 );
|
||||
#endif
|
||||
|
||||
|
@ -592,10 +592,14 @@ BOOL SetWindowPos( HWND hwnd, HWND hwndInsertAfter, short x, short y,
|
|||
}
|
||||
changeMask |= CWStackMode;
|
||||
}
|
||||
if ((newWindowRect.right - newWindowRect.left) != 0 &&
|
||||
(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;
|
||||
XMapWindow( display, wndPtr->window );
|
||||
|
|
Loading…
Reference in New Issue