diff --git a/ANNOUNCE b/ANNOUNCE index 10dc576107c..1c03369ef75 100644 --- a/ANNOUNCE +++ b/ANNOUNCE @@ -1,13 +1,13 @@ -This is release 970215 of Wine, the MS Windows emulator. This is still a +This is release 970305 of Wine, the MS Windows emulator. This is still a developer's only release. There are many bugs and many unimplemented API features. Most applications still do not work correctly. Patches should be submitted to "julliard@lrc.epfl.ch". Please don't forget to include a ChangeLog entry. -WHAT'S NEW with Wine-970215: (see ChangeLog for details) - - Many more Win32 functions. - - Hungarian language support. +WHAT'S NEW with Wine-970305: (see ChangeLog for details) + - Completed transition to new Win32 types. + - Polish language support. - Lots of bug fixes. See the README file in the distribution for installation instructions. @@ -16,10 +16,10 @@ Because of lags created by using mirror, this message may reach you before the release is available at the ftp sites. The sources will be available from the following locations: - ftp://sunsite.unc.edu/pub/Linux/ALPHA/wine/development/Wine-970215.tar.gz - ftp://tsx-11.mit.edu/pub/linux/ALPHA/Wine/development/Wine-970215.tar.gz - ftp://ftp.infomagic.com/pub/mirrors/linux/wine/development/Wine-970215.tar.gz - ftp://aris.com/pub/linux/ALPHA/Wine/development/Wine-970215.tar.gz + ftp://sunsite.unc.edu/pub/Linux/ALPHA/wine/development/Wine-970305.tar.gz + ftp://tsx-11.mit.edu/pub/linux/ALPHA/Wine/development/Wine-970305.tar.gz + ftp://ftp.infomagic.com/pub/mirrors/linux/wine/development/Wine-970305.tar.gz + ftp://aris.com/pub/linux/ALPHA/Wine/development/Wine-970305.tar.gz It should also be available from any site that mirrors tsx-11 or sunsite. diff --git a/ChangeLog b/ChangeLog index 2b492bfd557..3a722b6c536 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,103 @@ +---------------------------------------------------------------------- +Sun Mar 2 14:57:37 1997 Alexandre Julliard + + * [*/*] + Completed transition to new Win32 types. + + * [tools/build.c] + Changed CallTo16_regs to take a CONTEXT argument. + + * [memory/virtual.c] + Rewrote Virtual* functions. Implemented CreateFileMapping and + OpenFileMapping. Broke MapViewOfFile ;-) + + * [win32/k32obj.c] + Implemented named objects. + +Sun Mar 2 00:33:21 1997 Mikolaj Zalewski + + * [misc/ole2nls.c] [resources/sysres_Pl.c] + Added Polish language support. + +Sat Mar 1 13:31:25 1997 David Faure + + * [windows/keyboard.c] + Wrote VkKeyScan and tested with Winword. Works ok except for dead + chars. + +Fri Feb 28 09:34:03 1997 John Harvey + + * [graphics/win16drv/font.c] [graphics/win16drv/init.c] + [graphics/win16drv/obects.c] + Added start of SelectObject call for printer driver. Write should + now run with the printer driver enabled. + +Wed Feb 26 20:03:32 1997 Marcus Meissner + + * [debugger/*.c] + Re-added a disassembly command (list serves another functionality + now). + + * [loader/pe_resource.c] + Added # support. + + * [misc/ole2nls.c] + GetStringType* added. + + * [objects/color.c] + VGA16 fixes. + + * [windows/class.c] + Look for global widget classes too in GetClassInfo32. + + * [windows/sysmetrics.c] [include/windows.h] + Added Win32 sysmetrics. + +Sat Feb 22 23:56:29 1997 Jukka Iivonen + + * [documentation/languages] + The fourth case updated. + + * [if1632/ntdll.spec] + Added some is* and to* functions. + +Sat Feb 22 23:05:47 1997 Morten Welinder + + * [configure.in] + Add tests for wait4 and waitpid. + + * [loader/signal.c] + Clean up OS-dependent code. I hope I got it right, :-) + + * [tools/wineconf] + Recognise vfat file systems. Ignore floppy drives specified in + /etc/fstab. + + * [files/*] + Fix function names in error messages. + +Sat Feb 22 06:15:13 1997 Pablo Saratxaga + + * [windows/keyboard.c] [windows/message.c] + Support for more latin alphabet dead keys for iso-8859-{1,2,3,4,9} + characters sets. + +Fri Feb 21 20:37:50 1997 Huw D M Davies + + * [controls/edit.c] + Fix incorrect arg order in LOCAL_Alloc() call. + +Fri Feb 21 18:19:17 1997 Andrew Taylor + + * [multimedia/mmsystem.c] [multimedia/mcistring.c] + Fixed bug related to device IDs returned by multimedia + system. Implemented mciGetDeviceID. + +Sat Feb 15 00:58:19 1997 Jimen Ching + + * [debugger/dbg.y] + Do not dereference invalid expressions. + ---------------------------------------------------------------------- Sat Feb 15 11:59:17 1997 Alexandre Julliard diff --git a/configure b/configure index 13740b5b8cf..9ff371b38ba 100755 --- a/configure +++ b/configure @@ -2043,7 +2043,7 @@ echo "$ac_t""$ac_cv_c_dll" 1>&6 fi -for ac_func in memmove tcgetattr usleep +for ac_func in memmove tcgetattr usleep wait4 waitpid do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 echo "configure:2050: checking for $ac_func" >&5 diff --git a/configure.in b/configure.in index 18f803c18a6..185a4641d46 100644 --- a/configure.in +++ b/configure.in @@ -104,7 +104,7 @@ fi dnl **** Check for functions and header files **** -AC_CHECK_FUNCS(memmove tcgetattr usleep) +AC_CHECK_FUNCS(memmove tcgetattr usleep wait4 waitpid) AC_HEADER_STAT() AC_C_CONST() AC_TYPE_SIZE_T() diff --git a/controls/button.c b/controls/button.c index 92759b7225e..205888760d9 100644 --- a/controls/button.c +++ b/controls/button.c @@ -303,9 +303,9 @@ static void PB_Paint( WND *wndPtr, HDC32 hDC, WORD action ) PB_PaintGrayOnGray(hDC,infoPtr->hFont,&rc,wndPtr->text); else { - SetTextColor( hDC, (wndPtr->dwStyle & WS_DISABLED) ? - GetSysColor32(COLOR_GRAYTEXT) : - GetSysColor32(COLOR_BTNTEXT) ); + SetTextColor32( hDC, (wndPtr->dwStyle & WS_DISABLED) ? + GetSysColor32(COLOR_GRAYTEXT) : + GetSysColor32(COLOR_BTNTEXT) ); DrawText32A( hDC, wndPtr->text, -1, &rc, DT_SINGLELINE | DT_CENTER | DT_VCENTER ); /* do we have the focus? */ @@ -338,10 +338,10 @@ static void PB_Paint( WND *wndPtr, HDC32 hDC, WORD action ) void PB_PaintGrayOnGray(HDC32 hDC,HFONT32 hFont,RECT32 *rc,char *text) { - static int Pattern[] = {0xAA,0x55,0xAA,0x55,0xAA,0x55,0xAA,0x55}; - HBITMAP16 hbm = CreateBitmap(8, 8, 1, 1, Pattern); + static const int Pattern[] = {0xAA,0x55,0xAA,0x55,0xAA,0x55,0xAA,0x55}; + HBITMAP32 hbm = CreateBitmap32( 8, 8, 1, 1, Pattern ); HDC32 hdcMem = CreateCompatibleDC32(hDC); - HBITMAP16 hbmMem; + HBITMAP32 hbmMem; HBRUSH16 hBr; RECT32 rect,rc2; @@ -350,7 +350,7 @@ void PB_PaintGrayOnGray(HDC32 hDC,HFONT32 hFont,RECT32 *rc,char *text) rc2=rect; rect.left=(rc->right-rect.right)/2; /* for centering text bitmap */ rect.top=(rc->bottom-rect.bottom)/2; - hbmMem = CreateCompatibleBitmap( hDC,rect.right,rect.bottom); + hbmMem = CreateCompatibleBitmap32( hDC,rect.right,rect.bottom ); SelectObject32( hdcMem, hbmMem); hBr = SelectObject32( hdcMem, CreatePatternBrush32(hbm) ); DeleteObject32( hbm ); @@ -417,7 +417,7 @@ static void CB_Paint( WND *wndPtr, HDC32 hDC, WORD action ) if( textlen && action != ODA_SELECT ) { if (wndPtr->dwStyle & WS_DISABLED) - SetTextColor( hDC, GetSysColor32(COLOR_GRAYTEXT) ); + SetTextColor32( hDC, GetSysColor32(COLOR_GRAYTEXT) ); DrawText16( hDC, wndPtr->text, textlen, &rtext, DT_SINGLELINE | DT_VCENTER ); } @@ -486,7 +486,7 @@ static void GB_Paint( WND *wndPtr, HDC32 hDC, WORD action ) if (!wndPtr->text) return; if (wndPtr->dwStyle & WS_DISABLED) - SetTextColor( hDC, GetSysColor32(COLOR_GRAYTEXT) ); + SetTextColor32( hDC, GetSysColor32(COLOR_GRAYTEXT) ); rc.left += 10; DrawText16( hDC, wndPtr->text, -1, &rc, DT_SINGLELINE | DT_NOCLIP ); } diff --git a/controls/combo.c b/controls/combo.c index 72aca44321f..f8fccf8ce49 100644 --- a/controls/combo.c +++ b/controls/combo.c @@ -38,8 +38,8 @@ #define CBLMM_EDGE 4 /* distance inside box which is same as moving mouse outside box, to trigger scrolling of CBL */ -static BOOL CBCheckSize(HWND16 hwnd); -static BOOL CBLCheckSize(HWND16 hwnd); +static BOOL32 CBCheckSize(HWND16 hwnd); +static BOOL32 CBLCheckSize(HWND16 hwnd); static HBITMAP16 hComboBit = 0; static WORD CBitHeight, CBitWidth; @@ -81,7 +81,7 @@ int CreateComboStruct(HWND16 hwnd, LONG style) return TRUE; } -void ComboUpdateWindow(HWND16 hwnd, LPHEADLIST lphl, LPHEADCOMBO lphc, BOOL repaint) +void ComboUpdateWindow(HWND16 hwnd, LPHEADLIST lphl, LPHEADCOMBO lphc, BOOL32 repaint) { WND *wndPtr = WIN_FindWndPtr(hwnd); @@ -628,7 +628,7 @@ static LRESULT CBShowDropDown(HWND16 hwnd, WPARAM16 wParam, LPARAM lParam) /*********************************************************************** * CBCheckSize */ -static BOOL CBCheckSize(HWND16 hwnd) +static BOOL32 CBCheckSize(HWND16 hwnd) { LPHEADCOMBO lphc = ComboGetStorageHeader(hwnd); LPHEADLIST lphl = ComboGetListHeader(hwnd); @@ -711,7 +711,7 @@ static LRESULT CBCommand(HWND16 hwnd, WPARAM16 wParam, LPARAM lParam) } break; case ID_EDIT: /* update LISTBOX window */ - id=GetWindowWord(hwnd,GWW_ID); + id = GetWindowWord32(hwnd,GWW_ID); switch (HIWORD(lParam)) { case EN_UPDATE:GetWindowText32A(lphc->hWndEdit,buffer,255); @@ -786,7 +786,7 @@ static LRESULT CBGetText(HWND16 hwnd, WPARAM16 wParam, LPARAM lParam) /*********************************************************************** * ComboWndProc */ -LRESULT ComboBoxWndProc(HWND16 hwnd, UINT message, WPARAM16 wParam, LPARAM lParam) +LRESULT ComboBoxWndProc(HWND16 hwnd, UINT16 message, WPARAM16 wParam, LPARAM lParam) { switch(message) { case WM_NCCREATE: return CBNCCreate(hwnd, wParam, lParam); @@ -1165,7 +1165,7 @@ static LRESULT CBLVScroll( HWND16 hwnd, WPARAM16 wParam, LPARAM lParam ) /*********************************************************************** * CBLCheckSize */ -static BOOL CBLCheckSize(HWND16 hwnd) +static BOOL32 CBLCheckSize(HWND16 hwnd) { LPHEADCOMBO lphc = ComboGetStorageHeader(hwnd); LPHEADLIST lphl = ComboGetListHeader(hwnd); @@ -1218,7 +1218,7 @@ static BOOL CBLCheckSize(HWND16 hwnd) /*********************************************************************** * ComboLBoxWndProc */ -LRESULT ComboLBoxWndProc(HWND16 hwnd, UINT message, WPARAM16 wParam, LPARAM lParam) +LRESULT ComboLBoxWndProc(HWND16 hwnd, UINT16 message, WPARAM16 wParam, LPARAM lParam) { switch(message) { case WM_CREATE: return CBLCreate(hwnd, wParam, lParam); diff --git a/controls/desktop.c b/controls/desktop.c index db876a87f22..2466ea7b673 100644 --- a/controls/desktop.c +++ b/controls/desktop.c @@ -4,7 +4,6 @@ * Copyright 1994 Alexandre Julliard */ -#define NO_TRANSITION_TYPES /* This file is Win32-clean */ #include #include #include @@ -91,8 +90,8 @@ static LRESULT DESKTOP_DoEraseBkgnd( HWND32 hwnd, HDC32 hdc, (infoPtr->bitmapSize.cy < rect.bottom)))) { /* Set colors in case pattern is a monochrome bitmap */ - SetBkColor( hdc, RGB(0,0,0) ); - SetTextColor( hdc, GetSysColor32(COLOR_BACKGROUND) ); + SetBkColor32( hdc, RGB(0,0,0) ); + SetTextColor32( hdc, GetSysColor32(COLOR_BACKGROUND) ); FillRect32( hdc, &rect, infoPtr->hbrushPattern ); } @@ -243,7 +242,7 @@ BOOL32 DESKTOP_SetPattern( LPCSTR pattern ) int i; for (i = 0; i < 8; i++) pattern[i] = pat[i] & 0xffff; - hbitmap = CreateBitmap( 8, 8, 1, 1, (LPSTR)pattern ); + hbitmap = CreateBitmap32( 8, 8, 1, 1, (LPSTR)pattern ); infoPtr->hbrushPattern = CreatePatternBrush32( hbitmap ); DeleteObject32( hbitmap ); } diff --git a/controls/edit.c b/controls/edit.c index 8e7b59f056f..3187698a9f8 100644 --- a/controls/edit.c +++ b/controls/edit.c @@ -13,8 +13,6 @@ * */ - -#define NO_TRANSITION_TYPES /* This file is Win32-clean */ #include #include #include @@ -1778,9 +1776,10 @@ static INT32 EDIT_PaintText(WND *wndPtr, HDC32 hdc, INT32 x, INT32 y, INT32 line return 0; BkColor = GetBkColor32(hdc); TextColor = GetTextColor32(hdc); - if (rev) { - SetBkColor(hdc, GetSysColor32(COLOR_HIGHLIGHT)); - SetTextColor(hdc, GetSysColor32(COLOR_HIGHLIGHTTEXT)); + if (rev) + { + SetBkColor32(hdc, GetSysColor32(COLOR_HIGHLIGHT)); + SetTextColor32(hdc, GetSysColor32(COLOR_HIGHLIGHTTEXT)); } text = EDIT_GetPasswordPointer(wndPtr); li = (INT32)EDIT_EM_LineIndex(wndPtr, line, 0); @@ -1788,9 +1787,10 @@ static INT32 EDIT_PaintText(WND *wndPtr, HDC32 hdc, INT32 x, INT32 y, INT32 line ret = (INT32)LOWORD(TabbedTextOut32A(hdc, x, y, text + li + col, count, es->NumTabStops, es->TabStops, -xoff)); free(text); - if (rev) { - SetBkColor(hdc, BkColor); - SetTextColor(hdc, TextColor); + if (rev) + { + SetBkColor32(hdc, BkColor); + SetTextColor32(hdc, TextColor); } return ret; } @@ -1863,7 +1863,7 @@ static void EDIT_SetSel(WND *wndPtr, INT32 ns, INT32 ne) if (EDIT_GetRedraw(wndPtr)) { if (wndPtr->hwndSelf == GetFocus32()) { pos = EDIT_EM_PosFromChar(wndPtr, ne, 0); - SetCaretPos((INT16)LOWORD(pos), (INT16)HIWORD(pos)); + SetCaretPos16((INT16)LOWORD(pos), (INT16)HIWORD(pos)); } ORDER_INT32(s, ns); ORDER_INT32(s, ne); @@ -2137,9 +2137,9 @@ static LRESULT EDIT_EM_GetHandle16(WND *wndPtr, WPARAM32 wParam, LPARAM lParam) } dprintf_edit(stddeb, "edit: EM_GETHANDLE: local heap initialized\n"); } - if (!(newBuf = LOCAL_Alloc(wndPtr->hInstance, - EDIT_WM_GetTextLength(wndPtr, 0, 0) + 1, - LMEM_MOVEABLE))) { + if (!(newBuf = LOCAL_Alloc(wndPtr->hInstance, LMEM_MOVEABLE, + EDIT_WM_GetTextLength(wndPtr, 0, 0) + 1))) + { fprintf(stderr, "edit: EM_GETHANDLE: could not allocate new 16 bit buffer\n"); return 0; } @@ -3122,7 +3122,7 @@ static LRESULT EDIT_WM_Copy(WND *wndPtr, WPARAM32 wParam, LPARAM lParam) GlobalUnlock16(hdst); OpenClipboard32(wndPtr->hwndSelf); EmptyClipboard32(); - SetClipboardData(CF_TEXT, hdst); + SetClipboardData16(CF_TEXT, hdst); CloseClipboard32(); return -1; } @@ -3530,7 +3530,7 @@ static LRESULT EDIT_WM_KillFocus(WND *wndPtr, WPARAM32 wParam, LPARAM lParam) INT32 s; INT32 e; - DestroyCaret(); + DestroyCaret32(); if(!(wndPtr->dwStyle & ES_NOHIDESEL)) { EDIT_EM_GetSel(wndPtr, (WPARAM32)&s, (LPARAM)&e); EDIT_InvalidateText(wndPtr, s, e); @@ -3688,7 +3688,7 @@ static LRESULT EDIT_WM_Paint(WND *wndPtr, WPARAM32 wParam, LPARAM lParam) oldFont = (HFONT32)SelectObject32(hdc, hFont); EDIT_SEND_CTLCOLOR(wndPtr, hdc); if (!IsWindowEnabled32(wndPtr->hwndSelf)) - SetTextColor(hdc, GetSysColor32(COLOR_GRAYTEXT)); + SetTextColor32(hdc, GetSysColor32(COLOR_GRAYTEXT)); GetClipBox32(hdc, &rcRgn); for (i = fv ; i <= MIN(fv + vlc, fv + lc - 1) ; i++ ) { EDIT_GetLineRect(wndPtr, i, 0, -1, &rcLine); @@ -3699,7 +3699,7 @@ static LRESULT EDIT_WM_Paint(WND *wndPtr, WPARAM32 wParam, LPARAM lParam) if (wndPtr->hwndSelf == GetFocus32()) { EDIT_GetSel(wndPtr, NULL, &e); pos = EDIT_EM_PosFromChar(wndPtr, e, 0); - SetCaretPos((INT16)LOWORD(pos), (INT16)HIWORD(pos)); + SetCaretPos16( (INT16)LOWORD(pos), (INT16)HIWORD(pos) ); } EndPaint32(wndPtr->hwndSelf, &ps); return 0; @@ -3717,7 +3717,8 @@ static LRESULT EDIT_WM_Paste(WND *wndPtr, WPARAM32 wParam, LPARAM lParam) LPSTR src; OpenClipboard32(wndPtr->hwndSelf); - if ((hsrc = GetClipboardData(CF_TEXT))) { + if ((hsrc = GetClipboardData16(CF_TEXT))) + { src = (LPSTR)GlobalLock16(hsrc); EDIT_EM_ReplaceSel(wndPtr, (WPARAM32)TRUE, (LPARAM)src); GlobalUnlock16(hsrc); @@ -3753,7 +3754,7 @@ static LRESULT EDIT_WM_SetFocus(WND *wndPtr, WPARAM32 wParam, LPARAM lParam) INT32 e; EDIT_GetSel(wndPtr, &s, &e); - CreateCaret(wndPtr->hwndSelf, 0, 2, EDIT_GetLineHeight(wndPtr)); + CreateCaret32( wndPtr->hwndSelf, 0, 2, EDIT_GetLineHeight(wndPtr) ); EDIT_SetSel(wndPtr, s, e); if(!(wndPtr->dwStyle & ES_NOHIDESEL)) EDIT_InvalidateText(wndPtr, s, e); @@ -3791,8 +3792,9 @@ static LRESULT EDIT_WM_SetFont(WND *wndPtr, WPARAM32 wParam, LPARAM lParam) if ((BOOL32)lParam && EDIT_GetRedraw(wndPtr)) InvalidateRect32( wndPtr->hwndSelf, NULL, TRUE ); if (wndPtr->hwndSelf == GetFocus32()) { - DestroyCaret(); - CreateCaret(wndPtr->hwndSelf, 0, 2, EDIT_GetLineHeight(wndPtr)); + DestroyCaret32(); + CreateCaret32( wndPtr->hwndSelf, 0, + 2, EDIT_GetLineHeight(wndPtr) ); EDIT_SetSel(wndPtr, s, e); ShowCaret32(wndPtr->hwndSelf); } diff --git a/controls/listbox.c b/controls/listbox.c index db00116d3aa..57afcf42446 100644 --- a/controls/listbox.c +++ b/controls/listbox.c @@ -4,7 +4,6 @@ * Copyright 1996 Alexandre Julliard */ -#define NO_TRANSITION_TYPES /* This file is Win32-clean */ #include #include #include "windows.h" @@ -470,16 +469,16 @@ static void LISTBOX_PaintItem( WND *wnd, LB_DESCR *descr, HDC32 hdc, } if (item && item->selected) { - SetBkColor( hdc, GetSysColor32( COLOR_HIGHLIGHT ) ); - SetTextColor( hdc, GetSysColor32( COLOR_HIGHLIGHTTEXT ) ); + SetBkColor32( hdc, GetSysColor32( COLOR_HIGHLIGHT ) ); + SetTextColor32( hdc, GetSysColor32( COLOR_HIGHLIGHTTEXT ) ); } else { - SetBkColor( hdc, GetSysColor32( COLOR_WINDOW ) ); + SetBkColor32( hdc, GetSysColor32( COLOR_WINDOW ) ); if (wnd->dwStyle & WS_DISABLED) - SetTextColor( hdc, GetSysColor32( COLOR_GRAYTEXT ) ); + SetTextColor32( hdc, GetSysColor32( COLOR_GRAYTEXT ) ); else - SetTextColor( hdc, GetSysColor32( COLOR_WINDOWTEXT ) ); + SetTextColor32( hdc, GetSysColor32( COLOR_WINDOWTEXT ) ); } dprintf_listbox( stddeb, "Listbox %04x: painting %d (%s) action=%02x " "rect=%d,%d-%d,%d\n", @@ -856,7 +855,7 @@ static LRESULT LISTBOX_Paint( WND *wnd, LB_DESCR *descr, HDC32 hdc ) if (!IS_OWNERDRAW(descr)) { /* Clear the bottom of the column */ - SetBkColor( hdc, GetSysColor32( COLOR_WINDOW ) ); + SetBkColor32( hdc, GetSysColor32( COLOR_WINDOW ) ); if (rect.top < descr->height) { rect.bottom = descr->height; @@ -881,7 +880,7 @@ static LRESULT LISTBOX_Paint( WND *wnd, LB_DESCR *descr, HDC32 hdc ) if (!IS_OWNERDRAW(descr)) { /* Clear the remainder of the client area */ - SetBkColor( hdc, GetSysColor32( COLOR_WINDOW ) ); + SetBkColor32( hdc, GetSysColor32( COLOR_WINDOW ) ); if (rect.top < descr->height) { rect.bottom = descr->height; diff --git a/controls/menu.c b/controls/menu.c index 6f0c0717bb1..29d073c81d1 100644 --- a/controls/menu.c +++ b/controls/menu.c @@ -11,7 +11,6 @@ * This is probably not the meaning this style has in MS-Windows. */ -#define NO_TRANSITION_TYPES /* This file is Win32-clean */ #include #include #include @@ -600,18 +599,18 @@ static void MENU_DrawMenuItem( HWND32 hwnd, HDC32 hdc, MENUITEM *lpitem, if (lpitem->item_flags & MF_HILITE) { if (lpitem->item_flags & MF_GRAYED) - SetTextColor( hdc, GetSysColor32( COLOR_GRAYTEXT ) ); + SetTextColor32( hdc, GetSysColor32( COLOR_GRAYTEXT ) ); else - SetTextColor( hdc, GetSysColor32( COLOR_HIGHLIGHTTEXT ) ); - SetBkColor( hdc, GetSysColor32( COLOR_HIGHLIGHT ) ); + SetTextColor32( hdc, GetSysColor32( COLOR_HIGHLIGHTTEXT ) ); + SetBkColor32( hdc, GetSysColor32( COLOR_HIGHLIGHT ) ); } else { if (lpitem->item_flags & MF_GRAYED) - SetTextColor( hdc, GetSysColor32( COLOR_GRAYTEXT ) ); + SetTextColor32( hdc, GetSysColor32( COLOR_GRAYTEXT ) ); else - SetTextColor( hdc, GetSysColor32( COLOR_MENUTEXT ) ); - SetBkColor( hdc, GetSysColor32( COLOR_MENU ) ); + SetTextColor32( hdc, GetSysColor32( COLOR_MENUTEXT ) ); + SetBkColor32( hdc, GetSysColor32( COLOR_MENU ) ); } if (!menuBar) @@ -869,8 +868,8 @@ static BOOL32 MENU_ShowPopup( HWND32 hwndOwner, HMENU32 hmenu, UINT32 id, /* Display the window */ SetWindowPos32( menu->hWnd, HWND_TOP, 0, 0, 0, 0, - SWP_SHOWWINDOW | SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE ); - UpdateWindow( menu->hWnd ); + SWP_SHOWWINDOW | SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE); + UpdateWindow32( menu->hWnd ); return TRUE; } @@ -1310,8 +1309,8 @@ static BOOL32 MENU_ExecFocusedItem( HWND32 hwndOwner, HMENU32 hmenu, { if (!(item->item_flags & (MF_GRAYED | MF_DISABLED))) { - PostMessage( hwndOwner, (menu->wFlags & MF_SYSMENU) ? - WM_SYSCOMMAND : WM_COMMAND, item->item_id, 0 ); + PostMessage16( hwndOwner, (menu->wFlags & MF_SYSMENU) ? + WM_SYSCOMMAND : WM_COMMAND, item->item_id, 0 ); return FALSE; } else return TRUE; @@ -1473,7 +1472,7 @@ static LRESULT MENU_DoNextMenu( HWND32* hwndOwner, HMENU32* hmenu, ? GetSystemMenu32( *hwndOwner, 0) : *hmenu)); - if( l == 0 || !IsMenu32(LOWORD(l)) || !IsWindow(HIWORD(l)) ) return 0; + if( l == 0 || !IsMenu32(LOWORD(l)) || !IsWindow32(HIWORD(l)) ) return 0; /* shutdown current menu - * all these checks for system popup window are needed @@ -1938,7 +1937,7 @@ void MENU_TrackKbdMenuBar( WND* wndPtr, UINT32 wParam, INT32 vkey) if( uItem == NO_SELECTED_ITEM ) MENU_SelectItemRel( wndPtr->hwndSelf, hTrackMenu, ITEM_NEXT ); else - PostMessage( wndPtr->hwndSelf, WM_KEYDOWN, VK_DOWN, 0L ); + PostMessage16( wndPtr->hwndSelf, WM_KEYDOWN, VK_DOWN, 0L ); MENU_TrackMenu( hTrackMenu, TPM_LEFTALIGN | TPM_LEFTBUTTON, 0, 0, wndPtr->hwndSelf, NULL ); diff --git a/controls/oldlbox.c b/controls/oldlbox.c index 87e6a5a0391..cbecfd90466 100644 --- a/controls/oldlbox.c +++ b/controls/oldlbox.c @@ -66,7 +66,7 @@ void CreateListBoxStruct(HWND16 hwnd, WORD CtlType, LONG styles, HWND16 parent) SetWindowLong32A(hwnd, 0, (LONG)lphl); ListBoxInitialize(lphl); lphl->DrawCtlType = CtlType; - lphl->CtlID = GetWindowWord(hwnd,GWW_ID); + lphl->CtlID = GetWindowWord16(hwnd,GWW_ID); lphl->bRedrawFlag = TRUE; lphl->iNumStops = 0; lphl->TabStops = NULL; @@ -160,10 +160,10 @@ int ListBoxScrollToFocus(LPHEADLIST lphl) } -LPLISTSTRUCT ListBoxGetItem(LPHEADLIST lphl, UINT uIndex) +LPLISTSTRUCT ListBoxGetItem(LPHEADLIST lphl, UINT16 uIndex) { LPLISTSTRUCT lpls; - UINT Count = 0; + UINT16 Count = 0; if (uIndex >= lphl->ItemsCount) return NULL; @@ -199,7 +199,7 @@ void ListBoxDrawItem(HWND16 hwnd, LPHEADLIST lphl, HDC16 hdc, LPLISTSTRUCT lpls, OldBkMode = SetBkMode32(hdc, TRANSPARENT); if (itemState != 0) { - dwOldTextColor = SetTextColor(hdc, 0x00FFFFFFL); + dwOldTextColor = SetTextColor32(hdc, 0x00FFFFFFL); FillRect16(hdc, rect, GetStockObject32(BLACK_BRUSH)); } @@ -213,7 +213,7 @@ void ListBoxDrawItem(HWND16 hwnd, LPHEADLIST lphl, HDC16 hdc, LPLISTSTRUCT lpls, } if (itemState != 0) { - SetTextColor(hdc, dwOldTextColor); + SetTextColor32(hdc, dwOldTextColor); } SetBkMode32(hdc, OldBkMode); @@ -303,7 +303,7 @@ static LPLISTSTRUCT ListBoxCreateItem(LPHEADLIST lphl, int id) return lplsnew; } -static int ListBoxAskCompare(LPHEADLIST lphl, int startItem, SEGPTR matchData, BOOL exactMatch ) +static int ListBoxAskCompare(LPHEADLIST lphl, int startItem, SEGPTR matchData, BOOL32 exactMatch ) { /* Do binary search for sorted listboxes. Linked list item storage sort of * defeats the purpose ( forces to traverse item list all the time ) but M$ does it this way... @@ -401,18 +401,18 @@ static int ListBoxAskCompare(LPHEADLIST lphl, int startItem, SEGPTR matchData, B return (exactMatch)? LB_ERR: pos; } -int ListBoxInsertString(LPHEADLIST lphl, UINT uIndex, LPCSTR newstr) +int ListBoxInsertString(LPHEADLIST lphl, UINT16 uIndex, LPCSTR newstr) { LPLISTSTRUCT *lppls, lplsnew, lpls; HANDLE16 hStr; LPSTR str; - UINT Count; + UINT16 Count; dprintf_listbox(stddeb,"ListBoxInsertString(%d, %p);\n", uIndex, newstr); if (!newstr) return -1; - if (uIndex == (UINT)-1) + if (uIndex == (UINT16)-1) uIndex = lphl->ItemsCount; lppls = &lphl->lpFirst; @@ -466,7 +466,7 @@ int ListBoxInsertString(LPHEADLIST lphl, UINT uIndex, LPCSTR newstr) int ListBoxAddString(LPHEADLIST lphl, SEGPTR itemData) { - UINT pos = (UINT) -1; + UINT16 pos = (UINT16) -1; LPCSTR newstr = (lphl->HasStrings)?(LPCSTR)PTR_SEG_TO_LIN(itemData):(LPCSTR)itemData; if ( lphl->dwStyle & LBS_SORT ) @@ -476,7 +476,7 @@ int ListBoxAddString(LPHEADLIST lphl, SEGPTR itemData) } -int ListBoxGetText(LPHEADLIST lphl, UINT uIndex, LPSTR OutStr) +int ListBoxGetText(LPHEADLIST lphl, UINT16 uIndex, LPSTR OutStr) { LPLISTSTRUCT lpls; @@ -498,7 +498,7 @@ int ListBoxGetText(LPHEADLIST lphl, UINT uIndex, LPSTR OutStr) } -DWORD ListBoxGetItemData(LPHEADLIST lphl, UINT uIndex) +DWORD ListBoxGetItemData(LPHEADLIST lphl, UINT16 uIndex) { LPLISTSTRUCT lpls; @@ -508,7 +508,7 @@ DWORD ListBoxGetItemData(LPHEADLIST lphl, UINT uIndex) } -int ListBoxSetItemData(LPHEADLIST lphl, UINT uIndex, DWORD ItemData) +int ListBoxSetItemData(LPHEADLIST lphl, UINT16 uIndex, DWORD ItemData) { LPLISTSTRUCT lpls = ListBoxGetItem(lphl, uIndex); @@ -518,10 +518,10 @@ int ListBoxSetItemData(LPHEADLIST lphl, UINT uIndex, DWORD ItemData) } -int ListBoxDeleteString(LPHEADLIST lphl, UINT uIndex) +int ListBoxDeleteString(LPHEADLIST lphl, UINT16 uIndex) { LPLISTSTRUCT lpls, lpls2; - UINT Count; + UINT16 Count; if (uIndex >= lphl->ItemsCount) return LB_ERR; @@ -561,13 +561,13 @@ int ListBoxDeleteString(LPHEADLIST lphl, UINT uIndex) return lphl->ItemsCount; } -static int lbFindString(LPHEADLIST lphl, UINT nFirst, SEGPTR MatchStr, BOOL match) +static int lbFindString(LPHEADLIST lphl, UINT16 nFirst, SEGPTR MatchStr, BOOL32 match) { /* match is either MATCH_SUBSTR or MATCH_EXACT */ LPLISTSTRUCT lpls; - UINT Count; - UINT First = nFirst + 1; + UINT16 Count; + UINT16 First = nFirst + 1; int s_length = 0; LPSTR lpMatchStr = (LPSTR)MatchStr; @@ -624,12 +624,12 @@ static int lbFindString(LPHEADLIST lphl, UINT nFirst, SEGPTR MatchStr, BOOL matc return LB_ERR; } -int ListBoxFindString(LPHEADLIST lphl, UINT nFirst, SEGPTR MatchStr) +int ListBoxFindString(LPHEADLIST lphl, UINT16 nFirst, SEGPTR MatchStr) { return lbFindString(lphl, nFirst, MatchStr, MATCH_SUBSTR ); } -int ListBoxFindStringExact(LPHEADLIST lphl, UINT nFirst, SEGPTR MatchStr) +int ListBoxFindStringExact(LPHEADLIST lphl, UINT16 nFirst, SEGPTR MatchStr) { return lbFindString(lphl, nFirst, MatchStr, MATCH_EXACT ); } @@ -676,7 +676,7 @@ int ListBoxSetCurSel(LPHEADLIST lphl, WORD wIndex) lpls->itemState = 0; } - if ((wIndex != (UINT)-1) && (wIndex < lphl->ItemsCount)) + if ((wIndex != (UINT16)-1) && (wIndex < lphl->ItemsCount)) { lphl->ItemFocused = wIndex; lpls = ListBoxGetItem(lphl, wIndex); @@ -693,7 +693,7 @@ int ListBoxSetCurSel(LPHEADLIST lphl, WORD wIndex) /* ------------------------- dir listing ------------------------ */ -LONG ListBoxDirectory(LPHEADLIST lphl, UINT attrib, LPCSTR filespec) +LONG ListBoxDirectory(LPHEADLIST lphl, UINT16 attrib, LPCSTR filespec) { return 0; } @@ -745,7 +745,7 @@ int ListBoxSetItemHeight(LPHEADLIST lphl, WORD wIndex, long height) int ListBoxFindNextMatch(LPHEADLIST lphl, WORD wChar) { LPLISTSTRUCT lpls; - UINT count,first; + UINT16 count,first; if ((char)wChar < ' ') return LB_ERR; if (!lphl->HasStrings) return LB_ERR; diff --git a/controls/scroll.c b/controls/scroll.c index 14c3f401f0f..819ff5da2f5 100644 --- a/controls/scroll.c +++ b/controls/scroll.c @@ -5,7 +5,6 @@ * Copyright 1994, 1996 Alexandre Julliard */ -#define NO_TRANSITION_TYPES /* This file is Win32-clean */ #include #include #include diff --git a/controls/static.c b/controls/static.c index 9842f0626cc..77e6c55b07f 100644 --- a/controls/static.c +++ b/controls/static.c @@ -67,7 +67,8 @@ static HICON16 STATIC_SetIcon( WND *wndPtr, HICON16 hicon ) /*********************************************************************** * StaticWndProc */ -LRESULT StaticWndProc( HWND16 hWnd, UINT uMsg, WPARAM16 wParam, LPARAM lParam) +LRESULT StaticWndProc( HWND16 hWnd, UINT16 uMsg, WPARAM16 wParam, + LPARAM lParam ) { LRESULT lResult = 0; WND *wndPtr = WIN_FindWndPtr(hWnd); @@ -140,7 +141,7 @@ LRESULT StaticWndProc( HWND16 hWnd, UINT uMsg, WPARAM16 wParam, LPARAM lParam) else DEFWND_SetText( wndPtr, (LPSTR)PTR_SEG_TO_LIN(lParam) ); InvalidateRect32( hWnd, NULL, FALSE ); - UpdateWindow( hWnd ); + UpdateWindow32( hWnd ); break; case WM_SETFONT: @@ -149,7 +150,7 @@ LRESULT StaticWndProc( HWND16 hWnd, UINT uMsg, WPARAM16 wParam, LPARAM lParam) if (LOWORD(lParam)) { InvalidateRect32( hWnd, NULL, FALSE ); - UpdateWindow( hWnd ); + UpdateWindow32( hWnd ); } break; @@ -168,7 +169,7 @@ LRESULT StaticWndProc( HWND16 hWnd, UINT uMsg, WPARAM16 wParam, LPARAM lParam) case STM_SETICON: lResult = STATIC_SetIcon( wndPtr, (HICON16)wParam ); InvalidateRect32( hWnd, NULL, FALSE ); - UpdateWindow( hWnd ); + UpdateWindow32( hWnd ); break; default: diff --git a/controls/status.c b/controls/status.c index 17c43722bb4..feef96c8406 100644 --- a/controls/status.c +++ b/controls/status.c @@ -4,7 +4,6 @@ * Copyright 1996 Bruce Milner */ -#define NO_TRANSITION_TYPES /* This file is Win32-clean */ #include #include #include "windows.h" diff --git a/controls/widgets.c b/controls/widgets.c index 0d5e219fa10..ffc2a234b94 100644 --- a/controls/widgets.c +++ b/controls/widgets.c @@ -94,7 +94,7 @@ static WNDCLASS32A WIDGETS_CommonControls32[] = * * Initialize the built-in window classes. */ -BOOL WIDGETS_Init(void) +BOOL32 WIDGETS_Init(void) { int i; char *name; diff --git a/debugger/Makefile.in b/debugger/Makefile.in index 3f5d49d8d7b..2ab72d1bd09 100644 --- a/debugger/Makefile.in +++ b/debugger/Makefile.in @@ -1,4 +1,4 @@ -DEFS = -D__WINE__ -DNO_TRANSITION_TYPES +DEFS = -D__WINE__ TOPSRCDIR = @top_srcdir@ TOPOBJDIR = .. SRCDIR = @srcdir@ diff --git a/debugger/dbg.y b/debugger/dbg.y index b87291aa21f..0f0b9fb1ec5 100644 --- a/debugger/dbg.y +++ b/debugger/dbg.y @@ -49,7 +49,7 @@ int yyerror(char *); %token tENABLE tDISABLE tBREAK tDELETE tSET tMODE tPRINT tEXAM tABORT %token tCLASS tMODULE tSTACK tSEGMENTS tREGS tWND tQUEUE tLOCAL %token tEOL tSTRING -%token tFRAME tSHARE tCOND tDISPLAY tUNDISPLAY +%token tFRAME tSHARE tCOND tDISPLAY tUNDISPLAY tDISASSEMBLE %token tSTEPI tNEXTI tFINISH tSHOW tDIR %token tPATH %token tIDENTIFIER tSTRING @@ -145,6 +145,7 @@ command: | tCOND tNUM tEOL { DEBUG_AddBPCondition($2, NULL); } | tCOND tNUM expr tEOL { DEBUG_AddBPCondition($2, $3); } | list_command + | disassemble_command | set_command | x_command | print_command @@ -162,6 +163,11 @@ pathname: tIDENTIFIER { $$ = $1; } | tPATH { $$ = $1; } +disassemble_command: + tDISASSEMBLE tEOL { DEBUG_Disassemble( NULL, NULL, 10 ); } + | tDISASSEMBLE expr_addr tEOL { DEBUG_Disassemble( & $2, NULL, 10 ); } + | tDISASSEMBLE expr_addr ',' expr_addr tEOL { DEBUG_Disassemble( & $2, & $4, 0 ); } + list_command: tLIST tEOL { DEBUG_List( NULL, NULL, 10 ); } | tLIST '-' tEOL { DEBUG_List( NULL, NULL, -10 ); } @@ -294,7 +300,7 @@ expr_addr: expr_value: expr { DBG_ADDR addr = DEBUG_EvalExpr($1); - $$ = *(unsigned int *) addr.off; } + $$ = addr.off ? *(unsigned int *) addr.off : 0; } /* * The expr rule builds an expression tree. When we are done, we call * EvalExpr to evaluate the value of the expression. The advantage of diff --git a/debugger/debug.l b/debugger/debug.l index d33b4c03713..1322df6e027 100644 --- a/debugger/debug.l +++ b/debugger/debug.l @@ -112,7 +112,8 @@ $gs { yylval.reg = REG_GS; return tREG; } frame|fram|fra|fr { BEGIN(NOCMD); return tFRAME; } list|lis|li|l { BEGIN(PATH_EXPECTED); return tLIST; } enable|enabl|enab|ena { BEGIN(NOCMD); return tENABLE;} -disable|disabl|disab|disa|dis { BEGIN(NOCMD); return tDISABLE; } +disable|disabl|disab|disa|dis { BEGIN(NOCMD); return tDISABLE; } +disassemble|disassembl|disassemb|disassem|disasse|disass|disas { BEGIN(NOCMD); return tDISASSEMBLE; } display|displa|displ|disp { BEGIN(FORMAT_EXPECTED); return tDISPLAY; } undisplay|undispla|undispl|undisp|undis|undi|und { BEGIN(NOCMD); return tUNDISPLAY; } delete|delet|dele|del { BEGIN(DEL_CMD); return tDELETE; } diff --git a/debugger/display.c b/debugger/display.c index fd7e8c678ed..b3ac40d389c 100644 --- a/debugger/display.c +++ b/debugger/display.c @@ -14,7 +14,6 @@ #include "module.h" #include "selectors.h" #include "debugger.h" -#include "toolhelp.h" #include "xmalloc.h" #include diff --git a/debugger/expr.c b/debugger/expr.c index 6968c066d02..1735eda129f 100644 --- a/debugger/expr.c +++ b/debugger/expr.c @@ -14,7 +14,6 @@ #include "module.h" #include "selectors.h" #include "debugger.h" -#include "toolhelp.h" #include "xmalloc.h" #include "expr.h" diff --git a/debugger/info.c b/debugger/info.c index dd5b76a3e89..10ffc97d4d2 100644 --- a/debugger/info.c +++ b/debugger/info.c @@ -121,7 +121,7 @@ void DEBUG_Help(void) static const char * const helptext[] = { "The commands accepted by the Wine debugger are a reasonable", -"of the commands that gdb accepts.", +"subset of the commands that gdb accepts.", "The commands currently are:", " break [*] delete break bpnum", " disable bpnum enable bpnum", @@ -134,10 +134,11 @@ void DEBUG_Help(void) " x print ", " set = set * = ", " up down", -" list frame ", -" finish show dir", -" dir display ", -" delete display undisplay \n", +" list disassemble [][,]", +" frame finish", +" show dir dir ", +" display undisplay ", +" delete display \n", "Wine-specific commands:", " mode [16,32] walk [wnd,class,queue] ", diff --git a/debugger/source.c b/debugger/source.c index d9c6412b1b4..2e3f0738549 100644 --- a/debugger/source.c +++ b/debugger/source.c @@ -426,6 +426,94 @@ DEBUG_List(struct list_id * source1, struct list_id * source2, DEBUG_end_sourceline = end; } +DBG_ADDR DEBUG_LastDisassemble={NULL,0,0}; + +static int +_disassemble(DBG_ADDR *addr) +{ + DEBUG_PrintAddress( addr, dbg_mode, TRUE ); + fprintf(stderr,": "); + if (!DBG_CHECK_READ_PTR( addr, 1 )) return 0; + DEBUG_Disasm( addr, TRUE ); + fprintf(stderr,"\n"); + return 1; +} + +void +_disassemble_fixaddr(DBG_ADDR *addr) { + DWORD seg2; + struct datatype *testtype; + + DBG_FIX_ADDR_SEG(addr,CS_reg(&DEBUG_context)); + if( addr->type != NULL ) + { + if( addr->type == DEBUG_TypeIntConst ) + { + /* + * We know that we have the actual offset stored somewhere + * else in 32-bit space. Grab it, and we + * should be all set. + */ + seg2 = addr->seg; + addr->seg = 0; + addr->off = DEBUG_GetExprValue(addr, NULL); + addr->seg = seg2; + } + else + { + if (!DBG_CHECK_READ_PTR( addr, 1 )) return; + DEBUG_TypeDerefPointer(addr, &testtype); + if( testtype != NULL || addr->type == DEBUG_TypeIntConst ) + addr->off = DEBUG_GetExprValue(addr, NULL); + } + } + else if (!addr->seg && !addr->off) + { + fprintf(stderr,"Invalid expression\n"); + return; + } +} + +void +DEBUG_Disassemble(const DBG_ADDR *xstart,const DBG_ADDR *xend,int offset) +{ + int i; + DBG_ADDR last; + DBG_ADDR end,start; + + + if (xstart) { + start=*xstart; + _disassemble_fixaddr(&start); + } + if (xend) { + end=*xend; + _disassemble_fixaddr(&end); + } + if (!xstart && !xend) { + last = DEBUG_LastDisassemble; + if (!last.seg && !last.off) { + last.seg = (CS_reg(&DEBUG_context)==WINE_CODE_SELECTOR)?0:CS_reg(&DEBUG_context); + last.off = EIP_reg(&DEBUG_context); + } + for (i=0;i break USER.MESSAGEBOX <---- Set Breakpoint -|Breakpoint 2 at 0x0067:0x00000000 (USER.MESSAGEBOX) +|Wine-dbg>break MessageBox32A <---- Set Breakpoint +|Breakpoint 2 at 0x080e792c (MessageBox32A [msgbox.c:198]) |Wine-dbg>c <---- Continue |Call KERNEL.91: INITTASK() ret=0157:0022 ds=08a7 | AX=0000 BX=3cb4 CX=1f40 DX=0000 SI=0000 DI=08a7 ES=11d7 EFL=00000286 @@ -219,9 +208,10 @@ Sample debugging session: ^ | -1 aka. HFILE_ERROR -|Stopped on breakpoint 2 at 0x0067:0x00000000 (USER.MESSAGEBOX) +|Call USER.1: MESSAGEBOX(0x0000,08ef:8362,0000:0000,0x1030) ret=05d7:084f ds=08efStopped on breakpoint 2 at 0x080e792c (MessageBox32A [msgbox.c:198]) +|198 { |In 32 bit mode. -|0x0067:0x00000000 (USER.MESSAGEBOX): pushw %bp +|Wine-dbg> _ Now, we see that OPENFILE seem to have returned 0xFFFF (or -1). Checking the implementation of OpenFile in files/file.c, this signals an error. @@ -237,23 +227,29 @@ Sample debugging session: |marcus@jet $ wine winword.exe -debugmsg +relay,+file -debug |.....much more debugoutput ..... | -|Call KERNEL.97: GETTEMPFILENAME(0x00c3,08a7:8350,0x0000,08a7:8234) ret=058f:09b1 ds=08a7 -|FILE_Create: 'C:~docd03d.tmp' 01b6 1 -|FILE_SetDosError: errno = 13 -|GetTempFileName: returning C:\~DOCD03D.TMP -|Ret KERNEL.97: GETTEMPFILENAME() retval=0xd03d ret=058f:09b1 ds=08a7 -|Call KERNEL.74: OPENFILE(08a7:8234,08a7:82c6,0x1012) ret=058f:09d8 ds=08a7 -|OpenFile: C:\~DOCD03D.TMP 1012 -|FILE_AllocTaskHandle: returning task handle 1, dos_file 0, file 1 of 254 -|FILE_Create: 'C:\~DOCD03D.TMP' 01b6 0 -|FILE_SetDosError: errno = 13 -|OpenFile(C:\~DOCD03D.TMP): return = HFILE_ERROR -|FILE_FreeTaskHandle: dos=1 file=0 -|Ret KERNEL.74: OPENFILE() retval=0xffff ret=058f:09d8 ds=08a7 - The filename is "C:\~DOCD03D.TMP". Of course, C:\ is writeable for the +|Call KERNEL.97: GETTEMPFILENAME(0x00c3,08ef:8350,0x0000,08ef:8234) ret=05d7:09b1 ds=08ef +|FILE_Create: 'C:\~doc8b93.tmp' 01b6 1 +|FILE_SetDosError: errno = 13 + +|Warning: GetTempFileName returns 'C:\~doc8b93.tmp', which doesn't seem to be writeable. +|Please check your configuration file if this generates a failure. + ^ Warning message + +|GetTempFileName: returning C:\~doc8b93.tmp +|Ret KERNEL.97: GETTEMPFILENAME() retval=0x8b93 ret=05d7:09b1 ds=08ef +|Call KERNEL.74: OPENFILE(08ef:8234,08ef:82c6,0x1012) ret=05d7:09d8 ds=08ef +|OpenFile: C:\~doc8b93.tmp 1012 +|FILE_Create: 'C:\~doc8b93.tmp' 01b6 0 +|FILE_SetDosError: errno = 13 +|OpenFile(C:\~doc8b93.tmp): return = HFILE_ERROR +|Ret KERNEL.74: OPENFILE() retval=0xffff ret=05d7:09d8 ds=08ef + + + The filename is "C:\~docd03d.tmp". Of course, C:\ is writeable for the superuser only, so the open fails for a normal user and OpenFile returns - -1, which in turn generates this messagebox. + -1, which in turn generates this messagebox. (As said by the warning + message.) Written by Marcus Meissner , diff --git a/documentation/languages b/documentation/languages index 71f2d6b2a07..ef4aa6d80c7 100644 --- a/documentation/languages +++ b/documentation/languages @@ -1,6 +1,8 @@ This file documents the necessary procedure for adding a new language to the list of languages that Wine can display system menus and forms -in. +in. Currently at least the following languages are still missing: +Bulgarian, Chinese, Greek, Icelandic, Japanese, Dutch, Polish, Portuguese, +Romanian, Russian, Croatian, Slovak, Swedish, Turkish, and Slovanian. To add a new language you need to be able to translate the relatively few texts, of course. You will need very little knowledge of @@ -22,9 +24,8 @@ you must... 3. Edit include/options.h enum "WINE_LANGUAGE" to have a member called LANG_XX where XX is the new abbreviation. -4. Edit misc/ole2nls.c function "GetUserDefaultLCID" to contain an - extra case for your language. The correct return values seem to - be a mystery, but don't worry. +4. Edit misc/ole2nls.c function "GetUserDefaultLCID" to contain a + case for your language by uncommenting the return value of it. 5. Edit resources/sysrec.c to include "sysres_XX.h" where XX is the abbreviation for your language. (That file will be produced auto- diff --git a/files/Makefile.in b/files/Makefile.in index 4a2735efc2c..788ae6d5f21 100644 --- a/files/Makefile.in +++ b/files/Makefile.in @@ -1,6 +1,6 @@ prefix = @prefix@ sysconfdir = @sysconfdir@ -DEFS = -D__WINE__ -DNO_TRANSITION_TYPES -DETCDIR=\"$(sysconfdir)\" +DEFS = -D__WINE__ -DETCDIR=\"$(sysconfdir)\" TOPSRCDIR = @top_srcdir@ TOPOBJDIR = .. SRCDIR = @srcdir@ diff --git a/files/drive.c b/files/drive.c index 8b04493ea11..dabebf891f7 100644 --- a/files/drive.c +++ b/files/drive.c @@ -582,7 +582,7 @@ BOOL32 GetDiskFreeSpace32W( LPCWSTR root, LPDWORD cluster_sectors, */ UINT16 GetDriveType16( UINT16 drive ) { - dprintf_dosfs( stddeb, "GetDriveType(%c:)\n", 'A' + drive ); + dprintf_dosfs( stddeb, "GetDriveType16(%c:)\n", 'A' + drive ); switch(DRIVE_GetType(drive)) { case TYPE_FLOPPY: return DRIVE_REMOVABLE; diff --git a/files/file.c b/files/file.c index 9e8a042aa7f..15b6b1a5c79 100644 --- a/files/file.c +++ b/files/file.c @@ -15,6 +15,7 @@ #include #include #include +#include #include #include #include @@ -33,15 +34,9 @@ #include "stddebug.h" #include "debug.h" - -typedef struct -{ - K32OBJ header; - int unix_handle; - int mode; - char *unix_name; - DWORD type; /* Type for win32 apps */ -} DOS_FILE; +#if defined(MAP_ANONYMOUS) && !defined(MAP_ANON) +#define MAP_ANON MAP_ANONYMOUS +#endif /*********************************************************************** @@ -49,10 +44,10 @@ typedef struct * * Allocate a file. */ -static HFILE32 FILE_Alloc( DOS_FILE **file ) +static HFILE32 FILE_Alloc( FILE_OBJECT **file ) { HFILE32 handle; - *file = HeapAlloc( SystemHeap, 0, sizeof(DOS_FILE) ); + *file = HeapAlloc( SystemHeap, 0, sizeof(FILE_OBJECT) ); if (!*file) { DOS_ERROR( ER_TooManyOpenFiles, EC_ProgramError, SA_Abort, EL_Disk ); @@ -77,7 +72,7 @@ static HFILE32 FILE_Alloc( DOS_FILE **file ) */ void FILE_Destroy( K32OBJ *ptr ) { - DOS_FILE *file = (DOS_FILE *)ptr; + FILE_OBJECT *file = (FILE_OBJECT *)ptr; assert( ptr->type == K32OBJ_FILE ); if (file->unix_handle != -1) close( file->unix_handle ); @@ -93,9 +88,9 @@ void FILE_Destroy( K32OBJ *ptr ) * Return the DOS file associated to a task file handle. FILE_ReleaseFile must * be called to release the file. */ -static DOS_FILE *FILE_GetFile( HFILE32 handle ) +static FILE_OBJECT *FILE_GetFile( HFILE32 handle ) { - return (DOS_FILE *)PROCESS_GetObjPtr( handle, K32OBJ_FILE ); + return (FILE_OBJECT *)PROCESS_GetObjPtr( handle, K32OBJ_FILE ); } @@ -104,7 +99,7 @@ static DOS_FILE *FILE_GetFile( HFILE32 handle ) * * Release a DOS file obtained with FILE_GetFile. */ -static void FILE_ReleaseFile( DOS_FILE *file ) +static void FILE_ReleaseFile( FILE_OBJECT *file ) { K32OBJ_DecCount( &file->header ); } @@ -117,7 +112,7 @@ static void FILE_ReleaseFile( DOS_FILE *file ) */ int FILE_GetUnixHandle( HFILE32 hFile ) { - DOS_FILE *file; + FILE_OBJECT *file; int ret; if (!(file = FILE_GetFile( hFile ))) return -1; @@ -183,7 +178,7 @@ void FILE_SetDosError(void) HFILE32 FILE_DupUnixHandle( int fd ) { HFILE32 handle; - DOS_FILE *file; + FILE_OBJECT *file; if ((handle = FILE_Alloc( &file )) != INVALID_HANDLE_VALUE32) { @@ -204,7 +199,7 @@ HFILE32 FILE_DupUnixHandle( int fd ) static HFILE32 FILE_OpenUnixFile( const char *name, int mode ) { HFILE32 handle; - DOS_FILE *file; + FILE_OBJECT *file; struct stat st; if ((handle = FILE_Alloc( &file )) == INVALID_HANDLE_VALUE32) @@ -228,7 +223,7 @@ static HFILE32 FILE_OpenUnixFile( const char *name, int mode ) return INVALID_HANDLE_VALUE32; } - /* File opened OK, now fill the DOS_FILE */ + /* File opened OK, now fill the FILE_OBJECT */ file->unix_name = HEAP_strdupA( SystemHeap, 0, name ); return handle; @@ -270,7 +265,7 @@ HFILE32 FILE_Open( LPCSTR path, INT32 mode ) static HFILE32 FILE_Create( LPCSTR path, int mode, int unique ) { HFILE32 handle; - DOS_FILE *file; + FILE_OBJECT *file; const char *unixName; DOS_FULL_NAME full_name; @@ -300,7 +295,7 @@ static HFILE32 FILE_Create( LPCSTR path, int mode, int unique ) return INVALID_HANDLE_VALUE32; } - /* File created OK, now fill the DOS_FILE */ + /* File created OK, now fill the FILE_OBJECT */ file->unix_name = HEAP_strdupA( SystemHeap, 0, full_name.long_name ); return handle; @@ -358,7 +353,7 @@ BOOL32 FILE_Stat( LPCSTR unixName, BY_HANDLE_FILE_INFORMATION *info ) DWORD GetFileInformationByHandle( HFILE32 hFile, BY_HANDLE_FILE_INFORMATION *info ) { - DOS_FILE *file; + FILE_OBJECT *file; DWORD ret = 0; struct stat st; @@ -458,7 +453,7 @@ INT32 CompareFileTime( LPFILETIME x, LPFILETIME y ) */ HFILE32 FILE_Dup( HFILE32 hFile ) { - DOS_FILE *file; + FILE_OBJECT *file; HFILE32 handle; dprintf_file( stddeb, "FILE_Dup for handle %d\n", hFile ); @@ -477,7 +472,7 @@ HFILE32 FILE_Dup( HFILE32 hFile ) */ HFILE32 FILE_Dup2( HFILE32 hFile1, HFILE32 hFile2 ) { - DOS_FILE *file; + FILE_OBJECT *file; dprintf_file( stddeb, "FILE_Dup2 for handle %d\n", hFile1 ); if (!(file = FILE_GetFile( hFile1 ))) return HFILE_ERROR32; @@ -543,7 +538,8 @@ UINT32 GetTempFileName32A( LPCSTR path, LPCSTR prefix, UINT32 unique, HFILE32 handle = FILE_Create( buffer, 0666, TRUE ); if (handle != INVALID_HANDLE_VALUE32) { /* We created it */ - dprintf_file( stddeb, "GetTempFileName: created %s\n", buffer); + dprintf_file( stddeb, "GetTempFileName32A: created %s\n", + buffer); CloseHandle( handle ); break; } @@ -566,7 +562,7 @@ UINT32 GetTempFileName32A( LPCSTR path, LPCSTR prefix, UINT32 unique, "Please check your configuration file if this generates a failure.\n", buffer); } - dprintf_file( stddeb, "GetTempFileName: returning %s\n", buffer ); + dprintf_file( stddeb, "GetTempFileName32A: returning %s\n", buffer ); return unique ? unique : num; } @@ -758,7 +754,7 @@ LONG WIN16_hread( HFILE16 hFile, SEGPTR buffer, LONG count ) { LONG maxlen; - dprintf_file( stddeb, "_hread16: %d %08lx %ld\n", + dprintf_file( stddeb, "WIN16_hread: %d %08lx %ld\n", hFile, (DWORD)buffer, count ); /* Some programs pass a count larger than the allocated buffer */ @@ -782,7 +778,7 @@ UINT16 WIN16_lread( HFILE16 hFile, SEGPTR buffer, UINT16 count ) */ UINT32 _lread32( HFILE32 hFile, LPVOID buffer, UINT32 count ) { - DOS_FILE *file; + FILE_OBJECT *file; UINT32 result; dprintf_file( stddeb, "_lread32: %d %p %d\n", hFile, buffer, count ); @@ -832,7 +828,7 @@ HFILE32 _lcreat32( LPCSTR path, INT32 attr ) HFILE32 _lcreat_uniq( LPCSTR path, INT32 attr ) { int mode = (attr & 1) ? 0444 : 0666; - dprintf_file( stddeb, "_lcreat: %s %02x\n", path, attr ); + dprintf_file( stddeb, "_lcreat_uniq: %s %02x\n", path, attr ); return FILE_Create( path, mode, TRUE ); } @@ -843,7 +839,7 @@ HFILE32 _lcreat_uniq( LPCSTR path, INT32 attr ) DWORD SetFilePointer( HFILE32 hFile, LONG distance, LONG *highword, DWORD method ) { - DOS_FILE *file; + FILE_OBJECT *file; int origin, result; if (highword && *highword) @@ -858,9 +854,9 @@ DWORD SetFilePointer( HFILE32 hFile, LONG distance, LONG *highword, if (!(file = FILE_GetFile( hFile ))) return 0xffffffff; switch(method) { - case 1: origin = SEEK_CUR; break; - case 2: origin = SEEK_END; break; - default: origin = SEEK_SET; break; + case FILE_CURRENT: origin = SEEK_CUR; break; + case FILE_END: origin = SEEK_END; break; + default: origin = SEEK_SET; break; } if ((result = lseek( file->unix_handle, distance, origin )) == -1) @@ -904,7 +900,7 @@ HFILE32 _lopen32( LPCSTR path, INT32 mode ) { INT32 unixMode; - dprintf_file(stddeb, "_lopen('%s',%04x)\n", path, mode ); + dprintf_file(stddeb, "_lopen32('%s',%04x)\n", path, mode ); switch(mode & 3) { @@ -972,10 +968,10 @@ LONG _hwrite16( HFILE16 hFile, LPCSTR buffer, LONG count ) */ LONG _hwrite32( HFILE32 hFile, LPCSTR buffer, LONG count ) { - DOS_FILE *file; + FILE_OBJECT *file; LONG result; - dprintf_file( stddeb, "_hwrite: %d %p %ld\n", hFile, buffer, count ); + dprintf_file( stddeb, "_hwrite32: %d %p %ld\n", hFile, buffer, count ); if (!(file = FILE_GetFile( hFile ))) return HFILE_ERROR32; if (count == 0) /* Expand or truncate at current position */ @@ -999,7 +995,7 @@ UINT16 SetHandleCount16( UINT16 count ) PDB *pdb = (PDB *)GlobalLock16( hPDB ); BYTE *files = PTR_SEG_TO_LIN( pdb->fileHandlesPtr ); - dprintf_file( stddeb, "SetHandleCount(%d)\n", count ); + dprintf_file( stddeb, "SetHandleCount16(%d)\n", count ); if (count < 20) count = 20; /* No point in going below 20 */ else if (count > 254) count = 254; @@ -1056,7 +1052,7 @@ UINT32 SetHandleCount32( UINT32 count ) */ BOOL32 FlushFileBuffers( HFILE32 hFile ) { - DOS_FILE *file; + FILE_OBJECT *file; BOOL32 ret; dprintf_file( stddeb, "FlushFileBuffers(%d)\n", hFile ); @@ -1077,7 +1073,7 @@ BOOL32 FlushFileBuffers( HFILE32 hFile ) */ BOOL32 SetEndOfFile( HFILE32 hFile ) { - DOS_FILE *file; + FILE_OBJECT *file; BOOL32 ret = TRUE; dprintf_file( stddeb, "SetEndOfFile(%d)\n", hFile ); @@ -1146,7 +1142,7 @@ BOOL32 DeleteFile32W( LPCWSTR path ) */ BOOL32 FILE_SetFileType( HFILE32 hFile, DWORD type ) { - DOS_FILE *file = FILE_GetFile( hFile ); + FILE_OBJECT *file = FILE_GetFile( hFile ); if (!file) return FALSE; file->type = type; FILE_ReleaseFile( file ); @@ -1154,12 +1150,49 @@ BOOL32 FILE_SetFileType( HFILE32 hFile, DWORD type ) } +/*********************************************************************** + * FILE_mmap + */ +LPVOID FILE_mmap( FILE_OBJECT *file, LPVOID start, + DWORD size_high, DWORD size_low, + DWORD offset_high, DWORD offset_low, + int prot, int flags ) +{ + int fd = -1; + + if (size_high || offset_high) + fprintf( stderr, "FILE_mmap: offsets larger than 4Gb not supported\n"); + + if (!file) + { +#ifdef MAP_ANON + flags |= MAP_ANON; +#else + static int fdzero = -1; + + if (fdzero == -1) + { + if ((fdzero = open( "/dev/zero", O_RDONLY )) == -1) + { + perror( "/dev/zero: open" ); + exit(1); + } + } + fd = fdzero; +#endif /* MAP_ANON */ + } + else fd = file->unix_handle; + + return mmap( start, size_low, prot, flags, fd, offset_low ); +} + + /*********************************************************************** * GetFileType (KERNEL32.222) */ DWORD GetFileType( HFILE32 hFile ) { - DOS_FILE *file = FILE_GetFile(hFile); + FILE_OBJECT *file = FILE_GetFile(hFile); if (!file) return FILE_TYPE_UNKNOWN; /* FIXME: correct? */ FILE_ReleaseFile( file ); return file->type; @@ -1267,7 +1300,7 @@ BOOL32 SetFileTime( HFILE32 hFile, const FILETIME *lpLastAccessTime, const FILETIME *lpLastWriteTime ) { - DOS_FILE *file = FILE_GetFile(hFile); + FILE_OBJECT *file = FILE_GetFile(hFile); struct utimbuf utimbuf; if (!file) return FILE_TYPE_UNKNOWN; /* FIXME: correct? */ diff --git a/graphics/Makefile.in b/graphics/Makefile.in index 53395963c69..ddb1129dd94 100644 --- a/graphics/Makefile.in +++ b/graphics/Makefile.in @@ -1,4 +1,4 @@ -DEFS = -D__WINE__ -DNO_TRANSITION_TYPES +DEFS = -D__WINE__ TOPSRCDIR = @top_srcdir@ TOPOBJDIR = .. SRCDIR = @srcdir@ diff --git a/graphics/metafiledrv/Makefile.in b/graphics/metafiledrv/Makefile.in index ff538f29f1e..b0cd835bd98 100644 --- a/graphics/metafiledrv/Makefile.in +++ b/graphics/metafiledrv/Makefile.in @@ -1,4 +1,4 @@ -DEFS = -D__WINE__ -DNO_TRANSITION_TYPES +DEFS = -D__WINE__ TOPSRCDIR = @top_srcdir@ TOPOBJDIR = ../.. SRCDIR = @srcdir@ diff --git a/graphics/win16drv/Makefile.in b/graphics/win16drv/Makefile.in index ad71b99d283..0c408ad0fa2 100644 --- a/graphics/win16drv/Makefile.in +++ b/graphics/win16drv/Makefile.in @@ -1,4 +1,4 @@ -DEFS = -D__WINE__ -DNO_TRANSITION_TYPES +DEFS = -D__WINE__ TOPSRCDIR = @top_srcdir@ TOPOBJDIR = ../.. SRCDIR = @srcdir@ @@ -8,6 +8,7 @@ MODULE = win16drv C_SRCS = \ font.c \ init.c \ + objects.c \ text.c all: $(MODULE).o diff --git a/graphics/win16drv/font.c b/graphics/win16drv/font.c index 6edc8dfa8c5..678ed9022fe 100644 --- a/graphics/win16drv/font.c +++ b/graphics/win16drv/font.c @@ -8,6 +8,7 @@ #include "windows.h" #include "win16drv.h" #include "gdi.h" +#include "font.h" /*********************************************************************** @@ -71,3 +72,10 @@ BOOL32 WIN16DRV_GetTextMetrics( DC *dc, TEXTMETRIC32A *metrics ) return TRUE; } + +HFONT32 WIN16DRV_FONT_SelectObject( DC * dc, HFONT32 hfont, FONTOBJ * font) +{ + /* TTD */ + printf("In WIN16DRV_FONT_SelectObject\n"); + return GetStockObject32(SYSTEM_FIXED_FONT); +} diff --git a/graphics/win16drv/init.c b/graphics/win16drv/init.c index 3a9b7420a79..fec0eb017e1 100644 --- a/graphics/win16drv/init.c +++ b/graphics/win16drv/init.c @@ -75,7 +75,7 @@ static const DC_FUNCTIONS WIN16DRV_Funcs = NULL, /* pScaleViewportExtEx */ NULL, /* pScaleWindowExtEx */ NULL, /* pSelectClipRgn */ - NULL, /* pSelectObject */ + WIN16DRV_SelectObject, /* pSelectObject */ NULL, /* pSelectPalette */ NULL, /* pSetBkColor */ NULL, /* pSetBkMode */ @@ -690,8 +690,7 @@ BOOL32 WIN16DRV_CreateDC( DC *dc, LPCSTR driver, LPCSTR device, LPCSTR output, /* passing information on the available fonts */ if (pLPD->paPrinterFonts == NULL) { - pfnCallback = GetProcAddress16(GetModuleHandle("GDI"), - (MAKEINTRESOURCE(158))); + pfnCallback = MODULE_GetEntryPoint( GetModuleHandle16("GDI"), 158 ); if (pfnCallback != NULL) { @@ -813,7 +812,7 @@ DWORD PRTDRV_ExtTextOut(LPPDEVICE lpDestDev, WORD wDestXOrg, WORD wDestYOrg, if ((pLPD = FindPrinterDriverFromPDEVICE(lpDestDev)) != NULL) { LONG lP1, lP4, lP5, lP7, lP8, lP9, lP10, lP11; - WORD wP2, wP3, wP12; + WORD wP2, wP3, wP6, wP12; INT16 iP6; SEGPTR SegPtr = pLPD->ThunkBufSegPtr; @@ -945,7 +944,7 @@ int ExtractPQ(HPQ hPQ) { struct hpq *queue, *prev, *current, *currentPrev; - int key = 0, tag = -1; + int key, tag = -1; currentPrev = prev = NULL; queue = current = hpqueue; if (current) @@ -1146,7 +1145,7 @@ int WriteDialog(HANDLE16 hJob, LPSTR lpMsg, WORD cchMsg) dprintf_win16drv(stddeb, "WriteDialog: %04x %04x \"%s\"\n", hJob, cchMsg, lpMsg); - nRet = MessageBox16( 0, lpMsg, "Printing Error", MB_OKCANCEL); + nRet = MessageBox16(NULL, lpMsg, "Printing Error", MB_OKCANCEL); return nRet; } diff --git a/graphics/win16drv/objects.c b/graphics/win16drv/objects.c new file mode 100644 index 00000000000..c865790152d --- /dev/null +++ b/graphics/win16drv/objects.c @@ -0,0 +1,53 @@ +/* + * GDI objects + * + * Copyright 1993 Alexandre Julliard + */ + +#include +#include +#include "bitmap.h" +#include "brush.h" +#include "font.h" +#include "pen.h" +#include "stddebug.h" +#include "debug.h" + + +extern HBITMAP32 WIN16DRV_BITMAP_SelectObject( DC * dc, HBITMAP32 hbitmap, + BITMAPOBJ * bmp ); +extern HBRUSH32 WIN16DRV_BRUSH_SelectObject( DC * dc, HBRUSH32 hbrush, + BRUSHOBJ * brush ); +extern HFONT32 WIN16DRV_FONT_SelectObject( DC * dc, HFONT32 hfont, + FONTOBJ * font ); +extern HPEN32 WIN16DRV_PEN_SelectObject( DC * dc, HPEN32 hpen, PENOBJ * pen ); + + +/*********************************************************************** + * X11DRV_SelectObject + */ +HGDIOBJ32 WIN16DRV_SelectObject( DC *dc, HGDIOBJ32 handle ) +{ + GDIOBJHDR *ptr = GDI_GetObjPtr( handle, MAGIC_DONTCARE ); + + if (!ptr) return 0; + dprintf_gdi(stddeb, "SelectObject: hdc=%04x %04x\n", dc->hSelf, handle ); + + switch(ptr->wMagic) + { + case PEN_MAGIC: + fprintf(stderr, "WIN16DRV_SelectObject for PEN not implemented\n"); + return 0; + case BRUSH_MAGIC: + fprintf(stderr, "WIN16DRV_SelectObject for BRUSH not implemented\n"); + return 0; + case BITMAP_MAGIC: + fprintf(stderr, "WIN16DRV_SelectObject for BITMAP not implemented\n"); + return 0; + case FONT_MAGIC: + return WIN16DRV_FONT_SelectObject( dc, handle, (FONTOBJ *)ptr ); + case REGION_MAGIC: + return (HGDIOBJ16)SelectClipRgn16( dc->hSelf, handle ); + } + return 0; +} diff --git a/graphics/x11drv/Makefile.in b/graphics/x11drv/Makefile.in index 9001dad5229..daa860c0168 100644 --- a/graphics/x11drv/Makefile.in +++ b/graphics/x11drv/Makefile.in @@ -1,4 +1,4 @@ -DEFS = -D__WINE__ -DNO_TRANSITION_TYPES +DEFS = -D__WINE__ TOPSRCDIR = @top_srcdir@ TOPOBJDIR = ../.. SRCDIR = @srcdir@ diff --git a/graphics/x11drv/bitmap.c b/graphics/x11drv/bitmap.c index d0cc8255e78..b302248d3c4 100644 --- a/graphics/x11drv/bitmap.c +++ b/graphics/x11drv/bitmap.c @@ -56,7 +56,8 @@ HBITMAP32 X11DRV_BITMAP_SelectObject( DC * dc, HBITMAP32 hbitmap, if (!(dc->w.flags & DC_MEMORY)) return 0; if (dc->w.hVisRgn) - SetRectRgn(dc->w.hVisRgn, 0, 0, bmp->bitmap.bmWidth, bmp->bitmap.bmHeight ); + SetRectRgn32( dc->w.hVisRgn, 0, 0, + bmp->bitmap.bmWidth, bmp->bitmap.bmHeight ); else { hrgn = CreateRectRgn32(0, 0, bmp->bitmap.bmWidth, bmp->bitmap.bmHeight); diff --git a/if1632/Makefile.in b/if1632/Makefile.in index 3f16ec4abec..140ca7548a4 100644 --- a/if1632/Makefile.in +++ b/if1632/Makefile.in @@ -1,4 +1,4 @@ -DEFS = -D__WINE__ -DNO_TRANSITION_TYPES +DEFS = -D__WINE__ TOPSRCDIR = @top_srcdir@ TOPOBJDIR = .. SRCDIR = @srcdir@ diff --git a/if1632/builtin.c b/if1632/builtin.c index 3a4386cc6d3..44b86eee1f0 100644 --- a/if1632/builtin.c +++ b/if1632/builtin.c @@ -187,14 +187,14 @@ BOOL16 BUILTIN_Init(void) /* Set the USER and GDI heap selectors */ - pModule = MODULE_GetPtr( GetModuleHandle( "USER" )); + pModule = MODULE_GetPtr( GetModuleHandle16( "USER" )); USER_HeapSel = (NE_SEG_TABLE( pModule ) + pModule->dgroup - 1)->selector; - pModule = MODULE_GetPtr( GetModuleHandle( "GDI" )); + pModule = MODULE_GetPtr( GetModuleHandle16( "GDI" )); GDI_HeapSel = (NE_SEG_TABLE( pModule ) + pModule->dgroup - 1)->selector; /* Initialize KERNEL.178 (__WINFLAGS) with the correct flags value */ - hModule = GetModuleHandle( "KERNEL" ); + hModule = GetModuleHandle16( "KERNEL" ); MODULE_SetEntryPoint( hModule, 178, GetWinFlags() ); /* Initialize the real-mode selector entry points */ @@ -203,7 +203,7 @@ BOOL16 BUILTIN_Init(void) /* Set interrupt vectors from entry points in WPROCS.DLL */ - hModule = GetModuleHandle( "WPROCS" ); + hModule = GetModuleHandle16( "WPROCS" ); for (vector = 0; vector < 256; vector++) { FARPROC16 proc = MODULE_GetEntryPoint( hModule, diff --git a/if1632/gdi.spec b/if1632/gdi.spec index af8dc31b3b2..71da3bca8e9 100644 --- a/if1632/gdi.spec +++ b/if1632/gdi.spec @@ -2,7 +2,7 @@ name gdi type win16 heap 65488 # 65536 - 16 (instance data) - 32 (stock objects) -1 pascal SetBkColor(word long) SetBkColor +1 pascal SetBkColor(word long) SetBkColor16 2 pascal16 SetBkMode(word word) SetBkMode16 3 pascal16 SetMapMode(word word) SetMapMode16 4 pascal16 SetROP2(word word) SetROP216 @@ -10,7 +10,7 @@ heap 65488 # 65536 - 16 (instance data) - 32 (stock objects) 6 pascal16 SetPolyFillMode(word word) SetPolyFillMode16 7 pascal16 SetStretchBltMode(word word) SetStretchBltMode16 8 pascal16 SetTextCharacterExtra(word s_word) SetTextCharacterExtra16 -9 pascal SetTextColor(word long) SetTextColor +9 pascal SetTextColor(word long) SetTextColor16 10 pascal16 SetTextJustification(word s_word s_word) SetTextJustification16 11 pascal SetWindowOrg(word s_word s_word) SetWindowOrg 12 pascal SetWindowExt(word s_word s_word) SetWindowExt @@ -54,10 +54,10 @@ heap 65488 # 65536 - 16 (instance data) - 32 (stock objects) 45 pascal16 SelectObject(word word) SelectObject16 #46 pascal __GP? 47 pascal16 CombineRgn(word word word s_word) CombineRgn16 -48 pascal16 CreateBitmap(word word word word ptr) CreateBitmap +48 pascal16 CreateBitmap(word word word word ptr) CreateBitmap16 49 pascal16 CreateBitmapIndirect(ptr) CreateBitmapIndirect16 50 pascal16 CreateBrushIndirect(ptr) CreateBrushIndirect16 -51 pascal16 CreateCompatibleBitmap(word word word) CreateCompatibleBitmap +51 pascal16 CreateCompatibleBitmap(word word word) CreateCompatibleBitmap16 52 pascal16 CreateCompatibleDC(word) CreateCompatibleDC16 53 pascal16 CreateDC(ptr ptr ptr ptr) CreateDC16 54 pascal16 CreateEllipticRgn(s_word s_word s_word s_word) CreateEllipticRgn16 @@ -80,7 +80,7 @@ heap 65488 # 65536 - 16 (instance data) - 32 (stock objects) 71 pascal16 EnumObjects(word word segptr long) THUNK_EnumObjects16 72 pascal16 EqualRgn(word word) EqualRgn16 73 pascal16 ExcludeVisRect(word s_word s_word s_word s_word) ExcludeVisRect -74 pascal GetBitmapBits(word long ptr) GetBitmapBits +74 pascal GetBitmapBits(word long ptr) GetBitmapBits16 75 pascal GetBkColor(word) GetBkColor16 76 pascal16 GetBkMode(word) GetBkMode16 77 pascal16 GetClipBox(word ptr) GetClipBox16 @@ -113,9 +113,9 @@ heap 65488 # 65536 - 16 (instance data) - 32 (stock objects) 103 pascal16 PtVisible(word s_word s_word) PtVisible16 104 pascal16 RectVisibleOld(word ptr) RectVisible16 105 pascal16 SelectVisRgn(word word) SelectVisRgn -106 pascal SetBitmapBits(word long ptr) SetBitmapBits +106 pascal SetBitmapBits(word long ptr) SetBitmapBits16 117 pascal SetDCOrg(word s_word s_word) SetDCOrg -119 pascal16 AddFontResource(ptr) AddFontResource +119 pascal16 AddFontResource(ptr) AddFontResource16 #121 pascal Death #122 pascal ReSurRection 123 pascal16 PlayMetaFile(word word) PlayMetaFile16 @@ -131,7 +131,7 @@ heap 65488 # 65536 - 16 (instance data) - 32 (stock objects) 133 pascal16 GetEnvironment(ptr ptr word) GetEnvironment 134 pascal16 GetRgnBox(word ptr) GetRgnBox16 #135 pascal ScanLr -136 pascal16 RemoveFontResource(ptr) RemoveFontResource +136 pascal16 RemoveFontResource(ptr) RemoveFontResource16 148 pascal SetBrushOrg(word s_word s_word) SetBrushOrg 149 pascal GetBrushOrg(word) GetBrushOrg 150 pascal16 UnrealizeObject(word) UnrealizeObject16 @@ -139,7 +139,7 @@ heap 65488 # 65536 - 16 (instance data) - 32 (stock objects) 153 pascal16 CreateIC(ptr ptr ptr ptr) CreateIC16 154 pascal GetNearestColor(word long) GetNearestColor16 155 stub QueryAbort -156 pascal16 CreateDiscardableBitmap(word word word) CreateDiscardableBitmap +156 pascal16 CreateDiscardableBitmap(word word word) CreateDiscardableBitmap16 158 pascal16 EnumCallback(ptr ptr word long) WineEnumDFontCallback 159 pascal16 GetMetaFileBits(word) GetMetaFileBits 160 pascal16 SetMetaFileBits(word) SetMetaFileBits @@ -148,10 +148,10 @@ heap 65488 # 65536 - 16 (instance data) - 32 (stock objects) 163 pascal SetBitmapDimension(word s_word s_word) SetBitmapDimension 169 stub IsDCDirty 170 stub SetDCStatus -172 pascal16 SetRectRgn(word s_word s_word s_word s_word) SetRectRgn +172 pascal16 SetRectRgn(word s_word s_word s_word s_word) SetRectRgn16 173 pascal16 GetClipRgn(word) GetClipRgn16 175 pascal16 EnumMetaFile(word word segptr long) THUNK_EnumMetaFile16 -176 pascal16 PlayMetaFileRecord(word ptr ptr word) PlayMetaFileRecord +176 pascal16 PlayMetaFileRecord(word ptr ptr word) PlayMetaFileRecord16 179 pascal16 GetDCState(word) GetDCState 180 pascal16 SetDCState(word word) SetDCState 181 pascal16 RectInRegionOld(word ptr) RectInRegion16 @@ -218,17 +218,17 @@ heap 65488 # 65536 - 16 (instance data) - 32 (stock objects) 306 stub ENGINEMAKEFONTDIR 307 pascal16 GetCharABCWidths(word word word ptr) GetCharABCWidths16 308 stub GetOutLineTextMetrics -309 pascal GetGlyphOutLine(word word word ptr long ptr ptr) GetGlyphOutLine -310 pascal16 CreateScalableFontResource(word ptr ptr ptr) CreateScalableFontResource +309 pascal GetGlyphOutline(word word word ptr long ptr ptr) GetGlyphOutline16 +310 pascal16 CreateScalableFontResource(word ptr ptr ptr) CreateScalableFontResource16 311 stub GetFontData 312 stub ConvertOutLineFontFile -313 pascal16 GetRasterizerCaps(ptr word) GetRasterizerCaps +313 pascal16 GetRasterizerCaps(ptr word) GetRasterizerCaps16 314 stub EngineExtTextOut 315 stub EngineRealizeFontExt 316 stub EngineGetCharWidthStr 317 stub EngineGetGlyphBmpExt 330 pascal16 EnumFontFamilies(word ptr segptr long) THUNK_EnumFontFamilies16 -332 pascal16 GetKerningPairs(word word ptr) GetKerningPairs +332 pascal16 GetKerningPairs(word word ptr) GetKerningPairs16 345 pascal16 GetTextAlign(word) GetTextAlign16 346 pascal16 SetTextAlign(word word) SetTextAlign16 348 pascal16 Chord(word s_word s_word s_word s_word s_word s_word @@ -246,7 +246,7 @@ heap 65488 # 65536 - 16 (instance data) - 32 (stock objects) 363 pascal16 GetPaletteEntries(word word word ptr) GetPaletteEntries16 364 pascal16 SetPaletteEntries(word word word ptr) SetPaletteEntries16 365 pascal16 RealizeDefaultPalette(word) RealizeDefaultPalette -366 pascal16 UpdateColors(word) UpdateColors +366 pascal16 UpdateColors(word) UpdateColors16 367 pascal16 AnimatePalette(word word word ptr) AnimatePalette16 368 pascal16 ResizePalette(word word) ResizePalette16 370 pascal16 GetNearestPaletteIndex(word long) GetNearestPaletteIndex16 diff --git a/if1632/gdi32.spec b/if1632/gdi32.spec index dd6560313b1..90b502c5380 100644 --- a/if1632/gdi32.spec +++ b/if1632/gdi32.spec @@ -4,9 +4,9 @@ base 1 0000 stub AbortDoc 0001 stub AbortPath -0002 stdcall AddFontResourceA(ptr) AddFontResource +0002 stdcall AddFontResourceA(ptr) AddFontResource32A 0003 stub AddFontResourceTracking -0004 stub AddFontResourceW +0004 stdcall AddFontResourceW(ptr) AddFontResource32W 0005 stub AngleArc 0006 stdcall AnimatePalette(long long long ptr) AnimatePalette32 0007 stdcall Arc(long long long long long long long long long) Arc32 @@ -27,12 +27,12 @@ base 1 0022 stub CopyEnhMetaFileW 0023 stdcall CopyMetaFileA(long ptr) CopyMetaFile32A 0024 stdcall CopyMetaFileW(long ptr) CopyMetaFile32W -0025 stdcall CreateBitmap(long long long long ptr) CreateBitmap +0025 stdcall CreateBitmap(long long long long ptr) CreateBitmap32 0026 stdcall CreateBitmapIndirect(ptr) CreateBitmapIndirect32 0027 stdcall CreateBrushIndirect(ptr) CreateBrushIndirect32 0028 stub CreateColorSpaceA 0029 stub CreateColorSpaceW -0030 stdcall CreateCompatibleBitmap(long long long) CreateCompatibleBitmap +0030 stdcall CreateCompatibleBitmap(long long long) CreateCompatibleBitmap32 0031 stdcall CreateCompatibleDC(long) CreateCompatibleDC32 0032 stdcall CreateDCA(ptr ptr ptr ptr) CreateDC32A 0033 stdcall CreateDCW(ptr ptr ptr ptr) CreateDC32W @@ -40,7 +40,7 @@ base 1 0035 stub CreateDIBPatternBrushPt 0036 stub CreateDIBSection 0037 stdcall CreateDIBitmap(long ptr long ptr ptr long) CreateDIBitmap32 -0038 stdcall CreateDiscardableBitmap(long long long) CreateDiscardableBitmap +0038 stdcall CreateDiscardableBitmap(long long long) CreateDiscardableBitmap32 0039 stdcall CreateEllipticRgn(long long long long) CreateEllipticRgn32 0040 stdcall CreateEllipticRgnIndirect(ptr) CreateEllipticRgnIndirect32 0041 stub CreateEnhMetaFileA @@ -67,8 +67,8 @@ base 1 0060 stdcall CreateRectRgnIndirect(ptr) CreateRectRgnIndirect32 0061 stdcall CreateRoundRectRgn(long long long long long long) CreateRoundRectRgn32 -0062 stub CreateScalableFontResourceA -0063 stub CreateScalableFontResourceW +0062 stdcall CreateScalableFontResourceA(long ptr ptr ptr) CreateScalableFontResource32A +0063 stdcall CreateScalableFontResourceW(long ptr ptr ptr) CreateScalableFontResource32W 0064 stdcall CreateSolidBrush(long) CreateSolidBrush32 0065 stdcall DPtoLP(long ptr long) DPtoLP32 0066 stub DeleteColorSpace @@ -148,7 +148,7 @@ base 1 0140 stub GdiSetServerAttr 0141 stub GetArcDirection 0142 stub GetAspectRatioFilterEx -0143 stdcall GetBitmapBits(long long ptr) GetBitmapBits +0143 stdcall GetBitmapBits(long long ptr) GetBitmapBits32 0144 stdcall GetBitmapDimensionEx(long ptr) GetBitmapDimensionEx32 0145 stdcall GetBkColor(long) GetBkColor32 0146 stdcall GetBkMode(long) GetBkMode32 @@ -191,14 +191,14 @@ base 1 0183 stub GetFontResourceInfo 0184 stub GetFontResourceInfoW 0185 stub GetGlyphOutline -0186 stub GetGlyphOutlineA -0187 stub GetGlyphOutlineW +0186 stdcall GetGlyphOutlineA(long long long ptr long ptr ptr) GetGlyphOutline32A +0187 stdcall GetGlyphOutlineW(long long long ptr long ptr ptr) GetGlyphOutline32W 0188 stub GetGraphicsMode 0189 stub GetICMProfileA 0190 stub GetICMProfileW 0191 stub GetKerningPairs -0192 stub GetKerningPairsA -0193 stub GetKerningPairsW +0192 stdcall GetKerningPairsA(long long ptr) GetKerningPairs32A +0193 stdcall GetKerningPairsW(long long ptr) GetKerningPairs32W 0194 stub GetLogColorSpaceA 0195 stub GetLogColorSpaceW 0196 stdcall GetMapMode(long) GetMapMode32 @@ -221,7 +221,7 @@ base 1 0213 stdcall GetPolyFillMode(long) GetPolyFillMode32 0214 stdcall GetROP2(long) GetROP232 0215 stub GetRandomRgn -0216 stub GetRasterizerCaps +0216 stdcall GetRasterizerCaps(ptr long) GetRasterizerCaps32 0217 stub GetRegionData 0218 stdcall GetRelAbs(long) GetRelAbs32 0219 stdcall GetRgnBox(long ptr) GetRgnBox32 @@ -289,9 +289,9 @@ base 1 0281 stdcall RectInRegion(long ptr) RectInRegion32 0282 stdcall RectVisible(long ptr) RectVisible32 0283 stdcall Rectangle(long long long long long) Rectangle32 -0284 stub RemoveFontResourceA +0284 stdcall RemoveFontResourceA(ptr) RemoveFontResource32A 0285 stub RemoveFontResourceTracking -0286 stub RemoveFontResourceW +0286 stdcall RemoveFontResourceW(ptr) RemoveFontResource32W 0287 stdcall ResetDCA(long ptr) ResetDC32A 0288 stdcall ResetDCW(long ptr) ResetDC32W 0289 stdcall ResizePalette(long long) ResizePalette32 @@ -308,9 +308,9 @@ base 1 0300 stdcall SelectPalette(long long long) SelectPalette32 0301 stub SetAbortProc 0302 stub SetArcDirection -0303 stdcall SetBitmapBits(long long ptr) SetBitmapBits +0303 stdcall SetBitmapBits(long long ptr) SetBitmapBits32 0304 stdcall SetBitmapDimensionEx(long long long ptr) SetBitmapDimensionEx32 -0305 stdcall SetBkColor(long long) SetBkColor +0305 stdcall SetBkColor(long long) SetBkColor32 0306 stdcall SetBkMode(long long) SetBkMode32 0307 stub SetBoundsRect 0308 stdcall SetBrushOrgEx(long long long ptr) SetBrushOrgEx @@ -338,13 +338,13 @@ base 1 0329 stub SetPixelV 0330 stdcall SetPolyFillMode(long long) SetPolyFillMode32 0331 stdcall SetROP2(long long) SetROP232 -0332 stdcall SetRectRgn(long long long long long) SetRectRgn +0332 stdcall SetRectRgn(long long long long long) SetRectRgn32 0333 stdcall SetRelAbs(long long) SetRelAbs32 0334 stdcall SetStretchBltMode(long long) SetStretchBltMode32 0335 stdcall SetSystemPaletteUse(long long) SetSystemPaletteUse32 0336 stdcall SetTextAlign(long long) SetTextAlign32 0337 stdcall SetTextCharacterExtra(long long) SetTextCharacterExtra32 -0338 stdcall SetTextColor(long long) SetTextColor +0338 stdcall SetTextColor(long long) SetTextColor32 0339 stdcall SetTextJustification(long long long) SetTextJustification32 0340 stdcall SetViewportExtEx(long long long ptr) SetViewportExtEx32 0341 stdcall SetViewportOrgEx(long long long ptr) SetViewportOrgEx32 @@ -367,7 +367,7 @@ base 1 0356 stdcall TextOutW(long long long ptr long) TextOut32W 0357 stub UnloadNetworkFonts 0358 stdcall UnrealizeObject(long) UnrealizeObject32 -0359 stub UpdateColors +0359 stdcall UpdateColors(long) UpdateColors32 0360 stub WidenPath 0361 stub pstackConnect #late additions diff --git a/if1632/kernel.spec b/if1632/kernel.spec index 75faa9b8271..422e68e6889 100644 --- a/if1632/kernel.spec +++ b/if1632/kernel.spec @@ -41,7 +41,7 @@ type win16 38 pascal SetTaskSignalProc(word segptr) SetTaskSignalProc 41 return EnableDos 0 0 42 return DisableDos 0 0 -45 pascal16 LoadModule(ptr ptr) LoadModule +45 pascal16 LoadModule(ptr ptr) LoadModule16 46 pascal16 FreeModule(word) FreeModule16 47 pascal16 GetModuleHandle(segptr) WIN16_GetModuleHandle 48 pascal16 GetModuleUsage(word) GetModuleUsage @@ -92,7 +92,7 @@ type win16 93 pascal16 GetCodeHandle(segptr) GetCodeHandle 94 stub DefineHandleTable 95 pascal16 LoadLibrary(ptr) LoadLibrary16 -96 pascal16 FreeLibrary(word) FreeLibrary +96 pascal16 FreeLibrary(word) FreeLibrary16 97 pascal16 GetTempFileName(byte ptr word ptr) GetTempFileName16 98 return GetLastDiskChange 0 0 99 stub GetLPErrMode @@ -111,7 +111,7 @@ type win16 112 pascal16 GlobalUnWire(word) GlobalUnWire16 113 equate __AHSHIFT 3 114 equate __AHINCR 8 -115 pascal16 OutputDebugString(ptr) OutputDebugString +115 pascal16 OutputDebugString(ptr) OutputDebugString16 116 stub InitLib 117 pascal16 OldYield() OldYield 118 register GetTaskQueueDS() GetTaskQueueDS @@ -261,7 +261,7 @@ type win16 #351 BUNNY_351 352 pascal lstrcatn(segptr segptr word) lstrcatn16 353 pascal lstrcpyn(segptr segptr word) lstrcpyn16 -354 pascal GetAppCompatFlags(word) GetAppCompatFlags +354 pascal GetAppCompatFlags(word) GetAppCompatFlags16 355 pascal16 GetWinDebugInfo(ptr word) GetWinDebugInfo 356 pascal16 SetWinDebugInfo(ptr) SetWinDebugInfo 360 stub OpenFileEx diff --git a/if1632/kernel32.spec b/if1632/kernel32.spec index 2c51b8fd97c..f8281ee5ab1 100644 --- a/if1632/kernel32.spec +++ b/if1632/kernel32.spec @@ -278,10 +278,10 @@ base 1 0273 stdcall GetStartupInfoA(ptr) GetStartupInfo32A 0274 stdcall GetStartupInfoW(ptr) GetStartupInfo32W 0275 stdcall GetStdHandle(long) GetStdHandle -0276 stub GetStringTypeA -0277 stub GetStringTypeExA -0278 stub GetStringTypeExW -0279 stub GetStringTypeW +0276 stdcall GetStringTypeA(long long ptr long ptr) GetStringType32A +0277 stdcall GetStringTypeExA(long long ptr long ptr) GetStringTypeEx32A +0278 stdcall GetStringTypeExW(long long ptr long ptr) GetStringTypeEx32W +0279 stdcall GetStringTypeW(long ptr long ptr) GetStringType32W 0280 stdcall GetSystemDefaultLCID() GetSystemDefaultLCID 0281 stdcall GetSystemDefaultLangID() GetSystemDefaultLangID 0282 stdcall GetSystemDirectoryA(ptr long) GetSystemDirectory32A @@ -353,13 +353,13 @@ base 1 0348 stdcall InterlockedExchange(ptr) InterlockedExchange 0349 stdcall InterlockedIncrement(ptr) InterlockedIncrement 0350 stub InvalidateConsoleDIBits -0351 stdcall IsBadCodePtr(ptr long) WIN32_IsBadCodePtr -0352 stub IsBadHugeReadPtr -0353 stub IsBadHugeWritePtr -0354 stdcall IsBadReadPtr(ptr long) WIN32_IsBadReadPtr -0355 stub IsBadStringPtrA -0356 stub IsBadStringPtrW -0357 stdcall IsBadWritePtr(ptr long) WIN32_IsBadWritePtr +0351 stdcall IsBadCodePtr(ptr long) IsBadCodePtr32 +0352 stdcall IsBadHugeReadPtr(ptr long) IsBadHugeReadPtr32 +0353 stdcall IsBadHugeWritePtr(ptr long) IsBadHugeWritePtr32 +0354 stdcall IsBadReadPtr(ptr long) IsBadReadPtr32 +0355 stdcall IsBadStringPtrA(ptr long) IsBadStringPtr32A +0356 stdcall IsBadStringPtrW(ptr long) IsBadStringPtr32W +0357 stdcall IsBadWritePtr(ptr long) IsBadWritePtr32 0358 stdcall IsDBCSLeadByte(long) IsDBCSLeadByte32 0359 stdcall IsDBCSLeadByteEx(long long) IsDBCSLeadByteEx 0360 stub IsValidCodePage @@ -388,7 +388,7 @@ base 1 0383 stub LockFileEx 0384 stdcall LockResource(long) LockResource32 0385 stdcall MapViewOfFile(long long long long long) MapViewOfFile -0386 stdcall MapViewOfFileEx(long long long long long long) MapViewOfFileEx +0386 stdcall MapViewOfFileEx(long long long long long ptr) MapViewOfFileEx 0387 stdcall MoveFileA(ptr ptr) MoveFile32A 0388 stub MoveFileExA 0389 stub MoveFileExW @@ -399,15 +399,15 @@ base 1 0394 stub OpenEventA 0395 stub OpenEventW 0396 stdcall OpenFile(ptr ptr long) OpenFile32 -0397 stdcall OpenFileMappingA(long long ptr) OpenFileMapping -0398 stub OpenFileMappingW +0397 stdcall OpenFileMappingA(long long ptr) OpenFileMapping32A +0398 stdcall OpenFileMappingW(long long ptr) OpenFileMapping32W 0399 stub OpenMutexA 0400 stub OpenMutexW 0401 stub OpenProcess 0402 stub OpenProfileUserMapping 0403 stub OpenSemaphoreA 0404 stub OpenSemaphoreW -0405 stdcall OutputDebugStringA(ptr) OutputDebugString +0405 stdcall OutputDebugStringA(ptr) OutputDebugString32A 0406 stub OutputDebugStringW 0407 stub PeekConsoleInputA 0408 stub PeekConsoleInputW @@ -550,15 +550,15 @@ base 1 0545 stub VerLanguageNameA 0546 stub VerLanguageNameW 0547 stub VerifyConsoleIoHandle -0548 stdcall VirtualAlloc(ptr long long long) VirtualAlloc +0548 stdcall VirtualAlloc(ptr long long long) VirtualAlloc 0549 stub VirtualBufferExceptionHandler -0550 stdcall VirtualFree(ptr long long) VirtualFree -0551 stub VirtualLock +0550 stdcall VirtualFree(ptr long long) VirtualFree +0551 stdcall VirtualLock(ptr long) VirtualLock 0552 stdcall VirtualProtect(ptr long long ptr) VirtualProtect -0553 stub VirtualProtectEx +0553 stdcall VirtualProtectEx(long ptr long long ptr) VirtualProtectEx 0554 stdcall VirtualQuery(ptr ptr long) VirtualQuery -0555 stub VirtualQueryEx -0556 stub VirtualUnlock +0555 stdcall VirtualQueryEx(long ptr ptr long) VirtualQueryEx +0556 stdcall VirtualUnlock(ptr long) VirtualUnlock 0557 stub WaitCommEvent 0558 stub WaitForDebugEvent 0559 stub WaitForMultipleObjects @@ -659,3 +659,24 @@ base 1 0653 stub RegisterServiceProcess 0654 stub QueueUserAPC 0655 stub ConvertToGlobalHandle +0656 stub SMapLS_IP_EBP_8 +0657 stub SMapLS_IP_EBP_16 +0658 stub SMapLS_IP_EBP_20 +0659 stub SUnMapLS_IP_EBP_8 +0660 stub SUnMapLS_IP_EBP_16 +0661 stub SUnMapLS_IP_EBP_20 +0662 stub MapSL +0663 stub K32Thk1632Epilog +0664 stub K32Thk1632Prolog +0665 stub GetProcessFlags +0666 stub SMapLS_IP_EBP_24 +0667 stub SUnMapLS_IP_EBP_24 +0668 stub SMapLS_IP_EBP_32 +0669 stub SUnMapLS_IP_EBP_32 +0670 stub SMapLS_IP_EBP_28 +0671 stub SUnMapLS_IP_EBP_28 +0672 stub SMapLS_IP_EBP_40 +0673 stub SUnMapLS_IP_EBP_40 +0674 stub FreeSLCallback +0675 stub AllocSLCallback +0676 stub Callback28 diff --git a/if1632/mmsystem.spec b/if1632/mmsystem.spec index 6ec752ca120..482ff50bed9 100644 --- a/if1632/mmsystem.spec +++ b/if1632/mmsystem.spec @@ -5,7 +5,7 @@ type win16 2 pascal SNDPLAYSOUND(ptr word) sndPlaySound 5 pascal MMSYSTEMGETVERSION() mmsystemGetVersion 6 pascal DriverProc(long word word long long) DriverProc -30 pascal16 OutputDebugStr(ptr) OutputDebugString +30 pascal16 OutputDebugStr(ptr) OutputDebugString16 31 pascal DriverCallback(long word word word long long long) DriverCallback #32 pascal STACKENTER @@ -96,7 +96,7 @@ type win16 607 pascal timeGetTime() timeGetTime 701 pascal MCISENDCOMMAND(word word long long) mciSendCommand 702 pascal MCISENDSTRING(ptr ptr word word) mciSendString -703 pascal MCIGETDEVICEID(ptr) mciSendCommand +703 pascal MCIGETDEVICEID(ptr) mciGetDeviceID 706 pascal MCIGETERRORSTRING(long ptr word) mciGetErrorString #900 pascal MMTASKCREATE #902 pascal MMTASKBLOCK diff --git a/if1632/ntdll.spec b/if1632/ntdll.spec index 2208e91f21a..7ac608f0572 100644 --- a/if1632/ntdll.spec +++ b/if1632/ntdll.spec @@ -892,15 +892,15 @@ base 0 888 stub cos 889 stub fabs 890 stub floor -891 stub isalpha -892 stub isdigit -893 stub islower -894 stub isprint -895 stub isspace -896 stub isupper +891 stdcall isalpha(long) CRTDLL_isalpha +892 stdcall isdigit(long) CRTDLL_isdigit +893 stdcall islower(long) CRTDLL_islower +894 stdcall isprint(long) CRTDLL_isprint +895 stdcall isspace(long) CRTDLL_isspace +896 stdcall isupper(long) CRTDLL_isupper 897 stub iswalpha 898 stub iswctype -899 stub isxdigit +899 stdcall isxdigit(long) CRTDLL_isxdigit 900 stub labs 901 stub log 902 stub mbstowcs @@ -930,8 +930,8 @@ base 0 926 stub strstr 927 stdcall swprintf() CRTDLL_swprintf 928 stub tan -929 stub tolower -930 stub toupper +929 stdcall tolower(long) CRTDLL_tolower +930 stdcall toupper(long) CRTDLL_toupper 931 stub towlower 932 stub towupper 933 stub vsprintf diff --git a/if1632/ole2nls.spec b/if1632/ole2nls.spec index 49b2b2f55ad..1fb5bc3f1e2 100644 --- a/if1632/ole2nls.spec +++ b/if1632/ole2nls.spec @@ -7,7 +7,7 @@ type win16 4 pascal GetSystemDefaultLangID() GetSystemDefaultLangID 5 pascal GetLocaleInfoA(long long ptr word) GetLocaleInfoA 6 stub LCMAPSTRINGA -7 stub GETSTRINGTYPEA +7 pascal16 GetStringTypeA(long long ptr word ptr) GetStringType16 8 pascal16 CompareStringA(long long ptr word ptr word) CompareString16 #9 WEP 10 stub LIBMAIN diff --git a/if1632/relay.c b/if1632/relay.c index 75b4eb8de8b..045bb16dd1c 100644 --- a/if1632/relay.c +++ b/if1632/relay.c @@ -190,15 +190,28 @@ void RELAY_Unimplemented32( int nb_args, void *relay_addr, * (stack+4) arg1 * (stack) func to call */ -void RELAY_DebugCallTo16( int* stack, int nbargs ) +void RELAY_DebugCallTo16( int* stack, int nb_args ) { if (!debugging_relay) return; - printf( "CallTo16(func=%04x:%04x,ds=%04x", - HIWORD(stack[0]), LOWORD(stack[0]), CURRENT_DS ); - stack++; - while (nbargs--) printf( ",0x%04x", *stack++ ); - printf( ")\n" ); + if (nb_args == -1) /* Register function */ + { + CONTEXT *context = *(CONTEXT **)stack; + printf( "CallTo16(func=%04lx:%04x,ds=%04lx)\n", + CS_reg(context), IP_reg(context), DS_reg(context) ); + printf( " AX=%04x BX=%04x CX=%04x DX=%04x SI=%04x DI=%04x BP=%04x ES=%04x\n", + AX_reg(context), BX_reg(context), CX_reg(context), + DX_reg(context), SI_reg(context), DI_reg(context), + BP_reg(context), (WORD)ES_reg(context) ); + } + else + { + printf( "CallTo16(func=%04x:%04x,ds=%04x", + HIWORD(stack[0]), LOWORD(stack[0]), CURRENT_DS ); + stack++; + while (nb_args--) printf( ",0x%04x", *stack++ ); + printf( ")\n" ); + } } @@ -349,7 +362,8 @@ INT16 Throw( LPCATCHBUF lpbuf, INT16 retval ) static FARPROC16 entryPoint = NULL; if (!entryPoint) /* Get entry point for Throw() */ - entryPoint = MODULE_GetEntryPoint( GetModuleHandle("KERNEL"), 56 ); + entryPoint = MODULE_GetEntryPoint( GetModuleHandle16("KERNEL"), + 56 ); pFrame->entry_cs = SELECTOROF(entryPoint); pFrame->entry_ip = OFFSETOF(entryPoint); } diff --git a/if1632/shell.spec b/if1632/shell.spec index c9c907d4e3b..eaf6ec973f6 100644 --- a/if1632/shell.spec +++ b/if1632/shell.spec @@ -12,11 +12,11 @@ type win16 11 pascal16 DragQueryFile(word s_word ptr s_word) DragQueryFile 12 pascal16 DragFinish(word) DragFinish 13 pascal16 DragQueryPoint(word ptr) DragQueryPoint - 20 pascal16 ShellExecute(word ptr ptr ptr ptr s_word) ShellExecute - 21 pascal16 FindExecutable(ptr ptr ptr) FindExecutable + 20 pascal16 ShellExecute(word ptr ptr ptr ptr s_word) ShellExecute16 + 21 pascal16 FindExecutable(ptr ptr ptr) FindExecutable16 22 pascal16 ShellAbout(word ptr ptr word) ShellAbout16 33 pascal16 AboutDlgProc(word word word long) AboutDlgProc16 - 34 pascal16 ExtractIcon(word ptr s_word) ExtractIcon + 34 pascal16 ExtractIcon(word ptr s_word) ExtractIcon16 36 pascal16 ExtractAssociatedIcon(word ptr ptr) ExtractAssociatedIcon 37 pascal DoEnvironmentSubst(ptr word) DoEnvironmentSubst 38 pascal FindEnvironmentString(ptr) FindEnvironmentString diff --git a/if1632/shell32.spec b/if1632/shell32.spec index b7c65f70a4b..bef7073e93f 100644 --- a/if1632/shell32.spec +++ b/if1632/shell32.spec @@ -86,7 +86,7 @@ base 1 0081 stub SheShortenPathW 0082 stdcall ShellAboutA(long ptr ptr long) ShellAbout32A 0083 stdcall ShellAboutW(long ptr ptr long) ShellAbout32W -0084 stdcall ShellExecuteA(long ptr ptr ptr ptr long) ShellExecute +0084 stdcall ShellExecuteA(long ptr ptr ptr ptr long) ShellExecute32A 0085 stub ShellExecuteEx 0086 stub ShellExecuteExA 0087 stub ShellExecuteExW diff --git a/if1632/thunk.c b/if1632/thunk.c index 1d33e678be8..f56610310f7 100644 --- a/if1632/thunk.c +++ b/if1632/thunk.c @@ -148,7 +148,7 @@ BOOL16 THUNK_EnumMetaFile16( HDC16 hdc, HMETAFILE16 hmf, MFENUMPROC16 func, LPARAM lParam ) { DECL_THUNK( thunk, func, CallTo16_word_wllwl ); - return EnumMetaFile( hdc, hmf, (MFENUMPROC16)&thunk, lParam ); + return EnumMetaFile16( hdc, hmf, (MFENUMPROC16)&thunk, lParam ); } @@ -581,7 +581,7 @@ BOOL16 THUNK_SetDCHook( HDC16 hdc, FARPROC16 proc, DWORD dwHookData ) THUNK *thunk, *oldThunk; if (!defDCHookProc) /* Get DCHook Win16 entry point */ - defDCHookProc = MODULE_GetEntryPoint( GetModuleHandle("USER"), 362 ); + defDCHookProc = MODULE_GetEntryPoint( GetModuleHandle16("USER"), 362 ); if (proc != defDCHookProc) { @@ -610,8 +610,8 @@ DWORD THUNK_GetDCHook( HDC16 hdc, FARPROC16 *phookProc ) if (thunk == (THUNK *)DCHook) { if (!defDCHookProc) /* Get DCHook Win16 entry point */ - defDCHookProc = MODULE_GetEntryPoint( GetModuleHandle("USER"), - 362 ); + defDCHookProc = MODULE_GetEntryPoint(GetModuleHandle16("USER"), + 362 ); *phookProc = defDCHookProc; } else *phookProc = thunk->proc; @@ -644,6 +644,6 @@ UINT32 ThunkConnect32( struct thunkstruct *ths, LPSTR thunkfun16, ); fprintf(stdnimp," x1 = %lx\n",ths->x1); fprintf(stdnimp," x2 = %lx\n",ths->x2); - hmm=LoadModule(module16,NULL); + hmm=LoadModule16(module16,NULL); return TRUE; } diff --git a/if1632/user.spec b/if1632/user.spec index 1bff1ca96c8..564e790222a 100644 --- a/if1632/user.spec +++ b/if1632/user.spec @@ -47,7 +47,7 @@ heap 65520 44 pascal16 OpenIcon(word) OpenIcon16 45 pascal16 BringWindowToTop(word) BringWindowToTop16 46 pascal16 GetParent(word) GetParent16 -47 pascal16 IsWindow(word) IsWindow +47 pascal16 IsWindow(word) IsWindow16 48 pascal16 IsChild(word word) IsChild16 49 pascal16 IsWindowVisible(word) IsWindowVisible16 50 pascal16 FindWindow(segptr ptr) FindWindow16 @@ -107,14 +107,14 @@ heap 65520 105 pascal16 FlashWindow(word word) FlashWindow16 106 pascal16 GetKeyState(word) GetKeyState16 107 pascal DefWindowProc(word word word long) DefWindowProc16 -108 pascal16 GetMessage(segptr word word word) GetMessage +108 pascal16 GetMessage(segptr word word word) GetMessage16 109 pascal16 PeekMessage(ptr word word word word) PeekMessage16 -110 pascal16 PostMessage(word word word long) PostMessage +110 pascal16 PostMessage(word word word long) PostMessage16 111 pascal SendMessage(word word word long) SendMessage16 112 pascal16 WaitMessage() WaitMessage 113 pascal16 TranslateMessage(ptr) TranslateMessage16 114 pascal DispatchMessage(ptr) DispatchMessage16 -115 pascal16 ReplyMessage(long) ReplyMessage +115 pascal16 ReplyMessage(long) ReplyMessage16 116 pascal16 PostAppMessage(word word word long) PostAppMessage16 118 pascal16 RegisterWindowMessage(segptr) RegisterWindowMessage16 117 pascal16 WindowFromDC(word) WindowFromDC16 @@ -123,29 +123,29 @@ heap 65520 121 pascal SetWindowsHook(s_word segptr) THUNK_SetWindowsHook16 122 pascal CallWindowProc(segptr word word word long) CallWindowProc16 123 pascal16 CallMsgFilter(segptr s_word) CallMsgFilter16 -124 pascal16 UpdateWindow(word) UpdateWindow +124 pascal16 UpdateWindow(word) UpdateWindow16 125 pascal16 InvalidateRect(word ptr word) InvalidateRect16 126 pascal16 InvalidateRgn(word word word) InvalidateRgn16 127 pascal16 ValidateRect(word ptr) ValidateRect16 128 pascal16 ValidateRgn(word word) ValidateRgn16 -129 pascal16 GetClassWord(word s_word) GetClassWord -130 pascal16 SetClassWord(word s_word word) SetClassWord +129 pascal16 GetClassWord(word s_word) GetClassWord16 +130 pascal16 SetClassWord(word s_word word) SetClassWord16 131 pascal GetClassLong(word s_word) GetClassLong16 132 pascal SetClassLong(word s_word long) SetClassLong16 -133 pascal16 GetWindowWord(word s_word) GetWindowWord -134 pascal16 SetWindowWord(word s_word word) SetWindowWord +133 pascal16 GetWindowWord(word s_word) GetWindowWord16 +134 pascal16 SetWindowWord(word s_word word) SetWindowWord16 135 pascal GetWindowLong(word s_word) GetWindowLong16 136 pascal SetWindowLong(word s_word long) SetWindowLong16 137 pascal16 OpenClipboard(word) OpenClipboard16 138 pascal16 CloseClipboard() CloseClipboard16 139 pascal16 EmptyClipboard() EmptyClipboard16 140 pascal16 GetClipboardOwner() GetClipboardOwner16 -141 pascal16 SetClipboardData(word word) SetClipboardData -142 pascal16 GetClipboardData(word) GetClipboardData +141 pascal16 SetClipboardData(word word) SetClipboardData16 +142 pascal16 GetClipboardData(word) GetClipboardData16 143 pascal16 CountClipboardFormats() CountClipboardFormats16 144 pascal16 EnumClipboardFormats(word) EnumClipboardFormats16 145 pascal16 RegisterClipboardFormat(ptr) RegisterClipboardFormat16 -146 pascal16 GetClipboardFormatName(word ptr s_word) GetClipboardFormatName +146 pascal16 GetClipboardFormatName(word ptr s_word) GetClipboardFormatName16 147 pascal16 SetClipboardViewer(word) SetClipboardViewer16 148 pascal16 GetClipboardViewer() GetClipboardViewer16 149 pascal16 ChangeClipboardChain(word ptr) ChangeClipboardChain16 @@ -162,12 +162,12 @@ heap 65520 160 pascal16 DrawMenuBar(word) DrawMenuBar16 161 pascal16 GetMenuString(word word ptr s_word word) GetMenuString16 162 pascal16 HiliteMenuItem(word word word word) HiliteMenuItem16 -163 pascal16 CreateCaret(word word word word) CreateCaret -164 pascal16 DestroyCaret() DestroyCaret -165 pascal16 SetCaretPos(word word) SetCaretPos +163 pascal16 CreateCaret(word word word word) CreateCaret16 +164 pascal16 DestroyCaret() DestroyCaret16 +165 pascal16 SetCaretPos(word word) SetCaretPos16 166 pascal16 HideCaret(word) HideCaret16 167 pascal16 ShowCaret(word) ShowCaret16 -168 pascal16 SetCaretBlinkTime(word) SetCaretBlinkTime +168 pascal16 SetCaretBlinkTime(word) SetCaretBlinkTime16 169 pascal16 GetCaretBlinkTime() GetCaretBlinkTime16 170 pascal16 ArrangeIconicWindows(word) ArrangeIconicWindows16 171 pascal16 WinHelp(word ptr word long) WinHelp16 @@ -237,8 +237,8 @@ heap 65520 234 pascal16 UnhookWindowsHook(s_word segptr) THUNK_UnhookWindowsHook16 235 pascal DefHookProc(s_word word long ptr) DefHookProc16 236 pascal16 GetCapture() GetCapture16 -237 pascal16 GetUpdateRgn(word word word) GetUpdateRgn -238 pascal16 ExcludeUpdateRgn(word word) ExcludeUpdateRgn +237 pascal16 GetUpdateRgn(word word word) GetUpdateRgn16 +238 pascal16 ExcludeUpdateRgn(word word) ExcludeUpdateRgn16 239 pascal16 DialogBoxParam(word segptr word segptr long) DialogBoxParam16 240 pascal16 DialogBoxIndirectParam(word word word segptr long) DialogBoxIndirectParam16 @@ -316,7 +316,7 @@ heap 65520 331 pascal16 EnableHardwareInput(word) EnableHardwareInput 332 pascal16 UserYield() UserYield 333 stub IsUserIdle -334 pascal GetQueueStatus(word) GetQueueStatus +334 pascal GetQueueStatus(word) GetQueueStatus16 335 pascal16 GetInputState() GetInputState16 336 stub LoadCursorIconHandler 337 pascal GetMouseEventProc() GetMouseEventProc @@ -353,8 +353,7 @@ heap 65520 398 pascal16 GetClassInfoEx(word segptr ptr) GetClassInfoEx16 399 stub ChildWindowFromPointEx 400 stub FinalUserInit -402 pascal16 GetPriorityClipboardFormat(word ptr s_word) - GetPriorityClipboardFormat +402 pascal16 GetPriorityClipboardFormat(word ptr s_word) GetPriorityClipboardFormat16 403 pascal16 UnregisterClass(segptr word) UnregisterClass16 404 pascal16 GetClassInfo(word segptr ptr) GetClassInfo16 406 pascal16 CreateCursor(word word word word word ptr ptr) CreateCursor16 @@ -408,7 +407,7 @@ heap 65520 461 pascal16 SetInternalWindowPos(word word ptr ptr) SetInternalWindowPos16 462 pascal16 CalcChildScroll(word word) CalcChildScroll 463 pascal16 ScrollChildren(word word word long) ScrollChildren16 -464 pascal DragObject(word word word word word word) DragObject +464 pascal DragObject(word word word word word word) DragObject16 465 pascal16 DragDetect(word long) DragDetect16 466 pascal16 DrawFocusRect(word ptr) DrawFocusRect16 470 stub StringFunc diff --git a/if1632/user32.spec b/if1632/user32.spec index 20ac21493f3..71f7f0b55d2 100644 --- a/if1632/user32.spec +++ b/if1632/user32.spec @@ -67,7 +67,7 @@ base 1 0062 stdcall CountClipboardFormats() CountClipboardFormats32 0063 stub CreateAcceleratorTableA 0064 stub CreateAcceleratorTableW -0065 stdcall CreateCaret(long long long long) CreateCaret +0065 stdcall CreateCaret(long long long long) CreateCaret32 0066 stdcall CreateCursor(long long long long long ptr ptr) CreateCursor32 0067 stub CreateDesktopA 0068 stub CreateDesktopW @@ -134,7 +134,7 @@ base 1 0127 stdcall DeferWindowPos(long long long long long long long long) DeferWindowPos32 0128 stdcall DeleteMenu(long long long) DeleteMenu32 0129 stub DestroyAcceleratorTable -0130 stdcall DestroyCaret() DestroyCaret +0130 stdcall DestroyCaret() DestroyCaret32 0131 stdcall DestroyCursor(long) DestroyCursor32 0132 stdcall DestroyIcon(long) DestroyIcon32 0133 stdcall DestroyMenu(long) DestroyMenu32 @@ -198,7 +198,7 @@ base 1 0191 stub EnumWindowStationsW 0192 stdcall EnumWindows(ptr long) THUNK_EnumWindows32 0193 stdcall EqualRect(ptr ptr) EqualRect32 -0194 stdcall ExcludeUpdateRgn(long long) ExcludeUpdateRgn +0194 stdcall ExcludeUpdateRgn(long long) ExcludeUpdateRgn32 0195 stdcall ExitWindowsEx(long long) ExitWindowsEx 0196 stdcall FillRect(long ptr long) FillRect32 0197 stdcall FindWindowA(ptr ptr) FindWindow32A @@ -209,7 +209,7 @@ base 1 0202 stdcall FrameRect(long ptr long) FrameRect32 0203 stub FreeDDElParam 0204 stdcall GetActiveWindow() GetActiveWindow32 -0205 stdcall GetAppCompatFlags(long) GetAppCompatFlags +0205 stdcall GetAppCompatFlags(long) GetAppCompatFlags32 0206 stdcall GetAsyncKeyState(long) GetAsyncKeyState32 0207 stdcall GetCapture() GetCapture32 0208 stdcall GetCaretBlinkTime() GetCaretBlinkTime32 @@ -222,12 +222,12 @@ base 1 0215 stdcall GetClassLongW(long long) GetClassLong32W 0216 stdcall GetClassNameA(long ptr long) GetClassName32A 0217 stdcall GetClassNameW(long ptr long) GetClassName32W -0218 stdcall GetClassWord(long long) GetClassWord +0218 stdcall GetClassWord(long long) GetClassWord32 0219 stdcall GetClientRect(long long) GetClientRect32 0220 stdcall GetClipCursor(ptr) GetClipCursor32 -0221 stdcall GetClipboardData(long) GetClipboardData -0222 stub GetClipboardFormatNameA -0223 stub GetClipboardFormatNameW +0221 stdcall GetClipboardData(long) GetClipboardData32 +0222 stdcall GetClipboardFormatNameA(long ptr long) GetClipboardFormatName32A +0223 stdcall GetClipboardFormatNameW(long ptr long) GetClipboardFormatName32W 0224 stdcall GetClipboardOwner() GetClipboardOwner32 0225 stdcall GetClipboardViewer(long) GetClipboardViewer32 0226 stdcall GetCursor() GetCursor32 @@ -273,11 +273,11 @@ base 1 0266 stdcall GetMenuState(long long long) GetMenuState32 0267 stdcall GetMenuStringA(long long ptr long long) GetMenuString32A 0268 stdcall GetMenuStringW(long long ptr long long) GetMenuString32W -0269 stdcall GetMessageA(ptr long long long) USER32_GetMessageA +0269 stdcall GetMessageA(ptr long long long) GetMessage32A 0270 stdcall GetMessageExtraInfo() GetMessageExtraInfo 0271 stdcall GetMessagePos() GetMessagePos 0272 stdcall GetMessageTime() GetMessageTime -0273 stdcall GetMessageW(ptr long long long) USER32_GetMessageA +0273 stdcall GetMessageW(ptr long long long) GetMessage32W 0274 stdcall GetNextDlgGroupItem(long long long) GetNextDlgGroupItem32 0275 stdcall GetNextDlgTabItem(long long long) GetNextDlgTabItem32 0276 stdcall GetOpenClipboardWindow() GetOpenClipboardWindow32 @@ -301,7 +301,7 @@ base 1 0294 stub GetThreadDesktop 0295 stdcall GetTopWindow(long) GetTopWindow32 0296 stdcall GetUpdateRect(long ptr long) GetUpdateRect32 -0297 stdcall GetUpdateRgn(long long long) GetUpdateRgn +0297 stdcall GetUpdateRgn(long long long) GetUpdateRgn32 0298 stub GetUserObjectInformationA 0299 stub GetUserObjectInformationW 0300 stub GetUserObjectSecurity @@ -317,7 +317,7 @@ base 1 0310 stdcall GetWindowTextLengthW(long) GetWindowTextLength32W 0311 stdcall GetWindowTextW(long ptr long) GetWindowText32W 0312 stdcall GetWindowThreadProcessId(long ptr) GetWindowThreadProcessId -0313 stdcall GetWindowWord(long long) GetWindowWord +0313 stdcall GetWindowWord(long long) GetWindowWord32 0314 stdcall GrayStringA(long long ptr long long long long long long) THUNK_GrayString32A 0315 stdcall GrayStringW(long long ptr long long long long long long) THUNK_GrayString32W 0316 stdcall HideCaret(long) HideCaret32 @@ -351,7 +351,7 @@ base 1 0344 stdcall IsIconic(long) IsIconic32 0345 stdcall IsMenu(long) IsMenu32 0346 stdcall IsRectEmpty(ptr) IsRectEmpty32 -0347 stdcall IsWindow(long) IsWindow +0347 stdcall IsWindow(long) IsWindow32 0348 stdcall IsWindowEnabled(long) IsWindowEnabled32 0349 stdcall IsWindowUnicode(long) IsWindowUnicode 0350 stdcall IsWindowVisible(long) IsWindowVisible32 @@ -422,8 +422,8 @@ base 1 0415 stdcall PeekMessageA(ptr long long long long) PeekMessage32A 0416 stdcall PeekMessageW(ptr long long long long) PeekMessage32W 0417 stub PlaySoundEvent -0418 stdcall PostMessageA(long long long long) PostMessage -0419 stdcall PostMessageW(long long long long) PostMessage +0418 stdcall PostMessageA(long long long long) PostMessage32A +0419 stdcall PostMessageW(long long long long) PostMessage32W 0420 stdcall PostQuitMessage(long) PostQuitMessage32 0421 stub PostThreadMessageA 0422 stub PostThreadMessageW @@ -468,12 +468,12 @@ base 1 0461 stub ServerSetFunctionPointers 0462 stdcall SetActiveWindow(long) SetActiveWindow32 0463 stdcall SetCapture(long) SetCapture32 -0464 stdcall SetCaretBlinkTime(long) SetCaretBlinkTime -0465 stdcall SetCaretPos(long long) SetCaretPos +0464 stdcall SetCaretBlinkTime(long) SetCaretBlinkTime32 +0465 stdcall SetCaretPos(long long) SetCaretPos32 0466 stdcall SetClassLongA(long long long) SetClassLong32A 0467 stdcall SetClassLongW(long long long) SetClassLong32W -0468 stdcall SetClassWord(long long long) SetClassWord -0469 stdcall SetClipboardData(long long) SetClipboardData +0468 stdcall SetClassWord(long long long) SetClassWord32 +0469 stdcall SetClipboardData(long long) SetClipboardData32 0470 stdcall SetClipboardViewer(long) SetClipboardViewer32 0471 stdcall SetCursor(long) SetCursor32 0472 stub SetCursorContents @@ -527,7 +527,7 @@ base 1 0520 stub SetWindowStationUser 0521 stdcall SetWindowTextA(long ptr) SetWindowText32A 0522 stdcall SetWindowTextW(long ptr) SetWindowText32W -0523 stdcall SetWindowWord(long long long) SetWindowWord +0523 stdcall SetWindowWord(long long long) SetWindowWord32 0524 stdcall SetWindowsHookA(long ptr) SetWindowsHook32A 0525 stdcall SetWindowsHookExA(long long long long) SetWindowsHookEx32A 0526 stdcall SetWindowsHookExW(long long long long) SetWindowsHookEx32W @@ -570,7 +570,7 @@ base 1 0563 stdcall UnregisterClassW(ptr long) UnregisterClass32W 0564 stub UnregisterHotKey 0565 stub UpdatePerUserSystemParameters -0566 stdcall UpdateWindow(long) UpdateWindow +0566 stdcall UpdateWindow(long) UpdateWindow32 0567 stub UserClientDllInitialize 0568 stub UserRealizePalette 0569 stub UserRegisterWowHandlers @@ -603,3 +603,5 @@ base 1 0595 stub RegisterServicesProcess 0596 stub SetWindowRgn 0597 stub ToUnicodeEx +0598 stub DrawCaptionTempA +0599 stub RegisterNetworkCapabilities diff --git a/include/advapi32.h b/include/advapi32.h deleted file mode 100644 index 3bd8cff4983..00000000000 --- a/include/advapi32.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef __WINE_ADVAPI32_H -#define __WINE_ADVAPI32_H -#include "shell.h" - -BOOL GetUserNameA (char * lpBuffer, DWORD *nSize); - -#endif /* __WINE_ADVAPI32_H */ diff --git a/include/callback.h b/include/callback.h index 9dcf16542d0..7ef5fb2e760 100644 --- a/include/callback.h +++ b/include/callback.h @@ -8,6 +8,7 @@ #define __WINE_CALLBACK_H #include "wintypes.h" +#include "winnt.h" extern int CallTo32_LargeStack( int (*func)(), int nbargs, ... ); @@ -20,6 +21,7 @@ extern WORD CallTo16_word_ ( FARPROC16 ); #ifndef WINELIB +extern void CallTo16_regs_ ( const CONTEXT *context ); extern WORD CallTo16_word_w ( FARPROC16, WORD ); extern WORD CallTo16_word_ww ( FARPROC16, WORD, WORD ); extern WORD CallTo16_word_wl ( FARPROC16, WORD, LONG ); @@ -46,10 +48,6 @@ extern LONG CallTo16_long_lwwllwlllllw( FARPROC16, LONG, WORD, WORD, LONG, LONG, WORD, LONG, LONG, LONG, LONG, LONG, WORD); - -extern WORD CallTo16_regs_( FARPROC16 func, WORD ds, WORD es, WORD bp, WORD ax, - WORD bx, WORD cx, WORD dx, WORD si, WORD di ); - #define CallDriverProc( func, dwId, msg, hdrvr, lparam1, lparam2 ) \ CallTo16_long_lwwll( func, dwId, msg, hdrvr, lparam1, lparam2 ) #define CallTimeFuncProc( func, id, msg, dwUser, dw1, dw2 ) \ diff --git a/include/clipboard.h b/include/clipboard.h index 34f3bcf89dd..d0070df18b2 100644 --- a/include/clipboard.h +++ b/include/clipboard.h @@ -4,6 +4,6 @@ void CLIPBOARD_ReadSelection(Window w,Atom prop); void CLIPBOARD_ReleaseSelection(Window w,HWND32 hwnd); void CLIPBOARD_DisOwn(WND* pWnd); -BOOL CLIPBOARD_IsPresent(WORD wFormat); +BOOL32 CLIPBOARD_IsPresent(WORD wFormat); #endif /* __WINE_CLIPBOARD_H */ diff --git a/include/combo.h b/include/combo.h index 64511e59e36..82fe86cd4b9 100644 --- a/include/combo.h +++ b/include/combo.h @@ -17,5 +17,5 @@ typedef struct { BOOL16 bRedrawFlag; } HEADCOMBO,*LPHEADCOMBO; -LRESULT ComboBoxWndProc(HWND16 hwnd, UINT message, WPARAM16 wParam, LPARAM lParam); -LRESULT ComboLBoxWndProc(HWND16 hwnd, UINT message, WPARAM16 wParam, LPARAM lParam); +LRESULT ComboBoxWndProc(HWND16 hwnd, UINT16 message, WPARAM16 wParam, LPARAM lParam); +LRESULT ComboLBoxWndProc(HWND16 hwnd, UINT16 message, WPARAM16 wParam, LPARAM lParam); diff --git a/include/commdlg.h b/include/commdlg.h index 1761991414a..4e85561d1c3 100644 --- a/include/commdlg.h +++ b/include/commdlg.h @@ -62,8 +62,8 @@ typedef struct { SEGPTR lpstrInitialDir; SEGPTR lpstrTitle; DWORD Flags; - UINT nFileOffset; - UINT nFileExtension; + UINT16 nFileOffset; + UINT16 nFileExtension; SEGPTR lpstrDefExt; LPARAM lCustData; WNDPROC16 lpfnHook; @@ -101,8 +101,8 @@ typedef struct { DWORD Flags; /* one or more of the FR_?? */ SEGPTR lpstrFindWhat; /* ptr. to search string */ SEGPTR lpstrReplaceWith; /* ptr. to replace string */ - UINT wFindWhatLen; /* size of find buffer */ - UINT wReplaceWithLen; /* size of replace buffer */ + UINT16 wFindWhatLen; /* size of find buffer */ + UINT16 wReplaceWithLen; /* size of replace buffer */ LPARAM lCustData; /* data passed to hook fn. */ WNDPROC16 lpfnHook; SEGPTR lpTemplateName; /* custom template name */ @@ -145,7 +145,7 @@ typedef struct { /* contains cust. dlg. template */ SEGPTR lpszStyle WINE_PACKED; /* return the style field here */ /* must be LF_FACESIZE or bigger */ - UINT nFontType; /* same value reported to the */ + UINT16 nFontType; /* same value reported to the */ /* EnumFonts callback with the */ /* extra FONTTYPE_ bits added */ short nSizeMin WINE_PACKED; /* minimum pt size allowed & */ @@ -210,11 +210,11 @@ typedef struct { HGLOBAL16 hDevNames; HDC16 hDC; DWORD Flags; - UINT nFromPage; - UINT nToPage; - UINT nMinPage; - UINT nMaxPage; - UINT nCopies; + UINT16 nFromPage; + UINT16 nToPage; + UINT16 nMinPage; + UINT16 nMaxPage; + UINT16 nCopies; HINSTANCE16 hInstance; LPARAM lCustData; WNDPROC16 lpfnPrintHook; @@ -250,10 +250,10 @@ typedef PRINTDLG * LPPRINTDLG; #define PD_HIDEPRINTTOFILE 0x00100000 typedef struct { - UINT wDriverOffset; - UINT wDeviceOffset; - UINT wOutputOffset; - UINT wDefault; + UINT16 wDriverOffset; + UINT16 wDeviceOffset; + UINT16 wOutputOffset; + UINT16 wDefault; } DEVNAMES; typedef DEVNAMES * LPDEVNAMES; @@ -275,24 +275,24 @@ typedef DEVNAMES * LPDEVNAMES; #define CDERR_NOHOOK 0x000B #define CDERR_REGISTERMSGFAIL 0x000C -BOOL ChooseColor(LPCHOOSECOLOR lpChCol); +BOOL16 ChooseColor(LPCHOOSECOLOR lpChCol); DWORD CommDlgExtendedError(void); HWND16 FindText( SEGPTR find); -short GetFileTitle(LPCSTR lpFile, LPSTR lpTitle, UINT cbBuf); -BOOL GetOpenFileName(SEGPTR ofn); -BOOL GetSaveFileName(SEGPTR ofn); -BOOL PrintDlg( SEGPTR print); +short GetFileTitle(LPCSTR lpFile, LPSTR lpTitle, UINT16 cbBuf); +BOOL16 GetOpenFileName(SEGPTR ofn); +BOOL16 GetSaveFileName(SEGPTR ofn); +BOOL16 PrintDlg( SEGPTR print); HWND16 ReplaceText( SEGPTR find); -BOOL ChooseFont(LPCHOOSEFONT lpChFont); +BOOL16 ChooseFont(LPCHOOSEFONT lpChFont); -LRESULT FileOpenDlgProc(HWND16 hWnd, UINT wMsg, WPARAM16 wParam, LPARAM lParam); -LRESULT FileSaveDlgProc(HWND16 hWnd, UINT wMsg, WPARAM16 wParam, LPARAM lParam); -LRESULT ColorDlgProc(HWND16 hWnd, UINT wMsg, WPARAM16 wParam, LPARAM lParam); -LRESULT FindTextDlgProc(HWND16 hWnd, UINT wMsg, WPARAM16 wParam, LPARAM lParam); -LRESULT ReplaceTextDlgProc(HWND16 hWnd, UINT wMsg, WPARAM16 wParam, LPARAM lParam); -LRESULT PrintDlgProc(HWND16 hWnd, UINT wMsg, WPARAM16 wParam, LPARAM lParam); -LRESULT PrintSetupDlgProc(HWND16 hWnd, UINT wMsg, WPARAM16 wParam, LPARAM lParam); -LRESULT FormatCharDlgProc(HWND16 hWnd, UINT wMsg, WPARAM16 wParam, LPARAM lParam); +LRESULT FileOpenDlgProc(HWND16 hWnd, UINT16 wMsg, WPARAM16 wParam, LPARAM lParam); +LRESULT FileSaveDlgProc(HWND16 hWnd, UINT16 wMsg, WPARAM16 wParam, LPARAM lParam); +LRESULT ColorDlgProc(HWND16 hWnd, UINT16 wMsg, WPARAM16 wParam, LPARAM lParam); +LRESULT FindTextDlgProc(HWND16 hWnd, UINT16 wMsg, WPARAM16 wParam, LPARAM lParam); +LRESULT ReplaceTextDlgProc(HWND16 hWnd, UINT16 wMsg, WPARAM16 wParam, LPARAM lParam); +LRESULT PrintDlgProc(HWND16 hWnd, UINT16 wMsg, WPARAM16 wParam, LPARAM lParam); +LRESULT PrintSetupDlgProc(HWND16 hWnd, UINT16 wMsg, WPARAM16 wParam, LPARAM lParam); +LRESULT FormatCharDlgProc(HWND16 hWnd, UINT16 wMsg, WPARAM16 wParam, LPARAM lParam); #ifdef __cplusplus } diff --git a/include/config.h.in b/include/config.h.in index cf00d2821d2..12cd82d44c2 100644 --- a/include/config.h.in +++ b/include/config.h.in @@ -26,3 +26,9 @@ /* Define if you have the usleep function. */ #undef HAVE_USLEEP + +/* Define if you have the wait4 function. */ +#undef HAVE_WAIT4 + +/* Define if you have the waitpid function. */ +#undef HAVE_WAITPID diff --git a/include/dde_proc.h b/include/dde_proc.h index 84697cf02f5..e8a7ab1194c 100644 --- a/include/dde_proc.h +++ b/include/dde_proc.h @@ -51,9 +51,9 @@ int dde_reschedule(); void dde_wnd_setup(); /* setup Data structure of DDE windows */ /* Send ack. to hnd indicating that posted/sent msg. got to destination*/ -void dde_proc_send_ack(HWND16 wnd, BOOL val); -BOOL DDE_PostMessage( MSG16 *msg); -BOOL DDE_SendMessage( MSG16 *msg); +void dde_proc_send_ack(HWND16 wnd, BOOL32 val); +BOOL32 DDE_PostMessage( MSG16 *msg); +BOOL32 DDE_SendMessage( MSG16 *msg); int DDE_GetRemoteMessage(); void DDE_DestroyWindow(HWND16 hwnd); /* delete DDE info regarding hwnd */ void DDE_TestDDE(HWND16 hwnd); /* do we have dde handling in the window ?*/ diff --git a/include/debug.h b/include/debug.h index 7dc0330a5bc..32bd72cc036 100644 --- a/include/debug.h +++ b/include/debug.h @@ -78,6 +78,7 @@ #undef DEBUG_TIMER #undef DEBUG_TOOLHELP #undef DEBUG_VER +#undef DEBUG_VIRTUAL #undef DEBUG_VXD #undef DEBUG_WIN #undef DEBUG_WIN16DRV @@ -158,6 +159,7 @@ #define DEBUG_TIMER #define DEBUG_TOOLHELP #define DEBUG_VER +#define DEBUG_VIRTUAL #define DEBUG_VXD #define DEBUG_WIN #define DEBUG_WIN16DRV @@ -528,6 +530,11 @@ short debug_msg_enabled[]={ #else 0, #endif +#ifdef DEBUG_VIRTUAL + 1, +#else + 0, +#endif #ifdef DEBUG_VXD 1, #else @@ -1497,8 +1504,21 @@ extern short debug_msg_enabled[]; #endif #ifdef DEBUG_RUNTIME -#define dprintf_vxd if(!debug_msg_enabled[72]) ; else fprintf -#define debugging_vxd debug_msg_enabled[72] +#define dprintf_virtual if(!debug_msg_enabled[72]) ; else fprintf +#define debugging_virtual debug_msg_enabled[72] +#else +#ifdef DEBUG_VIRTUAL +#define dprintf_virtual fprintf +#define debugging_virtual 1 +#else +#define dprintf_virtual while(0) fprintf +#define debugging_virtual 0 +#endif +#endif + +#ifdef DEBUG_RUNTIME +#define dprintf_vxd if(!debug_msg_enabled[73]) ; else fprintf +#define debugging_vxd debug_msg_enabled[73] #else #ifdef DEBUG_VXD #define dprintf_vxd fprintf @@ -1510,8 +1530,8 @@ extern short debug_msg_enabled[]; #endif #ifdef DEBUG_RUNTIME -#define dprintf_win if(!debug_msg_enabled[73]) ; else fprintf -#define debugging_win debug_msg_enabled[73] +#define dprintf_win if(!debug_msg_enabled[74]) ; else fprintf +#define debugging_win debug_msg_enabled[74] #else #ifdef DEBUG_WIN #define dprintf_win fprintf @@ -1523,8 +1543,8 @@ extern short debug_msg_enabled[]; #endif #ifdef DEBUG_RUNTIME -#define dprintf_win16drv if(!debug_msg_enabled[74]) ; else fprintf -#define debugging_win16drv debug_msg_enabled[74] +#define dprintf_win16drv if(!debug_msg_enabled[75]) ; else fprintf +#define debugging_win16drv debug_msg_enabled[75] #else #ifdef DEBUG_WIN16DRV #define dprintf_win16drv fprintf @@ -1536,8 +1556,8 @@ extern short debug_msg_enabled[]; #endif #ifdef DEBUG_RUNTIME -#define dprintf_win32 if(!debug_msg_enabled[75]) ; else fprintf -#define debugging_win32 debug_msg_enabled[75] +#define dprintf_win32 if(!debug_msg_enabled[76]) ; else fprintf +#define debugging_win32 debug_msg_enabled[76] #else #ifdef DEBUG_WIN32 #define dprintf_win32 fprintf @@ -1549,8 +1569,8 @@ extern short debug_msg_enabled[]; #endif #ifdef DEBUG_RUNTIME -#define dprintf_winsock if(!debug_msg_enabled[76]) ; else fprintf -#define debugging_winsock debug_msg_enabled[76] +#define dprintf_winsock if(!debug_msg_enabled[77]) ; else fprintf +#define debugging_winsock debug_msg_enabled[77] #else #ifdef DEBUG_WINSOCK #define dprintf_winsock fprintf @@ -1637,6 +1657,7 @@ static char *debug_msg_name[] = { "timer", "toolhelp", "ver", + "virtual", "vxd", "win", "win16drv", diff --git a/include/debugger.h b/include/debugger.h index 1a1f02aa3b7..a6670ce03ba 100644 --- a/include/debugger.h +++ b/include/debugger.h @@ -307,6 +307,7 @@ extern void DEBUG_AddPath(const char * path); extern void DEBUG_List(struct list_id * line1, struct list_id * line2, int delta); extern void DEBUG_NukePath(void); +extern void DEBUG_Disassemble( const DBG_ADDR *, const DBG_ADDR*, int offset ); /* debugger/dbg.y */ extern void wine_debug( int signal, SIGCONTEXT *regs ); diff --git a/include/driver.h b/include/driver.h index 16ee0e2fa29..3eb7b7dbf40 100644 --- a/include/driver.h +++ b/include/driver.h @@ -54,7 +54,7 @@ typedef struct tagDRIVERITEM WORD count; struct tagDRIVERITEM *lpPrevItem; struct tagDRIVERITEM *lpNextItem; - DRIVERPROC lpDrvProc; + DRIVERPROC16 lpDrvProc; } DRIVERITEM, *LPDRIVERITEM; LRESULT DefDriverProc(DWORD dwDevID, HDRVR16 hDriv, UINT16 wMsg, diff --git a/include/file.h b/include/file.h index a2bd3764009..bb33157f50a 100644 --- a/include/file.h +++ b/include/file.h @@ -13,6 +13,16 @@ #define MAX_PATHNAME_LEN 1024 +/* The file object */ +typedef struct +{ + K32OBJ header; + int unix_handle; + int mode; + char *unix_name; + DWORD type; /* Type for win32 apps */ +} FILE_OBJECT; + /* Definition of a full DOS file name */ typedef struct { @@ -33,6 +43,10 @@ extern HFILE32 FILE_Dup( HFILE32 hFile ); extern HFILE32 FILE_Dup2( HFILE32 hFile1, HFILE32 hFile2 ); extern HFILE32 FILE_Open( LPCSTR path, INT32 mode ); extern BOOL32 FILE_SetFileType( HFILE32 hFile, DWORD type ); +extern LPVOID FILE_mmap( FILE_OBJECT *file, LPVOID start, + DWORD size_high, DWORD size_low, + DWORD offset_high, DWORD offset_low, + int prot, int flags ); extern HFILE32 _lcreat_uniq( LPCSTR path, INT32 attr ); /* files/directory.c */ diff --git a/include/font.h b/include/font.h index 12456adb00a..528fd66f44d 100644 --- a/include/font.h +++ b/include/font.h @@ -24,26 +24,6 @@ typedef struct #define MAX_FONTS 256 extern LPLOGFONT16 lpLogFontList[MAX_FONTS+1]; -/* may be switched... */ -#define GGO_BITMAP 0x4F4D -#define GGO_NATIVE 0x4F50 -typedef struct -{ - UINT16 gmBlackBoxX; - UINT16 gmBlackBoxY; - POINT16 gmptGlyphOrigin; - int gmCellIncX; - int gmCellIncY; -} GLYPHMETRICS,*LPGLYPHMETRICS; -typedef struct -{ - DWORD eM11; /* all type FIXED in Borlands Handbook */ - DWORD eM12; - DWORD eM21; - DWORD eM22; -} MAT2,*LPMAT2; - - extern BOOL32 FONT_Init( void ); extern INT16 FONT_GetObject16( FONTOBJ * font, INT16 count, LPSTR buffer ); extern INT32 FONT_GetObject32A( FONTOBJ * font, INT32 count, LPSTR buffer ); diff --git a/include/handle32.h b/include/handle32.h index 7699eedd93b..9fa3021b429 100644 --- a/include/handle32.h +++ b/include/handle32.h @@ -42,5 +42,8 @@ typedef struct extern void K32OBJ_IncCount( K32OBJ *ptr ); extern void K32OBJ_DecCount( K32OBJ *ptr ); +extern BOOL32 K32OBJ_AddName( K32OBJ *obj, LPCSTR name ); +extern K32OBJ *K32OBJ_FindName( LPCSTR name ); +extern K32OBJ *K32OBJ_FindNameType( LPCSTR name, K32OBJ_TYPE type ); #endif /* __WINE_HANDLE32_H */ diff --git a/include/libres.h b/include/libres.h index 6014a3b4765..addeb8448a2 100644 --- a/include/libres.h +++ b/include/libres.h @@ -4,8 +4,6 @@ #ifndef __WINE_LIBRES_H #define __WINE_LIBRES_H -#ifdef WINELIB - #include "wintypes.h" #include "resource.h" @@ -18,6 +16,4 @@ extern HGLOBAL32 LIBRES_LoadResource( HINSTANCE32 hModule, HRSRC32 hRsrc ); extern LPVOID LIBRES_LockResource( HGLOBAL32 handle ); extern DWORD LIBRES_SizeofResource( HINSTANCE32 hModule, HRSRC32 hRsrc ); -#endif /* WINELIB */ - #endif diff --git a/include/listbox.h b/include/listbox.h index d3f97ad57f4..27cee05e0c9 100644 --- a/include/listbox.h +++ b/include/listbox.h @@ -4,7 +4,7 @@ typedef struct tagLISTSTRUCT { MEASUREITEMSTRUCT16 mis; - UINT itemState; + UINT16 itemState; RECT16 itemRect; HLOCAL16 hData; char *itemText; @@ -28,12 +28,12 @@ typedef struct { DWORD dwStyle; /* added for COMBOLBOX style faking */ HWND16 hParent; HFONT16 hFont; - BOOL bRedrawFlag; - BOOL HasStrings; - BOOL OwnerDrawn; + BOOL32 bRedrawFlag; + BOOL32 HasStrings; + BOOL32 OwnerDrawn; WORD iNumStops; LPINT16 TabStops; - BOOL needMeasure; + BOOL32 needMeasure; HGLOBAL16 HeapSel; /* MDESC *Heap; */ } HEADLIST,*LPHEADLIST; @@ -44,22 +44,22 @@ extern void DestroyListBoxStruct(LPHEADLIST lphl); extern void ListBoxSendNotification(LPHEADLIST lphl, WORD code); -extern LPLISTSTRUCT ListBoxGetItem(LPHEADLIST lphl, UINT uIndex); +extern LPLISTSTRUCT ListBoxGetItem(LPHEADLIST lphl, UINT16 uIndex); extern int ListMaxFirstVisible(LPHEADLIST lphl); extern int ListBoxScrollToFocus(LPHEADLIST lphl); extern int ListBoxAddString(LPHEADLIST lphl, SEGPTR itemData); -extern int ListBoxInsertString(LPHEADLIST lphl, UINT uIndex, LPCSTR newstr); -extern int ListBoxGetText(LPHEADLIST lphl, UINT uIndex, LPSTR OutStr); -extern DWORD ListBoxGetItemData(LPHEADLIST lphl, UINT uIndex); -extern int ListBoxSetItemData(LPHEADLIST lphl, UINT uIndex, DWORD ItemData); -extern int ListBoxDeleteString(LPHEADLIST lphl, UINT uIndex); -extern int ListBoxFindString(LPHEADLIST lphl, UINT nFirst, SEGPTR MatchStr); -extern int ListBoxFindStringExact(LPHEADLIST lphl, UINT nFirst, SEGPTR MatchStr); +extern int ListBoxInsertString(LPHEADLIST lphl, UINT16 uIndex, LPCSTR newstr); +extern int ListBoxGetText(LPHEADLIST lphl, UINT16 uIndex, LPSTR OutStr); +extern DWORD ListBoxGetItemData(LPHEADLIST lphl, UINT16 uIndex); +extern int ListBoxSetItemData(LPHEADLIST lphl, UINT16 uIndex, DWORD ItemData); +extern int ListBoxDeleteString(LPHEADLIST lphl, UINT16 uIndex); +extern int ListBoxFindString(LPHEADLIST lphl, UINT16 nFirst, SEGPTR MatchStr); +extern int ListBoxFindStringExact(LPHEADLIST lphl, UINT16 nFirst, SEGPTR MatchStr); extern int ListBoxResetContent(LPHEADLIST lphl); extern int ListBoxSetCurSel(LPHEADLIST lphl, WORD wIndex); extern int ListBoxSetSel(LPHEADLIST lphl, WORD wIndex, WORD state); extern int ListBoxGetSel(LPHEADLIST lphl, WORD wIndex); -extern LONG ListBoxDirectory(LPHEADLIST lphl, UINT attrib, LPCSTR filespec); +extern LONG ListBoxDirectory(LPHEADLIST lphl, UINT16 attrib, LPCSTR filespec); extern int ListBoxGetItemRect(LPHEADLIST lphl, WORD wIndex, LPRECT16 rect); extern int ListBoxSetItemHeight(LPHEADLIST lphl, WORD wIndex, long height); extern int ListBoxFindNextMatch(LPHEADLIST lphl, WORD wChar); diff --git a/include/mdi.h b/include/mdi.h index ee6171f3adc..0ad2700e9d3 100644 --- a/include/mdi.h +++ b/include/mdi.h @@ -20,7 +20,7 @@ #define WM_MDICALCCHILDSCROLL 0x10AC /* this is exactly what Windows uses */ -extern LRESULT MDIClientWndProc(HWND16 hwnd, UINT message, +extern LRESULT MDIClientWndProc(HWND16 hwnd, UINT16 message, WPARAM16 wParam, LPARAM lParam); /* mdi.c */ typedef struct tagMDIWCL diff --git a/include/mmsystem.h b/include/mmsystem.h index 4f9601485db..56bc61119ec 100644 --- a/include/mmsystem.h +++ b/include/mmsystem.h @@ -19,7 +19,7 @@ typedef LPCSTR HPCSTR; /* a huge version of LPCSTR */ typedef WORD VERSION; /* major (high byte), minor (low byte) */ typedef struct { - UINT wType; /* indicates the contents of the union */ + UINT16 wType; /* indicates the contents of the union */ union { DWORD ms; /* milliseconds */ DWORD sample; /* samples */ @@ -108,7 +108,7 @@ typedef struct { #define CALLBACK_TASK 0x00020000l /* dwCallback is a HTASK */ #define CALLBACK_FUNCTION 0x00030000l /* dwCallback is a FARPROC */ -typedef void (*LPDRVCALLBACK) (HDRVR16 h, UINT uMessage, DWORD dwUser, DWORD dw1, DWORD dw2); +typedef void (*LPDRVCALLBACK) (HDRVR16 h, UINT16 uMessage, DWORD dwUser, DWORD dw1, DWORD dw2); #define MM_MICROSOFT 1 /* Microsoft Corp. */ @@ -132,7 +132,7 @@ typedef void (*LPDRVCALLBACK) (HDRVR16 h, UINT uMessage, DWORD dwUser, DWORD dw1 WORD mmsystemGetVersion(void); void OutputDebugStr(LPCSTR); -BOOL sndPlaySound(LPCSTR lpszSoundName, UINT uFlags); +BOOL16 sndPlaySound(LPCSTR lpszSoundName, UINT16 uFlags); #define SND_SYNC 0x0000 /* play synchronously (default) */ #define SND_ASYNC 0x0001 /* play asynchronously */ @@ -182,12 +182,12 @@ typedef struct wavehdr_tag { #define WHDR_INQUEUE 0x00000010 /* reserved for driver */ typedef struct { - UINT wMid; /* manufacturer ID */ - UINT wPid; /* product ID */ + UINT16 wMid; /* manufacturer ID */ + UINT16 wPid; /* product ID */ VERSION vDriverVersion; /* version of the driver */ char szPname[MAXPNAMELEN]; /* product name (NULL terminated string) */ DWORD dwFormats; /* formats supported */ - UINT wChannels; /* number of sources supported */ + UINT16 wChannels; /* number of sources supported */ DWORD dwSupport; /* functionality supported by driver */ } WAVEOUTCAPS, *LPWAVEOUTCAPS; @@ -198,12 +198,12 @@ typedef struct { #define WAVECAPS_SYNC 0x0010 typedef struct { - UINT wMid; /* manufacturer ID */ - UINT wPid; /* product ID */ + UINT16 wMid; /* manufacturer ID */ + UINT16 wPid; /* product ID */ VERSION vDriverVersion; /* version of the driver */ char szPname[MAXPNAMELEN]; /* product name (NULL terminated string) */ DWORD dwFormats; /* formats supported */ - UINT wChannels; /* number of channels supported */ + UINT16 wChannels; /* number of channels supported */ } WAVEINCAPS, *LPWAVEINCAPS; #define WAVE_INVALIDFORMAT 0x00000000 /* invalid format */ @@ -236,57 +236,57 @@ typedef struct { WORD wBitsPerSample; } PCMWAVEFORMAT, *LPPCMWAVEFORMAT; -UINT waveOutGetNumDevs(void); -UINT waveOutGetDevCaps(UINT uDeviceID, WAVEOUTCAPS * lpCaps, - UINT uSize); -UINT waveOutGetVolume(UINT uDeviceID, DWORD * lpdwVolume); -UINT waveOutSetVolume(UINT uDeviceID, DWORD dwVolume); -UINT waveOutGetErrorText(UINT uError, LPSTR lpText, UINT uSize); -UINT waveGetErrorText(UINT uError, LPSTR lpText, UINT uSize); -UINT waveOutOpen(HWAVEOUT16 * lphWaveOut, UINT uDeviceID, +UINT16 waveOutGetNumDevs(void); +UINT16 waveOutGetDevCaps(UINT16 uDeviceID, WAVEOUTCAPS * lpCaps, + UINT16 uSize); +UINT16 waveOutGetVolume(UINT16 uDeviceID, DWORD * lpdwVolume); +UINT16 waveOutSetVolume(UINT16 uDeviceID, DWORD dwVolume); +UINT16 waveOutGetErrorText(UINT16 uError, LPSTR lpText, UINT16 uSize); +UINT16 waveGetErrorText(UINT16 uError, LPSTR lpText, UINT16 uSize); +UINT16 waveOutOpen(HWAVEOUT16 * lphWaveOut, UINT16 uDeviceID, const LPWAVEFORMAT lpFormat, DWORD dwCallback, DWORD dwInstance, DWORD dwFlags); -UINT waveOutClose(HWAVEOUT16 hWaveOut); -UINT waveOutPrepareHeader(HWAVEOUT16 hWaveOut, - WAVEHDR * lpWaveOutHdr, UINT uSize); -UINT waveOutUnprepareHeader(HWAVEOUT16 hWaveOut, - WAVEHDR * lpWaveOutHdr, UINT uSize); -UINT waveOutWrite(HWAVEOUT16 hWaveOut, WAVEHDR * lpWaveOutHdr, - UINT uSize); -UINT waveOutPause(HWAVEOUT16 hWaveOut); -UINT waveOutRestart(HWAVEOUT16 hWaveOut); -UINT waveOutReset(HWAVEOUT16 hWaveOut); -UINT waveOutBreakLoop(HWAVEOUT16 hWaveOut); -UINT waveOutGetPosition(HWAVEOUT16 hWaveOut, MMTIME * lpInfo, - UINT uSize); -UINT waveOutGetPitch(HWAVEOUT16 hWaveOut, DWORD * lpdwPitch); -UINT waveOutSetPitch(HWAVEOUT16 hWaveOut, DWORD dwPitch); -UINT waveOutGetPlaybackRate(HWAVEOUT16 hWaveOut, DWORD * lpdwRate); -UINT waveOutSetPlaybackRate(HWAVEOUT16 hWaveOut, DWORD dwRate); -UINT waveOutGetID(HWAVEOUT16 hWaveOut, UINT * lpuDeviceID); +UINT16 waveOutClose(HWAVEOUT16 hWaveOut); +UINT16 waveOutPrepareHeader(HWAVEOUT16 hWaveOut, + WAVEHDR * lpWaveOutHdr, UINT16 uSize); +UINT16 waveOutUnprepareHeader(HWAVEOUT16 hWaveOut, + WAVEHDR * lpWaveOutHdr, UINT16 uSize); +UINT16 waveOutWrite(HWAVEOUT16 hWaveOut, WAVEHDR * lpWaveOutHdr, + UINT16 uSize); +UINT16 waveOutPause(HWAVEOUT16 hWaveOut); +UINT16 waveOutRestart(HWAVEOUT16 hWaveOut); +UINT16 waveOutReset(HWAVEOUT16 hWaveOut); +UINT16 waveOutBreakLoop(HWAVEOUT16 hWaveOut); +UINT16 waveOutGetPosition(HWAVEOUT16 hWaveOut, MMTIME * lpInfo, + UINT16 uSize); +UINT16 waveOutGetPitch(HWAVEOUT16 hWaveOut, DWORD * lpdwPitch); +UINT16 waveOutSetPitch(HWAVEOUT16 hWaveOut, DWORD dwPitch); +UINT16 waveOutGetPlaybackRate(HWAVEOUT16 hWaveOut, DWORD * lpdwRate); +UINT16 waveOutSetPlaybackRate(HWAVEOUT16 hWaveOut, DWORD dwRate); +UINT16 waveOutGetID(HWAVEOUT16 hWaveOut, UINT16 * lpuDeviceID); -DWORD waveOutMessage(HWAVEOUT16 hWaveOut, UINT uMessage, DWORD dw1, DWORD dw2); +DWORD waveOutMessage(HWAVEOUT16 hWaveOut, UINT16 uMessage, DWORD dw1, DWORD dw2); -UINT waveInGetNumDevs(void); -UINT waveInGetDevCaps(UINT uDeviceID, WAVEINCAPS * lpCaps, - UINT uSize); -UINT waveInGetErrorText(UINT uError, LPSTR lpText, UINT uSize); -UINT waveInOpen(HWAVEIN16 * lphWaveIn, UINT uDeviceID, +UINT16 waveInGetNumDevs(void); +UINT16 waveInGetDevCaps(UINT16 uDeviceID, WAVEINCAPS * lpCaps, + UINT16 uSize); +UINT16 waveInGetErrorText(UINT16 uError, LPSTR lpText, UINT16 uSize); +UINT16 waveInOpen(HWAVEIN16 * lphWaveIn, UINT16 uDeviceID, const LPWAVEFORMAT lpFormat, DWORD dwCallback, DWORD dwInstance, DWORD dwFlags); -UINT waveInClose(HWAVEIN16 hWaveIn); -UINT waveInPrepareHeader(HWAVEIN16 hWaveIn, - WAVEHDR * lpWaveInHdr, UINT uSize); -UINT waveInUnprepareHeader(HWAVEIN16 hWaveIn, - WAVEHDR * lpWaveInHdr, UINT uSize); -UINT waveInAddBuffer(HWAVEIN16 hWaveIn, - WAVEHDR * lpWaveInHdr, UINT uSize); -UINT waveInStart(HWAVEIN16 hWaveIn); -UINT waveInStop(HWAVEIN16 hWaveIn); -UINT waveInReset(HWAVEIN16 hWaveIn); -UINT waveInGetPosition(HWAVEIN16 hWaveIn, MMTIME * lpInfo, - UINT uSize); -UINT waveInGetID(HWAVEIN16 hWaveIn, UINT * lpuDeviceID); +UINT16 waveInClose(HWAVEIN16 hWaveIn); +UINT16 waveInPrepareHeader(HWAVEIN16 hWaveIn, + WAVEHDR * lpWaveInHdr, UINT16 uSize); +UINT16 waveInUnprepareHeader(HWAVEIN16 hWaveIn, + WAVEHDR * lpWaveInHdr, UINT16 uSize); +UINT16 waveInAddBuffer(HWAVEIN16 hWaveIn, + WAVEHDR * lpWaveInHdr, UINT16 uSize); +UINT16 waveInStart(HWAVEIN16 hWaveIn); +UINT16 waveInStop(HWAVEIN16 hWaveIn); +UINT16 waveInReset(HWAVEIN16 hWaveIn); +UINT16 waveInGetPosition(HWAVEIN16 hWaveIn, MMTIME * lpInfo, + UINT16 uSize); +UINT16 waveInGetID(HWAVEIN16 hWaveIn, UINT16 * lpuDeviceID); -DWORD waveInMessage(HWAVEIN16 hWaveIn, UINT uMessage, DWORD dw1, DWORD dw2); +DWORD waveInMessage(HWAVEIN16 hWaveIn, UINT16 uMessage, DWORD dw1, DWORD dw2); #define MIDIERR_UNPREPARED (MIDIERR_BASE + 0) /* header not prepared */ #define MIDIERR_STILLPLAYING (MIDIERR_BASE + 1) /* still something playing */ @@ -327,14 +327,14 @@ typedef WORD *LPKEYARRAY; #define MIDI_UNCACHE 4 typedef struct { - UINT wMid; /* manufacturer ID */ - UINT wPid; /* product ID */ + UINT16 wMid; /* manufacturer ID */ + UINT16 wPid; /* product ID */ VERSION vDriverVersion; /* version of the driver */ char szPname[MAXPNAMELEN]; /* product name (NULL terminated string) */ - UINT wTechnology; /* type of device */ - UINT wVoices; /* # of voices (internal synth only) */ - UINT wNotes; /* max # of notes (internal synth only) */ - UINT wChannelMask; /* channels used (internal synth only) */ + UINT16 wTechnology; /* type of device */ + UINT16 wVoices; /* # of voices (internal synth only) */ + UINT16 wNotes; /* max # of notes (internal synth only) */ + UINT16 wChannelMask; /* channels used (internal synth only) */ DWORD dwSupport; /* functionality supported by driver */ } MIDIOUTCAPS, *LPMIDIOUTCAPS; @@ -349,8 +349,8 @@ typedef struct { #define MIDICAPS_CACHE 0x0004 typedef struct { - UINT wMid; /* manufacturer ID */ - UINT wPid; /* product ID */ + UINT16 wMid; /* manufacturer ID */ + UINT16 wPid; /* product ID */ VERSION vDriverVersion; /* version of the driver */ char szPname[MAXPNAMELEN]; /* product name (NULL terminated string) */ } MIDIINCAPS, *LPMIDIINCAPS; @@ -369,60 +369,60 @@ typedef struct { #define MHDR_PREPARED 0x00000002 /* set if header prepared */ #define MHDR_INQUEUE 0x00000004 /* reserved for driver */ -UINT midiOutGetNumDevs(void); -UINT midiOutGetDevCaps(UINT uDeviceID, - MIDIOUTCAPS * lpCaps, UINT uSize); -UINT midiOutGetVolume(UINT uDeviceID, DWORD * lpdwVolume); -UINT midiOutSetVolume(UINT uDeviceID, DWORD dwVolume); -UINT midiOutGetErrorText(UINT uError, LPSTR lpText, UINT uSize); -UINT midiGetErrorText(UINT uError, LPSTR lpText, UINT uSize); -UINT midiOutOpen(HMIDIOUT16 * lphMidiOut, UINT uDeviceID, +UINT16 midiOutGetNumDevs(void); +UINT16 midiOutGetDevCaps(UINT16 uDeviceID, + MIDIOUTCAPS * lpCaps, UINT16 uSize); +UINT16 midiOutGetVolume(UINT16 uDeviceID, DWORD * lpdwVolume); +UINT16 midiOutSetVolume(UINT16 uDeviceID, DWORD dwVolume); +UINT16 midiOutGetErrorText(UINT16 uError, LPSTR lpText, UINT16 uSize); +UINT16 midiGetErrorText(UINT16 uError, LPSTR lpText, UINT16 uSize); +UINT16 midiOutOpen(HMIDIOUT16 * lphMidiOut, UINT16 uDeviceID, DWORD dwCallback, DWORD dwInstance, DWORD dwFlags); -UINT midiOutClose(HMIDIOUT16 hMidiOut); -UINT midiOutPrepareHeader(HMIDIOUT16 hMidiOut, - MIDIHDR * lpMidiOutHdr, UINT uSize); -UINT midiOutUnprepareHeader(HMIDIOUT16 hMidiOut, - MIDIHDR * lpMidiOutHdr, UINT uSize); -UINT midiOutShortMsg(HMIDIOUT16 hMidiOut, DWORD dwMsg); -UINT midiOutLongMsg(HMIDIOUT16 hMidiOut, - MIDIHDR * lpMidiOutHdr, UINT uSize); -UINT midiOutReset(HMIDIOUT16 hMidiOut); -UINT midiOutCachePatches(HMIDIOUT16 hMidiOut, - UINT uBank, WORD * lpwPatchArray, UINT uFlags); -UINT midiOutCacheDrumPatches(HMIDIOUT16 hMidiOut, - UINT uPatch, WORD * lpwKeyArray, UINT uFlags); -UINT midiOutGetID(HMIDIOUT16 hMidiOut, UINT * lpuDeviceID); +UINT16 midiOutClose(HMIDIOUT16 hMidiOut); +UINT16 midiOutPrepareHeader(HMIDIOUT16 hMidiOut, + MIDIHDR * lpMidiOutHdr, UINT16 uSize); +UINT16 midiOutUnprepareHeader(HMIDIOUT16 hMidiOut, + MIDIHDR * lpMidiOutHdr, UINT16 uSize); +UINT16 midiOutShortMsg(HMIDIOUT16 hMidiOut, DWORD dwMsg); +UINT16 midiOutLongMsg(HMIDIOUT16 hMidiOut, + MIDIHDR * lpMidiOutHdr, UINT16 uSize); +UINT16 midiOutReset(HMIDIOUT16 hMidiOut); +UINT16 midiOutCachePatches(HMIDIOUT16 hMidiOut, + UINT16 uBank, WORD * lpwPatchArray, UINT16 uFlags); +UINT16 midiOutCacheDrumPatches(HMIDIOUT16 hMidiOut, + UINT16 uPatch, WORD * lpwKeyArray, UINT16 uFlags); +UINT16 midiOutGetID(HMIDIOUT16 hMidiOut, UINT16 * lpuDeviceID); -DWORD midiOutMessage(HMIDIOUT16 hMidiOut, UINT uMessage, DWORD dw1, DWORD dw2); +DWORD midiOutMessage(HMIDIOUT16 hMidiOut, UINT16 uMessage, DWORD dw1, DWORD dw2); -UINT midiInGetNumDevs(void); -UINT midiInGetDevCaps(UINT uDeviceID, - LPMIDIINCAPS lpCaps, UINT uSize); -UINT midiInGetErrorText(UINT uError, LPSTR lpText, UINT uSize); -UINT midiInOpen(HMIDIIN16 * lphMidiIn, UINT uDeviceID, +UINT16 midiInGetNumDevs(void); +UINT16 midiInGetDevCaps(UINT16 uDeviceID, + LPMIDIINCAPS lpCaps, UINT16 uSize); +UINT16 midiInGetErrorText(UINT16 uError, LPSTR lpText, UINT16 uSize); +UINT16 midiInOpen(HMIDIIN16 * lphMidiIn, UINT16 uDeviceID, DWORD dwCallback, DWORD dwInstance, DWORD dwFlags); -UINT midiInClose(HMIDIIN16 hMidiIn); -UINT midiInPrepareHeader(HMIDIIN16 hMidiIn, - MIDIHDR * lpMidiInHdr, UINT uSize); -UINT midiInUnprepareHeader(HMIDIIN16 hMidiIn, - MIDIHDR * lpMidiInHdr, UINT uSize); -UINT midiInAddBuffer(HMIDIIN16 hMidiIn, - MIDIHDR * lpMidiInHdr, UINT uSize); -UINT midiInStart(HMIDIIN16 hMidiIn); -UINT midiInStop(HMIDIIN16 hMidiIn); -UINT midiInReset(HMIDIIN16 hMidiIn); -UINT midiInGetID(HMIDIIN16 hMidiIn, UINT * lpuDeviceID); +UINT16 midiInClose(HMIDIIN16 hMidiIn); +UINT16 midiInPrepareHeader(HMIDIIN16 hMidiIn, + MIDIHDR * lpMidiInHdr, UINT16 uSize); +UINT16 midiInUnprepareHeader(HMIDIIN16 hMidiIn, + MIDIHDR * lpMidiInHdr, UINT16 uSize); +UINT16 midiInAddBuffer(HMIDIIN16 hMidiIn, + MIDIHDR * lpMidiInHdr, UINT16 uSize); +UINT16 midiInStart(HMIDIIN16 hMidiIn); +UINT16 midiInStop(HMIDIIN16 hMidiIn); +UINT16 midiInReset(HMIDIIN16 hMidiIn); +UINT16 midiInGetID(HMIDIIN16 hMidiIn, UINT16 * lpuDeviceID); -DWORD midiInMessage(HMIDIIN16 hMidiIn, UINT uMessage, DWORD dw1, DWORD dw2); +DWORD midiInMessage(HMIDIIN16 hMidiIn, UINT16 uMessage, DWORD dw1, DWORD dw2); #define AUX_MAPPER (-1) typedef struct { - UINT wMid; /* manufacturer ID */ - UINT wPid; /* product ID */ + UINT16 wMid; /* manufacturer ID */ + UINT16 wPid; /* product ID */ VERSION vDriverVersion; /* version of the driver */ char szPname[MAXPNAMELEN]; /* product name (NULL terminated string) */ - UINT wTechnology; /* type of device */ + UINT16 wTechnology; /* type of device */ DWORD dwSupport; /* functionality supported by driver */ } AUXCAPS, *LPAUXCAPS; @@ -432,35 +432,35 @@ typedef struct { #define AUXCAPS_VOLUME 0x0001 /* supports volume control */ #define AUXCAPS_LRVOLUME 0x0002 /* separate left-right volume control */ -UINT auxGetNumDevs(void); -UINT auxGetDevCaps(UINT uDeviceID, AUXCAPS * lpCaps, UINT uSize); -UINT auxSetVolume(UINT uDeviceID, DWORD dwVolume); -UINT auxGetVolume(UINT uDeviceID, DWORD * lpdwVolume); +UINT16 auxGetNumDevs(void); +UINT16 auxGetDevCaps(UINT16 uDeviceID, AUXCAPS * lpCaps, UINT16 uSize); +UINT16 auxSetVolume(UINT16 uDeviceID, DWORD dwVolume); +UINT16 auxGetVolume(UINT16 uDeviceID, DWORD * lpdwVolume); -DWORD auxOutMessage(UINT uDeviceID, UINT uMessage, DWORD dw1, DWORD dw2); +DWORD auxOutMessage(UINT16 uDeviceID, UINT16 uMessage, DWORD dw1, DWORD dw2); #define TIMERR_NOERROR (0) /* no error */ #define TIMERR_NOCANDO (TIMERR_BASE+1) /* request not completed */ #define TIMERR_STRUCT (TIMERR_BASE+33) /* time struct size */ -typedef void (*LPTIMECALLBACK) (UINT uTimerID, UINT uMessage, DWORD dwUser, DWORD dw1, DWORD dw2); +typedef void (*LPTIMECALLBACK) (UINT16 uTimerID, UINT16 uMessage, DWORD dwUser, DWORD dw1, DWORD dw2); #define TIME_ONESHOT 0 /* program timer for single event */ #define TIME_PERIODIC 1 /* program for continuous periodic event */ typedef struct { - UINT wPeriodMin; /* minimum period supported */ - UINT wPeriodMax; /* maximum period supported */ + UINT16 wPeriodMin; /* minimum period supported */ + UINT16 wPeriodMax; /* maximum period supported */ } TIMECAPS, *LPTIMECAPS; -UINT timeGetSystemTime(MMTIME * lpTime, UINT uSize); +UINT16 timeGetSystemTime(MMTIME * lpTime, UINT16 uSize); DWORD timeGetTime(void); -UINT timeSetEvent(UINT uDelay, UINT uResolution, - LPTIMECALLBACK lpFunction, DWORD dwUser, UINT uFlags); -UINT timeKillEvent(UINT uTimerID); -UINT timeGetDevCaps(TIMECAPS * lpTimeCaps, UINT uSize); -UINT timeBeginPeriod(UINT uPeriod); -UINT timeEndPeriod(UINT uPeriod); +UINT16 timeSetEvent(UINT16 uDelay, UINT16 uResolution, + LPTIMECALLBACK lpFunction, DWORD dwUser, UINT16 uFlags); +UINT16 timeKillEvent(UINT16 uTimerID); +UINT16 timeGetDevCaps(TIMECAPS * lpTimeCaps, UINT16 uSize); +UINT16 timeBeginPeriod(UINT16 uPeriod); +UINT16 timeEndPeriod(UINT16 uPeriod); #define JOYERR_NOERROR (0) /* no error */ #define JOYERR_PARMS (JOYERR_BASE+5) /* bad parameters */ @@ -480,35 +480,35 @@ UINT timeEndPeriod(UINT uPeriod); #define JOYSTICKID2 1 typedef struct { - UINT wMid; /* manufacturer ID */ - UINT wPid; /* product ID */ + UINT16 wMid; /* manufacturer ID */ + UINT16 wPid; /* product ID */ char szPname[MAXPNAMELEN]; /* product name (NULL terminated string) */ - UINT wXmin; /* minimum x position value */ - UINT wXmax; /* maximum x position value */ - UINT wYmin; /* minimum y position value */ - UINT wYmax; /* maximum y position value */ - UINT wZmin; /* minimum z position value */ - UINT wZmax; /* maximum z position value */ - UINT wNumButtons; /* number of buttons */ - UINT wPeriodMin; /* minimum message period when captured */ - UINT wPeriodMax; /* maximum message period when captured */ + UINT16 wXmin; /* minimum x position value */ + UINT16 wXmax; /* maximum x position value */ + UINT16 wYmin; /* minimum y position value */ + UINT16 wYmax; /* maximum y position value */ + UINT16 wZmin; /* minimum z position value */ + UINT16 wZmax; /* maximum z position value */ + UINT16 wNumButtons; /* number of buttons */ + UINT16 wPeriodMin; /* minimum message period when captured */ + UINT16 wPeriodMax; /* maximum message period when captured */ } JOYCAPS, *LPJOYCAPS; typedef struct { - UINT wXpos; /* x position */ - UINT wYpos; /* y position */ - UINT wZpos; /* z position */ - UINT wButtons; /* button states */ + UINT16 wXpos; /* x position */ + UINT16 wYpos; /* y position */ + UINT16 wZpos; /* z position */ + UINT16 wButtons; /* button states */ } JOYINFO, *LPJOYINFO; -UINT joyGetDevCaps(UINT uJoyID, JOYCAPS * lpCaps, UINT uSize); -UINT joyGetNumDevs(void); -UINT joyGetPos(UINT uJoyID, JOYINFO * lpInfo); -UINT joyGetThreshold(UINT uJoyID, UINT * lpuThreshold); -UINT joyReleaseCapture(UINT uJoyID); -UINT joySetCapture(HWND16 hwnd, UINT uJoyID, UINT uPeriod, - BOOL bChanged); -UINT joySetThreshold(UINT uJoyID, UINT uThreshold); +UINT16 joyGetDevCaps(UINT16 uJoyID, JOYCAPS * lpCaps, UINT16 uSize); +UINT16 joyGetNumDevs(void); +UINT16 joyGetPos(UINT16 uJoyID, JOYINFO * lpInfo); +UINT16 joyGetThreshold(UINT16 uJoyID, UINT16 * lpuThreshold); +UINT16 joyReleaseCapture(UINT16 uJoyID); +UINT16 joySetCapture(HWND16 hwnd, UINT16 uJoyID, UINT16 uPeriod, + BOOL16 bChanged); +UINT16 joySetThreshold(UINT16 uJoyID, UINT16 uThreshold); #define MMIOERR_BASE 256 #define MMIOERR_FILENOTFOUND (MMIOERR_BASE + 1) /* file not found */ @@ -525,14 +525,14 @@ UINT joySetThreshold(UINT uJoyID, UINT uThreshold); #define CFSEPCHAR '+' /* compound file name separator char. */ typedef DWORD FOURCC; /* a four character code */ -typedef LONG (*LPMMIOPROC)(LPSTR lpmmioinfo, UINT uMessage, +typedef LONG (*LPMMIOPROC)(LPSTR lpmmioinfo, UINT16 uMessage, LPARAM lParam1, LPARAM lParam2); typedef struct { DWORD dwFlags; /* general status flags */ FOURCC fccIOProc; /* pointer to I/O procedure */ LPMMIOPROC pIOProc; /* pointer to I/O procedure */ - UINT wErrorRet; /* place for error to be returned */ + UINT16 wErrorRet; /* place for error to be returned */ HTASK16 htask; /* alternate local task */ /* fields maintained by MMIO functions during buffered I/O */ LONG cchBuffer; /* size of I/O buffer (or 0L) */ @@ -621,48 +621,48 @@ typedef struct _MMCKINFO ( (DWORD)(BYTE)(ch0) | ( (DWORD)(BYTE)(ch1) << 8 ) | \ ( (DWORD)(BYTE)(ch2) << 16 ) | ( (DWORD)(BYTE)(ch3) << 24 ) ) -FOURCC mmioStringToFOURCC(LPCSTR sz, UINT uFlags); +FOURCC mmioStringToFOURCC(LPCSTR sz, UINT16 uFlags); LPMMIOPROC mmioInstallIOProc(FOURCC fccIOProc, LPMMIOPROC pIOProc, DWORD dwFlags); HMMIO16 mmioOpen(LPSTR szFileName, MMIOINFO * lpmmioinfo, DWORD dwOpenFlags); -UINT mmioRename(LPCSTR szFileName, LPCSTR szNewFileName, +UINT16 mmioRename(LPCSTR szFileName, LPCSTR szNewFileName, MMIOINFO * lpmmioinfo, DWORD dwRenameFlags); -UINT mmioClose(HMMIO16 hmmio, UINT uFlags); +UINT16 mmioClose(HMMIO16 hmmio, UINT16 uFlags); LONG mmioRead(HMMIO16 hmmio, HPSTR pch, LONG cch); LONG mmioWrite(HMMIO16 hmmio, HPCSTR pch, LONG cch); LONG mmioSeek(HMMIO16 hmmio, LONG lOffset, int iOrigin); -UINT mmioGetInfo(HMMIO16 hmmio, MMIOINFO * lpmmioinfo, UINT uFlags); -UINT mmioSetInfo(HMMIO16 hmmio, const MMIOINFO * lpmmioinfo, UINT uFlags); -UINT mmioSetBuffer(HMMIO16 hmmio, LPSTR pchBuffer, LONG cchBuffer, - UINT uFlags); -UINT mmioFlush(HMMIO16 hmmio, UINT uFlags); -UINT mmioAdvance(HMMIO16 hmmio, MMIOINFO * lpmmioinfo, UINT uFlags); -LONG mmioSendMessage(HMMIO16 hmmio, UINT uMessage, +UINT16 mmioGetInfo(HMMIO16 hmmio, MMIOINFO * lpmmioinfo, UINT16 uFlags); +UINT16 mmioSetInfo(HMMIO16 hmmio, const MMIOINFO * lpmmioinfo, UINT16 uFlags); +UINT16 mmioSetBuffer(HMMIO16 hmmio, LPSTR pchBuffer, LONG cchBuffer, + UINT16 uFlags); +UINT16 mmioFlush(HMMIO16 hmmio, UINT16 uFlags); +UINT16 mmioAdvance(HMMIO16 hmmio, MMIOINFO * lpmmioinfo, UINT16 uFlags); +LONG mmioSendMessage(HMMIO16 hmmio, UINT16 uMessage, LPARAM lParam1, LPARAM lParam2); -UINT mmioDescend(HMMIO16 hmmio, MMCKINFO * lpck, - const MMCKINFO * lpckParent, UINT uFlags); -UINT mmioAscend(HMMIO16 hmmio, MMCKINFO * lpck, UINT uFlags); -UINT mmioCreateChunk(HMMIO16 hmmio, MMCKINFO * lpck, UINT uFlags); +UINT16 mmioDescend(HMMIO16 hmmio, MMCKINFO * lpck, + const MMCKINFO * lpckParent, UINT16 uFlags); +UINT16 mmioAscend(HMMIO16 hmmio, MMCKINFO * lpck, UINT16 uFlags); +UINT16 mmioCreateChunk(HMMIO16 hmmio, MMCKINFO * lpck, UINT16 uFlags); -typedef UINT (*YIELDPROC) (UINT uDeviceID, DWORD dwYieldData); +typedef UINT16 (*YIELDPROC) (UINT16 uDeviceID, DWORD dwYieldData); -DWORD mciSendCommand (UINT uDeviceID, UINT uMessage, +DWORD mciSendCommand (UINT16 uDeviceID, UINT16 uMessage, DWORD dwParam1, DWORD dwParam2); DWORD mciSendString (LPCSTR lpstrCommand, - LPSTR lpstrReturnString, UINT uReturnLength, HWND16 hwndCallback); -UINT mciGetDeviceID (LPCSTR lpstrName); -UINT mciGetDeviceIDFromElementID (DWORD dwElementID, + LPSTR lpstrReturnString, UINT16 uReturnLength, HWND16 hwndCallback); +UINT16 mciGetDeviceID (LPCSTR lpstrName); +UINT16 mciGetDeviceIDFromElementID (DWORD dwElementID, LPCSTR lpstrType); -BOOL mciGetErrorString (DWORD wError, LPSTR lpstrBuffer, - UINT uLength); -BOOL mciSetYieldProc (UINT uDeviceID, YIELDPROC fpYieldProc, +BOOL16 mciGetErrorString (DWORD wError, LPSTR lpstrBuffer, + UINT16 uLength); +BOOL16 mciSetYieldProc (UINT16 uDeviceID, YIELDPROC fpYieldProc, DWORD dwYieldData); -HTASK16 mciGetCreatorTask(UINT uDeviceID); -YIELDPROC mciGetYieldProc (UINT uDeviceID, DWORD * lpdwYieldData); +HTASK16 mciGetCreatorTask(UINT16 uDeviceID); +YIELDPROC mciGetYieldProc (UINT16 uDeviceID, DWORD * lpdwYieldData); #define MCIERR_INVALID_DEVICE_ID (MCIERR_BASE + 1) #define MCIERR_UNRECOGNIZED_KEYWORD (MCIERR_BASE + 3) @@ -928,11 +928,11 @@ typedef struct { typedef struct { DWORD dwCallback; - UINT wDeviceID; - UINT wReserved0; - LPCSTR lpstrDeviceType; - LPCSTR lpstrElementName; - LPCSTR lpstrAlias; + UINT16 wDeviceID; + UINT16 wReserved0; + SEGPTR lpstrDeviceType; + SEGPTR lpstrElementName; + SEGPTR lpstrAlias; } MCI_OPEN_PARMS, *LPMCI_OPEN_PARMS; typedef struct { @@ -970,8 +970,8 @@ typedef struct { LPSTR lpstrReturn; DWORD dwRetSize; DWORD dwNumber; - UINT wDeviceType; - UINT wReserved0; + UINT16 wDeviceType; + UINT16 wReserved0; } MCI_SYSINFO_PARMS, *LPMCI_SYSINFO_PARMS; typedef struct { @@ -983,9 +983,9 @@ typedef struct { typedef struct { DWORD dwCallback; int nVirtKey; - UINT wReserved0; + UINT16 wReserved0; HWND16 hwndBreak; - UINT wReserved1; + UINT16 wReserved1; } MCI_BREAK_PARMS, *LPMCI_BREAK_PARMS; typedef struct { @@ -1092,11 +1092,11 @@ typedef struct { typedef struct { DWORD dwCallback; - UINT wDeviceID; - UINT wReserved0; - LPCSTR lpstrDeviceType; - LPCSTR lpstrElementName; - LPCSTR lpstrAlias; + UINT16 wDeviceID; + UINT16 wReserved0; + SEGPTR lpstrDeviceType; + SEGPTR lpstrElementName; + SEGPTR lpstrAlias; DWORD dwBufferSeconds; } MCI_WAVE_OPEN_PARMS, *LPMCI_WAVE_OPEN_PARMS; @@ -1110,20 +1110,20 @@ typedef struct { DWORD dwCallback; DWORD dwTimeFormat; DWORD dwAudio; - UINT wInput; - UINT wReserved0; - UINT wOutput; - UINT wReserved1; - UINT wFormatTag; - UINT wReserved2; - UINT nChannels; - UINT wReserved3; + UINT16 wInput; + UINT16 wReserved0; + UINT16 wOutput; + UINT16 wReserved1; + UINT16 wFormatTag; + UINT16 wReserved2; + UINT16 nChannels; + UINT16 wReserved3; DWORD nSamplesPerSec; DWORD nAvgBytesPerSec; - UINT nBlockAlign; - UINT wReserved4; - UINT wBitsPerSample; - UINT wReserved5; + UINT16 nBlockAlign; + UINT16 wReserved4; + UINT16 wBitsPerSample; + UINT16 wReserved5; } MCI_WAVE_SET_PARMS, * LPMCI_WAVE_SET_PARMS; #define MCI_SEQ_DIV_PPQN (0 + MCI_SEQ_OFFSET) @@ -1213,14 +1213,14 @@ typedef struct { typedef struct { DWORD dwCallback; - UINT wDeviceID; - UINT wReserved0; - LPCSTR lpstrDeviceType; - LPCSTR lpstrElementName; - LPCSTR lpstrAlias; + UINT16 wDeviceID; + UINT16 wReserved0; + SEGPTR lpstrDeviceType; + SEGPTR lpstrElementName; + SEGPTR lpstrAlias; DWORD dwStyle; HWND16 hWndParent; - UINT wReserved1; + UINT16 wReserved1; } MCI_ANIM_OPEN_PARMS, *LPMCI_ANIM_OPEN_PARMS; typedef struct { @@ -1238,9 +1238,9 @@ typedef struct { typedef struct { DWORD dwCallback; HWND16 hWnd; - UINT wReserved1; - UINT nCmdShow; - UINT wReserved2; + UINT16 wReserved1; + UINT16 nCmdShow; + UINT16 wReserved2; LPCSTR lpstrText; } MCI_ANIM_WINDOW_PARMS, *LPMCI_ANIM_WINDOW_PARMS; @@ -1293,22 +1293,22 @@ typedef struct { typedef struct { DWORD dwCallback; - UINT wDeviceID; - UINT wReserved0; + UINT16 wDeviceID; + UINT16 wReserved0; LPCSTR lpstrDeviceType; LPCSTR lpstrElementName; LPCSTR lpstrAlias; DWORD dwStyle; HWND16 hWndParent; - UINT wReserved1; + UINT16 wReserved1; } MCI_OVLY_OPEN_PARMS, *LPMCI_OVLY_OPEN_PARMS; typedef struct { DWORD dwCallback; HWND16 hWnd; - UINT wReserved1; - UINT nCmdShow; - UINT wReserved2; + UINT16 wReserved1; + UINT16 nCmdShow; + UINT16 wReserved2; LPCSTR lpstrText; } MCI_OVLY_WINDOW_PARMS, *LPMCI_OVLY_WINDOW_PARMS; @@ -1494,30 +1494,30 @@ typedef struct { } MIDIOPENDESC, *LPMIDIOPENDESC; typedef struct { - UINT wDelay; - UINT wResolution; + UINT16 wDelay; + UINT16 wResolution; LPTIMECALLBACK lpFunction; DWORD dwUser; - UINT wFlags; + UINT16 wFlags; } TIMEREVENT, *LPTIMEREVENT; typedef struct { - UINT wDeviceID; /* device ID */ + UINT16 wDeviceID; /* device ID */ LPSTR lpstrParams; /* parameter string for entry in SYSTEM.INI */ - UINT wCustomCommandTable; /* custom command table (0xFFFF if none) */ + UINT16 wCustomCommandTable; /* custom command table (0xFFFF if none) */ /* filled in by the driver */ - UINT wType; /* driver type */ + UINT16 wType; /* driver type */ /* filled in by the driver */ } MCI_OPEN_DRIVER_PARMS, * LPMCI_OPEN_DRIVER_PARMS; -DWORD mciGetDriverData(UINT uDeviceID); -BOOL mciSetDriverData(UINT uDeviceID, DWORD dwData); -UINT mciDriverYield(UINT uDeviceID); -BOOL mciDriverNotify(HWND16 hwndCallback, UINT uDeviceID, - UINT uStatus); -UINT mciLoadCommandResource(HINSTANCE16 hInstance, - LPCSTR lpResName, UINT uType); -BOOL mciFreeCommandResource(UINT uTable); +DWORD mciGetDriverData(UINT16 uDeviceID); +BOOL16 mciSetDriverData(UINT16 uDeviceID, DWORD dwData); +UINT16 mciDriverYield(UINT16 uDeviceID); +BOOL16 mciDriverNotify(HWND16 hwndCallback, UINT16 uDeviceID, + UINT16 uStatus); +UINT16 mciLoadCommandResource(HINSTANCE16 hInstance, + LPCSTR lpResName, UINT16 uType); +BOOL16 mciFreeCommandResource(UINT16 uTable); #define DCB_NULL 0x0000 #define DCB_WINDOW 0x0001 /* dwCallback is a HWND */ @@ -1526,8 +1526,8 @@ BOOL mciFreeCommandResource(UINT uTable); #define DCB_TYPEMASK 0x0007 #define DCB_NOSWITCH 0x0008 /* don't switch stacks for callback */ -BOOL DriverCallback(DWORD dwCallBack, UINT uFlags, HANDLE16 hDev, - WORD wMsg, DWORD dwUser, DWORD dwParam1, DWORD dwParam2); +BOOL16 DriverCallback(DWORD dwCallBack, UINT16 uFlags, HANDLE16 hDev, + WORD wMsg, DWORD dwUser, DWORD dwParam1, DWORD dwParam2); DWORD auxMessage(WORD wDevID, WORD wMsg, DWORD dwUser, DWORD dwParam1, DWORD dwParam2); DWORD midMessage(WORD wDevID, WORD wMsg, DWORD dwUser, diff --git a/include/module.h b/include/module.h index 953cdfbf97a..872b498f4b8 100644 --- a/include/module.h +++ b/include/module.h @@ -137,7 +137,7 @@ extern BOOL16 BUILTIN_ParseDLLOptions( const char *str ); extern void BUILTIN_PrintDLLs(void); /* ne_image.c */ -extern BOOL16 NE_LoadSegment( HMODULE16 hModule, WORD segnum ); +extern BOOL32 NE_LoadSegment( HMODULE16 hModule, WORD segnum ); extern void NE_FixupPrologs( NE_MODULE *pModule ); extern void NE_InitializeDLLs( HMODULE16 hModule ); diff --git a/include/ole.h b/include/ole.h index fdff577994f..0692ee05736 100644 --- a/include/ole.h +++ b/include/ole.h @@ -139,13 +139,13 @@ typedef enum { } OLE_RELEASE_METHOD; typedef struct _OLETARGETDEVICE { - UINT otdDeviceNameOffset; - UINT otdDriverNameOffset; - UINT otdPortNameOffset; - UINT otdExtDevmodeOffset; - UINT otdExtDevmodeSize; - UINT otdEnvironmentOffset; - UINT otdEnvironmentSize; + UINT16 otdDeviceNameOffset; + UINT16 otdDriverNameOffset; + UINT16 otdPortNameOffset; + UINT16 otdExtDevmodeOffset; + UINT16 otdExtDevmodeSize; + UINT16 otdEnvironmentOffset; + UINT16 otdEnvironmentSize; BYTE otdData[1]; /* ... */ } OLETARGETDEVICE; @@ -206,8 +206,8 @@ typedef struct _OLECLIENT { typedef struct _OLEOBJECTVTBL { void * (*QueryProtocol)(LPOLEOBJECT,OLE_LPCSTR); OLESTATUS (*Release)(LPOLEOBJECT); - OLESTATUS (*Show)(LPOLEOBJECT,BOOL); - OLESTATUS (*DoVerb)(LPOLEOBJECT,UINT,BOOL,BOOL); + OLESTATUS (*Show)(LPOLEOBJECT,BOOL16); + OLESTATUS (*DoVerb)(LPOLEOBJECT,UINT16,BOOL16,BOOL16); OLESTATUS (*GetData)(LPOLEOBJECT,OLECLIPFORMAT,HANDLE16 *); OLESTATUS (*SetData)(LPOLEOBJECT,OLECLIPFORMAT,HANDLE16); OLESTATUS (*SetTargetDevice)(LPOLEOBJECT,HGLOBAL16); @@ -222,8 +222,8 @@ typedef struct _OLEOBJECTVTBL { OLESTATUS (*Equal)(LPOLEOBJECT,LPOLEOBJECT); OLESTATUS (*CopyToClipBoard)(LPOLEOBJECT); OLESTATUS (*Draw)(LPOLEOBJECT,HDC16,LPRECT16,LPRECT16,HDC16); - OLESTATUS (*Activate)(LPOLEOBJECT,UINT,BOOL,BOOL,HWND16,LPRECT16); - OLESTATUS (*Execute)(LPOLEOBJECT,HGLOBAL16,UINT); + OLESTATUS (*Activate)(LPOLEOBJECT,UINT16,BOOL16,BOOL16,HWND16,LPRECT16); + OLESTATUS (*Execute)(LPOLEOBJECT,HGLOBAL16,UINT16); OLESTATUS (*Close)(LPOLEOBJECT); OLESTATUS (*Update)(LPOLEOBJECT); OLESTATUS (*Reconnect)(LPOLEOBJECT); @@ -241,7 +241,7 @@ typedef struct _OLEOBJECTVTBL { OLESTATUS (*QueryReleaseError)(LPOLEOBJECT); OLE_RELEASE_METHOD (*QueryReleaseMethod)(LPOLEOBJECT); OLESTATUS (*RequestData)(LPOLEOBJECT,OLECLIPFORMAT); - OLESTATUS (*ObjectLong)(LPOLEOBJECT,UINT,LPLONG); + OLESTATUS (*ObjectLong)(LPOLEOBJECT,UINT16,LPLONG); } OLEOBJECTVTBL; typedef OLEOBJECTVTBL* LPOLEOBJECTVTBL; @@ -251,7 +251,7 @@ typedef struct _OLEOBJECT { OLESTATUS OleRegisterServer(LPCSTR,LPOLESERVER,LHSERVER *,HINSTANCE16,OLE_SERVER_USE); -OLESTATUS OleUnblockServer(LHSERVER,BOOL *); +OLESTATUS OleUnblockServer(LHSERVER,BOOL16 *); OLESTATUS OleRegisterServerDoc(LHSERVER,LPCSTR,LPOLESERVERDOC,LHSERVERDOC *); OLESTATUS OleRegisterClientDoc(LPCSTR,LPCSTR,LONG,LHCLIENTDOC *); OLESTATUS OleRenameClientDoc(LHCLIENTDOC,LPCSTR); diff --git a/include/options.h b/include/options.h index 421f3e648a4..3f051d6f3d6 100644 --- a/include/options.h +++ b/include/options.h @@ -23,7 +23,8 @@ typedef enum LANG_Eo, /* Esperanto */ LANG_It, /* Italian */ LANG_Ko, /* Korean */ - LANG_Hu /* Hungarian */ + LANG_Hu, /* Hungarian */ + LANG_Pl /* Polish */ } WINE_LANGUAGE; typedef struct diff --git a/include/peexe.h b/include/peexe.h index c75450cbc89..d60affc973e 100644 --- a/include/peexe.h +++ b/include/peexe.h @@ -4,6 +4,7 @@ #ifndef __WINE_PEEXE_H #define __WINE_PEEXE_H +#include "wintypes.h" typedef struct _IMAGE_FILE_HEADER { WORD Machine; diff --git a/include/selectors.h b/include/selectors.h index 673a2f5e76f..cbb00ee04f8 100644 --- a/include/selectors.h +++ b/include/selectors.h @@ -18,38 +18,24 @@ extern WORD SELECTOR_ReallocBlock( WORD sel, const void *base, DWORD size, BOOL32 readonly ); extern void SELECTOR_FreeBlock( WORD sel, WORD count ); -#ifndef WINELIB - -#ifdef linux -#define WINE_DATA_SELECTOR 0x2b -#define WINE_CODE_SELECTOR 0x23 -#endif /* linux */ - -#ifdef __NetBSD__ -#define WINE_DATA_SELECTOR 0x1f -#define WINE_CODE_SELECTOR 0x17 -#endif /* NetBSD */ - -#ifdef __FreeBSD__ -#define WINE_DATA_SELECTOR 0x27 -#define WINE_CODE_SELECTOR 0x1f -#endif /* FreeBSD */ - -#if defined(__svr4__) || defined(_SCO_DS) -#define WINE_DATA_SELECTOR 0x1f -#define WINE_CODE_SELECTOR 0x17 -#endif /* svr4 || SCO_DS */ - -#ifdef __EMX__ /* Is this always true? */ -#define WINE_DATA_SELECTOR 0x53 -#define WINE_CODE_SELECTOR 0x5b -#endif /* OS/2 */ - -#else /* WINELIB */ - -#define WINE_DATA_SELECTOR 0x00 -#define WINE_CODE_SELECTOR 0x00 - -#endif /* WINELIB */ +#if defined(linux) +# define WINE_DATA_SELECTOR 0x2b +# define WINE_CODE_SELECTOR 0x23 +#elif defined(__NetBSD__) +# define WINE_DATA_SELECTOR 0x1f +# define WINE_CODE_SELECTOR 0x17 +#elif defined(__FreeBSD__) +# define WINE_DATA_SELECTOR 0x27 +# define WINE_CODE_SELECTOR 0x1f +#elif defined(__svr4__) || defined(_SCO_DS) +# define WINE_DATA_SELECTOR 0x1f +# define WINE_CODE_SELECTOR 0x17 +#elif defined(__EMX__) +# define WINE_DATA_SELECTOR 0x53 /* Is this always true? */ +# define WINE_CODE_SELECTOR 0x5b +#else +# define WINE_DATA_SELECTOR 0x00 +# define WINE_CODE_SELECTOR 0x00 +#endif #endif /* __WINE_SELECTORS_H */ diff --git a/include/static.h b/include/static.h index c664cc45ef6..45a8fff02ff 100644 --- a/include/static.h +++ b/include/static.h @@ -17,6 +17,7 @@ typedef struct HICON16 hIcon; /* Icon handle for SS_ICON controls */ } STATICINFO; -extern LRESULT StaticWndProc(HWND16 hWnd,UINT uMsg,WPARAM16 wParam,LPARAM lParam ); +extern LRESULT StaticWndProc( HWND16 hWnd, UINT16 uMsg, WPARAM16 wParam, + LPARAM lParam ); #endif /* __WINE_STATIC_H */ diff --git a/include/stddebug.h b/include/stddebug.h index d09f25d2116..46c012ce2af 100644 --- a/include/stddebug.h +++ b/include/stddebug.h @@ -148,6 +148,7 @@ #undef DEBUG_TIMER #undef DEBUG_TOOLHELP #undef DEBUG_VER +#undef DEBUG_VIRTUAL #undef DEBUG_VXD #undef DEBUG_WIN #undef DEBUG_WIN16DRV @@ -228,6 +229,7 @@ #define DEBUG_TIMER #define DEBUG_TOOLHELP #define DEBUG_VER +#define DEBUG_VIRTUAL #define DEBUG_VXD #define DEBUG_WIN #define DEBUG_WIN16DRV diff --git a/include/stress.h b/include/stress.h index 0d1ef930bcc..86f718c817d 100644 --- a/include/stress.h +++ b/include/stress.h @@ -11,16 +11,16 @@ extern "C" { #define EDS_CUR 2 #define EDS_TEMP 3 -BOOL AllocGDIMem(UINT); -BOOL AllocMem(DWORD); -BOOL AllocUserMem(UINT); -int AllocDiskSpace(long, UINT); +BOOL16 AllocGDIMem(UINT16); +BOOL16 AllocMem(DWORD); +BOOL16 AllocUserMem(UINT16); +int AllocDiskSpace(long, UINT16); int AllocFileHandles(int); int GetFreeFileHandles(void); void FreeAllGDIMem(void); void FreeAllMem(void); void FreeAllUserMem(void); -void UnAllocDiskSpace(UINT); +void UnAllocDiskSpace(UINT16); void UnAllocFileHandles(void); #ifdef __cplusplus diff --git a/include/toolhelp.h b/include/toolhelp.h index dbebe8176a5..fbf21a8b529 100644 --- a/include/toolhelp.h +++ b/include/toolhelp.h @@ -8,6 +8,8 @@ #define MAX_PATH 255 #define MAX_CLASSNAME 255 +#pragma pack(1) + /* Global heap */ typedef struct @@ -343,4 +345,7 @@ struct { FARPROC16 lpfnErrorAddr; void **lpBadParam; } NFYLOGPARAMERROR; + +#pragma pack(4) + #endif /* __WINE_TOOLHELP_H */ diff --git a/include/w32sys.h b/include/w32sys.h index 6388b6c20d4..94c8d29af78 100644 --- a/include/w32sys.h +++ b/include/w32sys.h @@ -8,10 +8,10 @@ #define __WINE__W32SYS_H typedef struct _WIN32SINFO { - BYTE bMajor; - BYTE bMinor; - WORD wBuildNumber; - BOOL fDebug; + BYTE bMajor; + BYTE bMinor; + WORD wBuildNumber; + BOOL16 fDebug; } WIN32SINFO, *LPWIN32SINFO; #endif /* __WINE_W32SYS_H */ diff --git a/include/win16drv.h b/include/win16drv.h index c6d734937bc..6b2c8a8a65e 100644 --- a/include/win16drv.h +++ b/include/win16drv.h @@ -161,4 +161,7 @@ extern BOOL32 WIN16DRV_GetTextMetrics( DC *dc, TEXTMETRIC32A *metrics ); extern BOOL32 WIN16DRV_ExtTextOut( DC *dc, INT32 x, INT32 y, UINT32 flags, const RECT32 *lprect, LPCSTR str, UINT32 count, const INT32 *lpDx ); +extern HGDIOBJ32 WIN16DRV_SelectObject( DC *dc, HGDIOBJ32 handle ); + + #endif /* __WINE_WIN16DRV_H */ diff --git a/include/winbase.h b/include/winbase.h index 45ce7548b3a..ed071eb8177 100644 --- a/include/winbase.h +++ b/include/winbase.h @@ -29,6 +29,10 @@ #define MEM_MAPPED 0x00040000 #define MEM_TOP_DOWN 0x00100000 +#define FILE_BEGIN 0 +#define FILE_CURRENT 1 +#define FILE_END 2 + #define FILE_CASE_SENSITIVE_SEARCH 0x00000001 #define FILE_CASE_PRESERVED_NAMES 0x00000002 #define FILE_UNICODE_ON_DISK 0x00000004 diff --git a/include/windows.h b/include/windows.h index 3bc9505c36b..6448f636312 100644 --- a/include/windows.h +++ b/include/windows.h @@ -1426,6 +1426,45 @@ DECL_WINELIB_TYPE_AW(FONTENUMPROCEX); #define ETO_OPAQUE 0x02 #define ETO_CLIPPED 0x04 +typedef struct +{ + UINT16 gmBlackBoxX; + UINT16 gmBlackBoxY; + POINT16 gmptGlyphOrigin; + INT16 gmCellIncX; + INT16 gmCellIncY; +} GLYPHMETRICS16, *LPGLYPHMETRICS16; + +typedef struct +{ + UINT32 gmBlackBoxX; + UINT32 gmBlackBoxY; + POINT32 gmptGlyphOrigin; + INT16 gmCellIncX; + INT16 gmCellIncY; +} GLYPHMETRICS32, *LPGLYPHMETRICS32; + +DECL_WINELIB_TYPE(GLYPHMETRICS); +DECL_WINELIB_TYPE(LPGLYPHMETRICS); + +#define GGO_METRICS 0 +#define GGO_BITMAP 1 +#define GGO_NATIVE 2 + +typedef struct +{ + UINT16 fract; + INT16 value; +} FIXED; + +typedef struct +{ + FIXED eM11; + FIXED eM12; + FIXED eM21; + FIXED eM22; +} MAT2, *LPMAT2; + /* for GetCharABCWidths() */ typedef struct { @@ -1447,9 +1486,9 @@ DECL_WINELIB_TYPE(LPABC); /* Rasterizer status */ typedef struct { - WORD nSize; - WORD wFlags; - WORD nLanguageID; + INT16 nSize; + INT16 wFlags; + INT16 nLanguageID; } RASTERIZER_STATUS, *LPRASTERIZER_STATUS; #define TT_AVAILABLE 0x0001 @@ -1716,8 +1755,41 @@ DECL_WINELIB_TYPE(LPLOGPEN); #define SM_MENUDROPALIGNMENT 40 #define SM_PENWINDOWS 41 #define SM_DBCSENABLED 42 +#define SM_CMOUSEBUTTONS 43 +#define SM_CXFIXEDFRAME SM_CXDLGFRAME +#define SM_CYFIXEDFRAME SM_CYDLGFRAME +#define SM_CXSIZEFRAME SM_CXFRAME +#define SM_CYSIZEFRAME SM_CYFRAME +#define SM_SECURE 44 +#define SM_CXEDGE 45 +#define SM_CYEDGE 46 +#define SM_CXMINSPACING 47 +#define SM_CYMINSPACING 48 +#define SM_CXSMICON 49 +#define SM_CYSMICON 50 +#define SM_CYSMCAPTION 51 +#define SM_CXSMSIZE 52 +#define SM_CYSMSIZE 53 +#define SM_CXMENUSIZE 54 +#define SM_CYMENUSIZE 55 +#define SM_ARRANGE 56 +#define SM_CXMINIMIZED 57 +#define SM_CYMINIMIZED 58 +#define SM_CXMAXTRACK 59 +#define SM_CYMAXTRACK 60 +#define SM_CXMAXIMIZED 61 +#define SM_CYMAXIMIZED 62 +#define SM_NETWORK 63 +#define SM_CLEANBOOT 67 +#define SM_CXDRAG 68 +#define SM_CYDRAG 69 +#define SM_SHOWSOUNDS 70 +#define SM_CXMENUCHECK 71 +#define SM_CYMENUCHECK 72 +#define SM_SLOWMACHINE 73 +#define SM_MIDEASTENABLED 74 -#define SM_CMETRICS 43 +#define SM_CMETRICS 75 /* Device-independent bitmaps */ @@ -2232,6 +2304,7 @@ typedef struct tagCOMSTAT #define WF_SMALLFRAME 0x0200 #define WF_80x87 0x0400 #define WF_PAGING 0x0800 +#define WF_WIN32WOW 0x4000 /* undoc */ #define WF_WLO 0x8000 #define MAKEINTRESOURCE(i) (SEGPTR)((DWORD)((WORD)(i))) @@ -4659,6 +4732,52 @@ DECL_WINELIB_TYPE_AW(ENUMRESTYPEPROC); DECL_WINELIB_TYPE_AW(ENUMRESNAMEPROC); DECL_WINELIB_TYPE_AW(ENUMRESLANGPROC); +/* Character Type Flags */ +#define CT_CTYPE1 0x00000001 /* usual ctype */ +#define CT_CTYPE2 0x00000002 /* bidirectional layout info */ +#define CT_CTYPE3 0x00000004 /* textprocessing info */ + +/* CType 1 Flag Bits */ +#define C1_UPPER 0x0001 +#define C1_LOWER 0x0002 +#define C1_DIGIT 0x0004 +#define C1_SPACE 0x0008 +#define C1_PUNCT 0x0010 +#define C1_CNTRL 0x0020 +#define C1_BLANK 0x0040 +#define C1_XDIGIT 0x0080 +#define C1_ALPHA 0x0100 + +/* CType 2 Flag Bits */ +#define C2_LEFTTORIGHT 0x0001 +#define C2_RIGHTTOLEFT 0x0002 +#define C2_EUROPENUMBER 0x0003 +#define C2_EUROPESEPARATOR 0x0004 +#define C2_EUROPETERMINATOR 0x0005 +#define C2_ARABICNUMBER 0x0006 +#define C2_COMMONSEPARATOR 0x0007 +#define C2_BLOCKSEPARATOR 0x0008 +#define C2_SEGMENTSEPARATOR 0x0009 +#define C2_WHITESPACE 0x000A +#define C2_OTHERNEUTRAL 0x000B +#define C2_NOTAPPLICABLE 0x0000 + +/* CType 3 Flag Bits */ +#define C3_NONSPACING 0x0001 +#define C3_DIACRITIC 0x0002 +#define C3_VOWELMARK 0x0004 +#define C3_SYMBOL 0x0008 +#define C3_KATAKANA 0x0010 +#define C3_HIRAGANA 0x0020 +#define C3_HALFWIDTH 0x0040 +#define C3_FULLWIDTH 0x0080 +#define C3_IDEOGRAPH 0x0100 +#define C3_KASHIDA 0x0200 +#define C3_LEXICAL 0x0400 +#define C3_ALPHA 0x8000 +#define C3_NOTAPPLICABLE 0x0000 + + #pragma pack(4) /* Declarations for functions that exist only in Win16 */ @@ -4704,6 +4823,7 @@ DWORD GetDCOrg(HDC16); HDC16 GetDCState(HDC16); HWND16 GetDesktopHwnd(void); SEGPTR GetDOSEnvironment(void); +INT16 GetEnvironment(LPCSTR,LPSTR,UINT16); HMODULE16 GetExePtr(HANDLE16); WORD GetExeVersion(void); DWORD GetHeapSpaces(HMODULE16); @@ -4711,6 +4831,7 @@ INT16 GetKbCodePage(VOID); INT16 GetInstanceData(HINSTANCE16,WORD,INT16); HGLOBAL16 GetMetaFileBits(HMETAFILE16); BOOL16 GetModuleName(HINSTANCE16,LPSTR,INT16); +INT16 GetModuleUsage(HINSTANCE16); FARPROC16 GetMouseEventProc(void); UINT16 GetNumTasks(void); DWORD GetSelectorBase(WORD); @@ -4770,6 +4891,7 @@ BOOL16 SetDCHook(HDC16,FARPROC16,DWORD); DWORD SetDCOrg(HDC16,INT16,INT16); VOID SetDCState(HDC16,HDC16); BOOL16 SetDeskPattern(void); +INT16 SetEnvironment(LPCSTR,LPCSTR,UINT16); WORD SetHookFlags(HDC16,WORD); HMETAFILE16 SetMetaFileBits(HGLOBAL16); VOID SetPriority(HTASK16,INT16); @@ -4878,6 +5000,9 @@ DWORD GetShortPathName32A(LPCSTR,LPSTR,DWORD); DWORD GetShortPathName32W(LPCWSTR,LPWSTR,DWORD); #define GetShortPathName WINELIB_NAME_AW(GetShortPathName) HFILE32 GetStdHandle(DWORD); +BOOL32 GetStringTypeEx32A(LCID,DWORD,LPCSTR,INT32,LPWORD); +BOOL32 GetStringTypeEx32W(LCID,DWORD,LPCWSTR,INT32,LPWORD); +#define GetStringTypeEx WINELIB_NAME_AW(GetStringTypeEx) VOID GetSystemInfo(LPSYSTEM_INFO); BOOL32 GetSystemPowerStatus(LPSYSTEM_POWER_STATUS); VOID GetSystemTime(LPSYSTEMTIME); @@ -4899,13 +5024,17 @@ BOOL32 IsDBCSLeadByteEx(UINT32,BYTE); BOOL32 IsWindowUnicode(HWND32); BOOL32 IsValidLocale(DWORD,DWORD); BOOL32 LocalFileTimeToFileTime(const FILETIME*,LPFILETIME); -LPVOID MapViewOfFileEx(HANDLE32,DWORD,DWORD,DWORD,DWORD,DWORD); +LPVOID MapViewOfFile(HANDLE32,DWORD,DWORD,DWORD,DWORD); +LPVOID MapViewOfFileEx(HANDLE32,DWORD,DWORD,DWORD,DWORD,LPVOID); INT32 MessageBoxEx32A(HWND32,LPCSTR,LPCSTR,UINT32,WORD); INT32 MessageBoxEx32W(HWND32,LPCWSTR,LPCWSTR,UINT32,WORD); #define MessageBoxEx WINELIB_NAME_AW(MessageBoxEx) BOOL32 MoveFile32A(LPCSTR,LPCSTR); BOOL32 MoveFile32W(LPCWSTR,LPCWSTR); #define MoveFile WINELIB_NAME_AW(MoveFile) +HANDLE32 OpenFileMapping32A(DWORD,BOOL32,LPCSTR); +HANDLE32 OpenFileMapping32W(DWORD,BOOL32,LPCWSTR); +#define OpenFileMapping WINELIB_NAME_AW(OpenFileMapping) DWORD QueryDosDevice32A(LPCSTR,LPSTR,DWORD); DWORD QueryDosDevice32W(LPCWSTR,LPWSTR,DWORD); #define QueryDosDevice WINELIB_NAME_AW(QueryDosDevice) @@ -4962,8 +5091,15 @@ DWORD TlsAlloc(void); BOOL32 TlsFree(DWORD); LPVOID TlsGetValue(DWORD); BOOL32 TlsSetValue(DWORD,LPVOID); +BOOL32 UnmapViewOfFile(LPVOID); LPVOID VirtualAlloc(LPVOID,DWORD,DWORD,DWORD); BOOL32 VirtualFree(LPVOID,DWORD,DWORD); +BOOL32 VirtualLock(LPVOID,DWORD); +BOOL32 VirtualProtect(LPVOID,DWORD,DWORD,LPDWORD); +BOOL32 VirtualProtectEx(HANDLE32,LPVOID,DWORD,DWORD,LPDWORD); +BOOL32 VirtualQuery(LPCVOID,LPMEMORY_BASIC_INFORMATION,DWORD); +BOOL32 VirtualQueryEx(HANDLE32,LPCVOID,LPMEMORY_BASIC_INFORMATION,DWORD); +BOOL32 VirtualUnlock(LPVOID,DWORD); BOOL32 WriteConsole32A(HANDLE32,LPVOID,DWORD,LPDWORD,LPVOID); BOOL32 WriteConsole32W(HANDLE32,LPVOID,DWORD,LPDWORD,LPVOID); #define WriteConsole WINELIB_NAME_AW(WriteConsole) @@ -4973,15 +5109,6 @@ BOOL32 WriteFile(HFILE32,LPVOID,DWORD,LPDWORD,LPOVERLAPPED); /* Declarations for functions that are the same in Win16 and Win32 */ VOID CloseSound(VOID); -HBITMAP16 CreateBitmap(INT32,INT32,UINT32,UINT32,LPCVOID); -BOOL16 CreateCaret(HWND32,HBITMAP32,INT32,INT32); -HBITMAP16 CreateCompatibleBitmap(HDC32,INT32,INT32); -HBITMAP16 CreateDiscardableBitmap(HDC32,INT32,INT32); -BOOL16 DestroyCaret(void); -INT16 ExcludeUpdateRgn(HDC32,HWND32); -DWORD GetAppCompatFlags(HTASK32); -LONG GetBitmapBits(HBITMAP32,LONG,LPVOID); -WORD GetClassWord(HWND32,INT32); DWORD GetDialogBaseUnits(void); VOID GetKeyboardState(LPBYTE); DWORD GetLastError(void); @@ -4990,28 +5117,17 @@ LONG GetMessageExtraInfo(void); DWORD GetMessagePos(void); LONG GetMessageTime(void); DWORD GetTickCount(void); -INT16 GetUpdateRgn(HWND32,HRGN32,BOOL32); -WORD GetWindowWord(HWND32,INT32); ATOM GlobalDeleteAtom(ATOM); -BOOL16 IsWindow(HWND32); VOID LZDone(void); DWORD OemKeyScan(WORD); DWORD RegCloseKey(HKEY); DWORD RegFlushKey(HKEY); VOID ReleaseCapture(void); -LONG SetBitmapBits(HBITMAP32,LONG,LPCVOID); -COLORREF SetBkColor(HDC32,COLORREF); -BOOL16 SetCaretBlinkTime(UINT32); -BOOL16 SetCaretPos(INT32,INT32); -WORD SetClassWord(HWND32,INT32,WORD); VOID SetKeyboardState(LPBYTE); VOID SetLastError(DWORD); -VOID SetRectRgn(HRGN32,INT32,INT32,INT32,INT32); -COLORREF SetTextColor(HDC32,COLORREF); -WORD SetWindowWord(HWND32,INT32,WORD); -VOID UpdateWindow(HWND32); VOID WaitMessage(VOID); + /* Declarations for functions that change between Win16 and Win32 */ INT16 AccessResource16(HINSTANCE16,HRSRC16); @@ -5021,6 +5137,10 @@ ATOM AddAtom16(SEGPTR); ATOM AddAtom32A(LPCSTR); ATOM AddAtom32W(LPCWSTR); #define AddAtom WINELIB_NAME_AW(AddAtom) +INT16 AddFontResource16(LPCSTR); +INT32 AddFontResource32A(LPCSTR); +INT32 AddFontResource32W(LPCWSTR); +#define AddFontResource WINELIB_NAME_AW(AddFontResource) BOOL16 AdjustWindowRect16(LPRECT16,DWORD,BOOL16); BOOL32 AdjustWindowRect32(LPRECT32,DWORD,BOOL32); #define AdjustWindowRect WINELIB_NAME(AdjustWindowRect) @@ -5207,12 +5327,21 @@ INT32 CountClipboardFormats32(void); INT16 CountVoiceNotes16(INT16); DWORD CountVoiceNotes32(DWORD); #define CountVoiceNotes WINELIB_NAME(CountVoiceNotes) +HBITMAP16 CreateBitmap16(INT16,INT16,UINT16,UINT16,LPCVOID); +HBITMAP32 CreateBitmap32(INT32,INT32,UINT32,UINT32,LPCVOID); +#define CreateBitmap WINELIB_NAME(CreateBitmap) HBITMAP16 CreateBitmapIndirect16(const BITMAP16*); HBITMAP32 CreateBitmapIndirect32(const BITMAP32*); #define CreateBitmapIndirect WINELIB_NAME(CreateBitmapIndirect) HBRUSH16 CreateBrushIndirect16(const LOGBRUSH16*); HBRUSH32 CreateBrushIndirect32(const LOGBRUSH32*); #define CreateBrushIndirect WINELIB_NAME(CreateBrushIndirect) +VOID CreateCaret16(HWND16,HBITMAP16,INT16,INT16); +BOOL32 CreateCaret32(HWND32,HBITMAP32,INT32,INT32); +#define CreateCaret WINELIB_NAME(CreateCaret) +HBITMAP16 CreateCompatibleBitmap16(HDC16,INT16,INT16); +HBITMAP32 CreateCompatibleBitmap32(HDC32,INT32,INT32); +#define CreateCompatibleBitmap WINELIB_NAME(CreateCompatibleBitmap) HDC16 CreateCompatibleDC16(HDC16); HDC32 CreateCompatibleDC32(HDC32); #define CreateCompatibleDC WINELIB_NAME(CreateCompatibleDC) @@ -5258,6 +5387,9 @@ BOOL32 CreateDirectory32W(LPCWSTR,LPSECURITY_ATTRIBUTES); BOOL32 CreateDirectoryEx32A(LPCSTR,LPCSTR,LPSECURITY_ATTRIBUTES); BOOL32 CreateDirectoryEx32W(LPCWSTR,LPCWSTR,LPSECURITY_ATTRIBUTES); #define CreateDirectoryEx WINELIB_NAME_AW(CreateDirectoryEx) +HBITMAP16 CreateDiscardableBitmap16(HDC16,INT16,INT16); +HBITMAP32 CreateDiscardableBitmap32(HDC32,INT32,INT32); +#define CreateDiscardableBitmap WINELIB_NAME(CreateDiscardableBitmap) HRGN16 CreateEllipticRgn16(INT16,INT16,INT16,INT16); HRGN32 CreateEllipticRgn32(INT32,INT32,INT32,INT32); #define CreateEllipticRgn WINELIB_NAME(CreateEllipticRgn) @@ -5319,6 +5451,10 @@ HRGN32 CreateRectRgnIndirect32(const RECT32*); HRGN16 CreateRoundRectRgn16(INT16,INT16,INT16,INT16,INT16,INT16); HRGN32 CreateRoundRectRgn32(INT32,INT32,INT32,INT32,INT32,INT32); #define CreateRoundRectRgn WINELIB_NAME(CreateRoundRectRgn) +BOOL16 CreateScalableFontResource16(UINT16,LPCSTR,LPCSTR,LPCSTR); +BOOL32 CreateScalableFontResource32A(DWORD,LPCSTR,LPCSTR,LPCSTR); +BOOL32 CreateScalableFontResource32W(DWORD,LPCWSTR,LPCWSTR,LPCWSTR); +#define CreateScalableFontResource WINELIB_NAME_AW(CreateScalableFontResource) HBRUSH16 CreateSolidBrush16(COLORREF); HBRUSH32 CreateSolidBrush32(COLORREF); #define CreateSolidBrush WINELIB_NAME(CreateSolidBrush) @@ -5378,6 +5514,9 @@ BOOL32 DeleteMetaFile32(HMETAFILE32); BOOL16 DeleteObject16(HGDIOBJ16); BOOL32 DeleteObject32(HGDIOBJ32); #define DeleteObject WINELIB_NAME(DeleteObject) +VOID DestroyCaret16(void); +BOOL32 DestroyCaret32(void); +#define DestroyCaret WINELIB_NAME(DestroyCaret) BOOL16 DestroyCursor16(HCURSOR16); BOOL32 DestroyCursor32(HCURSOR32); #define DestroyCursor WINELIB_NAME(DestroyCursor) @@ -5436,6 +5575,9 @@ BOOL32 DPtoLP32(HDC32,LPPOINT32,INT32); BOOL16 DragDetect16(HWND16,POINT16); BOOL32 DragDetect32(HWND32,POINT32); #define DragDetect WINELIB_NAME(DragDetect) +DWORD DragObject16(HWND16,HWND16,UINT16,HANDLE16,WORD,HCURSOR16); +DWORD DragObject32(HWND32,HWND32,UINT32,DWORD,HCURSOR32); +#define DragObject WINELIB_NAME(DragObject) BOOL16 DrawEdge16(HDC16,LPRECT16,UINT16,UINT16); BOOL32 DrawEdge32(HDC32,LPRECT32,UINT32,UINT32); #define DrawEdge WINELIB_NAME(DrawEdge) @@ -5497,6 +5639,9 @@ INT16 EnumFonts16(HDC16,LPCSTR,FONTENUMPROC16,LPARAM); INT32 EnumFonts32A(HDC32,LPCSTR,FONTENUMPROC32A,LPARAM); INT32 EnumFonts32W(HDC32,LPCWSTR,FONTENUMPROC32W,LPARAM); #define EnumFonts WINELIB_NAME_AW(EnumFonts) +BOOL16 EnumMetaFile16(HDC16,HMETAFILE16,MFENUMPROC16,LPARAM); +BOOL32 EnumMetaFile32(HDC32,HMETAFILE32,MFENUMPROC32,LPARAM); +#define EnumMetaFile WINELIB_NAME(EnumMetaFile) INT16 EnumObjects16(HDC16,INT16,GOBJENUMPROC16,LPARAM); INT32 EnumObjects32(HDC32,INT32,GOBJENUMPROC32,LPARAM); #define EnumObjects WINELIB_NAME(EnumObjects) @@ -5526,12 +5671,19 @@ BOOL32 EscapeCommFunction32(INT32,UINT32); INT16 ExcludeClipRect16(HDC16,INT16,INT16,INT16,INT16); INT32 ExcludeClipRect32(HDC32,INT32,INT32,INT32,INT32); #define ExcludeClipRect WINELIB_NAME(ExcludeClipRect) +INT16 ExcludeUpdateRgn16(HDC16,HWND16); +INT32 ExcludeUpdateRgn32(HDC32,HWND32); +#define ExcludeUpdateRgn WINELIB_NAME(ExcludeUpdateRgn) BOOL16 ExitWindows16(DWORD,UINT16); #define ExitWindows32(a,b) ExitWindowsEx(EWX_LOGOFF,0xffffffff) #define ExitWindows WINELIB_NAME(ExitWindows) BOOL16 ExtFloodFill16(HDC16,INT16,INT16,COLORREF,UINT16); BOOL32 ExtFloodFill32(HDC32,INT32,INT32,COLORREF,UINT32); #define ExtFloodFill WINELIB_NAME(ExtFloodFill) +HICON16 ExtractIcon16(HINSTANCE16,LPCSTR,UINT16); +HICON32 ExtractIcon32A(HINSTANCE32,LPCSTR,UINT32); +HICON32 ExtractIcon32W(HINSTANCE32,LPCWSTR,UINT32); +#define ExtractIcon WINELIB_NAME_AW(ExtractIcon) BOOL16 ExtTextOut16(HDC16,INT16,INT16,UINT16,const RECT16*,LPCSTR,UINT16,const INT16*); BOOL32 ExtTextOut32A(HDC32,INT32,INT32,UINT32,const RECT32*,LPCSTR,UINT32,const INT32*); BOOL32 ExtTextOut32W(HDC32,INT32,INT32,UINT32,const RECT32*,LPCWSTR,UINT32,const INT32*); @@ -5553,6 +5705,10 @@ ATOM FindAtom32W(LPCWSTR); BOOL16 FindClose16(HANDLE16); BOOL32 FindClose32(HANDLE32); #define FindClose WINELIB_NAME(FindClose) +HINSTANCE16 FindExecutable16(LPCSTR,LPCSTR,LPSTR); +HINSTANCE32 FindExecutable32A(LPCSTR,LPCSTR,LPSTR); +HINSTANCE32 FindExecutable32W(LPCWSTR,LPCWSTR,LPWSTR); +#define FindExecutable WINELIB_NAME_AW(FindExecutable) HANDLE16 FindFirstFile16(LPCSTR,LPWIN32_FIND_DATA32A); HANDLE32 FindFirstFile32A(LPCSTR,LPWIN32_FIND_DATA32A); HANDLE32 FindFirstFile32W(LPCWSTR,LPWIN32_FIND_DATA32W); @@ -5585,6 +5741,9 @@ INT32 FrameRect32(HDC32,const RECT32*,HBRUSH32); BOOL16 FrameRgn16(HDC16,HRGN16,HBRUSH16,INT16,INT16); BOOL32 FrameRgn32(HDC32,HRGN32,HBRUSH32,INT32,INT32); #define FrameRgn WINELIB_NAME(FrameRgn) +VOID FreeLibrary16(HINSTANCE16); +BOOL32 FreeLibrary32(HMODULE32); +#define FreeLibrary WINELIB_NAME(FreeLibrary) BOOL16 FreeModule16(HMODULE16); #define FreeModule32(handle) FreeLibrary32(handle) #define FreeModule WINELIB_NAME(FreeModule) @@ -5597,6 +5756,9 @@ BOOL32 FreeResource32(HGLOBAL32); HWND16 GetActiveWindow16(void); HWND32 GetActiveWindow32(void); #define GetActiveWindow WINELIB_NAME(GetActiveWindow) +DWORD GetAppCompatFlags16(HTASK16); +DWORD GetAppCompatFlags32(HTASK32); +#define GetAppCompatFlags WINELIB_NAME(GetAppCompatFlags) WORD GetAsyncKeyState16(INT16); WORD GetAsyncKeyState32(INT32); #define GetAsyncKeyState WINELIB_NAME(GetAsyncKeyState) @@ -5604,6 +5766,9 @@ UINT16 GetAtomName16(ATOM,LPSTR,INT16); UINT32 GetAtomName32A(ATOM,LPSTR,INT32); UINT32 GetAtomName32W(ATOM,LPWSTR,INT32); #define GetAtomName WINELIB_NAME_AW(GetAtomName) +LONG GetBitmapBits16(HBITMAP16,LONG,LPVOID); +LONG GetBitmapBits32(HBITMAP32,LONG,LPVOID); +#define GetBitmapBits WINELIB_NAME(GetBitmapBits) BOOL16 GetBitmapDimensionEx16(HBITMAP16,LPSIZE16); BOOL32 GetBitmapDimensionEx32(HBITMAP32,LPSIZE32); #define GetBitmapDimensionEx WINELIB_NAME(GetBitmapDimensionEx) @@ -5649,9 +5814,19 @@ INT16 GetClassName16(HWND16,LPSTR,INT16); INT32 GetClassName32A(HWND32,LPSTR,INT32); INT32 GetClassName32W(HWND32,LPWSTR,INT32); #define GetClassName WINELIB_NAME_AW(GetClassName) +WORD GetClassWord16(HWND16,INT16); +WORD GetClassWord32(HWND32,INT32); +#define GetClassWord WINELIB_NAME(GetClassWord) void GetClientRect16(HWND16,LPRECT16); void GetClientRect32(HWND32,LPRECT32); #define GetClientRect WINELIB_NAME(GetClientRect) +HANDLE16 GetClipboardData16(UINT16); +HANDLE32 GetClipboardData32(UINT32); +#define GetClipboardData WINELIB_NAME(GetClipboardData) +INT16 GetClipboardFormatName16(UINT16,LPSTR,INT16); +INT32 GetClipboardFormatName32A(UINT32,LPSTR,INT32); +INT32 GetClipboardFormatName32W(UINT32,LPWSTR,INT32); +#define GetClipboardFormatName WINELIB_NAME_AW(GetClipboardFormatName) HWND16 GetClipboardOwner16(void); HWND32 GetClipboardOwner32(void); #define GetClipboardOwner WINELIB_NAME(GetClipboardOwner) @@ -5747,6 +5922,10 @@ HWND32 GetFocus32(void); DWORD GetFreeSpace16(UINT16); #define GetFreeSpace32(w) (0x100000L) #define GetFreeSpace WINELIB_NAME(GetFreeSpace) +DWORD GetGlyphOutLine16(HDC16,UINT16,UINT16,LPGLYPHMETRICS16,DWORD,LPVOID,const MAT2*); +DWORD GetGlyphOutLine32A(HDC32,UINT32,UINT32,LPGLYPHMETRICS32,DWORD,LPVOID,const MAT2*); +DWORD GetGlyphOutLine32W(HDC32,UINT32,UINT32,LPGLYPHMETRICS32,DWORD,LPVOID,const MAT2*); +#define GetGlyphOutLine WINELIB_NAME_AW(GetGlyphOutLine) BOOL16 GetInputState16(void); BOOL32 GetInputState32(void); #define GetInputState WINELIB_NAME(GetInputState) @@ -5756,6 +5935,10 @@ UINT32 GetInternalWindowPos32(HWND32,LPRECT32,LPPOINT32); INT16 GetKBCodePage16(void); UINT32 GetKBCodePage32(void); #define GetKBCodePage WINELIB_NAME(GetKBCodePage) +INT16 GetKerningPairs16(HDC16,INT16,LPKERNINGPAIR16); +DWORD GetKerningPairs32A(HDC32,DWORD,LPKERNINGPAIR32); +DWORD GetKerningPairs32W(HDC32,DWORD,LPKERNINGPAIR32); +#define GetKerningPairs WINELIB_NAME_AW(GetKerningPairs) INT16 GetKeyboardType16(INT16); INT32 GetKeyboardType32(INT32); #define GetKeyboardType WINELIB_NAME(GetKeyboardType) @@ -5791,6 +5974,10 @@ INT16 GetMenuString16(HMENU16,UINT16,LPSTR,INT16,UINT16); INT32 GetMenuString32A(HMENU32,UINT32,LPSTR,INT32,UINT32); INT32 GetMenuString32W(HMENU32,UINT32,LPWSTR,INT32,UINT32); #define GetMenuString WINELIB_NAME_AW(GetMenuString) +BOOL16 GetMessage16(SEGPTR,HWND16,UINT16,UINT16); +BOOL32 GetMessage32A(LPMSG32,HWND32,UINT32,UINT32); +BOOL32 GetMessage32W(LPMSG32,HWND32,UINT32,UINT32); +#define GetMessage WINELIB_NAME_AW(GetMessage) HMETAFILE16 GetMetaFile16(LPCSTR); HMETAFILE32 GetMetaFile32A(LPCSTR); HMETAFILE32 GetMetaFile32W(LPCWSTR); @@ -5799,6 +5986,10 @@ INT16 GetModuleFileName16(HINSTANCE16,LPSTR,INT16); DWORD GetModuleFileName32A(HMODULE32,LPSTR,DWORD); DWORD GetModuleFileName32W(HMODULE32,LPWSTR,DWORD); #define GetModuleFileName WINELIB_NAME_AW(GetModuleFileName) +HMODULE16 GetModuleHandle16(LPCSTR); +HMODULE32 GetModuleHandle32A(LPCSTR); +HMODULE32 GetModuleHandle32W(LPCSTR); +#define GetModuleHandle WINELIB_NAME_AW(GetModuleHandle) DWORD GetNearestColor16(HDC16,DWORD); DWORD GetNearestColor32(HDC32,DWORD); #define GetNearestColor WINELIB_NAME(GetNearestColor) @@ -5833,6 +6024,9 @@ COLORREF GetPixel32(HDC32,INT32,INT32); INT16 GetPolyFillMode16(HDC16); INT32 GetPolyFillMode32(HDC32); #define GetPolyFillMode WINELIB_NAME(GetPolyFillMode) +INT16 GetPriorityClipboardFormat16(UINT16*,INT16); +INT32 GetPriorityClipboardFormat32(UINT32*,INT32); +#define GetPriorityClipboardFormat WINELIB_NAME(GetPriorityClipboardFormat) UINT16 GetPrivateProfileInt16(LPCSTR,LPCSTR,INT16,LPCSTR); UINT32 GetPrivateProfileInt32A(LPCSTR,LPCSTR,INT32,LPCSTR); UINT32 GetPrivateProfileInt32W(LPCWSTR,LPCWSTR,INT32,LPCWSTR); @@ -5856,6 +6050,12 @@ HANDLE16 GetProp16(HWND16,LPCSTR); HANDLE32 GetProp32A(HWND32,LPCSTR); HANDLE32 GetProp32W(HWND32,LPCWSTR); #define GetProp WINELIB_NAME_AW(GetProp) +DWORD GetQueueStatus16(UINT16); +DWORD GetQueueStatus32(UINT32); +#define GetQueueStatus WINELIB_NAME(GetQueueStatus) +BOOL16 GetRasterizerCaps16(LPRASTERIZER_STATUS,UINT16); +BOOL32 GetRasterizerCaps32(LPRASTERIZER_STATUS,UINT32); +#define GetRasterizerCaps WINELIB_NAME(GetRasterizerCaps) INT16 GetRelAbs16(HDC16); INT32 GetRelAbs32(HDC32); #define GetRelAbs WINELIB_NAME(GetRelAbs) @@ -5880,6 +6080,10 @@ HGDIOBJ32 GetStockObject32(INT32); INT16 GetStretchBltMode16(HDC16); INT32 GetStretchBltMode32(HDC32); #define GetStretchBltMode WINELIB_NAME(GetStretchBltMode) +BOOL16 GetStringType16(LCID,DWORD,LPCSTR,INT16,LPWORD); +BOOL32 GetStringType32A(LCID,DWORD,LPCSTR,INT32,LPWORD); +BOOL32 GetStringType32W(DWORD,LPCWSTR,INT32,LPWORD); +#define GetStringType WINELIB_NAME_AW(GetStringType) HMENU16 GetSubMenu16(HMENU16,INT16); HMENU32 GetSubMenu32(HMENU32,INT32); #define GetSubMenu WINELIB_NAME(GetSubMenu) @@ -5952,6 +6156,9 @@ HWND32 GetTopWindow32(HWND32); BOOL16 GetUpdateRect16(HWND16,LPRECT16,BOOL16); BOOL32 GetUpdateRect32(HWND32,LPRECT32,BOOL32); #define GetUpdateRect WINELIB_NAME(GetUpdateRect) +INT16 GetUpdateRgn16(HWND16,HRGN16,BOOL16); +INT32 GetUpdateRgn32(HWND32,HRGN32,BOOL32); +#define GetUpdateRgn WINELIB_NAME(GetUpdateRgn) LONG GetVersion16(void); LONG GetVersion32(void); #define GetVersion WINELIB_NAME(GetVersion) @@ -6001,6 +6208,9 @@ INT16 GetWindowTextLength16(HWND16); INT32 GetWindowTextLength32A(HWND32); INT32 GetWindowTextLength32W(HWND32); #define GetWindowTextLength WINELIB_NAME_AW(GetWindowTextLength) +WORD GetWindowWord16(HWND16,INT16); +WORD GetWindowWord32(HWND32,INT32); +#define GetWindowWord WINELIB_NAME(GetWindowWord) ATOM GlobalAddAtom16(SEGPTR); ATOM GlobalAddAtom32A(LPCSTR); ATOM GlobalAddAtom32W(LPCWSTR); @@ -6059,7 +6269,7 @@ BOOL32 GrayString32A(HDC32,HBRUSH32,GRAYSTRINGPROC32,LPARAM, BOOL32 GrayString32W(HDC32,HBRUSH32,GRAYSTRINGPROC32,LPARAM, INT32,INT32,INT32,INT32,INT32); #define GrayString WINELIB_NAME_AW(GrayString) -BOOL16 HideCaret16(HWND16); +VOID HideCaret16(HWND16); BOOL32 HideCaret32(HWND32); #define HideCaret WINELIB_NAME(HideCaret) BOOL16 HiliteMenuItem16(HWND16,HMENU16,UINT16,UINT16); @@ -6103,7 +6313,7 @@ BOOL16 IsBadHugeReadPtr16(SEGPTR,DWORD); BOOL32 IsBadHugeReadPtr32(LPCVOID,UINT32); #define IsBadHugeReadPtr WINELIB_NAME(IsBadHugeReadPtr) BOOL16 IsBadHugeWritePtr16(SEGPTR,DWORD); -BOOL32 IsBadHugeWritePtr32(LPCVOID,UINT32); +BOOL32 IsBadHugeWritePtr32(LPVOID,UINT32); #define IsBadHugeWritePtr WINELIB_NAME(IsBadHugeWritePtr) BOOL16 IsBadReadPtr16(SEGPTR,UINT16); BOOL32 IsBadReadPtr32(LPCVOID,UINT32); @@ -6156,6 +6366,9 @@ BOOL32 IsMenu32(HMENU32); BOOL16 IsRectEmpty16(const RECT16*); BOOL32 IsRectEmpty32(const RECT32*); #define IsRectEmpty WINELIB_NAME(IsRectEmpty) +BOOL16 IsWindow16(HWND16); +BOOL32 IsWindow32(HWND32); +#define IsWindow WINELIB_NAME(IsWindow) BOOL16 IsWindowEnabled16(HWND16); BOOL32 IsWindowEnabled32(HWND32); #define IsWindowEnabled WINELIB_NAME(IsWindowEnabled) @@ -6215,6 +6428,9 @@ HMENU16 LoadMenuIndirect16(LPCVOID); HMENU32 LoadMenuIndirect32A(LPCVOID); HMENU32 LoadMenuIndirect32W(LPCVOID); #define LoadMenuIndirect WINELIB_NAME_AW(LoadMenuIndirect) +HINSTANCE16 LoadModule16(LPCSTR,LPVOID); +DWORD LoadModule32(LPCSTR,LPVOID); +#define LoadModule WINELIB_NAME(LoadModule) HGLOBAL16 LoadResource16(HINSTANCE16,HRSRC16); HGLOBAL32 LoadResource32(HINSTANCE32,HRSRC32); #define LoadResource WINELIB_NAME(LoadResource) @@ -6347,6 +6563,10 @@ BOOL32 OpenIcon32(HWND32); INT16 OpenSound16(void); VOID OpenSound32(void); #define OpenSound WINELIB_NAME(OpenSound) +VOID OutputDebugString16(LPCSTR); +VOID OutputDebugString32A(LPCSTR); +VOID OutputDebugString32W(LPCWSTR); +#define OutputDebugString WINELIB_NAME_AW(OutputDebugString) BOOL16 PaintRgn16(HDC16,HRGN16); BOOL32 PaintRgn32(HDC32,HRGN32); #define PaintRgn WINELIB_NAME(PaintRgn) @@ -6363,6 +6583,9 @@ BOOL32 Pie32(HDC32,INT32,INT32,INT32,INT32,INT32,INT32,INT32,INT32); BOOL16 PlayMetaFile16(HDC16,HMETAFILE16); BOOL32 PlayMetaFile32(HDC32,HMETAFILE32); #define PlayMetaFile WINELIB_NAME(PlayMetaFile) +VOID PlayMetaFileRecord16(HDC16,LPHANDLETABLE16,LPMETARECORD,UINT16); +BOOL32 PlayMetaFileRecord32(HDC32,LPHANDLETABLE32,LPMETARECORD,UINT32); +#define PlayMetaFileRecord WINELIB_NAME(PlayMetaFileRecord) BOOL16 PolyPolygon16(HDC16,LPPOINT16,LPINT16,UINT16); BOOL32 PolyPolygon32(HDC32,LPPOINT32,LPINT32,UINT32); #define PolyPolygon WINELIB_NAME(PolyPolygon) @@ -6378,6 +6601,10 @@ BOOL16 PostAppMessage16(HTASK16,UINT16,WPARAM16,LPARAM); #define PostAppMessage32W(thread,msg,wparam,lparam) \ PostThreadMessage32W((DWORD)(thread),msg,wparam,lparam) #define PostAppMessage WINELIB_NAME_AW(PostAppMessage) +BOOL16 PostMessage16(HWND16,UINT16,WPARAM16,LPARAM); +BOOL32 PostMessage32A(HWND32,UINT32,WPARAM32,LPARAM); +BOOL32 PostMessage32W(HWND32,UINT32,WPARAM32,LPARAM); +#define PostMessage WINELIB_NAME_AW(PostMessage) void PostQuitMessage16(INT16); void PostQuitMessage32(INT32); #define PostQuitMessage WINELIB_NAME(PostQuitMessage) @@ -6464,17 +6691,24 @@ DWORD RegSetValueEx32W(HKEY,LPWSTR,DWORD,DWORD,LPBYTE,DWORD); INT16 ReleaseDC16(HWND16,HDC16); INT32 ReleaseDC32(HWND32,HDC32); #define ReleaseDC WINELIB_NAME(ReleaseDC) -HANDLE16 RemoveProp16(HWND16,LPCSTR); -HANDLE32 RemoveProp32A(HWND32,LPCSTR); -HANDLE32 RemoveProp32W(HWND32,LPCWSTR); -#define RemoveProp WINELIB_NAME_AW(RemoveProp) BOOL16 RemoveDirectory16(LPCSTR); BOOL32 RemoveDirectory32A(LPCSTR); BOOL32 RemoveDirectory32W(LPCWSTR); #define RemoveDirectory WINELIB_NAME_AW(RemoveDirectory) +BOOL16 RemoveFontResource16(LPCSTR); +BOOL32 RemoveFontResource32A(LPCSTR); +BOOL32 RemoveFontResource32W(LPCWSTR); +#define RemoveFontResource WINELIB_NAME_AW(RemoveFontResource) BOOL16 RemoveMenu16(HMENU16,UINT16,UINT16); BOOL32 RemoveMenu32(HMENU32,UINT32,UINT32); #define RemoveMenu WINELIB_NAME(RemoveMenu) +HANDLE16 RemoveProp16(HWND16,LPCSTR); +HANDLE32 RemoveProp32A(HWND32,LPCSTR); +HANDLE32 RemoveProp32W(HWND32,LPCWSTR); +#define RemoveProp WINELIB_NAME_AW(RemoveProp) +VOID ReplyMessage16(LRESULT); +BOOL32 ReplyMessage32(LRESULT); +#define ReplyMessage WINELIB_NAME(ReplyMessage) HDC16 ResetDC16(HDC16,const DEVMODE16 *); HDC32 ResetDC32A(HDC32,const DEVMODE32A *); HDC32 ResetDC32W(HDC32,const DEVMODE32W *); @@ -6536,19 +6770,37 @@ LRESULT SendMessage32W(HWND32,UINT32,WPARAM32,LPARAM); HWND16 SetActiveWindow16(HWND16); HWND32 SetActiveWindow32(HWND32); #define SetActiveWindow WINELIB_NAME(SetActiveWindow) +LONG SetBitmapBits16(HBITMAP16,LONG,LPCVOID); +LONG SetBitmapBits32(HBITMAP32,LONG,LPCVOID); +#define SetBitmapBits WINELIB_NAME(SetBitmapBits) BOOL16 SetBitmapDimensionEx16(HBITMAP16,INT16,INT16,LPSIZE16); BOOL32 SetBitmapDimensionEx32(HBITMAP32,INT32,INT32,LPSIZE32); #define SetBitmapDimensionEx WINELIB_NAME(SetBitmapDimensionEx) +COLORREF SetBkColor16(HDC16,COLORREF); +COLORREF SetBkColor32(HDC32,COLORREF); +#define SetBkColor WINELIB_NAME(SetBkColor) INT16 SetBkMode16(HDC16,INT16); INT32 SetBkMode32(HDC32,INT32); #define SetBkMode WINELIB_NAME(SetBkMode) HWND16 SetCapture16(HWND16); HWND32 SetCapture32(HWND32); #define SetCapture WINELIB_NAME(SetCapture) +VOID SetCaretBlinkTime16(UINT16); +BOOL32 SetCaretBlinkTime32(UINT32); +#define SetCaretBlinkTime WINELIB_NAME(SetCaretBlinkTime) +VOID SetCaretPos16(INT16,INT16); +BOOL32 SetCaretPos32(INT32,INT32); +#define SetCaretPos WINELIB_NAME(SetCaretPos) LONG SetClassLong16(HWND16,INT16,LONG); LONG SetClassLong32A(HWND32,INT32,LONG); LONG SetClassLong32W(HWND32,INT32,LONG); #define SetClassLong WINELIB_NAME_AW(SetClassLong) +WORD SetClassWord16(HWND16,INT16,WORD); +WORD SetClassWord32(HWND32,INT32,WORD); +#define SetClassWord WINELIB_NAME(SetClassWord) +HANDLE16 SetClipboardData16(UINT16,HANDLE16); +HANDLE32 SetClipboardData32(UINT32,HANDLE32); +#define SetClipboardData WINELIB_NAME(SetClipboardData) HWND16 SetClipboardViewer16(HWND16); HWND32 SetClipboardViewer32(HWND32); #define SetClipboardViewer WINELIB_NAME(SetClipboardViewer) @@ -6642,6 +6894,9 @@ void SetRect32(LPRECT32,INT32,INT32,INT32,INT32); void SetRectEmpty16(LPRECT16); void SetRectEmpty32(LPRECT32); #define SetRectEmpty WINELIB_NAME(SetRectEmpty) +VOID SetRectRgn16(HRGN16,INT16,INT16,INT16,INT16); +VOID SetRectRgn32(HRGN32,INT32,INT32,INT32,INT32); +#define SetRectRgn WINELIB_NAME(SetRectRgn) INT16 SetRelAbs16(HDC16,INT16); INT32 SetRelAbs32(HDC32,INT32); #define SetRelAbs WINELIB_NAME(SetRelAbs) @@ -6684,6 +6939,9 @@ UINT32 SetTextAlign32(HDC32,UINT32); INT16 SetTextCharacterExtra16(HDC16,INT16); INT32 SetTextCharacterExtra32(HDC32,INT32); #define SetTextCharacterExtra WINELIB_NAME(SetTextCharacterExtra) +COLORREF SetTextColor16(HDC16,COLORREF); +COLORREF SetTextColor32(HDC32,COLORREF); +#define SetTextColor WINELIB_NAME(SetTextColor) INT16 SetTextJustification16(HDC16,INT16,INT16); BOOL32 SetTextJustification32(HDC32,INT32,INT32); #define SetTextJustification WINELIB_NAME(SetTextJustification) @@ -6742,11 +7000,18 @@ void SetWindowText16(HWND16,SEGPTR); void SetWindowText32A(HWND32,LPCSTR); void SetWindowText32W(HWND32,LPCWSTR); #define SetWindowText WINELIB_NAME_AW(SetWindowText) +WORD SetWindowWord16(HWND16,INT16,WORD); +WORD SetWindowWord32(HWND32,INT32,WORD); +#define SetWindowWord WINELIB_NAME(SetWindowWord) BOOL16 ShellAbout16(HWND16,LPCSTR,LPCSTR,HICON16); BOOL32 ShellAbout32A(HWND32,LPCSTR,LPCSTR,HICON32); BOOL32 ShellAbout32W(HWND32,LPCWSTR,LPCWSTR,HICON32); #define ShellAbout WINELIB_NAME_AW(ShellAbout) -BOOL16 ShowCaret16(HWND16); +HINSTANCE16 ShellExecute16(HWND16,LPCSTR,LPCSTR,LPCSTR,LPCSTR,INT16); +HINSTANCE32 ShellExecute32A(HWND32,LPCSTR,LPCSTR,LPCSTR,LPCSTR,INT32); +HINSTANCE32 ShellExecute32W(HWND32,LPCWSTR,LPCWSTR,LPCWSTR,LPCWSTR,INT32); +#define ShellExecute WINELIB_NAME_AW(ShellExecute) +VOID ShowCaret16(HWND16); BOOL32 ShowCaret32(HWND32); #define ShowCaret WINELIB_NAME(ShowCaret) INT16 ShowCursor16(BOOL16); @@ -6838,8 +7103,14 @@ BOOL16 UnregisterClass16(SEGPTR,HINSTANCE16); BOOL32 UnregisterClass32A(LPCSTR,HINSTANCE32); BOOL32 UnregisterClass32W(LPCWSTR,HINSTANCE32); #define UnregisterClass WINELIB_NAME_AW(UnregisterClass) -void ValidateRect16(HWND16,const RECT16*); -void ValidateRect32(HWND32,const RECT32*); +INT16 UpdateColors16(HDC16); +BOOL32 UpdateColors32(HDC32); +#define UpdateColors WINELIB_NAME(UpdateColors) +VOID UpdateWindow16(HWND16); +VOID UpdateWindow32(HWND32); +#define UpdateWindow WINELIB_NAME(UpdateWindow) +VOID ValidateRect16(HWND16,const RECT16*); +VOID ValidateRect32(HWND32,const RECT32*); #define ValidateRect WINELIB_NAME(ValidateRect) VOID ValidateRgn16(HWND16,HRGN16); VOID ValidateRgn32(HWND32,HRGN32); @@ -6963,6 +7234,7 @@ INT32 LoadMessage32A(HINSTANCE32,UINT32,WORD,LPSTR,INT32); INT32 LoadMessage32W(HINSTANCE32,UINT32,WORD,LPWSTR,INT32); SEGPTR WIN16_GlobalLock16(HGLOBAL16); SEGPTR WIN16_LockResource(HGLOBAL16); +LONG WIN16_hread(HFILE16,SEGPTR,LONG); INT32 lstrncmp32A(LPCSTR,LPCSTR,INT32); INT32 lstrncmp32W(LPCWSTR,LPCWSTR,INT32); INT32 lstrncmpi32A(LPCSTR,LPCSTR,INT32); @@ -6972,65 +7244,6 @@ LPSTR lstrcpyWtoA(LPSTR,LPCWSTR); LPWSTR lstrcpynAtoW(LPWSTR,LPCSTR,INT32); LPSTR lstrcpynWtoA(LPSTR,LPCWSTR,INT32); -/* Library data types defined as a transition aid for the emulator. */ -/* These should _not_ be used in the emulator and will be removed someday. */ - -#ifndef NO_TRANSITION_TYPES - -#ifdef __WINE__ -# ifdef WINELIB32 -typedef INT32 INT; -typedef UINT32 UINT; -typedef BOOL32 BOOL; -# else /* WINELIB32 */ -typedef INT16 INT; -typedef UINT16 UINT; -typedef BOOL16 BOOL; -# endif /* WINELIB32 */ -#endif /* __WINE__ */ - -INT AddFontResource(LPCSTR); -int ConvertRequest(HWND16,LPKANJISTRUCT); -DWORD DragObject(HWND16, HWND16, WORD, HANDLE16, WORD, HCURSOR16); -BOOL EnumMetaFile(HDC16,HMETAFILE16,MFENUMPROC16,LPARAM); -HICON16 ExtractIcon(HINSTANCE16,LPCSTR,WORD); -HINSTANCE16 FindExecutable(LPCSTR,LPCSTR,LPSTR); -void FreeLibrary(HINSTANCE16); -HANDLE16 GetClipboardData(WORD); -int GetClipboardFormatName(WORD,LPSTR,short); -int GetEnvironment(LPSTR,LPSTR,WORD); -int GetKerningPairs(HDC16,int,LPKERNINGPAIR16); -BOOL GetMessage(SEGPTR,HWND16,UINT,UINT); -HMODULE16 GetModuleHandle(LPCSTR); -INT16 GetModuleUsage(HINSTANCE16); -int GetPriorityClipboardFormat(WORD*,short); -DWORD GetQueueStatus(UINT); -BOOL GetRasterizerCaps(LPRASTERIZER_STATUS,UINT); -HINSTANCE16 LoadModule(LPCSTR,LPVOID); -void OutputDebugString(LPCSTR); -void PlayMetaFileRecord(HDC16,LPHANDLETABLE16,LPMETARECORD,WORD); -BOOL PostMessage(HWND16,WORD,WORD,LONG); -BOOL RemoveFontResource(LPSTR); -void ReplyMessage(LRESULT); -HANDLE16 SetClipboardData(WORD,HANDLE16); -int SetEnvironment(LPCSTR,LPCSTR,WORD); -HINSTANCE16 ShellExecute(HWND16,LPCSTR,LPCSTR,LPSTR,LPCSTR,INT); -int UpdateColors(HDC16); - -/* Callback function pointers types. */ - -#ifdef WINELIB -typedef LONG (*DRIVERPROC)(DWORD, HDRVR16, UINT, LPARAM, LPARAM); -typedef int (*EDITWORDBREAKPROC)(LPSTR lpch, int ichCurrent, int cch,int code); -#else -typedef SEGPTR DRIVERPROC; -typedef SEGPTR EDITWORDBREAKPROC; -#endif - -#endif /* NO_TRANSITION_TYPES */ - -#define WINELIB_UNIMP(x) fprintf (stderr, "WineLib: Unimplemented %s\n", x) - #ifdef __cplusplus } #endif diff --git a/include/winerror.h b/include/winerror.h index 28cc005875c..75716bf7525 100644 --- a/include/winerror.h +++ b/include/winerror.h @@ -21,6 +21,7 @@ extern int WIN32_LastError; #define ERROR_OUTOFMEMORY 14 #define ERROR_NO_MORE_FILES 18 #define ERROR_SHARING_VIOLATION 32 +#define ERROR_DUP_NAME 52 #define ERROR_FILE_EXISTS 80 #define ERROR_INVALID_PARAMETER 87 #define ERROR_BROKEN_PIPE 109 @@ -29,6 +30,7 @@ extern int WIN32_LastError; #define ERROR_SEEK_ON_DEVICE 132 #define ERROR_DIR_NOT_EMPTY 145 #define ERROR_BUSY 170 +#define ERROR_ALREADY_EXISTS 183 #define ERROR_FILENAME_EXCED_RANGE 206 #define ERROR_MORE_DATA 234 #define ERROR_NO_MORE_ITEMS 259 diff --git a/include/winsock.h b/include/winsock.h index 0dfe7a3e08f..ed813b7ff7d 100644 --- a/include/winsock.h +++ b/include/winsock.h @@ -499,7 +499,7 @@ typedef struct __WSINFO struct __WSINFO* prev,*next; unsigned flags; - int errno; + int err; INT16 num_startup; INT16 num_async_rq; INT16 last_free; diff --git a/include/wintypes.h b/include/wintypes.h index c6b69ab22c2..05d3869cfd3 100644 --- a/include/wintypes.h +++ b/include/wintypes.h @@ -168,6 +168,13 @@ DECLARE_HANDLE(HWND); typedef LRESULT (*DLGPROC16)(HWND16,UINT16,WPARAM16,LPARAM); typedef LRESULT (*DLGPROC32)(HWND32,UINT32,WPARAM32,LPARAM); DECL_WINELIB_TYPE(DLGPROC); +typedef LRESULT (*DRIVERPROC16)(DWORD,HDRVR16,UINT16,LPARAM,LPARAM); +typedef LRESULT (*DRIVERPROC32)(DWORD,HDRVR32,UINT32,LPARAM,LPARAM); +DECL_WINELIB_TYPE(DRIVERPROC); +typedef INT16 (*EDITWORDBREAKPROC16)(LPSTR,INT16,INT16,INT16); +typedef INT32 (*EDITWORDBREAKPROC32A)(LPSTR,INT32,INT32,INT32); +typedef INT32 (*EDITWORDBREAKPROC32W)(LPWSTR,INT32,INT32,INT32); +DECL_WINELIB_TYPE_AW(EDITWORDBREAKPROC); typedef LRESULT (*FARPROC16)(); typedef LRESULT (*FARPROC32)(); DECL_WINELIB_TYPE(FARPROC); diff --git a/ipc/dde_proc.c b/ipc/dde_proc.c index 59d8942ce83..2f72bc3ec90 100644 --- a/ipc/dde_proc.c +++ b/ipc/dde_proc.c @@ -148,7 +148,7 @@ void dde_proc_add(dde_proc procs) } /* wait for dde - acknowledge message - or timout */ -static BOOL get_ack() +static BOOL32 get_ack() { struct timeval timeout; int size; @@ -186,7 +186,7 @@ static BOOL get_ack() } /* Transfer one message to a given process */ -static BOOL DDE_DoOneMessage (int proc_idx, int size, struct msgbuf *msgbuf) +static BOOL32 DDE_DoOneMessage (int proc_idx, int size, struct msgbuf *msgbuf) { dde_proc proc= &main_block->proc[ proc_idx ]; @@ -290,13 +290,13 @@ static HWND HWND_Local2Remote(HWND orig) return 0; } -static BOOL DDE_DoMessage( MSG16 *msg, int type ) +static BOOL32 DDE_DoMessage( MSG16 *msg, int type ) { int proc_idx; MSG16 *remote_message; struct msg_dat msg_dat; - BOOL success; + BOOL32 success; if (msg->wParam == 0) return FALSE; @@ -346,18 +346,18 @@ static BOOL DDE_DoMessage( MSG16 *msg, int type ) } } -BOOL DDE_SendMessage( MSG16 *msg) +BOOL32 DDE_SendMessage( MSG16 *msg) { return DDE_DoMessage(msg, DDE_SEND); } -BOOL DDE_PostMessage( MSG16 *msg) +BOOL32 DDE_PostMessage( MSG16 *msg) { return DDE_DoMessage(msg, DDE_POST); } -void dde_proc_send_ack(HWND wnd, BOOL val) { +void dde_proc_send_ack(HWND wnd, BOOL32 val) { int proc,msg; static struct msgbuf msg_ack={DDE_ACK,{'0'}}; @@ -384,8 +384,8 @@ int DDE_GetRemoteMessage() MSG16 *remote_message; int size; struct msg_dat msg_dat; - BOOL was_sent; /* sent/received */ - BOOL passed; + BOOL32 was_sent; /* sent/received */ + BOOL32 passed; WND *wndPtr; if (curr_proc_idx==-1) /* do we have DDE initialized ? */ @@ -667,7 +667,7 @@ void dde_wnd_setup() main_block->windows[i].proc_idx = FREE_WND; } -static BOOL DDE_ProcHasWindows(int proc_idx) +static BOOL32 DDE_ProcHasWindows(int proc_idx) { WND_DATA *tested; int i; diff --git a/ipc/generic_hash.c b/ipc/generic_hash.c index df0449b8281..98d4e1728aa 100644 --- a/ipc/generic_hash.c +++ b/ipc/generic_hash.c @@ -24,12 +24,12 @@ (i)*(size)) ) static HASH_ITEM *locate_entry(HASH_CONTAINER* hash, DWORD key, - HASH_VAL *seeked_data, BOOL skip_deleted); + HASH_VAL *seeked_data, BOOL32 skip_deleted); static void copy_hash_items(HASH_CONTAINER *hash, HASH_ITEM *old_items, int old_n_items); -static BOOL arrays_initialized = FALSE; +static BOOL32 arrays_initialized = FALSE; static int primes[NO_OF_PRIMES]; static int best_primes[NO_OF_PRIMES]; static int no_of_primes; @@ -37,7 +37,7 @@ static int no_of_best_primes; static int max_num; /* binary search for `num' in the `primes' array */ -static BOOL prime_binary_search_found(int num) +static BOOL32 prime_binary_search_found(int num) { int min_idx, max_idx, idx; @@ -56,7 +56,7 @@ static BOOL prime_binary_search_found(int num) return FALSE; } -static BOOL is_prime(int num) +static BOOL32 is_prime(int num) { int i; if ((num & 0x1) == 0) /* can be divided by 2 */ @@ -218,7 +218,7 @@ static void setup_arrays() static void static_collect_garbge(HASH_CONTAINER *hash) { int i; - BOOL change; + BOOL32 change; HASH_ITEM *items; HASH_ITEM *located; HASH_ITEM *item; @@ -516,9 +516,9 @@ void detach_hash(HASH_CONTAINER *hash) /********** Hash usage *************/ -static __inline__ BOOL +static __inline__ BOOL32 correct_entry(HASH_ITEM *item, int key, HASH_VAL *seeked_data, - HASH_ITEM_TEST *is_correct_item, BOOL skip_deleted) + HASH_ITEM_TEST *is_correct_item, BOOL32 skip_deleted) { switch(item->key) { case FREE_ENTRY: @@ -549,7 +549,7 @@ correct_entry(HASH_ITEM *item, int key, HASH_VAL *seeked_data, */ static HASH_ITEM *locate_entry(HASH_CONTAINER* hash, DWORD key, - HASH_VAL *seeked_data, BOOL skip_deleted) + HASH_VAL *seeked_data, BOOL32 skip_deleted) { DWORD hash_idx, hash_leaps; HASH_ITEM *item; @@ -619,7 +619,7 @@ HASH_VAL *hash_locate_item(HASH_CONTAINER* hash, } -BOOL hash_add_item(HASH_CONTAINER* hash, int key, HASH_VAL *data) +BOOL32 hash_add_item(HASH_CONTAINER* hash, int key, HASH_VAL *data) { HASH_SHARED *shared; HASH_ITEM *item; @@ -649,7 +649,7 @@ BOOL hash_add_item(HASH_CONTAINER* hash, int key, HASH_VAL *data) } -BOOL hash_delete_item(HASH_CONTAINER* hash, int key, HASH_VAL *seeked_data) +BOOL32 hash_delete_item(HASH_CONTAINER* hash, int key, HASH_VAL *seeked_data) { HASH_ITEM *item; diff --git a/ipc/generic_hash.h b/ipc/generic_hash.h index 6bd296f35d7..daa3409b50e 100644 --- a/ipc/generic_hash.h +++ b/ipc/generic_hash.h @@ -48,7 +48,7 @@ typedef struct hash_share_struct { /* changes to the pointer. */ HASH_PTR items; /* pointer to the items */ } HASH_SHARED; -typedef BOOL HASH_ITEM_TEST(HASH_VAL *value, HASH_VAL *seeked_data); +typedef BOOL32 HASH_ITEM_TEST(HASH_VAL *value, HASH_VAL *seeked_data); /* NOTE: * 1. Keys 0 and -1 are reserved. @@ -62,7 +62,7 @@ typedef struct hash_container_struct { (Function of maximum_load) */ int last_ptr_update; /* to be compared with shared.ptr_updates */ - BOOL shared_was_malloced; /* Need that to know how to destroy hash */ + BOOL32 shared_was_malloced; /* Need that to know how to destroy hash */ /* This is an optional handler. * If not NULL, this function is used for distinguishing between @@ -129,8 +129,8 @@ void detach_hash(HASH_CONTAINER *hash); * 2. data to store. (for hash_add_item). */ HASH_VAL *hash_locate_item(HASH_CONTAINER* hash,int key, HASH_VAL* seeked_data); -BOOL hash_add_item(HASH_CONTAINER* hash, int key, HASH_VAL* data); -BOOL hash_delete_item(HASH_CONTAINER* hash, int key, HASH_VAL* seeked_data); +BOOL32 hash_add_item(HASH_CONTAINER* hash, int key, HASH_VAL* data); +BOOL32 hash_delete_item(HASH_CONTAINER* hash, int key, HASH_VAL* seeked_data); void *ret_null(); /* function returning null (used for */ diff --git a/library/libres.c b/library/libres.c index ebe155d69b8..cc5bd3ad219 100644 --- a/library/libres.c +++ b/library/libres.c @@ -58,7 +58,7 @@ HRSRC32 LIBRES_FindResource16( HINSTANCE32 hModule, LPCSTR name, LPCSTR type ) typeid=atoi(type+1); else { - WINELIB_UNIMP("LIBRES_FindResource16(*,*,type=string)"); + fprintf(stderr,"LIBRES_FindResource16(*,*,type=string)"); return 0; } } @@ -112,7 +112,7 @@ HRSRC32 LIBRES_FindResource32( HINSTANCE32 hModule, LPCWSTR name, LPCWSTR type ) } else { - WINELIB_UNIMP("LIBRES_FindResource32(*,*,type=string)"); + fprintf(stderr,"LIBRES_FindResource32(*,*,type=string)"); return 0; } } @@ -154,7 +154,7 @@ LPVOID LIBRES_LockResource( HGLOBAL32 handle ) /********************************************************************** * LIBRES_FreeResource */ -BOOL LIBRES_FreeResource( HGLOBAL32 handle ) +BOOL32 LIBRES_FreeResource( HGLOBAL32 handle ) { return 0; /* Obsolete in Win32 */ } @@ -165,7 +165,7 @@ BOOL LIBRES_FreeResource( HGLOBAL32 handle ) */ INT32 LIBRES_AccessResource( HINSTANCE32 hModule, HRSRC32 hRsrc ) { - WINELIB_UNIMP("LIBRES_AccessResource()"); + fprintf(stderr,"LIBRES_AccessResource()"); return -1; /* Obsolete in Win32 */ } @@ -184,7 +184,7 @@ DWORD LIBRES_SizeofResource( HINSTANCE32 hModule, HRSRC32 hRsrc ) */ HGLOBAL32 LIBRES_AllocResource( HINSTANCE32 hModule, HRSRC32 hRsrc, DWORD size) { - WINELIB_UNIMP("LIBRES_AllocResource()"); + fprintf(stderr,"LIBRES_AllocResource()"); return 0; /* Obsolete in Win32 */ } diff --git a/library/miscstubs.c b/library/miscstubs.c index e6177ee4a17..0b021da8c0a 100644 --- a/library/miscstubs.c +++ b/library/miscstubs.c @@ -45,18 +45,18 @@ int CallTo32_LargeStack( int (*func)(), int nbargs, ...) } } -extern LRESULT ColorDlgProc(HWND16,UINT,WPARAM16,LPARAM); -extern LRESULT ComboBoxWndProc(HWND16,UINT,WPARAM16,LPARAM); -extern LRESULT ComboLBoxWndProc(HWND16,UINT,WPARAM16,LPARAM); -extern LRESULT FileOpenDlgProc(HWND16,UINT,WPARAM16,LPARAM); -extern LRESULT FileSaveDlgProc(HWND16,UINT,WPARAM16,LPARAM); -extern LRESULT FindTextDlgProc(HWND16,UINT,WPARAM16,LPARAM); -extern LRESULT MDIClientWndProc(HWND16,UINT,WPARAM16,LPARAM); -extern LRESULT PrintDlgProc(HWND16,UINT,WPARAM16,LPARAM); -extern LRESULT PrintSetupDlgProc(HWND16,UINT,WPARAM16,LPARAM); -extern LRESULT ReplaceTextDlgProc(HWND16,UINT,WPARAM16,LPARAM); -extern LRESULT ScrollBarWndProc(HWND16,UINT,WPARAM16,LPARAM); -extern LRESULT StaticWndProc(HWND16,UINT,WPARAM16,LPARAM); +extern LRESULT ColorDlgProc(HWND16,UINT16,WPARAM16,LPARAM); +extern LRESULT ComboBoxWndProc(HWND16,UINT16,WPARAM16,LPARAM); +extern LRESULT ComboLBoxWndProc(HWND16,UINT16,WPARAM16,LPARAM); +extern LRESULT FileOpenDlgProc(HWND16,UINT16,WPARAM16,LPARAM); +extern LRESULT FileSaveDlgProc(HWND16,UINT16,WPARAM16,LPARAM); +extern LRESULT FindTextDlgProc(HWND16,UINT16,WPARAM16,LPARAM); +extern LRESULT MDIClientWndProc(HWND16,UINT16,WPARAM16,LPARAM); +extern LRESULT PrintDlgProc(HWND16,UINT16,WPARAM16,LPARAM); +extern LRESULT PrintSetupDlgProc(HWND16,UINT16,WPARAM16,LPARAM); +extern LRESULT ReplaceTextDlgProc(HWND16,UINT16,WPARAM16,LPARAM); +extern LRESULT ScrollBarWndProc(HWND16,UINT16,WPARAM16,LPARAM); +extern LRESULT StaticWndProc(HWND16,UINT16,WPARAM16,LPARAM); extern LRESULT TASK_Reschedule(void); /*********************************************************************** diff --git a/loader/main.c b/loader/main.c index 64854d6c1cc..8fd8b5d2544 100644 --- a/loader/main.c +++ b/loader/main.c @@ -60,10 +60,14 @@ int MAIN_Init(void) extern BOOL32 RELAY_Init(void); extern BOOL32 WIN16DRV_Init(void); extern BOOL32 SIGNAL_Init(void); + extern BOOL32 VIRTUAL_Init(void); extern BOOL32 WIDGETS_Init(void); int queueSize; + /* Initialize virtual memory management */ + if (!VIRTUAL_Init()) return 0; + /* Create the system and SEGPTR heaps */ if (!(SystemHeap = HeapCreate( HEAP_GROWABLE, 0x10000, 0 ))) return 0; if (!(SegptrHeap = HeapCreate( HEAP_WINE_SEGPTR, 0, 0 ))) return 0; diff --git a/loader/module.c b/loader/module.c index 4f4c1e4656d..b2474894c4b 100644 --- a/loader/module.c +++ b/loader/module.c @@ -848,7 +848,7 @@ FARPROC16 MODULE_GetWndProcEntry16( const char *name ) FARPROC16 ret; static HMODULE16 hModule = 0; - if (!hModule) hModule = GetModuleHandle( "WPROCS" ); + if (!hModule) hModule = GetModuleHandle16( "WPROCS" ); ordinal = MODULE_GetOrdinal( hModule, name ); if (!(ret = MODULE_GetEntryPoint( hModule, ordinal ))) fprintf( stderr, "GetWndProc16: %s not found, please report\n", name ); @@ -1129,7 +1129,7 @@ HINSTANCE16 MODULE_Load( LPCSTR name, LPVOID paramBlock, BOOL32 first ) SEGTABLEENTRY * pSegTable = (SEGTABLEENTRY *) NE_SEG_TABLE(pModule); SELFLOADHEADER *selfloadheader; STACK16FRAME *stack16Top; - HMODULE16 hselfload = GetModuleHandle("WPROCS"); + HMODULE16 hselfload = GetModuleHandle16("WPROCS"); WORD oldss, oldsp, saved_dgroup = pSegTable[pModule->dgroup - 1].selector; fprintf (stderr, "Warning: %*.*s is a self-loading module\n" "Support for self-loading modules is very experimental\n", @@ -1142,7 +1142,7 @@ HINSTANCE16 MODULE_Load( LPCSTR name, LPVOID paramBlock, BOOL32 first ) selfloadheader->EntryAddrProc = MODULE_GetEntryPoint(hselfload,27); selfloadheader->MyAlloc = MODULE_GetEntryPoint(hselfload,28); - selfloadheader->SetOwner = MODULE_GetEntryPoint(GetModuleHandle("KERNEL"),403); + selfloadheader->SetOwner = MODULE_GetEntryPoint(GetModuleHandle16("KERNEL"),403); pModule->self_loading_sel = GlobalHandleToSel( GLOBAL_Alloc (GMEM_ZEROINIT, 0xFF00, hModule, FALSE, FALSE, FALSE) @@ -1262,9 +1262,9 @@ HINSTANCE16 MODULE_Load( LPCSTR name, LPVOID paramBlock, BOOL32 first ) /********************************************************************** - * LoadModule (KERNEL.45) + * LoadModule16 (KERNEL.45) */ -HINSTANCE16 LoadModule( LPCSTR name, LPVOID paramBlock ) +HINSTANCE16 LoadModule16( LPCSTR name, LPVOID paramBlock ) { return MODULE_Load( name, paramBlock, TRUE ); } @@ -1288,7 +1288,7 @@ BOOL16 FreeModule16( HMODULE16 hModule ) /********************************************************************** - * GetModuleHandle (KERNEL.47) + * GetModuleHandle16 (KERNEL.47) */ HMODULE16 WIN16_GetModuleHandle( SEGPTR name ) { @@ -1296,7 +1296,7 @@ HMODULE16 WIN16_GetModuleHandle( SEGPTR name ) return MODULE_FindModule( PTR_SEG_TO_LIN(name) ); } -HMODULE16 GetModuleHandle( LPCSTR name ) +HMODULE16 GetModuleHandle16( LPCSTR name ) { return MODULE_FindModule( name ); } @@ -1410,9 +1410,9 @@ HINSTANCE16 LoadLibrary16( LPCSTR libname ) /*********************************************************************** - * FreeLibrary (KERNEL.96) + * FreeLibrary16 (KERNEL.96) */ -void FreeLibrary( HINSTANCE16 handle ) +void FreeLibrary16( HINSTANCE16 handle ) { dprintf_module( stddeb,"FreeLibrary: %04x\n", handle ); FreeModule16( handle ); @@ -1477,7 +1477,7 @@ HINSTANCE32 WinExec32( LPCSTR lpCmdLine, UINT32 nCmdShow ) params.cmdLine = (SEGPTR)WIN16_GlobalLock16( cmdLineHandle ); params.showCmd = (SEGPTR)WIN16_GlobalLock16( cmdShowHandle ); params.reserved = 0; - handle = LoadModule( filename, ¶ms ); + handle = LoadModule16( filename, ¶ms ); if (handle == 2) /* file not found */ { /* Check that the original file name did not have a suffix */ @@ -1487,7 +1487,7 @@ HINSTANCE32 WinExec32( LPCSTR lpCmdLine, UINT32 nCmdShow ) { p = filename + strlen(filename); strcpy( p, ".exe" ); - handle = LoadModule( filename, ¶ms ); + handle = LoadModule16( filename, ¶ms ); *p = '\0'; /* Remove extension */ } } @@ -1675,7 +1675,7 @@ BOOL16 ModuleNext( MODULEENTRY *lpme ) */ BOOL16 ModuleFindName( MODULEENTRY *lpme, LPCSTR name ) { - lpme->wNext = GetModuleHandle( name ); + lpme->wNext = GetModuleHandle16( name ); return ModuleNext( lpme ); } diff --git a/loader/ne_image.c b/loader/ne_image.c index 9bbdf212c63..f81cf826081 100644 --- a/loader/ne_image.c +++ b/loader/ne_image.c @@ -31,7 +31,7 @@ /*********************************************************************** * NE_LoadSegment */ -BOOL NE_LoadSegment( HMODULE16 hModule, WORD segnum ) +BOOL32 NE_LoadSegment( HMODULE16 hModule, WORD segnum ) { NE_MODULE *pModule; SEGTABLEENTRY *pSegTable, *pSeg; @@ -62,8 +62,8 @@ BOOL NE_LoadSegment( HMODULE16 hModule, WORD segnum ) lseek( fd, pSeg->filepos << pModule->alignment, SEEK_SET ); size = pSeg->size ? pSeg->size : 0x10000; mem = GlobalLock16(pSeg->selector); - if (pModule->flags & NE_FFLAGS_SELFLOAD && segnum > 1) { -#ifndef WINELIB + if (pModule->flags & NE_FFLAGS_SELFLOAD && segnum > 1) + { /* Implement self loading segments */ SELFLOADHEADER *selfloadheader; STACK16FRAME *stack16Top; @@ -110,10 +110,7 @@ BOOL NE_LoadSegment( HMODULE16 hModule, WORD segnum ) IF1632_Saved16_ss = oldss; IF1632_Saved16_sp = oldsp; -#else - fprintf(stderr,"JBP: Ignoring self loading segments in NE_LoadSegment.\n"); -#endif - } + } else if (!(pSeg->flags & NE_SEGFLAGS_ITERATED)) read(fd, mem, size); else { @@ -362,9 +359,6 @@ BOOL NE_LoadSegment( HMODULE16 hModule, WORD segnum ) */ void NE_FixupPrologs( NE_MODULE *pModule ) { -#ifdef WINELIB - fprintf(stderr,"NE_FixupPrologs should not be called for libwine\n"); -#else SEGTABLEENTRY *pSegTable; WORD dgroup = 0; WORD sel; @@ -443,7 +437,6 @@ void NE_FixupPrologs( NE_MODULE *pModule ) p += (sel == 0xff) ? 6 : 3; } } -#endif } @@ -452,12 +445,11 @@ void NE_FixupPrologs( NE_MODULE *pModule ) * * Call the DLL initialization code */ -static BOOL NE_InitDLL( HMODULE16 hModule ) +static BOOL32 NE_InitDLL( HMODULE16 hModule ) { -#ifndef WINELIB - int cs_reg, ds_reg, ip_reg, cx_reg, di_reg, bp_reg; NE_MODULE *pModule; SEGTABLEENTRY *pSegTable; + CONTEXT context; /* Registers at initialization must be: * cx heap size @@ -473,6 +465,8 @@ static BOOL NE_InitDLL( HMODULE16 hModule ) (pModule->flags & NE_FFLAGS_WIN32)) return TRUE; /*not a library*/ if (!pModule->cs) return TRUE; /* no initialization code */ + memset( &context, 0, sizeof(context) ); + if (!(pModule->flags & NE_FFLAGS_SINGLEDATA)) { if (pModule->flags & NE_FFLAGS_MULTIPLEDATA || pModule->dgroup) @@ -483,31 +477,28 @@ static BOOL NE_InitDLL( HMODULE16 hModule ) } else /* DATA NONE DLL */ { - ds_reg = 0; - cx_reg = 0; + DS_reg(&context) = 0; + ECX_reg(&context) = 0; } } else /* DATA SINGLE DLL */ { - ds_reg = pSegTable[pModule->dgroup-1].selector; - cx_reg = pModule->heap_size; + DS_reg(&context) = pSegTable[pModule->dgroup-1].selector; + ECX_reg(&context) = pModule->heap_size; } - cs_reg = pSegTable[pModule->cs-1].selector; - ip_reg = pModule->ip; - di_reg = ds_reg ? ds_reg : hModule; - bp_reg = IF1632_Saved16_sp + ((WORD)&((STACK16FRAME*)1)->bp - 1); + CS_reg(&context) = pSegTable[pModule->cs-1].selector; + EIP_reg(&context) = pModule->ip; + EBP_reg(&context) = IF1632_Saved16_sp + (WORD)&((STACK16FRAME*)0)->bp; + EDI_reg(&context) = DS_reg(&context) ? DS_reg(&context) : hModule; + pModule->cs = 0; /* Don't initialize it twice */ - dprintf_dll( stddeb, "Calling LibMain, cs:ip=%04x:%04x ds=%04x di=%04x cx=%04x\n", - cs_reg, ip_reg, ds_reg, di_reg, cx_reg ); - return CallTo16_regs_( (FARPROC16)(cs_reg << 16 | ip_reg), ds_reg, - 0 /*es*/, 0 /*bp*/, 0 /*ax*/, 0 /*bx*/, - cx_reg, 0 /*dx*/, 0 /*si*/, di_reg ); -#else - fprintf( stderr,"JBP: Ignoring call to LibMain\n" ); - return FALSE; -#endif + dprintf_dll( stddeb, "Calling LibMain, cs:ip=%04lx:%04x ds=%04lx di=%04x cx=%04x\n", + CS_reg(&context), IP_reg(&context), DS_reg(&context), + DI_reg(&context), CX_reg(&context) ); + CallTo16_regs_( &context ); + return TRUE; } diff --git a/loader/pe_image.c b/loader/pe_image.c index 59d15cb63d7..24cf3e9d0a8 100644 --- a/loader/pe_image.c +++ b/loader/pe_image.c @@ -406,9 +406,9 @@ problem needs to be fixed properly at some stage */ load_addr = pe->load_addr = (int)xmalloc(pe->vma_size); memset( load_addr, 0, pe->vma_size); #else - load_addr = pe->load_addr = VirtualAlloc( NULL, pe->vma_size, - MEM_COMMIT, - PAGE_EXECUTE_READWRITE ); + load_addr = (int) VirtualAlloc( NULL, pe->vma_size, MEM_COMMIT, + PAGE_EXECUTE_READWRITE ); + pe->load_addr = load_addr; #endif dprintf_win32(stddeb, "Load addr is really %x, range %x\n", @@ -510,9 +510,11 @@ problem needs to be fixed properly at some stage */ [IMAGE_DIRECTORY_ENTRY_GLOBALPTR].Size) dprintf_win32(stdnimp,"Global Pointer (MIPS) ignored\n"); +#ifdef NOT /* we initialize this later */ if(pe->pe_header->OptionalHeader.DataDirectory [IMAGE_DIRECTORY_ENTRY_TLS].Size) dprintf_win32(stdnimp,"Thread local storage ignored\n"); +#endif if(pe->pe_header->OptionalHeader.DataDirectory [IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG].Size) @@ -647,4 +649,30 @@ void PE_InitializeDLLs(HMODULE16 hModule) } PE_InitDLL( hModule ); } + +void PE_InitTls( PE_MODULE *module ) +{ + /* FIXME: tls callbacks ??? */ + DWORD index; + DWORD datasize; + DWORD size; + LPVOID mem; + LPIMAGE_TLS_DIRECTORY pdir; + + if (!module->pe_header->OptionalHeader.DataDirectory[IMAGE_FILE_THREAD_LOCAL_STORAGE].VirtualAddress) + return; + + pdir = (LPVOID)(module->load_addr + module->pe_header->OptionalHeader. + DataDirectory[IMAGE_FILE_THREAD_LOCAL_STORAGE].VirtualAddress); + index = TlsAlloc(); + datasize = pdir->EndAddressOfRawData-pdir->StartAddressOfRawData; + size = datasize + pdir->SizeOfZeroFill; + + mem = VirtualAlloc(0,size, MEM_RESERVE|MEM_COMMIT, PAGE_READWRITE ); + + memcpy(mem,(LPVOID) pdir->StartAddressOfRawData, datasize); + TlsSetValue(index,mem); + *(pdir->AddressOfIndex)=index; +} + #endif /* WINELIB */ diff --git a/loader/pe_resource.c b/loader/pe_resource.c index 08655d0ffa8..2d2bbaff921 100644 --- a/loader/pe_resource.c +++ b/loader/pe_resource.c @@ -11,6 +11,7 @@ * Copyright 1997 Marcus Meissner */ +#include #include #include "wintypes.h" #include "windows.h" @@ -54,7 +55,12 @@ LPIMAGE_RESOURCE_DIRECTORY GetResDirEntryW(LPIMAGE_RESOURCE_DIRECTORY resdirptr, int namelen; if (HIWORD(name)) { - /* FIXME: what about #xxx names? */ + if (name[0]=='#') { + char buf[10]; + + lstrcpynWtoA(buf,name+1,10); + return GetResDirEntryW(resdirptr,(LPCWSTR)atoi(buf),root); + } entryTable = (LPIMAGE_RESOURCE_DIRECTORY_ENTRY) ( (BYTE *) resdirptr + sizeof(IMAGE_RESOURCE_DIRECTORY)); diff --git a/loader/resource.c b/loader/resource.c index d2f50fe9b76..37dc9c1a58d 100644 --- a/loader/resource.c +++ b/loader/resource.c @@ -111,9 +111,15 @@ HRSRC32 FindResourceEx32W( if (!hModule) hModule = GetTaskDS(); hModule = GetExePtr( hModule ); /* In case we were passed an hInstance */ dprintf_resource(stddeb, "FindResource32W: module=%08x type=", hModule ); - PrintId( type ); + if (HIWORD(type)) + dprintf_resource(stddeb,"%p",type); + else + dprintf_resource(stddeb,"#%p",type); dprintf_resource( stddeb, " name=" ); - PrintId( name ); + if (HIWORD(name)) + dprintf_resource(stddeb,"%p",name); + else + dprintf_resource(stddeb,"#%p",name); dprintf_resource( stddeb, "\n" ); if (!(pModule = MODULE_GetPtr( hModule ))) return 0; if (!(pModule->flags & NE_FFLAGS_WIN32)) return 0; diff --git a/loader/signal.c b/loader/signal.c index e1fba1f4d54..17739ec1bb5 100644 --- a/loader/signal.c +++ b/loader/signal.c @@ -48,6 +48,21 @@ wine_sigaction(int sig,struct sigaction * new, struct sigaction * old) errno = -sig; return -1; } +#endif /* linux */ + + +#ifdef linux +#define HANDLER_DEF(name) void name (int signal, SIGCONTEXT context_struct) +#define HANDLER_PROLOG SIGCONTEXT *context = &context_struct; (void)context; { +#define HANDLER_EPILOG } +#elif defined(__svr4__) || defined(_SCO_DS) +#define HANDLER_DEF(name) void name (int signal, void *siginfo, SIGCONTEXT *context) +#define HANDLER_PROLOG /* nothing */ +#define HANDLER_EPILOG /* nothing */ +#else +#define HANDLER_DEF(name) void name (int signal, int code, SIGCONTEXT *context) +#define HANDLER_PROLOG /* nothing */ +#define HANDLER_EPILOG /* nothing */ #endif extern BOOL32 INSTR_EmulateInstruction( SIGCONTEXT *context ); @@ -57,19 +72,13 @@ extern BOOL32 INSTR_EmulateInstruction( SIGCONTEXT *context ); * * SIGALRM handler. */ -#ifdef linux -static void wine_timer(int signal, SIGCONTEXT context_struct) +static +HANDLER_DEF(wine_timer) { -#elif defined(__svr4__) -static void wine_timer(int signal, void *siginfo, SIGCONTEXT *context) -{ -#else -static void wine_timer(int signal, int code, SIGCONTEXT *context) -{ -#endif - /* Should do real-time timers here */ - - DOSMEM_Tick(); + HANDLER_PROLOG; + /* Should do real-time timers here */ + DOSMEM_Tick(); + HANDLER_EPILOG; } /********************************************************************** @@ -77,19 +86,13 @@ static void wine_timer(int signal, int code, SIGCONTEXT *context) * * Handle Ctrl-C and such */ -#ifdef linux -static void SIGNAL_break(int signal, SIGCONTEXT context_struct) +static +HANDLER_DEF(SIGNAL_break) { - SIGCONTEXT *context = &context_struct; -#elif defined(__svr4__) || defined(_SCO_DS) -static void SIGNAL_break(int signal, void *siginfo, SIGCONTEXT *context) -{ -#else -static void SIGNAL_break(int signal, int code, SIGCONTEXT *context) -{ -#endif - if (Options.debug) wine_debug( signal, context ); /* Enter our debugger */ - exit(0); + HANDLER_PROLOG; + if (Options.debug) wine_debug( signal, context ); /* Enter our debugger */ + exit(0); + HANDLER_EPILOG; } /********************************************************************** @@ -97,13 +100,19 @@ static void SIGNAL_break(int signal, int code, SIGCONTEXT *context) * * wait4 terminated child processes */ -static void SIGNAL_child(void) +static +HANDLER_DEF(SIGNAL_child) { -#if defined(__svr4__) || defined(__EMX__) - wait(NULL); + HANDLER_PROLOG; +#ifdef HAVE_WAIT4 + wait4( 0, NULL, WNOHANG, NULL); +#elif defined (HAVE_WAITPID) + /* I am sort-of guessing that this is the same as the wait4 call. */ + waitpid (0, NULL, WNOHANG); #else - wait4( 0, NULL, WNOHANG, NULL); + wait(NULL); #endif + HANDLER_EPILOG; } @@ -112,18 +121,12 @@ static void SIGNAL_child(void) * * SIGTRAP handler. */ -#ifdef linux -static void SIGNAL_trap(int signal, SIGCONTEXT context_struct) +static +HANDLER_DEF(SIGNAL_trap) { - SIGCONTEXT *context = &context_struct; -#elif defined(__svr4__) || defined(_SCO_DS) -static void SIGNAL_trap(int signal, void *siginfo, SIGCONTEXT *context) -{ -#else -static void SIGNAL_trap(int signal, int code, SIGCONTEXT *context) -{ -#endif - wine_debug( signal, context ); /* Enter our debugger */ + HANDLER_PROLOG; + wine_debug( signal, context ); /* Enter our debugger */ + HANDLER_EPILOG; } @@ -132,30 +135,24 @@ static void SIGNAL_trap(int signal, int code, SIGCONTEXT *context) * * Segfault handler. */ -#ifdef linux -static void SIGNAL_fault(int signal, SIGCONTEXT context_struct) +static +HANDLER_DEF(SIGNAL_fault) { - SIGCONTEXT *context = &context_struct; -#elif defined(__svr4__) || defined(_SCO_DS) -static void SIGNAL_fault(int signal, void *siginfo, SIGCONTEXT *context) -{ -#else -static void SIGNAL_fault(int signal, int code, SIGCONTEXT *context) -{ -#endif - if (CS_sig(context) == WINE_CODE_SELECTOR) + HANDLER_PROLOG; + if (CS_sig(context) == WINE_CODE_SELECTOR) { fprintf( stderr, "Segmentation fault in Wine program (%x:%lx)." " Please debug.\n", CS_sig(context), EIP_sig(context) ); } - else + else { if (INSTR_EmulateInstruction( context )) return; fprintf( stderr, "Segmentation fault in Windows program %x:%lx.\n", CS_sig(context), EIP_sig(context) ); } - wine_debug( signal, context ); + wine_debug( signal, context ); + HANDLER_EPILOG; } diff --git a/loader/task.c b/loader/task.c index d9a666fc9f6..38e602812e8 100644 --- a/loader/task.c +++ b/loader/task.c @@ -40,6 +40,7 @@ #define MIN_THUNKS 32 extern void USER_AppExit( HTASK16, HINSTANCE16, HQUEUE16 ); +extern void PE_InitTls( PE_MODULE *module ); /* Saved 16-bit stack for current process (Win16 only) */ WORD IF1632_Saved16_ss = 0; @@ -315,7 +316,7 @@ static SEGPTR TASK_AllocThunk( HTASK16 hTask ) * * Free a MakeProcInstance() thunk. */ -static BOOL TASK_FreeThunk( HTASK16 hTask, SEGPTR thunk ) +static BOOL32 TASK_FreeThunk( HTASK16 hTask, SEGPTR thunk ) { TDB *pTask; THUNKS *pThunk; @@ -347,7 +348,6 @@ static BOOL TASK_FreeThunk( HTASK16 hTask, SEGPTR thunk ) #ifndef WINELIB static void TASK_CallToStart(void) { - int cs_reg, ds_reg, ip_reg; int exit_code = 1; TDB *pTask = (TDB *)GlobalLock16( hCurrentTask ); NE_MODULE *pModule = MODULE_GetPtr( pTask->hModule ); @@ -384,19 +384,22 @@ static void TASK_CallToStart(void) * ss stack selector * sp top of the stack */ + CONTEXT context; - cs_reg = pSegTable[pModule->cs - 1].selector; - ip_reg = pModule->ip; - ds_reg = pSegTable[pModule->dgroup - 1].selector; + memset( &context, 0, sizeof(context) ); + CS_reg(&context) = pSegTable[pModule->cs - 1].selector; + DS_reg(&context) = pSegTable[pModule->dgroup - 1].selector; + ES_reg(&context) = pTask->hPDB; + EIP_reg(&context) = pModule->ip; + EBX_reg(&context) = pModule->stack_size; + ECX_reg(&context) = pModule->heap_size; + EDI_reg(&context) = context.SegDs; - dprintf_task( stddeb, "Starting main program: cs:ip=%04x:%04x ds=%04x ss:sp=%04x:%04x\n", - cs_reg, ip_reg, ds_reg, - IF1632_Saved16_ss, IF1632_Saved16_sp); + dprintf_task( stddeb, "Starting main program: cs:ip=%04lx:%04x ds=%04lx ss:sp=%04x:%04x\n", + CS_reg(&context), IP_reg(&context), DS_reg(&context), + IF1632_Saved16_ss, IF1632_Saved16_sp ); - CallTo16_regs_( (FARPROC16)(cs_reg << 16 | ip_reg), ds_reg, - pTask->hPDB /*es*/, 0 /*bp*/, 0 /*ax*/, - pModule->stack_size /*bx*/, pModule->heap_size /*cx*/, - 0 /*dx*/, 0 /*si*/, ds_reg /*di*/ ); + CallTo16_regs_( &context ); /* This should never return */ fprintf( stderr, "TASK_CallToStart: Main program returned!\n" ); TASK_KillCurrentTask( 1 ); @@ -498,7 +501,8 @@ HTASK16 TASK_CreateTask( HMODULE16 hModule, HINSTANCE16 hInstance, pTask->pdb.int20 = 0x20cd; pTask->pdb.dispatcher[0] = 0x9a; /* ljmp */ #ifndef WINELIB - *(FARPROC16 *)&pTask->pdb.dispatcher[1] = MODULE_GetEntryPoint( GetModuleHandle("KERNEL"), 102 ); /* KERNEL.102 is DOS3Call() */ + *(FARPROC16 *)&pTask->pdb.dispatcher[1] = MODULE_GetEntryPoint( + GetModuleHandle16("KERNEL"), 102 ); /* KERNEL.102 is DOS3Call() */ #endif pTask->pdb.savedint22 = INT_GetHandler( 0x22 ); pTask->pdb.savedint23 = INT_GetHandler( 0x23 ); @@ -541,6 +545,11 @@ HTASK16 TASK_CreateTask( HMODULE16 hModule, HINSTANCE16 hInstance, (LPTHREAD_START_ROUTINE)(pModule->pe_module->load_addr + pModule->pe_module->pe_header->OptionalHeader.AddressOfEntryPoint); pTask->thdb = THREAD_Create( pdb32, 0, start ); +#ifndef WINELIB + /* FIXME: should not be done here */ + pCurrentThread = pTask->thdb; + PE_InitTls( pModule->pe_module ); +#endif } else pTask->thdb = THREAD_Create( pdb32, 0, NULL ); @@ -1501,9 +1510,18 @@ BOOL16 TaskFindHandle( TASKENTRY *lpte, HTASK16 hTask ) /*********************************************************************** - * GetAppCompatFlags (KERNEL.354) (USER32.205) + * GetAppCompatFlags16 (KERNEL.354) */ -DWORD GetAppCompatFlags( HTASK32 hTask ) +DWORD GetAppCompatFlags16( HTASK16 hTask ) +{ + return GetAppCompatFlags32( hTask ); +} + + +/*********************************************************************** + * GetAppCompatFlags32 (USER32.205) + */ +DWORD GetAppCompatFlags32( HTASK32 hTask ) { TDB *pTask; diff --git a/memory/Makefile.in b/memory/Makefile.in index d473cd0b247..0214f918b9d 100644 --- a/memory/Makefile.in +++ b/memory/Makefile.in @@ -1,4 +1,4 @@ -DEFS = -D__WINE__ -DNO_TRANSITION_TYPES +DEFS = -D__WINE__ TOPSRCDIR = @top_srcdir@ TOPOBJDIR = .. SRCDIR = @srcdir@ @@ -12,7 +12,8 @@ C_SRCS = \ ldt.c \ local.c \ selector.c \ - string.c + string.c \ + virtual.c all: $(MODULE).o diff --git a/memory/global.c b/memory/global.c index 3b15549b340..1a5c12e7f8b 100644 --- a/memory/global.c +++ b/memory/global.c @@ -604,7 +604,7 @@ DWORD GlobalDOSAlloc(DWORD size) if( lpBlock ) { - HMODULE16 hModule = GetModuleHandle("KERNEL"); + HMODULE16 hModule = GetModuleHandle16("KERNEL"); WORD wSelector; wSelector = GLOBAL_CreateBlock(GMEM_FIXED, lpBlock, size, diff --git a/memory/heap.c b/memory/heap.c index 494b1154353..75e5adc6a13 100644 --- a/memory/heap.c +++ b/memory/heap.c @@ -266,12 +266,12 @@ static BOOL32 HEAP_Decommit( SUBHEAP *subheap, void *ptr ) DWORD size = (DWORD)((char *)ptr - (char *)subheap); size = (size + 0xfff) & 0xfffff000; /* Align size on a page boundary */ if (size >= subheap->commitSize) return TRUE; - if (!VirtualFree( (char *)subheap + subheap->commitSize, - size - subheap->commitSize, MEM_DECOMMIT )) + if (!VirtualFree( (char *)subheap + size, + subheap->commitSize - size, MEM_DECOMMIT )) { fprintf( stderr, "HEAP_Decommit: could not decommit %08lx bytes at %08lx for heap %08lx\n", - size - subheap->commitSize, - (DWORD)((char *)subheap + subheap->commitSize), + subheap->commitSize - size, + (DWORD)((char *)subheap + size), (DWORD)subheap->heap ); return FALSE; } @@ -382,7 +382,6 @@ static void HEAP_MakeInUseBlockFree( SUBHEAP *subheap, ARENA_INUSE *pArena ) /* Free the memory */ subheap->magic = 0; if (subheap->selector) FreeSelector( subheap->selector ); - VirtualFree( subheap, subheap->size, MEM_DECOMMIT ); VirtualFree( subheap, 0, MEM_RELEASE ); return; } @@ -853,7 +852,6 @@ BOOL32 HeapDestroy( HANDLE32 heap ) { SUBHEAP *next = subheap->next; if (subheap->selector) FreeSelector( subheap->selector ); - VirtualFree( subheap, subheap->commitSize, MEM_DECOMMIT ); VirtualFree( subheap, 0, MEM_RELEASE ); subheap = next; } diff --git a/memory/selector.c b/memory/selector.c index bbb25c6072b..1da07686526 100644 --- a/memory/selector.c +++ b/memory/selector.c @@ -7,6 +7,7 @@ #include #include "windows.h" #include "ldt.h" +#include "miscemu.h" #include "selectors.h" #include "stackframe.h" #include "stddebug.h" diff --git a/memory/virtual.c b/memory/virtual.c new file mode 100644 index 00000000000..0cc397a4f3e --- /dev/null +++ b/memory/virtual.c @@ -0,0 +1,976 @@ +/* + * Win32 virtual memory functions + * + * Copyright 1997 Alexandre Julliard + */ + +#include +#include +#include +#include +#include +#include +#include +#include "winbase.h" +#include "winerror.h" +#include "file.h" +#include "heap.h" +#include "process.h" +#include "xmalloc.h" +#include "stddebug.h" +#include "debug.h" + +/* File mapping */ +typedef struct +{ + K32OBJ header; + DWORD size_high; + DWORD size_low; + FILE_OBJECT *file; + BYTE protect; +} FILE_MAPPING; + +/* File view */ +typedef struct _FV +{ + struct _FV *next; /* Next view */ + struct _FV *prev; /* Prev view */ + UINT32 base; /* Base address */ + UINT32 size; /* Size in bytes */ + UINT32 flags; /* Allocation flags */ + FILE_MAPPING *mapping; /* File mapping */ + BYTE protect; /* Protection for all pages at allocation time */ + BYTE prot[1]; /* Protection byte for each page */ +} FILE_VIEW; + +/* Per-page protection byte values */ +#define VPROT_READ 0x01 +#define VPROT_WRITE 0x02 +#define VPROT_EXEC 0x04 +#define VPROT_WRITECOPY 0x08 +#define VPROT_GUARD 0x10 +#define VPROT_NOCACHE 0x20 +#define VPROT_COMMITTED 0x40 + +/* Per-view flags */ +#define VFLAG_SYSTEM 0x01 + +/* Conversion from VPROT_* to Win32 flags */ +static const BYTE VIRTUAL_Win32Flags[16] = +{ + PAGE_NOACCESS, /* 0 */ + PAGE_READONLY, /* READ */ + PAGE_READWRITE, /* WRITE */ + PAGE_READWRITE, /* READ | WRITE */ + PAGE_EXECUTE, /* EXEC */ + PAGE_EXECUTE_READ, /* READ | EXEC */ + PAGE_EXECUTE_READWRITE, /* WRITE | EXEC */ + PAGE_EXECUTE_READWRITE, /* READ | WRITE | EXEC */ + PAGE_WRITECOPY, /* WRITECOPY */ + PAGE_WRITECOPY, /* READ | WRITECOPY */ + PAGE_WRITECOPY, /* WRITE | WRITECOPY */ + PAGE_WRITECOPY, /* READ | WRITE | WRITECOPY */ + PAGE_EXECUTE_WRITECOPY, /* EXEC | WRITECOPY */ + PAGE_EXECUTE_WRITECOPY, /* READ | EXEC | WRITECOPY */ + PAGE_EXECUTE_WRITECOPY, /* WRITE | EXEC | WRITECOPY */ + PAGE_EXECUTE_WRITECOPY /* READ | WRITE | EXEC | WRITECOPY */ +}; + + +static FILE_VIEW *VIRTUAL_FirstView; + +static UINT32 page_shift; +static UINT32 page_mask; + +#define ROUND_ADDR(addr) \ + ((UINT32)(addr) & ~page_mask) + +#define ROUND_SIZE(addr,size) \ + (((UINT32)(size) + ((UINT32)(addr) & page_mask) + page_mask) & ~page_mask) + + +/*********************************************************************** + * VIRTUAL_DestroyMapping + * + * Destroy a FILE_MAPPING object. + */ +void VIRTUAL_DestroyMapping( K32OBJ *ptr ) +{ + FILE_MAPPING *mapping = (FILE_MAPPING *)ptr; + assert( ptr->type == K32OBJ_MEM_MAPPED_FILE ); + + if (mapping->file) K32OBJ_DecCount( &mapping->file->header ); + ptr->type = K32OBJ_UNKNOWN; + HeapFree( SystemHeap, 0, mapping ); +} + + +/*********************************************************************** + * VIRTUAL_GetProtStr + */ +static const char *VIRTUAL_GetProtStr( BYTE prot ) +{ + static char buffer[6]; + buffer[0] = (prot & VPROT_COMMITTED) ? 'c' : '-'; + buffer[1] = (prot & VPROT_GUARD) ? 'g' : '-'; + buffer[2] = (prot & VPROT_READ) ? 'r' : '-'; + buffer[3] = (prot & VPROT_WRITE) ? + ((prot & VPROT_WRITECOPY) ? 'w' : 'W') : '-'; + buffer[4] = (prot & VPROT_EXEC) ? 'x' : '-'; + buffer[5] = 0; + return buffer; +} + + +/*********************************************************************** + * VIRTUAL_DumpView + */ +static void VIRTUAL_DumpView( FILE_VIEW *view ) +{ + UINT32 i, count; + UINT32 addr = view->base; + BYTE prot = view->prot[0]; + + dprintf_virtual( stddeb, "View: %08x - %08x%s\n", + view->base, view->base + view->size - 1, + (view->flags & VFLAG_SYSTEM) ? " (system)" : "" ); + + for (count = i = 1; i < view->size >> page_shift; i++, count++) + { + if (view->prot[i] == prot) continue; + dprintf_virtual( stddeb, " %08x - %08x %s\n", + addr, addr + (count << page_shift) - 1, + VIRTUAL_GetProtStr(prot) ); + addr += (count << page_shift); + prot = view->prot[i]; + count = 0; + } + if (count) + dprintf_virtual( stddeb, " %08x - %08x %s\n", + addr, addr + (count << page_shift) - 1, + VIRTUAL_GetProtStr(prot) ); +} + + +/*********************************************************************** + * VIRTUAL_Dump + */ +void VIRTUAL_Dump(void) +{ + FILE_VIEW *view = VIRTUAL_FirstView; + dprintf_virtual( stddeb, "\nDump of all virtual memory views:\n\n" ); + while (view) + { + VIRTUAL_DumpView( view ); + view = view->next; + } +} + + +/*********************************************************************** + * VIRTUAL_FindView + * + * Find the view containing a given address. + */ +static FILE_VIEW *VIRTUAL_FindView( UINT32 addr ) +{ + FILE_VIEW *view = VIRTUAL_FirstView; + while (view) + { + if (view->base > addr) return NULL; + if (view->base + view->size > addr) return view; + view = view->next; + } + return NULL; +} + + +/*********************************************************************** + * VIRTUAL_CreateView + * + * Create a new view and add it in the linked list. + */ +static FILE_VIEW *VIRTUAL_CreateView( UINT32 base, UINT32 size, + UINT32 flags, BYTE vprot ) +{ + FILE_VIEW *view, *prev; + + /* Create the view structure */ + + size >>= page_shift; + view = (FILE_VIEW *)xmalloc( sizeof(*view) + size - 1 ); + view->base = base; + view->size = size << page_shift; + view->flags = flags; + view->protect = vprot; + memset( view->prot, vprot, size ); + + /* Insert it in the linked list */ + + if (!VIRTUAL_FirstView || (VIRTUAL_FirstView->base > base)) + { + view->next = VIRTUAL_FirstView; + view->prev = NULL; + if (view->next) view->next->prev = view; + VIRTUAL_FirstView = view; + } + else + { + prev = VIRTUAL_FirstView; + while (prev->next && (prev->next->base < base)) prev = prev->next; + view->next = prev->next; + view->prev = prev; + if (view->next) view->next->prev = view; + prev->next = view; + } + if (debugging_virtual) VIRTUAL_DumpView( view ); + return view; +} + + +/*********************************************************************** + * VIRTUAL_DeleteView + * + * Delete an view. + */ +static void VIRTUAL_DeleteView( FILE_VIEW *view ) +{ + munmap( (void *)view->base, view->size ); + if (view->next) view->next->prev = view->prev; + if (view->prev) view->prev->next = view->next; + else VIRTUAL_FirstView = view->next; + free( view ); +} + + +/*********************************************************************** + * VIRTUAL_GetUnixProt + * + * Convert page protections to protection for mmap/mprotect. + */ +static int VIRTUAL_GetUnixProt( BYTE vprot ) +{ + int prot = 0; + if ((vprot & VPROT_COMMITTED) && !(vprot & VPROT_GUARD)) + { + if (vprot & VPROT_READ) prot |= PROT_READ; + if (vprot & VPROT_WRITE) prot |= PROT_WRITE; + if (vprot & VPROT_EXEC) prot |= PROT_EXEC; + } + return prot; +} + + +/*********************************************************************** + * VIRTUAL_GetWin32Prot + * + * Convert page protections to Win32 flags. + */ +static void VIRTUAL_GetWin32Prot( BYTE vprot, DWORD *protect, DWORD *state ) +{ + *protect = VIRTUAL_Win32Flags[vprot & 0x0f]; + if (vprot & VPROT_GUARD) *protect |= PAGE_GUARD; + if (vprot & VPROT_NOCACHE) *protect |= PAGE_NOCACHE; + + if (state) *state = (vprot & VPROT_COMMITTED) ? MEM_COMMIT : MEM_RESERVE; +} + + +/*********************************************************************** + * VIRTUAL_GetProt + * + * Build page protections from Win32 flags. + */ +static BYTE VIRTUAL_GetProt( DWORD protect ) +{ + BYTE vprot; + + switch(protect & 0xff) + { + case PAGE_READONLY: + vprot = VPROT_READ; + break; + case PAGE_READWRITE: + vprot = VPROT_READ | VPROT_WRITE; + break; + case PAGE_WRITECOPY: + vprot = VPROT_READ | VPROT_WRITE | VPROT_WRITECOPY; + break; + case PAGE_EXECUTE: + vprot = VPROT_EXEC; + break; + case PAGE_EXECUTE_READ: + vprot = VPROT_EXEC | VPROT_READ; + break; + case PAGE_EXECUTE_READWRITE: + vprot = VPROT_EXEC | VPROT_READ | VPROT_WRITE | VPROT_WRITECOPY; + break; + case PAGE_EXECUTE_WRITECOPY: + vprot = VPROT_EXEC | VPROT_READ | VPROT_WRITE; + break; + case PAGE_NOACCESS: + default: + vprot = 0; + break; + } + if (protect & PAGE_GUARD) vprot |= VPROT_GUARD; + if (protect & PAGE_NOCACHE) vprot |= VPROT_NOCACHE; + return vprot; +} + + +/*********************************************************************** + * VIRTUAL_SetProt + * + * Change the protection of a range of pages. + */ +static BOOL32 VIRTUAL_SetProt( FILE_VIEW *view, UINT32 base, + UINT32 size, BYTE vprot ) +{ + dprintf_virtual( stddeb, "VIRTUAL_SetProt: %08x-%08x %s\n", + base, base + size - 1, VIRTUAL_GetProtStr( vprot ) ); + + if (mprotect( (void *)base, size, VIRTUAL_GetUnixProt(vprot) )) + return FALSE; /* FIXME: last error */ + + memset( view->prot + ((base - view->base) >> page_shift), + vprot, size >> page_shift ); + if (debugging_virtual) VIRTUAL_DumpView( view ); + return TRUE; +} + + +/*********************************************************************** + * VIRTUAL_CheckFlags + * + * Check that all pages in a range have the given flags. + */ +static BOOL32 VIRTUAL_CheckFlags( UINT32 base, UINT32 size, BYTE flags ) +{ + FILE_VIEW *view; + UINT32 page; + + if (!size) return TRUE; + if (!(view = VIRTUAL_FindView( base ))) return FALSE; + if (view->base + view->size < base + size) return FALSE; + page = (base - view->base) >> page_shift; + size = ROUND_SIZE( base, size ) >> page_shift; + while (size--) if ((view->prot[page++] & flags) != flags) return FALSE; + return TRUE; +} + + +/*********************************************************************** + * VIRTUAL_Init + */ +BOOL32 VIRTUAL_Init(void) +{ + SYSTEM_INFO sysinfo; + GetSystemInfo( &sysinfo ); + + page_mask = sysinfo.dwPageSize - 1; + /* Make sure we have a power of 2 */ + assert( !(sysinfo.dwPageSize & page_mask) ); + page_shift = 0; + while ((1 << page_shift) != sysinfo.dwPageSize) page_shift++; + +#ifdef linux + { + FILE *f = fopen( "/proc/self/maps", "r" ); + if (f) + { + char buffer[80]; + while (fgets( buffer, sizeof(buffer), f )) + { + int start, end, offset; + char r, w, x, p; + BYTE vprot = VPROT_COMMITTED; + + sscanf( buffer, "%x-%x %c%c%c%c %x", + &start, &end, &r, &w, &x, &p, &offset ); + if (r == 'r') vprot |= VPROT_READ; + if (w == 'w') vprot |= VPROT_WRITE; + if (x == 'x') vprot |= VPROT_EXEC; + if (p == 'p') vprot |= VPROT_WRITECOPY; + VIRTUAL_CreateView( start, end - start, VFLAG_SYSTEM, vprot ); + } + fclose( f ); + } + } +#endif /* linux */ + return TRUE; +} + + +/*********************************************************************** + * VirtualAlloc (KERNEL32.548) + */ +LPVOID VirtualAlloc( LPVOID addr, DWORD size, DWORD type, DWORD protect ) +{ + FILE_VIEW *view; + UINT32 base, ptr, view_size; + BYTE vprot; + + dprintf_virtual( stddeb, "VirtualAlloc: %08x %08lx %lx %08lx\n", + (UINT32)addr, size, type, protect ); + + /* Round parameters to a page boundary */ + + if (size > 0x7fc00000) /* 2Gb - 4Mb */ + { + SetLastError( ERROR_OUTOFMEMORY ); + return NULL; + } + if (addr) + { + if (type & MEM_RESERVE) /* Round down to 64k boundary */ + base = ((UINT32)addr + 0xffff) & ~0xffff; + else + base = ROUND_ADDR( addr ); + size = (((UINT32)addr + size + page_mask) & ~page_mask) - base; + if (base + size < base) /* Disallow wrap-around */ + { + SetLastError( ERROR_INVALID_PARAMETER ); + return NULL; + } + } + else + { + base = 0; + size = (size + page_mask) & ~page_mask; + } + + /* Compute the protection flags */ + + if (!(type & (MEM_COMMIT | MEM_RESERVE)) || + (type & ~(MEM_COMMIT | MEM_RESERVE))) + { + SetLastError( ERROR_INVALID_PARAMETER ); + return NULL; + } + if (type & MEM_COMMIT) + vprot = VIRTUAL_GetProt( protect ) | VPROT_COMMITTED; + else vprot = 0; + + /* Reserve the memory */ + + if ((type & MEM_RESERVE) || !base) + { + view_size = size + (base ? 0 : 0x10000); + ptr = (UINT32)FILE_mmap( NULL, (LPVOID)base, 0, view_size, 0, 0, + VIRTUAL_GetUnixProt( vprot ), MAP_PRIVATE ); + if (ptr == (UINT32)-1) + { + SetLastError( ERROR_OUTOFMEMORY ); + return NULL; + } + if (!base) + { + /* Release the extra memory while keeping the range */ + /* starting on a 64k boundary. */ + + if (ptr & 0xffff0000) + { + munmap( (void *)ptr, 0x10000 - (ptr & 0xffff) ); + view_size -= (ptr & 0xffff); + ptr = (ptr + 0x10000) & 0xffff0000; + } + if (view_size > size) + munmap( (void *)(ptr + size), view_size - size ); + } + if (!(view = VIRTUAL_CreateView( ptr, size, 0, vprot ))) + { + munmap( (void *)ptr, size ); + return NULL; /* FIXME: last error */ + } + if (debugging_virtual) VIRTUAL_DumpView( view ); + return (LPVOID)ptr; + } + + /* Commit the pages */ + + if (!(view = VIRTUAL_FindView( base )) || + (base + size > view->base + view->size)) + { + SetLastError( ERROR_INVALID_PARAMETER ); + return NULL; + } + + if (!VIRTUAL_SetProt( view, base, size, vprot )) return NULL; + return (LPVOID)base; +} + + +/*********************************************************************** + * VirtualFree (KERNEL32.550) + */ +BOOL32 VirtualFree( LPVOID addr, DWORD size, DWORD type ) +{ + FILE_VIEW *view; + UINT32 base; + + dprintf_virtual( stddeb, "VirtualFree: %08x %08lx %lx\n", + (UINT32)addr, size, type ); + + /* Fix the parameters */ + + size = ROUND_SIZE( addr, size ); + base = ROUND_ADDR( addr ); + + if (!(view = VIRTUAL_FindView( base )) || + (base + size > view->base + view->size)) + { + SetLastError( ERROR_INVALID_PARAMETER ); + return FALSE; + } + + /* Compute the protection flags */ + + if ((type != MEM_DECOMMIT) && (type != MEM_RELEASE)) + { + SetLastError( ERROR_INVALID_PARAMETER ); + return FALSE; + } + + /* Free the pages */ + + if (type == MEM_RELEASE) + { + if (size || (base != view->base)) + { + SetLastError( ERROR_INVALID_PARAMETER ); + return FALSE; + } + VIRTUAL_DeleteView( view ); + return TRUE; + } + + /* Decommit the pages */ + + return VIRTUAL_SetProt( view, base, size, 0 ); +} + + +/*********************************************************************** + * VirtualLock (KERNEL32.551) + */ +BOOL32 VirtualLock( LPVOID addr, DWORD size ) +{ + return TRUE; +} + + +/*********************************************************************** + * VirtualUnlock (KERNEL32.556) + */ +BOOL32 VirtualUnlock( LPVOID addr, DWORD size ) +{ + return TRUE; +} + + +/*********************************************************************** + * VirtualProtect (KERNEL32.552) + */ +BOOL32 VirtualProtect( LPVOID addr, DWORD size, DWORD new_prot, + LPDWORD old_prot ) +{ + FILE_VIEW *view; + UINT32 base, i; + BYTE vprot, *p; + + dprintf_virtual( stddeb, "VirtualProtect: %08x %08lx %08lx\n", + (UINT32)addr, size, new_prot ); + + /* Fix the parameters */ + + size = ROUND_SIZE( addr, size ); + base = ROUND_ADDR( addr ); + + if (!(view = VIRTUAL_FindView( base )) || + (base + size > view->base + view->size)) + { + SetLastError( ERROR_INVALID_PARAMETER ); + return FALSE; + } + + /* Make sure all the pages are committed */ + + p = view->prot + ((base - view->base) >> page_shift); + for (i = size >> page_shift; i; i--, p++) + { + if (!(*p & VPROT_COMMITTED)) + { + SetLastError( ERROR_INVALID_PARAMETER ); + return FALSE; + } + } + + VIRTUAL_GetWin32Prot( view->prot[0], old_prot, NULL ); + vprot = VIRTUAL_GetProt( new_prot ) | VPROT_COMMITTED; + return VIRTUAL_SetProt( view, base, size, vprot ); +} + + +/*********************************************************************** + * VirtualProtectEx (KERNEL32.553) + */ +BOOL32 VirtualProtectEx( HANDLE32 handle, LPVOID addr, DWORD size, + DWORD new_prot, LPDWORD old_prot ) +{ + BOOL32 ret = FALSE; + + PDB32 *pdb = (PDB32 *)PROCESS_GetObjPtr( handle, K32OBJ_PROCESS ); + if (pdb) + { + if (pdb == pCurrentProcess) + ret = VirtualProtect( addr, size, new_prot, old_prot ); + else + fprintf(stderr,"Unsupported: VirtualProtectEx on other process\n"); + K32OBJ_DecCount( &pdb->header ); + } + return ret; +} + + +/*********************************************************************** + * VirtualQuery (KERNEL32.554) + */ +BOOL32 VirtualQuery( LPCVOID addr, LPMEMORY_BASIC_INFORMATION info, DWORD len ) +{ + FILE_VIEW *view = VIRTUAL_FirstView; + UINT32 base = ROUND_ADDR( addr ); + UINT32 alloc_base = 0; + UINT32 size = 0; + + /* Find the view containing the address */ + + for (;;) + { + if (!view) + { + size = 0xffff0000 - alloc_base; + break; + } + if (view->base > base) + { + size = view->base - alloc_base; + view = NULL; + break; + } + if (view->base + view->size > base) + { + alloc_base = view->base; + size = view->size; + break; + } + alloc_base = view->base + view->size; + view = view->next; + } + + /* Fill the info structure */ + + if (!view) + { + info->State = MEM_FREE; + info->Protect = 0; + info->AllocationProtect = 0; + info->Type = 0; + } + else + { + BYTE vprot = view->prot[(base - alloc_base) >> page_shift]; + VIRTUAL_GetWin32Prot( vprot, &info->Protect, &info->State ); + for (size = base - alloc_base; size < view->size; size += page_mask+1) + if (view->prot[size >> page_shift] != vprot) break; + info->AllocationProtect = view->protect; + info->Type = MEM_PRIVATE; /* FIXME */ + } + + info->BaseAddress = (LPVOID)base; + info->AllocationBase = (LPVOID)alloc_base; + info->RegionSize = size - (base - alloc_base); + return TRUE; +} + + +/*********************************************************************** + * VirtualQueryEx (KERNEL32.555) + */ +BOOL32 VirtualQueryEx( HANDLE32 handle, LPCVOID addr, + LPMEMORY_BASIC_INFORMATION info, DWORD len ) +{ + BOOL32 ret = FALSE; + + PDB32 *pdb = (PDB32 *)PROCESS_GetObjPtr( handle, K32OBJ_PROCESS ); + if (pdb) + { + if (pdb == pCurrentProcess) + ret = VirtualQuery( addr, info, len ); + else + fprintf(stderr,"Unsupported: VirtualQueryEx on other process\n"); + K32OBJ_DecCount( &pdb->header ); + } + return ret; +} + + +/*********************************************************************** + * IsBadReadPtr32 (KERNEL32.354) + */ +BOOL32 IsBadReadPtr32( LPCVOID ptr, UINT32 size ) +{ + return !VIRTUAL_CheckFlags( (UINT32)ptr, size, + VPROT_READ | VPROT_COMMITTED ); +} + + +/*********************************************************************** + * IsBadWritePtr32 (KERNEL32.357) + */ +BOOL32 IsBadWritePtr32( LPVOID ptr, UINT32 size ) +{ + return !VIRTUAL_CheckFlags( (UINT32)ptr, size, + VPROT_WRITE | VPROT_COMMITTED ); +} + + +/*********************************************************************** + * IsBadHugeReadPtr32 (KERNEL32.352) + */ +BOOL32 IsBadHugeReadPtr32( LPCVOID ptr, UINT32 size ) +{ + return IsBadReadPtr32( ptr, size ); +} + + +/*********************************************************************** + * IsBadHugeWritePtr32 (KERNEL32.353) + */ +BOOL32 IsBadHugeWritePtr32( LPVOID ptr, UINT32 size ) +{ + return IsBadWritePtr32( ptr, size ); +} + + +/*********************************************************************** + * IsBadCodePtr32 (KERNEL32.351) + */ +BOOL32 IsBadCodePtr32( FARPROC32 ptr ) +{ + return !VIRTUAL_CheckFlags( (UINT32)ptr, 1, VPROT_EXEC | VPROT_COMMITTED ); +} + + +/*********************************************************************** + * IsBadStringPtr32A (KERNEL32.355) + */ +BOOL32 IsBadStringPtr32A( LPCSTR str, UINT32 max ) +{ + FILE_VIEW *view; + UINT32 page, count; + + if (!max) return FALSE; + if (!(view = VIRTUAL_FindView( (UINT32)str ))) return TRUE; + page = ((UINT32)str - view->base) >> page_shift; + count = page_mask + 1 - ((UINT32)str & page_mask); + + while (max) + { + if ((view->prot[page] & (VPROT_READ | VPROT_COMMITTED)) != + (VPROT_READ | VPROT_COMMITTED)) + return TRUE; + if (count > max) count = max; + max -= count; + while (count--) if (!*str++) return FALSE; + if (++page >= view->size >> page_shift) return TRUE; + count = page_mask + 1; + } + return FALSE; +} + + +/*********************************************************************** + * IsBadStringPtr32W (KERNEL32.356) + */ +BOOL32 IsBadStringPtr32W( LPCWSTR str, UINT32 max ) +{ + FILE_VIEW *view; + UINT32 page, count; + + if (!max) return FALSE; + if (!(view = VIRTUAL_FindView( (UINT32)str ))) return TRUE; + page = ((UINT32)str - view->base) >> page_shift; + count = (page_mask + 1 - ((UINT32)str & page_mask)) / sizeof(WCHAR); + + while (max) + { + if ((view->prot[page] & (VPROT_READ | VPROT_COMMITTED)) != + (VPROT_READ | VPROT_COMMITTED)) + return TRUE; + if (count > max) count = max; + max -= count; + while (count--) if (!*str++) return FALSE; + if (++page >= view->size >> page_shift) return TRUE; + count = (page_mask + 1) / sizeof(WCHAR); + } + return FALSE; +} + + +/*********************************************************************** + * CreateFileMapping32A (KERNEL32.46) + */ +HANDLE32 CreateFileMapping32A( HFILE32 hFile, LPSECURITY_ATTRIBUTES attr, + DWORD protect, DWORD size_high, DWORD size_low, + LPCSTR name ) +{ + FILE_MAPPING *mapping = NULL; + HANDLE32 handle; + + K32OBJ *obj = K32OBJ_FindName( name ); + if (obj) + { + if (obj->type == K32OBJ_MEM_MAPPED_FILE) + { + SetLastError( ERROR_ALREADY_EXISTS ); + return PROCESS_AllocHandle( obj, 0 ); + } + SetLastError( ERROR_DUP_NAME ); + return 0; + } + + printf( "CreateFileMapping32A(%x,%p,%08lx,%08lx%08lx,%s)\n", + hFile, attr, protect, size_high, size_low, name ); + + if (hFile == INVALID_HANDLE_VALUE32) + { + if (!size_high && !size_low) + { + SetLastError( ERROR_INVALID_PARAMETER ); + return 0; + } + obj = NULL; + } + else /* We have a file */ + { + BY_HANDLE_FILE_INFORMATION info; + if (!(obj = PROCESS_GetObjPtr( hFile, K32OBJ_FILE ))) goto error; + if (!GetFileInformationByHandle( hFile, &info )) goto error; + if (!size_high && !size_low) + { + size_high = info.nFileSizeHigh; + size_low = info.nFileSizeLow; + } + else if ((size_high > info.nFileSizeHigh) || + ((size_high == info.nFileSizeHigh) && + (size_low > info.nFileSizeLow))) + { + /* We have to grow the file */ + if (SetFilePointer( hFile, size_low, &size_high, + FILE_BEGIN ) == 0xffffffff) goto error; + if (!SetEndOfFile( hFile )) goto error; + } + } + + if (!(mapping = HeapAlloc( SystemHeap, 0, sizeof(*mapping) ))) goto error; + mapping->protect = VIRTUAL_GetProt( protect ) | VPROT_COMMITTED; + mapping->size_high = size_high; + mapping->size_low = size_low; + mapping->file = (FILE_OBJECT *)obj; + + handle = PROCESS_AllocHandle( &mapping->header, 0 ); + if (handle != INVALID_HANDLE_VALUE32) return handle; + +error: + if (obj) K32OBJ_DecCount( obj ); + if (mapping) HeapFree( SystemHeap, 0, mapping ); + return 0; +} + + +/*********************************************************************** + * CreateFileMapping32W (KERNEL32.47) + */ +HANDLE32 CreateFileMapping32W( HFILE32 hFile, LPSECURITY_ATTRIBUTES attr, + DWORD protect, DWORD size_high, DWORD size_low, + LPCWSTR name ) +{ + LPSTR nameA = HEAP_strdupWtoA( GetProcessHeap(), 0, name ); + HANDLE32 ret = CreateFileMapping32A( hFile, attr, protect, + size_high, size_low, nameA ); + HeapFree( GetProcessHeap(), 0, nameA ); + return ret; +} + + +/*********************************************************************** + * OpenFileMapping32A (KERNEL32.397) + */ +HANDLE32 OpenFileMapping32A( DWORD access, BOOL32 inherit, LPCSTR name ) +{ + K32OBJ *obj = K32OBJ_FindNameType( name, K32OBJ_MEM_MAPPED_FILE ); + if (!obj) return 0; + return PROCESS_AllocHandle( obj, 0 ); +} + + +/*********************************************************************** + * OpenFileMapping32W (KERNEL32.398) + */ +HANDLE32 OpenFileMapping32W( DWORD access, BOOL32 inherit, LPCWSTR name ) +{ + LPSTR nameA = HEAP_strdupWtoA( GetProcessHeap(), 0, name ); + HANDLE32 ret = OpenFileMapping32A( access, inherit, nameA ); + HeapFree( GetProcessHeap(), 0, nameA ); + return ret; +} + + +/*********************************************************************** + * MapViewOfFile (KERNEL32.385) + */ +LPVOID MapViewOfFile( HANDLE32 mapping, DWORD access, DWORD offset_high, + DWORD offset_low, DWORD count ) +{ + return MapViewOfFileEx( mapping, access, offset_high, + offset_low, count, NULL ); +} + + +/*********************************************************************** + * MapViewOfFileEx (KERNEL32.386) + */ +LPVOID MapViewOfFileEx( HANDLE32 handle, DWORD access, DWORD offset_high, + DWORD offset_low, DWORD count, LPVOID addr ) +{ + FILE_MAPPING *mapping; + LPVOID ret; + + if (!(mapping = (FILE_MAPPING *)PROCESS_GetObjPtr( handle, + K32OBJ_MEM_MAPPED_FILE ))) + return NULL; + + ret = FILE_mmap(mapping->file, addr, mapping->size_high, mapping->size_low, + offset_high, offset_low, mapping->protect, MAP_PRIVATE ); + + K32OBJ_DecCount( &mapping->header ); + return ret; +} + + +/*********************************************************************** + * UnmapViewOfFile (KERNEL32.540) + */ +BOOL32 UnmapViewOfFile( LPVOID addr ) +{ + FILE_VIEW *view; + UINT32 base = ROUND_ADDR( addr ); + if (!(view = VIRTUAL_FindView( base )) || (base != view->base)) + { + SetLastError( ERROR_INVALID_PARAMETER ); + return FALSE; + } + VIRTUAL_DeleteView( view ); + return TRUE; +} diff --git a/misc/clipboard.c b/misc/clipboard.c index bc64aacf590..9282a447b8b 100644 --- a/misc/clipboard.c +++ b/misc/clipboard.c @@ -45,7 +45,7 @@ static HWND32 hWndClipOwner = 0; /* current clipboard owner */ static HWND32 hWndClipWindow = 0; /* window that opened clipboard */ static HWND32 hWndViewer = 0; /* start of viewers chain */ -static BOOL bClipChanged = FALSE; +static BOOL32 bClipChanged = FALSE; static WORD LastRegFormat = CF_REGFORMATBASE; static Bool selectionWait = False; @@ -158,7 +158,7 @@ void CLIPBOARD_DeleteRecord(LPCLIPFORMAT lpFormat) /************************************************************************** * CLIPBOARD_RequestXSelection */ -BOOL CLIPBOARD_RequestXSelection() +BOOL32 CLIPBOARD_RequestXSelection() { HWND32 hWnd = (hWndClipWindow) ? hWndClipWindow : GetActiveWindow32(); @@ -184,13 +184,13 @@ BOOL CLIPBOARD_RequestXSelection() dprintf_clipboard(stddeb,"\tgot CF_OEMTEXT = %i\n", ClipFormats[CF_OEMTEXT-1].wDataPresent); - return (BOOL)ClipFormats[CF_OEMTEXT-1].wDataPresent; + return (BOOL32)ClipFormats[CF_OEMTEXT-1].wDataPresent; } /************************************************************************** * CLIPBOARD_IsPresent */ -BOOL CLIPBOARD_IsPresent(WORD wFormat) +BOOL32 CLIPBOARD_IsPresent(WORD wFormat) { LPCLIPFORMAT lpFormat = ClipFormats; @@ -332,9 +332,9 @@ HWND32 GetClipboardOwner32(void) /************************************************************************** - * SetClipboardData [USER.141] + * SetClipboardData16 (USER.141) */ -HANDLE16 SetClipboardData(WORD wFormat, HANDLE16 hData) +HANDLE16 SetClipboardData16( UINT16 wFormat, HANDLE16 hData ) { LPCLIPFORMAT lpFormat = ClipFormats; Window owner; @@ -387,13 +387,24 @@ HANDLE16 SetClipboardData(WORD wFormat, HANDLE16 hData) return lpFormat->hData; } + +/************************************************************************** + * SetClipboardData32 (USER32.469) + */ +HANDLE32 SetClipboardData32( UINT32 wFormat, HANDLE32 hData ) +{ + fprintf( stderr, "SetClipboardData: empty stub\n" ); + return 0; +} + + /************************************************************************** * CLIPBOARD_RenderFormat */ BOOL32 CLIPBOARD_RenderFormat(LPCLIPFORMAT lpFormat) { if( lpFormat->wDataPresent && !lpFormat->hData ) - if( IsWindow(hWndClipOwner) ) + if( IsWindow32(hWndClipOwner) ) SendMessage16(hWndClipOwner,WM_RENDERFORMAT, (WPARAM16)lpFormat->wFormatID,0L); else @@ -411,7 +422,7 @@ BOOL32 CLIPBOARD_RenderFormat(LPCLIPFORMAT lpFormat) */ BOOL32 CLIPBOARD_RenderText(LPCLIPFORMAT lpTarget, LPCLIPFORMAT lpSource) { - UINT size = GlobalSize16( lpSource->hData ); + UINT16 size = GlobalSize16( lpSource->hData ); LPCSTR lpstrS = (LPSTR)GlobalLock16(lpSource->hData); LPSTR lpstrT; @@ -437,9 +448,9 @@ BOOL32 CLIPBOARD_RenderText(LPCLIPFORMAT lpTarget, LPCLIPFORMAT lpSource) } /************************************************************************** - * GetClipboardData [USER.142] + * GetClipboardData16 (USER.142) */ -HANDLE16 GetClipboardData(WORD wFormat) +HANDLE16 GetClipboardData16( UINT16 wFormat ) { LPCLIPFORMAT lpRender = ClipFormats; LPCLIPFORMAT lpUpdate = NULL; @@ -485,6 +496,15 @@ HANDLE16 GetClipboardData(WORD wFormat) } +/************************************************************************** + * GetClipboardData32 (USER32.221) + */ +HANDLE32 GetClipboardData32( UINT32 wFormat ) +{ + fprintf( stderr, "GetClipboardData32: empty stub\n" ); + return 0; +} + /************************************************************************** * CountClipboardFormats16 (USER.143) */ @@ -644,14 +664,23 @@ UINT32 RegisterClipboardFormat32W( LPCWSTR formatName ) } /************************************************************************** - * GetClipboardFormatName [USER.146] + * GetClipboardFormatName16 (USER.146) */ -int GetClipboardFormatName(WORD wFormat, LPSTR retStr, short maxlen) +INT16 GetClipboardFormatName16( UINT16 wFormat, LPSTR retStr, INT16 maxlen ) +{ + return GetClipboardFormatName32A( wFormat, retStr, maxlen ); +} + + +/************************************************************************** + * GetClipboardFormatName32A (USER32.222) + */ +INT32 GetClipboardFormatName32A( UINT32 wFormat, LPSTR retStr, INT32 maxlen ) { LPCLIPFORMAT lpFormat = ClipFormats; dprintf_clipboard(stddeb, - "GetClipboardFormat(%04X, %p, %d) !\n", wFormat, retStr, maxlen); + "GetClipboardFormatName(%04X, %p, %d) !\n", wFormat, retStr, maxlen); while(TRUE) { if (lpFormat == NULL) return 0; @@ -665,13 +694,24 @@ int GetClipboardFormatName(WORD wFormat, LPSTR retStr, short maxlen) dprintf_clipboard(stddeb, "GetClipboardFormat // Name='%s' !\n", lpFormat->Name); - strncpy(retStr, lpFormat->Name, maxlen - 1); - retStr[maxlen] = 0; - + lstrcpyn32A( retStr, lpFormat->Name, maxlen ); return strlen(retStr); } +/************************************************************************** + * GetClipboardFormatName32W (USER32.223) + */ +INT32 GetClipboardFormatName32W( UINT32 wFormat, LPWSTR retStr, INT32 maxlen ) +{ + LPSTR p = HEAP_xalloc( GetProcessHeap(), 0, maxlen ); + INT32 ret = GetClipboardFormatName32A( wFormat, p, maxlen ); + lstrcpynAtoW( retStr, p, maxlen ); + HeapFree( GetProcessHeap(), 0, p ); + return ret; +} + + /************************************************************************** * SetClipboardViewer16 (USER.147) */ @@ -714,7 +754,7 @@ HWND32 GetClipboardViewer32(void) /************************************************************************** - * ChangeClipboardChain [USER.149] + * ChangeClipboardChain16 (USER.149) */ BOOL16 ChangeClipboardChain16(HWND16 hWnd, HWND16 hWndNext) { @@ -722,7 +762,7 @@ BOOL16 ChangeClipboardChain16(HWND16 hWnd, HWND16 hWndNext) } /************************************************************************** - * ChangeClipboardChain [USER32.21] + * ChangeClipboardChain32 (USER32.21) */ BOOL32 ChangeClipboardChain32(HWND32 hWnd, HWND32 hWndNext) { @@ -785,13 +825,23 @@ HWND32 GetOpenClipboardWindow32(void) /************************************************************************** - * GetPriorityClipboardFormat [USER.402] + * GetPriorityClipboardFormat16 (USER.402) */ -int GetPriorityClipboardFormat(WORD *lpPriorityList, short nCount) +INT16 GetPriorityClipboardFormat16( UINT16 *lpPriorityList, INT16 nCount) { - dprintf_clipboard(stdnimp, - "GetPriorityClipboardFormat(%p, %d) !\n", lpPriorityList, nCount); + fprintf( stderr, "GetPriorityClipboardFormat16(%p, %d): stub\n", + lpPriorityList, nCount ); + return 0; +} + +/************************************************************************** + * GetPriorityClipboardFormat32 (USER32 + */ +INT32 GetPriorityClipboardFormat32( UINT32 *lpPriorityList, INT32 nCount ) +{ + fprintf( stderr, "GetPriorityClipboardFormat32(%p, %d): stub\n", + lpPriorityList, nCount ); return 0; } diff --git a/misc/commdlg.c b/misc/commdlg.c index 7ebe94ce64f..07ced791571 100644 --- a/misc/commdlg.c +++ b/misc/commdlg.c @@ -32,9 +32,9 @@ static HBITMAP16 hBitmapTT = 0; /*********************************************************************** * FileDlg_Init [internal] */ -static BOOL FileDlg_Init() +static BOOL32 FileDlg_Init() { - static BOOL initialized = 0; + static BOOL32 initialized = 0; if (!initialized) { if (!hFolder) hFolder = LoadBitmap16(0, MAKEINTRESOURCE(OBM_FOLDER)); @@ -56,7 +56,7 @@ static BOOL FileDlg_Init() /*********************************************************************** * GetOpenFileName (COMMDLG.1) */ -BOOL GetOpenFileName( SEGPTR ofn ) +BOOL16 GetOpenFileName( SEGPTR ofn ) { HINSTANCE16 hInst; HANDLE16 hDlgTmpl = 0, hResInfo; @@ -114,7 +114,7 @@ BOOL GetOpenFileName( SEGPTR ofn ) /*********************************************************************** * GetSaveFileName (COMMDLG.2) */ -BOOL GetSaveFileName( SEGPTR ofn) +BOOL16 GetSaveFileName( SEGPTR ofn) { HINSTANCE16 hInst; HANDLE16 hDlgTmpl = 0; @@ -193,7 +193,7 @@ static void FILEDLG_StripEditControl(HWND16 hwnd) /*********************************************************************** * FILEDLG_ScanDir [internal] */ -static BOOL FILEDLG_ScanDir(HWND16 hWnd, LPSTR newPath) +static BOOL32 FILEDLG_ScanDir(HWND16 hWnd, LPSTR newPath) { int len; char str[512]; @@ -255,9 +255,9 @@ static LONG FILEDLG_WMDrawItem(HWND16 hWnd, WPARAM16 wParam, LPARAM lParam,int s if (savedlg) /* use _gray_ text in FileSaveDlg */ if (!lpdis->itemState) - SetTextColor(lpdis->hDC,GetSysColor32(COLOR_GRAYTEXT) ); + SetTextColor32(lpdis->hDC,GetSysColor32(COLOR_GRAYTEXT) ); else - SetTextColor(lpdis->hDC,GetSysColor32(COLOR_WINDOWTEXT) ); + SetTextColor32(lpdis->hDC,GetSysColor32(COLOR_WINDOWTEXT) ); /* inversion of gray would be bad readable */ TextOut16(lpdis->hDC, lpdis->rcItem.left, lpdis->rcItem.top, @@ -431,8 +431,8 @@ static LONG FILEDLG_WMInitDialog(HWND16 hWnd, WPARAM16 wParam, LPARAM lParam) if (lpofn->Flags & OFN_HIDEREADONLY) ShowWindow32(GetDlgItem32(hWnd, chx1), SW_HIDE); if (FILEDLG_HookCallChk(lpofn)) - return (BOOL)CallWindowProc16(lpofn->lpfnHook, - hWnd, WM_INITDIALOG, wParam, lParam ); + return (BOOL16)CallWindowProc16(lpofn->lpfnHook, + hWnd, WM_INITDIALOG, wParam, lParam ); else return TRUE; } @@ -447,7 +447,7 @@ static LRESULT FILEDLG_WMCommand(HWND16 hWnd, WPARAM16 wParam, LPARAM lParam) OPENFILENAME ofn2; char tmpstr[512], tmpstr2[512]; LPSTR pstr, pstr2; - UINT control,notification; + UINT16 control,notification; /* Notifications are packaged differently in Win32 */ control = wParam; @@ -608,7 +608,7 @@ static LRESULT FILEDLG_WMCommand(HWND16 hWnd, WPARAM16 wParam, LPARAM lParam) } if (FILEDLG_HookCallChk(lpofn)) { - lRet= (BOOL)CallWindowProc16(lpofn->lpfnHook, + lRet= (BOOL16)CallWindowProc16(lpofn->lpfnHook, hWnd, RegisterWindowMessage32A( FILEOKSTRING ), 0, lParam ); if (lRet) { @@ -632,14 +632,14 @@ static LRESULT FILEDLG_WMCommand(HWND16 hWnd, WPARAM16 wParam, LPARAM lParam) /*********************************************************************** * FileOpenDlgProc (COMMDLG.6) */ -LRESULT FileOpenDlgProc(HWND16 hWnd, UINT wMsg, WPARAM16 wParam, LPARAM lParam) +LRESULT FileOpenDlgProc(HWND16 hWnd, UINT16 wMsg, WPARAM16 wParam, LPARAM lParam) { LPOPENFILENAME lpofn = (LPOPENFILENAME)PTR_SEG_TO_LIN(GetWindowLong32A(hWnd, DWL_USER)); if (wMsg!=WM_INITDIALOG) if (FILEDLG_HookCallChk(lpofn)) { - LRESULT lRet=(BOOL)CallWindowProc16(lpofn->lpfnHook, hWnd, wMsg, wParam, lParam); + LRESULT lRet=(BOOL16)CallWindowProc16(lpofn->lpfnHook, hWnd, wMsg, wParam, lParam); if (lRet) return lRet; /* else continue message processing */ } @@ -675,14 +675,14 @@ LRESULT FileOpenDlgProc(HWND16 hWnd, UINT wMsg, WPARAM16 wParam, LPARAM lParam) /*********************************************************************** * FileSaveDlgProc (COMMDLG.7) */ -LRESULT FileSaveDlgProc(HWND16 hWnd, UINT wMsg, WPARAM16 wParam, LPARAM lParam) +LRESULT FileSaveDlgProc(HWND16 hWnd, UINT16 wMsg, WPARAM16 wParam, LPARAM lParam) { LPOPENFILENAME lpofn = (LPOPENFILENAME)PTR_SEG_TO_LIN(GetWindowLong32A(hWnd, DWL_USER)); if (wMsg!=WM_INITDIALOG) if (FILEDLG_HookCallChk(lpofn)) { - LRESULT lRet=(BOOL)CallWindowProc16(lpofn->lpfnHook, hWnd, wMsg, wParam, lParam); + LRESULT lRet=(BOOL16)CallWindowProc16(lpofn->lpfnHook, hWnd, wMsg, wParam, lParam); if (lRet) return lRet; /* else continue message processing */ } @@ -860,7 +860,7 @@ static LRESULT FINDDLG_WMCommand(HWND16 hWnd, WPARAM16 wParam, LPARAM lParam) /*********************************************************************** * FindTextDlgProc (COMMDLG.13) */ -LRESULT FindTextDlgProc(HWND16 hWnd, UINT wMsg, WPARAM16 wParam, LPARAM lParam) +LRESULT FindTextDlgProc(HWND16 hWnd, UINT16 wMsg, WPARAM16 wParam, LPARAM lParam) { switch (wMsg) { case WM_INITDIALOG: @@ -980,7 +980,7 @@ static LRESULT REPLACEDLG_WMCommand(HWND16 hWnd, WPARAM16 wParam, LPARAM lParam) /*********************************************************************** * ReplaceTextDlgProc (COMMDLG.14) */ -LRESULT ReplaceTextDlgProc(HWND16 hWnd, UINT wMsg, WPARAM16 wParam, LPARAM lParam) +LRESULT ReplaceTextDlgProc(HWND16 hWnd, UINT16 wMsg, WPARAM16 wParam, LPARAM lParam) { switch (wMsg) { case WM_INITDIALOG: @@ -995,10 +995,10 @@ LRESULT ReplaceTextDlgProc(HWND16 hWnd, UINT wMsg, WPARAM16 wParam, LPARAM lPara /*********************************************************************** * PrintDlg (COMMDLG.20) */ -BOOL PrintDlg( SEGPTR printdlg ) +BOOL16 PrintDlg( SEGPTR printdlg ) { HANDLE16 hInst; - BOOL bRet = FALSE; + BOOL16 bRet = FALSE; LPCVOID template; HWND32 hwndDialog; LPPRINTDLG lpPrint = (LPPRINTDLG)PTR_SEG_TO_LIN(printdlg); @@ -1029,7 +1029,7 @@ BOOL PrintDlg( SEGPTR printdlg ) /*********************************************************************** * PrintDlgProc (COMMDLG.21) */ -LRESULT PrintDlgProc(HWND16 hWnd, UINT wMsg, WPARAM16 wParam, LPARAM lParam) +LRESULT PrintDlgProc(HWND16 hWnd, UINT16 wMsg, WPARAM16 wParam, LPARAM lParam) { switch (wMsg) { @@ -1056,7 +1056,7 @@ LRESULT PrintDlgProc(HWND16 hWnd, UINT wMsg, WPARAM16 wParam, LPARAM lParam) /*********************************************************************** * PrintSetupDlgProc (COMMDLG.22) */ -LRESULT PrintSetupDlgProc(HWND16 hWnd, UINT wMsg, WPARAM16 wParam, LPARAM lParam) +LRESULT PrintSetupDlgProc(HWND16 hWnd, UINT16 wMsg, WPARAM16 wParam, LPARAM lParam) { switch (wMsg) { @@ -1091,7 +1091,7 @@ DWORD CommDlgExtendedError(void) /*********************************************************************** * GetFileTitle (COMMDLG.27) */ -short GetFileTitle(LPCSTR lpFile, LPSTR lpTitle, UINT cbBuf) +short GetFileTitle(LPCSTR lpFile, LPSTR lpTitle, UINT16 cbBuf) { int i, len; dprintf_commdlg(stddeb,"GetFileTitle(%p %p %d); \n", lpFile, lpTitle, cbBuf); @@ -1127,11 +1127,11 @@ short GetFileTitle(LPCSTR lpFile, LPSTR lpTitle, UINT cbBuf) /*********************************************************************** * ChooseColor (COMMDLG.5) */ -BOOL ChooseColor(LPCHOOSECOLOR lpChCol) +BOOL16 ChooseColor(LPCHOOSECOLOR lpChCol) { HINSTANCE16 hInst; HANDLE16 hDlgTmpl = 0; - BOOL bRet = FALSE, win32Format = FALSE; + BOOL16 bRet = FALSE, win32Format = FALSE; LPCVOID template; HWND32 hwndDialog; @@ -1204,10 +1204,10 @@ struct CCPRIVATE HDC16 hdcMem; /* color graph used for BitBlt() */ HBITMAP16 hbmMem; /* color graph bitmap */ RECT16 fullsize; /* original dialog window size */ - UINT msetrgb; /* # of SETRGBSTRING message (today not used) */ + UINT16 msetrgb; /* # of SETRGBSTRING message (today not used) */ RECT16 old3angle; /* last position of l-marker */ RECT16 oldcross; /* last position of color/satuation marker */ - BOOL updating; /* to prevent recursive WM_COMMAND/EN_UPDATE procesing */ + BOOL32 updating; /* to prevent recursive WM_COMMAND/EN_UPDATE procesing */ int h; int s; int l; /* for temporary storing of hue,sat,lum */ @@ -1447,7 +1447,7 @@ static int CC_MouseCheckResultWindow(HWND16 hDlg,LPARAM lParam) GetWindowRect16(hwnd,&rect); if (PtInRect16(&rect,point)) { - PostMessage(hDlg,WM_COMMAND,0x2c9,0); + PostMessage16(hDlg,WM_COMMAND,0x2c9,0); return 1; } return 0; @@ -1632,7 +1632,7 @@ static void CC_PrepareColorGraph(HWND16 hDlg) GetClientRect16(hwnd,&client); hdc=GetDC32(hwnd); lpp->hdcMem = CreateCompatibleDC32(hdc); - lpp->hbmMem = CreateCompatibleBitmap(hdc,client.right,client.bottom); + lpp->hbmMem = CreateCompatibleBitmap32(hdc,client.right,client.bottom); SelectObject32(lpp->hdcMem,lpp->hbmMem); xdif=client.right /XSTEPS; @@ -1879,7 +1879,7 @@ static void CC_PaintUserColorArray(HWND16 hDlg,int rows,int cols,COLORREF* lpcr) /*********************************************************************** * CC_HookCallChk [internal] */ -static BOOL CC_HookCallChk(LPCHOOSECOLOR lpcc) +static BOOL32 CC_HookCallChk(LPCHOOSECOLOR lpcc) { if (lpcc) if(lpcc->Flags & CC_ENABLEHOOK) @@ -1964,7 +1964,7 @@ static LONG CC_WMInitDialog(HWND16 hDlg, WPARAM16 wParam, LPARAM lParam) static LRESULT CC_WMCommand(HWND16 hDlg, WPARAM16 wParam, LPARAM lParam) { int r,g,b,i,xx; - UINT cokmsg; + UINT16 cokmsg; HDC32 hdc; COLORREF *cr; struct CCPRIVATE * lpp=(struct CCPRIVATE *)GetWindowLong32A(hDlg, DWL_USER); @@ -2163,7 +2163,7 @@ static LRESULT CC_WMLButtonDown(HWND16 hDlg, WPARAM16 wParam, LPARAM lParam) /*********************************************************************** * ColorDlgProc (COMMDLG.8) */ -LRESULT ColorDlgProc(HWND16 hDlg, UINT message, +LRESULT ColorDlgProc(HWND16 hDlg, UINT16 message, WPARAM16 wParam, LONG lParam) { int res; @@ -2222,11 +2222,11 @@ LRESULT ColorDlgProc(HWND16 hDlg, UINT message, /*********************************************************************** * ChooseFont (COMMDLG.15) */ -BOOL ChooseFont(LPCHOOSEFONT lpChFont) +BOOL16 ChooseFont(LPCHOOSEFONT lpChFont) { HINSTANCE16 hInst; HANDLE16 hDlgTmpl = 0; - BOOL bRet = FALSE, win32Format = FALSE; + BOOL16 bRet = FALSE, win32Format = FALSE; LPCVOID template; HWND32 hwndDialog; @@ -2289,7 +2289,7 @@ static const COLORREF textcolors[TEXT_COLORS]= /*********************************************************************** * CFn_HookCallChk [internal] */ -static BOOL CFn_HookCallChk(LPCHOOSEFONT lpcf) +static BOOL32 CFn_HookCallChk(LPCHOOSEFONT lpcf) { if (lpcf) if(lpcf->Flags & CF_ENABLEHOOK) @@ -2479,7 +2479,7 @@ LRESULT CFn_WMInitDialog(HWND16 hDlg, WPARAM16 wParam, LPARAM lParam) if (!hBitmapTT) hBitmapTT = LoadBitmap16(0, MAKEINTRESOURCE(OBM_TRTYPE)); - if (!(lpcf->Flags & CF_SHOWHELP) || !IsWindow(lpcf->hwndOwner)) + if (!(lpcf->Flags & CF_SHOWHELP) || !IsWindow32(lpcf->hwndOwner)) ShowWindow32(GetDlgItem32(hDlg,pshHelp),SW_HIDE); if (!(lpcf->Flags & CF_APPLY)) ShowWindow32(GetDlgItem32(hDlg,psh3),SW_HIDE); @@ -2692,7 +2692,7 @@ LRESULT CFn_WMCtlColor(HWND16 hDlg, WPARAM16 wParam, LPARAM lParam) if (lpcf->Flags & CF_EFFECTS) if (HIWORD(lParam)==CTLCOLOR_STATIC && GetDlgCtrlID32(LOWORD(lParam))==stc6) { - SetTextColor(wParam,lpcf->rgbColors); + SetTextColor32(wParam,lpcf->rgbColors); return GetStockObject32(WHITE_BRUSH); } return 0; @@ -2838,7 +2838,7 @@ LRESULT CFn_WMCommand(HWND16 hDlg, WPARAM16 wParam, LPARAM lParam) 2. some CF_.. flags are not supported 3. some TType extensions */ -LRESULT FormatCharDlgProc(HWND16 hDlg, UINT message, WPARAM16 wParam, LPARAM lParam) +LRESULT FormatCharDlgProc(HWND16 hDlg, UINT16 message, WPARAM16 wParam, LPARAM lParam) { LPCHOOSEFONT lpcf=(LPCHOOSEFONT)GetWindowLong32A(hDlg, DWL_USER); if (message!=WM_INITDIALOG) diff --git a/misc/driver.c b/misc/driver.c index c535ffd5c32..4eb08806515 100644 --- a/misc/driver.c +++ b/misc/driver.c @@ -110,7 +110,7 @@ HDRVR16 OpenDriver(LPSTR lpDriverName, LPSTR lpSectionName, LPARAM lParam) lpnewdrv = (LPDRIVERITEM)GlobalLock16( hDrvr ); if (lpnewdrv == NULL) return 0; lpnewdrv->dis.length = sizeof( DRIVERINFOSTRUCT16 ); - lpnewdrv->dis.hModule = LoadModule( DrvName, (LPVOID)-1 ); + lpnewdrv->dis.hModule = LoadModule16( DrvName, (LPVOID)-1 ); if (!lpnewdrv->dis.hModule) { GlobalUnlock16( hDrvr ); @@ -122,8 +122,8 @@ HDRVR16 OpenDriver(LPSTR lpDriverName, LPSTR lpSectionName, LPARAM lParam) lpnewdrv->count = 1; ordinal = MODULE_GetOrdinal( lpnewdrv->dis.hModule, "DRIVERPROC" ); if (!ordinal || - !(lpnewdrv->lpDrvProc = MODULE_GetEntryPoint( lpnewdrv->dis.hModule, - ordinal ))) + !(lpnewdrv->lpDrvProc = (DRIVERPROC16)MODULE_GetEntryPoint( + lpnewdrv->dis.hModule, ordinal ))) { FreeModule16( lpnewdrv->dis.hModule ); GlobalUnlock16( hDrvr ); diff --git a/misc/escape.c b/misc/escape.c index a42827cbfb1..d742fc12b4b 100644 --- a/misc/escape.c +++ b/misc/escape.c @@ -4,7 +4,6 @@ * Copyright 1994 Bob Amstadt */ -#define NO_TRANSITION_TYPES #include #include "windows.h" #include "gdi.h" diff --git a/misc/exec.c b/misc/exec.c index 143dfe3d52b..e793f8b4f9d 100644 --- a/misc/exec.c +++ b/misc/exec.c @@ -2,7 +2,6 @@ * Windows Exec & Help */ -#define NO_TRANSITION_TYPES /* This file is Win32-clean */ #include #include #include @@ -61,7 +60,7 @@ BOOL32 ExitWindowsEx( UINT32 flags, DWORD reserved ) for (ppWnd = list, i = 0; *ppWnd; ppWnd++, i++) { /* Make sure that the window still exists */ - if (!IsWindow( (*ppWnd)->hwndSelf )) continue; + if (!IsWindow32( (*ppWnd)->hwndSelf )) continue; if (!SendMessage16( (*ppWnd)->hwndSelf, WM_QUERYENDSESSION, 0, 0 )) break; } @@ -71,7 +70,7 @@ BOOL32 ExitWindowsEx( UINT32 flags, DWORD reserved ) for (ppWnd = list; i > 0; i--, ppWnd++) { - if (!IsWindow( (*ppWnd)->hwndSelf )) continue; + if (!IsWindow32( (*ppWnd)->hwndSelf )) continue; SendMessage16( (*ppWnd)->hwndSelf, WM_ENDSESSION, result, 0 ); } HeapFree( SystemHeap, 0, list ); diff --git a/misc/lstr.c b/misc/lstr.c index 735a59e1b7a..29c60ee8f26 100644 --- a/misc/lstr.c +++ b/misc/lstr.c @@ -127,9 +127,9 @@ SEGPTR AnsiPrev16( SEGPTR start, SEGPTR current ) /*********************************************************************** - * OutputDebugString (KERNEL.115) + * OutputDebugString16 (KERNEL.115) */ -void OutputDebugString( LPCSTR str ) +void OutputDebugString16( LPCSTR str ) { char *module; char *p, *buffer = HeapAlloc( GetProcessHeap(), 0, strlen(str)+1 ); @@ -144,6 +144,28 @@ void OutputDebugString( LPCSTR str ) } +/*********************************************************************** + * OutputDebugString32A (KERNEL32 + */ +void OutputDebugString32A( LPCSTR str ) +{ + OutputDebugString16( str ); +} + + + +/*********************************************************************** + * OutputDebugString32W (KERNEL32 + */ +void OutputDebugString32W( LPCWSTR str ) +{ + LPSTR p = HEAP_strdupWtoA( GetProcessHeap(), 0, str ); + OutputDebugString32A( p ); + HeapFree( GetProcessHeap(), 0, p ); +} + + + /*********************************************************************** * CharNext32A (USER32.28) */ @@ -544,6 +566,10 @@ FormatMessage32A( fmtstr=HeapAlloc(GetProcessHeap(),0,strlen(f)+2); sprintf(fmtstr,"%%%s",f); f=x+1; + } else { + fmtstr=HeapAlloc(GetProcessHeap(),0,strlen(f)); + sprintf(fmtstr,"%%%s",f); + f+=strlen(f); /*at \0*/ } } else fmtstr=HEAP_strdupA(GetProcessHeap(),0,"%s"); @@ -734,6 +760,10 @@ FormatMessage32W( fmtstr=HeapAlloc( GetProcessHeap(), 0, strlen(f)+2); sprintf(fmtstr,"%%%s",f); f=x+1; + } else { + fmtstr=HeapAlloc(GetProcessHeap(),0,strlen(f)); + sprintf(fmtstr,"%%%s",f); + f+=strlen(f); /*at \0*/ } } else fmtstr=HEAP_strdupA( GetProcessHeap(),0,"%s"); diff --git a/misc/lzexpand.c b/misc/lzexpand.c index a149b2d57e8..48d67e469ed 100644 --- a/misc/lzexpand.c +++ b/misc/lzexpand.c @@ -7,7 +7,6 @@ * FIXME: return values might be wrong */ -#define NO_TRANSITION_TYPES /* This file is Win32-clean */ #include #include #include diff --git a/misc/main.c b/misc/main.c index 1687226cb1b..96a915a59d1 100644 --- a/misc/main.c +++ b/misc/main.c @@ -70,6 +70,7 @@ const WINE_LANGUAGE_DEF Languages[] = {"It",0x0410}, /* LANG_It */ {"Ko",0x0412}, /* LANG_Ko */ {"Hu",0x0436}, /* LANG_Hu */ + {"Pl",0x0415}, /* LANG_Pl */ {NULL,0} }; @@ -162,7 +163,7 @@ static XrmOptionDescRec optionsTable[] = " -fixedmap Use a \"standard\" color map\n" \ " -iconic Start as an icon\n" \ " -ipc Enable IPC facilities\n" \ - " -language xx Set the language (one of En,Es,De,No,Fr,Fi,Da,Cz,Eo,It,Ko,Hu)\n" \ + " -language xx Set the language (one of En,Es,De,No,Fr,Fi,Da,Cz,Eo,It,Ko,\n Hu,Pl)\n" \ " -managed Allow the window manager to manage created windows\n" \ " -mode mode Start Wine in a particular mode (standard or enhanced)\n" \ " -name name Set the application name\n" \ @@ -240,7 +241,7 @@ static int MAIN_GetResource( XrmDatabase db, char *name, XrmValue *value ) */ #ifdef DEBUG_RUNTIME -BOOL ParseDebugOptions(char *options) +BOOL32 ParseDebugOptions(char *options) { int l; if (strlen(options)<3) @@ -811,14 +812,14 @@ DWORD GetWinFlags(void) break; } if( getVersionEx.dwPlatformId == VER_PLATFORM_WIN32_NT ) - result |= 0x4000; /* undocumented WF_WINNT */ + result |= WF_WIN32WOW; /* undocumented WF_WINNT */ return result; } /*********************************************************************** - * SetEnvironment (GDI.132) + * SetEnvironment (GDI.132) */ -int SetEnvironment(LPCSTR lpPortName, LPCSTR lpEnviron, WORD nCount) +INT16 SetEnvironment( LPCSTR lpPortName, LPCSTR lpEnviron, UINT16 nCount ) { LPENVENTRY lpNewEnv; LPENVENTRY lpEnv = lpEnvList; @@ -885,9 +886,9 @@ int SetEnvironment(LPCSTR lpPortName, LPCSTR lpEnviron, WORD nCount) /*********************************************************************** - * GetEnvironment (GDI.134) + * GetEnvironment (GDI.134) */ -int GetEnvironment(LPSTR lpPortName, LPSTR lpEnviron, WORD nMaxSiz) +INT16 GetEnvironment( LPCSTR lpPortName, LPSTR lpEnviron, UINT16 nMaxSiz ) { WORD nCount; LPENVENTRY lpEnv = lpEnvList; @@ -944,9 +945,9 @@ BOOL16 SystemParametersInfo16( UINT16 uAction, UINT16 uParam, case SPI_GETBEEP: XGetKeyboardControl(display, &keyboard_state); if (keyboard_state.bell_percent == 0) - *(BOOL *) lpvParam = FALSE; + *(BOOL16 *) lpvParam = FALSE; else - *(BOOL *) lpvParam = TRUE; + *(BOOL16 *) lpvParam = TRUE; break; case SPI_GETBORDER: @@ -955,25 +956,25 @@ BOOL16 SystemParametersInfo16( UINT16 uAction, UINT16 uParam, case SPI_GETFASTTASKSWITCH: if ( GetProfileInt32A( "windows", "CoolSwitch", 1 ) == 1 ) - *(BOOL *) lpvParam = TRUE; + *(BOOL16 *) lpvParam = TRUE; else - *(BOOL *) lpvParam = FALSE; + *(BOOL16 *) lpvParam = FALSE; break; case SPI_GETGRIDGRANULARITY: - *(INT *) lpvParam = GetProfileInt32A( "desktop", + *(INT16 *) lpvParam = GetProfileInt32A( "desktop", "GridGranularity", 1 ); break; case SPI_GETICONTITLEWRAP: - *(BOOL *) lpvParam = GetProfileInt32A( "desktop", + *(BOOL16 *) lpvParam = GetProfileInt32A( "desktop", "IconTitleWrap", TRUE ); break; case SPI_GETKEYBOARDDELAY: - *(INT *) lpvParam = GetProfileInt32A( "keyboard", + *(INT16 *) lpvParam = GetProfileInt32A( "keyboard", "KeyboardDelay", 1 ); break; @@ -989,15 +990,15 @@ BOOL16 SystemParametersInfo16( UINT16 uAction, UINT16 uParam, case SPI_GETSCREENSAVEACTIVE: if ( GetProfileInt32A( "windows", "ScreenSaveActive", 1 ) == 1 ) - *(BOOL *) lpvParam = TRUE; + *(BOOL16 *) lpvParam = TRUE; else - *(BOOL *) lpvParam = FALSE; + *(BOOL16 *) lpvParam = FALSE; break; case SPI_GETSCREENSAVETIMEOUT: /* FIXME GetProfileInt( "windows", "ScreenSaveTimeout", 300 ); */ XGetScreenSaver(display, &timeout, &temp,&temp,&temp); - *(INT *) lpvParam = timeout * 1000; + *(INT16 *) lpvParam = timeout * 1000; break; case SPI_ICONHORIZONTALSPACING: @@ -1112,7 +1113,7 @@ BOOL32 SystemParametersInfo32W( UINT32 uAction, UINT32 uParam, return SetDeskWallPaper32(NULL); case SPI_SETDESKPATTERN: - if ((INT) uParam == -1) + if ((INT32) uParam == -1) { GetProfileString32A("Desktop", "Pattern", "170 85 170 85 170 85 170 85", diff --git a/misc/network.c b/misc/network.c index 156db539c47..5c1eacec173 100644 --- a/misc/network.c +++ b/misc/network.c @@ -154,7 +154,7 @@ int WNetUnlockQueueData(LPSTR szQueue) * WNetGetConnection [USER.512] */ int WNetGetConnection(LPSTR lpLocalName, - LPSTR lpRemoteName, UINT *cbRemoteName) + LPSTR lpRemoteName, UINT16 *cbRemoteName) { const char *path; @@ -210,7 +210,7 @@ int WNetBrowseDialog(HWND16 hParent,WORD nType,LPSTR szPath) /************************************************************************** * WNetGetUser [USER.516] */ -UINT WNetGetUser(LPSTR lpLocalName, LPSTR lpUserName, DWORD *lpSize) +UINT16 WNetGetUser(LPSTR lpLocalName, LPSTR lpUserName, DWORD *lpSize) { printf("EMPTY STUB !!! WNetGetUser(%p, %p, %p);\n", lpLocalName, lpUserName, lpSize); @@ -220,7 +220,7 @@ UINT WNetGetUser(LPSTR lpLocalName, LPSTR lpUserName, DWORD *lpSize) /************************************************************************** * WNetAddConnection [USER.517] */ -UINT WNetAddConnection(LPSTR lpNetPath, LPSTR lpPassWord, LPSTR lpLocalName) +UINT16 WNetAddConnection(LPSTR lpNetPath, LPSTR lpPassWord, LPSTR lpLocalName) { printf("EMPTY STUB !!! WNetAddConnection('%s', %p, '%s');\n", lpNetPath, lpPassWord, lpLocalName); @@ -231,11 +231,11 @@ UINT WNetAddConnection(LPSTR lpNetPath, LPSTR lpPassWord, LPSTR lpLocalName) /************************************************************************** * WNetCancelConnection [USER.518] */ -UINT WNetCancelConnection(LPSTR lpName, BOOL bForce) +UINT16 WNetCancelConnection(LPSTR lpName, BOOL16 bForce) { - printf("EMPTY STUB !!! WNetCancelConnection('%s', %04X);\n", - lpName, bForce); - return WN_NET_ERROR; + printf("EMPTY STUB !!! WNetCancelConnection('%s', %04X);\n", + lpName, bForce); + return WN_NET_ERROR; } /************************************************************************** @@ -280,7 +280,7 @@ int WNetWriteJob(HANDLE16 hJob,void *lpData,LPWORD lpcbData) /************************************************************************** * WnetConnectDialog [USER.525] */ -UINT WNetConnectDialog(HWND16 hWndParent, WORD iType) +UINT16 WNetConnectDialog(HWND16 hWndParent, WORD iType) { printf("EMPTY STUB !!! WNetConnectDialog(%04x, %4X)\n", hWndParent, iType); return WN_SUCCESS; @@ -299,7 +299,7 @@ int WNetDisconnectDialog(HWND16 hwndOwner, WORD iType) /************************************************************************** * WnetConnectionDialog [USER.527] */ -UINT WNetConnectionDialog(HWND16 hWndParent, WORD iType) +UINT16 WNetConnectionDialog(HWND16 hWndParent, WORD iType) { printf("EMPTY STUB !!! WNetConnectionDialog(%04x, %4X)\n", hWndParent, iType); @@ -361,7 +361,7 @@ int WNetGetPropertyText(HWND16 hwndParent,WORD iButton,WORD nPropSel, /************************************************************************** * WNetAddConnection2 [USER.???] */ -UINT WNetAddConnection2(LPSTR lpNetPath, LPSTR lpPassWord, +UINT16 WNetAddConnection2(LPSTR lpNetPath, LPSTR lpPassWord, LPSTR lpLocalName, LPSTR lpUserName) { printf("EMPTY STUB !!! WNetAddConnection2('%s', %p, '%s', '%s');\n", @@ -372,7 +372,7 @@ UINT WNetAddConnection2(LPSTR lpNetPath, LPSTR lpPassWord, /************************************************************************** * WNetCloseEnum [USER.???] */ -UINT WNetCloseEnum(HANDLE16 hEnum) +UINT16 WNetCloseEnum(HANDLE16 hEnum) { printf("EMPTY STUB !!! WNetCloseEnum(%04x);\n", hEnum); return WN_NET_ERROR; @@ -381,7 +381,7 @@ UINT WNetCloseEnum(HANDLE16 hEnum) /************************************************************************** * WNetEnumResource [USER.???] */ -UINT WNetEnumResource(HANDLE16 hEnum, DWORD cRequ, +UINT16 WNetEnumResource(HANDLE16 hEnum, DWORD cRequ, DWORD *lpCount, LPVOID lpBuf) { printf("EMPTY STUB !!! WNetEnumResource(%04x, %08lX, %p, %p);\n", @@ -392,8 +392,8 @@ UINT WNetEnumResource(HANDLE16 hEnum, DWORD cRequ, /************************************************************************** * WNetOpenEnum [USER.???] */ -UINT WNetOpenEnum(DWORD dwScope, DWORD dwType, - LPNETRESOURCE lpNet, HANDLE16 *lphEnum) +UINT16 WNetOpenEnum(DWORD dwScope, DWORD dwType, + LPNETRESOURCE lpNet, HANDLE16 *lphEnum) { printf("EMPTY STUB !!! WNetOpenEnum(%08lX, %08lX, %p, %p);\n", dwScope, dwType, lpNet, lphEnum); diff --git a/misc/ntdll.c b/misc/ntdll.c index f9d89856d58..a83b049963f 100644 --- a/misc/ntdll.c +++ b/misc/ntdll.c @@ -368,6 +368,15 @@ RtlInitUnicodeString(LPUNICODE_STRING target,LPCWSTR source) { target->MaximumLength = target->Length+2; } +/************************************************************************** + * RtlInitUnicodeString [NTDLL] + */ +VOID +RtlFreeUnicodeString(LPUNICODE_STRING str) { + if (str->Buffer) + HeapFree(GetProcessHeap(),0,str); +} + /************************************************************************** * RtlUnicodeToOemN [NTDLL] */ diff --git a/misc/ole2nls.c b/misc/ole2nls.c index 6cb3b1d0401..ebbd70deb64 100644 --- a/misc/ole2nls.c +++ b/misc/ole2nls.c @@ -5,6 +5,7 @@ */ #include +#include #include #include "windows.h" #include "heap.h" @@ -150,7 +151,7 @@ DWORD GetUserDefaultLCID() case LANG_Ko: return 0x12; /* Korean */ /* case LANG_Du: return 0x13; */ /* Dutch */ case LANG_No: return 0x14; /* Norwegian */ - /* case LANG_Pl: return 0x15; */ /* Polish */ + case LANG_Pl: return 0x15; /* Polish */ /* case LANG_Po: return 0x16; */ /* Portuguese */ /* case LANG_Ro: return 0x18; */ /* Romanian */ /* case LANG_Ru: return 0x19; */ /* Russian */ @@ -1385,6 +1386,129 @@ LOCVAL(LOCALE_INEGSEPBYSPACE) } break; /* LANG(En) */ + case LANG_Pl: + switch (LCType) { +LOCVAL(LOCALE_ILANGUAGE,"9") +LOCVAL(LOCALE_SLANGUAGE,"Polski") +LOCVAL(LOCALE_SENGLANGUAGE,"Polish") +LOCVAL(LOCALE_SABBREVLANGNAME, "pol") +LOCVAL(LOCALE_SNATIVELANGNAME,"Polski") +LOCVAL(LOCALE_ICOUNTRY,"49") +LOCVAL(LOCALE_SCOUNTRY,"Polska") +LOCVAL(LOCALE_SENGCOUNTRY,"Poland") +LOCVAL(LOCALE_SABBREVCTRYNAME,"Pl") +LOCVAL(LOCALE_SNATIVECTRYNAME,"Polska") +LOCVAL(LOCALE_IDEFAULTLANGUAGE,"9") +LOCVAL(LOCALE_IDEFAULTCOUNTRY,"49") +LOCVAL(LOCALE_IDEFAULTCODEPAGE,"1252") +LOCVAL(LOCALE_IDEFAULTANSICODEPAGE,"1252") +LOCVAL(LOCALE_SLIST,";") +LOCVAL(LOCALE_IMEASURE,"0") +LOCVAL(LOCALE_SDECIMAL,",") +LOCVAL(LOCALE_STHOUSAND," ") +/* +LOCVAL(LOCALE_SGROUPING) +*/ +LOCVAL(LOCALE_IDIGITS,"2") +LOCVAL(LOCALE_ILZERO,"1") +/* +LOCVAL(LOCALE_INEGNUMBER) +Is this "0123456789" ?? +LOCVAL(LOCALE_SNATIVEDIGITS) +*/ +LOCVAL(LOCALE_SCURRENCY,"z\xB3") +/* +LOCVAL(LOCALE_SINTLSYMBOL) +LOCVAL(LOCALE_SMONDECIMALSEP) +LOCVAL(LOCALE_SMONTHOUSANDSEP) +LOCVAL(LOCALE_SMONGROUPING) +*/ +LOCVAL(LOCALE_ICURRDIGITS,"2") +/* +LOCVAL(LOCALE_IINTLCURRDIGITS) +*/ +LOCVAL(LOCALE_ICURRENCY,"3") +LOCVAL(LOCALE_INEGCURR,"8") +LOCVAL(LOCALE_SDATE,".") +LOCVAL(LOCALE_STIME,":") +LOCVAL(LOCALE_SSHORTDATE,"dd.MM.yyyy") +LOCVAL(LOCALE_SLONGDATE,"ddd, d. MMMM yyyy") +/* +LOCVAL(LOCALE_STIMEFORMAT) +*/ +LOCVAL(LOCALE_IDATE,"1") +/* +LOCVAL(LOCALE_ILDATE) +*/ +LOCVAL(LOCALE_ITIME,"1") +/* +LOCVAL(LOCALE_ITIMEMARKPOSN) +LOCVAL(LOCALE_ICENTURY) +*/ +LOCVAL(LOCALE_ITLZERO,"1") +/* +LOCVAL(LOCALE_IDAYLZERO) +LOCVAL(LOCALE_IMONLZERO) +LOCVAL(LOCALE_S1159) +LOCVAL(LOCALE_S2359) +LOCVAL(LOCALE_ICALENDARTYPE) +LOCVAL(LOCALE_IOPTIONALCALENDAR) +LOCVAL(LOCALE_IFIRSTDAYOFWEEK) +LOCVAL(LOCALE_IFIRSTWEEKOFYEAR) +*/ +LOCVAL(LOCALE_SDAYNAME1,"Poniedzia\263ek") +LOCVAL(LOCALE_SDAYNAME2,"Wtorek") +LOCVAL(LOCALE_SDAYNAME3,"Sroda") +LOCVAL(LOCALE_SDAYNAME4,"Czwartek") +LOCVAL(LOCALE_SDAYNAME5,"Pi\xB9tek") +LOCVAL(LOCALE_SDAYNAME6,"Sobota") +LOCVAL(LOCALE_SDAYNAME7,"Niedziela") +LOCVAL(LOCALE_SABBREVDAYNAME1,"Po") +LOCVAL(LOCALE_SABBREVDAYNAME2,"Wt") +LOCVAL(LOCALE_SABBREVDAYNAME3,"Sr") +LOCVAL(LOCALE_SABBREVDAYNAME4,"Cz") +LOCVAL(LOCALE_SABBREVDAYNAME5,"Pt") +LOCVAL(LOCALE_SABBREVDAYNAME6,"So") +LOCVAL(LOCALE_SABBREVDAYNAME7,"Ni") +LOCVAL(LOCALE_SMONTHNAME1,"Stycze\xF1") +LOCVAL(LOCALE_SMONTHNAME2,"Luty") +LOCVAL(LOCALE_SMONTHNAME3,"Marzec") +LOCVAL(LOCALE_SMONTHNAME4,"Kwiecie\xF1") +LOCVAL(LOCALE_SMONTHNAME5,"Maj") +LOCVAL(LOCALE_SMONTHNAME6,"Czerwiec") +LOCVAL(LOCALE_SMONTHNAME7,"Lipiec") +LOCVAL(LOCALE_SMONTHNAME8,"Sierpie\xF1") +LOCVAL(LOCALE_SMONTHNAME9,"Wrzesie\xF1") +LOCVAL(LOCALE_SMONTHNAME10,"Pa\237dziernik") +LOCVAL(LOCALE_SMONTHNAME11,"Listapad") +LOCVAL(LOCALE_SMONTHNAME12,"Grudzie\xF1") +LOCVAL(LOCALE_SMONTHNAME13,"") +LOCVAL(LOCALE_SABBREVMONTHNAME1,"Sty") +LOCVAL(LOCALE_SABBREVMONTHNAME2,"Lut") +LOCVAL(LOCALE_SABBREVMONTHNAME3,"Mar") +LOCVAL(LOCALE_SABBREVMONTHNAME4,"Kwi") +LOCVAL(LOCALE_SABBREVMONTHNAME5,"Maj") +LOCVAL(LOCALE_SABBREVMONTHNAME6,"Cze") +LOCVAL(LOCALE_SABBREVMONTHNAME7,"Lip") +LOCVAL(LOCALE_SABBREVMONTHNAME8,"Sie") +LOCVAL(LOCALE_SABBREVMONTHNAME9,"Wrz") +LOCVAL(LOCALE_SABBREVMONTHNAME10,"Pa\x9F") +LOCVAL(LOCALE_SABBREVMONTHNAME11,"Lis") +LOCVAL(LOCALE_SABBREVMONTHNAME12,"Gru") +LOCVAL(LOCALE_SABBREVMONTHNAME13,"") +/* +LOCVAL(LOCALE_SPOSITIVESIGN) +LOCVAL(LOCALE_SNEGATIVESIGN) +LOCVAL(LOCALE_IPOSSIGNPOSN) +LOCVAL(LOCALE_INEGSIGNPOSN) +LOCVAL(LOCALE_IPOSSYMPRECEDES) +LOCVAL(LOCALE_IPOSSEPBYSPACE) +LOCVAL(LOCALE_INEGSYMPRECEDES) +LOCVAL(LOCALE_INEGSEPBYSPACE) +*/ + default: found=0;break; + } + break; /* LANG(Pl) */ /*Insert other languages here*/ @@ -1489,9 +1613,10 @@ UINT32 CompareString32W(DWORD lcid, DWORD fdwStyle, /*********************************************************************** * SetLocalInfoA (KERNEL32.499) */ -BOOL SetLocaleInfoA(DWORD lcid, DWORD lctype, LPCSTR data) { - fprintf(stdnimp,"SetLocaleInfoA(%ld,%ld,%s)\n",lcid,lctype,data); - return TRUE; +BOOL16 SetLocaleInfoA(DWORD lcid, DWORD lctype, LPCSTR data) +{ + fprintf(stdnimp,"SetLocaleInfoA(%ld,%ld,%s)\n",lcid,lctype,data); + return TRUE; } /*********************************************************************** @@ -1548,3 +1673,93 @@ EnumSystemLocales32A(LOCALE_ENUMPROC32A lpfnLocaleEnum,DWORD flags) { } return TRUE; } + +/*********************************************************************** + * GetStringTypeA (OLE2NLS.7) + */ +BOOL16 +GetStringType16(LCID locale,DWORD dwInfoType,LPCSTR src,INT16 cchSrc,LPWORD chartype) { + return GetStringTypeEx32A(locale,dwInfoType,src,cchSrc,chartype); +} +/*********************************************************************** + * GetStringTypeA (KERNEL32.277) + */ +BOOL32 +GetStringType32A(LCID locale,DWORD dwInfoType,LPCSTR src,INT32 cchSrc,LPWORD chartype) { + return GetStringTypeEx32A(locale,dwInfoType,src,cchSrc,chartype); +} +/*********************************************************************** + * GetStringTypeExA (KERNEL32.276) + */ +BOOL32 +GetStringTypeEx32A(LCID locale,DWORD dwInfoType,LPCSTR src,INT32 cchSrc,LPWORD chartype) { + int i; + + switch (dwInfoType) { + case CT_CTYPE2: + fprintf(stderr,"GetStringType32A:CT_CTYPE2 not supported.\n"); + return FALSE; + case CT_CTYPE3: + fprintf(stderr,"GetStringType32A:CT_CTYPE3 not supported.\n"); + return FALSE; + default:break; + } + if (cchSrc==-1) + cchSrc=lstrlen32A(src); + for (i=0;i iconDirCount - nIconIndex ) n = iconDirCount - nIconIndex; @@ -680,9 +694,10 @@ HGLOBAL16 InternalExtractIcon(HINSTANCE16 hInstance, LPCSTR lpszExeFileName, UIN } /************************************************************************* - * ExtractIcon [SHELL.34] + * ExtractIcon16 (SHELL.34) */ -HICON16 ExtractIcon(HINSTANCE16 hInstance, LPCSTR lpszExeFileName, WORD nIconIndex) +HICON16 ExtractIcon16( HINSTANCE16 hInstance, LPCSTR lpszExeFileName, + UINT16 nIconIndex ) { HGLOBAL16 handle = InternalExtractIcon(hInstance,lpszExeFileName,nIconIndex, 1); @@ -697,6 +712,18 @@ HICON16 ExtractIcon(HINSTANCE16 hInstance, LPCSTR lpszExeFileName, WORD nIconInd return 0; } + +/************************************************************************* + * ExtractIcon32A (SHELL32.20) + */ +HICON32 ExtractIcon32A( HINSTANCE32 hInstance, LPCSTR lpszExeFileName, + UINT32 nIconIndex ) +{ + /* FIXME */ + return ExtractIcon16( hInstance, lpszExeFileName, nIconIndex ); +} + + /************************************************************************* * ExtractAssociatedIcon [SHELL.36] * @@ -705,7 +732,7 @@ HICON16 ExtractIcon(HINSTANCE16 hInstance, LPCSTR lpszExeFileName, WORD nIconInd */ HICON16 ExtractAssociatedIcon(HINSTANCE16 hInst,LPSTR lpIconPath,LPWORD lpiIcon) { - HICON16 hIcon = ExtractIcon(hInst, lpIconPath, *lpiIcon); + HICON16 hIcon = ExtractIcon16(hInst, lpIconPath, *lpiIcon); if( hIcon < 2 ) { @@ -713,12 +740,12 @@ HICON16 ExtractAssociatedIcon(HINSTANCE16 hInst,LPSTR lpIconPath,LPWORD lpiIcon) if( hIcon == 1 ) /* no icons found in given file */ { char tempPath[0x80]; - UINT uRet = FindExecutable(lpIconPath,NULL,tempPath); + UINT16 uRet = FindExecutable16(lpIconPath,NULL,tempPath); if( uRet > 32 && tempPath[0] ) { strcpy(lpIconPath,tempPath); - hIcon = ExtractIcon(hInst, lpIconPath, *lpiIcon); + hIcon = ExtractIcon16(hInst, lpIconPath, *lpiIcon); if( hIcon > 2 ) return hIcon; } @@ -744,7 +771,7 @@ HICON16 ExtractAssociatedIcon(HINSTANCE16 hInst,LPSTR lpIconPath,LPWORD lpiIcon) */ LPSTR SHELL_FindString(LPSTR lpEnv, LPCSTR entry) { - UINT l = strlen(entry); + UINT16 l = strlen(entry); for( ; *lpEnv ; lpEnv+=strlen(lpEnv)+1 ) { if( lstrncmpi32A(lpEnv, entry, l) ) continue; diff --git a/misc/spy.c b/misc/spy.c index 7b19a340067..3216f4a855b 100644 --- a/misc/spy.c +++ b/misc/spy.c @@ -5,7 +5,6 @@ * 1995, Alex Korobka */ -#define NO_TRANSITION_TYPES /* This file is Win32-clean */ #include #include #include diff --git a/misc/stress.c b/misc/stress.c index 3223fa7d42e..d8003233edf 100644 --- a/misc/stress.c +++ b/misc/stress.c @@ -8,7 +8,7 @@ #include "debug.h" -int AllocDiskSpace(long lLeft, UINT uDrive) +int AllocDiskSpace(long lLeft, UINT16 uDrive) { dprintf_stress(stdnimp, "stress.dll: AllocDiskSpace %d, %ld\n", uDrive, lLeft); @@ -25,21 +25,21 @@ int AllocFileHandles(int Left) return 1; } -BOOL AllocGDIMem(UINT uLeft) +BOOL16 AllocGDIMem(UINT16 uLeft) { dprintf_stress(stddeb, "stress.dll: AllocGDIMem %d\n", uLeft); return 1; } -BOOL AllocMem(DWORD dwLeft) +BOOL16 AllocMem(DWORD dwLeft) { dprintf_stress(stdnimp, "stress.dll: AllocMem %ld\n", dwLeft); return 1; } -BOOL AllocUserMem(UINT uContig) +BOOL16 AllocUserMem(UINT16 uContig) { dprintf_stress(stddeb, "stress.dll: AllocUserMem %d\n", uContig); @@ -77,7 +77,7 @@ int GetFreeFileHandles(void) #endif } -void UnAllocDiskSpace(UINT drive) +void UnAllocDiskSpace(UINT16 drive) { dprintf_stress(stddeb, "stress.dll: UnAllocDiskSpace %d\n", drive); } diff --git a/misc/system.c b/misc/system.c index ee60a031a38..aaeeae55b1c 100644 --- a/misc/system.c +++ b/misc/system.c @@ -11,7 +11,7 @@ /*********************************************************************** * InquireSystem (SYSTEM.1) */ -DWORD InquireSystem( WORD code, WORD drive, BOOL enable ) +DWORD InquireSystem( WORD code, WORD drive, BOOL16 enable ) { WORD drivetype; diff --git a/misc/winsock.c b/misc/winsock.c index b84cf6c098c..6652b8a415e 100644 --- a/misc/winsock.c +++ b/misc/winsock.c @@ -360,7 +360,7 @@ INT16 WSAGetLastError(void) dprintf_winsock(stddeb, "WSAGetLastError(%08x)", (unsigned)pwsi); - ret = (pwsi) ? pwsi->errno : WSANOTINITIALISED; + ret = (pwsi) ? pwsi->err : WSANOTINITIALISED; dprintf_winsock(stddeb, " = %i\n", (int)ret); return ret; @@ -372,15 +372,15 @@ void WSASetLastError(INT16 iError) dprintf_winsock(stddeb, "WSASetLastError(%08x): %d\n", (unsigned)pwsi, (int)iError); - if( pwsi ) pwsi->errno = iError; + if( pwsi ) pwsi->err = iError; } int _check_ws(LPWSINFO pwsi, ws_socket* pws) { if( pwsi ) - if( pwsi->flags & WSI_BLOCKINGCALL ) pwsi->errno = WSAEINPROGRESS; + if( pwsi->flags & WSI_BLOCKINGCALL ) pwsi->err = WSAEINPROGRESS; else if( WSI_CHECK_RANGE(pwsi, pws) ) return 1; - else pwsi->errno = WSAENOTSOCK; + else pwsi->err = WSAENOTSOCK; return 0; } @@ -426,9 +426,9 @@ SOCKET16 WINSOCK_accept(SOCKET16 s, struct sockaddr *addr, INT16 *addrlen16) pwsi->flags &= ~WSI_BLOCKINGCALL; return (SOCKET16)WS_PTR2HANDLE(pnew); } - else pwsi->errno = WSAENOBUFS; + else pwsi->err = WSAENOBUFS; } - else pwsi->errno = wsaErrno(); + else pwsi->err = wsaErrno(); pwsi->flags &= ~WSI_BLOCKINGCALL; } @@ -456,14 +456,14 @@ INT16 WINSOCK_bind(SOCKET16 s, struct sockaddr *name, INT16 namelen) errno = loc_errno; switch(errno) { - case EBADF: pwsi->errno = WSAENOTSOCK; break; - case EADDRNOTAVAIL: pwsi->errno = WSAEINVAL; break; - default: pwsi->errno = wsaErrno(); + case EBADF: pwsi->err = WSAENOTSOCK; break; + case EADDRNOTAVAIL: pwsi->err = WSAEINVAL; break; + default: pwsi->err = wsaErrno(); } } else return 0; - else pwsi->errno = WSAEAFNOSUPPORT; - else pwsi->errno = WSAEFAULT; + else pwsi->err = WSAEAFNOSUPPORT; + else pwsi->err = WSAEFAULT; return SOCKET_ERROR; } @@ -483,7 +483,7 @@ INT16 WINSOCK_closesocket(SOCKET16 s) pws->flags = (unsigned)pwsi->last_free; pwsi->last_free = pws - &pwsi->sock[0]; if (close(fd) == 0) return 0; - pwsi->errno = (errno == EBADF) ? WSAENOTSOCK : wsaErrno(); + pwsi->err = (errno == EBADF) ? WSAENOTSOCK : wsaErrno(); } return SOCKET_ERROR; } @@ -512,7 +512,7 @@ INT16 WINSOCK_connect(SOCKET16 s, struct sockaddr *name, INT16 namelen) pws->flags &= ~(WS_FD_INACTIVE | WS_FD_CONNECT); return 0; } - pwsi->errno = (errno == EINPROGRESS) ? WSAEWOULDBLOCK : wsaErrno(); + pwsi->err = (errno == EINPROGRESS) ? WSAEWOULDBLOCK : wsaErrno(); } return SOCKET_ERROR; } @@ -535,7 +535,7 @@ INT16 WINSOCK_getpeername(SOCKET16 s, struct sockaddr *name, INT16 *namelen) *namelen = (INT16)namelen32; return 0; } - pwsi->errno = (h_errno < 0) ? wsaErrno() : wsaHerrno(); + pwsi->err = (h_errno < 0) ? wsaErrno() : wsaHerrno(); } return SOCKET_ERROR; } @@ -555,7 +555,7 @@ INT16 WINSOCK_getsockname(SOCKET16 s, struct sockaddr *name, INT16 *namelen) *namelen = (INT16)namelen32; return 0; } - pwsi->errno = (h_errno < 0) ? wsaErrno() : wsaHerrno(); + pwsi->err = (h_errno < 0) ? wsaErrno() : wsaHerrno(); } return SOCKET_ERROR; } @@ -576,7 +576,7 @@ INT16 WINSOCK_getsockopt(SOCKET16 s, INT16 level, convert_sockopt(&level, &optname); if (getsockopt(pws->fd, (int) level, optname, optval, &optlen32) == 0 ) { *optlen = (INT16)optlen32; return 0; } - pwsi->errno = (errno == EBADF) ? WSAENOTSOCK : wsaErrno(); + pwsi->err = (errno == EBADF) ? WSAENOTSOCK : wsaErrno(); } return SOCKET_ERROR; } @@ -604,13 +604,13 @@ SEGPTR WINSOCK_inet_ntoa(struct in_addr in) if( pwsi->dbuffer == NULL ) if((pwsi->dbuffer = (char*) SEGPTR_ALLOC(32)) == NULL ) { - pwsi->errno = WSAENOBUFS; + pwsi->err = WSAENOBUFS; return (SEGPTR)NULL; } strncpy(pwsi->dbuffer, s, 32 ); return SEGPTR_GET(pwsi->dbuffer); } - pwsi->errno = wsaErrno(); + pwsi->err = wsaErrno(); } return (SEGPTR)NULL; } @@ -632,18 +632,18 @@ INT16 WINSOCK_ioctlsocket(SOCKET16 s, UINT32 cmd, UINT32 *argp) case WS_FIONBIO: newcmd=FIONBIO; if( pws->p_aop && *argp == 0 ) { - pwsi->errno = WSAEINVAL; + pwsi->err = WSAEINVAL; return SOCKET_ERROR; } break; case WS_SIOCATMARK: newcmd=SIOCATMARK; break; case WS_IOW('f',125,u_long): fprintf(stderr,"Warning: WS1.1 shouldn't be using async I/O\n"); - pwsi->errno = WSAEINVAL; return SOCKET_ERROR; + pwsi->err = WSAEINVAL; return SOCKET_ERROR; default: fprintf(stderr,"Warning: Unknown WS_IOCTL cmd (%08x)\n", cmd); } if( ioctl(pws->fd, newcmd, (char*)argp ) == 0 ) return 0; - pwsi->errno = (errno == EBADF) ? WSAENOTSOCK : wsaErrno(); + pwsi->err = (errno == EBADF) ? WSAENOTSOCK : wsaErrno(); } return SOCKET_ERROR; } @@ -665,7 +665,7 @@ INT16 WINSOCK_listen(SOCKET16 s, INT16 backlog) else notify_client(pws, WS_FD_ACCEPT); if (listen(pws->fd, backlog) == 0) return 0; - pwsi->errno = wsaErrno(); + pwsi->err = wsaErrno(); } return SOCKET_ERROR; } @@ -686,7 +686,7 @@ INT16 WINSOCK_recv(SOCKET16 s, char *buf, INT16 len, INT16 flags) notify_client(pws, WS_FD_READ); return (INT16)length; } - pwsi->errno = wsaErrno(); + pwsi->err = wsaErrno(); } dprintf_winsock(stddeb, " -> ERROR\n"); return SOCKET_ERROR; @@ -710,7 +710,7 @@ INT16 WINSOCK_recvfrom(SOCKET16 s, char *buf, INT16 len, INT16 flags, notify_client(pws, WS_FD_READ); return (INT16)length; } - pwsi->errno = wsaErrno(); + pwsi->err = wsaErrno(); } return SOCKET_ERROR; } @@ -744,7 +744,7 @@ INT16 WINSOCK_select(INT16 nfds, ws_fd_set *ws_readfds, } return highfd; } - pwsi->errno = wsaErrno(); + pwsi->err = wsaErrno(); } return SOCKET_ERROR; } @@ -762,7 +762,7 @@ INT16 WINSOCK_send(SOCKET16 s, char *buf, INT16 len, INT16 flags) if ((length = send(pws->fd, buf, len, flags)) < 0 ) { length = SOCKET_ERROR; - pwsi->errno = wsaErrno(); + pwsi->err = wsaErrno(); } notify_client(pws, WS_FD_WRITE); return (INT16)length; @@ -785,7 +785,7 @@ INT16 WINSOCK_sendto(SOCKET16 s, char *buf, INT16 len, INT16 flags, if ((length = sendto(pws->fd, buf, len, flags, to, tolen)) < 0 ) { length = SOCKET_ERROR; - pwsi->errno = wsaErrno(); + pwsi->err = wsaErrno(); } notify_client(pws, WS_FD_WRITE); return (INT16)length; @@ -814,7 +814,7 @@ INT16 WINSOCK_setsockopt(SOCKET16 s, INT16 level, INT16 optname, optlen = sizeof(linger32); } if (setsockopt(pws->fd, level, optname, optval, optlen) == 0) return 0; - pwsi->errno = wsaErrno(); + pwsi->err = wsaErrno(); } return SOCKET_ERROR; } @@ -832,7 +832,7 @@ INT16 WINSOCK_shutdown(SOCKET16 s, INT16 how) cancel_async_select(pws); if (shutdown(pws->fd, how) == 0) return 0; - pwsi->errno = wsaErrno(); + pwsi->err = wsaErrno(); } return SOCKET_ERROR; } @@ -853,7 +853,7 @@ SOCKET16 WINSOCK_socket(INT16 af, INT16 type, INT16 protocol) { case AF_INET: case AF_UNSPEC: break; - default: pwsi->errno = WSAEAFNOSUPPORT; return INVALID_SOCKET; + default: pwsi->err = WSAEAFNOSUPPORT; return INVALID_SOCKET; } /* check the socket type */ @@ -862,12 +862,12 @@ SOCKET16 WINSOCK_socket(INT16 af, INT16 type, INT16 protocol) case SOCK_STREAM: case SOCK_DGRAM: case SOCK_RAW: break; - default: pwsi->errno = WSAESOCKTNOSUPPORT; return INVALID_SOCKET; + default: pwsi->err = WSAESOCKTNOSUPPORT; return INVALID_SOCKET; } /* check the protocol type */ if ( protocol < 0 ) /* don't support negative values */ - { pwsi->errno = WSAEPROTONOSUPPORT; return INVALID_SOCKET; } + { pwsi->err = WSAEPROTONOSUPPORT; return INVALID_SOCKET; } if ( af == AF_UNSPEC) /* did they not specify the address family? */ switch(protocol) @@ -876,7 +876,7 @@ SOCKET16 WINSOCK_socket(INT16 af, INT16 type, INT16 protocol) if (type == SOCK_STREAM) { af = AF_INET; break; } case IPPROTO_UDP: if (type == SOCK_DGRAM) { af = AF_INET; break; } - default: pwsi->errno = WSAEPROTOTYPE; return INVALID_SOCKET; + default: pwsi->err = WSAEPROTOTYPE; return INVALID_SOCKET; } if ((sock = socket(af, type, protocol)) >= 0) @@ -888,7 +888,7 @@ SOCKET16 WINSOCK_socket(INT16 af, INT16 type, INT16 protocol) if( pnew ) return (SOCKET16)WS_PTR2HANDLE(pnew); { close(sock); - pwsi->errno = WSAENOBUFS; + pwsi->err = WSAENOBUFS; return INVALID_SOCKET; } } @@ -896,8 +896,8 @@ SOCKET16 WINSOCK_socket(INT16 af, INT16 type, INT16 protocol) if (errno == EPERM) /* raw socket denied */ { fprintf(stderr, "WS_SOCKET: not enough privileges\n"); - pwsi->errno = WSAESOCKTNOSUPPORT; - } else pwsi->errno = wsaErrno(); + pwsi->err = WSAESOCKTNOSUPPORT; + } else pwsi->err = wsaErrno(); } dprintf_winsock(stddeb, "\t\tfailed!\n"); @@ -927,8 +927,8 @@ SEGPTR WINSOCK_gethostbyaddr(const char *addr, INT16 len, INT16 type) if( (host = gethostbyaddr(addr, len, type)) != NULL ) if( WS_dup_he(pwsi, host, WS_DUP_SEGPTR) ) return SEGPTR_GET(pwsi->buffer); - else pwsi->errno = WSAENOBUFS; - else pwsi->errno = (h_errno < 0) ? wsaErrno() : wsaHerrno(); + else pwsi->err = WSAENOBUFS; + else pwsi->err = (h_errno < 0) ? wsaErrno() : wsaHerrno(); } return NULL; } @@ -948,8 +948,8 @@ SEGPTR WINSOCK_gethostbyname(const char *name) if( (host = gethostbyname(name)) != NULL ) if( WS_dup_he(pwsi, host, WS_DUP_SEGPTR) ) return SEGPTR_GET(pwsi->buffer); - else pwsi->errno = WSAENOBUFS; - else pwsi->errno = (h_errno < 0) ? wsaErrno() : wsaHerrno(); + else pwsi->err = WSAENOBUFS; + else pwsi->err = (h_errno < 0) ? wsaErrno() : wsaHerrno(); } return NULL; } @@ -963,7 +963,7 @@ INT16 WINSOCK_gethostname(char *name, INT16 namelen) if( pwsi ) { if (gethostname(name, namelen) == 0) return 0; - pwsi->errno = (errno == EINVAL) ? WSAEFAULT : wsaErrno(); + pwsi->err = (errno == EINVAL) ? WSAEFAULT : wsaErrno(); } return SOCKET_ERROR; } @@ -983,8 +983,8 @@ SEGPTR WINSOCK_getprotobyname(char *name) if( (proto = getprotobyname(name)) != NULL ) if( WS_dup_pe(pwsi, proto, WS_DUP_SEGPTR) ) return SEGPTR_GET(pwsi->buffer); - else pwsi->errno = WSAENOBUFS; - else pwsi->errno = (h_errno < 0) ? wsaErrno() : wsaHerrno(); + else pwsi->err = WSAENOBUFS; + else pwsi->err = (h_errno < 0) ? wsaErrno() : wsaHerrno(); } return NULL; } @@ -1004,8 +1004,8 @@ SEGPTR WINSOCK_getprotobynumber(INT16 number) if( (proto = getprotobynumber(number)) != NULL ) if( WS_dup_pe(pwsi, proto, WS_DUP_SEGPTR) ) return SEGPTR_GET(pwsi->buffer); - else pwsi->errno = WSAENOBUFS; - else pwsi->errno = WSANO_DATA; + else pwsi->err = WSAENOBUFS; + else pwsi->err = WSANO_DATA; } return NULL; } @@ -1026,8 +1026,8 @@ SEGPTR WINSOCK_getservbyname(const char *name, const char *proto) if( (serv = getservbyname(name, proto)) != NULL ) if( WS_dup_se(pwsi, serv, WS_DUP_SEGPTR) ) return SEGPTR_GET(pwsi->buffer); - else pwsi->errno = WSAENOBUFS; - else pwsi->errno = (h_errno < 0) ? wsaErrno() : wsaHerrno(); + else pwsi->err = WSAENOBUFS; + else pwsi->err = (h_errno < 0) ? wsaErrno() : wsaHerrno(); } return NULL; } @@ -1047,8 +1047,8 @@ SEGPTR WINSOCK_getservbyport(INT16 port, const char *proto) if( (serv = getservbyport(port, proto)) != NULL ) if( WS_dup_se(pwsi, serv, WS_DUP_SEGPTR) ) return SEGPTR_GET(pwsi->buffer); - else pwsi->errno = WSAENOBUFS; - else pwsi->errno = (h_errno < 0) ? wsaErrno() : wsaHerrno(); + else pwsi->err = WSAENOBUFS; + else pwsi->err = (h_errno < 0) ? wsaErrno() : wsaHerrno(); } return NULL; } @@ -1091,7 +1091,7 @@ static int aop_control(ws_async_op* p_aop, int flag ) p_aop->hWnd, p_aop->uMsg, (HANDLE16)WS_PTR2HANDLE(p_aop), (LPARAM)lLength); #endif - PostMessage(p_aop->hWnd, p_aop->uMsg, (HANDLE16)WS_PTR2HANDLE(p_aop), (LPARAM)lLength); + PostMessage16(p_aop->hWnd, p_aop->uMsg, (HANDLE16)WS_PTR2HANDLE(p_aop), (LPARAM)lLength); return AOP_CONTROL_REMOVE; } @@ -1154,8 +1154,8 @@ static HANDLE16 __WSAsyncDBQuery(LPWSINFO pwsi, HWND16 hWnd, UINT16 uMsg, LPCSTR } } WS_FREE(async_ctl.ws_aop); - pwsi->errno = wsaErrno(); - } else pwsi->errno = WSAEWOULDBLOCK; + pwsi->err = wsaErrno(); + } else pwsi->err = WSAEWOULDBLOCK; return 0; } @@ -1268,7 +1268,7 @@ INT16 WSACancelAsyncRequest(HANDLE16 hAsyncTaskHandle) WS_FREE(p_aop); return 0; } - else pwsi->errno = WSAEINVAL; + else pwsi->err = WSAEINVAL; return SOCKET_ERROR; } @@ -1311,8 +1311,8 @@ void _sigusr1_handler_parent(int sig) printf("async event - hWnd %04x, uMsg %04x [%08x]\n", pws->p_aop->hWnd, pws->p_aop->uMsg, ipack.lParam ); #endif - PostMessage(pws->p_aop->hWnd, pws->p_aop->uMsg, - (WPARAM16)ipack.wParam, (LPARAM)ipack.lParam ); + PostMessage16(pws->p_aop->hWnd, pws->p_aop->uMsg, + (WPARAM16)ipack.wParam, (LPARAM)ipack.lParam ); } else fprintf(stderr,"AsyncSelect:stray async_op in socket %04x!\n", ipack.wParam); } @@ -1388,7 +1388,7 @@ INT16 WSAAsyncSelect(SOCKET16 s, HWND16 hWnd, UINT16 uMsg, UINT32 lEvent) (unsigned)pwsi, s, hWnd, uMsg, (unsigned)lEvent ); if( _check_ws(pwsi, pws) ) if( init_async_select(pws, hWnd, uMsg, lEvent) == 0 ) return 0; - else pwsi->errno = WSAENOBUFS; + else pwsi->err = WSAENOBUFS; return SOCKET_ERROR; } diff --git a/misc/wsprintf.c b/misc/wsprintf.c index bdf63342ce7..bdb67130317 100644 --- a/misc/wsprintf.c +++ b/misc/wsprintf.c @@ -4,7 +4,6 @@ * Copyright 1996 Alexandre Julliard */ -#define NO_TRANSITION_TYPES /* This file is Win32-clean */ #include #include #include diff --git a/miscemu/Makefile.in b/miscemu/Makefile.in index 79950ea5cb6..d6c0b52956c 100644 --- a/miscemu/Makefile.in +++ b/miscemu/Makefile.in @@ -1,4 +1,4 @@ -DEFS = -D__WINE__ -DNO_TRANSITION_TYPES +DEFS = -D__WINE__ TOPSRCDIR = @top_srcdir@ TOPOBJDIR = .. SRCDIR = @srcdir@ diff --git a/msdos/Makefile.in b/msdos/Makefile.in index 1c7682b3019..c380feb7dec 100644 --- a/msdos/Makefile.in +++ b/msdos/Makefile.in @@ -1,4 +1,4 @@ -DEFS = -D__WINE__ -DNO_TRANSITION_TYPES +DEFS = -D__WINE__ TOPSRCDIR = @top_srcdir@ TOPOBJDIR = .. SRCDIR = @srcdir@ diff --git a/msdos/dosmem.c b/msdos/dosmem.c index 07d781fb6ce..ba866a44256 100644 --- a/msdos/dosmem.c +++ b/msdos/dosmem.c @@ -204,7 +204,8 @@ BOOL32 DOSMEM_Init(void) * - it is mostly wasted but we use can some of it to * store internal translation tables, etc... */ - DOSMEM_dosmem = VirtualAlloc(NULL,0x100000,MEM_COMMIT,PAGE_EXECUTE_READWRITE); + DOSMEM_dosmem = VirtualAlloc( NULL, 0x100000, MEM_COMMIT, + PAGE_EXECUTE_READWRITE ); if (!DOSMEM_dosmem) { fprintf( stderr, "Could not allocate DOS memory.\n" ); @@ -348,6 +349,7 @@ BOOL32 DOSMEM_FreeBlock(void* ptr) return FALSE; } + /*********************************************************************** * DOSMEM_MapLinearToDos * @@ -355,14 +357,13 @@ BOOL32 DOSMEM_FreeBlock(void* ptr) */ UINT32 DOSMEM_MapLinearToDos(LPVOID ptr) { -#ifndef WINELIB - if (((char*)ptr >= DOSMEM_dosmem) && - ((char*)ptr < DOSMEM_dosmem+0x100000)) + if (((char*)ptr >= DOSMEM_dosmem) && + ((char*)ptr < DOSMEM_dosmem + 0x100000)) return (UINT32)ptr - (UINT32)DOSMEM_dosmem; -#endif - return (UINT32)ptr; + return (UINT32)ptr; } + /*********************************************************************** * DOSMEM_MapDosToLinear * @@ -370,12 +371,11 @@ UINT32 DOSMEM_MapLinearToDos(LPVOID ptr) */ LPVOID DOSMEM_MapDosToLinear(UINT32 ptr) { -#ifndef WINELIB - if ( ptr < 1000000 ) return (LPVOID)(ptr + (UINT32)DOSMEM_dosmem); -#endif - return (LPVOID)ptr; + if (ptr < 0x100000) return (LPVOID)(ptr + (UINT32)DOSMEM_dosmem); + return (LPVOID)ptr; } + /*********************************************************************** * DOSMEM_MapRealToLinear * @@ -398,7 +398,7 @@ LPVOID DOSMEM_MapRealToLinear(DWORD x) */ WORD DOSMEM_AllocSelector(WORD realsel) { - HMODULE16 hModule = GetModuleHandle("KERNEL"); + HMODULE16 hModule = GetModuleHandle16("KERNEL"); WORD sel; sel=GLOBAL_CreateBlock( diff --git a/msdos/dpmi.c b/msdos/dpmi.c index 5096368904c..4ad248ef45e 100644 --- a/msdos/dpmi.c +++ b/msdos/dpmi.c @@ -103,8 +103,8 @@ void INT_Int31Handler( CONTEXT *context ) } if (entryPoint) AX_reg(context) = LOWORD(MODULE_GetEntryPoint( - GetModuleHandle( "KERNEL" ), - entryPoint )); + GetModuleHandle16( "KERNEL" ), + entryPoint )); } break; diff --git a/msdos/int21.c b/msdos/int21.c index 79c0d874862..37dc6f07feb 100644 --- a/msdos/int21.c +++ b/msdos/int21.c @@ -428,7 +428,7 @@ void ExtendedOpenCreateFile(CONTEXT *context ) return; } if ((action & 0x07)== 2) { - /* Truncate it, but first check if opend for write */ + /* Truncate it, but first check if opened for write */ if ((BL_reg(context) & 0x0007)== 0) { BX_reg(context) = AX_reg(context); CloseFile(context); @@ -456,7 +456,7 @@ void ExtendedOpenCreateFile(CONTEXT *context ) DX_reg(context) = SI_reg(context); INT21_CreateFile(context); if (EFL_reg(context) & 0x0001) { /*no file open, flags set */ - dprintf_int(stddeb, "int21: extended open/create: truncfailed"); + dprintf_int(stddeb, "int21: extended open/create: trunc failed"); return; } CX_reg(context) = 3; diff --git a/msdos/int2f.c b/msdos/int2f.c index 9cfd796224f..d8dbae1b337 100644 --- a/msdos/int2f.c +++ b/msdos/int2f.c @@ -102,7 +102,7 @@ static void do_int2f_16( CONTEXT *context ) break; case 0x84: /* Get device API entry point */ - addr = (DWORD)MODULE_GetEntryPoint( GetModuleHandle("WPROCS"), + addr = (DWORD)MODULE_GetEntryPoint( GetModuleHandle16("WPROCS"), VXD_BASE + BX_reg(context) ); if (!addr) /* not supported */ { diff --git a/multimedia/audio.c b/multimedia/audio.c index 5a9b45f682a..932d1f9c629 100644 --- a/multimedia/audio.c +++ b/multimedia/audio.c @@ -4,12 +4,6 @@ * Copyright 1994 Martin Ayotte */ -#ifndef WINELIB -#define BUILTIN_MMSYSTEM -#endif - -#ifdef BUILTIN_MMSYSTEM - #define EMULATE_SB16 #include @@ -32,6 +26,8 @@ #include "stddebug.h" #include "debug.h" +int MMSYSTEM_DevIDToIndex(UINT16); + #if defined(linux) || defined(__FreeBSD__) #define SOUND_DEV "/dev/dsp" @@ -69,7 +65,7 @@ typedef struct { typedef struct { int nUseCount; /* Incremented for each shared open */ - BOOL fShareable; /* TRUE if first open was shareable */ + BOOL16 fShareable; /* TRUE if first open was shareable */ WORD wNotifyDeviceID; /* MCI device ID with a pending notification */ HANDLE16 hCallback; /* Callback handle for pending notification */ HMMIO16 hFile; /* mmio file handle open as Element */ @@ -86,13 +82,15 @@ static LINUX_MCIWAVE MCIWavDev[MAX_MCIWAVDRV]; /************************************************************************** * WAVE_NotifyClient [internal] */ -static DWORD WAVE_NotifyClient(UINT wDevID, WORD wMsg, +static DWORD WAVE_NotifyClient(UINT16 wDevID, WORD wMsg, DWORD dwParam1, DWORD dwParam2) { - if (WInDev[wDevID].wFlags != DCB_NULL && !DriverCallback( - WInDev[wDevID].waveDesc.dwCallBack, WInDev[wDevID].wFlags, - WInDev[wDevID].waveDesc.hWave, wMsg, - WInDev[wDevID].waveDesc.dwInstance, dwParam1, dwParam2)) { + int index = MMSYSTEM_DevIDToIndex(wDevID); + + if (WInDev[index].wFlags != DCB_NULL && !DriverCallback( + WInDev[index].waveDesc.dwCallBack, WInDev[index].wFlags, + WInDev[index].waveDesc.hWave, wMsg, + WInDev[index].waveDesc.dwInstance, dwParam1, dwParam2)) { dprintf_mciwave(stddeb,"WAVE_NotifyClient // can't notify client !\n"); return MMSYSERR_NOERROR; } @@ -102,8 +100,9 @@ static DWORD WAVE_NotifyClient(UINT wDevID, WORD wMsg, /************************************************************************** * WAVE_mciOpen */ -static DWORD WAVE_mciOpen(UINT wDevID, DWORD dwFlags, LPMCI_WAVE_OPEN_PARMS lpParms) +static DWORD WAVE_mciOpen(UINT16 wDevID, DWORD dwFlags, LPMCI_WAVE_OPEN_PARMS lpParms) { + int index = MMSYSTEM_DevIDToIndex(wDevID); HLOCAL16 hFormat; LPPCMWAVEFORMAT lpWaveFormat; HLOCAL16 hDesc; @@ -115,19 +114,22 @@ static DWORD WAVE_mciOpen(UINT wDevID, DWORD dwFlags, LPMCI_WAVE_OPEN_PARMS lpPa dprintf_mciwave(stddeb,"WAVE_mciOpen(%04X, %08lX, %p)\n", wDevID, dwFlags, lpParms); if (lpParms == NULL) return MCIERR_INTERNAL; - dprintf_mciwave(stddeb,"WAVE_mciOpen // wDevID=%04X\n", wDevID); - if (MCIWavDev[wDevID].nUseCount > 0) { + + wDevID = lpParms->wDeviceID; + index = MMSYSTEM_DevIDToIndex(wDevID); + + if (MCIWavDev[index].nUseCount > 0) { /* The driver already open on this channel */ /* If the driver was opened shareable before and this open specifies */ /* shareable then increment the use count */ - if (MCIWavDev[wDevID].fShareable && (dwFlags & MCI_OPEN_SHAREABLE)) - ++MCIWavDev[wDevID].nUseCount; + if (MCIWavDev[index].fShareable && (dwFlags & MCI_OPEN_SHAREABLE)) + ++MCIWavDev[index].nUseCount; else return MCIERR_MUST_USE_SHAREABLE; } else { - MCIWavDev[wDevID].nUseCount = 1; - MCIWavDev[wDevID].fShareable = dwFlags & MCI_OPEN_SHAREABLE; + MCIWavDev[index].nUseCount = 1; + MCIWavDev[index].fShareable = dwFlags & MCI_OPEN_SHAREABLE; } lpParms->wDeviceID = wDevID; dprintf_mciwave(stddeb,"WAVE_mciOpen // wDevID=%04X\n", wDevID); @@ -139,20 +141,20 @@ static DWORD WAVE_mciOpen(UINT wDevID, DWORD dwFlags, LPMCI_WAVE_OPEN_PARMS lpPa if (strlen(lpstrElementName) > 0) { strcpy(str, lpstrElementName); CharUpper32A(str); - MCIWavDev[wDevID].hFile = mmioOpen(str, NULL, + MCIWavDev[index].hFile = mmioOpen(str, NULL, MMIO_ALLOCBUF | MMIO_READWRITE | MMIO_EXCLUSIVE); - if (MCIWavDev[wDevID].hFile == 0) { + if (MCIWavDev[index].hFile == 0) { dprintf_mciwave(stddeb,"WAVE_mciOpen // can't find file='%s' !\n", str); return MCIERR_FILE_NOT_FOUND; } } else - MCIWavDev[wDevID].hFile = 0; + MCIWavDev[index].hFile = 0; } - dprintf_mciwave(stddeb,"WAVE_mciOpen // hFile=%u\n", MCIWavDev[wDevID].hFile); - memcpy(&MCIWavDev[wDevID].openParms, lpParms, sizeof(MCI_WAVE_OPEN_PARMS)); - MCIWavDev[wDevID].wNotifyDeviceID = lpParms->wDeviceID; - lpWaveFormat = &MCIWavDev[wDevID].WaveFormat; + dprintf_mciwave(stddeb,"WAVE_mciOpen // hFile=%u\n", MCIWavDev[index].hFile); + memcpy(&MCIWavDev[index].openParms, lpParms, sizeof(MCI_WAVE_OPEN_PARMS)); + MCIWavDev[index].wNotifyDeviceID = lpParms->wDeviceID; + lpWaveFormat = &MCIWavDev[index].WaveFormat; hDesc = USER_HEAP_ALLOC(sizeof(WAVEOPENDESC)); lpDesc = (LPWAVEOPENDESC) USER_HEAP_LIN_ADDR(hDesc); lpDesc->hWave = 0; @@ -164,10 +166,10 @@ static DWORD WAVE_mciOpen(UINT wDevID, DWORD dwFlags, LPMCI_WAVE_OPEN_PARMS lpPa lpWaveFormat->wf.nAvgBytesPerSec = 11025; lpWaveFormat->wf.nBlockAlign = 1; */ - if (MCIWavDev[wDevID].hFile != 0) { + if (MCIWavDev[index].hFile != 0) { MMCKINFO mmckInfo; MMCKINFO ckMainRIFF; - if (mmioDescend(MCIWavDev[wDevID].hFile, &ckMainRIFF, NULL, 0) != 0) { + if (mmioDescend(MCIWavDev[index].hFile, &ckMainRIFF, NULL, 0) != 0) { return MCIERR_INTERNAL; } dprintf_mciwave(stddeb, @@ -179,19 +181,19 @@ static DWORD WAVE_mciOpen(UINT wDevID, DWORD dwFlags, LPMCI_WAVE_OPEN_PARMS lpPa return MCIERR_INTERNAL; } mmckInfo.ckid = mmioFOURCC('f', 'm', 't', ' '); - if (mmioDescend(MCIWavDev[wDevID].hFile, &mmckInfo, &ckMainRIFF, MMIO_FINDCHUNK) != 0) { + if (mmioDescend(MCIWavDev[index].hFile, &mmckInfo, &ckMainRIFF, MMIO_FINDCHUNK) != 0) { return MCIERR_INTERNAL; } dprintf_mciwave(stddeb, "WAVE_mciOpen // Chunk Found ckid=%.4s fccType=%.4s cksize=%08lX \n", (LPSTR)&mmckInfo.ckid, (LPSTR)&mmckInfo.fccType, mmckInfo.cksize); - if (mmioRead(MCIWavDev[wDevID].hFile, (HPSTR) lpWaveFormat, + if (mmioRead(MCIWavDev[index].hFile, (HPSTR) lpWaveFormat, (long) sizeof(PCMWAVEFORMAT)) != (long) sizeof(PCMWAVEFORMAT)) { return MCIERR_INTERNAL; } mmckInfo.ckid = mmioFOURCC('d', 'a', 't', 'a'); - if (mmioDescend(MCIWavDev[wDevID].hFile, &mmckInfo, &ckMainRIFF, MMIO_FINDCHUNK) != 0) { + if (mmioDescend(MCIWavDev[index].hFile, &mmckInfo, &ckMainRIFF, MMIO_FINDCHUNK) != 0) { return MCIERR_INTERNAL; } dprintf_mciwave(stddeb, @@ -209,8 +211,8 @@ static DWORD WAVE_mciOpen(UINT wDevID, DWORD dwFlags, LPMCI_WAVE_OPEN_PARMS lpPa lpDesc->lpFormat = (LPWAVEFORMAT) USER_HEAP_LIN_ADDR(hFormat); memcpy(lpDesc->lpFormat, lpWaveFormat, sizeof(PCMWAVEFORMAT)); lpDesc = (LPWAVEOPENDESC) USER_HEAP_SEG_ADDR(hDesc); - dwRet = wodMessage(0, WODM_OPEN, 0, (DWORD)lpDesc, CALLBACK_NULL); - dwRet = widMessage(0, WIDM_OPEN, 0, (DWORD)lpDesc, CALLBACK_NULL); + dwRet = wodMessage(wDevID, WODM_OPEN, 0, (DWORD)lpDesc, CALLBACK_NULL); + dwRet = widMessage(wDevID, WIDM_OPEN, 0, (DWORD)lpDesc, CALLBACK_NULL); USER_HEAP_FREE(hFormat); USER_HEAP_FREE(hDesc); return 0; @@ -219,20 +221,21 @@ static DWORD WAVE_mciOpen(UINT wDevID, DWORD dwFlags, LPMCI_WAVE_OPEN_PARMS lpPa /************************************************************************** * WAVE_mciClose [internal] */ -static DWORD WAVE_mciClose(UINT wDevID, DWORD dwParam, LPMCI_GENERIC_PARMS lpParms) +static DWORD WAVE_mciClose(UINT16 wDevID, DWORD dwParam, LPMCI_GENERIC_PARMS lpParms) { + int index = MMSYSTEM_DevIDToIndex(wDevID); DWORD dwRet; dprintf_mciwave(stddeb, "WAVE_mciClose(%u, %08lX, %p);\n", wDevID, dwParam, lpParms); - MCIWavDev[wDevID].nUseCount--; - if (MCIWavDev[wDevID].nUseCount == 0) { - if (MCIWavDev[wDevID].hFile != 0) { - mmioClose(MCIWavDev[wDevID].hFile, 0); - MCIWavDev[wDevID].hFile = 0; + MCIWavDev[index].nUseCount--; + if (MCIWavDev[index].nUseCount == 0) { + if (MCIWavDev[index].hFile != 0) { + mmioClose(MCIWavDev[index].hFile, 0); + MCIWavDev[index].hFile = 0; } - dwRet = wodMessage(0, WODM_CLOSE, 0, 0L, 0L); + dwRet = wodMessage(wDevID, WODM_CLOSE, 0, 0L, 0L); if (dwRet != MMSYSERR_NOERROR) return MCIERR_INTERNAL; - dwRet = widMessage(0, WIDM_CLOSE, 0, 0L, 0L); + dwRet = widMessage(wDevID, WIDM_CLOSE, 0, 0L, 0L); if (dwRet != MMSYSERR_NOERROR) return MCIERR_INTERNAL; } return 0; @@ -242,8 +245,9 @@ static DWORD WAVE_mciClose(UINT wDevID, DWORD dwParam, LPMCI_GENERIC_PARMS lpPar /************************************************************************** * WAVE_mciPlay [internal] */ -static DWORD WAVE_mciPlay(UINT wDevID, DWORD dwFlags, LPMCI_PLAY_PARMS lpParms) +static DWORD WAVE_mciPlay(UINT16 wDevID, DWORD dwFlags, LPMCI_PLAY_PARMS lpParms) { + int index = MMSYSTEM_DevIDToIndex(wDevID); int start, end; LONG bufsize, count; HGLOBAL16 hData; @@ -253,9 +257,9 @@ static DWORD WAVE_mciPlay(UINT wDevID, DWORD dwFlags, LPMCI_PLAY_PARMS lpParms) DWORD dwRet; dprintf_mciwave(stddeb, "WAVE_mciPlay(%u, %08lX, %p);\n", wDevID, dwFlags, lpParms); - if (MCIWavDev[wDevID].hFile == 0) { - dprintf_mciwave(stddeb,"WAVE_mciPlay // can't find file='%s' !\n", - MCIWavDev[wDevID].openParms.lpstrElementName); + if (MCIWavDev[index].hFile == 0) { + dprintf_mciwave(stddeb,"WAVE_mciPlay // can't find file='%08lx' !\n", + MCIWavDev[index].openParms.lpstrElementName); return MCIERR_FILE_NOT_FOUND; } start = 1; end = 99999; @@ -286,7 +290,7 @@ static DWORD WAVE_mciPlay(UINT wDevID, DWORD dwFlags, LPMCI_PLAY_PARMS lpParms) } #endif bufsize = 64000; - lpWaveHdr = &MCIWavDev[wDevID].WaveHdr; + lpWaveHdr = &MCIWavDev[index].WaveHdr; hData = GlobalAlloc16(GMEM_MOVEABLE, bufsize); lpWaveHdr->lpData = (LPSTR) WIN16_GlobalLock16(hData); lpWaveHdr->dwUser = 0L; @@ -296,9 +300,9 @@ static DWORD WAVE_mciPlay(UINT wDevID, DWORD dwFlags, LPMCI_PLAY_PARMS lpParms) lp16WaveHdr = (LPWAVEHDR) USER_HEAP_SEG_ADDR(hWaveHdr); memcpy(PTR_SEG_TO_LIN(lp16WaveHdr), lpWaveHdr, sizeof(WAVEHDR)); lpWaveHdr = PTR_SEG_TO_LIN(lp16WaveHdr); - dwRet = wodMessage(0, WODM_PREPARE, 0, (DWORD)lp16WaveHdr, sizeof(WAVEHDR)); + dwRet = wodMessage(wDevID, WODM_PREPARE, 0, (DWORD)lp16WaveHdr, sizeof(WAVEHDR)); while(TRUE) { - count = mmioRead(MCIWavDev[wDevID].hFile, + count = mmioRead(MCIWavDev[index].hFile, PTR_SEG_TO_LIN(lpWaveHdr->lpData), bufsize); dprintf_mciwave(stddeb,"WAVE_mciPlay // mmioRead bufsize=%ld count=%ld\n", bufsize, count); if (count < 1) break; @@ -306,9 +310,9 @@ static DWORD WAVE_mciPlay(UINT wDevID, DWORD dwFlags, LPMCI_PLAY_PARMS lpParms) /* lpWaveHdr->dwBytesRecorded = count; */ dprintf_mciwave(stddeb,"WAVE_mciPlay // before WODM_WRITE lpWaveHdr=%p dwBufferLength=%lu dwBytesRecorded=%lu\n", lpWaveHdr, lpWaveHdr->dwBufferLength, lpWaveHdr->dwBytesRecorded); - dwRet = wodMessage(0, WODM_WRITE, 0, (DWORD)lp16WaveHdr, sizeof(WAVEHDR)); + dwRet = wodMessage(wDevID, WODM_WRITE, 0, (DWORD)lp16WaveHdr, sizeof(WAVEHDR)); } - dwRet = wodMessage(0, WODM_UNPREPARE, 0, (DWORD)lp16WaveHdr, sizeof(WAVEHDR)); + dwRet = wodMessage(wDevID, WODM_UNPREPARE, 0, (DWORD)lp16WaveHdr, sizeof(WAVEHDR)); if (lpWaveHdr->lpData != NULL) { GlobalUnlock16(hData); GlobalFree16(hData); @@ -318,7 +322,7 @@ static DWORD WAVE_mciPlay(UINT wDevID, DWORD dwFlags, LPMCI_PLAY_PARMS lpParms) if (dwFlags & MCI_NOTIFY) { dprintf_mciwave(stddeb,"WAVE_mciPlay // MCI_NOTIFY_SUCCESSFUL %08lX !\n", lpParms->dwCallback); mciDriverNotify((HWND16)LOWORD(lpParms->dwCallback), - MCIWavDev[wDevID].wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL); + MCIWavDev[index].wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL); } return 0; } @@ -327,8 +331,9 @@ static DWORD WAVE_mciPlay(UINT wDevID, DWORD dwFlags, LPMCI_PLAY_PARMS lpParms) /************************************************************************** * WAVE_mciRecord [internal] */ -static DWORD WAVE_mciRecord(UINT wDevID, DWORD dwFlags, LPMCI_RECORD_PARMS lpParms) +static DWORD WAVE_mciRecord(UINT16 wDevID, DWORD dwFlags, LPMCI_RECORD_PARMS lpParms) { + int index = MMSYSTEM_DevIDToIndex(wDevID); int start, end; LONG bufsize; HGLOBAL16 hData; @@ -339,9 +344,9 @@ static DWORD WAVE_mciRecord(UINT wDevID, DWORD dwFlags, LPMCI_RECORD_PARMS lpPar dprintf_mciwave(stddeb, "WAVE_mciRecord(%u, %08lX, %p);\n", wDevID, dwFlags, lpParms); - if (MCIWavDev[wDevID].hFile == 0) { - dprintf_mciwave(stddeb,"WAVE_mciRecord // can't find file='%s' !\n", - MCIWavDev[wDevID].openParms.lpstrElementName); + if (MCIWavDev[index].hFile == 0) { + dprintf_mciwave(stddeb,"WAVE_mciRecord // can't find file='%08lx' !\n", + MCIWavDev[index].openParms.lpstrElementName); return MCIERR_FILE_NOT_FOUND; } start = 1; end = 99999; @@ -355,7 +360,7 @@ static DWORD WAVE_mciRecord(UINT wDevID, DWORD dwFlags, LPMCI_RECORD_PARMS lpPar dprintf_mciwave(stddeb,"WAVE_mciRecord // MCI_TO=%d \n", end); } bufsize = 64000; - lpWaveHdr = &MCIWavDev[wDevID].WaveHdr; + lpWaveHdr = &MCIWavDev[index].WaveHdr; hData = GlobalAlloc16(GMEM_MOVEABLE, bufsize); lpWaveHdr->lpData = (LPSTR) WIN16_GlobalLock16(hData); lpWaveHdr->dwBufferLength = bufsize; @@ -366,18 +371,18 @@ static DWORD WAVE_mciRecord(UINT wDevID, DWORD dwFlags, LPMCI_RECORD_PARMS lpPar lp16WaveHdr = (LPWAVEHDR) USER_HEAP_SEG_ADDR(hWaveHdr); memcpy(PTR_SEG_TO_LIN(lp16WaveHdr), lpWaveHdr, sizeof(WAVEHDR)); lpWaveHdr = PTR_SEG_TO_LIN(lp16WaveHdr); - dwRet = widMessage(0, WIDM_PREPARE, 0, (DWORD)lp16WaveHdr, sizeof(WAVEHDR)); + dwRet = widMessage(wDevID, WIDM_PREPARE, 0, (DWORD)lp16WaveHdr, sizeof(WAVEHDR)); dprintf_mciwave(stddeb,"WAVE_mciRecord // after WIDM_PREPARE \n"); while(TRUE) { lpWaveHdr->dwBytesRecorded = 0; - dwRet = widMessage(0, WIDM_START, 0, 0L, 0L); + dwRet = widMessage(wDevID, WIDM_START, 0, 0L, 0L); dprintf_mciwave(stddeb, "WAVE_mciRecord // after WIDM_START lpWaveHdr=%p dwBytesRecorded=%lu\n", lpWaveHdr, lpWaveHdr->dwBytesRecorded); if (lpWaveHdr->dwBytesRecorded == 0) break; } dprintf_mciwave(stddeb,"WAVE_mciRecord // before WIDM_UNPREPARE \n"); - dwRet = widMessage(0, WIDM_UNPREPARE, 0, (DWORD)lp16WaveHdr, sizeof(WAVEHDR)); + dwRet = widMessage(wDevID, WIDM_UNPREPARE, 0, (DWORD)lp16WaveHdr, sizeof(WAVEHDR)); dprintf_mciwave(stddeb,"WAVE_mciRecord // after WIDM_UNPREPARE \n"); if (lpWaveHdr->lpData != NULL) { GlobalUnlock16(hData); @@ -388,7 +393,7 @@ static DWORD WAVE_mciRecord(UINT wDevID, DWORD dwFlags, LPMCI_RECORD_PARMS lpPar if (dwFlags & MCI_NOTIFY) { dprintf_mciwave(stddeb,"WAVE_mciRecord // MCI_NOTIFY_SUCCESSFUL %08lX !\n", lpParms->dwCallback); mciDriverNotify((HWND16)LOWORD(lpParms->dwCallback), - MCIWavDev[wDevID].wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL); + MCIWavDev[index].wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL); } return 0; } @@ -397,7 +402,7 @@ static DWORD WAVE_mciRecord(UINT wDevID, DWORD dwFlags, LPMCI_RECORD_PARMS lpPar /************************************************************************** * WAVE_mciStop [internal] */ -static DWORD WAVE_mciStop(UINT wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms) +static DWORD WAVE_mciStop(UINT16 wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms) { dprintf_mciwave(stddeb, "WAVE_mciStop(%u, %08lX, %p);\n", wDevID, dwFlags, lpParms); @@ -409,7 +414,7 @@ static DWORD WAVE_mciStop(UINT wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParm /************************************************************************** * WAVE_mciPause [internal] */ -static DWORD WAVE_mciPause(UINT wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms) +static DWORD WAVE_mciPause(UINT16 wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms) { dprintf_mciwave(stddeb, "WAVE_mciPause(%u, %08lX, %p);\n", wDevID, dwFlags, lpParms); @@ -421,7 +426,7 @@ static DWORD WAVE_mciPause(UINT wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpPar /************************************************************************** * WAVE_mciResume [internal] */ -static DWORD WAVE_mciResume(UINT wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms) +static DWORD WAVE_mciResume(UINT16 wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms) { dprintf_mciwave(stddeb, "WAVE_mciResume(%u, %08lX, %p);\n", wDevID, dwFlags, lpParms); @@ -433,7 +438,7 @@ static DWORD WAVE_mciResume(UINT wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpPa /************************************************************************** * WAVE_mciSet [internal] */ -static DWORD WAVE_mciSet(UINT wDevID, DWORD dwFlags, LPMCI_SET_PARMS lpParms) +static DWORD WAVE_mciSet(UINT16 wDevID, DWORD dwFlags, LPMCI_SET_PARMS lpParms) { dprintf_mciwave(stddeb, "WAVE_mciSet(%u, %08lX, %p);\n", wDevID, dwFlags, lpParms); @@ -502,8 +507,9 @@ static DWORD WAVE_mciSet(UINT wDevID, DWORD dwFlags, LPMCI_SET_PARMS lpParms) /************************************************************************** * WAVE_mciStatus [internal] */ -static DWORD WAVE_mciStatus(UINT wDevID, DWORD dwFlags, LPMCI_STATUS_PARMS lpParms) +static DWORD WAVE_mciStatus(UINT16 wDevID, DWORD dwFlags, LPMCI_STATUS_PARMS lpParms) { + int index = MMSYSTEM_DevIDToIndex(wDevID); dprintf_mciwave(stddeb, "WAVE_mciStatus(%u, %08lX, %p);\n", wDevID, dwFlags, lpParms); if (lpParms == NULL) return MCIERR_INTERNAL; @@ -591,7 +597,7 @@ static DWORD WAVE_mciStatus(UINT wDevID, DWORD dwFlags, LPMCI_STATUS_PARMS lpPar if (dwFlags & MCI_NOTIFY) { dprintf_mciwave(stddeb,"WAVE_mciStatus // MCI_NOTIFY_SUCCESSFUL %08lX !\n", lpParms->dwCallback); mciDriverNotify((HWND16)LOWORD(lpParms->dwCallback), - MCIWavDev[wDevID].wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL); + MCIWavDev[index].wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL); } return 0; } @@ -599,7 +605,7 @@ static DWORD WAVE_mciStatus(UINT wDevID, DWORD dwFlags, LPMCI_STATUS_PARMS lpPar /************************************************************************** * WAVE_mciGetDevCaps [internal] */ -static DWORD WAVE_mciGetDevCaps(UINT wDevID, DWORD dwFlags, +static DWORD WAVE_mciGetDevCaps(UINT16 wDevID, DWORD dwFlags, LPMCI_GETDEVCAPS_PARMS lpParms) { dprintf_mciwave(stddeb, @@ -650,8 +656,9 @@ static DWORD WAVE_mciGetDevCaps(UINT wDevID, DWORD dwFlags, /************************************************************************** * WAVE_mciInfo [internal] */ -static DWORD WAVE_mciInfo(UINT wDevID, DWORD dwFlags, LPMCI_INFO_PARMS lpParms) +static DWORD WAVE_mciInfo(UINT16 wDevID, DWORD dwFlags, LPMCI_INFO_PARMS lpParms) { + int index = MMSYSTEM_DevIDToIndex(wDevID); dprintf_mciwave(stddeb, "WAVE_mciInfo(%u, %08lX, %p);\n", wDevID, dwFlags, lpParms); if (lpParms == NULL) return MCIERR_INTERNAL; @@ -662,7 +669,7 @@ static DWORD WAVE_mciInfo(UINT wDevID, DWORD dwFlags, LPMCI_INFO_PARMS lpParms) break; case MCI_INFO_FILE: lpParms->lpstrReturn = - (LPSTR)MCIWavDev[wDevID].openParms.lpstrElementName; + (LPSTR)MCIWavDev[index].openParms.lpstrElementName; break; case MCI_WAVE_INPUT: lpParms->lpstrReturn = "Linux Sound System 0.5"; @@ -752,6 +759,7 @@ static DWORD wodGetDevCaps(WORD wDevID, LPWAVEOUTCAPS lpCaps, DWORD dwSize) */ static DWORD wodOpen(WORD wDevID, LPWAVEOPENDESC lpDesc, DWORD dwFlags) { + int index = MMSYSTEM_DevIDToIndex(wDevID); int audio; int abuf_size; int smplrate; @@ -769,7 +777,7 @@ static DWORD wodOpen(WORD wDevID, LPWAVEOPENDESC lpDesc, DWORD dwFlags) dprintf_mciwave(stddeb,"Linux 'wodOpen' // MAX_WAVOUTDRV reached !\n"); return MMSYSERR_ALLOCATED; } - WOutDev[wDevID].unixdev = 0; + WOutDev[index].unixdev = 0; audio = open (SOUND_DEV, O_WRONLY, 0); if (audio == -1) { dprintf_mciwave(stddeb,"Linux 'wodOpen' // can't open !\n"); @@ -783,8 +791,8 @@ static DWORD wodOpen(WORD wDevID, LPWAVEOPENDESC lpDesc, DWORD dwFlags) dprintf_mciwave(stddeb,"Linux 'wodOpen' // SNDCTL_DSP_GETBLKSIZE Invalid bufsize !\n"); return MMSYSERR_NOTENABLED; } - WOutDev[wDevID].wFlags = HIWORD(dwFlags & CALLBACK_TYPEMASK); - switch(WOutDev[wDevID].wFlags) { + WOutDev[index].wFlags = HIWORD(dwFlags & CALLBACK_TYPEMASK); + switch(WOutDev[index].wFlags) { case DCB_NULL: dprintf_mciwave(stddeb, "Linux 'wodOpen' // CALLBACK_NULL !\n"); break; @@ -798,11 +806,11 @@ static DWORD wodOpen(WORD wDevID, LPWAVEOPENDESC lpDesc, DWORD dwFlags) dprintf_mciwave(stddeb, "Linux 'wodOpen' // CALLBACK_FUNCTION !\n"); break; } - WOutDev[wDevID].lpQueueHdr = NULL; - WOutDev[wDevID].unixdev = audio; - WOutDev[wDevID].dwTotalPlayed = 0; - WOutDev[wDevID].bufsize = abuf_size; - memcpy(&WOutDev[wDevID].waveDesc, lpDesc, sizeof(WAVEOPENDESC)); + WOutDev[index].lpQueueHdr = NULL; + WOutDev[index].unixdev = audio; + WOutDev[index].dwTotalPlayed = 0; + WOutDev[index].bufsize = abuf_size; + memcpy(&WOutDev[index].waveDesc, lpDesc, sizeof(WAVEOPENDESC)); /* lpFormat = (LPWAVEFORMAT) PTR_SEG_TO_LIN(lpDesc->lpFormat); */ lpFormat = lpDesc->lpFormat; if (lpFormat->wFormatTag != WAVE_FORMAT_PCM) { @@ -814,31 +822,31 @@ static DWORD wodOpen(WORD wDevID, LPWAVEOPENDESC lpDesc, DWORD dwFlags) lpFormat->nSamplesPerSec); return WAVERR_BADFORMAT; } - memcpy(&WOutDev[wDevID].Format, lpFormat, sizeof(PCMWAVEFORMAT)); - if (WOutDev[wDevID].Format.wf.nChannels == 0) return WAVERR_BADFORMAT; - if (WOutDev[wDevID].Format.wf.nSamplesPerSec == 0) return WAVERR_BADFORMAT; + memcpy(&WOutDev[index].Format, lpFormat, sizeof(PCMWAVEFORMAT)); + if (WOutDev[index].Format.wf.nChannels == 0) return WAVERR_BADFORMAT; + if (WOutDev[index].Format.wf.nSamplesPerSec == 0) return WAVERR_BADFORMAT; dprintf_mciwave(stddeb,"Linux 'wodOpen' // wBitsPerSample=%u !\n", - WOutDev[wDevID].Format.wBitsPerSample); - if (WOutDev[wDevID].Format.wBitsPerSample == 0) { - WOutDev[wDevID].Format.wBitsPerSample = 8 * - (WOutDev[wDevID].Format.wf.nAvgBytesPerSec / - WOutDev[wDevID].Format.wf.nSamplesPerSec) / - WOutDev[wDevID].Format.wf.nChannels; + WOutDev[index].Format.wBitsPerSample); + if (WOutDev[index].Format.wBitsPerSample == 0) { + WOutDev[index].Format.wBitsPerSample = 8 * + (WOutDev[index].Format.wf.nAvgBytesPerSec / + WOutDev[index].Format.wf.nSamplesPerSec) / + WOutDev[index].Format.wf.nChannels; } - samplesize = WOutDev[wDevID].Format.wBitsPerSample; - smplrate = WOutDev[wDevID].Format.wf.nSamplesPerSec; - dsp_stereo = (WOutDev[wDevID].Format.wf.nChannels > 1) ? TRUE : FALSE; + samplesize = WOutDev[index].Format.wBitsPerSample; + smplrate = WOutDev[index].Format.wf.nSamplesPerSec; + dsp_stereo = (WOutDev[index].Format.wf.nChannels > 1) ? TRUE : FALSE; IOCTL(audio, SNDCTL_DSP_SPEED, smplrate); IOCTL(audio, SNDCTL_DSP_SAMPLESIZE, samplesize); IOCTL(audio, SNDCTL_DSP_STEREO, dsp_stereo); dprintf_mciwave(stddeb,"Linux 'wodOpen' // wBitsPerSample=%u !\n", - WOutDev[wDevID].Format.wBitsPerSample); + WOutDev[index].Format.wBitsPerSample); dprintf_mciwave(stddeb,"Linux 'wodOpen' // nAvgBytesPerSec=%lu !\n", - WOutDev[wDevID].Format.wf.nAvgBytesPerSec); + WOutDev[index].Format.wf.nAvgBytesPerSec); dprintf_mciwave(stddeb,"Linux 'wodOpen' // nSamplesPerSec=%lu !\n", - WOutDev[wDevID].Format.wf.nSamplesPerSec); + WOutDev[index].Format.wf.nSamplesPerSec); dprintf_mciwave(stddeb,"Linux 'wodOpen' // nChannels=%u !\n", - WOutDev[wDevID].Format.wf.nChannels); + WOutDev[index].Format.wf.nChannels); if (WAVE_NotifyClient(wDevID, WOM_OPEN, 0L, 0L) != MMSYSERR_NOERROR) { dprintf_mciwave(stddeb,"Linux 'wodOpen' // can't notify client !\n"); return MMSYSERR_INVALPARAM; @@ -851,15 +859,16 @@ static DWORD wodOpen(WORD wDevID, LPWAVEOPENDESC lpDesc, DWORD dwFlags) */ static DWORD wodClose(WORD wDevID) { + int index = MMSYSTEM_DevIDToIndex(wDevID); dprintf_mciwave(stddeb,"wodClose(%u);\n", wDevID); - if (WOutDev[wDevID].unixdev == 0) { + if (WOutDev[index].unixdev == 0) { dprintf_mciwave(stddeb,"Linux 'wodClose' // can't close !\n"); return MMSYSERR_NOTENABLED; } - close(WOutDev[wDevID].unixdev); - WOutDev[wDevID].unixdev = 0; - WOutDev[wDevID].bufsize = 0; - WOutDev[wDevID].lpQueueHdr = NULL; + close(WOutDev[index].unixdev); + WOutDev[index].unixdev = 0; + WOutDev[index].bufsize = 0; + WOutDev[index].lpQueueHdr = NULL; if (WAVE_NotifyClient(wDevID, WOM_CLOSE, 0L, 0L) != MMSYSERR_NOERROR) { dprintf_mciwave(stddeb,"Linux 'wodClose' // can't notify client !\n"); return MMSYSERR_INVALPARAM; @@ -872,10 +881,11 @@ static DWORD wodClose(WORD wDevID) */ static DWORD wodWrite(WORD wDevID, LPWAVEHDR lpWaveHdr, DWORD dwSize) { + int index = MMSYSTEM_DevIDToIndex(wDevID); int count; LPSTR lpData; dprintf_mciwave(stddeb,"wodWrite(%u, %p, %08lX);\n", wDevID, lpWaveHdr, dwSize); - if (WOutDev[wDevID].unixdev == 0) { + if (WOutDev[index].unixdev == 0) { dprintf_mciwave(stddeb,"Linux 'wodWrite' // can't play !\n"); return MMSYSERR_NOTENABLED; } @@ -887,16 +897,16 @@ static DWORD wodWrite(WORD wDevID, LPWAVEHDR lpWaveHdr, DWORD dwSize) dprintf_mciwave(stddeb, "wodWrite() // dwBufferLength %lu !\n", lpWaveHdr->dwBufferLength); dprintf_mciwave(stddeb, - "wodWrite() // WOutDev[%u].unixdev %u !\n", wDevID, WOutDev[wDevID].unixdev); + "wodWrite() // WOutDev[%u].unixdev %u !\n", wDevID, WOutDev[index].unixdev); lpData = PTR_SEG_TO_LIN(lpWaveHdr->lpData); - count = write (WOutDev[wDevID].unixdev, lpData, lpWaveHdr->dwBufferLength); + count = write (WOutDev[index].unixdev, lpData, lpWaveHdr->dwBufferLength); dprintf_mciwave(stddeb, "wodWrite() // write returned count %u !\n", count); if (count != lpWaveHdr->dwBufferLength) { dprintf_mciwave(stddeb,"Linux 'wodWrite' // error writting !\n"); return MMSYSERR_NOTENABLED; } - WOutDev[wDevID].dwTotalPlayed += count; + WOutDev[index].dwTotalPlayed += count; lpWaveHdr->dwFlags &= ~WHDR_INQUEUE; lpWaveHdr->dwFlags |= WHDR_DONE; if (WAVE_NotifyClient(wDevID, WOM_DONE, 0L, 0L) != MMSYSERR_NOERROR) { @@ -911,21 +921,22 @@ static DWORD wodWrite(WORD wDevID, LPWAVEHDR lpWaveHdr, DWORD dwSize) */ static DWORD wodPrepare(WORD wDevID, LPWAVEHDR lpWaveHdr, DWORD dwSize) { + int index = MMSYSTEM_DevIDToIndex(wDevID); dprintf_mciwave(stddeb, "wodPrepare(%u, %p, %08lX);\n", wDevID, lpWaveHdr, dwSize); - if (WOutDev[wDevID].unixdev == 0) { + if (WOutDev[index].unixdev == 0) { dprintf_mciwave(stddeb,"Linux 'wodPrepare' // can't prepare !\n"); return MMSYSERR_NOTENABLED; } /* the COOL waveeditor feels much better without this check... * someone please have a look at available documentation - if (WOutDev[wDevID].lpQueueHdr != NULL) { + if (WOutDev[index].lpQueueHdr != NULL) { dprintf_mciwave(stddeb,"Linux 'wodPrepare' // already prepare !\n"); return MMSYSERR_NOTENABLED; } */ - WOutDev[wDevID].dwTotalPlayed = 0; - WOutDev[wDevID].lpQueueHdr = lpWaveHdr; + WOutDev[index].dwTotalPlayed = 0; + WOutDev[index].lpQueueHdr = lpWaveHdr; if (lpWaveHdr->dwFlags & WHDR_INQUEUE) return WAVERR_STILLPLAYING; lpWaveHdr->dwFlags |= WHDR_PREPARED; lpWaveHdr->dwFlags &= ~WHDR_DONE; @@ -937,9 +948,10 @@ static DWORD wodPrepare(WORD wDevID, LPWAVEHDR lpWaveHdr, DWORD dwSize) */ static DWORD wodUnprepare(WORD wDevID, LPWAVEHDR lpWaveHdr, DWORD dwSize) { + int index = MMSYSTEM_DevIDToIndex(wDevID); dprintf_mciwave(stddeb, "wodUnprepare(%u, %p, %08lX);\n", wDevID, lpWaveHdr, dwSize); - if (WOutDev[wDevID].unixdev == 0) { + if (WOutDev[index].unixdev == 0) { dprintf_mciwave(stddeb,"Linux 'wodUnprepare' // can't unprepare !\n"); return MMSYSERR_NOTENABLED; } @@ -951,8 +963,9 @@ static DWORD wodUnprepare(WORD wDevID, LPWAVEHDR lpWaveHdr, DWORD dwSize) */ static DWORD wodRestart(WORD wDevID) { + int index = MMSYSTEM_DevIDToIndex(wDevID); dprintf_mciwave(stddeb,"wodRestart(%u);\n", wDevID); - if (WOutDev[wDevID].unixdev == 0) { + if (WOutDev[index].unixdev == 0) { dprintf_mciwave(stddeb,"Linux 'wodRestart' // can't restart !\n"); return MMSYSERR_NOTENABLED; } @@ -964,8 +977,9 @@ static DWORD wodRestart(WORD wDevID) */ static DWORD wodReset(WORD wDevID) { - dprintf_mciwave(stddeb,"wodReset(%u);\n", wDevID); - if (WOutDev[wDevID].unixdev == 0) { + int index = MMSYSTEM_DevIDToIndex(wDevID); + dprintf_mciwave(stddeb,"wodReset(%u);\n", wDevID); + if (WOutDev[index].unixdev == 0) { dprintf_mciwave(stddeb,"Linux 'wodReset' // can't reset !\n"); return MMSYSERR_NOTENABLED; } @@ -978,30 +992,31 @@ static DWORD wodReset(WORD wDevID) */ static DWORD wodGetPosition(WORD wDevID, LPMMTIME lpTime, DWORD uSize) { + int index = MMSYSTEM_DevIDToIndex(wDevID); int time; dprintf_mciwave(stddeb,"wodGetPosition(%u, %p, %lu);\n", wDevID, lpTime, uSize); - if (WOutDev[wDevID].unixdev == 0) { + if (WOutDev[index].unixdev == 0) { dprintf_mciwave(stddeb,"Linux 'wodGetPosition' // can't get pos !\n"); return MMSYSERR_NOTENABLED; } if (lpTime == NULL) return MMSYSERR_INVALPARAM; switch(lpTime->wType) { case TIME_BYTES: - lpTime->u.cb = WOutDev[wDevID].dwTotalPlayed; + lpTime->u.cb = WOutDev[index].dwTotalPlayed; dprintf_mciwave(stddeb,"wodGetPosition // TIME_BYTES=%lu\n", lpTime->u.cb); break; case TIME_SAMPLES: dprintf_mciwave(stddeb,"wodGetPosition // dwTotalPlayed=%lu\n", - WOutDev[wDevID].dwTotalPlayed); + WOutDev[index].dwTotalPlayed); dprintf_mciwave(stddeb,"wodGetPosition // wBitsPerSample=%u\n", - WOutDev[wDevID].Format.wBitsPerSample); - lpTime->u.sample = WOutDev[wDevID].dwTotalPlayed * 8 / - WOutDev[wDevID].Format.wBitsPerSample; + WOutDev[index].Format.wBitsPerSample); + lpTime->u.sample = WOutDev[index].dwTotalPlayed * 8 / + WOutDev[index].Format.wBitsPerSample; dprintf_mciwave(stddeb,"wodGetPosition // TIME_SAMPLES=%lu\n", lpTime->u.sample); break; case TIME_SMPTE: - time = WOutDev[wDevID].dwTotalPlayed / - (WOutDev[wDevID].Format.wf.nAvgBytesPerSec / 1000); + time = WOutDev[index].dwTotalPlayed / + (WOutDev[index].Format.wf.nAvgBytesPerSec / 1000); lpTime->u.smpte.hour = time / 108000; time -= lpTime->u.smpte.hour * 108000; lpTime->u.smpte.min = time / 1800; @@ -1019,8 +1034,8 @@ static DWORD wodGetPosition(WORD wDevID, LPMMTIME lpTime, DWORD uSize) dprintf_mciwave(stddeb,"wodGetPosition() format not supported ! use TIME_MS !\n"); lpTime->wType = TIME_MS; case TIME_MS: - lpTime->u.ms = WOutDev[wDevID].dwTotalPlayed / - (WOutDev[wDevID].Format.wf.nAvgBytesPerSec / 1000); + lpTime->u.ms = WOutDev[index].dwTotalPlayed / + (WOutDev[index].Format.wf.nAvgBytesPerSec / 1000); dprintf_mciwave(stddeb,"wodGetPosition // TIME_MS=%lu\n", lpTime->u.ms); break; } @@ -1203,6 +1218,7 @@ static DWORD widGetDevCaps(WORD wDevID, LPWAVEINCAPS lpCaps, DWORD dwSize) */ static DWORD widOpen(WORD wDevID, LPWAVEOPENDESC lpDesc, DWORD dwFlags) { + int index = MMSYSTEM_DevIDToIndex(wDevID); int audio; int abuf_size; int smplrate; @@ -1218,7 +1234,7 @@ static DWORD widOpen(WORD wDevID, LPWAVEOPENDESC lpDesc, DWORD dwFlags) dprintf_mciwave(stddeb,"Linux 'widOpen' // MAX_WAVINDRV reached !\n"); return MMSYSERR_ALLOCATED; } - WInDev[wDevID].unixdev = 0; + WInDev[index].unixdev = 0; audio = open (SOUND_DEV, O_RDONLY, 0); if (audio == -1) { dprintf_mciwave(stddeb,"Linux 'widOpen' // can't open !\n"); @@ -1232,8 +1248,8 @@ static DWORD widOpen(WORD wDevID, LPWAVEOPENDESC lpDesc, DWORD dwFlags) dprintf_mciwave(stddeb,"Linux 'widOpen' // SNDCTL_DSP_GETBLKSIZE Invalid bufsize !\n"); return MMSYSERR_NOTENABLED; } - WInDev[wDevID].wFlags = HIWORD(dwFlags & CALLBACK_TYPEMASK); - switch(WInDev[wDevID].wFlags) { + WInDev[index].wFlags = HIWORD(dwFlags & CALLBACK_TYPEMASK); + switch(WInDev[index].wFlags) { case DCB_NULL: dprintf_mciwave(stddeb, "Linux 'widOpen' // CALLBACK_NULL !\n"); break; @@ -1247,41 +1263,41 @@ static DWORD widOpen(WORD wDevID, LPWAVEOPENDESC lpDesc, DWORD dwFlags) dprintf_mciwave(stddeb, "Linux 'widOpen' // CALLBACK_FUNCTION !\n"); break; } - WInDev[wDevID].lpQueueHdr = NULL; - WInDev[wDevID].unixdev = audio; - WInDev[wDevID].bufsize = abuf_size; - WInDev[wDevID].dwTotalRecorded = 0; - memcpy(&WInDev[wDevID].waveDesc, lpDesc, sizeof(WAVEOPENDESC)); + WInDev[index].lpQueueHdr = NULL; + WInDev[index].unixdev = audio; + WInDev[index].bufsize = abuf_size; + WInDev[index].dwTotalRecorded = 0; + memcpy(&WInDev[index].waveDesc, lpDesc, sizeof(WAVEOPENDESC)); lpFormat = lpDesc->lpFormat; if (lpFormat->wFormatTag != WAVE_FORMAT_PCM) { dprintf_mciwave(stddeb,"Linux 'widOpen' // Bad format %04X !\n", lpFormat->wFormatTag); return WAVERR_BADFORMAT; } - memcpy(&WInDev[wDevID].Format, lpFormat, sizeof(PCMWAVEFORMAT)); - WInDev[wDevID].Format.wBitsPerSample = 8; /* <-------------- */ - if (WInDev[wDevID].Format.wf.nChannels == 0) return WAVERR_BADFORMAT; - if (WInDev[wDevID].Format.wf.nSamplesPerSec == 0) return WAVERR_BADFORMAT; - if (WInDev[wDevID].Format.wBitsPerSample == 0) { - WInDev[wDevID].Format.wBitsPerSample = 8 * - (WInDev[wDevID].Format.wf.nAvgBytesPerSec / - WInDev[wDevID].Format.wf.nSamplesPerSec) / - WInDev[wDevID].Format.wf.nChannels; + memcpy(&WInDev[index].Format, lpFormat, sizeof(PCMWAVEFORMAT)); + WInDev[index].Format.wBitsPerSample = 8; /* <-------------- */ + if (WInDev[index].Format.wf.nChannels == 0) return WAVERR_BADFORMAT; + if (WInDev[index].Format.wf.nSamplesPerSec == 0) return WAVERR_BADFORMAT; + if (WInDev[index].Format.wBitsPerSample == 0) { + WInDev[index].Format.wBitsPerSample = 8 * + (WInDev[index].Format.wf.nAvgBytesPerSec / + WInDev[index].Format.wf.nSamplesPerSec) / + WInDev[index].Format.wf.nChannels; } - samplesize = WInDev[wDevID].Format.wBitsPerSample; - smplrate = WInDev[wDevID].Format.wf.nSamplesPerSec; - dsp_stereo = (WInDev[wDevID].Format.wf.nChannels > 1) ? TRUE : FALSE; + samplesize = WInDev[index].Format.wBitsPerSample; + smplrate = WInDev[index].Format.wf.nSamplesPerSec; + dsp_stereo = (WInDev[index].Format.wf.nChannels > 1) ? TRUE : FALSE; IOCTL(audio, SNDCTL_DSP_SPEED, smplrate); IOCTL(audio, SNDCTL_DSP_SAMPLESIZE, samplesize); IOCTL(audio, SNDCTL_DSP_STEREO, dsp_stereo); dprintf_mciwave(stddeb,"Linux 'widOpen' // wBitsPerSample=%u !\n", - WInDev[wDevID].Format.wBitsPerSample); + WInDev[index].Format.wBitsPerSample); dprintf_mciwave(stddeb,"Linux 'widOpen' // nSamplesPerSec=%lu !\n", - WInDev[wDevID].Format.wf.nSamplesPerSec); + WInDev[index].Format.wf.nSamplesPerSec); dprintf_mciwave(stddeb,"Linux 'widOpen' // nChannels=%u !\n", - WInDev[wDevID].Format.wf.nChannels); + WInDev[index].Format.wf.nChannels); dprintf_mciwave(stddeb,"Linux 'widOpen' // nAvgBytesPerSec=%lu\n", - WInDev[wDevID].Format.wf.nAvgBytesPerSec); + WInDev[index].Format.wf.nAvgBytesPerSec); if (WAVE_NotifyClient(wDevID, WIM_OPEN, 0L, 0L) != MMSYSERR_NOERROR) { dprintf_mciwave(stddeb,"Linux 'widOpen' // can't notify client !\n"); return MMSYSERR_INVALPARAM; @@ -1294,14 +1310,15 @@ static DWORD widOpen(WORD wDevID, LPWAVEOPENDESC lpDesc, DWORD dwFlags) */ static DWORD widClose(WORD wDevID) { + int index = MMSYSTEM_DevIDToIndex(wDevID); dprintf_mciwave(stddeb,"widClose(%u);\n", wDevID); - if (WInDev[wDevID].unixdev == 0) { + if (WInDev[index].unixdev == 0) { dprintf_mciwave(stddeb,"Linux 'widClose' // can't close !\n"); return MMSYSERR_NOTENABLED; } - close(WInDev[wDevID].unixdev); - WInDev[wDevID].unixdev = 0; - WInDev[wDevID].bufsize = 0; + close(WInDev[index].unixdev); + WInDev[index].unixdev = 0; + WInDev[index].bufsize = 0; if (WAVE_NotifyClient(wDevID, WIM_CLOSE, 0L, 0L) != MMSYSERR_NOERROR) { dprintf_mciwave(stddeb,"Linux 'widClose' // can't notify client !\n"); return MMSYSERR_INVALPARAM; @@ -1314,11 +1331,12 @@ static DWORD widClose(WORD wDevID) */ static DWORD widAddBuffer(WORD wDevID, LPWAVEHDR lpWaveHdr, DWORD dwSize) { + int index = MMSYSTEM_DevIDToIndex(wDevID); int count = 1; LPWAVEHDR lpWIHdr; dprintf_mciwave(stddeb, "widAddBuffer(%u, %p, %08lX);\n", wDevID, lpWaveHdr, dwSize); - if (WInDev[wDevID].unixdev == 0) { + if (WInDev[index].unixdev == 0) { dprintf_mciwave(stddeb,"Linux 'widAddBuffer' // can't do it !\n"); return MMSYSERR_NOTENABLED; } @@ -1334,14 +1352,14 @@ static DWORD widAddBuffer(WORD wDevID, LPWAVEHDR lpWaveHdr, DWORD dwSize) lpWaveHdr->dwFlags |= WHDR_INQUEUE; lpWaveHdr->dwFlags &= ~WHDR_DONE; lpWaveHdr->dwBytesRecorded = 0; - if (WInDev[wDevID].lpQueueHdr == NULL) { + if (WInDev[index].lpQueueHdr == NULL) { /* begin the queue with a first header ... */ - WInDev[wDevID].lpQueueHdr = lpWaveHdr; - WInDev[wDevID].dwTotalRecorded = 0; + WInDev[index].lpQueueHdr = lpWaveHdr; + WInDev[index].dwTotalRecorded = 0; } else { /* added to the queue, except if it's the one just prepared ... */ - lpWIHdr = WInDev[wDevID].lpQueueHdr; + lpWIHdr = WInDev[index].lpQueueHdr; while (lpWIHdr->lpNext != NULL) { lpWIHdr = lpWIHdr->lpNext; count++; @@ -1359,13 +1377,14 @@ static DWORD widAddBuffer(WORD wDevID, LPWAVEHDR lpWaveHdr, DWORD dwSize) */ static DWORD widPrepare(WORD wDevID, LPWAVEHDR lpWaveHdr, DWORD dwSize) { + int index = MMSYSTEM_DevIDToIndex(wDevID); dprintf_mciwave(stddeb, "widPrepare(%u, %p, %08lX);\n", wDevID, lpWaveHdr, dwSize); - if (WInDev[wDevID].unixdev == 0) { + if (WInDev[index].unixdev == 0) { dprintf_mciwave(stddeb,"Linux 'widPrepare' // can't prepare !\n"); return MMSYSERR_NOTENABLED; } - if (WInDev[wDevID].lpQueueHdr != NULL) { + if (WInDev[index].lpQueueHdr != NULL) { dprintf_mciwave(stddeb,"Linux 'widPrepare' // already prepare !\n"); return WAVERR_BADFORMAT; } @@ -1383,16 +1402,17 @@ static DWORD widPrepare(WORD wDevID, LPWAVEHDR lpWaveHdr, DWORD dwSize) */ static DWORD widUnprepare(WORD wDevID, LPWAVEHDR lpWaveHdr, DWORD dwSize) { + int index = MMSYSTEM_DevIDToIndex(wDevID); dprintf_mciwave(stddeb, "widUnprepare(%u, %p, %08lX);\n", wDevID, lpWaveHdr, dwSize); - if (WInDev[wDevID].unixdev == 0) { + if (WInDev[index].unixdev == 0) { dprintf_mciwave(stddeb,"Linux 'widUnprepare' // can't unprepare !\n"); return MMSYSERR_NOTENABLED; } lpWaveHdr->dwFlags &= ~WHDR_PREPARED; lpWaveHdr->dwFlags &= ~WHDR_INQUEUE; lpWaveHdr->dwFlags |= WHDR_DONE; - WInDev[wDevID].lpQueueHdr = NULL; + WInDev[index].lpQueueHdr = NULL; dprintf_mciwave(stddeb, "Linux 'widUnprepare' // all headers unprepared !\n"); return MMSYSERR_NOERROR; @@ -1403,30 +1423,31 @@ static DWORD widUnprepare(WORD wDevID, LPWAVEHDR lpWaveHdr, DWORD dwSize) */ static DWORD widStart(WORD wDevID) { + int index = MMSYSTEM_DevIDToIndex(wDevID); int count = 1; LPWAVEHDR lpWIHdr; dprintf_mciwave(stddeb,"widStart(%u);\n", wDevID); - if (WInDev[wDevID].unixdev == 0) { + if (WInDev[index].unixdev == 0) { dprintf_mciwave(stddeb, "Linux 'widStart' // can't start recording !\n"); return MMSYSERR_NOTENABLED; } - if (WInDev[wDevID].lpQueueHdr == NULL || - WInDev[wDevID].lpQueueHdr->lpData == NULL) { + if (WInDev[index].lpQueueHdr == NULL || + WInDev[index].lpQueueHdr->lpData == NULL) { dprintf_mciwave(stddeb,"Linux 'widStart' // never been prepared !\n"); return WAVERR_UNPREPARED; } - lpWIHdr = WInDev[wDevID].lpQueueHdr; + lpWIHdr = WInDev[index].lpQueueHdr; while(lpWIHdr != NULL) { lpWIHdr->dwBufferLength &= 0xFFFF; dprintf_mciwave(stddeb, "widStart // recording buf#%u=%p size=%lu \n", count, lpWIHdr->lpData, lpWIHdr->dwBufferLength); fflush(stddeb); - read (WInDev[wDevID].unixdev, + read (WInDev[index].unixdev, PTR_SEG_TO_LIN(lpWIHdr->lpData), lpWIHdr->dwBufferLength); lpWIHdr->dwBytesRecorded = lpWIHdr->dwBufferLength; - WInDev[wDevID].dwTotalRecorded += lpWIHdr->dwBytesRecorded; + WInDev[index].dwTotalRecorded += lpWIHdr->dwBytesRecorded; lpWIHdr->dwFlags &= ~WHDR_INQUEUE; lpWIHdr->dwFlags |= WHDR_DONE; if (WAVE_NotifyClient(wDevID, WIM_DATA, (DWORD)lpWIHdr, 0L) != @@ -1447,8 +1468,9 @@ static DWORD widStart(WORD wDevID) */ static DWORD widStop(WORD wDevID) { + int index = MMSYSTEM_DevIDToIndex(wDevID); dprintf_mciwave(stddeb,"widStop(%u);\n", wDevID); - if (WInDev[wDevID].unixdev == 0) { + if (WInDev[index].unixdev == 0) { dprintf_mciwave(stddeb,"Linux 'widStop' // can't stop !\n"); return MMSYSERR_NOTENABLED; } @@ -1460,8 +1482,9 @@ static DWORD widStop(WORD wDevID) */ static DWORD widReset(WORD wDevID) { + int index = MMSYSTEM_DevIDToIndex(wDevID); dprintf_mciwave(stddeb,"widReset(%u);\n", wDevID); - if (WInDev[wDevID].unixdev == 0) { + if (WInDev[index].unixdev == 0) { dprintf_mciwave(stddeb,"Linux 'widReset' // can't reset !\n"); return MMSYSERR_NOTENABLED; } @@ -1473,11 +1496,12 @@ static DWORD widReset(WORD wDevID) */ static DWORD widGetPosition(WORD wDevID, LPMMTIME lpTime, DWORD uSize) { + int index = MMSYSTEM_DevIDToIndex(wDevID); int time; dprintf_mciwave(stddeb, "widGetPosition(%u, %p, %lu);\n", wDevID, lpTime, uSize); - if (WInDev[wDevID].unixdev == 0) { + if (WInDev[index].unixdev == 0) { dprintf_mciwave(stddeb,"Linux 'widGetPosition' // can't get pos !\n"); return MMSYSERR_NOTENABLED; } @@ -1485,30 +1509,30 @@ static DWORD widGetPosition(WORD wDevID, LPMMTIME lpTime, DWORD uSize) dprintf_mciwave(stddeb,"widGetPosition // wType=%04X !\n", lpTime->wType); dprintf_mciwave(stddeb,"widGetPosition // wBitsPerSample=%u\n", - WInDev[wDevID].Format.wBitsPerSample); + WInDev[index].Format.wBitsPerSample); dprintf_mciwave(stddeb,"widGetPosition // nSamplesPerSec=%lu\n", - WInDev[wDevID].Format.wf.nSamplesPerSec); + WInDev[index].Format.wf.nSamplesPerSec); dprintf_mciwave(stddeb,"widGetPosition // nChannels=%u\n", - WInDev[wDevID].Format.wf.nChannels); + WInDev[index].Format.wf.nChannels); dprintf_mciwave(stddeb,"widGetPosition // nAvgBytesPerSec=%lu\n", - WInDev[wDevID].Format.wf.nAvgBytesPerSec); + WInDev[index].Format.wf.nAvgBytesPerSec); fflush(stddeb); switch(lpTime->wType) { case TIME_BYTES: - lpTime->u.cb = WInDev[wDevID].dwTotalRecorded; + lpTime->u.cb = WInDev[index].dwTotalRecorded; dprintf_mciwave(stddeb, "widGetPosition // TIME_BYTES=%lu\n", lpTime->u.cb); break; case TIME_SAMPLES: - lpTime->u.sample = WInDev[wDevID].dwTotalRecorded * 8 / - WInDev[wDevID].Format.wBitsPerSample; + lpTime->u.sample = WInDev[index].dwTotalRecorded * 8 / + WInDev[index].Format.wBitsPerSample; dprintf_mciwave(stddeb, "widGetPosition // TIME_SAMPLES=%lu\n", lpTime->u.sample); break; case TIME_SMPTE: - time = WInDev[wDevID].dwTotalRecorded / - (WInDev[wDevID].Format.wf.nAvgBytesPerSec / 1000); + time = WInDev[index].dwTotalRecorded / + (WInDev[index].Format.wf.nAvgBytesPerSec / 1000); lpTime->u.smpte.hour = time / 108000; time -= lpTime->u.smpte.hour * 108000; lpTime->u.smpte.min = time / 1800; @@ -1525,8 +1549,8 @@ static DWORD widGetPosition(WORD wDevID, LPMMTIME lpTime, DWORD uSize) dprintf_mciwave(stddeb,"widGetPosition() format not supported ! use TIME_MS !\n"); lpTime->wType = TIME_MS; case TIME_MS: - lpTime->u.ms = WInDev[wDevID].dwTotalRecorded / - (WInDev[wDevID].Format.wf.nAvgBytesPerSec / 1000); + lpTime->u.ms = WInDev[index].dwTotalRecorded / + (WInDev[index].Format.wf.nAvgBytesPerSec / 1000); dprintf_mciwave(stddeb, "widGetPosition // TIME_MS=%lu\n", lpTime->u.ms); break; @@ -1641,6 +1665,3 @@ LONG WAVE_DriverProc(DWORD dwDevID, HDRVR16 hDriv, WORD wMsg, return MMSYSERR_NOTENABLED; #endif } - - -#endif /* #ifdef BUILTIN_MMSYSTEM */ diff --git a/multimedia/joystick.c b/multimedia/joystick.c index ab281909ecb..8bc7deb1e27 100644 --- a/multimedia/joystick.c +++ b/multimedia/joystick.c @@ -67,7 +67,7 @@ WORD JoyReleaseCapture(WORD wID) /************************************************************************** * JoySetCapture [MMSYSTEM.106] */ -WORD JoySetCapture(HWND16 hWnd, WORD wID, WORD wPeriod, BOOL bChanged) +WORD JoySetCapture(HWND16 hWnd, WORD wID, WORD wPeriod, BOOL16 bChanged) { fprintf(stdnimp, "EMPTY STUB !!! JoySetCapture(%04X, %04X, %d, %d);\n", hWnd, wID, wPeriod, bChanged); diff --git a/multimedia/mcianim.c b/multimedia/mcianim.c index e6e84f33ff7..babcf25b507 100644 --- a/multimedia/mcianim.c +++ b/multimedia/mcianim.c @@ -4,12 +4,6 @@ * Copyright 1994 Martin Ayotte */ -#ifndef WINELIB -#define BUILTIN_MMSYSTEM -#endif - -#ifdef BUILTIN_MMSYSTEM - #include #include #include @@ -23,6 +17,8 @@ #include "stddebug.h" #include "debug.h" +int MMSYSTEM_DevIDToIndex(UINT16); + #define MAX_ANIMDRV 2 #define ANIMFRAMES_PERSEC 30 @@ -32,15 +28,15 @@ #if defined(linux) || defined(__FreeBSD__) typedef struct { int nUseCount; /* Incremented for each shared open */ - BOOL fShareable; /* TRUE if first open was shareable */ + BOOL16 fShareable; /* TRUE if first open was shareable */ WORD wNotifyDeviceID; /* MCI device ID with a pending notification */ HANDLE16 hCallback; /* Callback handle for pending notification */ MCI_OPEN_PARMS openParms; DWORD dwTimeFormat; int mode; - UINT nCurTrack; + UINT16 nCurTrack; DWORD dwCurFrame; - UINT nTracks; + UINT16 nTracks; DWORD dwTotalLen; LPDWORD lpdwTrackLen; LPDWORD lpdwTrackPos; @@ -55,26 +51,27 @@ static LINUX_ANIM AnimDev[MAX_ANIMDRV]; /************************************************************************** * ANIM_mciOpen [internal] */ -static DWORD ANIM_mciOpen(UINT wDevID, DWORD dwFlags, LPMCI_OPEN_PARMS lpParms) +static DWORD ANIM_mciOpen(UINT16 wDevID, DWORD dwFlags, LPMCI_OPEN_PARMS lpParms) { #if defined(linux) || defined(__FreeBSD__) + int index = MMSYSTEM_DevIDToIndex(wDevID); LPSTR lpstrElementName; char str[128]; dprintf_mcianim(stddeb,"ANIM_mciOpen(%04X, %08lX, %p);\n", wDevID, dwFlags, lpParms); if (lpParms == NULL) return MCIERR_INTERNAL; - if (AnimDev[wDevID].nUseCount > 0) { + if (AnimDev[index].nUseCount > 0) { /* The driver already open on this channel */ /* If the driver was opened shareable before and this open specifies */ /* shareable then increment the use count */ - if (AnimDev[wDevID].fShareable && (dwFlags & MCI_OPEN_SHAREABLE)) - ++AnimDev[wDevID].nUseCount; + if (AnimDev[index].fShareable && (dwFlags & MCI_OPEN_SHAREABLE)) + ++AnimDev[index].nUseCount; else return MCIERR_MUST_USE_SHAREABLE; } else { - AnimDev[wDevID].nUseCount = 1; - AnimDev[wDevID].fShareable = dwFlags & MCI_OPEN_SHAREABLE; + AnimDev[index].nUseCount = 1; + AnimDev[index].fShareable = dwFlags & MCI_OPEN_SHAREABLE; } dprintf_mcianim(stddeb,"ANIM_mciOpen // wDevID=%04X\n", wDevID); lpParms->wDeviceID = wDevID; @@ -88,21 +85,21 @@ static DWORD ANIM_mciOpen(UINT wDevID, DWORD dwFlags, LPMCI_OPEN_PARMS lpParms) CharUpper32A(str); } } - memcpy(&AnimDev[wDevID].openParms, lpParms, sizeof(MCI_OPEN_PARMS)); - AnimDev[wDevID].wNotifyDeviceID = lpParms->wDeviceID; - AnimDev[wDevID].mode = 0; - AnimDev[wDevID].dwTimeFormat = MCI_FORMAT_TMSF; - AnimDev[wDevID].nCurTrack = 0; - AnimDev[wDevID].nTracks = 0; - AnimDev[wDevID].dwTotalLen = 0; - AnimDev[wDevID].lpdwTrackLen = NULL; - AnimDev[wDevID].lpdwTrackPos = NULL; + memcpy(&AnimDev[index].openParms, lpParms, sizeof(MCI_OPEN_PARMS)); + AnimDev[index].wNotifyDeviceID = lpParms->wDeviceID; + AnimDev[index].mode = 0; + AnimDev[index].dwTimeFormat = MCI_FORMAT_TMSF; + AnimDev[index].nCurTrack = 0; + AnimDev[index].nTracks = 0; + AnimDev[index].dwTotalLen = 0; + AnimDev[index].lpdwTrackLen = NULL; + AnimDev[index].lpdwTrackPos = NULL; if (dwFlags & MCI_NOTIFY) { dprintf_mcianim(stddeb, "ANIM_mciOpen // MCI_NOTIFY_SUCCESSFUL %08lX !\n", lpParms->dwCallback); mciDriverNotify((HWND16)LOWORD(lpParms->dwCallback), - AnimDev[wDevID].wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL); + AnimDev[index].wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL); } return 0; #else @@ -113,13 +110,14 @@ static DWORD ANIM_mciOpen(UINT wDevID, DWORD dwFlags, LPMCI_OPEN_PARMS lpParms) /************************************************************************** * ANIM_mciClose [internal] */ -static DWORD ANIM_mciClose(UINT wDevID, DWORD dwParam, LPMCI_GENERIC_PARMS lpParms) +static DWORD ANIM_mciClose(UINT16 wDevID, DWORD dwParam, LPMCI_GENERIC_PARMS lpParms) { #if defined(linux) || defined(__FreeBSD__) + int index = MMSYSTEM_DevIDToIndex(wDevID); dprintf_mcianim(stddeb,"ANIM_mciClose(%u, %08lX, %p);\n", wDevID, dwParam, lpParms); - if (AnimDev[wDevID].lpdwTrackLen != NULL) free(AnimDev[wDevID].lpdwTrackLen); - if (AnimDev[wDevID].lpdwTrackPos != NULL) free(AnimDev[wDevID].lpdwTrackPos); + if (AnimDev[index].lpdwTrackLen != NULL) free(AnimDev[index].lpdwTrackLen); + if (AnimDev[index].lpdwTrackPos != NULL) free(AnimDev[index].lpdwTrackPos); #endif return 0; } @@ -127,7 +125,7 @@ static DWORD ANIM_mciClose(UINT wDevID, DWORD dwParam, LPMCI_GENERIC_PARMS lpPar /************************************************************************** * ANIM_mciGetDevCaps [internal] */ -static DWORD ANIM_mciGetDevCaps(UINT wDevID, DWORD dwFlags, +static DWORD ANIM_mciGetDevCaps(UINT16 wDevID, DWORD dwFlags, LPMCI_GETDEVCAPS_PARMS lpParms) { #if defined(linux) || defined(__FreeBSD__) @@ -183,14 +181,15 @@ static DWORD ANIM_mciGetDevCaps(UINT wDevID, DWORD dwFlags, /************************************************************************** * ANIM_CalcTime [internal] */ -static DWORD ANIM_CalcTime(UINT wDevID, DWORD dwFormatType, DWORD dwFrame) +static DWORD ANIM_CalcTime(UINT16 wDevID, DWORD dwFormatType, DWORD dwFrame) { DWORD dwTime = 0; #if defined(linux) || defined(__FreeBSD__) - UINT wTrack; - UINT wMinutes; - UINT wSeconds; - UINT wFrames; + int index = MMSYSTEM_DevIDToIndex(wDevID); + UINT16 wTrack; + UINT16 wMinutes; + UINT16 wSeconds; + UINT16 wFrames; dprintf_mcianim(stddeb,"ANIM_CalcTime(%u, %08lX, %lu);\n", wDevID, dwFormatType, dwFrame); @@ -213,11 +212,11 @@ static DWORD ANIM_CalcTime(UINT wDevID, DWORD dwFormatType, DWORD dwFrame) /* unknown format ! force TMSF ! ... */ dwFormatType = MCI_FORMAT_TMSF; case MCI_FORMAT_TMSF: - for (wTrack = 0; wTrack < AnimDev[wDevID].nTracks; wTrack++) { -/* dwTime += AnimDev[wDevID].lpdwTrackLen[wTrack - 1]; + for (wTrack = 0; wTrack < AnimDev[index].nTracks; wTrack++) { +/* dwTime += AnimDev[index].lpdwTrackLen[wTrack - 1]; printf("Adding trk#%u curpos=%u \n", dwTime); if (dwTime >= dwFrame) break; */ - if (AnimDev[wDevID].lpdwTrackPos[wTrack - 1] >= dwFrame) break; + if (AnimDev[index].lpdwTrackPos[wTrack - 1] >= dwFrame) break; } wMinutes = dwFrame / ANIMFRAMES_PERMIN; wSeconds = (dwFrame - ANIMFRAMES_PERMIN * wMinutes) / ANIMFRAMES_PERSEC; @@ -237,11 +236,12 @@ static DWORD ANIM_CalcTime(UINT wDevID, DWORD dwFormatType, DWORD dwFrame) /************************************************************************** * ANIM_CalcFrame [internal] */ -static DWORD ANIM_CalcFrame(UINT wDevID, DWORD dwFormatType, DWORD dwTime) +static DWORD ANIM_CalcFrame(UINT16 wDevID, DWORD dwFormatType, DWORD dwTime) { DWORD dwFrame = 0; #if defined(linux) || defined(__FreeBSD__) - UINT wTrack; + int index = MMSYSTEM_DevIDToIndex(wDevID); + UINT16 wTrack; dprintf_mcianim(stddeb,"ANIM_CalcFrame(%u, %08lX, %lu);\n", wDevID, dwFormatType, dwTime); @@ -271,8 +271,8 @@ static DWORD ANIM_CalcFrame(UINT wDevID, DWORD dwFormatType, DWORD dwTime) MCI_TMSF_SECOND(dwTime), MCI_TMSF_FRAME(dwTime)); dprintf_mcianim(stddeb, "ANIM_CalcFrame // TMSF trackpos[%u]=%lu\n", - wTrack, AnimDev[wDevID].lpdwTrackPos[wTrack - 1]); - dwFrame = AnimDev[wDevID].lpdwTrackPos[wTrack - 1]; + wTrack, AnimDev[index].lpdwTrackPos[wTrack - 1]); + dwFrame = AnimDev[index].lpdwTrackPos[wTrack - 1]; dwFrame += ANIMFRAMES_PERMIN * MCI_TMSF_MINUTE(dwTime); dwFrame += ANIMFRAMES_PERSEC * MCI_TMSF_SECOND(dwTime); dwFrame += MCI_TMSF_FRAME(dwTime); @@ -286,9 +286,10 @@ static DWORD ANIM_CalcFrame(UINT wDevID, DWORD dwFormatType, DWORD dwTime) /************************************************************************** * ANIM_mciInfo [internal] */ -static DWORD ANIM_mciInfo(UINT wDevID, DWORD dwFlags, LPMCI_INFO_PARMS lpParms) +static DWORD ANIM_mciInfo(UINT16 wDevID, DWORD dwFlags, LPMCI_INFO_PARMS lpParms) { #if defined(linux) || defined(__FreeBSD__) + int index = MMSYSTEM_DevIDToIndex(wDevID); dprintf_mcianim(stddeb,"ANIM_mciInfo(%u, %08lX, %p);\n", wDevID, dwFlags, lpParms); if (lpParms == NULL) return MCIERR_INTERNAL; @@ -299,7 +300,7 @@ static DWORD ANIM_mciInfo(UINT wDevID, DWORD dwFlags, LPMCI_INFO_PARMS lpParms) break; case MCI_INFO_FILE: lpParms->lpstrReturn = - (LPSTR)AnimDev[wDevID].openParms.lpstrElementName; + (LPSTR)AnimDev[index].openParms.lpstrElementName; break; case MCI_ANIM_INFO_TEXT: lpParms->lpstrReturn = "Animation Window"; @@ -320,9 +321,10 @@ static DWORD ANIM_mciInfo(UINT wDevID, DWORD dwFlags, LPMCI_INFO_PARMS lpParms) /************************************************************************** * ANIM_mciStatus [internal] */ -static DWORD ANIM_mciStatus(UINT wDevID, DWORD dwFlags, LPMCI_STATUS_PARMS lpParms) +static DWORD ANIM_mciStatus(UINT16 wDevID, DWORD dwFlags, LPMCI_STATUS_PARMS lpParms) { #if defined(linux) || defined(__FreeBSD__) + int index = MMSYSTEM_DevIDToIndex(wDevID); dprintf_mcianim(stddeb,"ANIM_mciStatus(%u, %08lX, %p);\n", wDevID, dwFlags, lpParms); if (lpParms == NULL) return MCIERR_INTERNAL; @@ -331,30 +333,30 @@ static DWORD ANIM_mciStatus(UINT wDevID, DWORD dwFlags, LPMCI_STATUS_PARMS lpPar "ANIM_mciStatus // MCI_NOTIFY_SUCCESSFUL %08lX !\n", lpParms->dwCallback); mciDriverNotify((HWND16)LOWORD(lpParms->dwCallback), - AnimDev[wDevID].wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL); + AnimDev[index].wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL); } if (dwFlags & MCI_STATUS_ITEM) { switch(lpParms->dwItem) { case MCI_STATUS_CURRENT_TRACK: - lpParms->dwReturn = AnimDev[wDevID].nCurTrack; + lpParms->dwReturn = AnimDev[index].nCurTrack; dprintf_mcianim(stddeb,"ANIM_mciStatus // CURRENT_TRACK=%lu!\n", lpParms->dwReturn); return 0; case MCI_STATUS_LENGTH: if (dwFlags & MCI_TRACK) { dprintf_mcianim(stddeb,"ANIM_mciStatus // MCI_TRACK #%lu LENGTH=??? !\n", lpParms->dwTrack); - if (lpParms->dwTrack > AnimDev[wDevID].nTracks) + if (lpParms->dwTrack > AnimDev[index].nTracks) return MCIERR_OUTOFRANGE; - lpParms->dwReturn = AnimDev[wDevID].lpdwTrackLen[lpParms->dwTrack]; + lpParms->dwReturn = AnimDev[index].lpdwTrackLen[lpParms->dwTrack]; } else - lpParms->dwReturn = AnimDev[wDevID].dwTotalLen; + lpParms->dwReturn = AnimDev[index].dwTotalLen; lpParms->dwReturn = ANIM_CalcTime(wDevID, - AnimDev[wDevID].dwTimeFormat, lpParms->dwReturn); + AnimDev[index].dwTimeFormat, lpParms->dwReturn); dprintf_mcianim(stddeb,"ANIM_mciStatus // LENGTH=%lu !\n", lpParms->dwReturn); return 0; case MCI_STATUS_MODE: - lpParms->dwReturn = AnimDev[wDevID].mode; + lpParms->dwReturn = AnimDev[index].mode; dprintf_mcianim(stddeb,"ANIM_mciStatus // MCI_STATUS_MODE=%08lX !\n", lpParms->dwReturn); return 0; @@ -369,19 +371,19 @@ static DWORD ANIM_mciStatus(UINT wDevID, DWORD dwFlags, LPMCI_STATUS_PARMS lpPar if (lpParms->dwReturn == (WORD)-1) return MCIERR_INTERNAL; return 0; case MCI_STATUS_POSITION: - lpParms->dwReturn = AnimDev[wDevID].dwCurFrame; + lpParms->dwReturn = AnimDev[index].dwCurFrame; if (dwFlags & MCI_STATUS_START) { lpParms->dwReturn = 0; dprintf_mcianim(stddeb,"CDAUDIO_mciStatus // get MCI_STATUS_START !\n"); } if (dwFlags & MCI_TRACK) { - if (lpParms->dwTrack > AnimDev[wDevID].nTracks) + if (lpParms->dwTrack > AnimDev[index].nTracks) return MCIERR_OUTOFRANGE; - lpParms->dwReturn = AnimDev[wDevID].lpdwTrackPos[lpParms->dwTrack - 1]; + lpParms->dwReturn = AnimDev[index].lpdwTrackPos[lpParms->dwTrack - 1]; dprintf_mcianim(stddeb,"ANIM_mciStatus // get MCI_TRACK #%lu !\n", lpParms->dwTrack); } lpParms->dwReturn = ANIM_CalcTime(wDevID, - AnimDev[wDevID].dwTimeFormat, lpParms->dwReturn); + AnimDev[index].dwTimeFormat, lpParms->dwReturn); dprintf_mcianim(stddeb,"ANIM_mciStatus // MCI_STATUS_POSITION=%08lX !\n", lpParms->dwReturn); return 0; @@ -409,35 +411,36 @@ static DWORD ANIM_mciStatus(UINT wDevID, DWORD dwFlags, LPMCI_STATUS_PARMS lpPar /************************************************************************** * ANIM_mciPlay [internal] */ -static DWORD ANIM_mciPlay(UINT wDevID, DWORD dwFlags, LPMCI_PLAY_PARMS lpParms) +static DWORD ANIM_mciPlay(UINT16 wDevID, DWORD dwFlags, LPMCI_PLAY_PARMS lpParms) { #if defined(linux) || defined(__FreeBSD__) + int index = MMSYSTEM_DevIDToIndex(wDevID); int start, end; dprintf_mcianim(stddeb,"ANIM_mciPlay(%u, %08lX, %p);\n", wDevID, dwFlags, lpParms); if (lpParms == NULL) return MCIERR_INTERNAL; - start = 0; end = AnimDev[wDevID].dwTotalLen; - AnimDev[wDevID].nCurTrack = 1; + start = 0; end = AnimDev[index].dwTotalLen; + AnimDev[index].nCurTrack = 1; if (dwFlags & MCI_FROM) { start = ANIM_CalcFrame(wDevID, - AnimDev[wDevID].dwTimeFormat, lpParms->dwFrom); + AnimDev[index].dwTimeFormat, lpParms->dwFrom); dprintf_mcianim(stddeb,"ANIM_mciPlay // MCI_FROM=%08lX -> %u \n", lpParms->dwFrom, start); } if (dwFlags & MCI_TO) { end = ANIM_CalcFrame(wDevID, - AnimDev[wDevID].dwTimeFormat, lpParms->dwTo); + AnimDev[index].dwTimeFormat, lpParms->dwTo); dprintf_mcianim(stddeb, "ANIM_mciPlay // MCI_TO=%08lX -> %u \n", lpParms->dwTo, end); } - AnimDev[wDevID].mode = MCI_MODE_PLAY; + AnimDev[index].mode = MCI_MODE_PLAY; if (dwFlags & MCI_NOTIFY) { dprintf_mcianim(stddeb, "ANIM_mciPlay // MCI_NOTIFY_SUCCESSFUL %08lX !\n", lpParms->dwCallback); mciDriverNotify((HWND16)LOWORD(lpParms->dwCallback), - AnimDev[wDevID].wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL); + AnimDev[index].wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL); } return 0; #else @@ -448,19 +451,20 @@ static DWORD ANIM_mciPlay(UINT wDevID, DWORD dwFlags, LPMCI_PLAY_PARMS lpParms) /************************************************************************** * ANIM_mciStop [internal] */ -static DWORD ANIM_mciStop(UINT wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms) +static DWORD ANIM_mciStop(UINT16 wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms) { #if defined(linux) || defined(__FreeBSD__) + int index = MMSYSTEM_DevIDToIndex(wDevID); dprintf_mcianim(stddeb,"ANIM_mciStop(%u, %08lX, %p);\n", wDevID, dwFlags, lpParms); if (lpParms == NULL) return MCIERR_INTERNAL; - AnimDev[wDevID].mode = MCI_MODE_STOP; + AnimDev[index].mode = MCI_MODE_STOP; if (dwFlags & MCI_NOTIFY) { dprintf_mcianim(stddeb, "ANIM_mciStop // MCI_NOTIFY_SUCCESSFUL %08lX !\n", lpParms->dwCallback); mciDriverNotify((HWND16)LOWORD(lpParms->dwCallback), - AnimDev[wDevID].wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL); + AnimDev[index].wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL); } return 0; #else @@ -471,19 +475,20 @@ static DWORD ANIM_mciStop(UINT wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParm /************************************************************************** * ANIM_mciPause [internal] */ -static DWORD ANIM_mciPause(UINT wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms) +static DWORD ANIM_mciPause(UINT16 wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms) { #if defined(linux) || defined(__FreeBSD__) + int index = MMSYSTEM_DevIDToIndex(wDevID); dprintf_mcianim(stddeb,"ANIM_mciPause(%u, %08lX, %p);\n", wDevID, dwFlags, lpParms); if (lpParms == NULL) return MCIERR_INTERNAL; - AnimDev[wDevID].mode = MCI_MODE_PAUSE; + AnimDev[index].mode = MCI_MODE_PAUSE; if (dwFlags & MCI_NOTIFY) { dprintf_mcianim(stddeb, "ANIM_mciPause // MCI_NOTIFY_SUCCESSFUL %08lX !\n", lpParms->dwCallback); mciDriverNotify((HWND16)LOWORD(lpParms->dwCallback), - AnimDev[wDevID].wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL); + AnimDev[index].wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL); } return 0; #else @@ -494,19 +499,20 @@ static DWORD ANIM_mciPause(UINT wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpPar /************************************************************************** * ANIM_mciResume [internal] */ -static DWORD ANIM_mciResume(UINT wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms) +static DWORD ANIM_mciResume(UINT16 wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms) { #if defined(linux) || defined(__FreeBSD__) + int index = MMSYSTEM_DevIDToIndex(wDevID); dprintf_mcianim(stddeb,"ANIM_mciResume(%u, %08lX, %p);\n", wDevID, dwFlags, lpParms); if (lpParms == NULL) return MCIERR_INTERNAL; - AnimDev[wDevID].mode = MCI_MODE_STOP; + AnimDev[index].mode = MCI_MODE_STOP; if (dwFlags & MCI_NOTIFY) { dprintf_mcianim(stddeb, "ANIM_mciResume // MCI_NOTIFY_SUCCESSFUL %08lX !\n", lpParms->dwCallback); mciDriverNotify((HWND16)LOWORD(lpParms->dwCallback), - AnimDev[wDevID].wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL); + AnimDev[index].wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL); } return 0; #else @@ -517,21 +523,22 @@ static DWORD ANIM_mciResume(UINT wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpPa /************************************************************************** * ANIM_mciSeek [internal] */ -static DWORD ANIM_mciSeek(UINT wDevID, DWORD dwFlags, LPMCI_SEEK_PARMS lpParms) +static DWORD ANIM_mciSeek(UINT16 wDevID, DWORD dwFlags, LPMCI_SEEK_PARMS lpParms) { #if defined(linux) || defined(__FreeBSD__) + int index = MMSYSTEM_DevIDToIndex(wDevID); DWORD dwRet; MCI_PLAY_PARMS PlayParms; dprintf_mcianim(stddeb,"ANIM_mciSeek(%u, %08lX, %p);\n", wDevID, dwFlags, lpParms); if (lpParms == NULL) return MCIERR_INTERNAL; - AnimDev[wDevID].mode = MCI_MODE_SEEK; + AnimDev[index].mode = MCI_MODE_SEEK; switch(dwFlags) { case MCI_SEEK_TO_START: PlayParms.dwFrom = 0; break; case MCI_SEEK_TO_END: - PlayParms.dwFrom = AnimDev[wDevID].dwTotalLen; + PlayParms.dwFrom = AnimDev[index].dwTotalLen; break; case MCI_TO: PlayParms.dwFrom = lpParms->dwTo; @@ -545,7 +552,7 @@ static DWORD ANIM_mciSeek(UINT wDevID, DWORD dwFlags, LPMCI_SEEK_PARMS lpParms) "ANIM_mciSeek // MCI_NOTIFY_SUCCESSFUL %08lX !\n", lpParms->dwCallback); mciDriverNotify((HWND16)LOWORD(lpParms->dwCallback), - AnimDev[wDevID].wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL); + AnimDev[index].wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL); } return dwRet; #else @@ -557,9 +564,10 @@ static DWORD ANIM_mciSeek(UINT wDevID, DWORD dwFlags, LPMCI_SEEK_PARMS lpParms) /************************************************************************** * ANIM_mciSet [internal] */ -static DWORD ANIM_mciSet(UINT wDevID, DWORD dwFlags, LPMCI_SET_PARMS lpParms) +static DWORD ANIM_mciSet(UINT16 wDevID, DWORD dwFlags, LPMCI_SET_PARMS lpParms) { #if defined(linux) || defined(__FreeBSD__) + int index = MMSYSTEM_DevIDToIndex(wDevID); dprintf_mcianim(stddeb,"ANIM_mciSet(%u, %08lX, %p);\n", wDevID, dwFlags, lpParms); if (lpParms == NULL) return MCIERR_INTERNAL; @@ -583,7 +591,7 @@ static DWORD ANIM_mciSet(UINT wDevID, DWORD dwFlags, LPMCI_SET_PARMS lpParms) fprintf(stderr,"ANIM_mciSet // bad time format !\n"); return MCIERR_BAD_TIME_FORMAT; } - AnimDev[wDevID].dwTimeFormat = lpParms->dwTimeFormat; + AnimDev[index].dwTimeFormat = lpParms->dwTimeFormat; } if (dwFlags & MCI_SET_VIDEO) return MCIERR_UNSUPPORTED_FUNCTION; if (dwFlags & MCI_SET_ON) return MCIERR_UNSUPPORTED_FUNCTION; @@ -593,7 +601,7 @@ static DWORD ANIM_mciSet(UINT wDevID, DWORD dwFlags, LPMCI_SET_PARMS lpParms) "ANIM_mciSet // MCI_NOTIFY_SUCCESSFUL %08lX !\n", lpParms->dwCallback); mciDriverNotify((HWND16)LOWORD(lpParms->dwCallback), - AnimDev[wDevID].wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL); + AnimDev[index].wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL); } return 0; #else @@ -675,5 +683,3 @@ LONG ANIM_DriverProc(DWORD dwDevID, HDRVR16 hDriv, WORD wMsg, /*-----------------------------------------------------------------------*/ - -#endif /* #ifdef BUILTIN_MMSYSTEM */ diff --git a/multimedia/mcicda.c b/multimedia/mcicda.c index febab84e1a3..5c9781db3b1 100644 --- a/multimedia/mcicda.c +++ b/multimedia/mcicda.c @@ -4,12 +4,6 @@ * Copyright 1994 Martin Ayotte */ -#ifndef WINELIB -#define BUILTIN_MMSYSTEM -#endif - -#ifdef BUILTIN_MMSYSTEM - #include #include #include @@ -31,6 +25,8 @@ #include #endif +int MMSYSTEM_DevIDToIndex(UINT16); + #define SOUND_DEV "/dev/dsp" #ifdef __FreeBSD__ #define CDAUDIO_DEV "/dev/rcd0c" @@ -54,7 +50,7 @@ #if defined(linux) || defined(__FreeBSD__) typedef struct { int nUseCount; /* Incremented for each shared open */ - BOOL fShareable; /* TRUE if first open was shareable */ + BOOL16 fShareable; /* TRUE if first open was shareable */ WORD wNotifyDeviceID; /* MCI device ID with a pending notification */ HANDLE16 hCallback; /* Callback handle for pending notification */ MCI_OPEN_PARMS openParms; @@ -66,9 +62,9 @@ typedef struct { struct cd_sub_channel_info sc; #endif int mode; - UINT nCurTrack; + UINT16 nCurTrack; DWORD dwCurFrame; - UINT nTracks; + UINT16 nTracks; DWORD dwTotalLen; LPDWORD lpdwTrackLen; LPDWORD lpdwTrackPos; @@ -85,16 +81,17 @@ static LINUX_CDAUDIO CDADev[MAX_CDAUDIODRV]; /************************************************************************** * CDAUDIO_GetNumberOfTracks [internal] */ -static UINT CDAUDIO_GetNumberOfTracks(UINT wDevID) +static UINT16 CDAUDIO_GetNumberOfTracks(UINT16 wDevID) { #if defined(linux) || defined(__FreeBSD__) + int index = MMSYSTEM_DevIDToIndex(wDevID); #ifdef linux struct cdrom_tochdr hdr; #elif __FreeBSD__ struct ioc_toc_header hdr; #endif - if (CDADev[wDevID].nTracks == 0) { - if (ioctl(CDADev[wDevID].unixdev, + if (CDADev[index].nTracks == 0) { + if (ioctl(CDADev[index].unixdev, #ifdef linux CDROMREADTOCHDR #elif __FreeBSD__ @@ -102,17 +99,17 @@ static UINT CDAUDIO_GetNumberOfTracks(UINT wDevID) #endif , &hdr)) { dprintf_cdaudio(stddeb, - "GetNumberOfTracks(%u) // Error occured !\n", + "GetNumberOfTracks(%04X) // Error occured !\n", wDevID); return (WORD)-1; } #ifdef linux - CDADev[wDevID].nTracks = hdr.cdth_trk1; + CDADev[index].nTracks = hdr.cdth_trk1; #elif __FreeBSD__ - CDADev[wDevID].nTracks = hdr.ending_track - hdr.starting_track + 1; + CDADev[index].nTracks = hdr.ending_track - hdr.starting_track + 1; #endif } - return CDADev[wDevID].nTracks; + return CDADev[index].nTracks; #else return (WORD)-1; #endif @@ -122,9 +119,10 @@ static UINT CDAUDIO_GetNumberOfTracks(UINT wDevID) /************************************************************************** * CDAUDIO_GetTracksInfo [internal] */ -static BOOL CDAUDIO_GetTracksInfo(UINT wDevID) +static BOOL32 CDAUDIO_GetTracksInfo(UINT16 wDevID) { #if defined(linux) || defined(__FreeBSD__) + int index = MMSYSTEM_DevIDToIndex(wDevID); int i, length; int start, last_start = 0; int total_length = 0; @@ -134,31 +132,31 @@ static BOOL CDAUDIO_GetTracksInfo(UINT wDevID) struct ioc_read_toc_entry entry; struct cd_toc_entry toc_buffer; #endif - if (CDADev[wDevID].nTracks == 0) { + if (CDADev[index].nTracks == 0) { if (CDAUDIO_GetNumberOfTracks(wDevID) == (WORD)-1) return FALSE; } dprintf_cdaudio(stddeb,"CDAUDIO_GetTracksInfo // nTracks=%u\n", - CDADev[wDevID].nTracks); - if (CDADev[wDevID].lpdwTrackLen != NULL) - free(CDADev[wDevID].lpdwTrackLen); - CDADev[wDevID].lpdwTrackLen = (LPDWORD)malloc( - (CDADev[wDevID].nTracks + 1) * sizeof(DWORD)); - if (CDADev[wDevID].lpdwTrackPos != NULL) - free(CDADev[wDevID].lpdwTrackPos); - CDADev[wDevID].lpdwTrackPos = (LPDWORD)malloc( - (CDADev[wDevID].nTracks + 1) * sizeof(DWORD)); - if (CDADev[wDevID].lpdwTrackLen == NULL || - CDADev[wDevID].lpdwTrackPos == NULL) { + CDADev[index].nTracks); + if (CDADev[index].lpdwTrackLen != NULL) + free(CDADev[index].lpdwTrackLen); + CDADev[index].lpdwTrackLen = (LPDWORD)malloc( + (CDADev[index].nTracks + 1) * sizeof(DWORD)); + if (CDADev[index].lpdwTrackPos != NULL) + free(CDADev[index].lpdwTrackPos); + CDADev[index].lpdwTrackPos = (LPDWORD)malloc( + (CDADev[index].nTracks + 1) * sizeof(DWORD)); + if (CDADev[index].lpdwTrackLen == NULL || + CDADev[index].lpdwTrackPos == NULL) { dprintf_cdaudio(stddeb, "CDAUDIO_GetTracksInfo // error allocating track table !\n"); return FALSE; } - memset(CDADev[wDevID].lpdwTrackLen, 0, - (CDADev[wDevID].nTracks + 1) * sizeof(DWORD)); - memset(CDADev[wDevID].lpdwTrackPos, 0, - (CDADev[wDevID].nTracks + 1) * sizeof(DWORD)); - for (i = 0; i <= CDADev[wDevID].nTracks; i++) { - if (i == CDADev[wDevID].nTracks) + memset(CDADev[index].lpdwTrackLen, 0, + (CDADev[index].nTracks + 1) * sizeof(DWORD)); + memset(CDADev[index].lpdwTrackPos, 0, + (CDADev[index].nTracks + 1) * sizeof(DWORD)); + for (i = 0; i <= CDADev[index].nTracks; i++) { + if (i == CDADev[index].nTracks) #ifdef linux entry.cdte_track = CDROM_LEADOUT; #elif __FreeBSD__ @@ -179,7 +177,7 @@ static BOOL CDAUDIO_GetTracksInfo(UINT wDevID) entry.data_len = sizeof(toc_buffer); entry.data = &toc_buffer; #endif - if (ioctl(CDADev[wDevID].unixdev, + if (ioctl(CDADev[index].unixdev, #ifdef linux CDROMREADTOCENTRY #elif __FreeBSD__ @@ -201,7 +199,7 @@ static BOOL CDAUDIO_GetTracksInfo(UINT wDevID) #endif if (i == 0) { last_start = start; - CDADev[wDevID].dwFirstOffset = start; + CDADev[index].dwFirstOffset = start; dprintf_cdaudio(stddeb, "CDAUDIO_GetTracksInfo // dwFirstOffset=%u\n", start); @@ -211,14 +209,14 @@ static BOOL CDAUDIO_GetTracksInfo(UINT wDevID) last_start = start; start = last_start - length; total_length += length; - CDADev[wDevID].lpdwTrackLen[i - 1] = length; - CDADev[wDevID].lpdwTrackPos[i - 1] = start; + CDADev[index].lpdwTrackLen[i - 1] = length; + CDADev[index].lpdwTrackPos[i - 1] = start; dprintf_cdaudio(stddeb, "CDAUDIO_GetTracksInfo // track #%u start=%u len=%u\n", i, start, length); } } - CDADev[wDevID].dwTotalLen = total_length; + CDADev[index].dwTotalLen = total_length; dprintf_cdaudio(stddeb,"CDAUDIO_GetTracksInfo // total_len=%u\n", total_length); fflush(stdout); @@ -232,45 +230,49 @@ static BOOL CDAUDIO_GetTracksInfo(UINT wDevID) /************************************************************************** * CDAUDIO_mciOpen [internal] */ -static DWORD CDAUDIO_mciOpen(UINT wDevID, DWORD dwFlags, LPMCI_OPEN_PARMS lpParms) +static DWORD CDAUDIO_mciOpen(UINT16 wDevID, DWORD dwFlags, LPMCI_OPEN_PARMS lpParms) { #if defined(linux) || defined(__FreeBSD__) + int index; dprintf_cdaudio(stddeb,"CDAUDIO_mciOpen(%04X, %08lX, %p);\n", wDevID, dwFlags, lpParms); if (lpParms == NULL) return MCIERR_INTERNAL; + wDevID = lpParms->wDeviceID; - if (CDADev[wDevID].nUseCount > 0) { + index = MMSYSTEM_DevIDToIndex(wDevID); + + if (CDADev[index].nUseCount > 0) { /* The driver already open on this channel */ /* If the driver was opened shareable before and this open specifies */ /* shareable then increment the use count */ - if (CDADev[wDevID].fShareable && (dwFlags & MCI_OPEN_SHAREABLE)) - ++CDADev[wDevID].nUseCount; + if (CDADev[index].fShareable && (dwFlags & MCI_OPEN_SHAREABLE)) + ++CDADev[index].nUseCount; else return MCIERR_MUST_USE_SHAREABLE; } else { - CDADev[wDevID].nUseCount = 1; - CDADev[wDevID].fShareable = dwFlags & MCI_OPEN_SHAREABLE; + CDADev[index].nUseCount = 1; + CDADev[index].fShareable = dwFlags & MCI_OPEN_SHAREABLE; } if (dwFlags & MCI_OPEN_ELEMENT) { dprintf_cdaudio(stddeb,"CDAUDIO_mciOpen // MCI_OPEN_ELEMENT !\n"); /* return MCIERR_NO_ELEMENT_ALLOWED; */ } - memcpy(&CDADev[wDevID].openParms, lpParms, sizeof(MCI_OPEN_PARMS)); - CDADev[wDevID].wNotifyDeviceID = lpParms->wDeviceID; - CDADev[wDevID].unixdev = open (CDAUDIO_DEV, O_RDONLY, 0); - if (CDADev[wDevID].unixdev == -1) { + memcpy(&CDADev[index].openParms, lpParms, sizeof(MCI_OPEN_PARMS)); + CDADev[index].wNotifyDeviceID = lpParms->wDeviceID; + CDADev[index].unixdev = open (CDAUDIO_DEV, O_RDONLY, 0); + if (CDADev[index].unixdev == -1) { dprintf_cdaudio(stddeb,"CDAUDIO_mciOpen // can't open '%s' !\n", CDAUDIO_DEV); return MCIERR_HARDWARE; } - CDADev[wDevID].mode = 0; - CDADev[wDevID].dwTimeFormat = MCI_FORMAT_TMSF; - CDADev[wDevID].nCurTrack = 0; - CDADev[wDevID].nTracks = 0; - CDADev[wDevID].dwTotalLen = 0; - CDADev[wDevID].dwFirstOffset = 0; - CDADev[wDevID].lpdwTrackLen = NULL; - CDADev[wDevID].lpdwTrackPos = NULL; + CDADev[index].mode = 0; + CDADev[index].dwTimeFormat = MCI_FORMAT_TMSF; + CDADev[index].nCurTrack = 0; + CDADev[index].nTracks = 0; + CDADev[index].dwTotalLen = 0; + CDADev[index].dwFirstOffset = 0; + CDADev[index].lpdwTrackLen = NULL; + CDADev[index].lpdwTrackPos = NULL; if (!CDAUDIO_GetTracksInfo(wDevID)) { dprintf_cdaudio(stddeb,"CDAUDIO_mciOpen // error reading TracksInfo !\n"); /* return MCIERR_INTERNAL; */ @@ -280,7 +282,7 @@ static DWORD CDAUDIO_mciOpen(UINT wDevID, DWORD dwFlags, LPMCI_OPEN_PARMS lpParm "CDAUDIO_mciOpen // MCI_NOTIFY_SUCCESSFUL %08lX !\n", lpParms->dwCallback); mciDriverNotify((HWND16)LOWORD(lpParms->dwCallback), - CDADev[wDevID].wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL); + CDADev[index].wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL); } return 0; #else @@ -291,14 +293,15 @@ static DWORD CDAUDIO_mciOpen(UINT wDevID, DWORD dwFlags, LPMCI_OPEN_PARMS lpParm /************************************************************************** * CDAUDIO_mciClose [internal] */ -static DWORD CDAUDIO_mciClose(UINT wDevID, DWORD dwParam, LPMCI_GENERIC_PARMS lpParms) +static DWORD CDAUDIO_mciClose(UINT16 wDevID, DWORD dwParam, LPMCI_GENERIC_PARMS lpParms) { #if defined(linux) || defined(__FreeBSD__) - dprintf_cdaudio(stddeb,"CDAUDIO_mciClose(%u, %08lX, %p);\n", + int index = MMSYSTEM_DevIDToIndex(wDevID); + dprintf_cdaudio(stddeb,"CDAUDIO_mciClose(%04X, %08lX, %p);\n", wDevID, dwParam, lpParms); - if (CDADev[wDevID].lpdwTrackLen != NULL) free(CDADev[wDevID].lpdwTrackLen); - if (CDADev[wDevID].lpdwTrackPos != NULL) free(CDADev[wDevID].lpdwTrackPos); - close(CDADev[wDevID].unixdev); + if (CDADev[index].lpdwTrackLen != NULL) free(CDADev[index].lpdwTrackLen); + if (CDADev[index].lpdwTrackPos != NULL) free(CDADev[index].lpdwTrackPos); + close(CDADev[index].unixdev); #endif return 0; } @@ -306,11 +309,11 @@ static DWORD CDAUDIO_mciClose(UINT wDevID, DWORD dwParam, LPMCI_GENERIC_PARMS lp /************************************************************************** * CDAUDIO_mciGetDevCaps [internal] */ -static DWORD CDAUDIO_mciGetDevCaps(UINT wDevID, DWORD dwFlags, +static DWORD CDAUDIO_mciGetDevCaps(UINT16 wDevID, DWORD dwFlags, LPMCI_GETDEVCAPS_PARMS lpParms) { #if defined(linux) || defined(__FreeBSD__) - dprintf_cdaudio(stddeb,"CDAUDIO_mciGetDevCaps(%u, %08lX, %p);\n", + dprintf_cdaudio(stddeb,"CDAUDIO_mciGetDevCaps(%04X, %08lX, %p);\n", wDevID, dwFlags, lpParms); if (lpParms == NULL) return MCIERR_INTERNAL; if (dwFlags & MCI_GETDEVCAPS_ITEM) { @@ -361,10 +364,10 @@ static DWORD CDAUDIO_mciGetDevCaps(UINT wDevID, DWORD dwFlags, /************************************************************************** * CDAUDIO_mciInfo [internal] */ -static DWORD CDAUDIO_mciInfo(UINT wDevID, DWORD dwFlags, LPMCI_INFO_PARMS lpParms) +static DWORD CDAUDIO_mciInfo(UINT16 wDevID, DWORD dwFlags, LPMCI_INFO_PARMS lpParms) { #if defined(linux) || defined(__FreeBSD__) - dprintf_cdaudio(stddeb,"CDAUDIO_mciInfo(%u, %08lX, %p);\n", + dprintf_cdaudio(stddeb,"CDAUDIO_mciInfo(%04X, %08lX, %p);\n", wDevID, dwFlags, lpParms); if (lpParms == NULL) return MCIERR_INTERNAL; lpParms->lpstrReturn = NULL; @@ -389,13 +392,14 @@ static DWORD CDAUDIO_mciInfo(UINT wDevID, DWORD dwFlags, LPMCI_INFO_PARMS lpParm /************************************************************************** * CDAUDIO_CalcFrame [internal] */ -static DWORD CDAUDIO_CalcFrame(UINT wDevID, DWORD dwFormatType, DWORD dwTime) +static DWORD CDAUDIO_CalcFrame(UINT16 wDevID, DWORD dwFormatType, DWORD dwTime) { DWORD dwFrame = 0; #if defined(linux) || defined(__FreeBSD__) - UINT wTrack; + int index = MMSYSTEM_DevIDToIndex(wDevID); + UINT16 wTrack; - dprintf_cdaudio(stddeb,"CDAUDIO_CalcFrame(%u, %08lX, %lu);\n", + dprintf_cdaudio(stddeb,"CDAUDIO_CalcFrame(%04X, %08lX, %lu);\n", wDevID, dwFormatType, dwTime); switch (dwFormatType) { @@ -425,8 +429,8 @@ static DWORD CDAUDIO_CalcFrame(UINT wDevID, DWORD dwFormatType, DWORD dwTime) MCI_TMSF_SECOND(dwTime), MCI_TMSF_FRAME(dwTime)); dprintf_cdaudio(stddeb, "CDAUDIO_CalcFrame // TMSF trackpos[%u]=%lu\n", - wTrack, CDADev[wDevID].lpdwTrackPos[wTrack - 1]); - dwFrame = CDADev[wDevID].lpdwTrackPos[wTrack - 1]; + wTrack, CDADev[index].lpdwTrackPos[wTrack - 1]); + dwFrame = CDADev[index].lpdwTrackPos[wTrack - 1]; dwFrame += CDFRAMES_PERMIN * MCI_TMSF_MINUTE(dwTime); dwFrame += CDFRAMES_PERSEC * MCI_TMSF_SECOND(dwTime); dwFrame += MCI_TMSF_FRAME(dwTime); @@ -440,37 +444,38 @@ static DWORD CDAUDIO_CalcFrame(UINT wDevID, DWORD dwFormatType, DWORD dwTime) /************************************************************************** * CDAUDIO_GetCDStatus [internal] */ -static BOOL CDAUDIO_GetCDStatus(UINT wDevID) +static BOOL32 CDAUDIO_GetCDStatus(UINT16 wDevID) { #if defined(linux) || defined(__FreeBSD__) - int oldmode = CDADev[wDevID].mode; + int index = MMSYSTEM_DevIDToIndex(wDevID); + int oldmode = CDADev[index].mode; #ifdef __FreeBSD__ struct ioc_read_subchannel read_sc; read_sc.address_format = CD_MSF_FORMAT; read_sc.data_format = CD_CURRENT_POSITION; read_sc.track = 0; - read_sc.data_len = sizeof(CDADev[wDevID].sc); - read_sc.data = (struct cd_sub_channel_info *)&CDADev[wDevID].sc; + read_sc.data_len = sizeof(CDADev[index].sc); + read_sc.data = (struct cd_sub_channel_info *)&CDADev[index].sc; #elif linux - CDADev[wDevID].sc.cdsc_format = CDROM_MSF; + CDADev[index].sc.cdsc_format = CDROM_MSF; #endif - if (ioctl(CDADev[wDevID].unixdev, + if (ioctl(CDADev[index].unixdev, #ifdef linux - CDROMSUBCHNL, &CDADev[wDevID].sc + CDROMSUBCHNL, &CDADev[index].sc #elif __FreeBSD__ CDIOCREADSUBCHANNEL, &read_sc #endif )) { dprintf_cdaudio(stddeb,"CDAUDIO_GetCDStatus // opened or no_media !\n"); - CDADev[wDevID].mode = MCI_MODE_NOT_READY; + CDADev[index].mode = MCI_MODE_NOT_READY; return TRUE; } switch ( #ifdef linux - CDADev[wDevID].sc.cdsc_audiostatus + CDADev[index].sc.cdsc_audiostatus #elif __FreeBSD__ - CDADev[wDevID].sc.header.audio_status + CDADev[index].sc.header.audio_status #endif ) { #ifdef linux @@ -480,9 +485,9 @@ static BOOL CDAUDIO_GetCDStatus(UINT wDevID) #endif dprintf_cdaudio(stddeb,"CDAUDIO_GetCDStatus // device doesn't support status, returning NOT_READY.\n"); #ifdef linux - CDADev[wDevID].mode = MCI_MODE_NOT_READY; + CDADev[index].mode = MCI_MODE_NOT_READY; #elif __FreeBSD__ - CDADev[wDevID].mode = MCI_MODE_STOP; + CDADev[index].mode = MCI_MODE_STOP; #endif break; #ifdef linux @@ -490,7 +495,7 @@ static BOOL CDAUDIO_GetCDStatus(UINT wDevID) #elif __FreeBSD__ case CD_AS_NO_STATUS: #endif - CDADev[wDevID].mode = MCI_MODE_STOP; + CDADev[index].mode = MCI_MODE_STOP; dprintf_cdaudio(stddeb,"CDAUDIO_GetCDStatus // MCI_MODE_STOP !\n"); break; #ifdef linux @@ -498,7 +503,7 @@ static BOOL CDAUDIO_GetCDStatus(UINT wDevID) #elif __FreeBSD__ case CD_AS_PLAY_IN_PROGRESS: #endif - CDADev[wDevID].mode = MCI_MODE_PLAY; + CDADev[index].mode = MCI_MODE_PLAY; dprintf_cdaudio(stddeb,"CDAUDIO_GetCDStatus // MCI_MODE_PLAY !\n"); break; #ifdef linux @@ -506,45 +511,45 @@ static BOOL CDAUDIO_GetCDStatus(UINT wDevID) #elif __FreeBSD__ case CD_AS_PLAY_PAUSED: #endif - CDADev[wDevID].mode = MCI_MODE_PAUSE; + CDADev[index].mode = MCI_MODE_PAUSE; dprintf_cdaudio(stddeb,"CDAUDIO_GetCDStatus // MCI_MODE_PAUSE !\n"); break; default: dprintf_cdaudio(stddeb,"CDAUDIO_GetCDStatus // status=%02X !\n", #ifdef linux - CDADev[wDevID].sc.cdsc_audiostatus + CDADev[index].sc.cdsc_audiostatus #elif __FreeBSD__ - CDADev[wDevID].sc.header.audio_status + CDADev[index].sc.header.audio_status #endif ); } #ifdef linux - CDADev[wDevID].nCurTrack = CDADev[wDevID].sc.cdsc_trk; - CDADev[wDevID].dwCurFrame = - CDFRAMES_PERMIN * CDADev[wDevID].sc.cdsc_absaddr.msf.minute + - CDFRAMES_PERSEC * CDADev[wDevID].sc.cdsc_absaddr.msf.second + - CDADev[wDevID].sc.cdsc_absaddr.msf.frame; + CDADev[index].nCurTrack = CDADev[index].sc.cdsc_trk; + CDADev[index].dwCurFrame = + CDFRAMES_PERMIN * CDADev[index].sc.cdsc_absaddr.msf.minute + + CDFRAMES_PERSEC * CDADev[index].sc.cdsc_absaddr.msf.second + + CDADev[index].sc.cdsc_absaddr.msf.frame; #elif __FreeBSD__ - CDADev[wDevID].nCurTrack = CDADev[wDevID].sc.what.position.track_number; - CDADev[wDevID].dwCurFrame = - CDFRAMES_PERMIN * CDADev[wDevID].sc.what.position.absaddr.msf.minute + - CDFRAMES_PERSEC * CDADev[wDevID].sc.what.position.absaddr.msf.second + - CDADev[wDevID].sc.what.position.absaddr.msf.frame; + CDADev[index].nCurTrack = CDADev[index].sc.what.position.track_number; + CDADev[index].dwCurFrame = + CDFRAMES_PERMIN * CDADev[index].sc.what.position.absaddr.msf.minute + + CDFRAMES_PERSEC * CDADev[index].sc.what.position.absaddr.msf.second + + CDADev[index].sc.what.position.absaddr.msf.frame; #endif dprintf_cdaudio(stddeb,"CDAUDIO_GetCDStatus // %02u-%02u:%02u:%02u \n", #ifdef linux - CDADev[wDevID].sc.cdsc_trk, - CDADev[wDevID].sc.cdsc_absaddr.msf.minute, - CDADev[wDevID].sc.cdsc_absaddr.msf.second, - CDADev[wDevID].sc.cdsc_absaddr.msf.frame + CDADev[index].sc.cdsc_trk, + CDADev[index].sc.cdsc_absaddr.msf.minute, + CDADev[index].sc.cdsc_absaddr.msf.second, + CDADev[index].sc.cdsc_absaddr.msf.frame #elif __FreeBSD__ - CDADev[wDevID].sc.what.position.track_number, - CDADev[wDevID].sc.what.position.absaddr.msf.minute, - CDADev[wDevID].sc.what.position.absaddr.msf.second, - CDADev[wDevID].sc.what.position.absaddr.msf.frame + CDADev[index].sc.what.position.track_number, + CDADev[index].sc.what.position.absaddr.msf.minute, + CDADev[index].sc.what.position.absaddr.msf.second, + CDADev[index].sc.what.position.absaddr.msf.frame #endif ); - if (oldmode != CDADev[wDevID].mode && oldmode == MCI_MODE_OPEN) { + if (oldmode != CDADev[index].mode && oldmode == MCI_MODE_OPEN) { if (!CDAUDIO_GetTracksInfo(wDevID)) { dprintf_cdaudio(stddeb,"CDAUDIO_GetCDStatus // error updating TracksInfo !\n"); return MCIERR_INTERNAL; @@ -560,15 +565,16 @@ static BOOL CDAUDIO_GetCDStatus(UINT wDevID) /************************************************************************** * CDAUDIO_CalcTime [internal] */ -static DWORD CDAUDIO_CalcTime(UINT wDevID, DWORD dwFormatType, DWORD dwFrame) +static DWORD CDAUDIO_CalcTime(UINT16 wDevID, DWORD dwFormatType, DWORD dwFrame) { DWORD dwTime = 0; #if defined(linux) || defined(__FreeBSD__) - UINT wTrack; - UINT wMinutes; - UINT wSeconds; - UINT wFrames; - dprintf_cdaudio(stddeb,"CDAUDIO_CalcTime(%u, %08lX, %lu);\n", + int index = MMSYSTEM_DevIDToIndex(wDevID); + UINT16 wTrack; + UINT16 wMinutes; + UINT16 wSeconds; + UINT16 wFrames; + dprintf_cdaudio(stddeb,"CDAUDIO_CalcTime(%04X, %08lX, %lu);\n", wDevID, dwFormatType, dwFrame); switch (dwFormatType) { @@ -591,11 +597,11 @@ static DWORD CDAUDIO_CalcTime(UINT wDevID, DWORD dwFormatType, DWORD dwFrame) /* unknown format ! force TMSF ! ... */ dwFormatType = MCI_FORMAT_TMSF; case MCI_FORMAT_TMSF: - for (wTrack = 0; wTrack < CDADev[wDevID].nTracks; wTrack++) { -/* dwTime += CDADev[wDevID].lpdwTrackLen[wTrack - 1]; + for (wTrack = 0; wTrack < CDADev[index].nTracks; wTrack++) { +/* dwTime += CDADev[index].lpdwTrackLen[wTrack - 1]; printf("Adding trk#%u curpos=%u \n", dwTime); if (dwTime >= dwFrame) break; */ - if (CDADev[wDevID].lpdwTrackPos[wTrack - 1] >= dwFrame) break; + if (CDADev[index].lpdwTrackPos[wTrack - 1] >= dwFrame) break; } wMinutes = dwFrame / CDFRAMES_PERMIN; wSeconds = (dwFrame - CDFRAMES_PERMIN * wMinutes) / CDFRAMES_PERSEC; @@ -615,29 +621,30 @@ static DWORD CDAUDIO_CalcTime(UINT wDevID, DWORD dwFormatType, DWORD dwFrame) /************************************************************************** * CDAUDIO_mciStatus [internal] */ -static DWORD CDAUDIO_mciStatus(UINT wDevID, DWORD dwFlags, LPMCI_STATUS_PARMS lpParms) +static DWORD CDAUDIO_mciStatus(UINT16 wDevID, DWORD dwFlags, LPMCI_STATUS_PARMS lpParms) { #if defined(linux) || defined(__FreeBSD__) - dprintf_cdaudio(stddeb,"CDAUDIO_mciStatus(%u, %08lX, %p);\n", + int index = MMSYSTEM_DevIDToIndex(wDevID); + dprintf_cdaudio(stddeb,"CDAUDIO_mciStatus(%04X, %08lX, %p);\n", wDevID, dwFlags, lpParms); if (lpParms == NULL) return MCIERR_INTERNAL; - if (CDADev[wDevID].unixdev == 0) return MMSYSERR_NOTENABLED; + if (CDADev[index].unixdev == 0) return MMSYSERR_NOTENABLED; if (dwFlags & MCI_NOTIFY) { dprintf_cdaudio(stddeb, "CDAUDIO_mciStatus // MCI_NOTIFY_SUCCESSFUL %08lX !\n", lpParms->dwCallback); mciDriverNotify((HWND16)LOWORD(lpParms->dwCallback), - CDADev[wDevID].wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL); + CDADev[index].wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL); } if (dwFlags & MCI_STATUS_ITEM) { switch(lpParms->dwItem) { case MCI_STATUS_CURRENT_TRACK: if (!CDAUDIO_GetCDStatus(wDevID)) return MCIERR_INTERNAL; - lpParms->dwReturn = CDADev[wDevID].nCurTrack; + lpParms->dwReturn = CDADev[index].nCurTrack; dprintf_cdaudio(stddeb,"CDAUDIO_mciStatus // CURRENT_TRACK=%lu!\n", lpParms->dwReturn); return 0; case MCI_STATUS_LENGTH: - if (CDADev[wDevID].nTracks == 0) { + if (CDADev[index].nTracks == 0) { if (!CDAUDIO_GetTracksInfo(wDevID)) { dprintf_cdaudio(stddeb,"CDAUDIO_mciStatus // error reading TracksInfo !\n"); return MCIERR_INTERNAL; @@ -646,24 +653,24 @@ static DWORD CDAUDIO_mciStatus(UINT wDevID, DWORD dwFlags, LPMCI_STATUS_PARMS lp if (dwFlags & MCI_TRACK) { dprintf_cdaudio(stddeb,"CDAUDIO_mciStatus // MCI_TRACK #%lu LENGTH=??? !\n", lpParms->dwTrack); - if (lpParms->dwTrack > CDADev[wDevID].nTracks) + if (lpParms->dwTrack > CDADev[index].nTracks) return MCIERR_OUTOFRANGE; - lpParms->dwReturn = CDADev[wDevID].lpdwTrackLen[lpParms->dwTrack]; + lpParms->dwReturn = CDADev[index].lpdwTrackLen[lpParms->dwTrack]; } else - lpParms->dwReturn = CDADev[wDevID].dwTotalLen; + lpParms->dwReturn = CDADev[index].dwTotalLen; lpParms->dwReturn = CDAUDIO_CalcTime(wDevID, - CDADev[wDevID].dwTimeFormat, lpParms->dwReturn); + CDADev[index].dwTimeFormat, lpParms->dwReturn); dprintf_cdaudio(stddeb,"CDAUDIO_mciStatus // LENGTH=%lu !\n", lpParms->dwReturn); return 0; case MCI_STATUS_MODE: if (!CDAUDIO_GetCDStatus(wDevID)) return MCIERR_INTERNAL; - lpParms->dwReturn = CDADev[wDevID].mode; + lpParms->dwReturn = CDADev[index].mode; dprintf_cdaudio(stddeb,"CDAUDIO_mciStatus // MCI_STATUS_MODE=%08lX !\n", lpParms->dwReturn); return 0; case MCI_STATUS_MEDIA_PRESENT: - lpParms->dwReturn = (CDADev[wDevID].nTracks > 0) ? TRUE : FALSE; + lpParms->dwReturn = (CDADev[index].nTracks > 0) ? TRUE : FALSE; if (lpParms->dwReturn == FALSE) dprintf_cdaudio(stddeb,"CDAUDIO_mciStatus // MEDIA_NOT_PRESENT !\n"); else @@ -677,19 +684,19 @@ static DWORD CDAUDIO_mciStatus(UINT wDevID, DWORD dwFlags, LPMCI_STATUS_PARMS lp return 0; case MCI_STATUS_POSITION: if (!CDAUDIO_GetCDStatus(wDevID)) return MCIERR_INTERNAL; - lpParms->dwReturn = CDADev[wDevID].dwCurFrame; + lpParms->dwReturn = CDADev[index].dwCurFrame; if (dwFlags & MCI_STATUS_START) { - lpParms->dwReturn = CDADev[wDevID].dwFirstOffset; + lpParms->dwReturn = CDADev[index].dwFirstOffset; dprintf_cdaudio(stddeb,"CDAUDIO_mciStatus // get MCI_STATUS_START !\n"); } if (dwFlags & MCI_TRACK) { - if (lpParms->dwTrack > CDADev[wDevID].nTracks) + if (lpParms->dwTrack > CDADev[index].nTracks) return MCIERR_OUTOFRANGE; - lpParms->dwReturn = CDADev[wDevID].lpdwTrackPos[lpParms->dwTrack - 1]; + lpParms->dwReturn = CDADev[index].lpdwTrackPos[lpParms->dwTrack - 1]; dprintf_cdaudio(stddeb,"CDAUDIO_mciStatus // get MCI_TRACK #%lu !\n", lpParms->dwTrack); } lpParms->dwReturn = CDAUDIO_CalcTime(wDevID, - CDADev[wDevID].dwTimeFormat, lpParms->dwReturn); + CDADev[index].dwTimeFormat, lpParms->dwReturn); dprintf_cdaudio(stddeb,"CDAUDIO_mciStatus // MCI_STATUS_POSITION=%08lX !\n", lpParms->dwReturn); return 0; @@ -699,7 +706,7 @@ static DWORD CDAUDIO_mciStatus(UINT wDevID, DWORD dwFlags, LPMCI_STATUS_PARMS lp return 0; case MCI_STATUS_TIME_FORMAT: dprintf_cdaudio(stddeb,"CDAUDIO_mciStatus // MCI_STATUS_TIME_FORMAT !\n"); - lpParms->dwReturn = CDADev[wDevID].dwTimeFormat; + lpParms->dwReturn = CDADev[index].dwTimeFormat; return 0; default: dprintf_cdaudio(stddeb,"CDAUDIO_mciStatus // unknown command %08lX !\n", lpParms->dwItem); @@ -717,36 +724,37 @@ static DWORD CDAUDIO_mciStatus(UINT wDevID, DWORD dwFlags, LPMCI_STATUS_PARMS lp /************************************************************************** * CDAUDIO_mciPlay [internal] */ -static DWORD CDAUDIO_mciPlay(UINT wDevID, DWORD dwFlags, LPMCI_PLAY_PARMS lpParms) +static DWORD CDAUDIO_mciPlay(UINT16 wDevID, DWORD dwFlags, LPMCI_PLAY_PARMS lpParms) { #if defined(linux) || defined(__FreeBSD__) + int index = MMSYSTEM_DevIDToIndex(wDevID); int start, end; #ifdef linux struct cdrom_msf msf; #elif __FreeBSD__ struct ioc_play_msf msf; #endif - dprintf_cdaudio(stddeb,"CDAUDIO_mciPlay(%u, %08lX, %p);\n", + dprintf_cdaudio(stddeb,"CDAUDIO_mciPlay(%04X, %08lX, %p);\n", wDevID, dwFlags, lpParms); if (lpParms == NULL) return MCIERR_INTERNAL; - if (CDADev[wDevID].unixdev == 0) return MMSYSERR_NOTENABLED; - start = 0; end = CDADev[wDevID].dwTotalLen; - CDADev[wDevID].nCurTrack = 1; + if (CDADev[index].unixdev == 0) return MMSYSERR_NOTENABLED; + start = 0; end = CDADev[index].dwTotalLen; + CDADev[index].nCurTrack = 1; if (dwFlags & MCI_FROM) { start = CDAUDIO_CalcFrame(wDevID, - CDADev[wDevID].dwTimeFormat, lpParms->dwFrom); + CDADev[index].dwTimeFormat, lpParms->dwFrom); dprintf_cdaudio(stddeb,"CDAUDIO_mciPlay // MCI_FROM=%08lX -> %u \n", lpParms->dwFrom, start); } if (dwFlags & MCI_TO) { end = CDAUDIO_CalcFrame(wDevID, - CDADev[wDevID].dwTimeFormat, lpParms->dwTo); + CDADev[index].dwTimeFormat, lpParms->dwTo); dprintf_cdaudio(stddeb, "CDAUDIO_mciPlay // MCI_TO=%08lX -> %u \n", lpParms->dwTo, end); } - start += CDADev[wDevID].dwFirstOffset; - end += CDADev[wDevID].dwFirstOffset; + start += CDADev[index].dwFirstOffset; + end += CDADev[index].dwFirstOffset; #ifdef linux msf.cdmsf_min0 = start / CDFRAMES_PERMIN; msf.cdmsf_sec0 = (start % CDFRAMES_PERMIN) / CDFRAMES_PERSEC; @@ -762,7 +770,7 @@ static DWORD CDAUDIO_mciPlay(UINT wDevID, DWORD dwFlags, LPMCI_PLAY_PARMS lpParm msf.end_s = (end % CDFRAMES_PERMIN) / CDFRAMES_PERSEC; msf.end_f = end % CDFRAMES_PERSEC; #endif - if (ioctl(CDADev[wDevID].unixdev, + if (ioctl(CDADev[index].unixdev, #ifdef linux CDROMSTART #elif __FreeBSD__ @@ -772,7 +780,7 @@ static DWORD CDAUDIO_mciPlay(UINT wDevID, DWORD dwFlags, LPMCI_PLAY_PARMS lpParm dprintf_cdaudio(stddeb,"CDAUDIO_mciPlay // motor doesn't start !\n"); return MCIERR_HARDWARE; } - if (ioctl(CDADev[wDevID].unixdev, + if (ioctl(CDADev[index].unixdev, #ifdef linux CDROMPLAYMSF #elif __FreeBSD__ @@ -791,14 +799,14 @@ static DWORD CDAUDIO_mciPlay(UINT wDevID, DWORD dwFlags, LPMCI_PLAY_PARMS lpParm msf.end_m, msf.end_s, msf.end_f #endif ); - CDADev[wDevID].mode = MCI_MODE_PLAY; + CDADev[index].mode = MCI_MODE_PLAY; if (dwFlags & MCI_NOTIFY) { dprintf_cdaudio(stddeb, "CDAUDIO_mciPlay // MCI_NOTIFY_SUCCESSFUL %08lX !\n", lpParms->dwCallback); /* mciDriverNotify((HWND16)LOWORD(lpParms->dwCallback), - CDADev[wDevID].wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL); + CDADev[index].wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL); */ } return 0; @@ -810,26 +818,27 @@ static DWORD CDAUDIO_mciPlay(UINT wDevID, DWORD dwFlags, LPMCI_PLAY_PARMS lpParm /************************************************************************** * CDAUDIO_mciStop [internal] */ -static DWORD CDAUDIO_mciStop(UINT wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms) +static DWORD CDAUDIO_mciStop(UINT16 wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms) { #if defined(linux) || defined(__FreeBSD__) - dprintf_cdaudio(stddeb,"CDAUDIO_mciStop(%u, %08lX, %p);\n", + int index = MMSYSTEM_DevIDToIndex(wDevID); + dprintf_cdaudio(stddeb,"CDAUDIO_mciStop(%04X, %08lX, %p);\n", wDevID, dwFlags, lpParms); if (lpParms == NULL) return MCIERR_INTERNAL; - if (ioctl(CDADev[wDevID].unixdev, + if (ioctl(CDADev[index].unixdev, #ifdef linux CDROMSTOP #elif __FreeBSD__ CDIOCSTOP #endif )) return MCIERR_HARDWARE; - CDADev[wDevID].mode = MCI_MODE_STOP; + CDADev[index].mode = MCI_MODE_STOP; if (dwFlags & MCI_NOTIFY) { dprintf_cdaudio(stddeb, "CDAUDIO_mciStop // MCI_NOTIFY_SUCCESSFUL %08lX !\n", lpParms->dwCallback); mciDriverNotify((HWND16)LOWORD(lpParms->dwCallback), - CDADev[wDevID].wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL); + CDADev[index].wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL); } return 0; #else @@ -840,26 +849,27 @@ static DWORD CDAUDIO_mciStop(UINT wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpP /************************************************************************** * CDAUDIO_mciPause [internal] */ -static DWORD CDAUDIO_mciPause(UINT wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms) +static DWORD CDAUDIO_mciPause(UINT16 wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms) { #if defined(linux) || defined(__FreeBSD__) - dprintf_cdaudio(stddeb,"CDAUDIO_mciPause(%u, %08lX, %p);\n", + int index = MMSYSTEM_DevIDToIndex(wDevID); + dprintf_cdaudio(stddeb,"CDAUDIO_mciPause(%04X, %08lX, %p);\n", wDevID, dwFlags, lpParms); if (lpParms == NULL) return MCIERR_INTERNAL; - if (ioctl(CDADev[wDevID].unixdev, + if (ioctl(CDADev[index].unixdev, #ifdef linux CDROMPAUSE #elif __FreeBSD__ CDIOCPAUSE #endif )) return MCIERR_HARDWARE; - CDADev[wDevID].mode = MCI_MODE_PAUSE; + CDADev[index].mode = MCI_MODE_PAUSE; if (dwFlags & MCI_NOTIFY) { dprintf_cdaudio(stddeb, "CDAUDIO_mciPause // MCI_NOTIFY_SUCCESSFUL %08lX !\n", lpParms->dwCallback); mciDriverNotify((HWND16)LOWORD(lpParms->dwCallback), - CDADev[wDevID].wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL); + CDADev[index].wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL); } return 0; #else @@ -870,26 +880,27 @@ static DWORD CDAUDIO_mciPause(UINT wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lp /************************************************************************** * CDAUDIO_mciResume [internal] */ -static DWORD CDAUDIO_mciResume(UINT wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms) +static DWORD CDAUDIO_mciResume(UINT16 wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms) { #if defined(linux) || defined(__FreeBSD__) - dprintf_cdaudio(stddeb,"CDAUDIO_mciResume(%u, %08lX, %p);\n", + int index = MMSYSTEM_DevIDToIndex(wDevID); + dprintf_cdaudio(stddeb,"CDAUDIO_mciResume(%04X, %08lX, %p);\n", wDevID, dwFlags, lpParms); if (lpParms == NULL) return MCIERR_INTERNAL; - if (ioctl(CDADev[wDevID].unixdev, + if (ioctl(CDADev[index].unixdev, #ifdef linux CDROMRESUME #elif __FreeBSD__ CDIOCRESUME #endif )) return MCIERR_HARDWARE; - CDADev[wDevID].mode = MCI_MODE_STOP; + CDADev[index].mode = MCI_MODE_STOP; if (dwFlags & MCI_NOTIFY) { dprintf_cdaudio(stddeb, "CDAUDIO_mciResume // MCI_NOTIFY_SUCCESSFUL %08lX !\n", lpParms->dwCallback); mciDriverNotify((HWND16)LOWORD(lpParms->dwCallback), - CDADev[wDevID].wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL); + CDADev[index].wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL); } return 0; #else @@ -900,15 +911,16 @@ static DWORD CDAUDIO_mciResume(UINT wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS l /************************************************************************** * CDAUDIO_mciSeek [internal] */ -static DWORD CDAUDIO_mciSeek(UINT wDevID, DWORD dwFlags, LPMCI_SEEK_PARMS lpParms) +static DWORD CDAUDIO_mciSeek(UINT16 wDevID, DWORD dwFlags, LPMCI_SEEK_PARMS lpParms) { #if defined(linux) || defined(__FreeBSD__) + int index = MMSYSTEM_DevIDToIndex(wDevID); DWORD dwRet; MCI_PLAY_PARMS PlayParms; - dprintf_cdaudio(stddeb,"CDAUDIO_mciSeek(%u, %08lX, %p);\n", + dprintf_cdaudio(stddeb,"CDAUDIO_mciSeek(%04X, %08lX, %p);\n", wDevID, dwFlags, lpParms); if (lpParms == NULL) return MCIERR_INTERNAL; - if (ioctl(CDADev[wDevID].unixdev, + if (ioctl(CDADev[index].unixdev, #ifdef linux CDROMRESUME #elif __FreeBSD__ @@ -918,13 +930,13 @@ static DWORD CDAUDIO_mciSeek(UINT wDevID, DWORD dwFlags, LPMCI_SEEK_PARMS lpParm perror("ioctl CDROMRESUME"); return MCIERR_HARDWARE; } - CDADev[wDevID].mode = MCI_MODE_SEEK; + CDADev[index].mode = MCI_MODE_SEEK; switch(dwFlags) { case MCI_SEEK_TO_START: PlayParms.dwFrom = 0; break; case MCI_SEEK_TO_END: - PlayParms.dwFrom = CDADev[wDevID].dwTotalLen; + PlayParms.dwFrom = CDADev[index].dwTotalLen; break; case MCI_TO: PlayParms.dwFrom = lpParms->dwTo; @@ -938,7 +950,7 @@ static DWORD CDAUDIO_mciSeek(UINT wDevID, DWORD dwFlags, LPMCI_SEEK_PARMS lpParm "CDAUDIO_mciSeek // MCI_NOTIFY_SUCCESSFUL %08lX !\n", lpParms->dwCallback); mciDriverNotify((HWND16)LOWORD(lpParms->dwCallback), - CDADev[wDevID].wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL); + CDADev[index].wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL); } return dwRet; #else @@ -950,10 +962,11 @@ static DWORD CDAUDIO_mciSeek(UINT wDevID, DWORD dwFlags, LPMCI_SEEK_PARMS lpParm /************************************************************************** * CDAUDIO_mciSet [internal] */ -static DWORD CDAUDIO_mciSet(UINT wDevID, DWORD dwFlags, LPMCI_SET_PARMS lpParms) +static DWORD CDAUDIO_mciSet(UINT16 wDevID, DWORD dwFlags, LPMCI_SET_PARMS lpParms) { #if defined(linux) || defined(__FreeBSD__) - dprintf_cdaudio(stddeb,"CDAUDIO_mciSet(%u, %08lX, %p);\n", + int index = MMSYSTEM_DevIDToIndex(wDevID); + dprintf_cdaudio(stddeb,"CDAUDIO_mciSet(%04X, %08lX, %p);\n", wDevID, dwFlags, lpParms); if (lpParms == NULL) return MCIERR_INTERNAL; /* @@ -976,32 +989,32 @@ static DWORD CDAUDIO_mciSet(UINT wDevID, DWORD dwFlags, LPMCI_SET_PARMS lpParms) dprintf_cdaudio(stddeb,"CDAUDIO_mciSet // bad time format !\n"); return MCIERR_BAD_TIME_FORMAT; } - CDADev[wDevID].dwTimeFormat = lpParms->dwTimeFormat; + CDADev[index].dwTimeFormat = lpParms->dwTimeFormat; } if (dwFlags & MCI_SET_DOOR_OPEN) { dprintf_cdaudio(stddeb, "CDAUDIO_mciSet // MCI_SET_DOOR_OPEN !\n"); #ifdef __FreeBSD__ - if (ioctl(CDADev[wDevID].unixdev, CDIOCALLOW)) return MCIERR_HARDWARE; - if (ioctl(CDADev[wDevID].unixdev, CDIOCEJECT)) return MCIERR_HARDWARE; - if (ioctl(CDADev[wDevID].unixdev, CDIOCPREVENT)) return MCIERR_HARDWARE; + if (ioctl(CDADev[index].unixdev, CDIOCALLOW)) return MCIERR_HARDWARE; + if (ioctl(CDADev[index].unixdev, CDIOCEJECT)) return MCIERR_HARDWARE; + if (ioctl(CDADev[index].unixdev, CDIOCPREVENT)) return MCIERR_HARDWARE; #elif linux - if (ioctl(CDADev[wDevID].unixdev, CDROMEJECT)) return MCIERR_HARDWARE; + if (ioctl(CDADev[index].unixdev, CDROMEJECT)) return MCIERR_HARDWARE; #endif - CDADev[wDevID].nTracks = 0; + CDADev[index].nTracks = 0; } if (dwFlags & MCI_SET_DOOR_CLOSED) { dprintf_cdaudio(stddeb, "CDAUDIO_mciSet // MCI_SET_DOOR_CLOSED !\n"); #ifdef __FreeBSD__ - if (ioctl(CDADev[wDevID].unixdev, CDIOCALLOW)) return MCIERR_HARDWARE; - if (ioctl(CDADev[wDevID].unixdev, CDIOCCLOSE)) return MCIERR_HARDWARE; - if (ioctl(CDADev[wDevID].unixdev, CDIOCPREVENT)) return MCIERR_HARDWARE; + if (ioctl(CDADev[index].unixdev, CDIOCALLOW)) return MCIERR_HARDWARE; + if (ioctl(CDADev[index].unixdev, CDIOCCLOSE)) return MCIERR_HARDWARE; + if (ioctl(CDADev[index].unixdev, CDIOCPREVENT)) return MCIERR_HARDWARE; #elif linux - if (ioctl(CDADev[wDevID].unixdev, CDROMEJECT)) return MCIERR_HARDWARE; + if (ioctl(CDADev[index].unixdev, CDROMEJECT)) return MCIERR_HARDWARE; /* XXX should it be ",1" ??? */ #endif - CDADev[wDevID].nTracks = 0; + CDADev[index].nTracks = 0; } if (dwFlags & MCI_SET_VIDEO) return MCIERR_UNSUPPORTED_FUNCTION; if (dwFlags & MCI_SET_ON) return MCIERR_UNSUPPORTED_FUNCTION; @@ -1011,7 +1024,7 @@ static DWORD CDAUDIO_mciSet(UINT wDevID, DWORD dwFlags, LPMCI_SET_PARMS lpParms) "CDAUDIO_mciSet // MCI_NOTIFY_SUCCESSFUL %08lX !\n", lpParms->dwCallback); mciDriverNotify((HWND16)LOWORD(lpParms->dwCallback), - CDADev[wDevID].wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL); + CDADev[index].wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL); } return 0; #else @@ -1114,5 +1127,3 @@ LONG CDAUDIO_DriverProc(DWORD dwDevID, HDRVR16 hDriv, WORD wMsg, /*-----------------------------------------------------------------------*/ - -#endif /* #ifdef BUILTIN_MMSYSTEM */ diff --git a/multimedia/mcistring.c b/multimedia/mcistring.c index 91af08dc8a9..f61679cb0d8 100644 --- a/multimedia/mcistring.c +++ b/multimedia/mcistring.c @@ -6,8 +6,6 @@ /* FIXME: special commands of device drivers should be handled by those drivers */ -#ifndef WINELIB - #include #include #include @@ -32,6 +30,13 @@ extern MCI_OPEN_DRIVER_PARMS mciDrv[MAXMCIDRIVERS]; */ extern MCI_OPEN_PARMS mciOpenDrv[MAXMCIDRIVERS]; +#define GetDrv(wDevID) (&mciDrv[MMSYSTEM_DevIDToIndex(wDevID)]) +#define GetOpenDrv(wDevID) (&mciOpenDrv[MMSYSTEM_DevIDToIndex(wDevID)]) +extern int MMSYSTEM_DevIDToIndex(UINT16 wDevID); +extern UINT16 MMSYSTEM_FirstDevID(void); +extern UINT16 MMSYSTEM_NextDevID(UINT16 wDevID); +extern BOOL32 MMSYSTEM_DevIDValid(UINT16 wDevID); + LONG DrvDefDriverProc(DWORD dwDevID, HDRVR16 hDriv, WORD wMsg, DWORD dwParam1, DWORD dwParam2); @@ -51,8 +56,8 @@ LONG ANIM_DriverProc(DWORD dwDevID, HDRVR16 hDriv, WORD wMsg, /* standard functionparameters for all functions */ #define _MCISTR_PROTO_ \ - WORD wDevID,WORD uDevTyp,LPSTR lpstrReturnString,UINT uReturnLength,\ - LPCSTR dev,LPSTR *keywords,UINT nrofkeywords,DWORD dwFlags + WORD wDevID,WORD uDevTyp,LPSTR lpstrReturnString,UINT16 uReturnLength,\ + LPCSTR dev,LPSTR *keywords,UINT16 nrofkeywords,DWORD dwFlags /* copy string to return pointer including necessary checks * for use in mciSendString() @@ -69,16 +74,16 @@ LONG ANIM_DriverProc(DWORD dwDevID, HDRVR16 hDriv, WORD wMsg, #define _MCI_CALL_DRIVER(cmd,params) \ switch(uDevTyp) {\ case MCI_DEVTYPE_CD_AUDIO:\ - res=CDAUDIO_DriverProc(mciDrv[wDevID].wDeviceID,0,cmd,dwFlags, (DWORD)(params));\ + res=CDAUDIO_DriverProc(GetDrv(wDevID)->wDeviceID,0,cmd,dwFlags, (DWORD)(params));\ break;\ case MCI_DEVTYPE_WAVEFORM_AUDIO:\ - res=WAVE_DriverProc(mciDrv[wDevID].wDeviceID,0,cmd,dwFlags,(DWORD)(params));\ + res=WAVE_DriverProc(GetDrv(wDevID)->wDeviceID,0,cmd,dwFlags,(DWORD)(params));\ break;\ case MCI_DEVTYPE_SEQUENCER:\ - res=MIDI_DriverProc(mciDrv[wDevID].wDeviceID,0,cmd,dwFlags,(DWORD)(params));\ + res=MIDI_DriverProc(GetDrv(wDevID)->wDeviceID,0,cmd,dwFlags,(DWORD)(params));\ break;\ case MCI_DEVTYPE_ANIMATION:\ - res=ANIM_DriverProc(mciDrv[wDevID].wDeviceID,0,cmd,dwFlags,(DWORD)(params));\ + res=ANIM_DriverProc(GetDrv(wDevID)->wDeviceID,0,cmd,dwFlags,(DWORD)(params));\ break;\ case MCI_DEVTYPE_DIGITAL_VIDEO:\ dprintf_mci(stddeb,"_MCI_CALL_DRIVER //No DIGITAL_VIDEO yet !\n");\ @@ -91,7 +96,7 @@ LONG ANIM_DriverProc(DWORD dwDevID, HDRVR16 hDriv, WORD wMsg, } /* print a DWORD in the specified timeformat */ static void -_MCISTR_printtf(char *buf,UINT uDevType,DWORD timef,DWORD val) { +_MCISTR_printtf(char *buf,UINT16 uDevType,DWORD timef,DWORD val) { *buf='\0'; switch (timef) { case MCI_FORMAT_MILLISECONDS: @@ -322,17 +327,18 @@ MCISTR_Open(_MCISTR_PROTO_) { SEGPTR_FREE(pU); return MCIERR_INVALID_DEVICE_NAME; } - wDevID=0; - while(mciDrv[wDevID].wType) { - if (++wDevID>=MAXMCIDRIVERS) { + wDevID=MMSYSTEM_FirstDevID(); + while(GetDrv(wDevID)->wType) { + wDevID = MMSYSTEM_NextDevID(wDevID); + if (!MMSYSTEM_DevIDValid(wDevID)) { dprintf_mci(stddeb, __FILE__":MCISTR_Open:MAXMCIDRIVERS reached!\n"); SEGPTR_FREE(PTR_SEG_TO_LIN(pU->openParams.lpstrElementName)); SEGPTR_FREE(pU); return MCIERR_INTERNAL; } } - mciDrv[wDevID].wType = uDevTyp; - mciDrv[wDevID].wDeviceID = wDevID; + GetDrv(wDevID)->wType = uDevTyp; + GetDrv(wDevID)->wDeviceID = wDevID; pU->openParams.dwCallback = 0; pU->openParams.wDeviceID = wDevID; pU->ovlyopenParams.dwStyle = 0; @@ -351,7 +357,7 @@ MCISTR_Open(_MCISTR_PROTO_) { } if (!strcmp(keywords[i],"element") && (i+1openParams.lpstrElementName=SEGPTR_GET(SEGPTR_STRDUP(keywords[i])); + pU->openParams.lpstrElementName=SEGPTR_GET(SEGPTR_STRDUP(keywords[i+1])); i+=2; continue; } @@ -421,7 +427,7 @@ MCISTR_Open(_MCISTR_PROTO_) { } _MCI_CALL_DRIVER( MCI_OPEN, SEGPTR_GET(pU) ); if (res==0) - memcpy(&mciOpenDrv[wDevID],&pU->openParams,sizeof(MCI_OPEN_PARMS)); + memcpy(GetOpenDrv(wDevID),&pU->openParams,sizeof(MCI_OPEN_PARMS)); else { SEGPTR_FREE(PTR_SEG_TO_LIN(pU->openParams.lpstrElementName)); SEGPTR_FREE(PTR_SEG_TO_LIN(pU->openParams.lpstrDeviceType)); @@ -2095,7 +2101,7 @@ struct _MCISTR_cmdtable { * it is used. (imagine "close all"). Not implemented yet. */ DWORD mciSendString (LPCSTR lpstrCommand, LPSTR lpstrReturnString, - UINT uReturnLength, HWND16 hwndCallback) + UINT16 uReturnLength, HWND16 hwndCallback) { char *cmd,*dev,*args,**keywords; WORD uDevTyp=0,wDevID=0; @@ -2154,22 +2160,23 @@ DWORD mciSendString (LPCSTR lpstrCommand, LPSTR lpstrReturnString, /* determine wDevID and uDevTyp for all commands except "open" */ if (STRCMP(cmd,"open")!=0) { - wDevID=0; + wDevID = MMSYSTEM_FirstDevID(); while (1) { SEGPTR dname; - dname=(SEGPTR)mciOpenDrv[wDevID].lpstrAlias; + dname=(SEGPTR)GetOpenDrv(wDevID)->lpstrAlias; if (dname==NULL) - dname=(SEGPTR)mciOpenDrv[wDevID].lpstrDeviceType; + dname=(SEGPTR)GetOpenDrv(wDevID)->lpstrDeviceType; if ((dname!=NULL)&&(!STRCMP(PTR_SEG_TO_LIN(dname),dev))) break; - if (++wDevID >= MAXMCIDRIVERS) { + wDevID = MMSYSTEM_NextDevID(wDevID); + if (!MMSYSTEM_DevIDValid(wDevID)) { dprintf_mci(stddeb, __FILE__":mciSendString:MAXMCIDRIVERS reached!\n"); free(keywords);free(cmd); return MCIERR_INTERNAL; } } - uDevTyp=mciDrv[wDevID].wType; + uDevTyp=GetDrv(wDevID)->wType; } for (i=0;MCISTR_cmdtable[i].cmd!=NULL;i++) { @@ -2192,4 +2199,3 @@ DWORD mciSendString (LPCSTR lpstrCommand, LPSTR lpstrReturnString, free(keywords);free(cmd); return MCIERR_MISSING_COMMAND_STRING; } -#endif diff --git a/multimedia/midi.c b/multimedia/midi.c index 5d08d7b9dd2..7a52f87f7fb 100644 --- a/multimedia/midi.c +++ b/multimedia/midi.c @@ -4,12 +4,6 @@ * Copyright 1994 Martin Ayotte */ -#ifndef WINELIB -#define BUILTIN_MMSYSTEM -#endif - -#ifdef BUILTIN_MMSYSTEM - #include #include #include @@ -30,6 +24,8 @@ #include #endif +int MMSYSTEM_DevIDToIndex(UINT16); + #if defined(linux) || defined(__FreeBSD__) #define MIDI_DEV "/dev/sequencer" @@ -65,7 +61,7 @@ typedef struct { typedef struct { int nUseCount; /* Incremented for each shared open */ - BOOL fShareable; /* TRUE if first open was shareable */ + BOOL16 fShareable; /* TRUE if first open was shareable */ WORD wNotifyDeviceID; /* MCI device ID with a pending notification */ HANDLE16 hCallback; /* Callback handle for pending notification */ HMMIO16 hFile; /* mmio file handle open as Element */ @@ -88,14 +84,15 @@ static LINUX_MCIMIDI MCIMidiDev[MAX_MCIMIDIDRV]; /************************************************************************** * MIDI_NotifyClient [internal] */ -static DWORD MIDI_NotifyClient(UINT wDevID, WORD wMsg, +static DWORD MIDI_NotifyClient(UINT16 wDevID, WORD wMsg, DWORD dwParam1, DWORD dwParam2) { #if defined(linux) || defined(__FreeBSD__) - if (MidiInDev[wDevID].wFlags != DCB_NULL && !DriverCallback( - MidiInDev[wDevID].midiDesc.dwCallback, MidiInDev[wDevID].wFlags, - MidiInDev[wDevID].midiDesc.hMidi, wMsg, - MidiInDev[wDevID].midiDesc.dwInstance, dwParam1, dwParam2)) { + int index = MMSYSTEM_DevIDToIndex(wDevID); + if (MidiInDev[index].wFlags != DCB_NULL && !DriverCallback( + MidiInDev[index].midiDesc.dwCallback, MidiInDev[index].wFlags, + MidiInDev[index].midiDesc.hMidi, wMsg, + MidiInDev[index].midiDesc.dwInstance, dwParam1, dwParam2)) { dprintf_midi(stddeb, "MIDI_NotifyClient // can't notify client !\n"); return MMSYSERR_NOERROR; } @@ -109,16 +106,17 @@ static DWORD MIDI_NotifyClient(UINT wDevID, WORD wMsg, /************************************************************************** * MIDI_ReadByte [internal] */ -static DWORD MIDI_ReadByte(UINT wDevID, BYTE *lpbyt) +static DWORD MIDI_ReadByte(UINT16 wDevID, BYTE *lpbyt) { + int index = MMSYSTEM_DevIDToIndex(wDevID); #if defined(linux) || defined(__FreeBSD__) if (lpbyt != NULL) { - if (mmioRead(MCIMidiDev[wDevID].hFile, (HPSTR)lpbyt, + if (mmioRead(MCIMidiDev[index].hFile, (HPSTR)lpbyt, (long) sizeof(BYTE)) == (long) sizeof(BYTE)) { return 0; } } - dprintf_midi(stddeb, "MIDI_ReadByte // error reading wDevID=%d \n", wDevID); + dprintf_midi(stddeb, "MIDI_ReadByte // error reading wDevID=%04X\n", wDevID); return MCIERR_INTERNAL; #else @@ -130,7 +128,7 @@ static DWORD MIDI_ReadByte(UINT wDevID, BYTE *lpbyt) /************************************************************************** * MIDI_ReadWord [internal] */ -static DWORD MIDI_ReadWord(UINT wDevID, LPWORD lpw) +static DWORD MIDI_ReadWord(UINT16 wDevID, LPWORD lpw) { BYTE hibyte, lobyte; if (lpw != NULL) { @@ -141,7 +139,7 @@ static DWORD MIDI_ReadWord(UINT wDevID, LPWORD lpw) } } } - dprintf_midi(stddeb, "MIDI_ReadWord // error reading wDevID=%d \n", wDevID); + dprintf_midi(stddeb, "MIDI_ReadWord // error reading wDevID=%04X\n", wDevID); return MCIERR_INTERNAL; } @@ -149,7 +147,7 @@ static DWORD MIDI_ReadWord(UINT wDevID, LPWORD lpw) /************************************************************************** * MIDI_ReadLong [internal] */ -static DWORD MIDI_ReadLong(UINT wDevID, LPDWORD lpdw) +static DWORD MIDI_ReadLong(UINT16 wDevID, LPDWORD lpdw) { WORD hiword, loword; if (lpdw != NULL) { @@ -160,7 +158,7 @@ static DWORD MIDI_ReadLong(UINT wDevID, LPDWORD lpdw) } } } - dprintf_midi(stddeb, "MIDI_ReadLong // error reading wDevID=%d \n", wDevID); + dprintf_midi(stddeb, "MIDI_ReadLong // error reading wDevID=%04X\n", wDevID); return MCIERR_INTERNAL; } @@ -168,19 +166,19 @@ static DWORD MIDI_ReadLong(UINT wDevID, LPDWORD lpdw) /************************************************************************** * MIDI_ReadVaryLen [internal] */ -static DWORD MIDI_ReadVaryLen(UINT wDevID, LPDWORD lpdw) +static DWORD MIDI_ReadVaryLen(UINT16 wDevID, LPDWORD lpdw) { BYTE byte; DWORD value; if (lpdw == NULL) return MCIERR_INTERNAL; if (MIDI_ReadByte(wDevID, &byte) != 0) { - dprintf_midi(stddeb, "MIDI_ReadVaryLen // error reading wDevID=%d \n", wDevID); + dprintf_midi(stddeb, "MIDI_ReadVaryLen // error reading wDevID=%04X\n", wDevID); return MCIERR_INTERNAL; } value = (DWORD)(byte & 0x7F); while (byte & 0x80) { if (MIDI_ReadByte(wDevID, &byte) != 0) { - dprintf_midi(stddeb, "MIDI_ReadVaryLen // error reading wDevID=%d \n", wDevID); + dprintf_midi(stddeb, "MIDI_ReadVaryLen // error reading wDevID=%04X\n", wDevID); return MCIERR_INTERNAL; } value = (value << 7) + (byte & 0x7F); @@ -196,36 +194,37 @@ static DWORD MIDI_ReadVaryLen(UINT wDevID, LPDWORD lpdw) /************************************************************************** * MIDI_ReadMThd [internal] */ -static DWORD MIDI_ReadMThd(UINT wDevID, DWORD dwOffset) +static DWORD MIDI_ReadMThd(UINT16 wDevID, DWORD dwOffset) { #if defined(linux) || defined(__FreeBSD__) + int index = MMSYSTEM_DevIDToIndex(wDevID); DWORD toberead; FOURCC fourcc; dprintf_midi(stddeb, "MIDI_ReadMThd(%04X, %08lX);\n", wDevID, dwOffset); - if (mmioSeek(MCIMidiDev[wDevID].hFile, dwOffset, SEEK_SET) != dwOffset) { + if (mmioSeek(MCIMidiDev[index].hFile, dwOffset, SEEK_SET) != dwOffset) { dprintf_midi(stddeb, "MIDI_ReadMThd // can't seek at %08lX begin of 'MThd' \n", dwOffset); return MCIERR_INTERNAL; } - if (mmioRead(MCIMidiDev[wDevID].hFile, (HPSTR)&fourcc, + if (mmioRead(MCIMidiDev[index].hFile, (HPSTR)&fourcc, (long) sizeof(FOURCC)) != (long) sizeof(FOURCC)) { return MCIERR_INTERNAL; } if (MIDI_ReadLong(wDevID, &toberead) != 0) { return MCIERR_INTERNAL; } - if (MIDI_ReadWord(wDevID, &MCIMidiDev[wDevID].wFormat) != 0) { + if (MIDI_ReadWord(wDevID, &MCIMidiDev[index].wFormat) != 0) { return MCIERR_INTERNAL; } - if (MIDI_ReadWord(wDevID, &MCIMidiDev[wDevID].nTracks) != 0) { + if (MIDI_ReadWord(wDevID, &MCIMidiDev[index].nTracks) != 0) { return MCIERR_INTERNAL; } - if (MIDI_ReadWord(wDevID, &MCIMidiDev[wDevID].nTempo) != 0) { + if (MIDI_ReadWord(wDevID, &MCIMidiDev[index].nTempo) != 0) { return MCIERR_INTERNAL; } dprintf_midi(stddeb, "MIDI_ReadMThd // toberead=%08lX, wFormat=%04X nTracks=%04X nTempo=%04X\n", - toberead, MCIMidiDev[wDevID].wFormat, - MCIMidiDev[wDevID].nTracks, - MCIMidiDev[wDevID].nTempo); + toberead, MCIMidiDev[index].wFormat, + MCIMidiDev[index].nTracks, + MCIMidiDev[index].nTempo); toberead -= 3 * sizeof(WORD); /* ntrks = read16bit (); @@ -239,15 +238,16 @@ static DWORD MIDI_ReadMThd(UINT wDevID, DWORD dwOffset) } -static DWORD MIDI_ReadMTrk(UINT wDevID, DWORD dwOffset) +static DWORD MIDI_ReadMTrk(UINT16 wDevID, DWORD dwOffset) { #if defined(linux) || defined(__FreeBSD__) + int index = MMSYSTEM_DevIDToIndex(wDevID); DWORD toberead; FOURCC fourcc; - if (mmioSeek(MCIMidiDev[wDevID].hFile, dwOffset, SEEK_SET) != dwOffset) { + if (mmioSeek(MCIMidiDev[index].hFile, dwOffset, SEEK_SET) != dwOffset) { dprintf_midi(stddeb, "MIDI_ReadMTrk // can't seek at %08lX begin of 'MThd' \n", dwOffset); } - if (mmioRead(MCIMidiDev[wDevID].hFile, (HPSTR)&fourcc, + if (mmioRead(MCIMidiDev[index].hFile, (HPSTR)&fourcc, (long) sizeof(FOURCC)) != (long) sizeof(FOURCC)) { return MCIERR_INTERNAL; } @@ -256,7 +256,7 @@ static DWORD MIDI_ReadMTrk(UINT wDevID, DWORD dwOffset) } dprintf_midi(stddeb, "MIDI_ReadMTrk // toberead=%08lX\n", toberead); toberead -= 3 * sizeof(WORD); - MCIMidiDev[wDevID].dwTotalLen = toberead; + MCIMidiDev[index].dwTotalLen = toberead; return 0; #else return MMSYSERR_NOTENABLED; @@ -267,9 +267,10 @@ static DWORD MIDI_ReadMTrk(UINT wDevID, DWORD dwOffset) /************************************************************************** * MIDI_mciOpen [internal] */ -static DWORD MIDI_mciOpen(UINT wDevID, DWORD dwFlags, LPMCI_OPEN_PARMS lpParms) +static DWORD MIDI_mciOpen(UINT16 wDevID, DWORD dwFlags, LPMCI_OPEN_PARMS lpParms) { #if defined(linux) || defined(__FreeBSD__) + int index; MIDIOPENDESC MidiDesc; DWORD dwRet; DWORD dwOffset; @@ -278,49 +279,53 @@ static DWORD MIDI_mciOpen(UINT wDevID, DWORD dwFlags, LPMCI_OPEN_PARMS lpParms) dprintf_midi(stddeb, "MIDI_mciOpen(%08lX, %p)\n", dwFlags, lpParms); if (lpParms == NULL) return MCIERR_INTERNAL; - if (MCIMidiDev[wDevID].nUseCount > 0) { + + wDevID = lpParms->wDeviceID; + index = MMSYSTEM_DevIDToIndex(wDevID); + + if (MCIMidiDev[index].nUseCount > 0) { /* The driver already open on this channel */ /* If the driver was opened shareable before and this open specifies */ /* shareable then increment the use count */ - if (MCIMidiDev[wDevID].fShareable && (dwFlags & MCI_OPEN_SHAREABLE)) - ++MCIMidiDev[wDevID].nUseCount; + if (MCIMidiDev[index].fShareable && (dwFlags & MCI_OPEN_SHAREABLE)) + ++MCIMidiDev[index].nUseCount; else return MCIERR_MUST_USE_SHAREABLE; } else { - MCIMidiDev[wDevID].nUseCount = 1; - MCIMidiDev[wDevID].fShareable = dwFlags & MCI_OPEN_SHAREABLE; + MCIMidiDev[index].nUseCount = 1; + MCIMidiDev[index].fShareable = dwFlags & MCI_OPEN_SHAREABLE; } dprintf_midi(stddeb, "MIDI_mciOpen // wDevID=%04X\n", wDevID); lpParms->wDeviceID = wDevID; dprintf_midi(stddeb, "MIDI_mciOpen // lpParms->wDevID=%04X\n", lpParms->wDeviceID); dprintf_midi(stddeb, "MIDI_mciOpen // before OPEN_ELEMENT\n"); - if (dwFlags & MCI_OPEN_ELEMENT) { + if (dwFlags & MCI_OPEN_ELEMENT) { lpstrElementName = (LPSTR)PTR_SEG_TO_LIN(lpParms->lpstrElementName); dprintf_midi(stddeb, "MIDI_mciOpen // MCI_OPEN_ELEMENT '%s' !\n", lpstrElementName); if (strlen(lpstrElementName) > 0) { strcpy(str, lpstrElementName); CharUpper32A(str); - MCIMidiDev[wDevID].hFile = mmioOpen(str, NULL, + MCIMidiDev[index].hFile = mmioOpen(str, NULL, MMIO_ALLOCBUF | MMIO_READWRITE | MMIO_EXCLUSIVE); - if (MCIMidiDev[wDevID].hFile == 0) { + if (MCIMidiDev[index].hFile == 0) { dprintf_midi(stddeb, "MIDI_mciOpen // can't find file='%s' !\n", str); return MCIERR_FILE_NOT_FOUND; } } else - MCIMidiDev[wDevID].hFile = 0; + MCIMidiDev[index].hFile = 0; } - dprintf_midi(stddeb, "MIDI_mciOpen // hFile=%u\n", MCIMidiDev[wDevID].hFile); - memcpy(&MCIMidiDev[wDevID].openParms, lpParms, sizeof(MCI_OPEN_PARMS)); - MCIMidiDev[wDevID].wNotifyDeviceID = lpParms->wDeviceID; - MCIMidiDev[wDevID].dwStatus = MCI_MODE_STOP; - MCIMidiDev[wDevID].dwBeginData = 0; - MCIMidiDev[wDevID].dwTotalLen = 0; + dprintf_midi(stddeb, "MIDI_mciOpen // hFile=%u\n", MCIMidiDev[index].hFile); + memcpy(&MCIMidiDev[index].openParms, lpParms, sizeof(MCI_OPEN_PARMS)); + MCIMidiDev[index].wNotifyDeviceID = lpParms->wDeviceID; + MCIMidiDev[index].dwStatus = MCI_MODE_STOP; + MCIMidiDev[index].dwBeginData = 0; + MCIMidiDev[index].dwTotalLen = 0; MidiDesc.hMidi = 0; - if (MCIMidiDev[wDevID].hFile != 0) { + if (MCIMidiDev[index].hFile != 0) { MMCKINFO ckMainRIFF; - if (mmioDescend(MCIMidiDev[wDevID].hFile, &ckMainRIFF, NULL, 0) != 0) { + if (mmioDescend(MCIMidiDev[index].hFile, &ckMainRIFF, NULL, 0) != 0) { return MCIERR_INTERNAL; } dprintf_midi(stddeb,"MIDI_mciOpen // ParentChunk ckid=%.4s fccType=%.4s cksize=%08lX \n", @@ -339,19 +344,19 @@ static DWORD MIDI_mciOpen(UINT wDevID, DWORD dwFlags, LPMCI_OPEN_PARMS lpParms) dprintf_midi(stddeb, "MIDI_mciOpen // can't read 'MThd' header \n"); return MCIERR_INTERNAL; } - dwOffset = mmioSeek(MCIMidiDev[wDevID].hFile, 0, SEEK_CUR); + dwOffset = mmioSeek(MCIMidiDev[index].hFile, 0, SEEK_CUR); if (MIDI_ReadMTrk(wDevID, dwOffset) != 0) { dprintf_midi(stddeb, "MIDI_mciOpen // can't read 'MTrk' header \n"); return MCIERR_INTERNAL; } - dwOffset = mmioSeek(MCIMidiDev[wDevID].hFile, 0, SEEK_CUR); - MCIMidiDev[wDevID].dwBeginData = dwOffset; + dwOffset = mmioSeek(MCIMidiDev[index].hFile, 0, SEEK_CUR); + MCIMidiDev[index].dwBeginData = dwOffset; dprintf_midi(stddeb, "MIDI_mciOpen // Chunk Found ckid=%.4s fccType=%.4s cksize=%08lX \n", (LPSTR)&ckMainRIFF.ckid, (LPSTR)&ckMainRIFF.fccType, ckMainRIFF.cksize); } - dwRet = modMessage(0, MODM_OPEN, 0, (DWORD)&MidiDesc, CALLBACK_NULL); - dwRet = midMessage(0, MIDM_OPEN, 0, (DWORD)&MidiDesc, CALLBACK_NULL); + dwRet = modMessage(wDevID, MODM_OPEN, 0, (DWORD)&MidiDesc, CALLBACK_NULL); + dwRet = midMessage(wDevID, MIDM_OPEN, 0, (DWORD)&MidiDesc, CALLBACK_NULL); return 0; #else return MMSYSERR_NOTENABLED; @@ -362,14 +367,15 @@ static DWORD MIDI_mciOpen(UINT wDevID, DWORD dwFlags, LPMCI_OPEN_PARMS lpParms) /************************************************************************** * MIDI_mciStop [internal] */ -static DWORD MIDI_mciStop(UINT wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms) +static DWORD MIDI_mciStop(UINT16 wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms) { #if defined(linux) || defined(__FreeBSD__) - dprintf_midi(stddeb, "MIDI_mciStop(%u, %08lX, %p);\n", wDevID, dwFlags, lpParms); + int index = MMSYSTEM_DevIDToIndex(wDevID); + dprintf_midi(stddeb, "MIDI_mciStop(%04X, %08lX, %p);\n", wDevID, dwFlags, lpParms); if (lpParms == NULL) return MCIERR_INTERNAL; - MCIMidiDev[wDevID].dwStatus = MCI_MODE_STOP; - dprintf_midi(stddeb, "MIDI_mciStop // MCIMidiDev[wDevID].dwStatus=%p %d\n", - &MCIMidiDev[wDevID].dwStatus, MCIMidiDev[wDevID].dwStatus); + MCIMidiDev[index].dwStatus = MCI_MODE_STOP; + dprintf_midi(stddeb, "MIDI_mciStop // MCIMidiDev[index].dwStatus=%p %d\n", + &MCIMidiDev[index].dwStatus, MCIMidiDev[index].dwStatus); return 0; #else return MCIERR_INTERNAL; @@ -380,25 +386,26 @@ static DWORD MIDI_mciStop(UINT wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParm /************************************************************************** * MIDI_mciClose [internal] */ -static DWORD MIDI_mciClose(UINT wDevID, DWORD dwParam, LPMCI_GENERIC_PARMS lpParms) +static DWORD MIDI_mciClose(UINT16 wDevID, DWORD dwParam, LPMCI_GENERIC_PARMS lpParms) { #if defined(linux) || defined(__FreeBSD__) + int index = MMSYSTEM_DevIDToIndex(wDevID); DWORD dwRet; - dprintf_midi(stddeb, "MIDI_mciClose(%u, %08lX, %p);\n", wDevID, dwParam, lpParms); - if (MCIMidiDev[wDevID].dwStatus != MCI_MODE_STOP) { + dprintf_midi(stddeb, "MIDI_mciClose(%04X, %08lX, %p);\n", wDevID, dwParam, lpParms); + if (MCIMidiDev[index].dwStatus != MCI_MODE_STOP) { MIDI_mciStop(wDevID, MCI_WAIT, lpParms); } - MCIMidiDev[wDevID].dwStatus = MCI_MODE_STOP; - MCIMidiDev[wDevID].nUseCount--; - if (MCIMidiDev[wDevID].nUseCount == 0) { - if (MCIMidiDev[wDevID].hFile != 0) { - mmioClose(MCIMidiDev[wDevID].hFile, 0); - MCIMidiDev[wDevID].hFile = 0; + MCIMidiDev[index].dwStatus = MCI_MODE_STOP; + MCIMidiDev[index].nUseCount--; + if (MCIMidiDev[index].nUseCount == 0) { + if (MCIMidiDev[index].hFile != 0) { + mmioClose(MCIMidiDev[index].hFile, 0); + MCIMidiDev[index].hFile = 0; dprintf_midi(stddeb, "MIDI_mciClose // hFile closed !\n"); } - dwRet = modMessage(0, MODM_CLOSE, 0, 0L, 0L); + dwRet = modMessage(wDevID, MODM_CLOSE, 0, 0L, 0L); if (dwRet != MMSYSERR_NOERROR) return MCIERR_INTERNAL; - dwRet = midMessage(0, MIDM_CLOSE, 0, 0L, 0L); + dwRet = midMessage(wDevID, MIDM_CLOSE, 0, 0L, 0L); if (dwRet != MMSYSERR_NOERROR) return MCIERR_INTERNAL; } return 0; @@ -411,19 +418,20 @@ static DWORD MIDI_mciClose(UINT wDevID, DWORD dwParam, LPMCI_GENERIC_PARMS lpPar /************************************************************************** * MIDI_mciPlay [internal] */ -static DWORD MIDI_mciPlay(UINT wDevID, DWORD dwFlags, LPMCI_PLAY_PARMS lpParms) +static DWORD MIDI_mciPlay(UINT16 wDevID, DWORD dwFlags, LPMCI_PLAY_PARMS lpParms) { #if defined(linux) || defined(__FreeBSD__) + int index = MMSYSTEM_DevIDToIndex(wDevID); int count; int start, end; LPMIDIHDR lpMidiHdr; DWORD dwData; LPWORD ptr; DWORD dwRet; - dprintf_midi(stddeb, "MIDI_mciPlay(%u, %08lX, %p);\n", wDevID, dwFlags, lpParms); - if (MCIMidiDev[wDevID].hFile == 0) { - dprintf_midi(stddeb, "MIDI_mciPlay // can't find file='%s' !\n", - MCIMidiDev[wDevID].openParms.lpstrElementName); + dprintf_midi(stddeb, "MIDI_mciPlay(%04X, %08lX, %p);\n", wDevID, dwFlags, lpParms); + if (MCIMidiDev[index].hFile == 0) { + dprintf_midi(stddeb, "MIDI_mciPlay // can't find file='%08lx' !\n", + MCIMidiDev[index].openParms.lpstrElementName); return MCIERR_FILE_NOT_FOUND; } start = 1; end = 99999; @@ -451,42 +459,42 @@ static DWORD MIDI_mciPlay(UINT wDevID, DWORD dwFlags, LPMCI_PLAY_PARMS lpParms) } } #endif - lpMidiHdr = &MCIMidiDev[wDevID].MidiHdr; + lpMidiHdr = &MCIMidiDev[index].MidiHdr; lpMidiHdr->lpData = (LPSTR) malloc(1200); if (lpMidiHdr->lpData == NULL) return MCIERR_INTERNAL; lpMidiHdr->dwBufferLength = 1024; lpMidiHdr->dwUser = 0L; lpMidiHdr->dwFlags = 0L; - dwRet = modMessage(0, MODM_PREPARE, 0, (DWORD)lpMidiHdr, sizeof(MIDIHDR)); + dwRet = modMessage(wDevID, MODM_PREPARE, 0, (DWORD)lpMidiHdr, sizeof(MIDIHDR)); /* dprintf_midi(stddeb, "MIDI_mciPlay // after MODM_PREPARE \n"); */ - MCIMidiDev[wDevID].dwStatus = MCI_MODE_PLAY; - while(MCIMidiDev[wDevID].dwStatus != MCI_MODE_STOP) { - dprintf_midi(stddeb, "MIDI_mciPlay // MCIMidiDev[wDevID].dwStatus=%p %d\n", - &MCIMidiDev[wDevID].dwStatus, MCIMidiDev[wDevID].dwStatus); + MCIMidiDev[index].dwStatus = MCI_MODE_PLAY; + while(MCIMidiDev[index].dwStatus != MCI_MODE_STOP) { + dprintf_midi(stddeb, "MIDI_mciPlay // MCIMidiDev[index].dwStatus=%p %d\n", + &MCIMidiDev[index].dwStatus, MCIMidiDev[index].dwStatus); ptr = (LPWORD)lpMidiHdr->lpData; for (count = 0; count < lpMidiHdr->dwBufferLength; count++) { if (MIDI_ReadVaryLen(wDevID, &dwData) != 0) break; *ptr = LOWORD(dwData); } /* - count = mmioRead(MCIMidiDev[wDevID].hFile, lpMidiHdr->lpData, lpMidiHdr->dwBufferLength); + count = mmioRead(MCIMidiDev[index].hFile, lpMidiHdr->lpData, lpMidiHdr->dwBufferLength); */ if (count < 1) break; lpMidiHdr->dwBytesRecorded = count; dprintf_midi(stddeb, "MIDI_mciPlay // before MODM_LONGDATA lpMidiHdr=%p dwBytesRecorded=%lu\n", lpMidiHdr, lpMidiHdr->dwBytesRecorded); - dwRet = modMessage(0, MODM_LONGDATA, 0, (DWORD)lpMidiHdr, sizeof(MIDIHDR)); + dwRet = modMessage(wDevID, MODM_LONGDATA, 0, (DWORD)lpMidiHdr, sizeof(MIDIHDR)); } - dwRet = modMessage(0, MODM_UNPREPARE, 0, (DWORD)lpMidiHdr, sizeof(MIDIHDR)); + dwRet = modMessage(wDevID, MODM_UNPREPARE, 0, (DWORD)lpMidiHdr, sizeof(MIDIHDR)); if (lpMidiHdr->lpData != NULL) { free(lpMidiHdr->lpData); lpMidiHdr->lpData = NULL; } - MCIMidiDev[wDevID].dwStatus = MCI_MODE_STOP; + MCIMidiDev[index].dwStatus = MCI_MODE_STOP; if (dwFlags & MCI_NOTIFY) { dprintf_midi(stddeb, "MIDI_mciPlay // MCI_NOTIFY_SUCCESSFUL %08lX !\n", lpParms->dwCallback); mciDriverNotify((HWND16)LOWORD(lpParms->dwCallback), - MCIMidiDev[wDevID].wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL); + MCIMidiDev[index].wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL); #if 0 exit(1); #endif @@ -501,17 +509,18 @@ static DWORD MIDI_mciPlay(UINT wDevID, DWORD dwFlags, LPMCI_PLAY_PARMS lpParms) /************************************************************************** * MIDI_mciRecord [internal] */ -static DWORD MIDI_mciRecord(UINT wDevID, DWORD dwFlags, LPMCI_RECORD_PARMS lpParms) +static DWORD MIDI_mciRecord(UINT16 wDevID, DWORD dwFlags, LPMCI_RECORD_PARMS lpParms) { #if defined(linux) || defined(__FreeBSD__) + int index = MMSYSTEM_DevIDToIndex(wDevID); int start, end; LPMIDIHDR lpMidiHdr; DWORD dwRet; - dprintf_midi(stddeb, "MIDI_mciRecord(%u, %08lX, %p);\n", wDevID, dwFlags, lpParms); - if (MCIMidiDev[wDevID].hFile == 0) { - dprintf_midi(stddeb, "MIDI_mciRecord // can't find file='%s' !\n", - MCIMidiDev[wDevID].openParms.lpstrElementName); + dprintf_midi(stddeb, "MIDI_mciRecord(%04X, %08lX, %p);\n", wDevID, dwFlags, lpParms); + if (MCIMidiDev[index].hFile == 0) { + dprintf_midi(stddeb, "MIDI_mciRecord // can't find file='%08lx' !\n", + MCIMidiDev[index].openParms.lpstrElementName); return MCIERR_FILE_NOT_FOUND; } start = 1; end = 99999; @@ -523,35 +532,35 @@ static DWORD MIDI_mciRecord(UINT wDevID, DWORD dwFlags, LPMCI_RECORD_PARMS lpPar end = lpParms->dwTo; dprintf_midi(stddeb, "MIDI_mciRecord // MCI_TO=%d \n", end); } - lpMidiHdr = &MCIMidiDev[wDevID].MidiHdr; + lpMidiHdr = &MCIMidiDev[index].MidiHdr; lpMidiHdr->lpData = (LPSTR) xmalloc(1200); lpMidiHdr->dwBufferLength = 1024; lpMidiHdr->dwUser = 0L; lpMidiHdr->dwFlags = 0L; - dwRet = midMessage(0, MIDM_PREPARE, 0, (DWORD)lpMidiHdr, sizeof(MIDIHDR)); + dwRet = midMessage(wDevID, MIDM_PREPARE, 0, (DWORD)lpMidiHdr, sizeof(MIDIHDR)); dprintf_midi(stddeb, "MIDI_mciRecord // after MIDM_PREPARE \n"); - MCIMidiDev[wDevID].dwStatus = MCI_MODE_RECORD; - while(MCIMidiDev[wDevID].dwStatus != MCI_MODE_STOP) { - dprintf_midi(stddeb, "MIDI_mciRecord // MCIMidiDev[wDevID].dwStatus=%p %d\n", - &MCIMidiDev[wDevID].dwStatus, MCIMidiDev[wDevID].dwStatus); + MCIMidiDev[index].dwStatus = MCI_MODE_RECORD; + while(MCIMidiDev[index].dwStatus != MCI_MODE_STOP) { + dprintf_midi(stddeb, "MIDI_mciRecord // MCIMidiDev[index].dwStatus=%p %d\n", + &MCIMidiDev[index].dwStatus, MCIMidiDev[index].dwStatus); lpMidiHdr->dwBytesRecorded = 0; - dwRet = midMessage(0, MIDM_START, 0, 0L, 0L); + dwRet = midMessage(wDevID, MIDM_START, 0, 0L, 0L); dprintf_midi(stddeb, "MIDI_mciRecord // after MIDM_START lpMidiHdr=%p dwBytesRecorded=%lu\n", lpMidiHdr, lpMidiHdr->dwBytesRecorded); if (lpMidiHdr->dwBytesRecorded == 0) break; } dprintf_midi(stddeb, "MIDI_mciRecord // before MIDM_UNPREPARE \n"); - dwRet = midMessage(0, MIDM_UNPREPARE, 0, (DWORD)lpMidiHdr, sizeof(MIDIHDR)); + dwRet = midMessage(wDevID, MIDM_UNPREPARE, 0, (DWORD)lpMidiHdr, sizeof(MIDIHDR)); dprintf_midi(stddeb, "MIDI_mciRecord // after MIDM_UNPREPARE \n"); if (lpMidiHdr->lpData != NULL) { free(lpMidiHdr->lpData); lpMidiHdr->lpData = NULL; } - MCIMidiDev[wDevID].dwStatus = MCI_MODE_STOP; + MCIMidiDev[index].dwStatus = MCI_MODE_STOP; if (dwFlags & MCI_NOTIFY) { dprintf_midi(stddeb, "MIDI_mciRecord // MCI_NOTIFY_SUCCESSFUL %08lX !\n", lpParms->dwCallback); mciDriverNotify((HWND16)LOWORD(lpParms->dwCallback), - MCIMidiDev[wDevID].wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL); + MCIMidiDev[index].wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL); } return 0; #else @@ -563,10 +572,10 @@ static DWORD MIDI_mciRecord(UINT wDevID, DWORD dwFlags, LPMCI_RECORD_PARMS lpPar /************************************************************************** * MIDI_mciPause [internal] */ -static DWORD MIDI_mciPause(UINT wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms) +static DWORD MIDI_mciPause(UINT16 wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms) { #if defined(linux) || defined(__FreeBSD__) - dprintf_midi(stddeb, "MIDI_mciPause(%u, %08lX, %p);\n", wDevID, dwFlags, lpParms); + dprintf_midi(stddeb, "MIDI_mciPause(%04X, %08lX, %p);\n", wDevID, dwFlags, lpParms); if (lpParms == NULL) return MCIERR_INTERNAL; return 0; #else @@ -578,10 +587,10 @@ static DWORD MIDI_mciPause(UINT wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpPar /************************************************************************** * MIDI_mciResume [internal] */ -static DWORD MIDI_mciResume(UINT wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms) +static DWORD MIDI_mciResume(UINT16 wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms) { #if defined(linux) || defined(__FreeBSD__) - dprintf_midi(stddeb, "MIDI_mciResume(%u, %08lX, %p);\n", wDevID, dwFlags, lpParms); + dprintf_midi(stddeb, "MIDI_mciResume(%04X, %08lX, %p);\n", wDevID, dwFlags, lpParms); if (lpParms == NULL) return MCIERR_INTERNAL; return 0; #else @@ -593,10 +602,10 @@ static DWORD MIDI_mciResume(UINT wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpPa /************************************************************************** * MIDI_mciSet [internal] */ -static DWORD MIDI_mciSet(UINT wDevID, DWORD dwFlags, LPMCI_SET_PARMS lpParms) +static DWORD MIDI_mciSet(UINT16 wDevID, DWORD dwFlags, LPMCI_SET_PARMS lpParms) { #if defined(linux) || defined(__FreeBSD__) - dprintf_midi(stddeb, "MIDI_mciSet(%u, %08lX, %p);\n", wDevID, dwFlags, lpParms); + dprintf_midi(stddeb, "MIDI_mciSet(%04X, %08lX, %p);\n", wDevID, dwFlags, lpParms); if (lpParms == NULL) return MCIERR_INTERNAL; dprintf_midi(stddeb, "MIDI_mciSet // dwTimeFormat=%08lX\n", lpParms->dwTimeFormat); dprintf_midi(stddeb, "MIDI_mciSet // dwAudio=%08lX\n", lpParms->dwAudio); @@ -659,10 +668,11 @@ static DWORD MIDI_mciSet(UINT wDevID, DWORD dwFlags, LPMCI_SET_PARMS lpParms) /************************************************************************** * MIDI_mciStatus [internal] */ -static DWORD MIDI_mciStatus(UINT wDevID, DWORD dwFlags, LPMCI_STATUS_PARMS lpParms) +static DWORD MIDI_mciStatus(UINT16 wDevID, DWORD dwFlags, LPMCI_STATUS_PARMS lpParms) { #if defined(linux) || defined(__FreeBSD__) - dprintf_midi(stddeb, "MIDI_mciStatus(%u, %08lX, %p);\n", wDevID, dwFlags, lpParms); + int index = MMSYSTEM_DevIDToIndex(wDevID); + dprintf_midi(stddeb, "MIDI_mciStatus(%04X, %08lX, %p);\n", wDevID, dwFlags, lpParms); if (lpParms == NULL) return MCIERR_INTERNAL; if (dwFlags & MCI_STATUS_ITEM) { switch(lpParms->dwItem) { @@ -736,7 +746,7 @@ static DWORD MIDI_mciStatus(UINT wDevID, DWORD dwFlags, LPMCI_STATUS_PARMS lpPar if (dwFlags & MCI_NOTIFY) { dprintf_midi(stddeb, "MIDI_mciStatus // MCI_NOTIFY_SUCCESSFUL %08lX !\n", lpParms->dwCallback); mciDriverNotify((HWND16)LOWORD(lpParms->dwCallback), - MCIMidiDev[wDevID].wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL); + MCIMidiDev[index].wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL); } return 0; #else @@ -747,11 +757,11 @@ static DWORD MIDI_mciStatus(UINT wDevID, DWORD dwFlags, LPMCI_STATUS_PARMS lpPar /************************************************************************** * MIDI_mciGetDevCaps [internal] */ -static DWORD MIDI_mciGetDevCaps(UINT wDevID, DWORD dwFlags, +static DWORD MIDI_mciGetDevCaps(UINT16 wDevID, DWORD dwFlags, LPMCI_GETDEVCAPS_PARMS lpParms) { #if defined(linux) || defined(__FreeBSD__) - dprintf_midi(stddeb, "MIDI_mciGetDevCaps(%u, %08lX, %p);\n", wDevID, dwFlags, lpParms); + dprintf_midi(stddeb, "MIDI_mciGetDevCaps(%04X, %08lX, %p);\n", wDevID, dwFlags, lpParms); if (lpParms == NULL) return MCIERR_INTERNAL; if (dwFlags & MCI_GETDEVCAPS_ITEM) { switch(lpParms->dwItem) { @@ -795,10 +805,10 @@ static DWORD MIDI_mciGetDevCaps(UINT wDevID, DWORD dwFlags, /************************************************************************** * MIDI_mciInfo [internal] */ -static DWORD MIDI_mciInfo(UINT wDevID, DWORD dwFlags, LPMCI_INFO_PARMS lpParms) +static DWORD MIDI_mciInfo(UINT16 wDevID, DWORD dwFlags, LPMCI_INFO_PARMS lpParms) { #if defined(linux) || defined(__FreeBSD__) - dprintf_midi(stddeb, "MIDI_mciInfo(%u, %08lX, %p);\n", wDevID, dwFlags, lpParms); + dprintf_midi(stddeb, "MIDI_mciInfo(%04X, %08lX, %p);\n", wDevID, dwFlags, lpParms); if (lpParms == NULL) return MCIERR_INTERNAL; lpParms->lpstrReturn = NULL; switch(dwFlags) { @@ -830,7 +840,7 @@ static DWORD MIDI_mciInfo(UINT wDevID, DWORD dwFlags, LPMCI_INFO_PARMS lpParms) */ static DWORD midGetDevCaps(WORD wDevID, LPMIDIINCAPS lpCaps, DWORD dwSize) { - dprintf_midi(stddeb, "midGetDevCaps(%u, %p, %08lX);\n", wDevID, lpCaps, dwSize); + dprintf_midi(stddeb, "midGetDevCaps(%04X, %p, %08lX);\n", wDevID, lpCaps, dwSize); return MMSYSERR_NOTENABLED; } @@ -840,25 +850,26 @@ static DWORD midGetDevCaps(WORD wDevID, LPMIDIINCAPS lpCaps, DWORD dwSize) static DWORD midOpen(WORD wDevID, LPMIDIOPENDESC lpDesc, DWORD dwFlags) { #if defined(linux) || defined(__FreeBSD__) + int index = MMSYSTEM_DevIDToIndex(wDevID); int midi; dprintf_midi(stddeb, - "midOpen(%u, %p, %08lX);\n", wDevID, lpDesc, dwFlags); + "midOpen(%04X, %p, %08lX);\n", wDevID, lpDesc, dwFlags); if (lpDesc == NULL) { dprintf_midi(stddeb,"Linux 'midOpen' // Invalid Parameter !\n"); return MMSYSERR_INVALPARAM; } - if (wDevID >= MAX_MIDIINDRV) { + if (index >= MAX_MIDIINDRV) { dprintf_midi(stddeb,"Linux 'midOpen' // MAX_MIDIINDRV reached !\n"); return MMSYSERR_ALLOCATED; } - MidiInDev[wDevID].unixdev = 0; + MidiInDev[index].unixdev = 0; midi = open (MIDI_DEV, O_RDONLY, 0); if (midi == -1) { dprintf_midi(stddeb,"Linux 'midOpen' // can't open !\n"); return MMSYSERR_NOTENABLED; } - MidiInDev[wDevID].wFlags = HIWORD(dwFlags & CALLBACK_TYPEMASK); - switch(MidiInDev[wDevID].wFlags) { + MidiInDev[index].wFlags = HIWORD(dwFlags & CALLBACK_TYPEMASK); + switch(MidiInDev[index].wFlags) { case DCB_NULL: dprintf_midi(stddeb,"Linux 'midOpen' // CALLBACK_NULL !\n"); break; @@ -875,10 +886,10 @@ static DWORD midOpen(WORD wDevID, LPMIDIOPENDESC lpDesc, DWORD dwFlags) "Linux 'midOpen' // CALLBACK_FUNCTION !\n"); break; } - MidiInDev[wDevID].lpQueueHdr = NULL; - MidiInDev[wDevID].unixdev = midi; - MidiInDev[wDevID].dwTotalPlayed = 0; - MidiInDev[wDevID].bufsize = 0x3FFF; + MidiInDev[index].lpQueueHdr = NULL; + MidiInDev[index].unixdev = midi; + MidiInDev[index].dwTotalPlayed = 0; + MidiInDev[index].bufsize = 0x3FFF; if (MIDI_NotifyClient(wDevID, MIM_OPEN, 0L, 0L) != MMSYSERR_NOERROR) { dprintf_midi(stddeb,"Linux 'midOpen' // can't notify client !\n"); return MMSYSERR_INVALPARAM; @@ -895,14 +906,15 @@ static DWORD midOpen(WORD wDevID, LPMIDIOPENDESC lpDesc, DWORD dwFlags) static DWORD midClose(WORD wDevID) { #if defined(linux) || defined(__FreeBSD__) - dprintf_midi(stddeb, "midClose(%u);\n", wDevID); - if (MidiInDev[wDevID].unixdev == 0) { + int index = MMSYSTEM_DevIDToIndex(wDevID); + dprintf_midi(stddeb, "midClose(%04X);\n", wDevID); + if (MidiInDev[index].unixdev == 0) { dprintf_midi(stddeb,"Linux 'midClose' // can't close !\n"); return MMSYSERR_NOTENABLED; } - close(MidiInDev[wDevID].unixdev); - MidiInDev[wDevID].unixdev = 0; - MidiInDev[wDevID].bufsize = 0; + close(MidiInDev[index].unixdev); + MidiInDev[index].unixdev = 0; + MidiInDev[index].bufsize = 0; if (MIDI_NotifyClient(wDevID, MIM_CLOSE, 0L, 0L) != MMSYSERR_NOERROR) { dprintf_midi(stddeb,"Linux 'midClose' // can't notify client !\n"); return MMSYSERR_INVALPARAM; @@ -918,7 +930,7 @@ static DWORD midClose(WORD wDevID) */ static DWORD midAddBuffer(WORD wDevID, LPMIDIHDR lpMidiHdr, DWORD dwSize) { - dprintf_midi(stddeb, "midAddBuffer(%u, %p, %08lX);\n", wDevID, lpMidiHdr, dwSize); + dprintf_midi(stddeb, "midAddBuffer(%04X, %p, %08lX);\n", wDevID, lpMidiHdr, dwSize); return MMSYSERR_NOTENABLED; } @@ -927,7 +939,7 @@ static DWORD midAddBuffer(WORD wDevID, LPMIDIHDR lpMidiHdr, DWORD dwSize) */ static DWORD midPrepare(WORD wDevID, LPMIDIHDR lpMidiHdr, DWORD dwSize) { - dprintf_midi(stddeb, "midPrepare(%u, %p, %08lX);\n", wDevID, lpMidiHdr, dwSize); + dprintf_midi(stddeb, "midPrepare(%04X, %p, %08lX);\n", wDevID, lpMidiHdr, dwSize); return MMSYSERR_NOTENABLED; } @@ -936,7 +948,7 @@ static DWORD midPrepare(WORD wDevID, LPMIDIHDR lpMidiHdr, DWORD dwSize) */ static DWORD midUnprepare(WORD wDevID, LPMIDIHDR lpMidiHdr, DWORD dwSize) { - dprintf_midi(stddeb, "midUnprepare(%u, %p, %08lX);\n", wDevID, lpMidiHdr, dwSize); + dprintf_midi(stddeb, "midUnprepare(%04X, %p, %08lX);\n", wDevID, lpMidiHdr, dwSize); return MMSYSERR_NOTENABLED; } @@ -945,7 +957,7 @@ static DWORD midUnprepare(WORD wDevID, LPMIDIHDR lpMidiHdr, DWORD dwSize) */ static DWORD midReset(WORD wDevID) { - dprintf_midi(stddeb, "midReset(%u);\n", wDevID); + dprintf_midi(stddeb, "midReset(%04X);\n", wDevID); return MMSYSERR_NOTENABLED; } @@ -955,7 +967,7 @@ static DWORD midReset(WORD wDevID) */ static DWORD midStart(WORD wDevID) { - dprintf_midi(stddeb, "midStart(%u);\n", wDevID); + dprintf_midi(stddeb, "midStart(%04X);\n", wDevID); return MMSYSERR_NOTENABLED; } @@ -965,7 +977,7 @@ static DWORD midStart(WORD wDevID) */ static DWORD midStop(WORD wDevID) { - dprintf_midi(stddeb, "midStop(%u);\n", wDevID); + dprintf_midi(stddeb, "midStop(%04X);\n", wDevID); return MMSYSERR_NOTENABLED; } @@ -976,7 +988,7 @@ static DWORD midStop(WORD wDevID) DWORD midMessage(WORD wDevID, WORD wMsg, DWORD dwUser, DWORD dwParam1, DWORD dwParam2) { - dprintf_midi(stddeb, "midMessage(%u, %04X, %08lX, %08lX, %08lX);\n", + dprintf_midi(stddeb, "midMessage(%04X, %04X, %08lX, %08lX, %08lX);\n", wDevID, wMsg, dwUser, dwParam1, dwParam2); switch(wMsg) { case MIDM_OPEN: @@ -1013,7 +1025,7 @@ DWORD midMessage(WORD wDevID, WORD wMsg, DWORD dwUser, */ static DWORD modGetDevCaps(WORD wDevID, LPMIDIOUTCAPS lpCaps, DWORD dwSize) { - dprintf_midi(stddeb, "modGetDevCaps(%u, %p, %08lX);\n", wDevID, lpCaps, dwSize); + dprintf_midi(stddeb, "modGetDevCaps(%04X, %p, %08lX);\n", wDevID, lpCaps, dwSize); return MMSYSERR_NOTENABLED; } @@ -1024,25 +1036,26 @@ static DWORD modGetDevCaps(WORD wDevID, LPMIDIOUTCAPS lpCaps, DWORD dwSize) static DWORD modOpen(WORD wDevID, LPMIDIOPENDESC lpDesc, DWORD dwFlags) { #if defined(linux) || defined(__FreeBSD__) + int index = MMSYSTEM_DevIDToIndex(wDevID); int midi; dprintf_midi(stddeb, - "modOpen(%u, %p, %08lX);\n", wDevID, lpDesc, dwFlags); + "modOpen(%04X, %p, %08lX);\n", wDevID, lpDesc, dwFlags); if (lpDesc == NULL) { dprintf_midi(stddeb,"Linux 'modOpen' // Invalid Parameter !\n"); return MMSYSERR_INVALPARAM; } - if (wDevID >= MAX_MIDIOUTDRV) { + if (index >= MAX_MIDIOUTDRV) { dprintf_midi(stddeb,"Linux 'modOpen' // MAX_MIDIOUTDRV reached !\n"); return MMSYSERR_ALLOCATED; } - MidiOutDev[wDevID].unixdev = 0; + MidiOutDev[index].unixdev = 0; midi = open (MIDI_DEV, O_WRONLY, 0); if (midi == -1) { dprintf_midi(stddeb,"Linux 'modOpen' // can't open !\n"); return MMSYSERR_NOTENABLED; } - MidiOutDev[wDevID].wFlags = HIWORD(dwFlags & CALLBACK_TYPEMASK); - switch(MidiOutDev[wDevID].wFlags) { + MidiOutDev[index].wFlags = HIWORD(dwFlags & CALLBACK_TYPEMASK); + switch(MidiOutDev[index].wFlags) { case DCB_NULL: dprintf_midi(stddeb,"Linux 'modOpen' // CALLBACK_NULL !\n"); break; @@ -1059,10 +1072,10 @@ static DWORD modOpen(WORD wDevID, LPMIDIOPENDESC lpDesc, DWORD dwFlags) "Linux 'modOpen' // CALLBACK_FUNCTION !\n"); break; } - MidiOutDev[wDevID].lpQueueHdr = NULL; - MidiOutDev[wDevID].unixdev = midi; - MidiOutDev[wDevID].dwTotalPlayed = 0; - MidiOutDev[wDevID].bufsize = 0x3FFF; + MidiOutDev[index].lpQueueHdr = NULL; + MidiOutDev[index].unixdev = midi; + MidiOutDev[index].dwTotalPlayed = 0; + MidiOutDev[index].bufsize = 0x3FFF; if (MIDI_NotifyClient(wDevID, MOM_OPEN, 0L, 0L) != MMSYSERR_NOERROR) { dprintf_midi(stddeb,"Linux 'modOpen' // can't notify client !\n"); return MMSYSERR_INVALPARAM; @@ -1082,14 +1095,15 @@ static DWORD modOpen(WORD wDevID, LPMIDIOPENDESC lpDesc, DWORD dwFlags) static DWORD modClose(WORD wDevID) { #if defined(linux) || defined(__FreeBSD__) - dprintf_midi(stddeb, "modClose(%u);\n", wDevID); - if (MidiOutDev[wDevID].unixdev == 0) { + int index = MMSYSTEM_DevIDToIndex(wDevID); + dprintf_midi(stddeb, "modClose(%04X);\n", wDevID); + if (MidiOutDev[index].unixdev == 0) { dprintf_midi(stddeb,"Linux 'modClose' // can't close !\n"); return MMSYSERR_NOTENABLED; } - close(MidiOutDev[wDevID].unixdev); - MidiOutDev[wDevID].unixdev = 0; - MidiOutDev[wDevID].bufsize = 0; + close(MidiOutDev[index].unixdev); + MidiOutDev[index].unixdev = 0; + MidiOutDev[index].bufsize = 0; if (MIDI_NotifyClient(wDevID, MOM_CLOSE, 0L, 0L) != MMSYSERR_NOERROR) { dprintf_midi(stddeb,"Linux 'modClose' // can't notify client !\n"); return MMSYSERR_INVALPARAM; @@ -1106,15 +1120,16 @@ static DWORD modClose(WORD wDevID) static DWORD modData(WORD wDevID, DWORD dwParam) { #if defined(linux) || defined(__FreeBSD__) + int index = MMSYSTEM_DevIDToIndex(wDevID); WORD event; dprintf_midi(stddeb, - "modData(%u, %08lX);\n", wDevID, dwParam); - if (MidiOutDev[wDevID].unixdev == 0) { + "modData(%04X, %08lX);\n", wDevID, dwParam); + if (MidiOutDev[index].unixdev == 0) { dprintf_midi(stddeb,"Linux 'modData' // can't play !\n"); return MIDIERR_NODEVICE; } event = LOWORD(dwParam); - if (write (MidiOutDev[wDevID].unixdev, + if (write (MidiOutDev[index].unixdev, &event, sizeof(WORD)) != sizeof(WORD)) { dprintf_midi(stddeb, "modData() // error writting unixdev !\n"); @@ -1131,12 +1146,12 @@ static DWORD modData(WORD wDevID, DWORD dwParam) static DWORD modLongData(WORD wDevID, LPMIDIHDR lpMidiHdr, DWORD dwSize) { #if defined(linux) || defined(__FreeBSD__) + int index = MMSYSTEM_DevIDToIndex(wDevID); int count; LPWORD ptr; dprintf_midi(stddeb, - "modLongData(%u, %p, %08lX);\n", wDevID, lpMidiHdr, dwSize); - dprintf_midi(stddeb, "modLongData(%u, %p, %08lX);\n", wDevID, lpMidiHdr, dwSize); - if (MidiOutDev[wDevID].unixdev == 0) { + "modLongData(%04X, %p, %08lX);\n", wDevID, lpMidiHdr, dwSize); + if (MidiOutDev[index].unixdev == 0) { dprintf_midi(stddeb,"Linux 'modLongData' // can't play !\n"); return MIDIERR_NODEVICE; } @@ -1148,19 +1163,19 @@ static DWORD modLongData(WORD wDevID, LPMIDIHDR lpMidiHdr, DWORD dwSize) dprintf_midi(stddeb, "modLongData() // dwBytesRecorded %lu !\n", lpMidiHdr->dwBytesRecorded); /* - count = write (MidiOutDev[wDevID].unixdev, + count = write (MidiOutDev[index].unixdev, lpMidiHdr->lpData, lpMidiHdr->dwBytesRecorded); */ ptr = (LPWORD)lpMidiHdr->lpData; for (count = 0; count < lpMidiHdr->dwBytesRecorded; count++) { - if (write (MidiOutDev[wDevID].unixdev, ptr, + if (write (MidiOutDev[index].unixdev, ptr, sizeof(WORD)) != sizeof(WORD)) break; ptr++; } if (count != lpMidiHdr->dwBytesRecorded) { dprintf_midi(stddeb, "modLongData() // error writting unixdev #%d ! (%d != %ld)\n", - MidiOutDev[wDevID].unixdev, count, lpMidiHdr->dwBytesRecorded); + MidiOutDev[index].unixdev, count, lpMidiHdr->dwBytesRecorded); return MMSYSERR_NOTENABLED; } lpMidiHdr->dwFlags &= ~MHDR_INQUEUE; @@ -1181,18 +1196,19 @@ static DWORD modLongData(WORD wDevID, LPMIDIHDR lpMidiHdr, DWORD dwSize) static DWORD modPrepare(WORD wDevID, LPMIDIHDR lpMidiHdr, DWORD dwSize) { #if defined(linux) || defined(__FreeBSD__) + int index = MMSYSTEM_DevIDToIndex(wDevID); dprintf_midi(stddeb, - "modPrepare(%u, %p, %08lX);\n", wDevID, lpMidiHdr, dwSize); - if (MidiOutDev[wDevID].unixdev == 0) { + "modPrepare(%04X, %p, %08lX);\n", wDevID, lpMidiHdr, dwSize); + if (MidiOutDev[index].unixdev == 0) { dprintf_midi(stddeb,"Linux 'modPrepare' // can't prepare !\n"); return MMSYSERR_NOTENABLED; } - if (MidiOutDev[wDevID].lpQueueHdr != NULL) { + if (MidiOutDev[index].lpQueueHdr != NULL) { dprintf_midi(stddeb,"Linux 'modPrepare' // already prepare !\n"); return MMSYSERR_NOTENABLED; } - MidiOutDev[wDevID].dwTotalPlayed = 0; - MidiOutDev[wDevID].lpQueueHdr = lpMidiHdr; + MidiOutDev[index].dwTotalPlayed = 0; + MidiOutDev[index].lpQueueHdr = lpMidiHdr; if (lpMidiHdr->dwFlags & MHDR_INQUEUE) return MIDIERR_STILLPLAYING; lpMidiHdr->dwFlags |= MHDR_PREPARED; lpMidiHdr->dwFlags &= ~MHDR_DONE; @@ -1208,9 +1224,10 @@ static DWORD modPrepare(WORD wDevID, LPMIDIHDR lpMidiHdr, DWORD dwSize) static DWORD modUnprepare(WORD wDevID, LPMIDIHDR lpMidiHdr, DWORD dwSize) { #if defined(linux) || defined(__FreeBSD__) + int index = MMSYSTEM_DevIDToIndex(wDevID); dprintf_midi(stddeb, - "modUnprepare(%u, %p, %08lX);\n", wDevID, lpMidiHdr, dwSize); - if (MidiOutDev[wDevID].unixdev == 0) { + "modUnprepare(%04X, %p, %08lX);\n", wDevID, lpMidiHdr, dwSize); + if (MidiOutDev[index].unixdev == 0) { dprintf_midi(stddeb,"Linux 'modUnprepare' // can't unprepare !\n"); return MMSYSERR_NOTENABLED; } @@ -1225,7 +1242,7 @@ static DWORD modUnprepare(WORD wDevID, LPMIDIHDR lpMidiHdr, DWORD dwSize) */ static DWORD modReset(WORD wDevID) { - dprintf_midi(stddeb, "modReset(%u);\n", wDevID); + dprintf_midi(stddeb, "modReset(%04X);\n", wDevID); return MMSYSERR_NOTENABLED; } @@ -1236,7 +1253,7 @@ static DWORD modReset(WORD wDevID) DWORD modMessage(WORD wDevID, WORD wMsg, DWORD dwUser, DWORD dwParam1, DWORD dwParam2) { - dprintf_midi(stddeb, "modMessage(%u, %04X, %08lX, %08lX, %08lX);\n", + dprintf_midi(stddeb, "modMessage(%04X, %04X, %08lX, %08lX, %08lX);\n", wDevID, wMsg, dwUser, dwParam1, dwParam2); switch(wMsg) { case MODM_OPEN: @@ -1330,5 +1347,3 @@ LONG MIDI_DriverProc(DWORD dwDevID, HDRVR16 hDriv, WORD wMsg, /*-----------------------------------------------------------------------*/ - -#endif /* #ifdef BUILTIN_MMSYSTEM */ diff --git a/multimedia/mmaux.c b/multimedia/mmaux.c index e325fd1f470..470c78da031 100644 --- a/multimedia/mmaux.c +++ b/multimedia/mmaux.c @@ -4,12 +4,6 @@ * Copyright 1994 Martin Ayotte */ -#ifndef WINELIB -#define BUILTIN_MMSYSTEM -#endif - -#ifdef BUILTIN_MMSYSTEM - #define EMULATE_SB16 #include @@ -26,6 +20,8 @@ #include #endif +int MMSYSTEM_DevIDToIndex(UINT16); + #define SOUND_DEV "/dev/dsp" #define MIXER_DEV "/dev/mixer" @@ -49,7 +45,7 @@ static DWORD AUX_GetDevCaps(WORD wDevID, LPAUXCAPS lpCaps, DWORD dwSize) #ifdef linux int mixer; int volume; - printf("AUX_GetDevCaps(%u, %p, %lu);\n", wDevID, lpCaps, dwSize); + printf("AUX_GetDevCaps(%04X, %p, %lu);\n", wDevID, lpCaps, dwSize); if (lpCaps == NULL) return MMSYSERR_NOTENABLED; if ((mixer = open(MIXER_DEV, O_RDWR)) < 0) { printf("AUX_GetDevCaps // mixer device not available !\n"); @@ -65,7 +61,7 @@ static DWORD AUX_GetDevCaps(WORD wDevID, LPAUXCAPS lpCaps, DWORD dwSize) lpCaps->wMid = 0x0002; lpCaps->vDriverVersion = 0x0200; lpCaps->dwSupport = AUXCAPS_VOLUME | AUXCAPS_LRVOLUME; - switch (wDevID) { + switch (MMSYSTEM_DevIDToIndex(wDevID)) { case 0: lpCaps->wPid = 0x0196; strcpy(lpCaps->szPname, "SB16 Aux: Wave"); @@ -121,13 +117,13 @@ static DWORD AUX_GetVolume(WORD wDevID, LPDWORD lpdwVol) int mixer; int volume, left, right; int cmd; - printf("AUX_GetVolume(%u, %p);\n", wDevID, lpdwVol); + printf("AUX_GetVolume(%04X, %p);\n", wDevID, lpdwVol); if (lpdwVol == NULL) return MMSYSERR_NOTENABLED; if ((mixer = open(MIXER_DEV, O_RDWR)) < 0) { printf("Linux 'AUX_GetVolume' // mixer device not available !\n"); return MMSYSERR_NOTENABLED; } - switch(wDevID) { + switch(MMSYSTEM_DevIDToIndex(wDevID)) { case 0: printf("Linux 'AUX_GetVolume' // SOUND_MIXER_READ_PCM !\n"); cmd = SOUND_MIXER_READ_PCM; @@ -153,10 +149,10 @@ static DWORD AUX_GetVolume(WORD wDevID, LPDWORD lpdwVol) cmd = SOUND_MIXER_READ_VOLUME; break; default: - fprintf(stderr, "Linux 'AUX_GetVolume' // invalid device id=%d !\n", wDevID); + fprintf(stderr, "Linux 'AUX_GetVolume' // invalid device id=%04X !\n", wDevID); return MMSYSERR_NOTENABLED; } - if (ioctl(mixer, cmd, &volume) == -1) { + if (ioctl(mixer, cmd, &volume) == -1) { printf("Linux 'AUX_GetVolume' // unable read mixer !\n"); return MMSYSERR_NOTENABLED; } @@ -180,14 +176,14 @@ static DWORD AUX_SetVolume(WORD wDevID, DWORD dwParam) int mixer; int volume; int cmd; - printf("AUX_SetVolume(%u (%04X), %08lX);\n", wDevID, wDevID, dwParam); + printf("AUX_SetVolume(%04X, %08lX);\n", wDevID, dwParam); volume = (LOWORD(dwParam) >> 9 & 0x7F) + ((HIWORD(dwParam) >> 9 & 0x7F) << 8); if ((mixer = open(MIXER_DEV, O_RDWR)) < 0) { printf("Linux 'AUX_SetVolume' // mixer device not available !\n"); return MMSYSERR_NOTENABLED; } - switch(wDevID) { + switch(MMSYSTEM_DevIDToIndex(wDevID)) { case 0: printf("Linux 'AUX_SetVolume' // SOUND_MIXER_WRITE_PCM !\n"); cmd = SOUND_MIXER_WRITE_PCM; @@ -213,7 +209,7 @@ static DWORD AUX_SetVolume(WORD wDevID, DWORD dwParam) cmd = SOUND_MIXER_WRITE_VOLUME; break; default: - fprintf(stderr, "Linux 'AUX_SetVolume' // invalid device id=%d !\n", wDevID); + fprintf(stderr, "Linux 'AUX_SetVolume' // invalid device id=%04X !\n", wDevID); return MMSYSERR_NOTENABLED; } if (ioctl(mixer, cmd, &volume) == -1) { @@ -234,7 +230,7 @@ static DWORD AUX_SetVolume(WORD wDevID, DWORD dwParam) DWORD auxMessage(WORD wDevID, WORD wMsg, DWORD dwUser, DWORD dwParam1, DWORD dwParam2) { - printf("auxMessage(%u, %04X, %08lX, %08lX, %08lX);\n", + printf("auxMessage(%04X, %04X, %08lX, %08lX, %08lX);\n", wDevID, wMsg, dwUser, dwParam1, dwParam2); switch(wMsg) { case AUXDM_GETDEVCAPS: @@ -252,6 +248,3 @@ DWORD auxMessage(WORD wDevID, WORD wMsg, DWORD dwUser, } return MMSYSERR_NOTSUPPORTED; } - - -#endif /* #ifdef BUILTIN_MMSYSTEM */ diff --git a/multimedia/mmsystem.c b/multimedia/mmsystem.c index 12337a6ab52..0c232a5c7e0 100644 --- a/multimedia/mmsystem.c +++ b/multimedia/mmsystem.c @@ -7,8 +7,6 @@ * and long term pointers to 16 bit space in here */ -#ifndef WINELIB - #include #include #include @@ -16,6 +14,7 @@ #include #include #include "windows.h" +#include "heap.h" #include "ldt.h" #include "user.h" #include "driver.h" @@ -35,8 +34,8 @@ MCI_OPEN_DRIVER_PARMS mciDrv[MAXMCIDRIVERS]; */ MCI_OPEN_PARMS mciOpenDrv[MAXMCIDRIVERS]; -UINT midiGetErrorText(UINT uError, LPSTR lpText, UINT uSize); -UINT waveGetErrorText(UINT uError, LPSTR lpText, UINT uSize); +UINT16 midiGetErrorText(UINT16 uError, LPSTR lpText, UINT16 uSize); +UINT16 waveGetErrorText(UINT16 uError, LPSTR lpText, UINT16 uSize); LONG DrvDefDriverProc(DWORD dwDevID, HDRVR16 hDriv, WORD wMsg, DWORD dwParam1, DWORD dwParam2); @@ -49,6 +48,50 @@ LONG CDAUDIO_DriverProc(DWORD dwDevID, HDRVR16 hDriv, WORD wMsg, LONG ANIM_DriverProc(DWORD dwDevID, HDRVR16 hDriv, WORD wMsg, DWORD dwParam1, DWORD dwParam2); + +#define GetDrv(wDevID) (&mciDrv[MMSYSTEM_DevIDToIndex(wDevID)]) +#define GetOpenDrv(wDevID) (&mciOpenDrv[MMSYSTEM_DevIDToIndex(wDevID)]) + +/* The wDevID's returned by wine were originally in the range + * 0 - (MAXMCIDRIVERS - 1) and used directly as array indices. + * Unfortunately, ms-windows uses wDevID of zero to indicate + * errors. Now, multimedia drivers must pass the wDevID through + * MMSYSTEM_DevIDToIndex to get an index in that range. An + * aribtrary value, MMSYSTEM_MAGIC is added to the wDevID seen + * by the windows programs. + */ + +#define MMSYSTEM_MAGIC 0x0F00 + +/************************************************************************** +* MMSYSTEM_DevIDToIndex [internal] +*/ +int MMSYSTEM_DevIDToIndex(UINT16 wDevID) { + return wDevID - MMSYSTEM_MAGIC; +} + +/************************************************************************** +* MMSYSTEM_FirstDevId [internal] +*/ +UINT16 MMSYSTEM_FirstDevID(void) +{ + return MMSYSTEM_MAGIC; +} + +/************************************************************************** +* MMSYSTEM_NextDevId [internal] +*/ +UINT16 MMSYSTEM_NextDevID(UINT16 wDevID) { + return wDevID + 1; +} + +/************************************************************************** +* MMSYSTEM_DevIdValid [internal] +*/ +BOOL32 MMSYSTEM_DevIDValid(UINT16 wDevID) { + return wDevID >= 0x0F00 && wDevID < (0x0F00 + MAXMCIDRIVERS); +} + /************************************************************************** * MMSYSTEM_WEP [MMSYSTEM.1] */ @@ -63,7 +106,7 @@ int MMSYSTEM_WEP(HINSTANCE16 hInstance, WORD wDataSeg, /************************************************************************** * sndPlaySound [MMSYSTEM.2] */ -BOOL sndPlaySound(LPCSTR lpszSoundName, UINT uFlags) +BOOL16 sndPlaySound(LPCSTR lpszSoundName, UINT16 uFlags) { HMMIO16 hmmio; MMCKINFO mmckInfo; @@ -89,6 +132,12 @@ BOOL sndPlaySound(LPCSTR lpszSoundName, UINT uFlags) } hmmio = mmioOpen((LPSTR)lpszSoundName, NULL, MMIO_ALLOCBUF | MMIO_READ | MMIO_DENYWRITE); + + if (uFlags & SND_MEMORY) { + dprintf_mmsys(stddeb, "sndPlaySound // SND_MEMORY flag not implemented!\n"); + return FALSE; + } + if (hmmio == 0) { dprintf_mmsys(stddeb, "sndPlaySound // searching in SystemSound List !\n"); GetProfileString32A("Sounds", (LPSTR)lpszSoundName, "", str, sizeof(str)); @@ -201,7 +250,7 @@ LRESULT DriverProc(DWORD dwDevID, HDRVR16 hDriv, WORD wMsg, /************************************************************************** * DriverCallback [MMSYSTEM.31] */ -BOOL DriverCallback(DWORD dwCallBack, UINT uFlags, HANDLE16 hDev, +BOOL16 DriverCallback(DWORD dwCallBack, UINT16 uFlags, HANDLE16 hDev, WORD wMsg, DWORD dwUser, DWORD dwParam1, DWORD dwParam2) { dprintf_mmsys(stddeb, "DriverCallback(%08lX, %04X, %04X, %04X, %08lX, %08lX, %08lX); !\n", @@ -226,9 +275,9 @@ BOOL DriverCallback(DWORD dwCallBack, UINT uFlags, HANDLE16 hDev, /************************************************************************** * auxGetNumDevs [MMSYSTEM.350] */ -UINT auxGetNumDevs() +UINT16 auxGetNumDevs() { - UINT count = 0; + UINT16 count = 0; dprintf_mmsys(stddeb, "auxGetNumDevs !\n"); count += auxMessage(0, AUXDM_GETNUMDEVS, 0L, 0L, 0L); dprintf_mmsys(stddeb, "auxGetNumDevs return %u \n", count); @@ -238,7 +287,7 @@ UINT auxGetNumDevs() /************************************************************************** * auxGetDevCaps [MMSYSTEM.351] */ -UINT auxGetDevCaps(UINT uDeviceID, AUXCAPS * lpCaps, UINT uSize) +UINT16 auxGetDevCaps(UINT16 uDeviceID, AUXCAPS * lpCaps, UINT16 uSize) { dprintf_mmsys(stddeb, "auxGetDevCaps(%04X, %p, %d) !\n", uDeviceID, lpCaps, uSize); @@ -249,7 +298,7 @@ UINT auxGetDevCaps(UINT uDeviceID, AUXCAPS * lpCaps, UINT uSize) /************************************************************************** * auxGetVolume [MMSYSTEM.352] */ -UINT auxGetVolume(UINT uDeviceID, DWORD * lpdwVolume) +UINT16 auxGetVolume(UINT16 uDeviceID, DWORD * lpdwVolume) { dprintf_mmsys(stddeb, "auxGetVolume(%04X, %p) !\n", uDeviceID, lpdwVolume); return auxMessage(uDeviceID, AUXDM_GETVOLUME, 0L, (DWORD)lpdwVolume, 0L); @@ -258,7 +307,7 @@ UINT auxGetVolume(UINT uDeviceID, DWORD * lpdwVolume) /************************************************************************** * auxSetVolume [MMSYSTEM.353] */ -UINT auxSetVolume(UINT uDeviceID, DWORD dwVolume) +UINT16 auxSetVolume(UINT16 uDeviceID, DWORD dwVolume) { dprintf_mmsys(stddeb, "auxSetVolume(%04X, %08lX) !\n", uDeviceID, dwVolume); return auxMessage(uDeviceID, AUXDM_SETVOLUME, 0L, dwVolume, 0L); @@ -267,7 +316,7 @@ UINT auxSetVolume(UINT uDeviceID, DWORD dwVolume) /************************************************************************** * auxOutMessage [MMSYSTEM.354] */ -DWORD auxOutMessage(UINT uDeviceID, UINT uMessage, DWORD dw1, DWORD dw2) +DWORD auxOutMessage(UINT16 uDeviceID, UINT16 uMessage, DWORD dw1, DWORD dw2) { dprintf_mmsys(stddeb, "auxOutMessage(%04X, %04X, %08lX, %08lX)\n", uDeviceID, uMessage, dw1, dw2); @@ -277,7 +326,7 @@ DWORD auxOutMessage(UINT uDeviceID, UINT uMessage, DWORD dw1, DWORD dw2) /************************************************************************** * mciGetErrorString [MMSYSTEM.706] */ -BOOL mciGetErrorString (DWORD wError, LPSTR lpstrBuffer, UINT uLength) +BOOL16 mciGetErrorString (DWORD wError, LPSTR lpstrBuffer, UINT16 uLength) { LPSTR msgptr; dprintf_mmsys(stddeb, "mciGetErrorString(%08lX, %p, %d);\n", wError, lpstrBuffer, uLength); @@ -537,13 +586,13 @@ msg# 543 : tmsf /************************************************************************** * mciDriverNotify [MMSYSTEM.711] */ -BOOL mciDriverNotify(HWND16 hWndCallBack, UINT wDevID, UINT wStatus) +BOOL16 mciDriverNotify(HWND16 hWndCallBack, UINT16 wDevID, UINT16 wStatus) { dprintf_mmsys(stddeb, "mciDriverNotify(%04X, %u, %04X)\n", hWndCallBack, wDevID, wStatus); - if (!IsWindow(hWndCallBack)) return FALSE; + if (!IsWindow32(hWndCallBack)) return FALSE; dprintf_mmsys(stddeb, "mciDriverNotify // before PostMessage\n"); - PostMessage(hWndCallBack, MM_MCINOTIFY, wStatus, - MAKELONG(mciDrv[wDevID].wDeviceID, 0)); + PostMessage16( hWndCallBack, MM_MCINOTIFY, wStatus, + MAKELONG(GetDrv(wDevID)->wDeviceID, 0)); return TRUE; } @@ -551,31 +600,25 @@ BOOL mciDriverNotify(HWND16 hWndCallBack, UINT wDevID, UINT wStatus) * mciOpen [internal] */ -#define _MCI_STRDUP_TO_SEG(dest,source) {\ - HLOCAL16 x;\ - x=USER_HEAP_ALLOC(strlen(source)+1);\ - dest=(LPSTR)MAKELONG(x,USER_HeapSel);\ - strcpy(PTR_SEG_TO_LIN(dest),source);\ -} - DWORD mciOpen(DWORD dwParam, LPMCI_OPEN_PARMS lp16Parms) { char str[128]; LPMCI_OPEN_PARMS lpParms; - UINT uDevTyp = 0; - UINT wDevID = 0; + UINT16 uDevTyp = 0; + UINT16 wDevID = MMSYSTEM_FirstDevID(); lpParms = PTR_SEG_TO_LIN(lp16Parms); dprintf_mmsys(stddeb, "mciOpen(%08lX, %p (%p))\n", dwParam, lp16Parms, lpParms); if (lp16Parms == NULL) return MCIERR_INTERNAL; - while(mciDrv[wDevID].wType != 0) { - if (++wDevID >= MAXMCIDRIVERS) { + while(GetDrv(wDevID)->wType != 0) { + wDevID = MMSYSTEM_NextDevID(wDevID); + if (!MMSYSTEM_DevIDValid(wDevID)) { dprintf_mmsys(stddeb, "MCI_OPEN // MAXMCIDRIVERS reached !\n"); return MCIERR_INTERNAL; } } - dprintf_mmsys(stddeb, "mciOpen // wDevID=%d \n", wDevID); - memcpy(&mciOpenDrv[wDevID],lpParms,sizeof(*lpParms)); + dprintf_mmsys(stddeb, "mciOpen // wDevID=%04X \n", wDevID); + memcpy(GetOpenDrv(wDevID),lpParms,sizeof(*lpParms)); if (dwParam & MCI_OPEN_ELEMENT) { char *s,*t; @@ -616,25 +659,21 @@ DWORD mciOpen(DWORD dwParam, LPMCI_OPEN_PARMS lp16Parms) if (dwParam & MCI_OPEN_ALIAS) { dprintf_mmsys(stddeb, "MCI_OPEN // Alias='%s' !\n", (char*)PTR_SEG_TO_LIN(lpParms->lpstrAlias)); - _MCI_STRDUP_TO_SEG( - mciOpenDrv[wDevID].lpstrAlias, - (char*)PTR_SEG_TO_LIN(lpParms->lpstrAlias) - ); + GetOpenDrv(wDevID)->lpstrAlias = SEGPTR_GET( + SEGPTR_STRDUP((char*)PTR_SEG_TO_LIN(lpParms->lpstrAlias))); /* mplayer does allocate alias to CDAUDIO */ } if (dwParam & MCI_OPEN_TYPE) { if (dwParam & MCI_OPEN_TYPE_ID) { - dprintf_mmsys(stddeb, "MCI_OPEN // Dev=%p !\n", lpParms->lpstrDeviceType); + dprintf_mmsys(stddeb, "MCI_OPEN // Dev=%08lx !\n", lpParms->lpstrDeviceType); uDevTyp = LOWORD((DWORD)lpParms->lpstrDeviceType); - mciOpenDrv[wDevID].lpstrDeviceType=lpParms->lpstrDeviceType; + GetOpenDrv(wDevID)->lpstrDeviceType=lpParms->lpstrDeviceType; } else { if (lpParms->lpstrDeviceType == NULL) return MCIERR_INTERNAL; dprintf_mmsys(stddeb, "MCI_OPEN // Dev='%s' !\n", (char*)PTR_SEG_TO_LIN(lpParms->lpstrDeviceType)); - _MCI_STRDUP_TO_SEG( - mciOpenDrv[wDevID].lpstrDeviceType, - (char*)PTR_SEG_TO_LIN(lpParms->lpstrDeviceType) - ); + GetOpenDrv(wDevID)->lpstrDeviceType = SEGPTR_GET( + SEGPTR_STRDUP((char*)PTR_SEG_TO_LIN(lpParms->lpstrDeviceType))); strcpy(str, PTR_SEG_TO_LIN(lpParms->lpstrDeviceType)); CharUpper32A(str); if (strcmp(str, "CDAUDIO") == 0) { @@ -654,35 +693,32 @@ DWORD mciOpen(DWORD dwParam, LPMCI_OPEN_PARMS lp16Parms) } } } - mciDrv[wDevID].wType = uDevTyp; - mciDrv[wDevID].wDeviceID = wDevID; + GetDrv(wDevID)->wType = uDevTyp; + GetDrv(wDevID)->wDeviceID = wDevID; lpParms->wDeviceID = wDevID; dprintf_mmsys(stddeb, "MCI_OPEN // mcidev=%d, uDevTyp=%04X wDeviceID=%04X !\n", wDevID, uDevTyp, lpParms->wDeviceID); - switch(uDevTyp) { - case MCI_DEVTYPE_CD_AUDIO: -#ifdef WINELIB - WINELIB_UNIMP ("CDAUDIO_DriverProc"); -#else - return CDAUDIO_DriverProc(0, 0, MCI_OPEN_DRIVER, - dwParam, (DWORD)lp16Parms); -#endif - case MCI_DEVTYPE_WAVEFORM_AUDIO: - return WAVE_DriverProc(0, 0, MCI_OPEN_DRIVER, - dwParam, (DWORD)lp16Parms); - case MCI_DEVTYPE_SEQUENCER: - return MIDI_DriverProc(0, 0, MCI_OPEN_DRIVER, - dwParam, (DWORD)lp16Parms); - case MCI_DEVTYPE_ANIMATION: - return ANIM_DriverProc(0, 0, MCI_OPEN_DRIVER, - dwParam, (DWORD)lp16Parms); - case MCI_DEVTYPE_DIGITAL_VIDEO: - dprintf_mmsys(stddeb, "MCI_OPEN // No DIGITAL_VIDEO yet !\n"); - return MCIERR_DEVICE_NOT_INSTALLED; - default: - dprintf_mmsys(stddeb, "MCI_OPEN // Invalid Device Name '%p' !\n", lpParms->lpstrDeviceType); - return MCIERR_INVALID_DEVICE_NAME; - } + switch(uDevTyp) + { + case MCI_DEVTYPE_CD_AUDIO: + return CDAUDIO_DriverProc( 0, 0, MCI_OPEN_DRIVER, + dwParam, (DWORD)lp16Parms); + case MCI_DEVTYPE_WAVEFORM_AUDIO: + return WAVE_DriverProc( 0, 0, MCI_OPEN_DRIVER, + dwParam, (DWORD)lp16Parms); + case MCI_DEVTYPE_SEQUENCER: + return MIDI_DriverProc( 0, 0, MCI_OPEN_DRIVER, + dwParam, (DWORD)lp16Parms); + case MCI_DEVTYPE_ANIMATION: + return ANIM_DriverProc( 0, 0, MCI_OPEN_DRIVER, + dwParam, (DWORD)lp16Parms); + case MCI_DEVTYPE_DIGITAL_VIDEO: + dprintf_mmsys(stddeb, "MCI_OPEN // No DIGITAL_VIDEO yet !\n"); + return MCIERR_DEVICE_NOT_INSTALLED; + default: + dprintf_mmsys(stddeb, "MCI_OPEN // Invalid Device Name '%08lx' !\n", lpParms->lpstrDeviceType); + return MCIERR_INVALID_DEVICE_NAME; + } return MCIERR_INTERNAL; } @@ -690,33 +726,34 @@ DWORD mciOpen(DWORD dwParam, LPMCI_OPEN_PARMS lp16Parms) /************************************************************************** * mciClose [internal] */ -DWORD mciClose(UINT wDevID, DWORD dwParam, LPMCI_GENERIC_PARMS lpParms) +DWORD mciClose(UINT16 wDevID, DWORD dwParam, LPMCI_GENERIC_PARMS lpParms) { DWORD dwRet = MCIERR_INTERNAL; dprintf_mmsys(stddeb, "mciClose(%u, %08lX, %p)\n", wDevID, dwParam, lpParms); - switch(mciDrv[wDevID].wType) { + switch(GetDrv(wDevID)->wType) { case MCI_DEVTYPE_CD_AUDIO: -#ifndef WINELIB - dwRet = CDAUDIO_DriverProc(mciDrv[wDevID].wDeviceID, 0, - MCI_CLOSE, dwParam, (DWORD)lpParms); -#endif + dwRet = CDAUDIO_DriverProc(GetDrv(wDevID)->wDeviceID,0, + MCI_CLOSE, dwParam, (DWORD)lpParms); break; case MCI_DEVTYPE_WAVEFORM_AUDIO: - dwRet = WAVE_DriverProc(mciDrv[wDevID].wDeviceID, 0, - MCI_CLOSE, dwParam, (DWORD)lpParms); + dwRet = WAVE_DriverProc(GetDrv(wDevID)->wDeviceID, 0, + MCI_CLOSE, dwParam, + (DWORD)lpParms); break; case MCI_DEVTYPE_SEQUENCER: - dwRet = MIDI_DriverProc(mciDrv[wDevID].wDeviceID, 0, - MCI_CLOSE, dwParam, (DWORD)lpParms); + dwRet = MIDI_DriverProc(GetDrv(wDevID)->wDeviceID, 0, + MCI_CLOSE, dwParam, + (DWORD)lpParms); break; case MCI_DEVTYPE_ANIMATION: - dwRet = ANIM_DriverProc(mciDrv[wDevID].wDeviceID, 0, - MCI_CLOSE, dwParam, (DWORD)lpParms); + dwRet = ANIM_DriverProc(GetDrv(wDevID)->wDeviceID, 0, + MCI_CLOSE, dwParam, + (DWORD)lpParms); break; default: - dprintf_mmsys(stddeb, "mciClose() // unknown device type=%04X !\n", mciDrv[wDevID].wType); + dprintf_mmsys(stddeb, "mciClose() // unknown device type=%04X !\n", GetDrv(wDevID)->wType); } - mciDrv[wDevID].wType = 0; + GetDrv(wDevID)->wType = 0; return dwRet; } @@ -772,7 +809,7 @@ DWORD mciSysInfo(DWORD dwFlags, LPMCI_SYSINFO_PARMS lpParms) /************************************************************************** * mciSound [internal] */ -DWORD mciSound(UINT wDevID, DWORD dwParam, LPMCI_SOUND_PARMS lpParms) +DWORD mciSound(UINT16 wDevID, DWORD dwParam, LPMCI_SOUND_PARMS lpParms) { if (lpParms == NULL) return MCIERR_INTERNAL; if (dwParam & MCI_SOUND_NAME) @@ -781,62 +818,127 @@ DWORD mciSound(UINT wDevID, DWORD dwParam, LPMCI_SOUND_PARMS lpParms) } +static const char *_mciCommandToString(UINT16 wMsg) +{ + static char buffer[100]; + +#define CASE(s) case (s): return #s + + switch (wMsg) { + CASE(MCI_OPEN); + CASE(MCI_CLOSE); + CASE(MCI_ESCAPE); + CASE(MCI_PLAY); + CASE(MCI_SEEK); + CASE(MCI_STOP); + CASE(MCI_PAUSE); + CASE(MCI_INFO); + CASE(MCI_GETDEVCAPS); + CASE(MCI_SPIN); + CASE(MCI_SET); + CASE(MCI_STEP); + CASE(MCI_RECORD); + CASE(MCI_SYSINFO); + CASE(MCI_BREAK); + CASE(MCI_SAVE); + CASE(MCI_STATUS); + CASE(MCI_CUE); + CASE(MCI_REALIZE); + CASE(MCI_WINDOW); + CASE(MCI_PUT); + CASE(MCI_WHERE); + CASE(MCI_FREEZE); + CASE(MCI_UNFREEZE); + CASE(MCI_LOAD); + CASE(MCI_CUT); + CASE(MCI_COPY); + CASE(MCI_PASTE); + CASE(MCI_UPDATE); + CASE(MCI_RESUME); + CASE(MCI_DELETE); + default: + sprintf(buffer, "%04X", wMsg); + return buffer; + + } +} /************************************************************************** * mciSendCommand [MMSYSTEM.701] */ -DWORD mciSendCommand(UINT wDevID, UINT wMsg, DWORD dwParam1, DWORD dwParam2) +DWORD mciSendCommand(UINT16 wDevID, UINT16 wMsg, DWORD dwParam1, DWORD dwParam2) { - HDRVR16 hDrv = 0; - dprintf_mci(stddeb, "mciSendCommand(%04X, %04X, %08lX, %08lX)\n", - wDevID, wMsg, dwParam1, dwParam2); - switch(wMsg) { - case MCI_OPEN: - return mciOpen(dwParam1, (LPMCI_OPEN_PARMS)dwParam2); - case MCI_CLOSE: - return mciClose(wDevID, dwParam1, (LPMCI_GENERIC_PARMS)PTR_SEG_TO_LIN(dwParam2)); - case MCI_SYSINFO: - return mciSysInfo(dwParam1, (LPMCI_SYSINFO_PARMS)PTR_SEG_TO_LIN(dwParam2)); - default: - switch(mciDrv[wDevID].wType) { - case MCI_DEVTYPE_CD_AUDIO: -#ifndef WINELIB - return CDAUDIO_DriverProc(mciDrv[wDevID].wDeviceID, hDrv, - wMsg, dwParam1, dwParam2); -#endif - - case MCI_DEVTYPE_WAVEFORM_AUDIO: - return WAVE_DriverProc(mciDrv[wDevID].wDeviceID, hDrv, - wMsg, dwParam1, dwParam2); - case MCI_DEVTYPE_SEQUENCER: - return MIDI_DriverProc(mciDrv[wDevID].wDeviceID, hDrv, - wMsg, dwParam1, dwParam2); - case MCI_DEVTYPE_ANIMATION: - return ANIM_DriverProc(mciDrv[wDevID].wDeviceID, hDrv, - wMsg, dwParam1, dwParam2); - default: - dprintf_mci(stddeb, "mciSendCommand() // unknown device type=%04X !\n", - mciDrv[wDevID].wType); - } - } - return MMSYSERR_INVALPARAM; + HDRVR16 hDrv = 0; + dprintf_mci(stddeb, "mciSendCommand(%04X, %s, %08lX, %08lX)\n", + wDevID, _mciCommandToString(wMsg), dwParam1, dwParam2); + switch(wMsg) + { + case MCI_OPEN: + return mciOpen(dwParam1, (LPMCI_OPEN_PARMS)dwParam2); + case MCI_CLOSE: + return mciClose( wDevID, dwParam1, + (LPMCI_GENERIC_PARMS)PTR_SEG_TO_LIN(dwParam2)); + case MCI_SYSINFO: + return mciSysInfo( dwParam1, + (LPMCI_SYSINFO_PARMS)PTR_SEG_TO_LIN(dwParam2)); + default: + switch(GetDrv(wDevID)->wType) + { + case MCI_DEVTYPE_CD_AUDIO: + return CDAUDIO_DriverProc(GetDrv(wDevID)->wDeviceID, hDrv, + wMsg, dwParam1, dwParam2); + case MCI_DEVTYPE_WAVEFORM_AUDIO: + return WAVE_DriverProc(GetDrv(wDevID)->wDeviceID, hDrv, + wMsg, dwParam1, dwParam2); + case MCI_DEVTYPE_SEQUENCER: + return MIDI_DriverProc(GetDrv(wDevID)->wDeviceID, hDrv, + wMsg, dwParam1, dwParam2); + case MCI_DEVTYPE_ANIMATION: + return ANIM_DriverProc(GetDrv(wDevID)->wDeviceID, hDrv, + wMsg, dwParam1, dwParam2); + default: + dprintf_mci(stddeb, + "mciSendCommand() // unknown device type=%04X !\n", + GetDrv(wDevID)->wType); + } + } + return MMSYSERR_INVALPARAM; } /************************************************************************** * mciGetDeviceID [MMSYSTEM.703] */ -UINT mciGetDeviceID (LPCSTR lpstrName) +UINT16 mciGetDeviceID (LPCSTR lpstrName) { - dprintf_mci(stddeb, "mciGetDeviceID(%s)\n", lpstrName); + UINT16 wDevID; + + dprintf_mci(stddeb, "mciGetDeviceID(\"%s\")\n", lpstrName); if (lpstrName && !lstrcmpi32A(lpstrName, "ALL")) return MCI_ALL_DEVICE_ID; + + if (!lpstrName) + return 0; + + wDevID = MMSYSTEM_FirstDevID(); + while(GetDrv(wDevID)->wType) { + if (GetOpenDrv(wDevID)->lpstrDeviceType && + strcmp(PTR_SEG_TO_LIN(GetOpenDrv(wDevID)->lpstrDeviceType), lpstrName) == 0) + return wDevID; + + if (GetOpenDrv(wDevID)->lpstrAlias && + strcmp(PTR_SEG_TO_LIN(GetOpenDrv(wDevID)->lpstrAlias), lpstrName) == 0) + return wDevID; + + wDevID = MMSYSTEM_NextDevID(wDevID); + } + return 0; } /************************************************************************** * mciSetYieldProc [MMSYSTEM.714] */ -BOOL mciSetYieldProc (UINT uDeviceID, +BOOL16 mciSetYieldProc (UINT16 uDeviceID, YIELDPROC fpYieldProc, DWORD dwYieldData) { return FALSE; @@ -845,7 +947,7 @@ BOOL mciSetYieldProc (UINT uDeviceID, /************************************************************************** * mciGetDeviceIDFromElementID [MMSYSTEM.715] */ -UINT mciGetDeviceIDFromElementID(DWORD dwElementID, LPCSTR lpstrType) +UINT16 mciGetDeviceIDFromElementID(DWORD dwElementID, LPCSTR lpstrType) { return 0; } @@ -853,7 +955,7 @@ UINT mciGetDeviceIDFromElementID(DWORD dwElementID, LPCSTR lpstrType) /************************************************************************** * mciGetYieldProc [MMSYSTEM.716] */ -YIELDPROC mciGetYieldProc(UINT uDeviceID, DWORD * lpdwYieldData) +YIELDPROC mciGetYieldProc(UINT16 uDeviceID, DWORD * lpdwYieldData) { return NULL; } @@ -861,7 +963,7 @@ YIELDPROC mciGetYieldProc(UINT uDeviceID, DWORD * lpdwYieldData) /************************************************************************** * mciGetCreatorTask [MMSYSTEM.717] */ -HTASK16 mciGetCreatorTask(UINT uDeviceID) +HTASK16 mciGetCreatorTask(UINT16 uDeviceID) { return 0; } @@ -869,9 +971,9 @@ HTASK16 mciGetCreatorTask(UINT uDeviceID) /************************************************************************** * midiOutGetNumDevs [MMSYSTEM.201] */ -UINT midiOutGetNumDevs(void) +UINT16 midiOutGetNumDevs(void) { - UINT count = 0; + UINT16 count = 0; dprintf_mmsys(stddeb, "midiOutGetNumDevs\n"); count += modMessage(0, MODM_GETNUMDEVS, 0L, 0L, 0L); dprintf_mmsys(stddeb, "midiOutGetNumDevs return %u \n", count); @@ -881,7 +983,7 @@ UINT midiOutGetNumDevs(void) /************************************************************************** * midiOutGetDevCaps [MMSYSTEM.202] */ -UINT midiOutGetDevCaps(UINT uDeviceID, MIDIOUTCAPS * lpCaps, UINT uSize) +UINT16 midiOutGetDevCaps(UINT16 uDeviceID, MIDIOUTCAPS * lpCaps, UINT16 uSize) { dprintf_mmsys(stddeb, "midiOutGetDevCaps\n"); return 0; @@ -890,7 +992,7 @@ UINT midiOutGetDevCaps(UINT uDeviceID, MIDIOUTCAPS * lpCaps, UINT uSize) /************************************************************************** * midiOutGetErrorText [MMSYSTEM.203] */ -UINT midiOutGetErrorText(UINT uError, LPSTR lpText, UINT uSize) +UINT16 midiOutGetErrorText(UINT16 uError, LPSTR lpText, UINT16 uSize) { dprintf_mmsys(stddeb, "midiOutGetErrorText\n"); return midiGetErrorText(uError, lpText, uSize); @@ -900,7 +1002,7 @@ UINT midiOutGetErrorText(UINT uError, LPSTR lpText, UINT uSize) /************************************************************************** * midiGetErrorText [internal] */ -UINT midiGetErrorText(UINT uError, LPSTR lpText, UINT uSize) +UINT16 midiGetErrorText(UINT16 uError, LPSTR lpText, UINT16 uSize) { LPSTR msgptr; if ((lpText == NULL) || (uSize < 1)) return(FALSE); @@ -945,18 +1047,18 @@ msg# 343 : There are no MIDI devices installed on the system. Use the Drivers op /************************************************************************** * midiOutOpen [MMSYSTEM.204] */ -UINT midiOutOpen(HMIDIOUT16 * lphMidiOut, UINT uDeviceID, +UINT16 midiOutOpen(HMIDIOUT16 * lphMidiOut, UINT16 uDeviceID, DWORD dwCallback, DWORD dwInstance, DWORD dwFlags) { HMIDI16 hMidiOut; LPMIDIOPENDESC lpDesc; LPMIDIOPENDESC lp16Desc; DWORD dwRet = 0; - BOOL bMapperFlg = FALSE; + BOOL32 bMapperFlg = FALSE; if (lphMidiOut != NULL) *lphMidiOut = 0; dprintf_mmsys(stddeb, "midiOutOpen(%p, %d, %08lX, %08lX, %08lX);\n", lphMidiOut, uDeviceID, dwCallback, dwInstance, dwFlags); - if (uDeviceID == (UINT)MIDI_MAPPER) { + if (uDeviceID == (UINT16)MIDI_MAPPER) { dprintf_mmsys(stddeb, "midiOutOpen // MIDI_MAPPER mode requested !\n"); bMapperFlg = TRUE; uDeviceID = 0; @@ -983,7 +1085,7 @@ UINT midiOutOpen(HMIDIOUT16 * lphMidiOut, UINT uDeviceID, /************************************************************************** * midiOutClose [MMSYSTEM.205] */ -UINT midiOutClose(HMIDIOUT16 hMidiOut) +UINT16 midiOutClose(HMIDIOUT16 hMidiOut) { LPMIDIOPENDESC lpDesc; dprintf_mmsys(stddeb, "midiOutClose(%04X)\n", hMidiOut); @@ -995,8 +1097,8 @@ UINT midiOutClose(HMIDIOUT16 hMidiOut) /************************************************************************** * midiOutPrepareHeader [MMSYSTEM.206] */ -UINT midiOutPrepareHeader(HMIDIOUT16 hMidiOut, - MIDIHDR * lpMidiOutHdr, UINT uSize) +UINT16 midiOutPrepareHeader(HMIDIOUT16 hMidiOut, + MIDIHDR * lpMidiOutHdr, UINT16 uSize) { LPMIDIOPENDESC lpDesc; dprintf_mmsys(stddeb, "midiOutPrepareHeader(%04X, %p, %d)\n", @@ -1010,8 +1112,8 @@ UINT midiOutPrepareHeader(HMIDIOUT16 hMidiOut, /************************************************************************** * midiOutUnprepareHeader [MMSYSTEM.207] */ -UINT midiOutUnprepareHeader(HMIDIOUT16 hMidiOut, - MIDIHDR * lpMidiOutHdr, UINT uSize) +UINT16 midiOutUnprepareHeader(HMIDIOUT16 hMidiOut, + MIDIHDR * lpMidiOutHdr, UINT16 uSize) { LPMIDIOPENDESC lpDesc; dprintf_mmsys(stddeb, "midiOutUnprepareHeader(%04X, %p, %d)\n", @@ -1025,7 +1127,7 @@ UINT midiOutUnprepareHeader(HMIDIOUT16 hMidiOut, /************************************************************************** * midiOutShortMsg [MMSYSTEM.208] */ -UINT midiOutShortMsg(HMIDIOUT16 hMidiOut, DWORD dwMsg) +UINT16 midiOutShortMsg(HMIDIOUT16 hMidiOut, DWORD dwMsg) { LPMIDIOPENDESC lpDesc; dprintf_mmsys(stddeb, "midiOutShortMsg(%04X, %08lX)\n", hMidiOut, dwMsg); @@ -1037,8 +1139,8 @@ UINT midiOutShortMsg(HMIDIOUT16 hMidiOut, DWORD dwMsg) /************************************************************************** * midiOutLongMsg [MMSYSTEM.209] */ -UINT midiOutLongMsg(HMIDIOUT16 hMidiOut, - MIDIHDR * lpMidiOutHdr, UINT uSize) +UINT16 midiOutLongMsg(HMIDIOUT16 hMidiOut, + MIDIHDR * lpMidiOutHdr, UINT16 uSize) { LPMIDIOPENDESC lpDesc; dprintf_mmsys(stddeb, "midiOutLongMsg(%04X, %p, %d)\n", @@ -1052,7 +1154,7 @@ UINT midiOutLongMsg(HMIDIOUT16 hMidiOut, /************************************************************************** * midiOutReset [MMSYSTEM.210] */ -UINT midiOutReset(HMIDIOUT16 hMidiOut) +UINT16 midiOutReset(HMIDIOUT16 hMidiOut) { LPMIDIOPENDESC lpDesc; dprintf_mmsys(stddeb, "midiOutReset(%04X)\n", hMidiOut); @@ -1064,7 +1166,7 @@ UINT midiOutReset(HMIDIOUT16 hMidiOut) /************************************************************************** * midiOutGetVolume [MMSYSTEM.211] */ -UINT midiOutGetVolume(UINT uDeviceID, DWORD * lpdwVolume) +UINT16 midiOutGetVolume(UINT16 uDeviceID, DWORD * lpdwVolume) { dprintf_mmsys(stddeb, "midiOutGetVolume(%04X, %p);\n", uDeviceID, lpdwVolume); return modMessage(uDeviceID, MODM_GETVOLUME, 0L, (DWORD)lpdwVolume, 0L); @@ -1074,7 +1176,7 @@ UINT midiOutGetVolume(UINT uDeviceID, DWORD * lpdwVolume) /************************************************************************** * midiOutSetVolume [MMSYSTEM.212] */ -UINT midiOutSetVolume(UINT uDeviceID, DWORD dwVolume) +UINT16 midiOutSetVolume(UINT16 uDeviceID, DWORD dwVolume) { dprintf_mmsys(stddeb, "midiOutSetVolume(%04X, %08lX);\n", uDeviceID, dwVolume); return modMessage(uDeviceID, MODM_SETVOLUME, 0L, dwVolume, 0L); @@ -1084,8 +1186,8 @@ UINT midiOutSetVolume(UINT uDeviceID, DWORD dwVolume) /************************************************************************** * midiOutCachePatches [MMSYSTEM.213] */ -UINT midiOutCachePatches(HMIDIOUT16 hMidiOut, - UINT uBank, WORD * lpwPatchArray, UINT uFlags) +UINT16 midiOutCachePatches(HMIDIOUT16 hMidiOut, + UINT16 uBank, WORD * lpwPatchArray, UINT16 uFlags) { /* not really necessary to support this */ fprintf(stdnimp, "midiOutCachePatches: not supported yet\n"); @@ -1095,8 +1197,8 @@ UINT midiOutCachePatches(HMIDIOUT16 hMidiOut, /************************************************************************** * midiOutCacheDrumPatches [MMSYSTEM.214] */ -UINT midiOutCacheDrumPatches(HMIDIOUT16 hMidiOut, - UINT uPatch, WORD * lpwKeyArray, UINT uFlags) +UINT16 midiOutCacheDrumPatches(HMIDIOUT16 hMidiOut, + UINT16 uPatch, WORD * lpwKeyArray, UINT16 uFlags) { fprintf(stdnimp, "midiOutCacheDrumPatchesi: not supported yet\n"); return MMSYSERR_NOTSUPPORTED; @@ -1105,7 +1207,7 @@ UINT midiOutCacheDrumPatches(HMIDIOUT16 hMidiOut, /************************************************************************** * midiOutGetID [MMSYSTEM.215] */ -UINT midiOutGetID(HMIDIOUT16 hMidiOut, UINT * lpuDeviceID) +UINT16 midiOutGetID(HMIDIOUT16 hMidiOut, UINT16 * lpuDeviceID) { dprintf_mmsys(stddeb, "midiOutGetID\n"); return 0; @@ -1114,7 +1216,7 @@ UINT midiOutGetID(HMIDIOUT16 hMidiOut, UINT * lpuDeviceID) /************************************************************************** * midiOutMessage [MMSYSTEM.216] */ -DWORD midiOutMessage(HMIDIOUT16 hMidiOut, UINT uMessage, +DWORD midiOutMessage(HMIDIOUT16 hMidiOut, UINT16 uMessage, DWORD dwParam1, DWORD dwParam2) { LPMIDIOPENDESC lpDesc; @@ -1129,9 +1231,9 @@ DWORD midiOutMessage(HMIDIOUT16 hMidiOut, UINT uMessage, /************************************************************************** * midiInGetNumDevs [MMSYSTEM.301] */ -UINT midiInGetNumDevs(void) +UINT16 midiInGetNumDevs(void) { - UINT count = 0; + UINT16 count = 0; dprintf_mmsys(stddeb, "midiInGetNumDevs\n"); count += midMessage(0, MIDM_GETNUMDEVS, 0L, 0L, 0L); dprintf_mmsys(stddeb, "midiInGetNumDevs return %u \n", count); @@ -1141,8 +1243,8 @@ UINT midiInGetNumDevs(void) /************************************************************************** * midiInGetDevCaps [MMSYSTEM.302] */ -UINT midiInGetDevCaps(UINT uDeviceID, - LPMIDIINCAPS lpCaps, UINT uSize) +UINT16 midiInGetDevCaps(UINT16 uDeviceID, + LPMIDIINCAPS lpCaps, UINT16 uSize) { dprintf_mmsys(stddeb, "midiInGetDevCaps\n"); return 0; @@ -1151,7 +1253,7 @@ UINT midiInGetDevCaps(UINT uDeviceID, /************************************************************************** * midiInGetErrorText [MMSYSTEM.303] */ -UINT midiInGetErrorText(UINT uError, LPSTR lpText, UINT uSize) +UINT16 midiInGetErrorText(UINT16 uError, LPSTR lpText, UINT16 uSize) { dprintf_mmsys(stddeb, "midiInGetErrorText\n"); return (midiGetErrorText(uError, lpText, uSize)); @@ -1160,18 +1262,18 @@ UINT midiInGetErrorText(UINT uError, LPSTR lpText, UINT uSize) /************************************************************************** * midiInOpen [MMSYSTEM.304] */ -UINT midiInOpen(HMIDIIN16 * lphMidiIn, UINT uDeviceID, +UINT16 midiInOpen(HMIDIIN16 * lphMidiIn, UINT16 uDeviceID, DWORD dwCallback, DWORD dwInstance, DWORD dwFlags) { HMIDI16 hMidiIn; LPMIDIOPENDESC lpDesc; LPMIDIOPENDESC lp16Desc; DWORD dwRet = 0; - BOOL bMapperFlg = FALSE; + BOOL32 bMapperFlg = FALSE; if (lphMidiIn != NULL) *lphMidiIn = 0; dprintf_mmsys(stddeb, "midiInOpen(%p, %d, %08lX, %08lX, %08lX);\n", lphMidiIn, uDeviceID, dwCallback, dwInstance, dwFlags); - if (uDeviceID == (UINT)MIDI_MAPPER) { + if (uDeviceID == (UINT16)MIDI_MAPPER) { dprintf_mmsys(stddeb, "midiInOpen // MIDI_MAPPER mode requested !\n"); bMapperFlg = TRUE; uDeviceID = 0; @@ -1198,7 +1300,7 @@ UINT midiInOpen(HMIDIIN16 * lphMidiIn, UINT uDeviceID, /************************************************************************** * midiInClose [MMSYSTEM.305] */ -UINT midiInClose(HMIDIIN16 hMidiIn) +UINT16 midiInClose(HMIDIIN16 hMidiIn) { LPMIDIOPENDESC lpDesc; dprintf_mmsys(stddeb, "midiInClose(%04X)\n", hMidiIn); @@ -1210,8 +1312,8 @@ UINT midiInClose(HMIDIIN16 hMidiIn) /************************************************************************** * midiInPrepareHeader [MMSYSTEM.306] */ -UINT midiInPrepareHeader(HMIDIIN16 hMidiIn, - MIDIHDR * lpMidiInHdr, UINT uSize) +UINT16 midiInPrepareHeader(HMIDIIN16 hMidiIn, + MIDIHDR * lpMidiInHdr, UINT16 uSize) { LPMIDIOPENDESC lpDesc; dprintf_mmsys(stddeb, "midiInPrepareHeader(%04X, %p, %d)\n", @@ -1225,8 +1327,8 @@ UINT midiInPrepareHeader(HMIDIIN16 hMidiIn, /************************************************************************** * midiInUnprepareHeader [MMSYSTEM.307] */ -UINT midiInUnprepareHeader(HMIDIIN16 hMidiIn, - MIDIHDR * lpMidiInHdr, UINT uSize) +UINT16 midiInUnprepareHeader(HMIDIIN16 hMidiIn, + MIDIHDR * lpMidiInHdr, UINT16 uSize) { LPMIDIOPENDESC lpDesc; dprintf_mmsys(stddeb, "midiInUnprepareHeader(%04X, %p, %d)\n", @@ -1240,8 +1342,8 @@ UINT midiInUnprepareHeader(HMIDIIN16 hMidiIn, /************************************************************************** * midiInAddBuffer [MMSYSTEM.308] */ -UINT midiInAddBuffer(HMIDIIN16 hMidiIn, - MIDIHDR * lpMidiInHdr, UINT uSize) +UINT16 midiInAddBuffer(HMIDIIN16 hMidiIn, + MIDIHDR * lpMidiInHdr, UINT16 uSize) { dprintf_mmsys(stddeb, "midiInAddBuffer\n"); return 0; @@ -1250,7 +1352,7 @@ UINT midiInAddBuffer(HMIDIIN16 hMidiIn, /************************************************************************** * midiInStart [MMSYSTEM.309] */ -UINT midiInStart(HMIDIIN16 hMidiIn) +UINT16 midiInStart(HMIDIIN16 hMidiIn) { dprintf_mmsys(stddeb, "midiInStart\n"); return 0; @@ -1259,7 +1361,7 @@ UINT midiInStart(HMIDIIN16 hMidiIn) /************************************************************************** * midiInStop [MMSYSTEM.310] */ -UINT midiInStop(HMIDIIN16 hMidiIn) +UINT16 midiInStop(HMIDIIN16 hMidiIn) { dprintf_mmsys(stddeb, "midiInStop\n"); return 0; @@ -1268,7 +1370,7 @@ UINT midiInStop(HMIDIIN16 hMidiIn) /************************************************************************** * midiInReset [MMSYSTEM.311] */ -UINT midiInReset(HMIDIIN16 hMidiIn) +UINT16 midiInReset(HMIDIIN16 hMidiIn) { dprintf_mmsys(stddeb, "midiInReset\n"); return 0; @@ -1277,7 +1379,7 @@ UINT midiInReset(HMIDIIN16 hMidiIn) /************************************************************************** * midiInGetID [MMSYSTEM.312] */ -UINT midiInGetID(HMIDIIN16 hMidiIn, UINT * lpuDeviceID) +UINT16 midiInGetID(HMIDIIN16 hMidiIn, UINT16 * lpuDeviceID) { dprintf_mmsys(stddeb, "midiInGetID\n"); return 0; @@ -1286,7 +1388,7 @@ UINT midiInGetID(HMIDIIN16 hMidiIn, UINT * lpuDeviceID) /************************************************************************** * midiInMessage [MMSYSTEM.313] */ -DWORD midiInMessage(HMIDIIN16 hMidiIn, UINT uMessage, +DWORD midiInMessage(HMIDIIN16 hMidiIn, UINT16 uMessage, DWORD dwParam1, DWORD dwParam2) { LPMIDIOPENDESC lpDesc; @@ -1301,9 +1403,9 @@ DWORD midiInMessage(HMIDIIN16 hMidiIn, UINT uMessage, /************************************************************************** * waveOutGetNumDevs [MMSYSTEM.401] */ -UINT waveOutGetNumDevs() +UINT16 waveOutGetNumDevs() { - UINT count = 0; + UINT16 count = 0; dprintf_mmsys(stddeb, "waveOutGetNumDevs\n"); count += wodMessage(0, WODM_GETNUMDEVS, 0L, 0L, 0L); dprintf_mmsys(stddeb, "waveOutGetNumDevs return %u \n", count); @@ -1313,7 +1415,7 @@ UINT waveOutGetNumDevs() /************************************************************************** * waveOutGetDevCaps [MMSYSTEM.402] */ -UINT waveOutGetDevCaps(UINT uDeviceID, WAVEOUTCAPS * lpCaps, UINT uSize) +UINT16 waveOutGetDevCaps(UINT16 uDeviceID, WAVEOUTCAPS * lpCaps, UINT16 uSize) { dprintf_mmsys(stddeb, "waveOutGetDevCaps\n"); return wodMessage(uDeviceID, WODM_GETDEVCAPS, 0L, (DWORD)lpCaps, uSize); @@ -1322,7 +1424,7 @@ UINT waveOutGetDevCaps(UINT uDeviceID, WAVEOUTCAPS * lpCaps, UINT uSize) /************************************************************************** * waveOutGetErrorText [MMSYSTEM.403] */ -UINT waveOutGetErrorText(UINT uError, LPSTR lpText, UINT uSize) +UINT16 waveOutGetErrorText(UINT16 uError, LPSTR lpText, UINT16 uSize) { dprintf_mmsys(stddeb, "waveOutGetErrorText\n"); return(waveGetErrorText(uError, lpText, uSize)); @@ -1332,7 +1434,7 @@ UINT waveOutGetErrorText(UINT uError, LPSTR lpText, UINT uSize) /************************************************************************** * waveGetErrorText [internal] */ -UINT waveGetErrorText(UINT uError, LPSTR lpText, UINT uSize) +UINT16 waveGetErrorText(UINT16 uError, LPSTR lpText, UINT16 uSize) { LPSTR msgptr; dprintf_mmsys(stddeb, "waveGetErrorText(%04X, %p, %d);\n", uError, lpText, uSize); @@ -1398,20 +1500,20 @@ UINT waveGetErrorText(UINT uError, LPSTR lpText, UINT uSize) /************************************************************************** * waveOutOpen [MMSYSTEM.404] */ -UINT waveOutOpen(HWAVEOUT16 * lphWaveOut, UINT uDeviceID, +UINT16 waveOutOpen(HWAVEOUT16 * lphWaveOut, UINT16 uDeviceID, const LPWAVEFORMAT lpFormat, DWORD dwCallback, DWORD dwInstance, DWORD dwFlags) { HWAVEOUT16 hWaveOut; LPWAVEOPENDESC lpDesc; LPWAVEOPENDESC lp16Desc; DWORD dwRet = 0; - BOOL bMapperFlg = FALSE; + BOOL32 bMapperFlg = FALSE; dprintf_mmsys(stddeb, "waveOutOpen(%p, %d, %p, %08lX, %08lX, %08lX);\n", lphWaveOut, uDeviceID, lpFormat, dwCallback, dwInstance, dwFlags); if (dwFlags & WAVE_FORMAT_QUERY) { dprintf_mmsys(stddeb, "waveOutOpen // WAVE_FORMAT_QUERY requested !\n"); } - if (uDeviceID == (UINT)WAVE_MAPPER) { + if (uDeviceID == (UINT16)WAVE_MAPPER) { dprintf_mmsys(stddeb, "waveOutOpen // WAVE_MAPPER mode requested !\n"); bMapperFlg = TRUE; uDeviceID = 0; @@ -1444,7 +1546,7 @@ UINT waveOutOpen(HWAVEOUT16 * lphWaveOut, UINT uDeviceID, /************************************************************************** * waveOutClose [MMSYSTEM.405] */ -UINT waveOutClose(HWAVEOUT16 hWaveOut) +UINT16 waveOutClose(HWAVEOUT16 hWaveOut) { LPWAVEOPENDESC lpDesc; dprintf_mmsys(stddeb, "waveOutClose(%04X)\n", hWaveOut); @@ -1456,8 +1558,8 @@ UINT waveOutClose(HWAVEOUT16 hWaveOut) /************************************************************************** * waveOutPrepareHeader [MMSYSTEM.406] */ -UINT waveOutPrepareHeader(HWAVEOUT16 hWaveOut, - WAVEHDR * lpWaveOutHdr, UINT uSize) +UINT16 waveOutPrepareHeader(HWAVEOUT16 hWaveOut, + WAVEHDR * lpWaveOutHdr, UINT16 uSize) { LPWAVEOPENDESC lpDesc; dprintf_mmsys(stddeb, "waveOutPrepareHeader(%04X, %p, %u);\n", @@ -1471,8 +1573,8 @@ UINT waveOutPrepareHeader(HWAVEOUT16 hWaveOut, /************************************************************************** * waveOutUnprepareHeader [MMSYSTEM.407] */ -UINT waveOutUnprepareHeader(HWAVEOUT16 hWaveOut, - WAVEHDR * lpWaveOutHdr, UINT uSize) +UINT16 waveOutUnprepareHeader(HWAVEOUT16 hWaveOut, + WAVEHDR * lpWaveOutHdr, UINT16 uSize) { LPWAVEOPENDESC lpDesc; dprintf_mmsys(stddeb, "waveOutUnprepareHeader(%04X, %p, %u);\n", @@ -1486,7 +1588,7 @@ UINT waveOutUnprepareHeader(HWAVEOUT16 hWaveOut, /************************************************************************** * waveOutWrite [MMSYSTEM.408] */ -UINT waveOutWrite(HWAVEOUT16 hWaveOut, WAVEHDR * lpWaveOutHdr, UINT uSize) +UINT16 waveOutWrite(HWAVEOUT16 hWaveOut, WAVEHDR * lpWaveOutHdr, UINT16 uSize) { LPWAVEOPENDESC lpDesc; dprintf_mmsys(stddeb, "waveOutWrite(%04X, %p, %u);\n", hWaveOut, lpWaveOutHdr, uSize); @@ -1499,7 +1601,7 @@ UINT waveOutWrite(HWAVEOUT16 hWaveOut, WAVEHDR * lpWaveOutHdr, UINT uSize) /************************************************************************** * waveOutPause [MMSYSTEM.409] */ -UINT waveOutPause(HWAVEOUT16 hWaveOut) +UINT16 waveOutPause(HWAVEOUT16 hWaveOut) { LPWAVEOPENDESC lpDesc; dprintf_mmsys(stddeb, "waveOutPause(%04X)\n", hWaveOut); @@ -1511,7 +1613,7 @@ UINT waveOutPause(HWAVEOUT16 hWaveOut) /************************************************************************** * waveOutRestart [MMSYSTEM.410] */ -UINT waveOutRestart(HWAVEOUT16 hWaveOut) +UINT16 waveOutRestart(HWAVEOUT16 hWaveOut) { LPWAVEOPENDESC lpDesc; dprintf_mmsys(stddeb, "waveOutRestart(%04X)\n", hWaveOut); @@ -1523,7 +1625,7 @@ UINT waveOutRestart(HWAVEOUT16 hWaveOut) /************************************************************************** * waveOutReset [MMSYSTEM.411] */ -UINT waveOutReset(HWAVEOUT16 hWaveOut) +UINT16 waveOutReset(HWAVEOUT16 hWaveOut) { LPWAVEOPENDESC lpDesc; dprintf_mmsys(stddeb, "waveOutReset(%04X)\n", hWaveOut); @@ -1535,7 +1637,7 @@ UINT waveOutReset(HWAVEOUT16 hWaveOut) /************************************************************************** * waveOutGetPosition [MMSYSTEM.412] */ -UINT waveOutGetPosition(HWAVEOUT16 hWaveOut, MMTIME * lpTime, UINT uSize) +UINT16 waveOutGetPosition(HWAVEOUT16 hWaveOut, MMTIME * lpTime, UINT16 uSize) { LPWAVEOPENDESC lpDesc; dprintf_mmsys(stddeb, "waveOutGetPosition(%04X, %p, %u);\n", hWaveOut, lpTime, uSize); @@ -1548,7 +1650,7 @@ UINT waveOutGetPosition(HWAVEOUT16 hWaveOut, MMTIME * lpTime, UINT uSize) /************************************************************************** * waveOutGetPitch [MMSYSTEM.413] */ -UINT waveOutGetPitch(HWAVEOUT16 hWaveOut, DWORD * lpdwPitch) +UINT16 waveOutGetPitch(HWAVEOUT16 hWaveOut, DWORD * lpdwPitch) { LPWAVEOPENDESC lpDesc; dprintf_mmsys(stddeb, "waveOutGetPitch(%04X, %p);\n", hWaveOut, lpdwPitch); @@ -1561,7 +1663,7 @@ UINT waveOutGetPitch(HWAVEOUT16 hWaveOut, DWORD * lpdwPitch) /************************************************************************** * waveOutSetPitch [MMSYSTEM.414] */ -UINT waveOutSetPitch(HWAVEOUT16 hWaveOut, DWORD dwPitch) +UINT16 waveOutSetPitch(HWAVEOUT16 hWaveOut, DWORD dwPitch) { LPWAVEOPENDESC lpDesc; dprintf_mmsys(stddeb, "waveOutSetPitch(%04X, %08lX);\n", hWaveOut, dwPitch); @@ -1573,7 +1675,7 @@ UINT waveOutSetPitch(HWAVEOUT16 hWaveOut, DWORD dwPitch) /************************************************************************** * waveOutGetVolume [MMSYSTEM.415] */ -UINT waveOutGetVolume(UINT uDeviceID, DWORD * lpdwVolume) +UINT16 waveOutGetVolume(UINT16 uDeviceID, DWORD * lpdwVolume) { dprintf_mmsys(stddeb, "waveOutGetVolume(%04X, %p);\n", uDeviceID, lpdwVolume); return wodMessage(uDeviceID, WODM_GETVOLUME, 0L, (DWORD)lpdwVolume, 0L); @@ -1582,7 +1684,7 @@ UINT waveOutGetVolume(UINT uDeviceID, DWORD * lpdwVolume) /************************************************************************** * waveOutSetVolume [MMSYSTEM.416] */ -UINT waveOutSetVolume(UINT uDeviceID, DWORD dwVolume) +UINT16 waveOutSetVolume(UINT16 uDeviceID, DWORD dwVolume) { dprintf_mmsys(stddeb, "waveOutSetVolume(%04X, %08lX);\n", uDeviceID, dwVolume); return wodMessage(uDeviceID, WODM_SETVOLUME, 0L, dwVolume, 0L); @@ -1591,7 +1693,7 @@ UINT waveOutSetVolume(UINT uDeviceID, DWORD dwVolume) /************************************************************************** * waveOutGetPlaybackRate [MMSYSTEM.417] */ -UINT waveOutGetPlaybackRate(HWAVEOUT16 hWaveOut, DWORD * lpdwRate) +UINT16 waveOutGetPlaybackRate(HWAVEOUT16 hWaveOut, DWORD * lpdwRate) { LPWAVEOPENDESC lpDesc; dprintf_mmsys(stddeb, "waveOutGetPlaybackRate(%04X, %p);\n", hWaveOut, lpdwRate); @@ -1604,7 +1706,7 @@ UINT waveOutGetPlaybackRate(HWAVEOUT16 hWaveOut, DWORD * lpdwRate) /************************************************************************** * waveOutSetPlaybackRate [MMSYSTEM.418] */ -UINT waveOutSetPlaybackRate(HWAVEOUT16 hWaveOut, DWORD dwRate) +UINT16 waveOutSetPlaybackRate(HWAVEOUT16 hWaveOut, DWORD dwRate) { LPWAVEOPENDESC lpDesc; dprintf_mmsys(stddeb, "waveOutSetPlaybackRate(%04X, %08lX);\n", hWaveOut, dwRate); @@ -1617,7 +1719,7 @@ UINT waveOutSetPlaybackRate(HWAVEOUT16 hWaveOut, DWORD dwRate) /************************************************************************** * waveOutBreakLoop [MMSYSTEM.419] */ -UINT waveOutBreakLoop(HWAVEOUT16 hWaveOut) +UINT16 waveOutBreakLoop(HWAVEOUT16 hWaveOut) { dprintf_mmsys(stddeb, "waveOutBreakLoop(%04X)\n", hWaveOut); return MMSYSERR_INVALHANDLE; @@ -1626,7 +1728,7 @@ UINT waveOutBreakLoop(HWAVEOUT16 hWaveOut) /************************************************************************** * waveOutGetID [MMSYSTEM.420] */ -UINT waveOutGetID(HWAVEOUT16 hWaveOut, UINT * lpuDeviceID) +UINT16 waveOutGetID(HWAVEOUT16 hWaveOut, UINT16 * lpuDeviceID) { LPWAVEOPENDESC lpDesc; dprintf_mmsys(stddeb, "waveOutGetID(%04X, %p);\n", hWaveOut, lpuDeviceID); @@ -1642,7 +1744,7 @@ UINT waveOutGetID(HWAVEOUT16 hWaveOut, UINT * lpuDeviceID) /************************************************************************** * waveOutMessage [MMSYSTEM.421] */ -DWORD waveOutMessage(HWAVEOUT16 hWaveOut, UINT uMessage, +DWORD waveOutMessage(HWAVEOUT16 hWaveOut, UINT16 uMessage, DWORD dwParam1, DWORD dwParam2) { LPWAVEOPENDESC lpDesc; @@ -1656,9 +1758,9 @@ DWORD waveOutMessage(HWAVEOUT16 hWaveOut, UINT uMessage, /************************************************************************** * waveInGetNumDevs [MMSYSTEM.501] */ -UINT waveInGetNumDevs() +UINT16 waveInGetNumDevs() { - UINT count = 0; + UINT16 count = 0; dprintf_mmsys(stddeb, "waveInGetNumDevs\n"); count += widMessage(0, WIDM_GETNUMDEVS, 0L, 0L, 0L); dprintf_mmsys(stddeb, "waveInGetNumDevs return %u \n", count); @@ -1669,7 +1771,7 @@ UINT waveInGetNumDevs() /************************************************************************** * waveInGetDevCaps [MMSYSTEM.502] */ -UINT waveInGetDevCaps(UINT uDeviceID, WAVEINCAPS * lpCaps, UINT uSize) +UINT16 waveInGetDevCaps(UINT16 uDeviceID, WAVEINCAPS * lpCaps, UINT16 uSize) { dprintf_mmsys(stddeb, "waveInGetDevCaps\n"); return widMessage(uDeviceID, WIDM_GETDEVCAPS, 0L, (DWORD)lpCaps, uSize); @@ -1679,7 +1781,7 @@ UINT waveInGetDevCaps(UINT uDeviceID, WAVEINCAPS * lpCaps, UINT uSize) /************************************************************************** * waveInGetErrorText [MMSYSTEM.503] */ -UINT waveInGetErrorText(UINT uError, LPSTR lpText, UINT uSize) +UINT16 waveInGetErrorText(UINT16 uError, LPSTR lpText, UINT16 uSize) { dprintf_mmsys(stddeb, "waveInGetErrorText\n"); return(waveGetErrorText(uError, lpText, uSize)); @@ -1689,20 +1791,20 @@ UINT waveInGetErrorText(UINT uError, LPSTR lpText, UINT uSize) /************************************************************************** * waveInOpen [MMSYSTEM.504] */ -UINT waveInOpen(HWAVEIN16 * lphWaveIn, UINT uDeviceID, +UINT16 waveInOpen(HWAVEIN16 * lphWaveIn, UINT16 uDeviceID, const LPWAVEFORMAT lpFormat, DWORD dwCallback, DWORD dwInstance, DWORD dwFlags) { HWAVEIN16 hWaveIn; LPWAVEOPENDESC lpDesc; LPWAVEOPENDESC lp16Desc; DWORD dwRet = 0; - BOOL bMapperFlg = FALSE; + BOOL32 bMapperFlg = FALSE; dprintf_mmsys(stddeb, "waveInOpen(%p, %d, %p, %08lX, %08lX, %08lX);\n", lphWaveIn, uDeviceID, lpFormat, dwCallback, dwInstance, dwFlags); if (dwFlags & WAVE_FORMAT_QUERY) { dprintf_mmsys(stddeb, "waveInOpen // WAVE_FORMAT_QUERY requested !\n"); } - if (uDeviceID == (UINT)WAVE_MAPPER) { + if (uDeviceID == (UINT16)WAVE_MAPPER) { dprintf_mmsys(stddeb, "waveInOpen // WAVE_MAPPER mode requested !\n"); bMapperFlg = TRUE; uDeviceID = 0; @@ -1736,7 +1838,7 @@ UINT waveInOpen(HWAVEIN16 * lphWaveIn, UINT uDeviceID, /************************************************************************** * waveInClose [MMSYSTEM.505] */ -UINT waveInClose(HWAVEIN16 hWaveIn) +UINT16 waveInClose(HWAVEIN16 hWaveIn) { LPWAVEOPENDESC lpDesc; dprintf_mmsys(stddeb, "waveInClose(%04X)\n", hWaveIn); @@ -1749,8 +1851,8 @@ UINT waveInClose(HWAVEIN16 hWaveIn) /************************************************************************** * waveInPrepareHeader [MMSYSTEM.506] */ -UINT waveInPrepareHeader(HWAVEIN16 hWaveIn, - WAVEHDR * lpWaveInHdr, UINT uSize) +UINT16 waveInPrepareHeader(HWAVEIN16 hWaveIn, + WAVEHDR * lpWaveInHdr, UINT16 uSize) { LPWAVEOPENDESC lpDesc; LPWAVEHDR lp32WaveInHdr; @@ -1772,8 +1874,8 @@ UINT waveInPrepareHeader(HWAVEIN16 hWaveIn, /************************************************************************** * waveInUnprepareHeader [MMSYSTEM.507] */ -UINT waveInUnprepareHeader(HWAVEIN16 hWaveIn, - WAVEHDR * lpWaveInHdr, UINT uSize) +UINT16 waveInUnprepareHeader(HWAVEIN16 hWaveIn, + WAVEHDR * lpWaveInHdr, UINT16 uSize) { LPWAVEOPENDESC lpDesc; LPWAVEHDR lp32WaveInHdr; @@ -1794,8 +1896,8 @@ UINT waveInUnprepareHeader(HWAVEIN16 hWaveIn, /************************************************************************** * waveInAddBuffer [MMSYSTEM.508] */ -UINT waveInAddBuffer(HWAVEIN16 hWaveIn, - WAVEHDR * lpWaveInHdr, UINT uSize) +UINT16 waveInAddBuffer(HWAVEIN16 hWaveIn, + WAVEHDR * lpWaveInHdr, UINT16 uSize) { LPWAVEOPENDESC lpDesc; LPWAVEHDR lp32WaveInHdr; @@ -1816,7 +1918,7 @@ UINT waveInAddBuffer(HWAVEIN16 hWaveIn, /************************************************************************** * waveInStart [MMSYSTEM.509] */ -UINT waveInStart(HWAVEIN16 hWaveIn) +UINT16 waveInStart(HWAVEIN16 hWaveIn) { LPWAVEOPENDESC lpDesc; dprintf_mmsys(stddeb, "waveInStart(%04X)\n", hWaveIn); @@ -1829,7 +1931,7 @@ UINT waveInStart(HWAVEIN16 hWaveIn) /************************************************************************** * waveInStop [MMSYSTEM.510] */ -UINT waveInStop(HWAVEIN16 hWaveIn) +UINT16 waveInStop(HWAVEIN16 hWaveIn) { LPWAVEOPENDESC lpDesc; dprintf_mmsys(stddeb, "waveInStop(%04X)\n", hWaveIn); @@ -1842,7 +1944,7 @@ UINT waveInStop(HWAVEIN16 hWaveIn) /************************************************************************** * waveInReset [MMSYSTEM.511] */ -UINT waveInReset(HWAVEIN16 hWaveIn) +UINT16 waveInReset(HWAVEIN16 hWaveIn) { LPWAVEOPENDESC lpDesc; dprintf_mmsys(stddeb, "waveInReset(%04X)\n", hWaveIn); @@ -1855,7 +1957,7 @@ UINT waveInReset(HWAVEIN16 hWaveIn) /************************************************************************** * waveInGetPosition [MMSYSTEM.512] */ -UINT waveInGetPosition(HWAVEIN16 hWaveIn, MMTIME * lpTime, UINT uSize) +UINT16 waveInGetPosition(HWAVEIN16 hWaveIn, MMTIME * lpTime, UINT16 uSize) { LPWAVEOPENDESC lpDesc; dprintf_mmsys(stddeb, "waveInGetPosition(%04X, %p, %u);\n", hWaveIn, lpTime, uSize); @@ -1869,7 +1971,7 @@ UINT waveInGetPosition(HWAVEIN16 hWaveIn, MMTIME * lpTime, UINT uSize) /************************************************************************** * waveInGetID [MMSYSTEM.513] */ -UINT waveInGetID(HWAVEIN16 hWaveIn, UINT * lpuDeviceID) +UINT16 waveInGetID(HWAVEIN16 hWaveIn, UINT16 * lpuDeviceID) { dprintf_mmsys(stddeb, "waveInGetID\n"); if (lpuDeviceID == NULL) return MMSYSERR_INVALPARAM; @@ -1880,7 +1982,7 @@ UINT waveInGetID(HWAVEIN16 hWaveIn, UINT * lpuDeviceID) /************************************************************************** * waveInMessage [MMSYSTEM.514] */ -DWORD waveInMessage(HWAVEIN16 hWaveIn, UINT uMessage, +DWORD waveInMessage(HWAVEIN16 hWaveIn, UINT16 uMessage, DWORD dwParam1, DWORD dwParam2) { LPWAVEOPENDESC lpDesc; @@ -1919,7 +2021,7 @@ HMMIO16 mmioOpen(LPSTR szFileName, MMIOINFO * lpmmioinfo, DWORD dwOpenFlags) /************************************************************************** * mmioClose [MMSYSTEM.1211] */ -UINT mmioClose(HMMIO16 hmmio, UINT uFlags) +UINT16 mmioClose(HMMIO16 hmmio, UINT16 uFlags) { LPMMIOINFO lpmminfo; dprintf_mmsys(stddeb, "mmioClose(%04X, %04X);\n", hmmio, uFlags); @@ -1987,7 +2089,7 @@ LONG mmioSeek(HMMIO16 hmmio, LONG lOffset, int iOrigin) /************************************************************************** * mmioGetInfo [MMSYSTEM.1215] */ -UINT mmioGetInfo(HMMIO16 hmmio, MMIOINFO * lpmmioinfo, UINT uFlags) +UINT16 mmioGetInfo(HMMIO16 hmmio, MMIOINFO * lpmmioinfo, UINT16 uFlags) { LPMMIOINFO lpmminfo; dprintf_mmsys(stddeb, "mmioGetInfo\n"); @@ -2001,7 +2103,7 @@ UINT mmioGetInfo(HMMIO16 hmmio, MMIOINFO * lpmmioinfo, UINT uFlags) /************************************************************************** * mmioSetInfo [MMSYSTEM.1216] */ -UINT mmioSetInfo(HMMIO16 hmmio, const MMIOINFO * lpmmioinfo, UINT uFlags) +UINT16 mmioSetInfo(HMMIO16 hmmio, const MMIOINFO * lpmmioinfo, UINT16 uFlags) { LPMMIOINFO lpmminfo; dprintf_mmsys(stddeb, "mmioSetInfo\n"); @@ -2014,8 +2116,8 @@ UINT mmioSetInfo(HMMIO16 hmmio, const MMIOINFO * lpmmioinfo, UINT uFlags) /************************************************************************** * mmioSetBuffer [MMSYSTEM.1217] */ -UINT mmioSetBuffer(HMMIO16 hmmio, LPSTR pchBuffer, - LONG cchBuffer, UINT uFlags) +UINT16 mmioSetBuffer(HMMIO16 hmmio, LPSTR pchBuffer, + LONG cchBuffer, UINT16 uFlags) { dprintf_mmsys(stddeb, "mmioSetBuffer // empty stub \n"); return 0; @@ -2024,7 +2126,7 @@ UINT mmioSetBuffer(HMMIO16 hmmio, LPSTR pchBuffer, /************************************************************************** * mmioFlush [MMSYSTEM.1218] */ -UINT mmioFlush(HMMIO16 hmmio, UINT uFlags) +UINT16 mmioFlush(HMMIO16 hmmio, UINT16 uFlags) { LPMMIOINFO lpmminfo; dprintf_mmsys(stddeb, "mmioFlush(%04X, %04X)\n", hmmio, uFlags); @@ -2037,7 +2139,7 @@ UINT mmioFlush(HMMIO16 hmmio, UINT uFlags) /************************************************************************** * mmioAdvance [MMSYSTEM.1219] */ -UINT mmioAdvance(HMMIO16 hmmio, MMIOINFO * lpmmioinfo, UINT uFlags) +UINT16 mmioAdvance(HMMIO16 hmmio, MMIOINFO * lpmmioinfo, UINT16 uFlags) { int count = 0; LPMMIOINFO lpmminfo; @@ -2061,7 +2163,7 @@ UINT mmioAdvance(HMMIO16 hmmio, MMIOINFO * lpmmioinfo, UINT uFlags) /************************************************************************** * mmioStringToFOURCC [MMSYSTEM.1220] */ -FOURCC mmioStringToFOURCC(LPCSTR sz, UINT uFlags) +FOURCC mmioStringToFOURCC(LPCSTR sz, UINT16 uFlags) { dprintf_mmsys(stddeb, "mmioStringToFOURCC // empty stub \n"); return 0; @@ -2080,7 +2182,7 @@ LPMMIOPROC mmioInstallIOProc(FOURCC fccIOProc, /************************************************************************** * mmioSendMessage [MMSYSTEM.1222] */ -LRESULT mmioSendMessage(HMMIO16 hmmio, UINT uMessage, +LRESULT mmioSendMessage(HMMIO16 hmmio, UINT16 uMessage, LPARAM lParam1, LPARAM lParam2) { dprintf_mmsys(stddeb, "mmioSendMessage // empty stub \n"); @@ -2090,8 +2192,8 @@ LRESULT mmioSendMessage(HMMIO16 hmmio, UINT uMessage, /************************************************************************** * mmioDescend [MMSYSTEM.1223] */ -UINT mmioDescend(HMMIO16 hmmio, MMCKINFO * lpck, - const MMCKINFO * lpckParent, UINT uFlags) +UINT16 mmioDescend(HMMIO16 hmmio, MMCKINFO * lpck, + const MMCKINFO * lpckParent, UINT16 uFlags) { DWORD dwfcc, dwOldPos; LPMMIOINFO lpmminfo; @@ -2151,7 +2253,7 @@ UINT mmioDescend(HMMIO16 hmmio, MMCKINFO * lpck, /************************************************************************** * mmioAscend [MMSYSTEM.1224] */ -UINT mmioAscend(HMMIO16 hmmio, MMCKINFO * lpck, UINT uFlags) +UINT16 mmioAscend(HMMIO16 hmmio, MMCKINFO * lpck, UINT16 uFlags) { dprintf_mmsys(stddeb, "mmioAscend // empty stub !\n"); return 0; @@ -2160,7 +2262,7 @@ UINT mmioAscend(HMMIO16 hmmio, MMCKINFO * lpck, UINT uFlags) /************************************************************************** * mmioCreateChunk [MMSYSTEM.1225] */ -UINT mmioCreateChunk(HMMIO16 hmmio, MMCKINFO * lpck, UINT uFlags) +UINT16 mmioCreateChunk(HMMIO16 hmmio, MMCKINFO * lpck, UINT16 uFlags) { dprintf_mmsys(stddeb, "mmioCreateChunk // empty stub \n"); return 0; @@ -2170,7 +2272,7 @@ UINT mmioCreateChunk(HMMIO16 hmmio, MMCKINFO * lpck, UINT uFlags) /************************************************************************** * mmioRename [MMSYSTEM.1226] */ -UINT mmioRename(LPCSTR szFileName, LPCSTR szNewFileName, +UINT16 mmioRename(LPCSTR szFileName, LPCSTR szNewFileName, MMIOINFO * lpmmioinfo, DWORD dwRenameFlags) { dprintf_mmsys(stddeb, "mmioRename('%s', '%s', %p, %08lX); // empty stub \n", @@ -2204,12 +2306,10 @@ LRESULT DrvClose(HDRVR16 hDrvr, LPARAM lParam1, LPARAM lParam2) */ LRESULT DrvSendMessage(HDRVR16 hDriver, WORD msg, LPARAM lParam1, LPARAM lParam2) { - DWORD dwDevID = 0; + DWORD dwDriverID = 0; dprintf_mmsys(stddeb, "DrvSendMessage(%04X, %04X, %08lX, %08lX);\n", hDriver, msg, lParam1, lParam2); -#ifndef WINELIB - return CDAUDIO_DriverProc(dwDevID, hDriver, msg, lParam1, lParam2); -#endif + return CDAUDIO_DriverProc(dwDriverID, hDriver, msg, lParam1, lParam2); } /************************************************************************** @@ -2225,12 +2325,8 @@ HANDLE16 DrvGetModuleHandle(HDRVR16 hDrvr) /************************************************************************** * DrvDefDriverProc [MMSYSTEM.1104] */ -LRESULT DrvDefDriverProc(DWORD dwDevID, HDRVR16 hDriv, WORD wMsg, +LRESULT DrvDefDriverProc(DWORD dwDriverID, HDRVR16 hDriv, WORD wMsg, DWORD dwParam1, DWORD dwParam2) { - return DefDriverProc(dwDevID, hDriv, wMsg, dwParam1, dwParam2); + return DefDriverProc(dwDriverID, hDriv, wMsg, dwParam1, dwParam2); } - - -#endif /* #ifdef WINELIB */ - diff --git a/multimedia/time.c b/multimedia/time.c index a6b47957035..56e4e4583e2 100644 --- a/multimedia/time.c +++ b/multimedia/time.c @@ -4,8 +4,6 @@ * Copyright 1993 Martin Ayotte */ -#ifndef WINELIB - #include #include #include @@ -20,7 +18,7 @@ #include "stddebug.h" #include "debug.h" -static BOOL mmTimeStarted = FALSE; +static BOOL32 mmTimeStarted = FALSE; static MMTIME mmSysTimeMS; static MMTIME mmSysTimeSMPTE; @@ -221,5 +219,3 @@ DWORD timeGetTime() StartMMTime(); return 0; } - -#endif /* WINELIB */ diff --git a/objects/bitmap.c b/objects/bitmap.c index 1d81b167147..77147f760b7 100644 --- a/objects/bitmap.c +++ b/objects/bitmap.c @@ -52,13 +52,23 @@ static XImage *BITMAP_BmpToImage( BITMAP16 * bmp, LPVOID bmpData ) /*********************************************************************** - * CreateBitmap (GDI.48) (GDI32.25) + * CreateBitmap16 (GDI.48) */ -HBITMAP16 CreateBitmap( INT32 width, INT32 height, UINT32 planes, - UINT32 bpp, LPCVOID bits ) +HBITMAP16 CreateBitmap16( INT16 width, INT16 height, UINT16 planes, + UINT16 bpp, LPCVOID bits ) +{ + return CreateBitmap32( width, height, planes, bpp, bits ); +} + + +/*********************************************************************** + * CreateBitmap32 (GDI32.25) + */ +HBITMAP32 CreateBitmap32( INT32 width, INT32 height, UINT32 planes, + UINT32 bpp, LPCVOID bits ) { BITMAPOBJ * bmpObjPtr; - HBITMAP16 hbitmap; + HBITMAP32 hbitmap; planes = (BYTE)planes; bpp = (BYTE)bpp; @@ -95,28 +105,33 @@ HBITMAP16 CreateBitmap( INT32 width, INT32 height, UINT32 planes, hbitmap = 0; } else if (bits) /* Set bitmap bits */ - SetBitmapBits( hbitmap, height * bmpObjPtr->bitmap.bmWidthBytes, bits); + SetBitmapBits32( hbitmap, height * bmpObjPtr->bitmap.bmWidthBytes, + bits ); return hbitmap; } /*********************************************************************** - * CreateCompatibleBitmap (GDI.51) (GDI32.30) + * CreateCompatibleBitmap16 (GDI.51) */ -HBITMAP16 CreateCompatibleBitmap( HDC32 hdc, INT32 width, INT32 height ) +HBITMAP16 CreateCompatibleBitmap16( HDC16 hdc, INT16 width, INT16 height ) { - HBITMAP16 hbmpRet = 0; + return CreateCompatibleBitmap32( hdc, width, height ); +} + + +/*********************************************************************** + * CreateCompatibleBitmap32 (GDI32.30) + */ +HBITMAP32 CreateCompatibleBitmap32( HDC32 hdc, INT32 width, INT32 height ) +{ + HBITMAP32 hbmpRet = 0; DC *dc; dprintf_gdi( stddeb, "CreateCompatibleBitmap(%04x,%d,%d) = \n", hdc, width, height ); - dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC ); - if (!dc) - { - dc = (DC *)GDI_GetObjPtr(hdc, METAFILE_DC_MAGIC); - if (!dc) return 0; - } - hbmpRet = CreateBitmap( width, height, 1, dc->w.bitsPerPixel, NULL ); + if (!(dc = DC_GetDCPtr( hdc ))) return 0; + hbmpRet = CreateBitmap32( width, height, 1, dc->w.bitsPerPixel, NULL ); dprintf_gdi(stddeb,"\t\t%04x\n", hbmpRet); return hbmpRet; } @@ -127,8 +142,8 @@ HBITMAP16 CreateCompatibleBitmap( HDC32 hdc, INT32 width, INT32 height ) */ HBITMAP16 CreateBitmapIndirect16( const BITMAP16 * bmp ) { - return CreateBitmap( bmp->bmWidth, bmp->bmHeight, bmp->bmPlanes, - bmp->bmBitsPixel, PTR_SEG_TO_LIN( bmp->bmBits ) ); + return CreateBitmap16( bmp->bmWidth, bmp->bmHeight, bmp->bmPlanes, + bmp->bmBitsPixel, PTR_SEG_TO_LIN( bmp->bmBits ) ); } @@ -137,15 +152,24 @@ HBITMAP16 CreateBitmapIndirect16( const BITMAP16 * bmp ) */ HBITMAP32 CreateBitmapIndirect32( const BITMAP32 * bmp ) { - return CreateBitmap( bmp->bmWidth, bmp->bmHeight, bmp->bmPlanes, - bmp->bmBitsPixel, bmp->bmBits ); + return CreateBitmap32( bmp->bmWidth, bmp->bmHeight, bmp->bmPlanes, + bmp->bmBitsPixel, bmp->bmBits ); } /*********************************************************************** - * GetBitmapBits (GDI.74) (GDI32.143) + * GetBitmapBits16 (GDI.74) */ -LONG GetBitmapBits( HBITMAP32 hbitmap, LONG count, LPVOID buffer ) +LONG GetBitmapBits16( HBITMAP16 hbitmap, LONG count, LPVOID buffer ) +{ + return GetBitmapBits32( hbitmap, count, buffer ); +} + + +/*********************************************************************** + * GetBitmapBits32 (GDI32.143) + */ +LONG GetBitmapBits32( HBITMAP32 hbitmap, LONG count, LPVOID buffer ) { BITMAPOBJ * bmp; LONG height; @@ -178,9 +202,18 @@ LONG GetBitmapBits( HBITMAP32 hbitmap, LONG count, LPVOID buffer ) /*********************************************************************** - * SetBitmapBits (GDI.106) (GDI32.303) + * SetBitmapBits16 (GDI.106) */ -LONG SetBitmapBits( HBITMAP32 hbitmap, LONG count, LPCVOID buffer ) +LONG SetBitmapBits16( HBITMAP16 hbitmap, LONG count, LPCVOID buffer ) +{ + return SetBitmapBits32( hbitmap, count, buffer ); +} + + +/*********************************************************************** + * SetBitmapBits32 (GDI32.303) + */ +LONG SetBitmapBits32( HBITMAP32 hbitmap, LONG count, LPCVOID buffer ) { BITMAPOBJ * bmp; LONG height; @@ -416,14 +449,20 @@ INT32 BITMAP_GetObject32( BITMAPOBJ * bmp, INT32 count, LPVOID buffer ) /*********************************************************************** - * CreateDiscardableBitmap (GDI.156) (GDI32.38) + * CreateDiscardableBitmap16 (GDI.156) */ -HBITMAP16 CreateDiscardableBitmap( HDC32 hdc, INT32 width, INT32 height ) +HBITMAP16 CreateDiscardableBitmap16( HDC16 hdc, INT16 width, INT16 height ) { - dprintf_bitmap(stddeb,"CreateDiscardableBitmap(%04x, %d, %d); " - "// call CreateCompatibleBitmap() for now!\n", - hdc, width, height); - return CreateCompatibleBitmap(hdc, width, height); + return CreateCompatibleBitmap16( hdc, width, height ); +} + + +/*********************************************************************** + * CreateDiscardableBitmap32 (GDI32.38) + */ +HBITMAP32 CreateDiscardableBitmap32( HDC32 hdc, INT32 width, INT32 height ) +{ + return CreateCompatibleBitmap32( hdc, width, height ); } diff --git a/objects/brush.c b/objects/brush.c index eb8bca2fd2e..4a0600582ea 100644 --- a/objects/brush.c +++ b/objects/brush.c @@ -4,7 +4,6 @@ * Copyright 1993, 1994 Alexandre Julliard */ -#define NO_TRANSITION_TYPES /* This file is Win32-clean */ #include #include "brush.h" #include "bitmap.h" diff --git a/objects/clipping.c b/objects/clipping.c index 7ca30a911fd..e801cb02a0f 100644 --- a/objects/clipping.c +++ b/objects/clipping.c @@ -4,7 +4,6 @@ * Copyright 1993 Alexandre Julliard */ -#define NO_TRANSITION_TYPES /* This file is Win32-clean */ #include #include "dc.h" #include "metafile.h" diff --git a/objects/color.c b/objects/color.c index 5d1abd90c9d..5b8c76152af 100644 --- a/objects/color.c +++ b/objects/color.c @@ -262,7 +262,7 @@ void COLOR_FillDefaultColors(void) * * Allocate colorcells and initialize mapping tables. */ -static BOOL COLOR_BuildPrivateMap(CSPACE* cs) +static BOOL32 COLOR_BuildPrivateMap(CSPACE* cs) { /* Private colormap - identity mapping */ @@ -313,7 +313,7 @@ static BOOL COLOR_BuildPrivateMap(CSPACE* cs) return FALSE; } -static BOOL COLOR_BuildSharedMap(CSPACE* cs) +static BOOL32 COLOR_BuildSharedMap(CSPACE* cs) { XColor color; unsigned long sysPixel[NB_RESERVED_COLORS]; @@ -738,7 +738,11 @@ int COLOR_LookupSystemPixel(COLORREF col) for( i = 0; i < size && diff ; i++ ) { - if( i == NB_RESERVED_COLORS/2 ) i = size - NB_RESERVED_COLORS/2; + if( i == NB_RESERVED_COLORS/2 ) + { + int newi = size - NB_RESERVED_COLORS/2; + if (newi>i) i=newi; + } r = COLOR_sysPal[i].peRed - GetRValue(col); g = COLOR_sysPal[i].peGreen - GetGValue(col); diff --git a/objects/cursoricon.c b/objects/cursoricon.c index 62b48233bea..bdb9f0d7d14 100644 --- a/objects/cursoricon.c +++ b/objects/cursoricon.c @@ -22,7 +22,6 @@ * the bits directly :-( */ -#define NO_TRANSITION_TYPES /* This file is Win32-clean */ #include #include #include "windows.h" @@ -367,8 +366,8 @@ HGLOBAL16 CURSORICON_LoadHandler( HGLOBAL16 handle, HINSTANCE16 hInstance, /* Transfer the bitmap bits to the CURSORICONINFO structure */ - GetBitmapBits( hAndBits, sizeAnd, (char *)(info + 1) ); - GetBitmapBits( hXorBits, sizeXor, (char *)(info + 1) + sizeAnd ); + GetBitmapBits32( hAndBits, sizeAnd, (char *)(info + 1) ); + GetBitmapBits32( hXorBits, sizeXor, (char *)(info + 1) + sizeAnd ); DeleteObject32( hXorBits ); DeleteObject32( hAndBits ); GlobalUnlock16( handle ); @@ -739,12 +738,13 @@ BOOL32 DrawIcon32( HDC32 hdc, INT32 x, INT32 y, HICON32 hIcon ) if (!(ptr = (CURSORICONINFO *)GlobalLock16( hIcon ))) return FALSE; if (!(hMemDC = CreateCompatibleDC32( hdc ))) return FALSE; - hAndBits = CreateBitmap( ptr->nWidth, ptr->nHeight, 1, 1, (char *)(ptr+1)); - hXorBits = CreateBitmap( ptr->nWidth, ptr->nHeight, ptr->bPlanes, - ptr->bBitsPerPixel, (char *)(ptr + 1) + hAndBits = CreateBitmap32( ptr->nWidth, ptr->nHeight, 1, 1, + (char *)(ptr+1) ); + hXorBits = CreateBitmap32( ptr->nWidth, ptr->nHeight, ptr->bPlanes, + ptr->bBitsPerPixel, (char *)(ptr + 1) + ptr->nHeight * BITMAP_WIDTH_BYTES(ptr->nWidth,1) ); - oldFg = SetTextColor( hdc, RGB(0,0,0) ); - oldBg = SetBkColor( hdc, RGB(255,255,255) ); + oldFg = SetTextColor32( hdc, RGB(0,0,0) ); + oldBg = SetBkColor32( hdc, RGB(255,255,255) ); if (hXorBits && hAndBits) { @@ -758,8 +758,8 @@ BOOL32 DrawIcon32( HDC32 hdc, INT32 x, INT32 y, HICON32 hIcon ) if (hXorBits) DeleteObject32( hXorBits ); if (hAndBits) DeleteObject32( hAndBits ); GlobalUnlock16( hIcon ); - SetTextColor( hdc, oldFg ); - SetBkColor( hdc, oldBg ); + SetTextColor32( hdc, oldFg ); + SetBkColor32( hdc, oldBg ); return TRUE; } diff --git a/objects/dc.c b/objects/dc.c index 889518f9c72..6d31cd8d387 100644 --- a/objects/dc.c +++ b/objects/dc.c @@ -5,11 +5,9 @@ * */ -#define NO_TRANSITION_TYPES /* This file is Win32-clean */ #include #include #include "gdi.h" -#include "bitmap.h" #include "heap.h" #include "metafile.h" #include "stddebug.h" @@ -185,8 +183,8 @@ DC *DC_GetDCPtr( HDC32 hdc ) void DC_InitDC( DC* dc ) { RealizeDefaultPalette( dc->hSelf ); - SetTextColor( dc->hSelf, dc->w.textColor ); - SetBkColor( dc->hSelf, dc->w.backgroundColor ); + SetTextColor32( dc->hSelf, dc->w.textColor ); + SetBkColor32( dc->hSelf, dc->w.backgroundColor ); SelectObject32( dc->hSelf, dc->w.hPen ); SelectObject32( dc->hSelf, dc->w.hBrush ); SelectObject32( dc->hSelf, dc->w.hFont ); @@ -690,7 +688,7 @@ HDC32 CreateCompatibleDC32( HDC32 hdc ) hdc, dc->hSelf ); /* Create default bitmap */ - if (!(hbitmap = CreateBitmap( 1, 1, 1, 1, NULL ))) + if (!(hbitmap = CreateBitmap32( 1, 1, 1, 1, NULL ))) { GDI_HEAP_FREE( dc->hSelf ); return 0; @@ -816,9 +814,18 @@ INT32 GetDeviceCaps32( HDC32 hdc, INT32 cap ) /*********************************************************************** - * SetBkColor (GDI.1) (GDI32.305) + * SetBkColor16 (GDI.1) */ -COLORREF SetBkColor( HDC32 hdc, COLORREF color ) +COLORREF SetBkColor16( HDC16 hdc, COLORREF color ) +{ + return SetBkColor32( hdc, color ); +} + + +/*********************************************************************** + * SetBkColor32 (GDI32.305) + */ +COLORREF SetBkColor32( HDC32 hdc, COLORREF color ) { COLORREF oldColor; DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC ); @@ -838,9 +845,18 @@ COLORREF SetBkColor( HDC32 hdc, COLORREF color ) /*********************************************************************** - * SetTextColor (GDI.9) (GDI32.338) + * SetTextColor16 (GDI.9) */ -COLORREF SetTextColor( HDC32 hdc, COLORREF color ) +COLORREF SetTextColor16( HDC16 hdc, COLORREF color ) +{ + return SetTextColor32( hdc, color ); +} + + +/*********************************************************************** + * SetTextColor32 (GDI32.338) + */ +COLORREF SetTextColor32( HDC32 hdc, COLORREF color ) { COLORREF oldColor; DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC ); diff --git a/objects/dcvalues.c b/objects/dcvalues.c index b90b484ab56..9ea8221ebaa 100644 --- a/objects/dcvalues.c +++ b/objects/dcvalues.c @@ -5,7 +5,6 @@ * */ -#define NO_TRANSITION_TYPES /* This file is Win32-clean */ #include "gdi.h" #include "metafile.h" diff --git a/objects/dib.c b/objects/dib.c index d49b0914a62..29aba34772e 100644 --- a/objects/dib.c +++ b/objects/dib.c @@ -4,7 +4,6 @@ * Copyright 1993,1994 Alexandre Julliard */ -#define NO_TRANSITION_TYPES /* This file is Win32-clean */ #include #include #include @@ -907,8 +906,8 @@ HBITMAP32 CreateDIBitmap32( HDC32 hdc, const BITMAPINFOHEADER *header, /* Now create the bitmap */ - handle = fColor ? CreateCompatibleBitmap( hdc, width, height ) : - CreateBitmap( width, height, 1, 1, NULL ); + handle = fColor ? CreateCompatibleBitmap32( hdc, width, height ) : + CreateBitmap32( width, height, 1, 1, NULL ); if (!handle) return 0; if (init == CBM_INIT) diff --git a/objects/font.c b/objects/font.c index edf0266248f..7912362485e 100644 --- a/objects/font.c +++ b/objects/font.c @@ -202,30 +202,81 @@ void FONT_GetMetrics( LOGFONT16 * logfont, XFontStruct * xfont, metrics->tmAveCharWidth = average; } + /*********************************************************************** - * GetGlyphOutLine (GDI.309) + * GetGlyphOutline16 (GDI.309) */ -DWORD GetGlyphOutLine( HDC16 hdc, UINT uChar, UINT fuFormat, - LPGLYPHMETRICS lpgm, DWORD cbBuffer, LPSTR lpBuffer, - LPMAT2 lpmat2) +DWORD GetGlyphOutline16( HDC16 hdc, UINT16 uChar, UINT16 fuFormat, + LPGLYPHMETRICS16 lpgm, DWORD cbBuffer, + LPVOID lpBuffer, const MAT2 *lpmat2 ) { - fprintf( stdnimp,"GetGlyphOutLine(%04x, '%c', %04x, %p, %ld, %p, %p) // - empty stub!\n", + fprintf( stdnimp,"GetGlyphOutLine16(%04x, '%c', %04x, %p, %ld, %p, %p) // - empty stub!\n", hdc, uChar, fuFormat, lpgm, cbBuffer, lpBuffer, lpmat2 ); return (DWORD)-1; /* failure */ } /*********************************************************************** - * CreateScalableFontResource (GDI.310) + * GetGlyphOutline32A (GDI32.186) */ -BOOL CreateScalableFontResource( UINT fHidden,LPSTR lpszResourceFile, - LPSTR lpszFontFile, LPSTR lpszCurrentPath ) +DWORD GetGlyphOutline32A( HDC32 hdc, UINT32 uChar, UINT32 fuFormat, + LPGLYPHMETRICS32 lpgm, DWORD cbBuffer, + LPVOID lpBuffer, const MAT2 *lpmat2 ) +{ + fprintf( stdnimp,"GetGlyphOutLine32A(%04x, '%c', %04x, %p, %ld, %p, %p) // - empty stub!\n", + hdc, uChar, fuFormat, lpgm, cbBuffer, lpBuffer, lpmat2 ); + return (DWORD)-1; /* failure */ +} + + +/*********************************************************************** + * GetGlyphOutline32W (GDI32.187) + */ +DWORD GetGlyphOutline32W( HDC32 hdc, UINT32 uChar, UINT32 fuFormat, + LPGLYPHMETRICS32 lpgm, DWORD cbBuffer, + LPVOID lpBuffer, const MAT2 *lpmat2 ) +{ + fprintf( stdnimp,"GetGlyphOutLine32W(%04x, '%c', %04x, %p, %ld, %p, %p) // - empty stub!\n", + hdc, uChar, fuFormat, lpgm, cbBuffer, lpBuffer, lpmat2 ); + return (DWORD)-1; /* failure */ +} + + +/*********************************************************************** + * CreateScalableFontResource16 (GDI.310) + */ +BOOL16 CreateScalableFontResource16( UINT16 fHidden, LPCSTR lpszResourceFile, + LPCSTR fontFile, LPCSTR path ) +{ + return CreateScalableFontResource32A( fHidden, lpszResourceFile, + fontFile, path ); +} + +/*********************************************************************** + * CreateScalableFontResource32A (GDI32.62) + */ +BOOL32 CreateScalableFontResource32A( DWORD fHidden, LPCSTR lpszResourceFile, + LPCSTR lpszFontFile, + LPCSTR lpszCurrentPath ) { /* fHidden=1 - only visible for the calling app, read-only, not * enumbered with EnumFonts/EnumFontFamilies * lpszCurrentPath can be NULL */ - fprintf(stdnimp,"CreateScalableFontResource(%d,%s,%s,%s) // empty stub!\n", + fprintf(stdnimp,"CreateScalableFontResource(%ld,%s,%s,%s) // empty stub\n", + fHidden, lpszResourceFile, lpszFontFile, lpszCurrentPath ); + return FALSE; /* create failed */ +} + + +/*********************************************************************** + * CreateScalableFontResource32W (GDI32.63) + */ +BOOL32 CreateScalableFontResource32W( DWORD fHidden, LPCWSTR lpszResourceFile, + LPCWSTR lpszFontFile, + LPCWSTR lpszCurrentPath ) +{ + fprintf(stdnimp,"CreateScalableFontResource32W(%ld,%p,%p,%p) // empty stub\n", fHidden, lpszResourceFile, lpszFontFile, lpszCurrentPath ); return FALSE; /* create failed */ } @@ -890,9 +941,18 @@ BOOL32 GetCharWidth32W( HDC32 hdc, UINT32 firstChar, UINT32 lastChar, /*********************************************************************** - * AddFontResource (GDI.119) + * AddFontResource16 (GDI.119) */ -INT AddFontResource( LPCSTR str ) +INT16 AddFontResource16( LPCSTR str ) +{ + return AddFontResource32A( str ); +} + + +/*********************************************************************** + * AddFontResource32A (GDI32.2) + */ +INT32 AddFontResource32A( LPCSTR str ) { if (HIWORD(str)) fprintf( stdnimp, "STUB: AddFontResource('%s')\n", str ); @@ -903,9 +963,28 @@ INT AddFontResource( LPCSTR str ) /*********************************************************************** - * RemoveFontResource (GDI.136) + * AddFontResource32W (GDI32.4) */ -BOOL RemoveFontResource( LPSTR str ) +INT32 AddFontResource32W( LPCWSTR str ) +{ + fprintf( stdnimp, "STUB: AddFontResource32W(%p)\n", str ); + return 1; +} + + +/*********************************************************************** + * RemoveFontResource16 (GDI.136) + */ +BOOL16 RemoveFontResource16( LPCSTR str ) +{ + return RemoveFontResource32A( str ); +} + + +/*********************************************************************** + * RemoveFontResource32A (GDI32.284) + */ +BOOL32 RemoveFontResource32A( LPCSTR str ) { if (HIWORD(str)) fprintf( stdnimp, "STUB: RemoveFontResource('%s')\n", str ); @@ -914,6 +993,17 @@ BOOL RemoveFontResource( LPSTR str ) return TRUE; } + +/*********************************************************************** + * RemoveFontResource32W (GDI32.286) + */ +BOOL32 RemoveFontResource32W( LPCWSTR str ) +{ + fprintf( stdnimp, "STUB: RemoveFontResource32W(%p)\n", str ); + return TRUE; +} + + /************************************************************************* * FONT_ParseFontParms [internal] */ @@ -1350,10 +1440,18 @@ INT32 EnumFontFamiliesEx32W(HDC32 hDC, LPLOGFONT32W lpLF, FONTENUMPROCEX32W lpEn /************************************************************************* - * GetRasterizerCaps [GDI.313] + * GetRasterizerCaps16 (GDI.313) */ +BOOL16 GetRasterizerCaps16( LPRASTERIZER_STATUS lprs, UINT16 cbNumBytes ) +{ + return GetRasterizerCaps32( lprs, cbNumBytes ); +} -BOOL GetRasterizerCaps(LPRASTERIZER_STATUS lprs, UINT cbNumBytes) + +/************************************************************************* + * GetRasterizerCaps32 (GDI32.216) + */ +BOOL32 GetRasterizerCaps32( LPRASTERIZER_STATUS lprs, UINT32 cbNumBytes ) { /* This is not much more than a dummy */ RASTERIZER_STATUS rs; @@ -1361,22 +1459,49 @@ BOOL GetRasterizerCaps(LPRASTERIZER_STATUS lprs, UINT cbNumBytes) rs.nSize = sizeof(rs); rs.wFlags = 0; rs.nLanguageID = 0; - return True; + return TRUE; } + /************************************************************************* - * GetKerningPairs [GDI.332] + * GetKerningPairs16 (GDI.332) */ -int GetKerningPairs(HDC16 hDC,int cPairs,LPKERNINGPAIR16 lpKerningPairs) +INT16 GetKerningPairs16( HDC16 hDC, INT16 cPairs, + LPKERNINGPAIR16 lpKerningPairs ) { /* This has to be dealt with when proper font handling is in place * * At this time kerning is ignored (set to 0) */ - int i; - fprintf(stdnimp,"GetKerningPairs: almost empty stub!\n"); + fprintf(stdnimp,"GetKerningPairs16: almost empty stub!\n"); for (i = 0; i < cPairs; i++) lpKerningPairs[i].iKernAmount = 0; return 0; } + +/************************************************************************* + * GetKerningPairs32A (GDI32.192) + */ +DWORD GetKerningPairs32A( HDC32 hDC, DWORD cPairs, + LPKERNINGPAIR32 lpKerningPairs ) +{ + /* This has to be dealt with when proper font handling is in place + * + * At this time kerning is ignored (set to 0) + */ + int i; + fprintf(stdnimp,"GetKerningPairs32: almost empty stub!\n"); + for (i = 0; i < cPairs; i++) lpKerningPairs[i].iKernAmount = 0; + return 0; +} + + +/************************************************************************* + * GetKerningPairs32W (GDI32.193) + */ +DWORD GetKerningPairs32W( HDC32 hDC, DWORD cPairs, + LPKERNINGPAIR32 lpKerningPairs ) +{ + return GetKerningPairs32A( hDC, cPairs, lpKerningPairs ); +} diff --git a/objects/gdiobj.c b/objects/gdiobj.c index d8eccaa3cb1..4422ed8215a 100644 --- a/objects/gdiobj.c +++ b/objects/gdiobj.c @@ -4,7 +4,6 @@ * Copyright 1993 Alexandre Julliard */ -#define NO_TRANSITION_TYPES /* This file is Win32-clean */ #include #include #include "color.h" diff --git a/objects/linedda.c b/objects/linedda.c index be9693f8247..d0cf871a033 100644 --- a/objects/linedda.c +++ b/objects/linedda.c @@ -4,7 +4,6 @@ * Copyright 1993 Bob Amstadt */ -#define NO_TRANSITION_TYPES /* This file is Win32-clean */ #include #include "windows.h" diff --git a/objects/metafile.c b/objects/metafile.c index d5dcf12e14b..64701e95c15 100644 --- a/objects/metafile.c +++ b/objects/metafile.c @@ -217,7 +217,7 @@ HMETAFILE32 CopyMetaFile32W( HMETAFILE32 hSrcMetaFile, LPCWSTR lpFilename ) BOOL16 IsValidMetaFile(HMETAFILE16 hmf) { - BOOL resu=FALSE; + BOOL16 resu=FALSE; METAHEADER *mh = (METAHEADER *)GlobalLock16(hmf); if (mh) { if (mh->mtType == 1 || mh->mtType == 0) @@ -276,7 +276,7 @@ BOOL32 PlayMetaFile32( HDC32 hdc, HMETAFILE32 hmf ) dprintf_metafile(stddeb,"offset = %04x size = %08lx function = %04x\n", offset,mr->rdSize,mr->rdFunction); offset += mr->rdSize * 2; - PlayMetaFileRecord(hdc, ht, mr, mh->mtNoObjects); + PlayMetaFileRecord16( hdc, ht, mr, mh->mtNoObjects ); } SelectObject32(hdc, hBrush); @@ -296,11 +296,11 @@ BOOL32 PlayMetaFile32( HDC32 hdc, HMETAFILE32 hmf ) /****************************************************************** - * EnumMetafile GDI.175 + * EnumMetaFile16 (GDI.175) * Niels de carpentier, april 1996 */ - -BOOL EnumMetaFile(HDC16 hdc, HMETAFILE16 hmf, MFENUMPROC16 lpEnumFunc,LPARAM lpData) +BOOL16 EnumMetaFile16( HDC16 hdc, HMETAFILE16 hmf, MFENUMPROC16 lpEnumFunc, + LPARAM lpData ) { METAHEADER *mh = (METAHEADER *)GlobalLock16(hmf); METARECORD *mr; @@ -341,11 +341,10 @@ BOOL EnumMetaFile(HDC16 hdc, HMETAFILE16 hmf, MFENUMPROC16 lpEnumFunc,LPARAM lpD /****************************************************************** - * PlayMetaFileRecord GDI.176 + * PlayMetaFileRecord16 (GDI.176) */ - -void PlayMetaFileRecord(HDC16 hdc, HANDLETABLE16 *ht, METARECORD *mr, - WORD nHandles) +void PlayMetaFileRecord16( HDC16 hdc, HANDLETABLE16 *ht, METARECORD *mr, + UINT16 nHandles ) { short s1; HANDLE16 hndl; @@ -366,7 +365,7 @@ void PlayMetaFileRecord(HDC16 hdc, HANDLETABLE16 *ht, METARECORD *mr, break; case META_SETBKCOLOR: - SetBkColor(hdc, MAKELONG(*(mr->rdParam), *(mr->rdParam + 1))); + SetBkColor16(hdc, MAKELONG(*(mr->rdParam), *(mr->rdParam + 1))); break; case META_SETBKMODE: @@ -393,7 +392,7 @@ void PlayMetaFileRecord(HDC16 hdc, HANDLETABLE16 *ht, METARECORD *mr, SetStretchBltMode16(hdc, *(mr->rdParam)); break; case META_SETTEXTCOLOR: - SetTextColor(hdc, MAKELONG(*(mr->rdParam), *(mr->rdParam + 1))); + SetTextColor16(hdc, MAKELONG(*(mr->rdParam), *(mr->rdParam + 1))); break; case META_SETWINDOWORG: @@ -543,7 +542,7 @@ void PlayMetaFileRecord(HDC16 hdc, HANDLETABLE16 *ht, METARECORD *mr, case BS_PATTERN: infohdr = (BITMAPINFOHEADER *)(mr->rdParam + 2); MF_AddHandle(ht, nHandles, - CreatePatternBrush32(CreateBitmap(infohdr->biWidth, + CreatePatternBrush32(CreateBitmap32(infohdr->biWidth, infohdr->biHeight, infohdr->biPlanes, infohdr->biBitCount, @@ -660,11 +659,11 @@ void PlayMetaFileRecord(HDC16 hdc, HANDLETABLE16 *ht, METARECORD *mr, case META_STRETCHBLT: { HDC16 hdcSrc=CreateCompatibleDC16(hdc); - HBITMAP16 hbitmap=CreateBitmap(mr->rdParam[10], /*Width */ - mr->rdParam[11], /*Height*/ - mr->rdParam[13], /*Planes*/ - mr->rdParam[14], /*BitsPixel*/ - (LPSTR)&mr->rdParam[15]); /*bits*/ + HBITMAP32 hbitmap=CreateBitmap32(mr->rdParam[10], /*Width */ + mr->rdParam[11], /*Height*/ + mr->rdParam[13], /*Planes*/ + mr->rdParam[14], /*BitsPixel*/ + (LPSTR)&mr->rdParam[15]); /*bits*/ SelectObject32(hdcSrc,hbitmap); StretchBlt16(hdc,mr->rdParam[9],mr->rdParam[8], mr->rdParam[7],mr->rdParam[6], @@ -678,9 +677,11 @@ void PlayMetaFileRecord(HDC16 hdc, HANDLETABLE16 *ht, METARECORD *mr, case META_BITBLT: /* <-- not yet debugged */ { HDC16 hdcSrc=CreateCompatibleDC16(hdc); - HBITMAP16 hbitmap=CreateBitmap(mr->rdParam[7]/*Width */,mr->rdParam[8]/*Height*/, - mr->rdParam[10]/*Planes*/,mr->rdParam[11]/*BitsPixel*/, - (LPSTR)&mr->rdParam[12]/*bits*/); + HBITMAP32 hbitmap=CreateBitmap32(mr->rdParam[7]/*Width */, + mr->rdParam[8]/*Height*/, + mr->rdParam[10]/*Planes*/, + mr->rdParam[11]/*BitsPixel*/, + (LPSTR)&mr->rdParam[12]/*bits*/); SelectObject32(hdcSrc,hbitmap); BitBlt32(hdc,(INT16)mr->rdParam[6],(INT16)mr->rdParam[5], (INT16)mr->rdParam[4],(INT16)mr->rdParam[3], @@ -1162,7 +1163,8 @@ BOOL32 MF_BitBlt(DC *dcDest, short xDest, short yDest, short width, *(mr->rdParam +10) = BM.bmPlanes; *(mr->rdParam +11) = BM.bmBitsPixel; dprintf_metafile(stddeb,"MF_StretchBlt->len = %ld rop=%lx \n",len,rop); - if (GetBitmapBits(dcSrc->w.hBitmap,BM.bmWidthBytes * BM.bmHeight,mr->rdParam +12)) + if (GetBitmapBits32(dcSrc->w.hBitmap,BM.bmWidthBytes * BM.bmHeight, + mr->rdParam +12)) { mr->rdSize = len / sizeof(INT16); *(mr->rdParam) = HIWORD(rop); @@ -1227,7 +1229,7 @@ BOOL32 MF_StretchBlt(DC *dcDest, short xDest, short yDest, short widthDest, dprintf_metafile(stddeb,"MF_StretchBltViaDIB->len = %ld rop=%lx PixYPM=%ld Caps=%d\n", len,rop,lpBMI->biYPelsPerMeter,GetDeviceCaps(hdcSrc,LOGPIXELSY)); - if (GetDIBits(hdcSrc,dcSrc->w.hBitmap,0,(UINT)lpBMI->biHeight, + if (GetDIBits(hdcSrc,dcSrc->w.hBitmap,0,(UINT32)lpBMI->biHeight, (LPSTR)lpBMI + DIB_BitmapInfoSize( (BITMAPINFO *)lpBMI, DIB_RGB_COLORS ), (LPBITMAPINFO)lpBMI, DIB_RGB_COLORS)) @@ -1243,7 +1245,8 @@ BOOL32 MF_StretchBlt(DC *dcDest, short xDest, short yDest, short widthDest, *(mr->rdParam +13) = BM.bmPlanes; *(mr->rdParam +14) = BM.bmBitsPixel; dprintf_metafile(stddeb,"MF_StretchBlt->len = %ld rop=%lx \n",len,rop); - if (GetBitmapBits(dcSrc->w.hBitmap,BM.bmWidthBytes * BM.bmHeight,mr->rdParam +15)) + if (GetBitmapBits32( dcSrc->w.hBitmap, BM.bmWidthBytes * BM.bmHeight, + mr->rdParam +15)) #endif { mr->rdSize = len / sizeof(INT16); diff --git a/objects/oembitmap.c b/objects/oembitmap.c index 224f658acd5..6fb8aabaa95 100644 --- a/objects/oembitmap.c +++ b/objects/oembitmap.c @@ -5,7 +5,6 @@ * */ -#define NO_TRANSITION_TYPES /* This file is Win32-clean */ #include #include #include @@ -482,9 +481,9 @@ HGLOBAL16 OBM_LoadCursorIcon( WORD id, BOOL32 fCursor ) } } - if (hAndBits) GetBitmapBits( hAndBits, sizeAnd, (char *)(pInfo + 1) ); + if (hAndBits) GetBitmapBits32( hAndBits, sizeAnd, (char *)(pInfo + 1) ); else memset( (char *)(pInfo + 1), 0xff, sizeAnd ); - GetBitmapBits( hXorBits, sizeXor, (char *)(pInfo + 1) + sizeAnd ); + GetBitmapBits32( hXorBits, sizeXor, (char *)(pInfo + 1) + sizeAnd ); DeleteObject32( hXorBits ); DeleteObject32( hAndBits ); diff --git a/objects/palette.c b/objects/palette.c index 5c38d23dfba..9faca5f2c33 100644 --- a/objects/palette.c +++ b/objects/palette.c @@ -6,7 +6,6 @@ * */ -#define NO_TRANSITION_TYPES /* This file is Win32-clean */ #include #include #include @@ -572,10 +571,9 @@ UINT32 RealizePalette32( HDC32 hDC ) /********************************************************************** - * UpdateColors (GDI.366) - * + * UpdateColors16 (GDI.366) */ -int UpdateColors( HDC16 hDC ) +INT16 UpdateColors16( HDC16 hDC ) { HWND32 hWnd = WindowFromDC32( hDC ); @@ -587,3 +585,12 @@ int UpdateColors( HDC16 hDC ) return 0x666; } + +/********************************************************************** + * UpdateColors32 (GDI32.359) + */ +BOOL32 UpdateColors32( HDC32 hDC ) +{ + UpdateColors16( hDC ); + return TRUE; +} diff --git a/objects/pen.c b/objects/pen.c index 2cca5764fcd..f33b791eeb3 100644 --- a/objects/pen.c +++ b/objects/pen.c @@ -4,7 +4,6 @@ * Copyright 1993 Alexandre Julliard */ -#define NO_TRANSITION_TYPES /* This file is Win32-clean */ #include "pen.h" #include "metafile.h" #include "color.h" diff --git a/objects/region.c b/objects/region.c index 18e808db6c8..3575132b6a1 100644 --- a/objects/region.c +++ b/objects/region.c @@ -4,7 +4,6 @@ * Copyright 1993, 1994, 1995 Alexandre Julliard */ -#define NO_TRANSITION_TYPES /* This file is Win32-clean */ #include #include #include "region.h" @@ -137,9 +136,20 @@ HRGN32 CreateRectRgnIndirect32( const RECT32* rect ) /*********************************************************************** - * SetRectRgn (GDI.172) (GDI32.332) + * SetRectRgn16 (GDI.172) */ -VOID SetRectRgn( HRGN32 hrgn, INT32 left, INT32 top, INT32 right, INT32 bottom) +VOID SetRectRgn16( HRGN16 hrgn, INT16 left, INT16 top, + INT16 right, INT16 bottom ) +{ + SetRectRgn32( hrgn, left, top, right, bottom ); +} + + +/*********************************************************************** + * SetRectRgn32 (GDI32.332) + */ +VOID SetRectRgn32( HRGN32 hrgn, INT32 left, INT32 top, + INT32 right, INT32 bottom ) { RGNOBJ * obj; diff --git a/objects/text.c b/objects/text.c index 1fcf6227bde..ce7572b47db 100644 --- a/objects/text.c +++ b/objects/text.c @@ -401,10 +401,9 @@ BOOL16 GrayString16( HDC16 hdc, HBRUSH16 hbr, GRAYSTRINGPROC16 gsprc, if (!cch) cch = lstrlen16( (LPCSTR)PTR_SEG_TO_LIN(lParam) ); if (gsprc) return gsprc( hdc, lParam, cch ); - current_color = GetTextColor32( hdc ); - SetTextColor( hdc, GetSysColor32(COLOR_GRAYTEXT) ); + current_color = SetTextColor32( hdc, GetSysColor32(COLOR_GRAYTEXT) ); ret = TextOut16( hdc, x, y, (LPCSTR)PTR_SEG_TO_LIN(lParam), cch ); - SetTextColor( hdc, current_color ); + SetTextColor32( hdc, current_color ); return ret; } @@ -421,10 +420,9 @@ BOOL32 GrayString32A( HDC32 hdc, HBRUSH32 hbr, GRAYSTRINGPROC32 gsprc, if (!cch) cch = lstrlen32A( (LPCSTR)lParam ); if (gsprc) return gsprc( hdc, lParam, cch ); - current_color = GetTextColor32( hdc ); - SetTextColor( hdc, GetSysColor32(COLOR_GRAYTEXT) ); + current_color = SetTextColor32( hdc, GetSysColor32(COLOR_GRAYTEXT) ); ret = TextOut32A( hdc, x, y, (LPCSTR)lParam, cch ); - SetTextColor( hdc, current_color ); + SetTextColor32( hdc, current_color ); return ret; } @@ -441,10 +439,9 @@ BOOL32 GrayString32W( HDC32 hdc, HBRUSH32 hbr, GRAYSTRINGPROC32 gsprc, if (!cch) cch = lstrlen32W( (LPCWSTR)lParam ); if (gsprc) return gsprc( hdc, lParam, cch ); - current_color = GetTextColor32( hdc ); - SetTextColor( hdc, GetSysColor32(COLOR_GRAYTEXT) ); + current_color = SetTextColor32( hdc, GetSysColor32(COLOR_GRAYTEXT) ); ret = TextOut32W( hdc, x, y, (LPCWSTR)lParam, cch ); - SetTextColor( hdc, current_color ); + SetTextColor32( hdc, current_color ); return ret; } diff --git a/rc/Makefile.in b/rc/Makefile.in index 36f04e20fbb..55c6b9e3555 100644 --- a/rc/Makefile.in +++ b/rc/Makefile.in @@ -1,4 +1,4 @@ -DEFS = -D__WINE__ -DNO_TRANSITION_TYPES +DEFS = -D__WINE__ TOPSRCDIR = @top_srcdir@ TOPOBJDIR = .. SRCDIR = @srcdir@ diff --git a/rc/parser.l b/rc/parser.l index bfca5cefe18..6b98c8da6b4 100644 --- a/rc/parser.l +++ b/rc/parser.l @@ -34,7 +34,7 @@ DIALOG return DIALOG; DISCARDABLE return DISCARDABLE; EDITTEXT return EDITTEXT; END return tEND; -FIXED return FIXED; +FIXED return tFIXED; FONT return FONT; GRAYED return GRAYED; GROUPBOX return GROUPBOX; diff --git a/rc/parser.y b/rc/parser.y index 53f6bf53ae3..bbf38fa7979 100644 --- a/rc/parser.y +++ b/rc/parser.y @@ -23,7 +23,7 @@ int yyerror(const char *s); %token tSTRING SINGLE_QUOTED IDENT %token ACCELERATORS ALT ASCII tBEGIN tBITMAP CAPTION CHECKBOX CHECKED %token CLASS COMBOBOX CONTROL CTEXT CURSOR DEFPUSHBUTTON DIALOG -%token DISCARDABLE EDITTEXT tEND FIXED FONT GRAYED GROUPBOX HELP ICON +%token DISCARDABLE EDITTEXT tEND tFIXED FONT GRAYED GROUPBOX HELP ICON %token IDENT INACTIVE LISTBOX LTEXT MENU MENUBARBREAK MENUBREAK MENUITEM %token MOVEABLE LOADONCALL NOINVERT NOT NOT_SUPPORTED POPUP PRELOAD %token PURE PUSHBUTTON RADIOBUTTON RCDATA RTEXT SCROLLBAR SHIFT SEPARATOR @@ -93,7 +93,7 @@ bitmap: tBITMAP load_and_memoption tSTRING {$$=make_bitmap(load_file($3));} /* load and memory options are ignored */ load_and_memoption: | lamo load_and_memoption -lamo: PRELOAD | LOADONCALL | FIXED | MOVEABLE | DISCARDABLE | PURE +lamo: PRELOAD | LOADONCALL | tFIXED | MOVEABLE | DISCARDABLE | PURE cursor: CURSOR load_and_memoption tSTRING {$$=make_cursor(load_file($3));} |CURSOR load_and_memoption raw_data {$$=make_cursor($3);} diff --git a/resources/Makefile.in b/resources/Makefile.in index e54a75f5d58..09d0d85d3a7 100644 --- a/resources/Makefile.in +++ b/resources/Makefile.in @@ -1,4 +1,4 @@ -DEFS = -D__WINE__ -DNO_TRANSITION_TYPES +DEFS = -D__WINE__ TOPSRCDIR = @top_srcdir@ TOPOBJDIR = .. SRCDIR = @srcdir@ @@ -18,7 +18,8 @@ SYSRES_SRCS = \ sysres_Hu.c \ sysres_It.c \ sysres_Ko.c \ - sysres_No.c + sysres_No.c \ + sysres_Pl.c C_SRCS = sysres.c GEN_C_SRCS = $(SYSRES_SRCS) diff --git a/resources/sysres.c b/resources/sysres.c index 0bc35142756..03b41e3fb14 100644 --- a/resources/sysres.c +++ b/resources/sysres.c @@ -21,6 +21,7 @@ #include "sysres_It.h" #include "sysres_Ko.h" #include "sysres_Hu.h" +#include "sysres_Pl.h" static const struct resource * const * SYSRES_Resources[] = { @@ -35,7 +36,8 @@ static const struct resource * const * SYSRES_Resources[] = sysres_Eo_Table, /* LANG_Eo */ sysres_It_Table, /* LANG_It */ sysres_Ko_Table, /* LANG_Ko */ - sysres_Hu_Table /* LANG_Hu */ + sysres_Hu_Table, /* LANG_Hu */ + sysres_Pl_Table /* LANG_Pl */ }; diff --git a/resources/sysres_Pl.rc b/resources/sysres_Pl.rc new file mode 100644 index 00000000000..1af3dfff167 --- /dev/null +++ b/resources/sysres_Pl.rc @@ -0,0 +1,241 @@ +SYSMENU MENU LOADONCALL MOVEABLE DISCARDABLE +{ + MENUITEM "&Przywróæ", 61728 + MENUITEM "Prze&suñ", 61456 + MENUITEM "&Rozmiar", 61440 + MENUITEM "Do &ikony", 61472 + MENUITEM "Pe³ny &ekran", 61488 + MENUITEM SEPARATOR + MENUITEM "&Zamknij\tAlt-F4", 61536 + MENUITEM SEPARATOR + MENUITEM "Prze³¹&cz na...\tCtrl-Esc", 61744 + MENUITEM SEPARATOR + MENUITEM "&O programie WINE...", 61761 +} + +EDITMENU MENU LOADONCALL MOVEABLE DISCARDABLE +{ + POPUP "" + BEGIN + MENUITEM "&Cofnij", EM_UNDO32 + MENUITEM SEPARATOR + MENUITEM "W&ytnij", WM_CUT + MENUITEM "&Kopiuj", WM_COPY + MENUITEM "&Wklej", WM_PASTE + MENUITEM "&Usu\xf1", WM_CLEAR + MENUITEM SEPARATOR + MENUITEM "&Zaznacz wszystko", EM_SETSEL32 + END +} + +MSGBOX DIALOG 100, 80, 216, 168 +STYLE DS_SYSMODAL | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +BEGIN + ICON "", 1088, 8, 20, 16, 16, WS_CHILD | WS_VISIBLE + LTEXT "", 100, 32, 4, 176, 48, WS_CHILD | WS_VISIBLE | WS_GROUP + PUSHBUTTON "Ok", 1, 16, 56, 40, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP + PUSHBUTTON "Anuluj", 2, 64, 56, 40, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP + PUSHBUTTON "&Zaniechaj", 3, 112, 56, 40, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP + PUSHBUTTON "&Ponów próbê", 4, 160, 56, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP + PUSHBUTTON "&Ignoruj", 5, 215, 56, 40, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP + PUSHBUTTON "&Tak", 6, 263, 56, 40, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP + PUSHBUTTON "&Nie", 7, 311, 56, 40, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP +END +SHELL_ABOUT_MSGBOX DIALOG 50, 44, 223, 270 +STYLE DS_LOCALEDIT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "O %s" +FONT 10, "System" +{ + DEFPUSHBUTTON "OK", 1, 91, 250, 40, 14 + CONTROL "", -1, "STATIC", SS_BLACKFRAME | WS_CHILD | WS_VISIBLE | WS_DISABLED, 4, 35, 215, 210 + CONTROL "Text", 100, "STATIC", SS_NOPREFIX | WS_GROUP, 11, 40, 200, 200 + ICON "", 1088, 195, 10, 18, 20 +} +//LTEXT "Wyswietl pliki &typu:", 1089, 6, 104, 90, 9 +OPEN_FILE DIALOG 36, 24, 279, 134 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Otwórz" +FONT 8, "Helv" +BEGIN + LTEXT "&Nazwa pliku:", 1090, 6, 6, 76, 9, WS_CHILD | WS_VISIBLE | WS_GROUP + EDITTEXT 1152, 6, 16, 90, 12, ES_AUTOHSCROLL | ES_OEMCONVERT | WS_BORDER | WS_TABSTOP + LISTBOX 1120, 6, 32, 90, 68, LBS_STANDARD | LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_TABSTOP + LTEXT "&Katalogi:", -1, 110, 6, 92, 9, WS_CHILD | WS_VISIBLE | WS_GROUP + CONTROL "", 1088, "STATIC", SS_NOPREFIX | WS_GROUP, 110, 18, 92, 9 + LISTBOX 1121, 110, 32, 92, 68, LBS_STANDARD | LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_TABSTOP + LTEXT "Wyœwietl pliki &typu:", 1089, 6, 104, 90, 9, WS_CHILD | WS_VISIBLE | WS_GROUP + CONTROL "", 1136, "COMBOBOX", CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_BORDER | WS_VSCROLL | WS_TABSTOP, 6, 114, 90, 36 + LTEXT "&Stacje dysków:", 1091, 110, 104, 92, 9, WS_CHILD | WS_VISIBLE | WS_GROUP + CONTROL "", 1137, "COMBOBOX", CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_AUTOHSCROLL | CBS_SORT | CBS_HASSTRINGS | WS_BORDER | WS_VSCROLL | WS_TABSTOP, 110, 114, 92, 68 + CONTROL "Otwórz", 1, "BUTTON", BS_DEFPUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_GROUP | WS_TABSTOP, 212, 6, 56, 14 + CONTROL "Anuluj", 2, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_GROUP | WS_TABSTOP, 212, 24, 56, 14 + CONTROL "&Pomoc", 1038, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_GROUP | WS_TABSTOP, 212, 46, 56, 14 + CONTROL "Tylko do odczytu", 1040, "BUTTON", BS_AUTOCHECKBOX | WS_CHILD | WS_VISIBLE | WS_GROUP | WS_TABSTOP, 208, 68, 69, 12 +END +//PRINT DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 264, 134 +SAVE_FILE DIALOG 36, 24, 278, 134 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Zapisz jako" +FONT 8, "Helv" +BEGIN + LTEXT "&Nazwa pliku:", 1090, 6, 6, 76, 9, WS_CHILD | WS_VISIBLE | WS_GROUP + EDITTEXT 1152, 6, 16, 90, 12, ES_AUTOHSCROLL | ES_OEMCONVERT | WS_BORDER | WS_TABSTOP + LISTBOX 1120, 6, 32, 90, 68, LBS_STANDARD | LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_TABSTOP + LTEXT "&Katalogi:", -1, 110, 6, 92, 9, WS_CHILD | WS_VISIBLE | WS_GROUP + CONTROL "", 1088, "STATIC", SS_NOPREFIX | WS_GROUP, 110, 18, 92, 9 + LISTBOX 1121, 110, 32, 92, 68, LBS_STANDARD | LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_TABSTOP + LTEXT "Pokazuj pliki &typu:", 1089, 6, 104, 90, 9, WS_CHILD | WS_VISIBLE | WS_GROUP + CONTROL "", 1136, "COMBOBOX", CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_BORDER | WS_VSCROLL | WS_TABSTOP, 6, 114, 90, 36 + LTEXT "&Stacje dysków:", 1091, 110, 104, 92, 9, WS_CHILD | WS_VISIBLE | WS_GROUP + CONTROL "", 1137, "COMBOBOX", CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_AUTOHSCROLL | CBS_SORT | CBS_HASSTRINGS | WS_BORDER | WS_VSCROLL | WS_TABSTOP, 110, 114, 92, 68 + CONTROL "Ok", 1, "BUTTON", BS_DEFPUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_GROUP | WS_TABSTOP, 213, 6, 56, 14 + CONTROL "Anuluj", 2, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_GROUP | WS_TABSTOP, 213, 24, 56, 14 + CONTROL "&Pomoc", 1038, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_GROUP | WS_TABSTOP, 213, 45, 56, 14 + CONTROL "&Tylko do odczytu", 1040, "BUTTON", BS_AUTOCHECKBOX | WS_CHILD | WS_VISIBLE | WS_GROUP | WS_TABSTOP, 208, 68, 68, 12 +END +// DEFPUSHBUTTON "Ok", 1, 206, 6, 56, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP +PRINT DIALOG 36, 24, 264, 134 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Drukuj" +FONT 8, "Helv" +BEGIN + LTEXT "&Drukarka:", 1088, 6, 6, 40, 9, WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "", 1089, 60, 6, 150, 9 + GROUPBOX "Drukuj", 1072, 6, 30, 160, 65, WS_CHILD | WS_VISIBLE | WS_TABSTOP + RADIOBUTTON "&Wszystko", 1056, 16, 45, 60, 12, WS_CHILD | WS_VISIBLE | WS_TABSTOP + RADIOBUTTON "W&ybór", 1057, 16, 60, 60, 12, WS_CHILD | WS_VISIBLE | WS_TABSTOP + RADIOBUTTON "&Strony", 1058, 16, 75, 60, 12, WS_CHILD | WS_VISIBLE | WS_TABSTOP + CONTROL "Drukuj", 1, "BUTTON", BS_DEFPUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_GROUP | WS_TABSTOP, 206, 6, 56, 14 + CONTROL "Anuluj", 2, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_GROUP | WS_TABSTOP, 206, 24, 56, 14 + CONTROL "&Ustawienia", 1024, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_GROUP | WS_TABSTOP, 206, 46, 56, 14 + LTEXT "&Od:", 1090, 60, 78, 30, 9, WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "&Do:", 1091, 120, 78, 30, 9, WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "Jakoœæ &wydruku:", 1092, 6, 100, 76, 9, WS_CHILD | WS_VISIBLE | WS_GROUP + CONTROL "", 1136, "COMBOBOX", CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_AUTOHSCROLL | CBS_SORT | CBS_HASSTRINGS | WS_BORDER | WS_VSCROLL | WS_TABSTOP, 71, 98, 92, 68 + CONTROL "Drukuj do Pli&ku", 1040, "BUTTON", BS_AUTOCHECKBOX | WS_CHILD | WS_VISIBLE | WS_GROUP | WS_TABSTOP, 14, 115, 95, 12 + CONTROL "Sortuj kopie", 1041, "BUTTON", BS_AUTOCHECKBOX | WS_CHILD | WS_VISIBLE | WS_GROUP | WS_TABSTOP, 182, 102, 59, 12 +END +// PUSHBUTTON "Anuluj",IDCANCEL,218,23,40,14,WS_GROUP +PRINT_SETUP DIALOG 36, 24, 264, 134 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Print Setup" +FONT 8, "Helv" +BEGIN + GROUPBOX "Drukarka", 1072, 6, 10, 180, 65, WS_CHILD | WS_VISIBLE | WS_TABSTOP + RADIOBUTTON "&Drukarka domyœlna", 1056, 16, 20, 80, 12, WS_CHILD | WS_VISIBLE | WS_TABSTOP + LTEXT "[none]", 1088, 35, 35, 120, 9 + RADIOBUTTON "&Inna drukarka", 1057, 16, 50, 80, 12, WS_CHILD | WS_VISIBLE | WS_TABSTOP + CONTROL "", 1136, "COMBOBOX", CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_AUTOHSCROLL | CBS_SORT | CBS_HASSTRINGS | WS_BORDER | WS_VSCROLL | WS_TABSTOP, 35, 65, 149, 68 + CONTROL "Ok", 1, "BUTTON", BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP, 206, 6, 56, 14 + CONTROL "Anuluj", 2, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_GROUP | WS_TABSTOP, 206, 24, 56, 14 + CONTROL "&Opcje", 1024, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_GROUP | WS_TABSTOP, 206, 46, 56, 14 + GROUPBOX "Orientacja", 1073, 6, 85, 100, 50, WS_CHILD | WS_VISIBLE | WS_TABSTOP + RADIOBUTTON "W p&ionie", 1058, 50, 100, 40, 12, WS_CHILD | WS_VISIBLE | WS_TABSTOP + RADIOBUTTON "W po&ziomie", 1059, 50, 115, 40, 12, WS_CHILD | WS_VISIBLE | WS_TABSTOP + ICON "LANDSCAP", 1097, 10, 95, 32, 32 + ICON "PORTRAIT", 1098, 10, 95, 32, 32 + GROUPBOX "Papier", 1074, 120, 85, 180, 50, WS_CHILD | WS_VISIBLE | WS_TABSTOP + LTEXT "&Wielkoœæ", 1089, 130, 95, 30, 9, WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "&ród³o", 1090, 130, 110, 30, 9, WS_CHILD | WS_VISIBLE | WS_GROUP + CONTROL "", 1137, "COMBOBOX", CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_AUTOHSCROLL | CBS_SORT | CBS_HASSTRINGS | WS_BORDER | WS_VSCROLL | WS_TABSTOP, 155, 95, 92, 68 + CONTROL "", 1138, "COMBOBOX", CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_AUTOHSCROLL | CBS_SORT | CBS_HASSTRINGS | WS_BORDER | WS_VSCROLL | WS_TABSTOP, 155, 110, 92, 68 +END +// CONTROL "" ,710,"STATIC",WS_BORDER|SS_SIMPLE|WS_TABSTOP|WS_GROUP, 152,4,118,116 +CHOOSE_FONT DIALOG 13, 54, 264, 147 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Font" +FONT 8, "Helv" +BEGIN + LTEXT "&Czcionka:", 1088, 6,3,40,9, WS_CHILD | WS_VISIBLE | WS_GROUP + CONTROL "", 1136, "COMBOBOX", CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | +CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE, 6,13,94,54 + LTEXT "St&yl:", 1089, 108,3,44,9, WS_CHILD | WS_VISIBLE | WS_GROUP + CONTROL "", 1137, "COMBOBOX", CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | +WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE, 108,13,64,54 + LTEXT "&Rozmiar:", 1090, 179,3,30,9, WS_CHILD | WS_VISIBLE | WS_GROUP + CONTROL "", 1138, "COMBOBOX", CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | +WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE | CBS_SORT, 179,13,32,54 + CONTROL "OK", IDOK, "BUTTON", WS_GROUP, 218,6,40,14 + CONTROL "Anuluj", IDCANCEL, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_GROUP | WS_TABSTOP, 218,23,40,14 + CONTROL "&Zastosuj", 1026, "BUTTON", WS_GROUP, 218,40,40,14 + CONTROL "&Pomoc", 1038, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_GROUP | WS_TABSTOP, 218,57,40,14 + CONTROL "Efekty specialne", 1072, "BUTTON", BS_GROUPBOX | WS_CHILD | WS_VISIBLE | WS_GROUP | WS_TABSTOP, 6,72,84,34 + CONTROL "Prz&ekreœlona", 1040, "BUTTON", BS_AUTOCHECKBOX | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 10, 82, 58, 10 + CONTROL "P&odkreœlona", 1041, "BUTTON", BS_AUTOCHECKBOX | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 10,94,50,10 + LTEXT "&Kolor:", 1091, 6,110,30,9, WS_CHILD | WS_VISIBLE | WS_GROUP + CONTROL "", 1139, "COMBOBOX", CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | +CBS_AUTOHSCROLL | WS_BORDER | WS_VSCROLL | WS_TABSTOP, 6,120,84,100 + CONTROL "Przyk³ad", 1073, "BUTTON", BS_GROUPBOX | WS_CHILD | WS_VISIBLE | WS_GROUP | WS_TABSTOP, 98,72,160,49 + CONTROL "AaBbYyZz\xB3", 1093, "STATIC", SS_NOPREFIX | WS_VISIBLE, 104,81,149,37 +END +// PUSHBUTTON "&Replace", 1024, 174, 21, 50, 14, WS_GROUP | WS_TABSTOP +// PUSHBUTTON "Replace &All", 1025, 174, 38, 50, 14, WS_GROUP | WS_TABSTOP +// PUSHBUTTON "Cancel", 2, 174, 55, 50, 14, WS_GROUP | WS_TABSTOP +// PUSHBUTTON "&Help", 1038, 174, 75, 50, 14, WS_GROUP | WS_TABSTOP +//} +FIND_TEXT DIALOG 34, 24, 251, 62 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "ZnajdŸ" +FONT 8, "Helv" +BEGIN + LTEXT "&ZnajdŸ:", -1, 4, 8, 42, 8, WS_CHILD | WS_VISIBLE | WS_GROUP + EDITTEXT 1152, 46, 7, 134, 12, ES_AUTOHSCROLL | WS_BORDER | WS_GROUP | WS_TABSTOP + CONTROL "Uwzglêdnij tylko ca³e wyrazy", 1040, "BUTTON", BS_AUTOCHECKBOX | WS_CHILD | WS_VISIBLE | WS_GROUP | WS_TABSTOP, 4, 26, 107, 12 + CONTROL "&Uwzglêdniaj wielkoœæ liter", 1041, "BUTTON", BS_AUTOCHECKBOX | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 4, 42, 107, 12 + GROUPBOX "Kierunek", 1072, 113, 26, 68, 28 + CONTROL "W &g\xF3r\xEA", 1056, "BUTTON", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_GROUP | WS_TABSTOP, 117, 38, 20, 12 + CONTROL "W &d\xF3l", 1057, "BUTTON", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 144, 38, 30, 12 + CONTROL "&ZnajdŸ nastêpny", 1, "BUTTON", BS_DEFPUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_GROUP | WS_TABSTOP, 187, 5, 61, 14 + CONTROL "Anuluj", 2, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_GROUP | WS_TABSTOP, 187, 23, 61, 14 + CONTROL "&Pomoc", 1038, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_GROUP | WS_TABSTOP, 187, 45, 61, 14 +END +REPLACE_TEXT DIALOG 36, 24, 245, 94 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Zamieñ" +FONT 8, "Helv" +BEGIN + LTEXT "&ZnajdŸ:", -1, 4, 9, 48, 8, WS_CHILD | WS_VISIBLE | WS_GROUP + EDITTEXT 1152, 54, 7, 114, 12, ES_AUTOHSCROLL | WS_BORDER | WS_GROUP | WS_TABSTOP + LTEXT "Zanieñ &na:", -1, 4, 26, 48, 8, WS_CHILD | WS_VISIBLE | WS_GROUP + EDITTEXT 1153, 54, 24, 114, 12, ES_AUTOHSCROLL | WS_BORDER | WS_GROUP | WS_TABSTOP + CONTROL "Uwzglêdnij &tylko ca³e wyrazy", 1040, "BUTTON", BS_AUTOCHECKBOX | WS_CHILD | WS_VISIBLE | WS_GROUP | WS_TABSTOP, 5, 46, 104, 12 + CONTROL "&Uwzglêdnij wielkoœæ liter", 1041, "BUTTON", BS_AUTOCHECKBOX | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 5, 62, 96, 12 + CONTROL "ZnajdŸ nastêpny", 1, "BUTTON", BS_DEFPUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_GROUP | WS_TABSTOP, 174, 4, 67, 14 + CONTROL "&Zamieñ", 1024, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_GROUP | WS_TABSTOP, 174, 21, 68, 14 + CONTROL "Zamieñ &wszystkie", 1025, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_GROUP | WS_TABSTOP, 174, 38, 68, 14 + CONTROL "Anuluj", 2, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_GROUP | WS_TABSTOP, 174, 56, 68, 14 + CONTROL "&Pomoc", 1038, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_GROUP | WS_TABSTOP, 174, 75, 68, 14 +END + +CHOOSE_COLOR DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 300, 200 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Color" +FONT 8, "Helv" +{ + LTEXT "&Podstawowe kolory:", 1088, 4, 4, 140, 10 + LTEXT "Dowolne &kolory:", 1089, 4, 106, 140, 10 + LTEXT "Kolor | Sol&id", 1090, 150, 151, 48, 10 + LTEXT "&Czerwony:", 726 /*1094*/,249,126,24,10 + EDITTEXT 706, 275,124,18,12, WS_BORDER | WS_GROUP | WS_TABSTOP + LTEXT "&Zielony:",727/*1095*/,249,140,24,10 + EDITTEXT 707, 275,138,18,12, WS_BORDER | WS_GROUP | WS_TABSTOP + LTEXT "&Niebieski:",728 /*1096*/,249,154,24,10 + EDITTEXT 708, 275,152,18,12, WS_BORDER | WS_GROUP | WS_TABSTOP + LTEXT "&Hue:" ,723 /*1091*/,202,126,22,10 + EDITTEXT 703, 226,124,18,12, WS_BORDER | WS_GROUP | WS_TABSTOP + LTEXT "&Sat:" ,724 /*1092*/,202,140,22,10 + EDITTEXT 704, 226,138,18,12, WS_BORDER | WS_GROUP | WS_TABSTOP + LTEXT "&Lum:" ,725 /*1093*/,202,154,22,10 + EDITTEXT 705, 226,152,18,12, WS_BORDER | WS_GROUP | WS_TABSTOP + CONTROL "" ,720,"STATIC",SS_SIMPLE|WS_TABSTOP|WS_GROUP,4,14,140,86 + CONTROL "" ,721,"STATIC",SS_SIMPLE|WS_TABSTOP|WS_GROUP,4,116,140,28 + CONTROL "" ,710,"STATIC",WS_BORDER|SS_SIMPLE|WS_TABSTOP|WS_GROUP, 152,4,118,116 + CONTROL "" ,702,"STATIC",SS_SIMPLE|WS_TABSTOP|WS_GROUP, 278,4,8,116 + CONTROL "" ,709,"STATIC",SS_SIMPLE|WS_TABSTOP|WS_GROUP, 152,124,40,26 + DEFPUSHBUTTON "Ok", 1, 4, 166, 44, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP + PUSHBUTTON "Anuluj", 2, 52, 166, 44, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Pomoc", 1038,100,166, 44, 14 + PUSHBUTTON "&Dodaj do dowolnych", 712/*1024*/, 152, 166, 142, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Z&definiuj Kolor >>", 719/*1025*/, 4, 150, 142, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "&i",713,300,200,4,14 /* just a dummy: 'i' is like &i in "sol&id" */ +} diff --git a/scheduler/process.c b/scheduler/process.c index c474d54bd61..ab72caf3fda 100644 --- a/scheduler/process.c +++ b/scheduler/process.c @@ -166,13 +166,15 @@ K32OBJ *PROCESS_GetObjPtr( HANDLE32 handle, K32OBJ_TYPE type ) K32OBJ *ptr = NULL; if (!pCurrentProcess) return PROCESS_GetBootObjPtr( handle, type ); EnterCriticalSection( &pCurrentProcess->crit_section ); + if ((handle > 0) && (handle <= pCurrentProcess->handle_table->count)) - { ptr = pCurrentProcess->handle_table->entries[handle - 1].ptr; - if (ptr && ((type == K32OBJ_UNKNOWN) || (ptr->type == type))) - K32OBJ_IncCount( ptr ); - else ptr = NULL; - } + else if (handle == 0x7fffffff) ptr = &pCurrentProcess->header; + + if (ptr && ((type == K32OBJ_UNKNOWN) || (ptr->type == type))) + K32OBJ_IncCount( ptr ); + else ptr = NULL; + LeaveCriticalSection( &pCurrentProcess->crit_section ); if (!ptr) SetLastError( ERROR_INVALID_HANDLE ); return ptr; @@ -540,6 +542,7 @@ BOOL32 SetEnvironmentVariable32W( LPCWSTR name, LPCWSTR value ) return ret; } + /*********************************************************************** * ExpandEnvironmentVariablesA (KERNEL32.103) */ diff --git a/scheduler/thread.c b/scheduler/thread.c index 0b48efe538e..16f602c3502 100644 --- a/scheduler/thread.c +++ b/scheduler/thread.c @@ -40,6 +40,7 @@ static THDB *THREAD_GetPtr( HANDLE32 handle ) THDB *THREAD_Create( PDB32 *pdb, DWORD stack_size, LPTHREAD_START_ROUTINE start_addr ) { + DWORD old_prot; THDB *thdb = HeapAlloc( SystemHeap, HEAP_ZERO_MEMORY, sizeof(THDB) ); if (!thdb) return NULL; thdb->header.type = K32OBJ_THREAD; @@ -59,8 +60,9 @@ THDB *THREAD_Create( PDB32 *pdb, DWORD stack_size, thdb->stack_base = VirtualAlloc( NULL, stack_size, MEM_COMMIT, PAGE_EXECUTE_READWRITE ); if (!thdb->stack_base) goto error; - /* Un-commit the first page (FIXME: should use PAGE_GUARD instead) */ - VirtualFree( thdb->stack_base, 1, MEM_DECOMMIT ); + /* Set a guard page at the bottom of the stack */ + VirtualProtect( thdb->stack_base, 1, PAGE_EXECUTE_READWRITE | PAGE_GUARD, + &old_prot ); thdb->teb.stack_top = (char *)thdb->stack_base + stack_size; thdb->teb.stack_low = thdb->teb.stack_top; thdb->exit_stack = thdb->teb.stack_top; diff --git a/tools/Makefile.in b/tools/Makefile.in index 0116c907c9b..16f7a1e1c89 100644 --- a/tools/Makefile.in +++ b/tools/Makefile.in @@ -1,4 +1,4 @@ -DEFS = -D__WINE__ -DNO_TRANSITION_TYPES +DEFS = -D__WINE__ TOPSRCDIR = @top_srcdir@ TOPOBJDIR = .. SRCDIR = @srcdir@ diff --git a/tools/build.c b/tools/build.c index e88e24e8949..6d9008cdd30 100644 --- a/tools/build.c +++ b/tools/build.c @@ -5,8 +5,6 @@ * Copyright 1997 Eric Youngdale */ -#ifndef WINELIB - #include #include #include @@ -15,7 +13,6 @@ #include "windows.h" #include "winnt.h" -#include "winerror.h" /* for ERROR_CALL_NOT_IMPLEMENTED */ #include "module.h" #include "neexe.h" #include "selectors.h" @@ -1016,15 +1013,12 @@ static int BuildSpec32File( char * specfile, FILE *outfile ) fprintf( outfile, "/* %s.%d (%s) */\n", DLLName, i, odp->name); #ifdef USE_STABS fprintf( outfile, ".stabs \"%s_%d:F1\",36,0,%d,%s_%d\n", - DLLName, i, - odp->lineno, DLLName, i); + DLLName, i, odp->lineno, DLLName, i); #endif - fprintf( outfile, "%s_%d:\n", DLLName, i ); #ifdef USE_STABS fprintf( outfile, ".stabn 68,0,%d,0\n", odp->lineno); #endif - fprintf( outfile, "\tpushl %%ebp\n" ); fprintf( outfile, "\tpushl $" PREFIX "%s\n",odp->u.func.link_name); fprintf( outfile, "\tcall " PREFIX "CallFrom32_%s_%d\n", @@ -1036,17 +1030,25 @@ static int BuildSpec32File( char * specfile, FILE *outfile ) case TYPE_RETURN: fprintf( outfile, "/* %s.%d (%s) */\n", DLLName, i, odp->name); +#ifdef USE_STABS + fprintf( outfile, ".stabs \"%s_%d:F1\",36,0,%d,%s_%d\n", + DLLName, i, odp->lineno, DLLName, i); +#endif fprintf( outfile, "%s_%d:\n", DLLName, i ); - fprintf( outfile, "\tmovl $%d,%%eax\n",ERROR_CALL_NOT_IMPLEMENTED); - fprintf( outfile, "\tmovl %%eax," PREFIX "WIN32_LastError\n" ); +#ifdef USE_STABS + fprintf( outfile, ".stabn 68,0,%d,0\n", odp->lineno); +#endif fprintf( outfile, "\tmovl $%d,%%eax\n", odp->u.ret.ret_value ); if (odp->u.ret.arg_size) { fprintf( outfile, "\tret $%d\n", odp->u.ret.arg_size ); + } + else + { + fprintf( outfile, "\tret\n" ); fprintf( outfile, "\tnop\n" ); fprintf( outfile, "\tnop\n" ); } - else fprintf( outfile, "\tret\n" ); break; case TYPE_BYTE: @@ -1807,9 +1809,7 @@ static void BuildCallFrom16Func( FILE *outfile, char *profile ) * Prototypes for the CallTo16 functions: * extern WORD CallTo16_word_xxx( FARPROC16 func, args... ); * extern LONG CallTo16_long_xxx( FARPROC16 func, args... ); - * extern void CallTo16_regs_( FARPROC16 func, WORD ds, WORD es, WORD bp, - * WORD ax, WORD bx, WORD cx, WORD dx, - * WORD si, WORD di ); + * extern void CallTo16_regs_( const CONTEXT *context ); */ static void BuildCallTo16Func( FILE *outfile, char *profile ) { @@ -1866,7 +1866,7 @@ static void BuildCallTo16Func( FILE *outfile, char *profile ) { /* Push the address of the first argument */ fprintf( outfile, "\tleal 12(%%ebx),%%eax\n" ); - fprintf( outfile, "\tpushl $%d\n", reg_func ? 8 : strlen(args) ); + fprintf( outfile, "\tpushl $%d\n", reg_func ? -1 : strlen(args) ); fprintf( outfile, "\tpushl %%eax\n" ); fprintf( outfile, "\tcall " PREFIX "RELAY_DebugCallTo16\n" ); fprintf( outfile, "\tpopl %%eax\n" ); @@ -1886,14 +1886,15 @@ static void BuildCallTo16Func( FILE *outfile, char *profile ) if (reg_func) { /* Get the registers. ebx is handled later on. */ - fprintf( outfile, "\tpushw 20(%%ebx)\n" ); - fprintf( outfile, "\tpopw %%es\n" ); - fprintf( outfile, "\tmovl 24(%%ebx),%%ebp\n" ); - fprintf( outfile, "\tmovl 28(%%ebx),%%eax\n" ); - fprintf( outfile, "\tmovl 36(%%ebx),%%ecx\n" ); - fprintf( outfile, "\tmovl 40(%%ebx),%%edx\n" ); - fprintf( outfile, "\tmovl 44(%%ebx),%%esi\n" ); - fprintf( outfile, "\tmovl 48(%%ebx),%%edi\n" ); + fprintf( outfile, "\tmovl 12(%%ebx),%%ebx\n" ); + fprintf( outfile, "\tmovl %d(%%ebx),%%eax\n", CONTEXTOFFSET(SegEs) ); + fprintf( outfile, "\tmovw %%ax,%%es\n" ); + fprintf( outfile, "\tmovl %d(%%ebx),%%ebp\n", CONTEXTOFFSET(Ebp) ); + fprintf( outfile, "\tmovl %d(%%ebx),%%eax\n", CONTEXTOFFSET(Eax) ); + fprintf( outfile, "\tmovl %d(%%ebx),%%ecx\n", CONTEXTOFFSET(Ecx) ); + fprintf( outfile, "\tmovl %d(%%ebx),%%edx\n", CONTEXTOFFSET(Edx) ); + fprintf( outfile, "\tmovl %d(%%ebx),%%esi\n", CONTEXTOFFSET(Esi) ); + fprintf( outfile, "\tmovl %d(%%ebx),%%edi\n", CONTEXTOFFSET(Edi) ); } else /* not a register function */ { @@ -1923,21 +1924,26 @@ static void BuildCallTo16Func( FILE *outfile, char *profile ) fprintf( outfile, "\tpushl " PREFIX "CALLTO16_RetAddr_%s\n", short_ret ? "word" : "long" ); - /* Push the called routine address */ - - fprintf( outfile, "\tpushl 12(%%ebx)\n" ); - - /* Get the 16-bit ds */ - if (reg_func) { - fprintf( outfile, "\tpushw 16(%%ebx)\n" ); + /* Push the called routine address */ + + fprintf( outfile, "\tpushw %d(%%ebx)\n", CONTEXTOFFSET(SegCs) ); + fprintf( outfile, "\tpushw %d(%%ebx)\n", CONTEXTOFFSET(Eip) ); + + /* Get the 16-bit ds */ + + fprintf( outfile, "\tpushw %d(%%ebx)\n", CONTEXTOFFSET(SegDs) ); /* Get ebx from the 32-bit stack */ - fprintf( outfile, "\tmovl 32(%%ebx),%%ebx\n" ); + fprintf( outfile, "\tmovl %d(%%ebx),%%ebx\n", CONTEXTOFFSET(Ebx) ); fprintf( outfile, "\tpopw %%ds\n" ); } else { + /* Push the called routine address */ + + fprintf( outfile, "\tpushl 12(%%ebx)\n" ); + /* Get previous ds from the 16-bit stack and */ /* set ax equal to ds for window procedures. */ fprintf( outfile, "\tmovw -10(%%ebp),%%ax\n" ); @@ -2593,5 +2599,3 @@ int main(int argc, char **argv) } return 0; } - -#endif /* WINELIB */ diff --git a/tools/make_os2.sh b/tools/make_os2.sh index 7564c5e02e3..10519705d93 100644 --- a/tools/make_os2.sh +++ b/tools/make_os2.sh @@ -2,9 +2,10 @@ # GCCLOAD not needed, but recommended... #GCCLOAD=5 CC=gcc +CFLAGS="-O2 -Zmtd -D__ST_MT_ERRNO__" YACC="bison -y" LEX="flex -olex.yy.c" RANLIB="ar -s" PROGEXT=".exe" -export CC YACC LEX RANLIB PROGEXT +export CC CFLAGS YACC LEX RANLIB PROGEXT ./configure --x-includes=$X11ROOT/XFree86/include -x-libraries=$X11ROOT/XFree86/lib diff --git a/tools/wineconf b/tools/wineconf index 9610366e13b..63b2d4a47ff 100755 --- a/tools/wineconf +++ b/tools/wineconf @@ -1,4 +1,4 @@ -#!/usr/bin/perl +#!/usr/bin/perl -w # This program generates wine.conf files on STDOUT. # (C) 1996 Stephen Simmons @@ -74,11 +74,13 @@ sub ReadFSTAB { next if /^\s*\#/; next if /^\s*$/; ($device, $mntpoint, $type, @rest) = split(' ', $_); - if ($type eq "msdos") { - push(@FatDrives, [$device, $mntpoint]); - } - elsif ($type eq "iso9660") { - push(@CdromDrives, [$device, $mntpoint]); + if ($device !~ m"^/dev/fd") { + if ($type eq "msdos" || $type eq "vfat") { + push(@FatDrives, [$device, $mntpoint]); + } + elsif ($type eq "iso9660") { + push(@CdromDrives, [$device, $mntpoint]); + } } } if (!@FatDrives) { @@ -251,7 +253,7 @@ sub ReadAutoexecBat { } else { # Tested 1.4 - warn "WARNING: C:\AUTOEXEC.BAT was not found.\n"; + warn "WARNING: C:\\AUTOEXEC.BAT was not found.\n"; } if ($DOSenv{"path"}) { diff --git a/win32/Makefile.in b/win32/Makefile.in index dbdae2af8af..0a7891a5a8f 100644 --- a/win32/Makefile.in +++ b/win32/Makefile.in @@ -16,7 +16,6 @@ C_SRCS = \ file.c \ init.c \ k32obj.c \ - memory.c \ newfns.c \ process.c \ security.c \ diff --git a/win32/advapi.c b/win32/advapi.c index 31a92d26285..2fe54f2bafb 100644 --- a/win32/advapi.c +++ b/win32/advapi.c @@ -8,7 +8,7 @@ #include #include "windows.h" #include "winerror.h" -#include "advapi32.h" +#include "shell.h" #include "stddebug.h" #include "debug.h" diff --git a/win32/code_page.c b/win32/code_page.c index 60673db877c..951874ce2e0 100644 --- a/win32/code_page.c +++ b/win32/code_page.c @@ -69,14 +69,14 @@ UINT32 GetOEMCP(void) /*********************************************************************** * MultiByteToWideChar (KERNEL32.392) */ -int MultiByteToWideChar(UINT page, DWORD flags, char *src, int srclen, +int MultiByteToWideChar(UINT32 page, DWORD flags, char *src, int srclen, WCHAR *dst, int dstlen) { return (srclen==-1) ? strlen(src) * 2: srclen*2; } -int WideCharToMultiByte(UINT page, DWORD flags, WCHAR *src, int srclen, - char *dst, int dstlen, char* defchar, BOOL *used) +int WideCharToMultiByte(UINT32 page, DWORD flags, WCHAR *src, int srclen, + char *dst, int dstlen, char* defchar, BOOL32 *used) { int count = 0; int dont_copy= (dstlen==0); diff --git a/win32/console.c b/win32/console.c index 558b433ad87..63e5fa48365 100644 --- a/win32/console.c +++ b/win32/console.c @@ -26,7 +26,7 @@ static CONSOLE_SCREEN_BUFFER_INFO dummyinfo = /*********************************************************************** * SetConsoleCtrlHandler (KERNEL32.459) */ -BOOL SetConsoleCtrlHandler(HANDLER_ROUTINE * func, BOOL a) +BOOL32 SetConsoleCtrlHandler(HANDLER_ROUTINE * func, BOOL32 a) { return 0; } diff --git a/win32/cursoricon32.c b/win32/cursoricon32.c index 40a3251e4d6..0a22a3882f3 100644 --- a/win32/cursoricon32.c +++ b/win32/cursoricon32.c @@ -39,15 +39,16 @@ #include "xmalloc.h" /* This dictionary could might eventually become a macro for better reuse */ -struct MAP_DWORD_DWORD{ - DWORD key; - DWORD value; +struct MAP_DWORD_DWORD +{ + DWORD key; + HANDLE32 value; }; struct MAP_DWORD_DWORD *CURSORICON_map; int CURSORICON_count; -BOOL CURSORICON_lookup(DWORD key,DWORD *value) +BOOL32 CURSORICON_lookup(DWORD key,HANDLE32 *value) { int i; for(i=0;ihfile = h; - filemap_obj->prot = TranslateProtectionFlags(pot); - filemap_obj->size = hlow; - return (HANDLE32)filemap_obj;; -} - -/*********************************************************************** - * CreateFileMapping32W (KERNEL32.47) - * - */ -HANDLE32 CreateFileMapping32W(HANDLE32 h,LPSECURITY_ATTRIBUTES ats, - DWORD pot, DWORD sh, DWORD hlow, LPCWSTR lpName) -{ - LPSTR aname = HEAP_strdupWtoA( GetProcessHeap(), 0, lpName ); - HANDLE32 res = CreateFileMapping32A(h,ats,pot,sh,hlow,aname); - HeapFree( GetProcessHeap(), 0, aname ); - return res; -} - - -/*********************************************************************** - * MapViewOfFile (KERNEL32.385) - */ -LPVOID MapViewOfFile(HANDLE32 handle, DWORD access, DWORD offhi, - DWORD offlo, DWORD size) -{ - return MapViewOfFileEx(handle,access,offhi,offlo,size,0); -} - -/*********************************************************************** - * MapViewOfFileEx (KERNEL32.386) - * - */ -LPVOID MapViewOfFileEx(HANDLE32 handle, DWORD access, DWORD offhi, - DWORD offlo, DWORD size, DWORD st) -{ - FILEMAP_OBJECT *fmap = (FILEMAP_OBJECT*)handle; - - if (!size) size = fmap->size; - if (!size) size = 1; - return mmap ((caddr_t)st, size, fmap->prot, - MAP_ANON|MAP_PRIVATE, - FILE_GetUnixHandle(fmap->hfile), - offlo); -} - -/*********************************************************************** - * UnmapViewOfFile (KERNEL32.385) - */ -BOOL32 UnmapViewOfFile(LPVOID address) { - munmap(address,/*hmm*/1); /* FIXME: size? */ - return TRUE; -} - /*********************************************************************** * WriteFile (KERNEL32.578) @@ -309,7 +209,7 @@ BOOL32 SetFileAttributes32A(LPCSTR lpFileName, DWORD attributes) buf.st_mode &= ~0222; /* octal!, clear write permission bits */ attributes &= ~FILE_ATTRIBUTE_READONLY; } - attributes &= ~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_SYSTEM); + attributes &= ~(FILE_ATTRIBUTE_ARCHIVE|FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_SYSTEM); if (attributes) fprintf(stdnimp,"SetFileAttributesA(%s):%lx attribute(s) not implemented.\n",lpFileName,attributes); if (-1==chmod(full_name.long_name,buf.st_mode)) diff --git a/win32/init.c b/win32/init.c index 18e14ef9808..6372a413039 100644 --- a/win32/init.c +++ b/win32/init.c @@ -18,10 +18,6 @@ #include "debug.h" #include "xmalloc.h" -/* The global error value - */ -int WIN32_LastError; - /*********************************************************************** * GetModuleHandle (KERNEL32.237) */ @@ -36,7 +32,7 @@ all calls to e.g. CreateWindowEx. */ TDB *pTask = (TDB *)GlobalLock16( GetCurrentTask() ); hModule = pTask->hInstance; } else - hModule = GetModuleHandle(module); + hModule = GetModuleHandle16(module); dprintf_win32(stddeb, "GetModuleHandleA: returning %d\n", hModule ); return hModule; } diff --git a/win32/k32obj.c b/win32/k32obj.c index 93919c3e72b..bcb056518b8 100644 --- a/win32/k32obj.c +++ b/win32/k32obj.c @@ -5,6 +5,7 @@ */ #include +#include "winerror.h" #include "handle32.h" #include "heap.h" #include "file.h" @@ -13,28 +14,40 @@ typedef void (*destroy_object)(K32OBJ *); +extern void VIRTUAL_DestroyMapping( K32OBJ *obj ); + static const destroy_object K32OBJ_Destroy[K32OBJ_NBOBJECTS] = { NULL, - NULL, /* K32OBJ_SEMAPHORE */ - NULL, /* K32OBJ_EVENT */ - NULL, /* K32OBJ_MUTEX */ - NULL, /* K32OBJ_CRITICAL_SECTION */ - PROCESS_Destroy, /* K32OBJ_PROCESS */ - THREAD_Destroy, /* K32OBJ_THREAD */ - FILE_Destroy, /* K32OBJ_FILE */ - NULL, /* K32OBJ_CHANGE */ - NULL, /* K32OBJ_CONSOLE */ - NULL, /* K32OBJ_SCREEN_BUFFER */ - NULL, /* K32OBJ_MEM_MAPPED_FILE */ - NULL, /* K32OBJ_SERIAL */ - NULL, /* K32OBJ_DEVICE_IOCTL */ - NULL, /* K32OBJ_PIPE */ - NULL, /* K32OBJ_MAILSLOT */ - NULL, /* K32OBJ_TOOLHELP_SNAPSHOT */ - NULL /* K32OBJ_SOCKET */ + NULL, /* K32OBJ_SEMAPHORE */ + NULL, /* K32OBJ_EVENT */ + NULL, /* K32OBJ_MUTEX */ + NULL, /* K32OBJ_CRITICAL_SECTION */ + PROCESS_Destroy, /* K32OBJ_PROCESS */ + THREAD_Destroy, /* K32OBJ_THREAD */ + FILE_Destroy, /* K32OBJ_FILE */ + NULL, /* K32OBJ_CHANGE */ + NULL, /* K32OBJ_CONSOLE */ + NULL, /* K32OBJ_SCREEN_BUFFER */ + VIRTUAL_DestroyMapping, /* K32OBJ_MEM_MAPPED_FILE */ + NULL, /* K32OBJ_SERIAL */ + NULL, /* K32OBJ_DEVICE_IOCTL */ + NULL, /* K32OBJ_PIPE */ + NULL, /* K32OBJ_MAILSLOT */ + NULL, /* K32OBJ_TOOLHELP_SNAPSHOT */ + NULL /* K32OBJ_SOCKET */ }; +typedef struct _NE +{ + struct _NE *next; + K32OBJ *obj; + UINT32 len; + char name[1]; +} NAME_ENTRY; + +static NAME_ENTRY *K32OBJ_FirstEntry = NULL; + /*********************************************************************** * K32OBJ_IncCount @@ -52,11 +65,88 @@ void K32OBJ_IncCount( K32OBJ *ptr ) */ void K32OBJ_DecCount( K32OBJ *ptr ) { + NAME_ENTRY **pptr; + /* FIXME: not atomic */ assert( ptr->type && ((unsigned)ptr->type < K32OBJ_NBOBJECTS) ); assert( ptr->refcount ); if (--ptr->refcount) return; + + /* Check if the object has a name entry and free it */ + + pptr = &K32OBJ_FirstEntry; + while (*pptr && ((*pptr)->obj != ptr)) pptr = &(*pptr)->next; + if (*pptr) + { + NAME_ENTRY *entry = *pptr; + *pptr = entry->next; + HeapFree( SystemHeap, 0, entry ); + } + /* Free the object */ + if (K32OBJ_Destroy[ptr->type]) K32OBJ_Destroy[ptr->type]( ptr ); } + +/*********************************************************************** + * K32OBJ_AddName + * + * Add a name entry for an object. We don't check for duplicates here. + * FIXME: should use some sort of hashing. + */ +BOOL32 K32OBJ_AddName( K32OBJ *obj, LPCSTR name ) +{ + NAME_ENTRY *entry = K32OBJ_FirstEntry; + UINT32 len = strlen( name ); + + if (!(entry = HeapAlloc( SystemHeap, 0, sizeof(entry) + len ))) + { + SetLastError( ERROR_OUTOFMEMORY ); + return FALSE; + } + entry->next = K32OBJ_FirstEntry; + entry->obj = obj; + lstrcpy32A( entry->name, name ); + K32OBJ_FirstEntry = entry; + return TRUE; +} + + +/*********************************************************************** + * K32OBJ_FindName + * + * Find the object referenced by a given name. + * The reference count is not incremented. + */ +K32OBJ *K32OBJ_FindName( LPCSTR name ) +{ + NAME_ENTRY *entry = K32OBJ_FirstEntry; + UINT32 len; + + if (!name) return NULL; /* Anonymous object */ + len = strlen( name ); + while (entry) + { + if ((len == entry->len) && !lstrcmp32A( name, entry->name)) + return entry->obj; + entry = entry->next; + } + return NULL; +} + + +/*********************************************************************** + * K32OBJ_FindNameType + * + * Find an object by name and check its type. + * The reference count is not incremented. + */ +K32OBJ *K32OBJ_FindNameType( LPCSTR name, K32OBJ_TYPE type ) +{ + K32OBJ *obj = K32OBJ_FindName( name ); + if (!obj) return NULL; + if (obj->type == type) return obj; + SetLastError( ERROR_DUP_NAME ); + return NULL; +} diff --git a/win32/memory.c b/win32/memory.c deleted file mode 100644 index 8cb1ae5db5d..00000000000 --- a/win32/memory.c +++ /dev/null @@ -1,358 +0,0 @@ -/* - * Win32 kernel functions - * - * Copyright 1995 Martin von Loewis and Cameron Heide - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "windows.h" -#include "winerror.h" -#include "winbase.h" -#include "heap.h" -#include "stddebug.h" -#include "debug.h" - -#ifndef PROT_NONE /* FreeBSD doesn't define PROT_NONE */ -#define PROT_NONE 0 -#endif - -typedef struct { - caddr_t ptr; - long size; -} virtual_mem_t; - -typedef struct _VRANGE_OBJECT -{ - DWORD start; - DWORD size; - struct _VRANGE_OBJECT *next; -} VRANGE_OBJECT; - -virtual_mem_t *mem = 0; -int mem_count = 0; -int mem_used = 0; - -/******************************************************************* - * VRANGE - * A VRANGE denotes a contiguous part of the address space. It is used - * for house keeping, and will be obtained by higher-level memory allocation - * functions (VirtualAlloc, MapViewOfFile) - * There can be at most one VRANGE object covering any address at any time. - * Currently, all VRANGE objects are stored in a sorted list. Wine does not - * attempt to give a complete list of in-use address ranges, only those - * allocated via Win32. - * An exception is IsVrangeFree, which should test the OS specific - * mappings, too. As a default, an range not known to be allocated is - * considered free. - *******************************************************************/ - -VRANGE_OBJECT *MEMORY_ranges=0; - -VRANGE_OBJECT *MEMORY_FindVrange(DWORD start) -{ - VRANGE_OBJECT *range; - for(range=MEMORY_ranges;range && range->startnext) - { - if(range->startstart+range->size) - return range; - } - return 0; -} - -static int MEMORY_IsVrangeFree(DWORD start,DWORD size) -{ - DWORD end; - VRANGE_OBJECT *range; - if(!size) - return 1; - /* First, check our lists*/ - end=start+size; - for(range=MEMORY_ranges;range && range->startnext) - { - if((range->startstart+range->size) || - (range->startstart+range->size)) - return 0; - } - /* Now, check the maps that are not under our control */ -#ifdef linux - { - FILE *f=fopen("/proc/self/maps","r"); - char line[80]; - int found=0; - while(1) - { - char *it; - int lower,upper; - if(!fgets(line,sizeof(line),f)) - break; - it=line; - lower=strtoul(it,&it,16); - if(*it++!='-') - fprintf(stderr,"Format of /proc/self/maps changed\n"); - upper=strtoul(it,&it,16); - if((lowerstartstart) - { - r->next=MEMORY_ranges; - MEMORY_ranges=r; - } - for(it=MEMORY_ranges,last=0;it && it->startstart;it=it->next) - last=it; - r->next=last->next; - last->next=r; -} - - -VRANGE_OBJECT *MEMORY_AllocVrange(int start,int size) -{ - VRANGE_OBJECT *ret=HeapAlloc( SystemHeap, 0, sizeof(VRANGE_OBJECT)); - MEMORY_InsertVrange(ret); - return ret; -} - -void MEMORY_ReleaseVrange(VRANGE_OBJECT *r) -{ - VRANGE_OBJECT *it; - if(MEMORY_ranges==r) - { - MEMORY_ranges=r->next; - HeapFree( SystemHeap, 0, r ); - return; - } - for(it=MEMORY_ranges;it;it=it->next) - if(it->next==r)break; - if(!it) - { - fprintf(stderr,"VRANGE not found\n"); - return; - } - it->next=r->next; - HeapFree( SystemHeap, 0, r ); -} - -/*********************************************************************** - * VirtualAlloc (KERNEL32.548) - */ -int TranslateProtectionFlags(DWORD); -LPVOID VirtualAlloc(LPVOID lpvAddress, DWORD cbSize, - DWORD fdwAllocationType, DWORD fdwProtect) -{ - caddr_t ptr; - int i; - virtual_mem_t *tmp_mem; - int prot; - static int fdzero = -1; - - if (fdzero == -1) - { - if ((fdzero = open( "/dev/zero", O_RDONLY )) == -1) - { - perror( "/dev/zero: open" ); - return (LPVOID)NULL; - } - } - - dprintf_win32(stddeb, "VirtualAlloc: size = %ld, address=%p\n", cbSize, lpvAddress); - if (fdwAllocationType & MEM_RESERVE || !lpvAddress) { - ptr = mmap((void *)((((unsigned long)lpvAddress-1) & 0xFFFF0000L) - + 0x00010000L), - cbSize, PROT_NONE, MAP_PRIVATE, fdzero, 0 ); - if (ptr == (caddr_t) -1) { - dprintf_win32(stddeb, "VirtualAlloc: returning NULL"); - return (LPVOID) NULL; - } - if (lpvAddress && ((unsigned long)ptr & 0xFFFF0000L)) { - munmap(ptr, cbSize); - cbSize += 65535; - ptr = mmap(lpvAddress, cbSize, - PROT_NONE, MAP_PRIVATE, fdzero, 0 ); - if (ptr == (caddr_t) -1) { - dprintf_win32(stddeb, "VirtualAlloc: returning NULL"); - return (LPVOID) NULL; - } - ptr = (void *)((((unsigned long)ptr-1) & 0xFFFF0000L)+0x00010000L); - } - /* remember the size for VirtualFree since it's going to be handed - a zero len */ - if (ptr) { - if (mem_count == mem_used) { - tmp_mem = realloc(mem,(mem_count+10)*sizeof(virtual_mem_t)); - if (!tmp_mem) return 0; - mem = tmp_mem; - memset(mem+mem_count, 0, 10*sizeof(virtual_mem_t)); - mem_count += 10; - } - for (i=0; iptr) { - (mem+i)->ptr = ptr; - (mem+i)->size = cbSize; - mem_used++; - break; - } - } - } - } else { - ptr = lpvAddress; - } - if (fdwAllocationType & MEM_COMMIT) { - prot = TranslateProtectionFlags(fdwProtect & - ~(PAGE_GUARD | PAGE_NOCACHE)); - mprotect(ptr, cbSize, prot); - } -#if 0 -/* kludge for gnu-win32 */ - if (fdwAllocationType & MEM_RESERVE) return sbrk(0); - ptr = malloc(cbSize + 65536); - if(ptr) - { - /* Round it up to the next 64K boundary and zero it. - */ - ptr = (void *)(((unsigned long)ptr & 0xFFFF0000L) + 0x00010000L); - memset(ptr, 0, cbSize); - } -#endif - dprintf_win32(stddeb, "VirtualAlloc: got pointer %p\n", ptr); - return ptr; -} - -/*********************************************************************** - * VirtualFree (KERNEL32.550) - */ -BOOL32 VirtualFree(LPVOID lpvAddress, DWORD cbSize, DWORD fdwFreeType) -{ - int i; - - if (fdwFreeType & MEM_RELEASE) { - for (i=0; iptr == lpvAddress) { - munmap(lpvAddress, (mem+i)->size); - (mem+i)->ptr = 0; - mem_used--; - break; - } - } - } else { - mprotect(lpvAddress, cbSize, PROT_NONE); - } -#if 0 - if(lpvAddress) - free(lpvAddress); -#endif - return 1; -} - -/*********************************************************************** - * VirtualQuery (KERNEL32.554) - */ -BOOL32 VirtualQuery(LPCVOID address,LPMEMORY_BASIC_INFORMATION buf,DWORD len) -{ - /* FIXME: fill out structure ... */ - return TRUE; -} - -/*********************************************************************** - * VirtualProtect (KERNEL32.552) - */ -BOOL32 VirtualProtect(LPVOID lpAddress,DWORD dwSize,DWORD flNewProtect,LPDWORD lpflOldProtect) { - /* FIXME: do protection ... see mprotect(). */ - return TRUE; -} - - -int TranslateProtectionFlags(DWORD protection_flags) -{ - int prot; - - switch(protection_flags) { - case PAGE_READONLY: - prot=PROT_READ; - break; - case PAGE_READWRITE: - prot=PROT_READ|PROT_WRITE; - break; - case PAGE_WRITECOPY: - prot=PROT_WRITE; - break; - case PAGE_EXECUTE: - prot=PROT_EXEC; - break; - case PAGE_EXECUTE_READ: - prot=PROT_EXEC|PROT_READ; - break; - case PAGE_EXECUTE_READWRITE: - prot=PROT_EXEC|PROT_READ|PROT_WRITE; - break; - case PAGE_EXECUTE_WRITECOPY: - prot=PROT_EXEC|PROT_WRITE; - break; - case PAGE_NOACCESS: - default: - prot=PROT_NONE; - break; - } - return prot; -} - - -/****************************************************************** - * IsBadReadPtr - */ -BOOL WIN32_IsBadReadPtr(void* ptr, unsigned int bytes) -{ - dprintf_global(stddeb,"IsBadReadPtr(%x,%x)\n",(int)ptr,bytes); - /* FIXME: Should make check based on actual mappings, here */ - return FALSE; -} - -/****************************************************************** - * IsBadWritePtr - */ -BOOL WIN32_IsBadWritePtr(void* ptr, unsigned int bytes) -{ - dprintf_global(stddeb,"IsBadWritePtr(%x,%x)\n",(int)ptr,bytes); - /* FIXME: Should make check based on actual mappings, here */ - return FALSE; -} -/****************************************************************** - * IsBadWritePtr - */ -BOOL WIN32_IsBadCodePtr(void* ptr, unsigned int bytes) -{ - dprintf_global(stddeb,"IsBadCodePtr(%x,%x)\n",(int)ptr,bytes); - /* FIXME: Should make check based on actual mappings, here */ - return FALSE; -} diff --git a/win32/process.c b/win32/process.c index e403cdeb507..58f8dc3e7fb 100644 --- a/win32/process.c +++ b/win32/process.c @@ -18,7 +18,7 @@ /*********************************************************************** * CreateMutexA (KERNEL32.52) */ -HANDLE32 CreateMutexA (SECURITY_ATTRIBUTES *sa, BOOL on, const char *a) +HANDLE32 CreateMutexA (SECURITY_ATTRIBUTES *sa, BOOL32 on, const char *a) { return 0; } @@ -26,7 +26,7 @@ HANDLE32 CreateMutexA (SECURITY_ATTRIBUTES *sa, BOOL on, const char *a) /*********************************************************************** * ReleaseMutex (KERNEL32.435) */ -BOOL ReleaseMutex (HANDLE32 h) +BOOL32 ReleaseMutex (HANDLE32 h) { return 0; } @@ -34,7 +34,7 @@ BOOL ReleaseMutex (HANDLE32 h) /*********************************************************************** * CreateEventA (KERNEL32.43) */ -HANDLE32 CreateEventA (SECURITY_ATTRIBUTES *sa, BOOL au, BOOL on, const char +HANDLE32 CreateEventA (SECURITY_ATTRIBUTES *sa, BOOL32 au, BOOL32 on, const char *name) { return 0; @@ -42,14 +42,14 @@ HANDLE32 CreateEventA (SECURITY_ATTRIBUTES *sa, BOOL au, BOOL on, const char /*********************************************************************** * SetEvent (KERNEL32.487) */ -BOOL SetEvent (HANDLE32 h) +BOOL32 SetEvent (HANDLE32 h) { return 0; } /*********************************************************************** * ResetEvent (KERNEL32.439) */ -BOOL ResetEvent (HANDLE32 h) +BOOL32 ResetEvent (HANDLE32 h) { return 0; } @@ -63,7 +63,7 @@ DWORD WaitForSingleObject(HANDLE32 h, DWORD a) /*********************************************************************** * DuplicateHandle (KERNEL32.78) */ -BOOL DuplicateHandle(HANDLE32 a, HANDLE32 b, HANDLE32 c, HANDLE32 * d, DWORD e, BOOL f, DWORD g) +BOOL32 DuplicateHandle(HANDLE32 a, HANDLE32 b, HANDLE32 c, HANDLE32 * d, DWORD e, BOOL32 f, DWORD g) { *d = b; return 1; @@ -79,13 +79,13 @@ HINSTANCE32 LoadLibrary32A(LPCSTR libname) { HINSTANCE32 handle; dprintf_module( stddeb, "LoadLibrary: (%08x) %s\n", (int)libname, libname); - handle = LoadModule( libname, (LPVOID)-1 ); + handle = LoadModule16( libname, (LPVOID)-1 ); if (handle == (HINSTANCE32) -1) { char buffer[256]; strcpy( buffer, libname ); strcat( buffer, ".dll" ); - handle = LoadModule( buffer, (LPVOID)-1 ); + handle = LoadModule16( buffer, (LPVOID)-1 ); } /* Obtain module handle and call initialization function */ #ifndef WINELIB @@ -108,7 +108,7 @@ HINSTANCE32 LoadLibrary32W(LPCWSTR libnameW) /*********************************************************************** * FreeLibrary */ -BOOL FreeLibrary32(HINSTANCE32 hLibModule) +BOOL32 FreeLibrary32(HINSTANCE32 hLibModule) { fprintf(stderr,"FreeLibrary: empty stub\n"); return TRUE; @@ -117,7 +117,7 @@ BOOL FreeLibrary32(HINSTANCE32 hLibModule) /********************************************************************** * GetProcessAffinityMask */ -BOOL GetProcessAffinityMask(HANDLE32 hProcess, LPDWORD lpProcessAffinityMask, +BOOL32 GetProcessAffinityMask(HANDLE32 hProcess, LPDWORD lpProcessAffinityMask, LPDWORD lpSystemAffinityMask) { dprintf_task(stddeb,"GetProcessAffinityMask(%x,%lx,%lx)\n", @@ -135,7 +135,7 @@ BOOL GetProcessAffinityMask(HANDLE32 hProcess, LPDWORD lpProcessAffinityMask, /********************************************************************** * SetThreadAffinityMask */ -BOOL SetThreadAffinityMask(HANDLE32 hThread, DWORD dwThreadAffinityMask) +BOOL32 SetThreadAffinityMask(HANDLE32 hThread, DWORD dwThreadAffinityMask) { dprintf_task(stddeb,"SetThreadAffinityMask(%x,%lx)\n",hThread, dwThreadAffinityMask); diff --git a/win32/thread.c b/win32/thread.c index 6c0559fe397..2acf856f623 100644 --- a/win32/thread.c +++ b/win32/thread.c @@ -2,11 +2,14 @@ * Win32 kernel functions * * Copyright 1995 Martin von Loewis + * Copyright 1997 Onno Hovers */ #include #include #include +#include +#include #include "windows.h" #include "winbase.h" #include "winerror.h" @@ -14,96 +17,246 @@ #include "debug.h" #include "xmalloc.h" -/********************************************************************** - * Critical Sections are currently ignored + +/* + * FIXME: + * The c functions do not protect from non-interlocked accesses + * This is no problem as long as we do not have multiple Win32 threads + * or processes. + * The assembly macro's do protect from non-interlocked access, + * but they will only work for i386 systems with GCC. */ -void InitializeCriticalSection(CRITICAL_SECTION *lpCrit) -{ - memset(lpCrit,0,sizeof(CRITICAL_SECTION)); -} + +/************************************************************************ +* InterlockedIncrement [KERNEL32] * +* * +* InterlockedIncrement adds 1 to a long variable and returns * +* - a negative number if the result < 0 * +* - zero if the result == 0 * +* - a positive number if the result > 0 * +* * +* The returned number need not be equal to the result!!!! * +************************************************************************/ -void EnterCriticalSection(CRITICAL_SECTION* lpCrit) -{ - if (lpCrit->LockCount) - fprintf( stderr, "Error: re-entering critical section %08lx\n", - (DWORD)lpCrit ); - lpCrit->LockCount++; -} - -void LeaveCriticalSection(CRITICAL_SECTION* lpCrit) -{ - if (!lpCrit->LockCount) - fprintf( stderr, "Error: leaving critical section %08lx again\n", - (DWORD)lpCrit ); - lpCrit->LockCount--; -} - -void DeleteCriticalSection(CRITICAL_SECTION* lpCrit) -{ - return; -} - -void ReinitializeCriticalSection(CRITICAL_SECTION *lpCrit) { - /* hmm */ -} - -void MakeCriticalSectionGlobal(CRITICAL_SECTION *lpCrit) { - /* hmm */ -} - - -/* FIXME: This is required to work cross-addres space as well */ -static CRITICAL_SECTION interlocked; -static int interlocked_init; - -static void get_interlocked() -{ - if(!interlocked_init) - InitializeCriticalSection(&interlocked); - interlocked_init=1; - EnterCriticalSection(&interlocked); -} - -static void release_interlocked() -{ - LeaveCriticalSection(&interlocked); -} - -/*********************************************************************** - * InterlockedIncrement - */ LONG InterlockedIncrement(LPLONG lpAddend) { - int ret; - get_interlocked(); +#if defined(__i386__)&&defined(__GNUC__) + long ret; + __asm__ + ( + "\tlock\n" /* for SMP systems */ + "\tincl (%1)\n" + "\tje 2f\n" + "\tjl 1f\n" + "\tincl %0\n" + "\tjmp 2f\n" + "1:\tdec %0\n" + "2:\n" + :"=r" (ret):"r" (lpAddend), "0" (0): "memory" + ); + return ret; +#else + LONG ret; + /* StopAllThreadsAndProcesses() */ + (*lpAddend)++; ret=*lpAddend; - release_interlocked(); + + /* ResumeAllThreadsAndProcesses() */ return ret; +#endif } -/*********************************************************************** - * InterlockedDecrement - */ +/************************************************************************ +* InterlockedDecrement [KERNEL32] * +* * +* InterlockedIncrement adds 1 to a long variable and returns * +* - a negative number if the result < 0 * +* - zero if the result == 0 * +* - a positive number if the result > 0 * +* * +* The returned number need not be equal to the result!!!! * +************************************************************************/ + LONG InterlockedDecrement(LPLONG lpAddend) { - int ret; - get_interlocked(); +#if defined(__i386__)&&defined(__GNUC__) + LONG ret; + __asm__ + ( + "\tlock\n" /* for SMP systems */ + "\tdecl (%1)\n" + "\tje 2f\n" + "\tjl 1f\n" + "\tincl %0\n" + "\tjmp 2f\n" + "1:\tdec %0\n" + "2:\n" + :"=r" (ret):"r" (lpAddend), "0" (0): "memory" + ); + return ret; +#else + LONG ret; + /* StopAllThreadsAndProcesses() */ + (*lpAddend)--; ret=*lpAddend; - release_interlocked(); + + /* ResumeAllThreadsAndProcesses() */ return ret; +#endif } -/*********************************************************************** - * InterlockedExchange - */ +/************************************************************************ +* InterlockedExchange [KERNEL32] * +************************************************************************/ + LONG InterlockedExchange(LPLONG target, LONG value) { - int ret; - get_interlocked(); +#if defined(__i386__)&&defined(__GNUC__) + LONG ret; + __asm__ + ( + + "\tlock\n" /* for SMP systems */ + "\txchgl %0,(%1)\n" + :"=r" (ret):"r" (target), "0" (value):"memory" + ); + return ret; +#else + LONG ret; + /* StopAllThreadsAndProcesses() */ + ret=*target; *target=value; - release_interlocked(); + + /* ResumeAllThreadsAndProcesses() */ return ret; +#endif } + +/* AAARGHH some CriticalSection functions get called before we + * have a threadid + */ + +#define GetCurrentThreadId() (-1) + +/************************************************************************ +* InitializeCriticalSection [KERNEL32] * +************************************************************************/ + +void InitializeCriticalSection(CRITICAL_SECTION *pcritical) +{ + pcritical->LockCount=-1; + pcritical->RecursionCount=0; + pcritical->LockSemaphore=(HANDLE32) semget(IPC_PRIVATE,1,IPC_CREAT); + pcritical->OwningThread=(HANDLE32) -1; + pcritical->Reserved=0; +} + +/************************************************************************ +* DeleteCriticalSection [KERNEL32] * +************************************************************************/ + +void DeleteCriticalSection(CRITICAL_SECTION *pcritical) +{ + semctl((int) pcritical->LockSemaphore,0,IPC_RMID,NULL); + pcritical->Reserved=-1; +} + +/************************************************************************ +* EnterCriticalSection [KERNEL32] * +************************************************************************/ + +void EnterCriticalSection (CRITICAL_SECTION *pcritical) +{ + if( InterlockedIncrement(&(pcritical->LockCount))) + { + if( pcritical->OwningThread!= (HANDLE32) GetCurrentThreadId() ) + { + struct sembuf sop; + + sop.sem_num=0; + sop.sem_op=0; + sop.sem_flg=0; + semop((int) pcritical->LockSemaphore,&sop,0); + + pcritical->OwningThread = (HANDLE32) GetCurrentThreadId(); + } + } + else + { + pcritical->OwningThread =(HANDLE32) GetCurrentThreadId(); + } + pcritical->RecursionCount++; +} + +/************************************************************************ +* TryEnterCriticalSection [KERNEL32] * +************************************************************************/ + +BOOL32 TryEnterCriticalSection (CRITICAL_SECTION *pcritical) +{ + if( InterlockedIncrement(&(pcritical->LockCount))) + { + if( pcritical->OwningThread!= (HANDLE32) GetCurrentThreadId() ) + return FALSE; + } + else + { + pcritical->OwningThread =(HANDLE32) GetCurrentThreadId(); + } + pcritical->RecursionCount++; + + return TRUE; +} + +/************************************************************************ +* LeaveCriticalSection [KERNEL32] * +************************************************************************/ + +void LeaveCriticalSection (CRITICAL_SECTION *pcritical) +{ + /* do we actually own this critical section ??? */ + if( pcritical->OwningThread!= (HANDLE32) GetCurrentThreadId()) + return; + + pcritical->RecursionCount--; + if( pcritical->RecursionCount==0) + { + pcritical->OwningThread=(HANDLE32)-1; + if(InterlockedDecrement(&(pcritical->LockCount))>=0) + { + struct sembuf sop; + + sop.sem_num=0; + sop.sem_op=1; + sop.sem_flg=0; + semop((int) pcritical->LockSemaphore,&sop,0); + } + } + else + { + InterlockedDecrement(&(pcritical->LockCount)); + } +} + +/************************************************************************ +* ReinitializeCriticalSection [KERNEL32] * +************************************************************************/ + +void ReinitializeCriticalSection(CRITICAL_SECTION *lpCrit) +{ + /* hmm ?????? */ +} + +/************************************************************************ +* MakeCriticalSectionGlobal [KERNEL32] * +************************************************************************/ + +void MakeCriticalSectionGlobal(CRITICAL_SECTION *lpCrit) +{ + /* nothing (SysV Semaphores are already global) */ + return; +} + diff --git a/win32/user32.c b/win32/user32.c index b7dff9cfb58..5a1192ab58b 100644 --- a/win32/user32.c +++ b/win32/user32.c @@ -20,17 +20,33 @@ #include "stddebug.h" /*********************************************************************** - * GetMessageA (USER32.269) + * GetMessage32A (USER32.269) */ -BOOL USER32_GetMessageA(MSG32* lpmsg,HWND32 hwnd,DWORD min,DWORD max) +BOOL32 GetMessage32A(MSG32* lpmsg,HWND32 hwnd,UINT32 min,UINT32 max) { - BOOL ret; - MSG16 *msg = SEGPTR_NEW(MSG16); - if (!msg) return 0; - ret=GetMessage(SEGPTR_GET(msg),(HWND16)hwnd,min,max); - STRUCT32_MSG16to32(msg,lpmsg); - SEGPTR_FREE(msg); - return ret; + BOOL32 ret; + MSG16 *msg = SEGPTR_NEW(MSG16); + if (!msg) return 0; + ret=GetMessage16(SEGPTR_GET(msg),(HWND16)hwnd,min,max); + /* FIXME */ + STRUCT32_MSG16to32(msg,lpmsg); + SEGPTR_FREE(msg); + return ret; +} + +/*********************************************************************** + * GetMessage32W (USER32.273) + */ +BOOL32 GetMessage32W(MSG32* lpmsg,HWND32 hwnd,UINT32 min,UINT32 max) +{ + BOOL32 ret; + MSG16 *msg = SEGPTR_NEW(MSG16); + if (!msg) return 0; + ret=GetMessage16(SEGPTR_GET(msg),(HWND16)hwnd,min,max); + /* FIXME */ + STRUCT32_MSG16to32(msg,lpmsg); + SEGPTR_FREE(msg); + return ret; } /*********************************************************************** @@ -40,7 +56,7 @@ BOOL32 PeekMessage32A( LPMSG32 lpmsg, HWND32 hwnd, UINT32 min,UINT32 max,UINT32 wRemoveMsg) { MSG16 msg; - BOOL ret; + BOOL32 ret; ret=PeekMessage16(&msg,hwnd,min,max,wRemoveMsg); /* FIXME: should translate the message to Win32 */ STRUCT32_MSG16to32(&msg,lpmsg); diff --git a/windows/caret.c b/windows/caret.c index 0fdc6efa292..00de7ff24f3 100644 --- a/windows/caret.c +++ b/windows/caret.c @@ -123,16 +123,25 @@ static void CARET_KillTimer(void) /***************************************************************** - * CreateCaret (USER.163) (USER32.65) + * CreateCaret16 (USER.163) */ -BOOL16 CreateCaret( HWND32 hwnd, HBITMAP32 bitmap, INT32 width, INT32 height ) +void CreateCaret16( HWND16 hwnd, HBITMAP16 bitmap, INT16 width, INT16 height ) +{ + CreateCaret32( hwnd, bitmap, width, height ); +} + +/***************************************************************** + * CreateCaret32 (USER32.65) + */ +BOOL32 CreateCaret32( HWND32 hwnd, HBITMAP32 bitmap, + INT32 width, INT32 height ) { dprintf_caret(stddeb,"CreateCaret: hwnd=%04x\n", hwnd); if (!hwnd) return FALSE; /* if cursor already exists, destroy it */ - if (Caret.hwnd) DestroyCaret(); + if (Caret.hwnd) DestroyCaret32(); if (bitmap && (bitmap != 1)) { @@ -164,9 +173,18 @@ BOOL16 CreateCaret( HWND32 hwnd, HBITMAP32 bitmap, INT32 width, INT32 height ) /***************************************************************** - * DestroyCaret (USER.164) (USER32.130) + * DestroyCaret16 (USER.164) */ -BOOL16 DestroyCaret(void) +void DestroyCaret16(void) +{ + DestroyCaret32(); +} + + +/***************************************************************** + * DestroyCaret32 (USER32.130) + */ +BOOL32 DestroyCaret32(void) { if (!Caret.hwnd) return FALSE; @@ -182,9 +200,18 @@ BOOL16 DestroyCaret(void) /***************************************************************** - * SetCaretPos (USER.165) (USER32.465) + * SetCaretPos16 (USER.165) */ -BOOL16 SetCaretPos( INT32 x, INT32 y) +void SetCaretPos16( INT16 x, INT16 y ) +{ + SetCaretPos32( x, y ); +} + + +/***************************************************************** + * SetCaretPos32 (USER32.465) + */ +BOOL32 SetCaretPos32( INT32 x, INT32 y) { if (!Caret.hwnd) return FALSE; if ((x == Caret.x) && (y == Caret.y)) return TRUE; @@ -207,9 +234,9 @@ BOOL16 SetCaretPos( INT32 x, INT32 y) /***************************************************************** * HideCaret16 (USER.166) */ -BOOL16 HideCaret16( HWND16 hwnd ) +void HideCaret16( HWND16 hwnd ) { - return HideCaret32( hwnd ); + HideCaret32( hwnd ); } @@ -234,9 +261,9 @@ BOOL32 HideCaret32( HWND32 hwnd ) /***************************************************************** * ShowCaret16 (USER.167) */ -BOOL16 ShowCaret16( HWND16 hwnd ) +void ShowCaret16( HWND16 hwnd ) { - return ShowCaret32( hwnd ); + ShowCaret32( hwnd ); } @@ -265,9 +292,17 @@ BOOL32 ShowCaret32( HWND32 hwnd ) /***************************************************************** - * SetCaretBlinkTime (USER.168) (USER32.464) + * SetCaretBlinkTime16 (USER.168) */ -BOOL16 SetCaretBlinkTime( UINT32 msecs ) +void SetCaretBlinkTime16( UINT16 msecs ) +{ + SetCaretBlinkTime32( msecs ); +} + +/***************************************************************** + * SetCaretBlinkTime32 (USER32.464) + */ +BOOL32 SetCaretBlinkTime32( UINT32 msecs ) { if (!Caret.hwnd) return FALSE; diff --git a/windows/class.c b/windows/class.c index d04e707362e..fa0d470ce8c 100644 --- a/windows/class.c +++ b/windows/class.c @@ -2,6 +2,10 @@ * Window classes functions * * Copyright 1993, 1996 Alexandre Julliard + * + * FIXME: In win32 all classes are local. They are registered at + * program start. Processes CANNOT share classes. (Source: some + * win31->NT migration book) */ #include @@ -156,7 +160,7 @@ static void CLASS_SetMenuNameW( CLASS *classPtr, LPCWSTR name ) * * Free a class structure. */ -static BOOL CLASS_FreeClass( CLASS *classPtr ) +static BOOL32 CLASS_FreeClass( CLASS *classPtr ) { CLASS **ppClass; @@ -556,9 +560,18 @@ BOOL32 UnregisterClass32W( LPCWSTR className, HINSTANCE32 hInstance ) /*********************************************************************** - * GetClassWord (USER.129) (USER32.218) + * GetClassWord16 (USER.129) */ -WORD GetClassWord( HWND32 hwnd, INT32 offset ) +WORD GetClassWord16( HWND16 hwnd, INT16 offset ) +{ + return GetClassWord32( hwnd, offset ); +} + + +/*********************************************************************** + * GetClassWord32 (USER32.218) + */ +WORD GetClassWord32( HWND32 hwnd, INT32 offset ) { WND * wndPtr; @@ -635,7 +648,7 @@ LONG GetClassLong32A( HWND32 hwnd, INT32 offset ) case GCL_HCURSOR: case GCL_HICON: case GCL_HICONSM: - return GetClassWord( hwnd, offset ); + return GetClassWord32( hwnd, offset ); } fprintf(stderr, "Warning: invalid offset %d for GetClassLong()\n", offset); return 0; @@ -664,9 +677,18 @@ LONG GetClassLong32W( HWND32 hwnd, INT32 offset ) /*********************************************************************** - * SetClassWord (USER.130) (USER32.468) + * SetClassWord16 (USER.130) */ -WORD SetClassWord( HWND32 hwnd, INT32 offset, WORD newval ) +WORD SetClassWord16( HWND16 hwnd, INT16 offset, WORD newval ) +{ + return SetClassWord32( hwnd, offset, newval ); +} + + +/*********************************************************************** + * SetClassWord32 (USER32.468) + */ +WORD SetClassWord32( HWND32 hwnd, INT32 offset, WORD newval ) { WND * wndPtr; WORD retval = 0; @@ -767,7 +789,7 @@ LONG SetClassLong32A( HWND32 hwnd, INT32 offset, LONG newval ) case GCL_HCURSOR: case GCL_HICON: case GCL_HICONSM: - return SetClassWord( hwnd, offset, (WORD)newval ); + return SetClassWord32( hwnd, offset, (WORD)newval ); case GCL_STYLE: ptr = &wndPtr->class->style; break; case GCL_CBWNDEXTRA: ptr = &wndPtr->class->cbWndExtra; break; case GCL_CBCLSEXTRA: ptr = &wndPtr->class->cbClsExtra; break; @@ -881,7 +903,9 @@ BOOL32 GetClassInfo32A( HINSTANCE32 hInstance, LPCSTR name, WNDCLASS32A *wc ) hInstance = GetExePtr( hInstance ); /* FIXME: not needed in Win32 */ if (!(atom = GlobalFindAtom32A( name )) || !(classPtr = CLASS_FindClassByAtom( atom, hInstance )) || - (hInstance != classPtr->hInstance)) return FALSE; + (classPtr->hInstance && (hInstance != classPtr->hInstance))) + return FALSE; + wc->style = classPtr->style; wc->lpfnWndProc = (WNDPROC32)WINPROC_GetProc( classPtr->winproc, WIN_PROC_32A ); @@ -908,7 +932,9 @@ BOOL32 GetClassInfo32W( HINSTANCE32 hInstance, LPCWSTR name, WNDCLASS32W *wc ) hInstance = GetExePtr( hInstance ); /* FIXME: not needed in Win32 */ if (!(atom = GlobalFindAtom32W( name )) || !(classPtr = CLASS_FindClassByAtom( atom, hInstance )) || - (hInstance != classPtr->hInstance)) return FALSE; + (classPtr->hInstance && (hInstance != classPtr->hInstance))) + return FALSE; + wc->style = classPtr->style; wc->lpfnWndProc = (WNDPROC32)WINPROC_GetProc( classPtr->winproc, WIN_PROC_32W ); diff --git a/windows/dce.c b/windows/dce.c index 08c09e19141..cc92e5c1790 100644 --- a/windows/dce.c +++ b/windows/dce.c @@ -188,7 +188,7 @@ void DCE_Init() * window area clipped by the client area of all ancestors. * Return FALSE if the visible region is empty. */ -static BOOL DCE_GetVisRect( WND *wndPtr, BOOL clientArea, RECT16 *lprect ) +static BOOL32 DCE_GetVisRect( WND *wndPtr, BOOL32 clientArea, RECT16 *lprect ) { int xoffset, yoffset; @@ -250,10 +250,10 @@ static HRGN32 DCE_ClipWindows( WND *pWndStart, WND *pWndEnd, for (; pWndStart != pWndEnd; pWndStart = pWndStart->next) { if (!(pWndStart->dwStyle & WS_VISIBLE)) continue; - SetRectRgn( hrgnNew, pWndStart->rectWindow.left + xoffset, - pWndStart->rectWindow.top + yoffset, - pWndStart->rectWindow.right + xoffset, - pWndStart->rectWindow.bottom + yoffset ); + SetRectRgn32( hrgnNew, pWndStart->rectWindow.left + xoffset, + pWndStart->rectWindow.top + yoffset, + pWndStart->rectWindow.right + xoffset, + pWndStart->rectWindow.bottom + yoffset ); if (!CombineRgn32( hrgn, hrgn, hrgnNew, RGN_DIFF )) break; } DeleteObject32( hrgnNew ); @@ -436,7 +436,7 @@ HDC32 GetDCEx32( HWND32 hwnd, HRGN32 hrgnClip, DWORD flags ) DC * dc; WND * wndPtr; DWORD dcx_flags = 0; - BOOL need_update = TRUE; + BOOL32 need_update = TRUE; dprintf_dc(stddeb,"GetDCEx: hwnd %04x, hrgnClip %04x, flags %08x\n", hwnd, hrgnClip, (unsigned)flags); @@ -705,7 +705,7 @@ BOOL16 DCHook( HDC16 hDC, WORD code, DWORD data, LPARAM lParam ) if( (!dce->hClipRgn && dce->DCXflags & DCX_INTERSECTRGN) || (dce->hClipRgn == 1 && dce->DCXflags & DCX_EXCLUDERGN) ) - SetRectRgn(hVisRgn,0,0,0,0); + SetRectRgn32(hVisRgn,0,0,0,0); else CombineRgn32(hVisRgn, hVisRgn, dce->hClipRgn, (dce->DCXflags & DCX_EXCLUDERGN)? RGN_DIFF:RGN_AND); diff --git a/windows/defdlg.c b/windows/defdlg.c index d5d2f337e81..618e3dfc136 100644 --- a/windows/defdlg.c +++ b/windows/defdlg.c @@ -52,7 +52,7 @@ static BOOL32 DEFDLG_SaveFocus( HWND32 hwnd, DIALOGINFO *infoPtr ) static BOOL32 DEFDLG_RestoreFocus( HWND32 hwnd, DIALOGINFO *infoPtr ) { if (!infoPtr->hwndFocus || IsIconic32(hwnd)) return FALSE; - if (!IsWindow( infoPtr->hwndFocus )) return FALSE; + if (!IsWindow32( infoPtr->hwndFocus )) return FALSE; DEFDLG_SetFocus( hwnd, infoPtr->hwndFocus ); infoPtr->hwndFocus = 0; return TRUE; @@ -238,7 +238,7 @@ LRESULT DefDlgProc16( HWND16 hwnd, UINT16 msg, WPARAM16 wParam, LPARAM lParam ) /* Check if window was destroyed by dialog procedure */ - if( !result && IsWindow(hwnd)) + if (!result && IsWindow32(hwnd)) { /* callback didn't process this message */ @@ -289,7 +289,7 @@ LRESULT DefDlgProc32A( HWND32 hwnd, UINT32 msg, WPARAM32 wParam, LPARAM lParam) /* Check if window was destroyed by dialog procedure */ - if( !result && IsWindow(hwnd)) + if (!result && IsWindow32(hwnd)) { /* callback didn't process this message */ @@ -340,7 +340,7 @@ LRESULT DefDlgProc32W( HWND32 hwnd, UINT32 msg, WPARAM32 wParam, LPARAM lParam) /* Check if window was destroyed by dialog procedure */ - if( !result && IsWindow(hwnd)) + if (!result && IsWindow32(hwnd)) { /* callback didn't process this message */ diff --git a/windows/defwnd.c b/windows/defwnd.c index 5581bf76da2..fec17becbb5 100644 --- a/windows/defwnd.c +++ b/windows/defwnd.c @@ -215,13 +215,13 @@ static LRESULT DEFWND_DefWinProc( WND *wndPtr, UINT32 msg, WPARAM32 wParam, case WM_CTLCOLORBTN: case WM_CTLCOLORDLG: case WM_CTLCOLORSTATIC: - SetBkColor( (HDC32)wParam, GetSysColor32(COLOR_WINDOW) ); - SetTextColor( (HDC32)wParam, GetSysColor32(COLOR_WINDOWTEXT) ); + SetBkColor32( (HDC32)wParam, GetSysColor32(COLOR_WINDOW) ); + SetTextColor32( (HDC32)wParam, GetSysColor32(COLOR_WINDOWTEXT) ); return (LRESULT)sysColorObjects.hbrushWindow; case WM_CTLCOLORSCROLLBAR: - SetBkColor( (HDC32)wParam, RGB(255, 255, 255) ); - SetTextColor( (HDC32)wParam, RGB(0, 0, 0) ); + SetBkColor32( (HDC32)wParam, RGB(255, 255, 255) ); + SetTextColor32( (HDC32)wParam, RGB(0, 0, 0) ); UnrealizeObject32( sysColorObjects.hbrushScrollbar ); return (LRESULT)sysColorObjects.hbrushScrollbar; @@ -229,15 +229,15 @@ static LRESULT DEFWND_DefWinProc( WND *wndPtr, UINT32 msg, WPARAM32 wParam, { if (HIWORD(lParam) == CTLCOLOR_SCROLLBAR) { - SetBkColor( (HDC32)wParam, RGB(255, 255, 255) ); - SetTextColor( (HDC32)wParam, RGB(0, 0, 0) ); + SetBkColor32( (HDC32)wParam, RGB(255, 255, 255) ); + SetTextColor32( (HDC32)wParam, RGB(0, 0, 0) ); UnrealizeObject32( sysColorObjects.hbrushScrollbar ); return (LRESULT)sysColorObjects.hbrushScrollbar; } else { - SetBkColor( (HDC32)wParam, GetSysColor32(COLOR_WINDOW) ); - SetTextColor( (HDC32)wParam, GetSysColor32(COLOR_WINDOWTEXT) ); + SetBkColor32( (HDC32)wParam, GetSysColor32(COLOR_WINDOW) ); + SetTextColor32((HDC32)wParam, GetSysColor32(COLOR_WINDOWTEXT)); return (LRESULT)sysColorObjects.hbrushWindow; } } @@ -295,8 +295,8 @@ static LRESULT DEFWND_DefWinProc( WND *wndPtr, UINT32 msg, WPARAM32 wParam, iMenuSysKey = 0; if (wParam == VK_RETURN && (wndPtr->dwStyle & WS_MINIMIZE)) { - PostMessage( wndPtr->hwndSelf, WM_SYSCOMMAND, - (WPARAM16)SC_RESTORE, 0L ); + PostMessage16( wndPtr->hwndSelf, WM_SYSCOMMAND, + (WPARAM16)SC_RESTORE, 0L ); break; } if ((HIWORD(lParam) & KEYDATA_ALT) && wParam) diff --git a/windows/dialog.c b/windows/dialog.c index 17d1680ffac..366dd8a1ee2 100644 --- a/windows/dialog.c +++ b/windows/dialog.c @@ -296,7 +296,7 @@ static BOOL32 DIALOG_CreateControls( WND *pWnd, LPCSTR template, INT32 items, SendMessage32A( hwndDefButton, BM_SETSTYLE32, BS_PUSHBUTTON,FALSE ); hwndDefButton = hwndCtrl; - dlgInfo->idResult = GetWindowWord( hwndCtrl, GWW_ID ); + dlgInfo->idResult = GetWindowWord32( hwndCtrl, GWW_ID ); } } dprintf_dialog(stddeb, " END\n" ); @@ -1566,7 +1566,7 @@ static INT32 DIALOG_DlgDirList( HWND32 hDlg, LPCSTR spec, INT32 idLBox, HWND32 hwnd; #define SENDMSG(msg,wparam,lparam) \ - ((attrib & DDL_POSTMSGS) ? PostMessage( hwnd, msg, wparam, lparam ) \ + ((attrib & DDL_POSTMSGS) ? PostMessage32A( hwnd, msg, wparam, lparam ) \ : SendMessage32A( hwnd, msg, wparam, lparam )) dprintf_dialog( stddeb, "DlgDirList: %04x '%s' %d %d %04x\n", diff --git a/windows/event.c b/windows/event.c index 4800aed01c3..86c31299518 100644 --- a/windows/event.c +++ b/windows/event.c @@ -670,7 +670,7 @@ static void EVENT_SelectionRequest( WND *pWnd, XSelectionRequestEvent *event ) BOOL32 couldOpen = OpenClipboard32( pWnd->hwndSelf ); char* lpstr = 0; - hText = GetClipboardData(CF_TEXT); + hText = GetClipboardData16(CF_TEXT); text = GlobalLock16(hText); size = GlobalSize16(hText); @@ -842,7 +842,8 @@ static void EVENT_ClientMessage( WND *pWnd, XClientMessageEvent *event ) p += strlen(p) + 1; } *p_drop = '\0'; - PostMessage( pWnd->hwndSelf, WM_DROPFILES, (WPARAM16)hDrop, 0L ); + PostMessage16( pWnd->hwndSelf, WM_DROPFILES, + (WPARAM16)hDrop, 0L ); } } } @@ -983,7 +984,7 @@ HWND32 GetCapture32(void) */ FARPROC16 GetMouseEventProc(void) { - HMODULE16 hmodule = GetModuleHandle("USER"); + HMODULE16 hmodule = GetModuleHandle16("USER"); return MODULE_GetEntryPoint( hmodule, MODULE_GetOrdinal( hmodule, "Mouse_Event" ) ); } diff --git a/windows/focus.c b/windows/focus.c index 06467a6bf6a..3c28c8e3833 100644 --- a/windows/focus.c +++ b/windows/focus.c @@ -7,7 +7,6 @@ * */ -#define NO_TRANSITION_TYPES /* This file is Win32-clean */ #include "win.h" #include "winpos.h" #include "hook.h" @@ -120,7 +119,7 @@ HWND32 SetFocus32( HWND32 hwnd ) { if (!WINPOS_SetActiveWindow(hwndTop, 0, 0)) return 0; - if (!IsWindow( hwnd )) return 0; /* Abort if window destroyed */ + if (!IsWindow32( hwnd )) return 0; /* Abort if window destroyed */ } } else if( HOOK_CallHooks16( WH_CBT, HCBT_SETFOCUS, 0, (LPARAM)hwndFocus ) ) diff --git a/windows/graphics.c b/windows/graphics.c index 8dd1d65a5bb..6169fa75cf7 100644 --- a/windows/graphics.c +++ b/windows/graphics.c @@ -4,7 +4,6 @@ * Copyright 1993, 1994 Alexandre Julliard */ -#define NO_TRANSITION_TYPES /* This file is Win32-clean */ #include #include #include diff --git a/windows/hook.c b/windows/hook.c index 59ffd20a9dc..e01d3b77a8b 100644 --- a/windows/hook.c +++ b/windows/hook.c @@ -14,7 +14,6 @@ * handle in the low 16 bits and of a HOOK_MAGIC value in the high 16 bits. */ -#define NO_TRANSITION_TYPES /* This file is Win32-clean */ #include "windows.h" #include "hook.h" #include "queue.h" @@ -175,8 +174,8 @@ static void HOOK_Map16To32Common(INT32 id, INT32 code, WPARAM32 *pwParam, *plParam = (LPARAM)lprect32; break; } - break; } + break; case WH_MOUSE: { diff --git a/windows/keyboard.c b/windows/keyboard.c index 8ed9eeb3135..d1c0c989304 100644 --- a/windows/keyboard.c +++ b/windows/keyboard.c @@ -6,7 +6,7 @@ * Copyright 1997 David Faure * */ -#define NO_TRANSITION_TYPES + #include #include #include @@ -731,7 +731,7 @@ DWORD OemKeyScan(WORD wOemChar) */ /* VkKeyScan translates an ANSI character to a virtual-key and shift code * for the current keyboard. - * FIXME high-order byte should yield : + * high-order byte yields : * 0 Unshifted * 1 Shift * 2 Ctrl @@ -739,21 +739,53 @@ DWORD OemKeyScan(WORD wOemChar) * 6 Ctrl-Alt * 7 Ctrl-Alt-Shift * I.e. : Shift = 1, Ctrl = 2, Alt = 4. + * FIXME : works ok except for dead chars : + * VkKeyScan '^'(0x5e, 94) ... got keycode 00 ... returning 00 + * VkKeyScan '`'(0x60, 96) ... got keycode 00 ... returning 00 */ WORD VkKeyScan32A(CHAR cChar) { KeyCode keycode; - dprintf_keyboard(stddeb,"VkKeyScan '%c'(%d) ",cChar,cChar); - -/* let's do this : char = keysym (for ANSI chars) -> keyc [ + shift ... (?? how ??)] -keyc -> (keyc2vkey) vkey */ + KeySym keysym; + int i,index; + int highbyte=0; - keycode = XKeysymToKeycode(display, cChar & 0xFF); + /* char->keysym (same for ANSI chars) */ + keysym=(unsigned char) cChar;/* (!) cChar is signed */ + if (keysym<=27) keysym+=0xFF00;/*special chars : return, backspace...*/ - dprintf_keyboard(stddeb," ... got keycode 0x%x ... returning 0x%x\n", - keycode,keyc2vkey[keycode]); - return keyc2vkey[keycode]; + keycode = XKeysymToKeycode(display, keysym); /* keysym -> keycode */ + if (!keycode) + { /* It didn't work ... let's try with deadchar code. */ + keycode = XKeysymToKeycode(display, keysym | 0xFE00); + } + + dprintf_keyboard(stddeb,"VkKeyScan '%c'(%#lx, %lu) : got keycode %#.2x ", + cChar,keysym,keysym,keycode); + + if (keycode) + { + for (index=-1, i=0; (i<8) && (index<0); i++) /* find shift state */ + if (XKeycodeToKeysym(display,keycode,i)==keysym) index=i; + switch (index) { + case -1 : + fprintf(stderr,"Keysym %lx not found while parsing the keycode table\n",keysym); break; + case 0 : break; + case 1 : highbyte = 0x0100; break; + case 2 : highbyte = 0X0600; break; + default : fprintf(stderr,"index %d found by XKeycodeToKeysym. please report! \n",index); + } + /* + index : 0 adds 0x0000 + index : 1 adds 0x0100 (shift) + index : ? adds 0x0200 (ctrl) + index : 2 adds 0x0600 (ctrl+alt) + index : ? adds 0x0700 (ctrl+alt+shit (used?)) + */ + } + dprintf_keyboard(stddeb," ... returning %#.2x\n", keyc2vkey[keycode]+highbyte); + return keyc2vkey[keycode]+highbyte; /* keycode -> (keyc2vkey) vkey */ } /****************************************************************************** @@ -962,7 +994,7 @@ INT32 ToAscii32( { if ((e.keycode) && ((virtKey<0x10) || (virtKey>0x12))) /* it's normal to have 2 shift, control, and alt ! */ - dprintf_keyboard(stddeb,"ToAscii : The keycodes %X and %X are matching the same vkey %X\n", + dprintf_keyboard(stddeb,"ToAscii : The keycodes %d and %d are matching the same vkey %#X\n", e.keycode,keyc,virtKey); e.keycode = keyc; } @@ -1002,26 +1034,62 @@ INT32 ToAscii32( ((char*)lpChar)[1] = '\0'; switch (keysym) { + /* symbolic ASCII is the same as defined in rfc1345 */ case XK_dead_tilde : case 0x1000FE7E : /* Xfree's XK_Dtilde */ - dead_char = '~'; + dead_char = '~'; /* '? */ break; case XK_dead_acute : case 0x1000FE27 : /* Xfree's XK_Dacute_accent */ - dead_char = 0xb4; + dead_char = 0xb4; /* '' */ break; case XK_dead_circumflex : case 0x1000FE5E : /* Xfree's XK_Dcircumflex_accent */ - dead_char = '^'; + dead_char = '^'; /* '> */ break; case XK_dead_grave : case 0x1000FE60 : /* Xfree's XK_Dgrave_accent */ - dead_char = '`'; + dead_char = '`'; /* '! */ break; case XK_dead_diaeresis : case 0x1000FE22 : /* Xfree's XK_Ddiaeresis */ - dead_char = 0xa8; + dead_char = 0xa8; /* ': */ break; + case XK_dead_cedilla : + dead_char = 0xb8; /* ', */ + break; + case XK_dead_macron : + dead_char = '-'; /* 'm isn't defined on iso-8859-x */ + break; + case XK_dead_breve : + dead_char = 0xa2; /* '( */ + break; + case XK_dead_abovedot : + dead_char = 0xff; /* '. */ + break; + case XK_dead_abovering : + dead_char = '0'; /* '0 isn't defined on iso-8859-x */ + break; + case XK_dead_doubleacute : + dead_char = 0xbd; /* '" */ + break; + case XK_dead_caron : + dead_char = 0xb7; /* '< */ + break; + case XK_dead_ogonek : + dead_char = 0xb2; /* '; */ + break; +/* FIXME: I don't know this three. + case XK_dead_iota : + dead_char = 'i'; + break; + case XK_dead_voiced_sound : + dead_char = 'v'; + break; + case XK_dead_semivoiced_sound : + dead_char = 's'; + break; +*/ } if (dead_char) { diff --git a/windows/mdi.c b/windows/mdi.c index 395a4ea261c..d8bb5a36e64 100644 --- a/windows/mdi.c +++ b/windows/mdi.c @@ -60,7 +60,7 @@ static void MDI_PostUpdate(HWND16 hwnd, MDICLIENTINFO* ci, WORD recalc) if( !ci->sbNeedUpdate ) { ci->sbNeedUpdate = TRUE; - PostMessage( hwnd, WM_MDICALCCHILDSCROLL, 0, 0); + PostMessage16( hwnd, WM_MDICALCCHILDSCROLL, 0, 0); } ci->sbRecalc = recalc; } @@ -69,7 +69,7 @@ static void MDI_PostUpdate(HWND16 hwnd, MDICLIENTINFO* ci, WORD recalc) * MDI_MenuAppendItem */ #ifdef SUPERFLUOUS_FUNCTIONS -static BOOL MDI_MenuAppendItem(WND *clientWnd, HWND16 hWndChild) +static BOOL32 MDI_MenuAppendItem(WND *clientWnd, HWND16 hWndChild) { char buffer[128]; MDICLIENTINFO *clientInfo = (MDICLIENTINFO*)clientWnd->wExtra; @@ -88,14 +88,14 @@ static BOOL MDI_MenuAppendItem(WND *clientWnd, HWND16 hWndChild) /********************************************************************** * MDI_MenuModifyItem */ -static BOOL MDI_MenuModifyItem(WND* clientWnd, HWND16 hWndChild ) +static BOOL32 MDI_MenuModifyItem(WND* clientWnd, HWND16 hWndChild ) { char buffer[128]; MDICLIENTINFO *clientInfo = (MDICLIENTINFO*)clientWnd->wExtra; WND *wndPtr = WIN_FindWndPtr(hWndChild); - UINT n = sprintf(buffer, "%d ", + UINT32 n = sprintf(buffer, "%d ", wndPtr->wIDmenu - clientInfo->idFirstChild + 1); - BOOL bRet = 0; + BOOL32 bRet = 0; if( !clientInfo->hWindowMenu ) return 0; @@ -111,12 +111,12 @@ static BOOL MDI_MenuModifyItem(WND* clientWnd, HWND16 hWndChild ) /********************************************************************** * MDI_MenuDeleteItem */ -static BOOL MDI_MenuDeleteItem(WND* clientWnd, HWND16 hWndChild ) +static BOOL32 MDI_MenuDeleteItem(WND* clientWnd, HWND16 hWndChild ) { char buffer[128]; MDICLIENTINFO *clientInfo = (MDICLIENTINFO*)clientWnd->wExtra; WND *wndPtr = WIN_FindWndPtr(hWndChild); - UINT index = 0,id,n; + UINT32 index = 0,id,n; if( !clientInfo->nActiveChildren || !clientInfo->hWindowMenu ) return 0; @@ -194,12 +194,13 @@ static HWND16 MDI_GetWindow(WND *clientWnd, HWND16 hWnd, WORD wTo ) * * It seems that default height is 2/3 of client rect */ -static void MDI_CalcDefaultChildPos(WND* w, WORD n, LPPOINT16 lpPos, INT delta) +static void MDI_CalcDefaultChildPos( WND* w, WORD n, LPPOINT16 lpPos, + INT32 delta) { RECT16 rect = w->rectClient; - INT spacing = GetSystemMetrics32(SM_CYCAPTION) + - GetSystemMetrics32(SM_CYFRAME) - 1; - INT nstagger; + INT32 spacing = GetSystemMetrics32(SM_CYCAPTION) + + GetSystemMetrics32(SM_CYFRAME) - 1; + INT32 nstagger; if( rect.bottom - rect.top - delta >= spacing ) rect.bottom -= delta; @@ -244,9 +245,9 @@ static HMENU16 MDISetMenu(HWND16 hwnd, BOOL32 fRefresh, HMENU16 hmenuFrame, if( ci->nActiveChildren ) { - INT j = i - ci->nActiveChildren + 1; + INT32 j = i - ci->nActiveChildren + 1; char buffer[100]; - UINT id,state; + UINT32 id,state; for( ; i >= j ; i-- ) { @@ -383,8 +384,8 @@ static HWND16 MDICreateChild( WND *w, MDICLIENTINFO *ci, HWND16 parent, { ci->nActiveChildren--; DeleteMenu32(ci->hWindowMenu,wIDmenu,MF_BYCOMMAND); - if( IsWindow(hwndMax) ) - ShowWindow16(hwndMax, SW_SHOWMAXIMIZED); + if( IsWindow32(hwndMax) ) + ShowWindow32(hwndMax, SW_SHOWMAXIMIZED); } return hwnd; @@ -443,7 +444,7 @@ static void MDI_SwitchActiveChild( HWND16 clientHwnd, HWND16 childHwnd, if ( hwndTo != hwndPrev ) { - BOOL bOptimize = 0; + BOOL32 bOptimize = 0; if( ci->hwndChildMaximized ) { @@ -520,7 +521,7 @@ static LONG MDI_ChildActivate( WND *clientPtr, HWND16 hWndChild ) HWND16 prevActiveWnd = clientInfo->hwndActiveChild; WND *wndPtr = WIN_FindWndPtr( hWndChild ); WND *wndPrev = WIN_FindWndPtr( prevActiveWnd ); - BOOL isActiveFrameWnd = 0; + BOOL32 isActiveFrameWnd = 0; if( hWndChild == prevActiveWnd ) return 0L; @@ -670,7 +671,7 @@ static HBITMAP16 CreateMDIMenuBitmap(void) HBITMAP16 hbCopy,hb_src,hb_dest; hb_src = SelectObject32(hDCSrc,hbClose); - hbCopy = CreateCompatibleBitmap(hDCSrc,SYSMETRICS_CXSIZE, SYSMETRICS_CYSIZE); + hbCopy = CreateCompatibleBitmap32(hDCSrc,SYSMETRICS_CXSIZE,SYSMETRICS_CYSIZE); hb_dest = SelectObject32(hDCDest,hbCopy); BitBlt32(hDCDest, 0, 0, SYSMETRICS_CXSIZE, SYSMETRICS_CYSIZE, @@ -975,7 +976,7 @@ static void MDI_UpdateFrameText( WND *frameWnd, HWND16 hClient, * * This function is the handler for all MDI requests. */ -LRESULT MDIClientWndProc(HWND16 hwnd, UINT message, WPARAM16 wParam, LPARAM lParam) +LRESULT MDIClientWndProc(HWND16 hwnd, UINT16 message, WPARAM16 wParam, LPARAM lParam) { LPCREATESTRUCT16 cs; LPCLIENTCREATESTRUCT16 ccs; @@ -983,7 +984,7 @@ LRESULT MDIClientWndProc(HWND16 hwnd, UINT message, WPARAM16 wParam, LPARAM lPar RECT16 rect; WND *w = WIN_FindWndPtr(hwnd); WND *frameWnd = w->parent; - INT nItems; + INT32 nItems; ci = (MDICLIENTINFO *) w->wExtra; @@ -1460,8 +1461,8 @@ LRESULT DefMDIChildProc16( HWND16 hwnd, UINT16 message, case WM_MENUCHAR: /* MDI children don't have menu bars */ - PostMessage( clientWnd->parent->hwndSelf, WM_SYSCOMMAND, - (WPARAM16)SC_KEYMENU, (LPARAM)wParam); + PostMessage16( clientWnd->parent->hwndSelf, WM_SYSCOMMAND, + (WPARAM16)SC_KEYMENU, (LPARAM)wParam); return 0x00010000L; case WM_NEXTMENU: @@ -1514,8 +1515,8 @@ LRESULT DefMDIChildProc32A( HWND32 hwnd, UINT32 message, case WM_MENUCHAR: /* MDI children don't have menu bars */ - PostMessage( clientWnd->parent->hwndSelf, WM_SYSCOMMAND, - (WPARAM16)SC_KEYMENU, (LPARAM)LOWORD(wParam) ); + PostMessage16( clientWnd->parent->hwndSelf, WM_SYSCOMMAND, + (WPARAM16)SC_KEYMENU, (LPARAM)LOWORD(wParam) ); return 0x00010000L; case WM_CLOSE: @@ -1641,8 +1642,8 @@ BOOL16 TranslateMDISysAccel16( HWND16 hwndClient, LPMSG16 msg ) void CalcChildScroll( HWND16 hwnd, WORD scroll ) { RECT16 childRect, clientRect; - INT vmin, vmax, hmin, hmax, vpos, hpos; - BOOL noscroll = FALSE; + INT32 vmin, vmax, hmin, hmax, vpos, hpos; + BOOL32 noscroll = FALSE; WND *pWnd, *Wnd; if (!(Wnd = pWnd = WIN_FindWndPtr( hwnd ))) return; diff --git a/windows/message.c b/windows/message.c index dfce8b0c0ac..ace52001957 100644 --- a/windows/message.c +++ b/windows/message.c @@ -404,7 +404,8 @@ static int MSG_JournalPlayBackMsg(void) * * Peek for a hardware message matching the hwnd and message filters. */ -static BOOL32 MSG_PeekHardwareMsg( MSG16 *msg, HWND16 hwnd, DWORD filter, BOOL32 remove ) +static BOOL32 MSG_PeekHardwareMsg( MSG16 *msg, HWND16 hwnd, DWORD filter, + BOOL32 remove ) { DWORD status = SYSQ_MSG_ACCEPT; MESSAGEQUEUE *sysMsgQueue = QUEUE_GetSysQueue(); @@ -543,7 +544,7 @@ UINT32 GetDoubleClickTime32(void) * * Implementation of an inter-task SendMessage. */ -static LRESULT MSG_SendMessage( HQUEUE16 hDestQueue, HWND16 hwnd, UINT msg, +static LRESULT MSG_SendMessage( HQUEUE16 hDestQueue, HWND16 hwnd, UINT16 msg, WPARAM16 wParam, LPARAM lParam ) { INT32 prevSMRL = debugSMRL; @@ -553,7 +554,7 @@ static LRESULT MSG_SendMessage( HQUEUE16 hDestQueue, HWND16 hwnd, UINT msg, if (!(queue = (MESSAGEQUEUE*)GlobalLock16( GetTaskQueue(0) ))) return 0; if (!(destQ = (MESSAGEQUEUE*)GlobalLock16( hDestQueue ))) return 0; - if (IsTaskLocked() || !IsWindow(hwnd)) return 0; + if (IsTaskLocked() || !IsWindow32(hwnd)) return 0; debugSMRL+=4; dprintf_sendmsg(stddeb,"%*sSM: %s [%04x] (%04x -> %04x)\n", @@ -617,9 +618,9 @@ static LRESULT MSG_SendMessage( HQUEUE16 hDestQueue, HWND16 hwnd, UINT msg, /*********************************************************************** - * ReplyMessage (USER.115) + * ReplyMessage16 (USER.115) */ -void ReplyMessage( LRESULT result ) +void ReplyMessage16( LRESULT result ) { MESSAGEQUEUE *senderQ; MESSAGEQUEUE *queue; @@ -659,8 +660,8 @@ void ReplyMessage( LRESULT result ) /*********************************************************************** * MSG_PeekMessage */ -static BOOL MSG_PeekMessage( LPMSG16 msg, HWND16 hwnd, WORD first, WORD last, - WORD flags, BOOL peek ) +static BOOL32 MSG_PeekMessage( LPMSG16 msg, HWND16 hwnd, WORD first, WORD last, + WORD flags, BOOL32 peek ) { int pos, mask; MESSAGEQUEUE *msgQueue; @@ -843,7 +844,7 @@ BOOL32 MSG_InternalGetMessage( MSG16 *msg, HWND32 hwnd, HWND32 hwndOwner, if (!MSG_PeekMessage( msg, 0, 0, 0, flags, TRUE )) { /* No message present -> send ENTERIDLE and wait */ - if (IsWindow(hwndOwner)) + if (IsWindow32(hwndOwner)) SendMessage16( hwndOwner, WM_ENTERIDLE, code, (LPARAM)hwnd ); MSG_PeekMessage( msg, 0, 0, 0, flags, FALSE ); @@ -893,9 +894,9 @@ BOOL16 PeekMessage16( LPMSG16 msg, HWND16 hwnd, UINT16 first, /*********************************************************************** - * GetMessage (USER.108) + * GetMessage16 (USER.108) */ -BOOL GetMessage( SEGPTR msg, HWND16 hwnd, UINT first, UINT last ) +BOOL16 GetMessage16( SEGPTR msg, HWND16 hwnd, UINT16 first, UINT16 last ) { MSG16 *lpmsg = (MSG16 *)PTR_SEG_TO_LIN(msg); MSG_PeekMessage( lpmsg, @@ -909,9 +910,10 @@ BOOL GetMessage( SEGPTR msg, HWND16 hwnd, UINT first, UINT last ) /*********************************************************************** - * PostMessage (USER.110) + * PostMessage16 (USER.110) */ -BOOL PostMessage( HWND16 hwnd, WORD message, WORD wParam, LONG lParam ) +BOOL16 PostMessage16( HWND16 hwnd, UINT16 message, WPARAM16 wParam, + LPARAM lParam ) { MSG16 msg; WND *wndPtr; @@ -938,7 +940,7 @@ BOOL PostMessage( HWND16 hwnd, WORD message, WORD wParam, LONG lParam ) { dprintf_msg(stddeb,"BROADCAST Message to hWnd=%04x m=%04X w=%04X l=%08lX !\n", wndPtr->hwndSelf, message, wParam, lParam); - PostMessage( wndPtr->hwndSelf, message, wParam, lParam ); + PostMessage16( wndPtr->hwndSelf, message, wParam, lParam ); } } dprintf_msg(stddeb,"PostMessage // End of HWND_BROADCAST !\n"); @@ -951,6 +953,29 @@ BOOL PostMessage( HWND16 hwnd, WORD message, WORD wParam, LONG lParam ) return QUEUE_AddMsg( wndPtr->hmemTaskQ, &msg, 0 ); } + +/*********************************************************************** + * PostMessage32A (USER32.418) + */ +BOOL32 PostMessage32A( HWND32 hwnd, UINT32 message, WPARAM32 wParam, + LPARAM lParam ) +{ + /* FIXME */ + return PostMessage16( hwnd, message, wParam, lParam ); +} + + +/*********************************************************************** + * PostMessage32W (USER32.419) + */ +BOOL32 PostMessage32W( HWND32 hwnd, UINT32 message, WPARAM32 wParam, + LPARAM lParam ) +{ + /* FIXME */ + return PostMessage16( hwnd, message, wParam, lParam ); +} + + /*********************************************************************** * PostAppMessage16 (USER.116) */ @@ -993,7 +1018,7 @@ LRESULT SendMessage16( HWND16 hwnd, UINT16 msg, WPARAM16 wParam, LPARAM lParam) for (ppWnd = list; *ppWnd; ppWnd++) { wndPtr = *ppWnd; - if (!IsWindow(wndPtr->hwndSelf)) continue; + if (!IsWindow32(wndPtr->hwndSelf)) continue; if (wndPtr->dwStyle & WS_POPUP || wndPtr->dwStyle & WS_CAPTION) { dprintf_msg(stddeb,"BROADCAST Message to hWnd=%04x m=%04X w=%04lX l=%08lX !\n", @@ -1079,7 +1104,7 @@ LRESULT SendMessage32A(HWND32 hwnd, UINT32 msg, WPARAM32 wParam, LPARAM lParam) for (ppWnd = list; *ppWnd; ppWnd++) { wndPtr = *ppWnd; - if (!IsWindow(wndPtr->hwndSelf)) continue; + if (!IsWindow32(wndPtr->hwndSelf)) continue; if (wndPtr->dwStyle & WS_POPUP || wndPtr->dwStyle & WS_CAPTION) SendMessage32A( wndPtr->hwndSelf, msg, wParam, lParam ); } @@ -1128,7 +1153,7 @@ LRESULT SendMessage32W(HWND32 hwnd, UINT32 msg, WPARAM32 wParam, LPARAM lParam) for (ppWnd = list; *ppWnd; ppWnd++) { wndPtr = *ppWnd; - if (!IsWindow(wndPtr->hwndSelf)) continue; + if (!IsWindow32(wndPtr->hwndSelf)) continue; if (wndPtr->dwStyle & WS_POPUP || wndPtr->dwStyle & WS_CAPTION) SendMessage32W( wndPtr->hwndSelf, msg, wParam, lParam ); } @@ -1178,6 +1203,7 @@ struct accent_char static const struct accent_char accent_chars[] = { +/* A good idea should be to read /usr/X11/lib/X11/locale/iso8859-x/Compose */ {'`', 'A', '\300'}, {'`', 'a', '\340'}, {'\'', 'A', '\301'}, {'\'', 'a', '\341'}, {'^', 'A', '\302'}, {'^', 'a', '\342'}, @@ -1212,6 +1238,77 @@ static const struct accent_char accent_chars[] = {'T', 'H', '\336'}, {'t', 'h', '\376'}, {'s', 's', '\337'}, {'"', 'y', '\377'}, {'s', 'z', '\337'}, {'i', 'j', '\377'}, + /* iso-8859-2 uses this */ + {'<', 'L', '\245'}, {'<', 'l', '\265'}, /* caron */ + {'<', 'S', '\251'}, {'<', 's', '\271'}, + {'<', 'T', '\253'}, {'<', 't', '\273'}, + {'<', 'Z', '\256'}, {'<', 'z', '\276'}, + {'<', 'C', '\310'}, {'<', 'c', '\350'}, + {'<', 'E', '\314'}, {'<', 'e', '\354'}, + {'<', 'D', '\317'}, {'<', 'd', '\357'}, + {'<', 'N', '\322'}, {'<', 'n', '\362'}, + {'<', 'R', '\330'}, {'<', 'r', '\370'}, + {';', 'A', '\241'}, {';', 'a', '\261'}, /* ogonek */ + {';', 'E', '\312'}, {';', 'e', '\332'}, + {'\'', 'Z', '\254'}, {'\'', 'z', '\274'}, /* acute */ + {'\'', 'R', '\300'}, {'\'', 'r', '\340'}, + {'\'', 'L', '\305'}, {'\'', 'l', '\345'}, + {'\'', 'C', '\306'}, {'\'', 'c', '\346'}, + {'\'', 'N', '\321'}, {'\'', 'n', '\361'}, +/* collision whith S, from iso-8859-9 !!! */ + {',', 'S', '\252'}, {',', 's', '\272'}, /* cedilla */ + {',', 'T', '\336'}, {',', 't', '\376'}, + {'.', 'Z', '\257'}, {'.', 'z', '\277'}, /* dot above */ + {'/', 'L', '\243'}, {'/', 'l', '\263'}, /* slash */ + {'/', 'D', '\320'}, {'/', 'd', '\360'}, + {'(', 'A', '\303'}, {'(', 'a', '\343'}, /* breve */ + {'\275', 'O', '\325'}, {'\275', 'o', '\365'}, /* double acute */ + {'\275', 'U', '\334'}, {'\275', 'u', '\374'}, + {'0', 'U', '\332'}, {'0', 'u', '\372'}, /* ring above */ + /* iso-8859-3 uses this */ + {'/', 'H', '\241'}, {'/', 'h', '\261'}, /* slash */ + {'>', 'H', '\246'}, {'>', 'h', '\266'}, /* circumflex */ + {'>', 'J', '\254'}, {'>', 'j', '\274'}, + {'>', 'C', '\306'}, {'>', 'c', '\346'}, + {'>', 'G', '\330'}, {'>', 'g', '\370'}, + {'>', 'S', '\336'}, {'>', 's', '\376'}, +/* collision whith G( from iso-8859-9 !!! */ + {'(', 'G', '\253'}, {'(', 'g', '\273'}, /* breve */ + {'(', 'U', '\335'}, {'(', 'u', '\375'}, +/* collision whith I. from iso-8859-3 !!! */ + {'.', 'I', '\251'}, {'.', 'i', '\271'}, /* dot above */ + {'.', 'C', '\305'}, {'.', 'c', '\345'}, + {'.', 'G', '\325'}, {'.', 'g', '\365'}, + /* iso-8859-4 uses this */ + {',', 'R', '\243'}, {',', 'r', '\263'}, /* cedilla */ + {',', 'L', '\246'}, {',', 'l', '\266'}, + {',', 'G', '\253'}, {',', 'g', '\273'}, + {',', 'N', '\321'}, {',', 'n', '\361'}, + {',', 'K', '\323'}, {',', 'k', '\363'}, + {'~', 'I', '\245'}, {'~', 'i', '\265'}, /* tilde */ + {'-', 'E', '\252'}, {'-', 'e', '\272'}, /* macron */ + {'-', 'A', '\300'}, {'-', 'a', '\340'}, + {'-', 'I', '\317'}, {'-', 'i', '\357'}, + {'-', 'O', '\322'}, {'-', 'o', '\362'}, + {'-', 'U', '\336'}, {'-', 'u', '\376'}, + {'/', 'T', '\254'}, {'/', 't', '\274'}, /* slash */ + {'.', 'E', '\314'}, {'.', 'e', '\344'}, /* dot above */ + {';', 'I', '\307'}, {';', 'i', '\347'}, /* ogonek */ + {';', 'U', '\331'}, {';', 'u', '\371'}, + /* iso-8859-9 uses this */ + /* iso-8859-9 has really bad choosen G( S, and I. as they collide + * whith the same letters on other iso-8859-x (that is they are on + * different places :-( ), if you use turkish uncomment these and + * comment out the lines in iso-8859-2 and iso-8859-3 sections + * FIXME: should be dynamic according to chosen language + * if/when Wine has turkish support. + */ +/* collision whith G( from iso-8859-3 !!! */ +/* {'(', 'G', '\320'}, {'(', 'g', '\360'}, */ /* breve */ +/* collision whith S, from iso-8859-2 !!! */ +/* {',', 'S', '\336'}, {',', 's', '\376'}, */ /* cedilla */ +/* collision whith I. from iso-8859-3 !!! */ +/* {'.', 'I', '\335'}, {'.', 'i', '\375'}, */ /* dot above */ }; @@ -1256,8 +1353,13 @@ static BOOL32 MSG_DoTranslateMessage( UINT32 message, HWND32 hwnd, int i; if (wp[0] == ' ') wp[0] = dead_char; - if (dead_char == 0xa8) dead_char = '"'; + if (dead_char == 0xa2) dead_char = '('; + else if (dead_char == 0xa8) dead_char = '"'; + else if (dead_char == 0xb2) dead_char = ';'; else if (dead_char == 0xb4) dead_char = '\''; + else if (dead_char == 0xb7) dead_char = '<'; + else if (dead_char == 0xb8) dead_char = ','; + else if (dead_char == 0xff) dead_char = '.'; for (i = 0; i < sizeof(accent_chars)/sizeof(accent_chars[0]); i++) if ((accent_chars[i].ac_accent == dead_char) && (accent_chars[i].ac_char == wp[0])) @@ -1268,7 +1370,7 @@ static BOOL32 MSG_DoTranslateMessage( UINT32 message, HWND32 hwnd, dead_char = 0; } dprintf_key(stddeb, "1 -> PostMessage(%s)\n", SPY_GetMsgName(message)); - PostMessage( hwnd, message, wp[0], lParam ); + PostMessage16( hwnd, message, wp[0], lParam ); return TRUE; case -1 : @@ -1276,7 +1378,7 @@ static BOOL32 MSG_DoTranslateMessage( UINT32 message, HWND32 hwnd, dead_char = wp[0]; dprintf_key( stddeb, "-1 -> PostMessage(%s)\n", SPY_GetMsgName(message)); - PostMessage( hwnd, message, wp[0], lParam ); + PostMessage16( hwnd, message, wp[0], lParam ); return TRUE; } return FALSE; diff --git a/windows/msgbox.c b/windows/msgbox.c index d8a097842c3..27a9793de50 100644 --- a/windows/msgbox.c +++ b/windows/msgbox.c @@ -4,7 +4,6 @@ * Copyright 1995 Bernd Schmidt */ -#define NO_TRANSITION_TYPES /* This file is Win32-clean */ #include #include "windows.h" #include "dlgs.h" diff --git a/windows/nonclient.c b/windows/nonclient.c index d4001a1d36c..d04d7df8ec5 100644 --- a/windows/nonclient.c +++ b/windows/nonclient.c @@ -64,7 +64,8 @@ extern HCURSOR16 CURSORICON_IconToCursor( HICON16, BOOL32 ); * Compute the size of the window rectangle from the size of the * client rectangle. */ -static void NC_AdjustRect(LPRECT16 rect, DWORD style, BOOL menu, DWORD exStyle) +static void NC_AdjustRect( LPRECT16 rect, DWORD style, BOOL32 menu, + DWORD exStyle ) { if(style & WS_ICONIC) return; /* Decide if the window will be managed (see CreateWindowEx) */ @@ -457,7 +458,7 @@ void NC_DrawSysButton( HWND32 hwnd, HDC32 hdc, BOOL32 down ) /*********************************************************************** * NC_DrawMaxButton */ -static void NC_DrawMaxButton( HWND32 hwnd, HDC16 hdc, BOOL down ) +static void NC_DrawMaxButton( HWND32 hwnd, HDC16 hdc, BOOL32 down ) { RECT32 rect; WND *wndPtr = WIN_FindWndPtr( hwnd ); @@ -477,7 +478,7 @@ static void NC_DrawMaxButton( HWND32 hwnd, HDC16 hdc, BOOL down ) /*********************************************************************** * NC_DrawMinButton */ -static void NC_DrawMinButton( HWND32 hwnd, HDC16 hdc, BOOL down ) +static void NC_DrawMinButton( HWND32 hwnd, HDC16 hdc, BOOL32 down ) { RECT32 rect; WND *wndPtr = WIN_FindWndPtr( hwnd ); @@ -499,7 +500,8 @@ static void NC_DrawMinButton( HWND32 hwnd, HDC16 hdc, BOOL down ) * Draw a window frame inside the given rectangle, and update the rectangle. * The correct pen for the frame must be selected in the DC. */ -static void NC_DrawFrame( HDC16 hdc, RECT16 *rect, BOOL dlgFrame, BOOL active ) +static void NC_DrawFrame( HDC16 hdc, RECT16 *rect, BOOL32 dlgFrame, + BOOL32 active ) { short width, height, tmp; @@ -575,7 +577,7 @@ static void NC_DrawFrame( HDC16 hdc, RECT16 *rect, BOOL dlgFrame, BOOL active ) * * Draw the frame used when moving or resizing window. */ -static void NC_DrawMovingFrame( HDC16 hdc, RECT16 *rect, BOOL thickframe ) +static void NC_DrawMovingFrame( HDC16 hdc, RECT16 *rect, BOOL32 thickframe ) { if (thickframe) FastWindowFrame( hdc, rect, SYSMETRICS_CXFRAME, SYSMETRICS_CYFRAME, PATINVERT ); @@ -590,7 +592,7 @@ static void NC_DrawMovingFrame( HDC16 hdc, RECT16 *rect, BOOL thickframe ) * The correct pen for the window frame must be selected in the DC. */ static void NC_DrawCaption( HDC16 hdc, RECT16 *rect, HWND32 hwnd, - DWORD style, BOOL active ) + DWORD style, BOOL32 active ) { RECT16 r = *rect; WND * wndPtr = WIN_FindWndPtr( hwnd ); @@ -647,8 +649,8 @@ static void NC_DrawCaption( HDC16 hdc, RECT16 *rect, HWND32 hwnd, if (GetWindowText32A( hwnd, buffer, sizeof(buffer) )) { - if (active) SetTextColor( hdc, GetSysColor32( COLOR_CAPTIONTEXT ) ); - else SetTextColor( hdc, GetSysColor32( COLOR_INACTIVECAPTIONTEXT ) ); + if (active) SetTextColor32( hdc, GetSysColor32( COLOR_CAPTIONTEXT ) ); + else SetTextColor32( hdc, GetSysColor32( COLOR_INACTIVECAPTIONTEXT ) ); SetBkMode32( hdc, TRANSPARENT ); DrawText16( hdc, buffer, -1, &r, DT_SINGLELINE | DT_CENTER | DT_VCENTER | DT_NOPREFIX ); @@ -1230,7 +1232,7 @@ static void NC_TrackMinMaxBox( HWND32 hwnd, WORD wParam ) { MSG16 msg; HDC32 hdc = GetWindowDC32( hwnd ); - BOOL pressed = TRUE; + BOOL32 pressed = TRUE; SetCapture32( hwnd ); if (wParam == HTMINBUTTON) NC_DrawMinButton( hwnd, hdc, TRUE ); @@ -1238,7 +1240,7 @@ static void NC_TrackMinMaxBox( HWND32 hwnd, WORD wParam ) do { - BOOL oldstate = pressed; + BOOL32 oldstate = pressed; MSG_InternalGetMessage( &msg, 0, 0, 0, PM_REMOVE, FALSE ); pressed = (NC_HandleNCHitTest( hwnd, msg.pt ) == wParam); @@ -1294,7 +1296,7 @@ static void NC_TrackScrollBar( HWND32 hwnd, WPARAM32 wParam, POINT32 pt ) do { - GetMessage( SEGPTR_GET(msg), 0, 0, 0 ); + GetMessage16( SEGPTR_GET(msg), 0, 0, 0 ); switch(msg->message) { case WM_LBUTTONUP: @@ -1311,7 +1313,7 @@ static void NC_TrackScrollBar( HWND32 hwnd, WPARAM32 wParam, POINT32 pt ) DispatchMessage16( msg ); break; } - if (!IsWindow( hwnd )) + if (!IsWindow32( hwnd )) { ReleaseCapture(); break; diff --git a/windows/painting.c b/windows/painting.c index 2c5e4f9eb31..78f60625d4e 100644 --- a/windows/painting.c +++ b/windows/painting.c @@ -23,7 +23,7 @@ * WIN_UpdateNCArea * */ -void WIN_UpdateNCArea(WND* wnd, BOOL bUpdate) +void WIN_UpdateNCArea(WND* wnd, BOOL32 bUpdate) { POINT16 pt = {0, 0}; HRGN32 hClip = 1; @@ -413,13 +413,13 @@ BOOL32 PAINT_RedrawWindow( HWND32 hwnd, const RECT32 *rectUpdate, for (ppWnd = list; *ppWnd; ppWnd++) { wndPtr = *ppWnd; - if (!IsWindow(wndPtr->hwndSelf)) continue; + if (!IsWindow32(wndPtr->hwndSelf)) continue; if (wndPtr->dwStyle & WS_VISIBLE) { - SetRectRgn( hrgn, wndPtr->rectWindow.left, - wndPtr->rectWindow.top, - wndPtr->rectWindow.right, - wndPtr->rectWindow.bottom ); + SetRectRgn32( hrgn, wndPtr->rectWindow.left, + wndPtr->rectWindow.top, + wndPtr->rectWindow.right, + wndPtr->rectWindow.bottom ); if (!CombineRgn32( hrgn, hrgn, hrgnUpdate, RGN_AND )) continue; OffsetRgn32( hrgn, -wndPtr->rectClient.left, @@ -438,7 +438,7 @@ BOOL32 PAINT_RedrawWindow( HWND32 hwnd, const RECT32 *rectUpdate, for (ppWnd = list; *ppWnd; ppWnd++) { wndPtr = *ppWnd; - if (IsWindow( wndPtr->hwndSelf )) + if (IsWindow32( wndPtr->hwndSelf )) PAINT_RedrawWindow( wndPtr->hwndSelf, NULL, 0, flags, 0 ); } HeapFree( SystemHeap, 0, list ); @@ -482,9 +482,18 @@ BOOL16 RedrawWindow16( HWND16 hwnd, const RECT16 *rectUpdate, /*********************************************************************** - * UpdateWindow (USER.124) (USER32.566) + * UpdateWindow16 (USER.124) */ -void UpdateWindow( HWND32 hwnd ) +void UpdateWindow16( HWND16 hwnd ) +{ + RedrawWindow32( hwnd, NULL, 0, RDW_UPDATENOW | RDW_NOCHILDREN ); +} + + +/*********************************************************************** + * UpdateWindow32 (USER32.566) + */ +void UpdateWindow32( HWND32 hwnd ) { RedrawWindow32( hwnd, NULL, 0, RDW_UPDATENOW | RDW_NOCHILDREN ); } @@ -590,7 +599,7 @@ BOOL32 GetUpdateRect32( HWND32 hwnd, LPRECT32 rect, BOOL32 erase ) if (wndPtr->hrgnUpdate > 1) { HRGN32 hrgn = CreateRectRgn32( 0, 0, 0, 0 ); - if (GetUpdateRgn( hwnd, hrgn, erase ) == ERROR) return FALSE; + if (GetUpdateRgn32( hwnd, hrgn, erase ) == ERROR) return FALSE; GetRgnBox32( hrgn, rect ); DeleteObject32( hrgn ); } @@ -601,9 +610,18 @@ BOOL32 GetUpdateRect32( HWND32 hwnd, LPRECT32 rect, BOOL32 erase ) /*********************************************************************** - * GetUpdateRgn (USER.237) (USER32.297) + * GetUpdateRgn16 (USER.237) */ -INT16 GetUpdateRgn( HWND32 hwnd, HRGN32 hrgn, BOOL32 erase ) +INT16 GetUpdateRgn16( HWND16 hwnd, HRGN16 hrgn, BOOL16 erase ) +{ + return GetUpdateRgn32( hwnd, hrgn, erase ); +} + + +/*********************************************************************** + * GetUpdateRgn32 (USER32.297) + */ +INT32 GetUpdateRgn32( HWND32 hwnd, HRGN32 hrgn, BOOL32 erase ) { INT32 retval; WND * wndPtr = WIN_FindWndPtr( hwnd ); @@ -611,7 +629,7 @@ INT16 GetUpdateRgn( HWND32 hwnd, HRGN32 hrgn, BOOL32 erase ) if (wndPtr->hrgnUpdate <= 1) { - SetRectRgn( hrgn, 0, 0, 0, 0 ); + SetRectRgn32( hrgn, 0, 0, 0, 0 ); return NULLREGION; } retval = CombineRgn32( hrgn, wndPtr->hrgnUpdate, 0, RGN_COPY ); @@ -621,18 +639,27 @@ INT16 GetUpdateRgn( HWND32 hwnd, HRGN32 hrgn, BOOL32 erase ) /*********************************************************************** - * ExcludeUpdateRgn (USER.238) (USER32.194) + * ExcludeUpdateRgn16 (USER.238) */ -INT16 ExcludeUpdateRgn( HDC32 hdc, HWND32 hwnd ) +INT16 ExcludeUpdateRgn16( HDC16 hdc, HWND16 hwnd ) { - RECT16 rect; + return ExcludeUpdateRgn32( hdc, hwnd ); +} + + +/*********************************************************************** + * ExcludeUpdateRgn32 (USER32.194) + */ +INT32 ExcludeUpdateRgn32( HDC32 hdc, HWND32 hwnd ) +{ + RECT32 rect; WND * wndPtr; if (!(wndPtr = WIN_FindWndPtr( hwnd ))) return ERROR; if (wndPtr->hrgnUpdate) { - INT16 ret; + INT32 ret; HRGN32 hrgn = CreateRectRgn32(wndPtr->rectWindow.left - wndPtr->rectClient.left, wndPtr->rectWindow.top - wndPtr->rectClient.top, wndPtr->rectClient.right - wndPtr->rectClient.left, @@ -646,7 +673,7 @@ INT16 ExcludeUpdateRgn( HDC32 hdc, HWND32 hwnd ) DeleteObject32( hrgn ); return ret; } - return GetClipBox16(hdc, &rect); + return GetClipBox32( hdc, &rect ); } diff --git a/windows/property.c b/windows/property.c index 07625582d4e..ab6daf48ab0 100644 --- a/windows/property.c +++ b/windows/property.c @@ -4,7 +4,6 @@ * Copyright 1995, 1996 Alexandre Julliard */ -#define NO_TRANSITION_TYPES /* This file is Win32-clean */ #include #include "win.h" #include "heap.h" diff --git a/windows/queue.c b/windows/queue.c index dc99aed8c70..a74945c0e58 100644 --- a/windows/queue.c +++ b/windows/queue.c @@ -328,7 +328,7 @@ void QUEUE_ReceiveMessage( MESSAGEQUEUE *queue ) dprintf_msg(stddeb, "\trcm: calling wndproc - %04x %04x %04x %08x\n", senderQ->hWnd, senderQ->msg, senderQ->wParam, (unsigned)senderQ->lParam ); - if (IsWindow( senderQ->hWnd )) + if (IsWindow32( senderQ->hWnd )) { DWORD extraInfo = queue->GetMessageExtraInfoVal; queue->GetMessageExtraInfoVal = senderQ->GetMessageExtraInfoVal; @@ -342,7 +342,7 @@ void QUEUE_ReceiveMessage( MESSAGEQUEUE *queue ) else dprintf_msg(stddeb,"\trcm: bad hWnd\n"); /* Return the result to the sender task */ - ReplyMessage( result ); + ReplyMessage16( result ); queue->InSendMessageHandle = prevSender; queue->smResultCurrent = prevCtrlPtr; @@ -488,7 +488,7 @@ void QUEUE_RemoveMsg( MESSAGEQUEUE * msgQueue, int pos ) * * Wake a queue upon reception of a hardware event. */ -static void QUEUE_WakeSomeone( UINT message ) +static void QUEUE_WakeSomeone( UINT32 message ) { WND* wndPtr = NULL; WORD wakeBit; @@ -763,9 +763,9 @@ BOOL32 SetMessageQueue32( INT32 size ) /*********************************************************************** - * GetQueueStatus (USER.334) + * GetQueueStatus16 (USER.334) */ -DWORD GetQueueStatus( UINT flags ) +DWORD GetQueueStatus16( UINT16 flags ) { MESSAGEQUEUE *queue; DWORD ret; diff --git a/windows/scroll.c b/windows/scroll.c index 682b438f983..85371bfaf91 100644 --- a/windows/scroll.c +++ b/windows/scroll.c @@ -7,7 +7,6 @@ * */ -#define NO_TRANSITION_TYPES /* This file is Win32-clean */ #include #include "windows.h" #include "class.h" @@ -113,7 +112,7 @@ BOOL32 ScrollWindow32( HWND32 hwnd, INT32 dx, INT32 dy, const RECT32 *rect, POINT32 pt; GetCaretPos32(&pt); pt.x += dx; pt.y += dy; - SetCaretPos(pt.x, pt.y); + SetCaretPos32(pt.x, pt.y); ShowCaret32(hCaretWnd); } return TRUE; @@ -204,8 +203,8 @@ BOOL32 ScrollDC32( HDC32 hdc, INT32 dx, INT32 dy, const RECT32 *rc, /* change device clipping region directly */ CombineRgn32( hrgnScrollClip, hrgnClip, 0, RGN_COPY ); - SetRectRgn( hrgnClip, rDClip.left, rDClip.top, - rDClip.right, rDClip.bottom ); + SetRectRgn32( hrgnClip, rDClip.left, rDClip.top, + rDClip.right, rDClip.bottom ); CLIPPING_UpdateGCRegion( dc ); } @@ -246,8 +245,8 @@ BOOL32 ScrollDC32( HDC32 hdc, INT32 dx, INT32 dy, const RECT32 *rc, { CombineRgn32( hrgnClip, hrgnScrollClip, 0, RGN_COPY ); CLIPPING_UpdateGCRegion( dc ); - SetRectRgn( hrgnScrollClip, rDClip.left, rDClip.top, - rDClip.right, rDClip.bottom ); + SetRectRgn32( hrgnScrollClip, rDClip.left, rDClip.top, + rDClip.right, rDClip.bottom ); } else SelectClipRgn32( hdc, 0 ); @@ -273,7 +272,7 @@ BOOL32 ScrollDC32( HDC32 hdc, INT32 dx, INT32 dy, const RECT32 *rc, if (dx > 0) rect.right = rect.left + dx; else if (dx < 0) rect.left = rect.right + dx; else SetRectEmpty32( &rect ); - SetRectRgn( hrgn, rect.left, rect.top, rect.right, rect.bottom ); + SetRectRgn32( hrgn, rect.left, rect.top, rect.right, rect.bottom ); rect = rDClip; /* horizontal band */ if (dy > 0) rect.bottom = rect.top + dy; @@ -449,7 +448,7 @@ rect?rect->left:0, rect?rect->top:0, rect ?rect->right:0, rect ?rect->bottom:0, if( bCaret ) { - SetCaretPos( rc.left + dx, rc.top + dy ); + SetCaretPos32( rc.left + dx, rc.top + dy ); ShowCaret32(0); } diff --git a/windows/sysmetrics.c b/windows/sysmetrics.c index 8bbfb5e2ccd..d63753d38db 100644 --- a/windows/sysmetrics.c +++ b/windows/sysmetrics.c @@ -3,10 +3,9 @@ * * Copyright 1994 Alexandre Julliard * -static char Copyright[] = "Copyright Alexandre Julliard, 1994"; -*/ + */ -#include +#include #include "gdi.h" #include "sysmetrics.h" @@ -62,7 +61,48 @@ void SYSMETRICS_Init(void) sysMetrics[SM_MENUDROPALIGNMENT] = GetProfileInt32A( "windows","MenuDropAlignment", 0 ); sysMetrics[SM_PENWINDOWS] = 0; sysMetrics[SM_DBCSENABLED] = 0; + /* Win32 additions */ + sysMetrics[SM_CMOUSEBUTTONS] = 3; /* FIXME: query X on that one */ + sysMetrics[SM_SECURE] = 0; + sysMetrics[SM_CXEDGE] = SYSMETRICS_CXBORDER; + sysMetrics[SM_CYEDGE] = SYSMETRICS_CYBORDER; + sysMetrics[SM_CXMINSPACING] = SYSMETRICS_CYBORDER; + +/* +SM_CXEDGE 45 +SM_CYEDGE 46 +SM_CXMINSPACING 47 +SM_CYMINSPACING 48 +SM_CXSMICON 49 +SM_CYSMICON 50 +SM_CYSMCAPTION 51 +SM_CXSMSIZE 52 +SM_CYSMSIZE 53 +SM_CXMENUSIZE 54 +SM_CYMENUSIZE 55 +SM_ARRANGE 56 +SM_CXMINIMIZED 57 +SM_CYMINIMIZED 58 +SM_CXMAXTRACK 59 +SM_CYMAXTRACK 60 +SM_CXMAXIMIZED 61 +SM_CYMAXIMIZED 62 + */ + sysMetrics[SM_NETWORK] = 1; + sysMetrics[SM_CLEANBOOT] = 0; /* 0 - ok, 1 - failsafe, 2 - failsafe & net */ + /* +SM_CXDRAG 68 +SM_CYDRAG 69 + */ + sysMetrics[SM_SHOWSOUNDS] = 1; + /* +SM_CXMENUCHECK 71 +SM_CYMENUCHECK 72 + */ + sysMetrics[SM_SLOWMACHINE] = 0; /* FIXME: perhaps decide on type of proc */ + sysMetrics[SM_MIDEASTENABLED] = 0; /* FIXME: 1 if enabled */ sysMetrics[SM_CMETRICS] = SM_CMETRICS; + } diff --git a/windows/timer.c b/windows/timer.c index 4f4ef67a11a..93f856307eb 100644 --- a/windows/timer.c +++ b/windows/timer.c @@ -4,7 +4,6 @@ * Copyright 1993 Alexandre Julliard */ -#define NO_TRANSITION_TYPES /* This file is Win32-clean */ #include "windows.h" #include "queue.h" #include "winproc.h" diff --git a/windows/win.c b/windows/win.c index da44073e07b..d273b2bbe5d 100644 --- a/windows/win.c +++ b/windows/win.c @@ -277,7 +277,7 @@ void WIN_SendParentNotify(HWND32 hwnd, WORD event, WORD idChild, LPARAM lValue) { LPPOINT16 lppt = (LPPOINT16)&lValue; WND *wndPtr = WIN_FindWndPtr( hwnd ); - BOOL bMouse = ((event <= WM_MOUSELAST) && (event >= WM_MOUSEFIRST)); + BOOL32 bMouse = ((event <= WM_MOUSELAST) && (event >= WM_MOUSEFIRST)); /* if lValue contains cursor coordinates they have to be * mapped to the client area of parent window */ @@ -483,7 +483,7 @@ static HWND32 WIN_CreateWindowEx( CREATESTRUCT32A *cs, ATOM classAtom, if (cs->hwndParent) { /* Make sure parent is valid */ - if (!IsWindow( cs->hwndParent )) + if (!IsWindow32( cs->hwndParent )) { fprintf( stderr, "CreateWindowEx: bad parent %04x\n", cs->hwndParent ); return 0; @@ -715,7 +715,7 @@ static HWND32 WIN_CreateWindowEx( CREATESTRUCT32A *cs, ATOM classAtom, } if (cs->hMenu) SetMenu32( hwnd, cs->hMenu ); } - else wndPtr->wIDmenu = (UINT)cs->hMenu; + else wndPtr->wIDmenu = (UINT32)cs->hMenu; /* Send the WM_CREATE message * Perhaps we shouldn't allow width/height changes as well. @@ -746,7 +746,7 @@ static HWND32 WIN_CreateWindowEx( CREATESTRUCT32A *cs, ATOM classAtom, } WIN_SendParentNotify( hwnd, WM_CREATE, wndPtr->wIDmenu, (LPARAM)hwnd ); - if (!IsWindow(hwnd)) return 0; + if (!IsWindow32(hwnd)) return 0; /* Show the window, maximizing or minimizing if needed */ @@ -948,12 +948,12 @@ static void WIN_SendDestroyMsg( WND* pWnd ) WIN_CheckFocus(pWnd); - if( CARET_GetHwnd() == pWnd->hwndSelf ) DestroyCaret(); + if( CARET_GetHwnd() == pWnd->hwndSelf ) DestroyCaret32(); if( !pWnd->window ) CLIPBOARD_DisOwn( pWnd ); SendMessage32A( pWnd->hwndSelf, WM_DESTROY, 0, 0); - if( !IsWindow(pWnd->hwndSelf) ) + if( !IsWindow32(pWnd->hwndSelf) ) { dprintf_win(stddeb,"\tdestroyed itself while in WM_DESTROY!\n"); return; @@ -1003,7 +1003,7 @@ BOOL32 DestroyWindow32( HWND32 hwnd ) if( !QUEUE_IsDoomedQueue(wndPtr->hmemTaskQ) ) WIN_SendParentNotify( hwnd, WM_DESTROY, wndPtr->wIDmenu, (LPARAM)hwnd ); - if( !IsWindow(hwnd) ) return TRUE; + if (!IsWindow32(hwnd)) return TRUE; if( wndPtr->window ) CLIPBOARD_DisOwn( wndPtr ); /* before window is unmapped */ @@ -1014,7 +1014,7 @@ BOOL32 DestroyWindow32( HWND32 hwnd ) SetWindowPos32( hwnd, 0, 0, 0, 0, 0, SWP_HIDEWINDOW | SWP_NOACTIVATE|SWP_NOZORDER|SWP_NOMOVE|SWP_NOSIZE| ((QUEUE_IsDoomedQueue(wndPtr->hmemTaskQ))?SWP_DEFERERASE:0) ); - if( !IsWindow(hwnd) ) return TRUE; + if (!IsWindow32(hwnd)) return TRUE; } /* Recursively destroy owned windows */ @@ -1048,7 +1048,7 @@ BOOL32 DestroyWindow32( HWND32 hwnd ) /* Send destroy messages */ WIN_SendDestroyMsg( wndPtr ); - if( !IsWindow(hwnd) ) return TRUE; + if (!IsWindow32(hwnd)) return TRUE; /* Unlink now so we won't bother with the children later on */ @@ -1357,9 +1357,18 @@ BOOL32 IsWindowUnicode( HWND32 hwnd ) /********************************************************************** - * GetWindowWord (USER.133) (USER32.313) + * GetWindowWord16 (USER.133) */ -WORD GetWindowWord( HWND32 hwnd, INT32 offset ) +WORD GetWindowWord16( HWND16 hwnd, INT16 offset ) +{ + return GetWindowWord32( hwnd, offset ); +} + + +/********************************************************************** + * GetWindowWord32 (USER32.313) + */ +WORD GetWindowWord32( HWND32 hwnd, INT32 offset ) { WND * wndPtr = WIN_FindWndPtr( hwnd ); if (!wndPtr) return 0; @@ -1396,9 +1405,18 @@ HINSTANCE16 WIN_GetWindowInstance( HWND32 hwnd ) /********************************************************************** - * SetWindowWord (USER.134) (USER32.523) + * SetWindowWord16 (USER.134) */ -WORD SetWindowWord( HWND32 hwnd, INT32 offset, WORD newval ) +WORD SetWindowWord16( HWND16 hwnd, INT16 offset, WORD newval ) +{ + return SetWindowWord32( hwnd, offset, newval ); +} + + +/********************************************************************** + * SetWindowWord32 (USER32.523) + */ +WORD SetWindowWord32( HWND32 hwnd, INT32 offset, WORD newval ) { WORD *ptr, retval; WND * wndPtr = WIN_FindWndPtr( hwnd ); @@ -1499,7 +1517,7 @@ static LONG WIN_SetWindowLong( HWND32 hwnd, INT32 offset, LONG newval, { case GWL_ID: case GWL_HINSTANCE: - return SetWindowWord( hwnd, offset, (WORD)newval ); + return SetWindowWord32( hwnd, offset, (WORD)newval ); case GWL_WNDPROC: retval = (LONG)WINPROC_GetProc( wndPtr->winproc, type ); WINPROC_SetProc( &wndPtr->winproc, (WNDPROC16)newval, type ); @@ -1660,10 +1678,20 @@ INT32 GetWindowTextLength32W( HWND32 hwnd ) return SendMessage32W( hwnd, WM_GETTEXTLENGTH, 0, 0 ); } + /******************************************************************* - * IsWindow (USER.47) (USER32.347) + * IsWindow16 (USER.47) */ -BOOL16 IsWindow( HWND32 hwnd ) +BOOL16 IsWindow16( HWND16 hwnd ) +{ + return IsWindow32( hwnd ); +} + + +/******************************************************************* + * IsWindow32 (USER32.347) + */ +BOOL32 IsWindow32( HWND32 hwnd ) { WND * wndPtr = WIN_FindWndPtr( hwnd ); return ((wndPtr != NULL) && (wndPtr->dwMagic == WND_MAGIC)); @@ -1730,7 +1758,7 @@ HWND32 SetParent32( HWND32 hwndChild, HWND32 hwndNewParent ) if (hwndNewParent) wndPtr->parent = pWndParent; WIN_LinkWindow(hwndChild, HWND_BOTTOM); - if (IsWindowVisible32(hwndChild)) UpdateWindow(hwndChild); + if (IsWindowVisible32(hwndChild)) UpdateWindow32(hwndChild); return oldParent; } @@ -1981,7 +2009,7 @@ BOOL16 EnumWindows16( WNDENUMPROC16 lpEnumFunc, LPARAM lParam ) for (ppWnd = list; *ppWnd; ppWnd++) { /* Make sure that the window still exists */ - if (!IsWindow((*ppWnd)->hwndSelf)) continue; + if (!IsWindow32((*ppWnd)->hwndSelf)) continue; if (!lpEnumFunc( (*ppWnd)->hwndSelf, lParam )) break; } HeapFree( SystemHeap, 0, list ); @@ -2016,7 +2044,7 @@ BOOL16 EnumTaskWindows16( HTASK16 hTask, WNDENUMPROC16 func, LPARAM lParam ) for (ppWnd = list; *ppWnd; ppWnd++) { /* Make sure that the window still exists */ - if (!IsWindow((*ppWnd)->hwndSelf)) continue; + if (!IsWindow32((*ppWnd)->hwndSelf)) continue; if ((*ppWnd)->hmemTaskQ != hQueue) continue; /* Check the queue */ if (!func( (*ppWnd)->hwndSelf, lParam )) break; } @@ -2050,7 +2078,7 @@ static BOOL16 WIN_EnumChildWindows( WND **ppWnd, WNDENUMPROC16 func, while (*ppWnd) { /* Make sure that the window still exists */ - if (!IsWindow((*ppWnd)->hwndSelf)) continue; + if (!IsWindow32((*ppWnd)->hwndSelf)) continue; /* Build children list first */ if (!(childList = WIN_BuildWinArray( *ppWnd ))) return FALSE; if (!func( (*ppWnd)->hwndSelf, lParam )) return FALSE; @@ -2306,11 +2334,10 @@ BOOL32 DragDetect32( HWND32 hWnd, POINT32 pt ) } /****************************************************************************** - * DragObject ( USER.464 ) - * + * DragObject16 (USER.464) */ -DWORD DragObject(HWND16 hwndScope, HWND16 hWnd, WORD wObj, HANDLE16 hOfStruct, - WORD szList , HCURSOR16 hCursor) +DWORD DragObject16( HWND16 hwndScope, HWND16 hWnd, UINT16 wObj, + HANDLE16 hOfStruct, WORD szList, HCURSOR16 hCursor ) { MSG16 msg; LPDRAGINFO lpDragInfo; diff --git a/windows/winpos.c b/windows/winpos.c index d8029818d92..876e65b40b8 100644 --- a/windows/winpos.c +++ b/windows/winpos.c @@ -5,7 +5,6 @@ * 1995,1996 Alex Korobka */ -#define NO_TRANSITION_TYPES #include #include #include @@ -778,7 +777,7 @@ BOOL32 ShowWindow32( HWND32 hwnd, INT32 cmd ) if (showFlag != wasVisible) { SendMessage16( hwnd, WM_SHOWWINDOW, showFlag, 0 ); - if (!IsWindow( hwnd )) return wasVisible; + if (!IsWindow32( hwnd )) return wasVisible; } if ((wndPtr->dwStyle & WS_CHILD) && @@ -795,7 +794,7 @@ BOOL32 ShowWindow32( HWND32 hwnd, INT32 cmd ) if (wndPtr->dwStyle & WS_CHILD) swpflags |= SWP_NOACTIVATE | SWP_NOZORDER; SetWindowPos32( hwnd, HWND_TOP, x, y, cx, cy, swpflags ); - if (!IsWindow( hwnd )) return wasVisible; + if (!IsWindow32( hwnd )) return wasVisible; } if (wndPtr->flags & WIN_NEED_SIZE) @@ -1026,7 +1025,7 @@ BOOL32 WINPOS_SetActiveWindow( HWND32 hWnd, BOOL32 fMouse, BOOL32 fChangeFocus) } /* set prev active wnd to current active wnd and send notification */ - if ((hwndPrevActive = hwndActive) && IsWindow(hwndPrevActive)) + if ((hwndPrevActive = hwndActive) && IsWindow32(hwndPrevActive)) { if (!SendMessage16( hwndPrevActive, WM_NCACTIVATE, FALSE, 0 )) { @@ -1076,7 +1075,7 @@ BOOL32 WINPOS_SetActiveWindow( HWND32 hWnd, BOOL32 fMouse, BOOL32 fChangeFocus) if( wndTemp != wndPtr ) SetWindowPos32(hWnd, HWND_TOP, 0,0,0,0, SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE ); - if( !IsWindow(hWnd) ) return 0; + if (!IsWindow32(hWnd)) return 0; } hNewActiveQueue = wndPtr ? wndPtr->hmemTaskQ : 0; @@ -1090,7 +1089,7 @@ BOOL32 WINPOS_SetActiveWindow( HWND32 hWnd, BOOL32 fMouse, BOOL32 fChangeFocus) { for (ppWnd = list; *ppWnd; ppWnd++) { - if (!IsWindow( (*ppWnd)->hwndSelf )) continue; + if (!IsWindow32( (*ppWnd)->hwndSelf )) continue; if ((*ppWnd)->hmemTaskQ == hOldActiveQueue) SendMessage16( (*ppWnd)->hwndSelf, WM_ACTIVATEAPP, @@ -1106,7 +1105,7 @@ BOOL32 WINPOS_SetActiveWindow( HWND32 hWnd, BOOL32 fMouse, BOOL32 fChangeFocus) { for (ppWnd = list; *ppWnd; ppWnd++) { - if (!IsWindow( (*ppWnd)->hwndSelf )) continue; + if (!IsWindow32( (*ppWnd)->hwndSelf )) continue; if ((*ppWnd)->hmemTaskQ == hNewActiveQueue) SendMessage16( (*ppWnd)->hwndSelf, WM_ACTIVATEAPP, @@ -1114,7 +1113,7 @@ BOOL32 WINPOS_SetActiveWindow( HWND32 hWnd, BOOL32 fMouse, BOOL32 fChangeFocus) } HeapFree( SystemHeap, 0, list ); } - if (!IsWindow(hWnd)) return 0; + if (!IsWindow32(hWnd)) return 0; } if (hWnd) @@ -1136,7 +1135,7 @@ BOOL32 WINPOS_SetActiveWindow( HWND32 hWnd, BOOL32 fMouse, BOOL32 fChangeFocus) MAKELPARAM( (HWND16)hwndPrevActive, wIconized) ); #endif - if( !IsWindow(hWnd) ) return 0; + if( !IsWindow32(hWnd) ) return 0; } /* change focus if possible */ @@ -1519,7 +1518,8 @@ static UINT32 WINPOS_SizeMoveClean(WND* Wnd, HRGN32 oldVisRgn, LPRECT16 lpOldWnd width = lpOldClientRect->right - xfrom; height = lpOldClientRect->bottom - yfrom; updateRgn = CreateRectRgn32( 0, 0, width, height ); CombineRgn32( newVisRgn, newVisRgn, updateRgn, RGN_AND ); - SetRectRgn( updateRgn, 0, 0, Wnd->rectClient.right - xto, Wnd->rectClient.bottom - yto ); + SetRectRgn32( updateRgn, 0, 0, Wnd->rectClient.right - xto, + Wnd->rectClient.bottom - yto ); } else { @@ -1997,13 +1997,13 @@ BOOL32 SetWindowPos32( HWND32 hwnd, HWND32 hwndInsertAfter, INT32 x, INT32 y, /* Revert focus to parent */ SetFocus32( GetParent32(winpos->hwnd) ); } - if (hwnd == CARET_GetHwnd()) DestroyCaret(); + if (hwnd == CARET_GetHwnd()) DestroyCaret32(); if (winpos->hwnd == hwndActive) { /* Activate previously active window if possible */ HWND32 newActive = hwndPrevActive; - if (!IsWindow(newActive) || (newActive == winpos->hwnd)) + if (!IsWindow32(newActive) || (newActive == winpos->hwnd)) { newActive = GetTopWindow32( GetDesktopWindow32() ); if (newActive == winpos->hwnd) diff --git a/windows/winproc.c b/windows/winproc.c index e8946ee1810..d7a196ad196 100644 --- a/windows/winproc.c +++ b/windows/winproc.c @@ -235,6 +235,7 @@ static WINDOWPROC *WINPROC_AllocWinProc( WNDPROC16 func, WINDOWPROCTYPE type ) */ WNDPROC16 WINPROC_GetProc( HWINDOWPROC proc, WINDOWPROCTYPE type ) { + if (!proc) return NULL; if (type == WIN_PROC_16) /* We want a 16:16 address */ { if (((WINDOWPROC *)proc)->type == WIN_PROC_16) diff --git a/wine.man b/wine.man index 6445a31d50c..fa20fd4c419 100644 --- a/wine.man +++ b/wine.man @@ -109,7 +109,7 @@ Start as an icon .I -language xx Set the language to .I xx -(one of En, Es, De, No, Fr, Fi, Da, Cz, Eo, It, Ko, Hu) +(one of En, Es, De, No, Fr, Fi, Da, Cz, Eo, It, Ko, Hu, Pl) .TP .I -managed Create each top-level window as a properly managed X window