Release 970305
Sun Mar 2 14:57:37 1997 Alexandre Julliard <julliard@lrc.epfl.ch>
* [*/*]
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 <zmikolaj@free.polbox.pl>
* [misc/ole2nls.c] [resources/sysres_Pl.c]
Added Polish language support.
Sat Mar 1 13:31:25 1997 David Faure <david.faure@ifhamy.insa-lyon.fr>
* [windows/keyboard.c]
Wrote VkKeyScan and tested with Winword. Works ok except for dead
chars.
Fri Feb 28 09:34:03 1997 John Harvey <john@division.co.uk>
* [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 <msmeissn@cip.informatik.uni-erlangen.de>
* [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 <iivonen@cc.helsinki.fi>
* [documentation/languages]
The fourth case updated.
* [if1632/ntdll.spec]
Added some is* and to* functions.
Sat Feb 22 23:05:47 1997 Morten Welinder <terra@diku.dk>
* [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 <srtxg@chanae.stben.be>
* [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 <h.davies1@physics.oxford.ac.uk>
* [controls/edit.c]
Fix incorrect arg order in LOCAL_Alloc() call.
Fri Feb 21 18:19:17 1997 Andrew Taylor <andrew@riscan.com>
* [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 <jching@aloha.com>
* [debugger/dbg.y]
Do not dereference invalid expressions.
diff --git a/ANNOUNCE b/ANNOUNCE
index 10dc576..1c03369 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 @@
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 2b492bf..3a722b6 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,104 @@
----------------------------------------------------------------------
+Sun Mar 2 14:57:37 1997 Alexandre Julliard <julliard@lrc.epfl.ch>
+
+ * [*/*]
+ 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 <zmikolaj@free.polbox.pl>
+
+ * [misc/ole2nls.c] [resources/sysres_Pl.c]
+ Added Polish language support.
+
+Sat Mar 1 13:31:25 1997 David Faure <david.faure@ifhamy.insa-lyon.fr>
+
+ * [windows/keyboard.c]
+ Wrote VkKeyScan and tested with Winword. Works ok except for dead
+ chars.
+
+Fri Feb 28 09:34:03 1997 John Harvey <john@division.co.uk>
+
+ * [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 <msmeissn@cip.informatik.uni-erlangen.de>
+
+ * [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 <iivonen@cc.helsinki.fi>
+
+ * [documentation/languages]
+ The fourth case updated.
+
+ * [if1632/ntdll.spec]
+ Added some is* and to* functions.
+
+Sat Feb 22 23:05:47 1997 Morten Welinder <terra@diku.dk>
+
+ * [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 <srtxg@chanae.stben.be>
+
+ * [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 <h.davies1@physics.oxford.ac.uk>
+
+ * [controls/edit.c]
+ Fix incorrect arg order in LOCAL_Alloc() call.
+
+Fri Feb 21 18:19:17 1997 Andrew Taylor <andrew@riscan.com>
+
+ * [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 <jching@aloha.com>
+
+ * [debugger/dbg.y]
+ Do not dereference invalid expressions.
+
+----------------------------------------------------------------------
Sat Feb 15 11:59:17 1997 Alexandre Julliard <julliard@lrc.epfl.ch>
* [*/*]
diff --git a/configure b/configure
index 13740b5..9ff371b 100755
--- a/configure
+++ b/configure
@@ -2043,7 +2043,7 @@
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 18f803c..185a464 100644
--- a/configure.in
+++ b/configure.in
@@ -104,7 +104,7 @@
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 92759b7..2058887 100644
--- a/controls/button.c
+++ b/controls/button.c
@@ -303,9 +303,9 @@
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 @@
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 @@
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 @@
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 @@
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 72aca44..f8fccf8 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 @@
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 @@
/***********************************************************************
* CBCheckSize
*/
-static BOOL CBCheckSize(HWND16 hwnd)
+static BOOL32 CBCheckSize(HWND16 hwnd)
{
LPHEADCOMBO lphc = ComboGetStorageHeader(hwnd);
LPHEADLIST lphl = ComboGetListHeader(hwnd);
@@ -711,7 +711,7 @@
}
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 @@
/***********************************************************************
* 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 @@
/***********************************************************************
* CBLCheckSize
*/
-static BOOL CBLCheckSize(HWND16 hwnd)
+static BOOL32 CBLCheckSize(HWND16 hwnd)
{
LPHEADCOMBO lphc = ComboGetStorageHeader(hwnd);
LPHEADLIST lphl = ComboGetListHeader(hwnd);
@@ -1218,7 +1218,7 @@
/***********************************************************************
* 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 db876a8..2466ea7 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 <stdio.h>
#include <string.h>
#include <unistd.h>
@@ -91,8 +90,8 @@
(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 @@
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 8e7b59f..3187698 100644
--- a/controls/edit.c
+++ b/controls/edit.c
@@ -13,8 +13,6 @@
*
*/
-
-#define NO_TRANSITION_TYPES /* This file is Win32-clean */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -1778,9 +1776,10 @@
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 @@
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 @@
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 @@
}
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 @@
GlobalUnlock16(hdst);
OpenClipboard32(wndPtr->hwndSelf);
EmptyClipboard32();
- SetClipboardData(CF_TEXT, hdst);
+ SetClipboardData16(CF_TEXT, hdst);
CloseClipboard32();
return -1;
}
@@ -3530,7 +3530,7 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 db00116..57afcf4 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 <string.h>
#include <stdio.h>
#include "windows.h"
@@ -470,16 +469,16 @@
}
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 @@
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 @@
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 6f0c071..29d073c 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 <ctype.h>
#include <stdlib.h>
#include <stdio.h>
@@ -600,18 +599,18 @@
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 @@
/* 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 @@
{
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 @@
? 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 @@
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 87e6a5a..cbecfd9 100644
--- a/controls/oldlbox.c
+++ b/controls/oldlbox.c
@@ -66,7 +66,7 @@
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 @@
}
-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 @@
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 @@
}
if (itemState != 0) {
- SetTextColor(hdc, dwOldTextColor);
+ SetTextColor32(hdc, dwOldTextColor);
}
SetBkMode32(hdc, OldBkMode);
@@ -303,7 +303,7 @@
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 @@
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 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 ListBoxGetText(LPHEADLIST lphl, UINT uIndex, LPSTR OutStr)
+int ListBoxGetText(LPHEADLIST lphl, UINT16 uIndex, LPSTR OutStr)
{
LPLISTSTRUCT lpls;
@@ -498,7 +498,7 @@
}
-DWORD ListBoxGetItemData(LPHEADLIST lphl, UINT uIndex)
+DWORD ListBoxGetItemData(LPHEADLIST lphl, UINT16 uIndex)
{
LPLISTSTRUCT lpls;
@@ -508,7 +508,7 @@
}
-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 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 @@
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 @@
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 @@
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 @@
/* ------------------------- 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 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 14c3f40..819ff5d 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 <stdlib.h>
#include <stdio.h>
#include <sys/types.h>
diff --git a/controls/static.c b/controls/static.c
index 9842f06..77e6c55 100644
--- a/controls/static.c
+++ b/controls/static.c
@@ -67,7 +67,8 @@
/***********************************************************************
* 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 @@
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 @@
if (LOWORD(lParam))
{
InvalidateRect32( hWnd, NULL, FALSE );
- UpdateWindow( hWnd );
+ UpdateWindow32( hWnd );
}
break;
@@ -168,7 +169,7 @@
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 17c4372..feef96c 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 <stdio.h>
#include <stdlib.h>
#include "windows.h"
diff --git a/controls/widgets.c b/controls/widgets.c
index 0d5e219..ffc2a23 100644
--- a/controls/widgets.c
+++ b/controls/widgets.c
@@ -94,7 +94,7 @@
*
* 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 3f5d49d..2ab72d1 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 b87291a..0f0b9fb 100644
--- a/debugger/dbg.y
+++ b/debugger/dbg.y
@@ -49,7 +49,7 @@
%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 <string> tPATH
%token <string> tIDENTIFIER tSTRING
@@ -145,6 +145,7 @@
| 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 @@
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_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 d33b4c0..1322df6 100644
--- a/debugger/debug.l
+++ b/debugger/debug.l
@@ -112,7 +112,8 @@
<INITIAL>frame|fram|fra|fr { BEGIN(NOCMD); return tFRAME; }
<INITIAL>list|lis|li|l { BEGIN(PATH_EXPECTED); return tLIST; }
<INITIAL>enable|enabl|enab|ena { BEGIN(NOCMD); return tENABLE;}
-<INITIAL>disable|disabl|disab|disa|dis { BEGIN(NOCMD); return tDISABLE; }
+<INITIAL>disable|disabl|disab|disa|dis { BEGIN(NOCMD); return tDISABLE; }
+<INITIAL>disassemble|disassembl|disassemb|disassem|disasse|disass|disas { BEGIN(NOCMD); return tDISASSEMBLE; }
<INITIAL,INFO_CMD,DEL_CMD>display|displa|displ|disp { BEGIN(FORMAT_EXPECTED); return tDISPLAY; }
<INITIAL>undisplay|undispla|undispl|undisp|undis|undi|und { BEGIN(NOCMD); return tUNDISPLAY; }
<INITIAL>delete|delet|dele|del { BEGIN(DEL_CMD); return tDELETE; }
diff --git a/debugger/display.c b/debugger/display.c
index fd7e8c6..b3ac40d 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 <stdarg.h>
diff --git a/debugger/expr.c b/debugger/expr.c
index 6968c06..1735eda 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 dd5b76a..10ffc97 100644
--- a/debugger/info.c
+++ b/debugger/info.c
@@ -121,7 +121,7 @@
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 [*<addr>] delete break bpnum",
" disable bpnum enable bpnum",
@@ -134,10 +134,11 @@
" x <addr> print <expr>",
" set <reg> = <expr> set *<addr> = <expr>",
" up down",
-" list <lines> frame <n>",
-" finish show dir",
-" dir <path> display <expr>",
-" delete display <disnum> undisplay <disnum>\n",
+" list <lines> disassemble [<addr>][,<addr>]",
+" frame <n> finish",
+" show dir dir <path>",
+" display <expr> undisplay <disnum>",
+" delete display <disnum>\n",
"Wine-specific commands:",
" mode [16,32] walk [wnd,class,queue] <handle>",
diff --git a/debugger/source.c b/debugger/source.c
index d9c6412..2e3f073 100644
--- a/debugger/source.c
+++ b/debugger/source.c
@@ -426,6 +426,94 @@
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<offset;i++)
+ if (!_disassemble(&last)) break;
+ memcpy(&DEBUG_LastDisassemble,&last,sizeof(last));
+ return;
+ }
+ last = start;
+ if (!xend) {
+ for (i=0;i<offset;i++)
+ if (!_disassemble(&last)) break;
+ memcpy(&DEBUG_LastDisassemble,&last,sizeof(last));
+ return;
+ }
+ while (last.off <= end.off)
+ if (!_disassemble(&last)) break;
+ memcpy(&DEBUG_LastDisassemble,&last,sizeof(last));
+ return;
+}
+
#if 0
diff --git a/documentation/debugging b/documentation/debugging
index 4b8bead..51bd0fc 100644
--- a/documentation/debugging
+++ b/documentation/debugging
@@ -8,7 +8,8 @@
|Unexpected Windows program segfault - opcode = 8b
|Segmentation fault in Windows program 1b7:c41.
-|Reading symbols from file /root/wine/wine.sym
+|Loading symbols from ELF file /root/wine/wine...
+|....more Loading symbols from ...
|In 16 bit mode.
|Register dump:
| CS:01b7 SS:016f DS:0287 ES:0000
@@ -22,14 +23,14 @@
|
|0050: sel=0287 base=40211d30 limit=0b93f (bytes) 16-bit rw-
|Backtrace:
-|0 0x01b7:0x0c41 (PXSRV.FONGETFACENAME+0x7c)
-|1 0x01b7:0x1e5b (PXSRV.FONPUTCATFONT+0x2cd)
+|0 0x01b7:0x0c41 (PXSRV_FONGETFACENAME+0x7c)
+|1 0x01b7:0x1e5b (PXSRV_FONPUTCATFONT+0x2cd)
|2 0x01a7:0x05aa
-|3 0x01b7:0x0768 (PXSRV.FONINITFONTS+0x81)
-|4 0x014f:0x03ed (PDOXWIN.@SQLCURCB$Q6CBTYPEULN8CBSCTYPE+0x1b1)
+|3 0x01b7:0x0768 (PXSRV_FONINITFONTS+0x81)
+|4 0x014f:0x03ed (PDOXWIN_@SQLCURCB$Q6CBTYPEULN8CBSCTYPE+0x1b1)
|5 0x013f:0x00ac
|
-|0x01b7:0x0c41 (PXSRV.FONGETFACENAME+0x7c): movw %es:0x38(%bx),%dx
+|0x01b7:0x0c41 (PXSRV_FONGETFACENAME+0x7c): movw %es:0x38(%bx),%dx
Steps to debug a crash. You may stop at any step, but please report the bug
and provide as much of the information gathered to the newsgroup or the
@@ -67,23 +68,12 @@
3. If you have found a misbehaving function, try to find out why it
misbehaves. Find the function in the source code. Try to make sense of
the arguments passed. Usually there is a
- "dprintf_xyz(stddeb,"Fnction(...)"...);" at the beginning of the
+ "dprintf_xyz(stddeb,"Function(...)"...);" at the beginning of the
function. Rerun wine with "-debugmsg +xyz,+relay" added to the
commandline.
- 4. If the crash happened in a function in WINE, find out the exact line using
- gdb (the sample crash has another reason):
-|... somewhere in the backtrace ...
-|5 0x080e5ad8 (CreateWindowEx32A+0xd8)
-|...
-|$ gdb wine
-|...
-|(gdb) l *0x080e5ad8
-|0x80e5ad8 is in CreateWindowEx32A (win.c:837).
-|...
-|837 return WIN_CreateWindowEx( &cs, classAtom, FALSE );
-|...
-
+ 4. Additional information on how to debug using the internal debugger can be
+ found in debugger/README.
5. If those information isn't clear enough or if you want to know more about
what's happening in the function itself, try running wine with "-debugmsg
@@ -96,7 +86,7 @@
7. You can also set a breakpoint for that function. Start wine with the
"-debug" option added to the commandline. After loading the executable
- wine will enter the internal debugger. Use "break KERNEL.LSTRLEN"
+ wine will enter the internal debugger. Use "break KERNEL_LSTRLEN"
(replace by function you want to debug, CASE IS RELEVANT.) to set a
breakpoint. Then use "continue" to start normal program-execution. Wine
will stop if it reaches the breakpoint. If the program isn't yet at the
@@ -123,10 +113,9 @@
Since the failure happens usually directly before setting up the Messagebox
you can start wine with "-debug" added to the commandline, set a breakpoint
- at "USER.MESSAGEBOX" (win16 programs) "USER32.MessageBox" (win32 Programs)
- and proceed with "continue". With "-debugmsg +all" Wine will now stop
- directly directly before setting up the Messagebox. Proceed as explained
- above.
+ at "MessageBox32A" (called by win16 and win32 programs) and proceed with
+ "continue". With "-debugmsg +all" Wine will now stop directly directly
+ before setting up the Messagebox. Proceed as explained above.
Disassembling programs:
@@ -187,12 +176,12 @@
|Call WPROCS.24: TASK_RESCHEDULE() ret=003f:0759 ds=0000
|Ret WPROCS.24: TASK_RESCHEDULE() retval=0x0000 ret=003f:0759 ds=08a7
|CallTo16(func=0157:001a,ds=08a7,0x11d7,0x0000,0x0000,0x3cb4,0x1f40,0x0000,0x0000,0x08a7)
-|Reading symbols from file /root/wine/wine.sym
-|Stopped on breakpoint 1 at 0x0157:0x001a
+|Loading symbols from ELF file /home/marcus/wine/wine...
+|...more Loading symbols ...
+|Stopped on breakpoint 1 at 0x0157:0x001a (WPROCS_VXD_PAGEFILE+0xffffeeea)
|In 16 bit mode.
-|0x0157:0x001a: xorw %bp,%bp
-|Wine-dbg> 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 @@
^
| -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 @@
|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 <msmeissn@cip.informatik.uni-erlangen.de>,
diff --git a/documentation/languages b/documentation/languages
index 71f2d6b..ef4aa6d 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 @@
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 4a2735e..788ae6d 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 8b04493..dabebf8 100644
--- a/files/drive.c
+++ b/files/drive.c
@@ -582,7 +582,7 @@
*/
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 9e8a042..15b6b1a 100644
--- a/files/file.c
+++ b/files/file.c
@@ -15,6 +15,7 @@
#include <sys/errno.h>
#include <sys/types.h>
#include <sys/stat.h>
+#include <sys/mman.h>
#include <time.h>
#include <unistd.h>
#include <utime.h>
@@ -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 @@
*
* 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 @@
*/
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 @@
* 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 @@
*
* 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 @@
*/
int FILE_GetUnixHandle( HFILE32 hFile )
{
- DOS_FILE *file;
+ FILE_OBJECT *file;
int ret;
if (!(file = FILE_GetFile( hFile ))) return -1;
@@ -183,7 +178,7 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
*/
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_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 @@
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 @@
"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 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 @@
*/
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 _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 @@
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 @@
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 @@
{
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 _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 @@
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 @@
*/
BOOL32 FlushFileBuffers( HFILE32 hFile )
{
- DOS_FILE *file;
+ FILE_OBJECT *file;
BOOL32 ret;
dprintf_file( stddeb, "FlushFileBuffers(%d)\n", hFile );
@@ -1077,7 +1073,7 @@
*/
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 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 );
@@ -1155,11 +1151,48 @@
/***********************************************************************
+ * 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 @@
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 5339596..ddb1129 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 ff538f2..b0cd835 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 ad71b99..0c408ad 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 @@
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 6edc8df..678ed90 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 @@
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 3a9b742..fec0eb0 100644
--- a/graphics/win16drv/init.c
+++ b/graphics/win16drv/init.c
@@ -75,7 +75,7 @@
NULL, /* pScaleViewportExtEx */
NULL, /* pScaleWindowExtEx */
NULL, /* pSelectClipRgn */
- NULL, /* pSelectObject */
+ WIN16DRV_SelectObject, /* pSelectObject */
NULL, /* pSelectPalette */
NULL, /* pSetBkColor */
NULL, /* pSetBkMode */
@@ -690,8 +690,7 @@
/* 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 @@
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 @@
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 @@
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 0000000..c865790
--- /dev/null
+++ b/graphics/win16drv/objects.c
@@ -0,0 +1,53 @@
+/*
+ * GDI objects
+ *
+ * Copyright 1993 Alexandre Julliard
+ */
+
+#include <stdlib.h>
+#include <stdio.h>
+#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 9001dad..daa860c 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 d0cc825..b302248 100644
--- a/graphics/x11drv/bitmap.c
+++ b/graphics/x11drv/bitmap.c
@@ -56,7 +56,8 @@
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 3f16ec4..140ca75 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 3a4386c..44b86ee 100644
--- a/if1632/builtin.c
+++ b/if1632/builtin.c
@@ -187,14 +187,14 @@
/* 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 @@
/* 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 af8dc31..71da3bc 100644
--- a/if1632/gdi.spec
+++ b/if1632/gdi.spec
@@ -2,7 +2,7 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 dd65603..90b502c 100644
--- a/if1632/gdi32.spec
+++ b/if1632/gdi32.spec
@@ -4,9 +4,9 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 75faa9b..422e68e 100644
--- a/if1632/kernel.spec
+++ b/if1632/kernel.spec
@@ -41,7 +41,7 @@
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 @@
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 @@
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 @@
#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 2c51b8f..f8281ee 100644
--- a/if1632/kernel32.spec
+++ b/if1632/kernel32.spec
@@ -278,10 +278,10 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 6ec752c..482ff50 100644
--- a/if1632/mmsystem.spec
+++ b/if1632/mmsystem.spec
@@ -5,7 +5,7 @@
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 @@
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 2208e91..7ac608f 100644
--- a/if1632/ntdll.spec
+++ b/if1632/ntdll.spec
@@ -892,15 +892,15 @@
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 @@
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 49b2b2f..1fb5bc3 100644
--- a/if1632/ole2nls.spec
+++ b/if1632/ole2nls.spec
@@ -7,7 +7,7 @@
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 75b4eb8..045bb16 100644
--- a/if1632/relay.c
+++ b/if1632/relay.c
@@ -190,15 +190,28 @@
* (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 @@
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 c9c907d..eaf6ec9 100644
--- a/if1632/shell.spec
+++ b/if1632/shell.spec
@@ -12,11 +12,11 @@
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 b7c65f7..bef7073 100644
--- a/if1632/shell32.spec
+++ b/if1632/shell32.spec
@@ -86,7 +86,7 @@
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 1d33e67..f566103 100644
--- a/if1632/thunk.c
+++ b/if1632/thunk.c
@@ -148,7 +148,7 @@
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 @@
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 @@
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 @@
);
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 1bff1ca..564e790 100644
--- a/if1632/user.spec
+++ b/if1632/user.spec
@@ -47,7 +47,7 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 20ac214..71f7f0b 100644
--- a/if1632/user32.spec
+++ b/if1632/user32.spec
@@ -67,7 +67,7 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 3bd8cff..0000000
--- 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 9dcf165..7ef5fb2 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 @@
#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 @@
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 34f3bcf..d0070df 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 64511e5..82fe86c 100644
--- a/include/combo.h
+++ b/include/combo.h
@@ -17,5 +17,5 @@
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 1761991..4e85561 100644
--- a/include/commdlg.h
+++ b/include/commdlg.h
@@ -62,8 +62,8 @@
SEGPTR lpstrInitialDir;
SEGPTR lpstrTitle;
DWORD Flags;
- UINT nFileOffset;
- UINT nFileExtension;
+ UINT16 nFileOffset;
+ UINT16 nFileExtension;
SEGPTR lpstrDefExt;
LPARAM lCustData;
WNDPROC16 lpfnHook;
@@ -101,8 +101,8 @@
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 @@
/* 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 @@
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 @@
#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 @@
#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 cf00d28..12cd82d 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 84697cf..e8a7ab1 100644
--- a/include/dde_proc.h
+++ b/include/dde_proc.h
@@ -51,9 +51,9 @@
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 7dc0330..32bd72c 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 @@
#else
0,
#endif
+#ifdef DEBUG_VIRTUAL
+ 1,
+#else
+ 0,
+#endif
#ifdef DEBUG_VXD
1,
#else
@@ -1497,8 +1504,21 @@
#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 @@
#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 @@
#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 @@
#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 @@
#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 @@
"timer",
"toolhelp",
"ver",
+ "virtual",
"vxd",
"win",
"win16drv",
diff --git a/include/debugger.h b/include/debugger.h
index 1a1f02a..a6670ce 100644
--- a/include/debugger.h
+++ b/include/debugger.h
@@ -307,6 +307,7 @@
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 16ee0e2..3eb7b7d 100644
--- a/include/driver.h
+++ b/include/driver.h
@@ -54,7 +54,7 @@
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 a2bd376..bb33157 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_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 12456ad..528fd66 100644
--- a/include/font.h
+++ b/include/font.h
@@ -24,26 +24,6 @@
#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 7699eed..9fa3021 100644
--- a/include/handle32.h
+++ b/include/handle32.h
@@ -42,5 +42,8 @@
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 6014a3b..addeb84 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 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 d3f97ad..27cee05 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 @@
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 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 ee6171f..0ad2700 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 4f96014..56bc611 100644
--- a/include/mmsystem.h
+++ b/include/mmsystem.h
@@ -19,7 +19,7 @@
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 @@
#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 @@
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 @@
#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 @@
#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 @@
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 @@
#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 @@
#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 @@
#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 @@
#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 @@
#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 @@
#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 @@
( (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 {
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 @@
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 {
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 {
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 @@
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 {
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 {
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 {
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 @@
} 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 @@
#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 953cdfb..872b498 100644
--- a/include/module.h
+++ b/include/module.h
@@ -137,7 +137,7 @@
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 fdff577..0692ee0 100644
--- a/include/ole.h
+++ b/include/ole.h
@@ -139,13 +139,13 @@
} 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 _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 @@
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 @@
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 @@
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 421f3e6..3f051d6 100644
--- a/include/options.h
+++ b/include/options.h
@@ -23,7 +23,8 @@
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 c75450c..d60affc 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 673a2f5..cbb00ee 100644
--- a/include/selectors.h
+++ b/include/selectors.h
@@ -18,38 +18,24 @@
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 c664cc4..45a8fff 100644
--- a/include/static.h
+++ b/include/static.h
@@ -17,6 +17,7 @@
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 d09f25d..46c012c 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 0d1ef93..86f718c 100644
--- a/include/stress.h
+++ b/include/stress.h
@@ -11,16 +11,16 @@
#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 dbebe81..fbf21a8 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 @@
FARPROC16 lpfnErrorAddr;
void **lpBadParam;
} NFYLOGPARAMERROR;
+
+#pragma pack(4)
+
#endif /* __WINE_TOOLHELP_H */
diff --git a/include/w32sys.h b/include/w32sys.h
index 6388b6c..94c8d29 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 c6d7349..6b2c8a8 100644
--- a/include/win16drv.h
+++ b/include/win16drv.h
@@ -161,4 +161,7 @@
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 45ce754..ed071eb 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 3bc9505..6448f63 100644
--- a/include/windows.h
+++ b/include/windows.h
@@ -1426,6 +1426,45 @@
#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 @@
/* 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 @@
#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 @@
#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(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 @@
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 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 @@
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 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 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 @@
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 @@
/* 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 @@
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 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 @@
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 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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
#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 @@
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 @@
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 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 @@
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 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 @@
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 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 @@
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 28cc005..75716bf 100644
--- a/include/winerror.h
+++ b/include/winerror.h
@@ -21,6 +21,7 @@
#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 @@
#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 0dfe7a3..ed813b7 100644
--- a/include/winsock.h
+++ b/include/winsock.h
@@ -499,7 +499,7 @@
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 c6b69ab..05d3869 100644
--- a/include/wintypes.h
+++ b/include/wintypes.h
@@ -168,6 +168,13 @@
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 59d8942..2f72bc3 100644
--- a/ipc/dde_proc.c
+++ b/ipc/dde_proc.c
@@ -148,7 +148,7 @@
}
/* wait for dde - acknowledge message - or timout */
-static BOOL get_ack()
+static BOOL32 get_ack()
{
struct timeval timeout;
int size;
@@ -186,7 +186,7 @@
}
/* 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 @@
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 @@
}
}
-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 @@
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 @@
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 df0449b..98d4e17 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 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 @@
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 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 @@
/********** 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 @@
*/
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 @@
}
-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_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 6bd296f..daa3409 100644
--- a/ipc/generic_hash.h
+++ b/ipc/generic_hash.h
@@ -48,7 +48,7 @@
/* 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 @@
(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 @@
* 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 ebe155d..cc5bd3a 100644
--- a/library/libres.c
+++ b/library/libres.c
@@ -58,7 +58,7 @@
typeid=atoi(type+1);
else
{
- WINELIB_UNIMP("LIBRES_FindResource16(*,*,type=string)");
+ fprintf(stderr,"LIBRES_FindResource16(*,*,type=string)");
return 0;
}
}
@@ -112,7 +112,7 @@
}
else
{
- WINELIB_UNIMP("LIBRES_FindResource32(*,*,type=string)");
+ fprintf(stderr,"LIBRES_FindResource32(*,*,type=string)");
return 0;
}
}
@@ -154,7 +154,7 @@
/**********************************************************************
* LIBRES_FreeResource
*/
-BOOL LIBRES_FreeResource( HGLOBAL32 handle )
+BOOL32 LIBRES_FreeResource( HGLOBAL32 handle )
{
return 0; /* Obsolete in Win32 */
}
@@ -165,7 +165,7 @@
*/
INT32 LIBRES_AccessResource( HINSTANCE32 hModule, HRSRC32 hRsrc )
{
- WINELIB_UNIMP("LIBRES_AccessResource()");
+ fprintf(stderr,"LIBRES_AccessResource()");
return -1; /* Obsolete in Win32 */
}
@@ -184,7 +184,7 @@
*/
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 e6177ee..0b021da 100644
--- a/library/miscstubs.c
+++ b/library/miscstubs.c
@@ -45,18 +45,18 @@
}
}
-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 64854d6..8fd8b5d 100644
--- a/loader/main.c
+++ b/loader/main.c
@@ -60,10 +60,14 @@
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 4f4c1e4..b247489 100644
--- a/loader/module.c
+++ b/loader/module.c
@@ -848,7 +848,7 @@
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 @@
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 @@
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 @@
/**********************************************************************
- * 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 @@
/**********************************************************************
- * GetModuleHandle (KERNEL.47)
+ * GetModuleHandle16 (KERNEL.47)
*/
HMODULE16 WIN16_GetModuleHandle( SEGPTR name )
{
@@ -1296,7 +1296,7 @@
return MODULE_FindModule( PTR_SEG_TO_LIN(name) );
}
-HMODULE16 GetModuleHandle( LPCSTR name )
+HMODULE16 GetModuleHandle16( LPCSTR name )
{
return MODULE_FindModule( name );
}
@@ -1410,9 +1410,9 @@
/***********************************************************************
- * 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 @@
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 @@
{
p = filename + strlen(filename);
strcpy( p, ".exe" );
- handle = LoadModule( filename, ¶ms );
+ handle = LoadModule16( filename, ¶ms );
*p = '\0'; /* Remove extension */
}
}
@@ -1675,7 +1675,7 @@
*/
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 9bbdf21..f81cf82 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 @@
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 @@
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 @@
*/
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 @@
p += (sel == 0xff) ? 6 : 3;
}
}
-#endif
}
@@ -452,12 +445,11 @@
*
* 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 @@
(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 @@
}
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 59d15cb..24cf3e9 100644
--- a/loader/pe_image.c
+++ b/loader/pe_image.c
@@ -406,9 +406,9 @@
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 @@
[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 @@
}
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 08655d0..2d2bbaf 100644
--- a/loader/pe_resource.c
+++ b/loader/pe_resource.c
@@ -11,6 +11,7 @@
* Copyright 1997 Marcus Meissner
*/
+#include <stdlib.h>
#include <sys/types.h>
#include "wintypes.h"
#include "windows.h"
@@ -54,7 +55,12 @@
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 d2f50fe..37dc9c1 100644
--- a/loader/resource.c
+++ b/loader/resource.c
@@ -111,9 +111,15 @@
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 e1fba1f..17739ec 100644
--- a/loader/signal.c
+++ b/loader/signal.c
@@ -48,6 +48,21 @@
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 @@
*
* 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 @@
*
* 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 @@
*
* 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 @@
*
* 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 @@
*
* 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 d9a666f..38e6028 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 @@
*
* 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 @@
#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 @@
* 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 @@
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 @@
(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 @@
/***********************************************************************
- * 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 d473cd0..0214f91 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 @@
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 3b15549..1a5c12e 100644
--- a/memory/global.c
+++ b/memory/global.c
@@ -604,7 +604,7 @@
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 494b115..75e5adc 100644
--- a/memory/heap.c
+++ b/memory/heap.c
@@ -266,12 +266,12 @@
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 @@
/* 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 @@
{
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 bbb25c6..1da0768 100644
--- a/memory/selector.c
+++ b/memory/selector.c
@@ -7,6 +7,7 @@
#include <string.h>
#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 0000000..0cc397a
--- /dev/null
+++ b/memory/virtual.c
@@ -0,0 +1,976 @@
+/*
+ * Win32 virtual memory functions
+ *
+ * Copyright 1997 Alexandre Julliard
+ */
+
+#include <assert.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/mman.h>
+#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 bc64aac..9282a44 100644
--- a/misc/clipboard.c
+++ b/misc/clipboard.c
@@ -45,7 +45,7 @@
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 @@
/**************************************************************************
* CLIPBOARD_RequestXSelection
*/
-BOOL CLIPBOARD_RequestXSelection()
+BOOL32 CLIPBOARD_RequestXSelection()
{
HWND32 hWnd = (hWndClipWindow) ? hWndClipWindow : GetActiveWindow32();
@@ -184,13 +184,13 @@
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 @@
/**************************************************************************
- * 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 @@
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_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 @@
}
/**************************************************************************
- * GetClipboardData [USER.142]
+ * GetClipboardData16 (USER.142)
*/
-HANDLE16 GetClipboardData(WORD wFormat)
+HANDLE16 GetClipboardData16( UINT16 wFormat )
{
LPCLIPFORMAT lpRender = ClipFormats;
LPCLIPFORMAT lpUpdate = NULL;
@@ -486,6 +497,15 @@
/**************************************************************************
+ * GetClipboardData32 (USER32.221)
+ */
+HANDLE32 GetClipboardData32( UINT32 wFormat )
+{
+ fprintf( stderr, "GetClipboardData32: empty stub\n" );
+ return 0;
+}
+
+/**************************************************************************
* CountClipboardFormats16 (USER.143)
*/
INT16 CountClipboardFormats16(void)
@@ -644,14 +664,23 @@
}
/**************************************************************************
- * 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,14 +694,25 @@
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)
*/
HWND16 SetClipboardViewer16( HWND16 hWnd )
@@ -714,7 +754,7 @@
/**************************************************************************
- * ChangeClipboardChain [USER.149]
+ * ChangeClipboardChain16 (USER.149)
*/
BOOL16 ChangeClipboardChain16(HWND16 hWnd, HWND16 hWndNext)
{
@@ -722,7 +762,7 @@
}
/**************************************************************************
- * ChangeClipboardChain [USER32.21]
+ * ChangeClipboardChain32 (USER32.21)
*/
BOOL32 ChangeClipboardChain32(HWND32 hWnd, HWND32 hWndNext)
{
@@ -785,13 +825,23 @@
/**************************************************************************
- * 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 7ebe94c..07ced79 100644
--- a/misc/commdlg.c
+++ b/misc/commdlg.c
@@ -32,9 +32,9 @@
/***********************************************************************
* 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 @@
/***********************************************************************
* GetOpenFileName (COMMDLG.1)
*/
-BOOL GetOpenFileName( SEGPTR ofn )
+BOOL16 GetOpenFileName( SEGPTR ofn )
{
HINSTANCE16 hInst;
HANDLE16 hDlgTmpl = 0, hResInfo;
@@ -114,7 +114,7 @@
/***********************************************************************
* GetSaveFileName (COMMDLG.2)
*/
-BOOL GetSaveFileName( SEGPTR ofn)
+BOOL16 GetSaveFileName( SEGPTR ofn)
{
HINSTANCE16 hInst;
HANDLE16 hDlgTmpl = 0;
@@ -193,7 +193,7 @@
/***********************************************************************
* 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 @@
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 @@
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 @@
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 @@
}
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 @@
/***********************************************************************
* 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 @@
/***********************************************************************
* 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 @@
/***********************************************************************
* 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 @@
/***********************************************************************
* 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 @@
/***********************************************************************
* 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 @@
/***********************************************************************
* 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 @@
/***********************************************************************
* 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 @@
/***********************************************************************
* 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 @@
/***********************************************************************
* 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 @@
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 @@
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 @@
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 @@
/***********************************************************************
* 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 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 @@
/***********************************************************************
* 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 @@
/***********************************************************************
* 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 @@
/***********************************************************************
* 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 @@
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 @@
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 @@
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 c535ffd..4eb0880 100644
--- a/misc/driver.c
+++ b/misc/driver.c
@@ -110,7 +110,7 @@
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 @@
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 a42827c..d742fc1 100644
--- a/misc/escape.c
+++ b/misc/escape.c
@@ -4,7 +4,6 @@
* Copyright 1994 Bob Amstadt
*/
-#define NO_TRANSITION_TYPES
#include <stdio.h>
#include "windows.h"
#include "gdi.h"
diff --git a/misc/exec.c b/misc/exec.c
index 143dfe3..e793f8b 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 <stdlib.h>
#include <stdio.h>
#include <string.h>
@@ -61,7 +60,7 @@
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 @@
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 735a59e..29c60ee 100644
--- a/misc/lstr.c
+++ b/misc/lstr.c
@@ -127,9 +127,9 @@
/***********************************************************************
- * 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 );
@@ -145,6 +145,28 @@
/***********************************************************************
+ * 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)
*/
LPSTR CharNext32A( LPCSTR ptr )
@@ -544,6 +566,10 @@
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 @@
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 a149b2d..48d67e4 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 <stdlib.h>
#include <stdio.h>
#include <string.h>
diff --git a/misc/main.c b/misc/main.c
index 1687226..96a915a 100644
--- a/misc/main.c
+++ b/misc/main.c
@@ -70,6 +70,7 @@
{"It",0x0410}, /* LANG_It */
{"Ko",0x0412}, /* LANG_Ko */
{"Hu",0x0436}, /* LANG_Hu */
+ {"Pl",0x0415}, /* LANG_Pl */
{NULL,0}
};
@@ -162,7 +163,7 @@
" -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 @@
*/
#ifdef DEBUG_RUNTIME
-BOOL ParseDebugOptions(char *options)
+BOOL32 ParseDebugOptions(char *options)
{
int l;
if (strlen(options)<3)
@@ -811,14 +812,14 @@
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 @@
/***********************************************************************
- * 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 @@
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 @@
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 @@
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 @@
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 156db53..5c1eace 100644
--- a/misc/network.c
+++ b/misc/network.c
@@ -154,7 +154,7 @@
* WNetGetConnection [USER.512]
*/
int WNetGetConnection(LPSTR lpLocalName,
- LPSTR lpRemoteName, UINT *cbRemoteName)
+ LPSTR lpRemoteName, UINT16 *cbRemoteName)
{
const char *path;
@@ -210,7 +210,7 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 f9d8985..a83b049 100644
--- a/misc/ntdll.c
+++ b/misc/ntdll.c
@@ -369,6 +369,15 @@
}
/**************************************************************************
+ * RtlInitUnicodeString [NTDLL]
+ */
+VOID
+RtlFreeUnicodeString(LPUNICODE_STRING str) {
+ if (str->Buffer)
+ HeapFree(GetProcessHeap(),0,str);
+}
+
+/**************************************************************************
* RtlUnicodeToOemN [NTDLL]
*/
DWORD /* NTSTATUS */
diff --git a/misc/ole2nls.c b/misc/ole2nls.c
index 6cb3b1d..ebbd70d 100644
--- a/misc/ole2nls.c
+++ b/misc/ole2nls.c
@@ -5,6 +5,7 @@
*/
#include <string.h>
+#include <ctype.h>
#include <malloc.h>
#include "windows.h"
#include "heap.h"
@@ -150,7 +151,7 @@
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 @@
}
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 @@
/***********************************************************************
* 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 @@
}
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<cchSrc;i++) {
+ chartype[i] = 0;
+ if (isdigit(src[i])) chartype[i]|=C1_DIGIT;
+ if (isalpha(src[i])) chartype[i]|=C1_ALPHA;
+ if (islower(src[i])) chartype[i]|=C1_LOWER;
+ if (isupper(src[i])) chartype[i]|=C1_UPPER;
+ if (isspace(src[i])) chartype[i]|=C1_SPACE;
+ if (ispunct(src[i])) chartype[i]|=C1_PUNCT;
+ if (iscntrl(src[i])) chartype[i]|=C1_CNTRL;
+ if (isblank(src[i])) chartype[i]|=C1_BLANK;
+ /* C1_XDIGIT */
+ }
+ return TRUE;
+}
+
+/***********************************************************************
+ * GetStringTypeW (KERNEL32.279)
+ * Yes, this is missing LCID locale. MS fault.
+ */
+BOOL32
+GetStringType32W(DWORD dwInfoType,LPCWSTR src,INT32 cchSrc,LPWORD chartype) {
+ return GetStringTypeEx32W(0/*defaultlocale*/,dwInfoType,src,cchSrc,chartype);
+}
+
+/***********************************************************************
+ * GetStringTypeW (KERNEL32.278)
+ * FIXME: unicode chars are assumed chars
+ */
+BOOL32
+GetStringTypeEx32W(LCID locale,DWORD dwInfoType,LPCWSTR src,INT32 cchSrc,LPWORD chartype) {
+ int i;
+
+ switch (dwInfoType) {
+ case CT_CTYPE2:
+ fprintf(stderr,"GetStringType32W:CT_CTYPE2 not supported.\n");
+ return FALSE;
+ case CT_CTYPE3:
+ fprintf(stderr,"GetStringType32W:CT_CTYPE3 not supported.\n");
+ return FALSE;
+ default:break;
+ }
+ if (cchSrc==-1)
+ cchSrc=lstrlen32W(src);
+ for (i=0;i<cchSrc;i++) {
+ chartype[i] = 0;
+ if (isdigit(src[i])) chartype[i]|=C1_DIGIT;
+ if (isalpha(src[i])) chartype[i]|=C1_ALPHA;
+ if (islower(src[i])) chartype[i]|=C1_LOWER;
+ if (isupper(src[i])) chartype[i]|=C1_UPPER;
+ if (isspace(src[i])) chartype[i]|=C1_SPACE;
+ if (ispunct(src[i])) chartype[i]|=C1_PUNCT;
+ if (iscntrl(src[i])) chartype[i]|=C1_CNTRL;
+ if (isblank(src[i])) chartype[i]|=C1_BLANK;
+ /* C1_XDIGIT */
+ }
+ return TRUE;
+}
diff --git a/misc/olecli.c b/misc/olecli.c
index 441f7b4..2c7ab88 100644
--- a/misc/olecli.c
+++ b/misc/olecli.c
@@ -47,7 +47,7 @@
/***********************************************************************
* OleIsDcMeta
*/
-BOOL OleIsDcMeta(HDC16 hdc)
+BOOL16 OleIsDcMeta(HDC16 hdc)
{
dprintf_ole(stddeb,"OleIsDCMeta(%04x)\n",hdc);
return GDI_GetObjPtr( hdc, METAFILE_DC_MAGIC ) != 0;
diff --git a/misc/olesvr.c b/misc/olesvr.c
index 490ab48..b9e41ff 100644
--- a/misc/olesvr.c
+++ b/misc/olesvr.c
@@ -39,7 +39,7 @@
/***********************************************************************
* OleUnblockServer
*/
-OLESTATUS OleUnblockServer(LHSERVER hServer, BOOL *block)
+OLESTATUS OleUnblockServer(LHSERVER hServer, BOOL16 *block)
{
fprintf(stdnimp,"OleUnblockServer:%ld\n",hServer);
/* no more blocked messages :) */
diff --git a/misc/shell.c b/misc/shell.c
index 7a1bce9..f97f53a 100644
--- a/misc/shell.c
+++ b/misc/shell.c
@@ -47,13 +47,13 @@
#pragma pack(4)
-extern HGLOBAL16 CURSORICON_LoadHandler( HGLOBAL16, HINSTANCE16, BOOL);
+extern HGLOBAL16 CURSORICON_LoadHandler( HGLOBAL16, HINSTANCE16, BOOL32);
extern WORD GetIconID( HGLOBAL16 hResource, DWORD resType );
/*************************************************************************
* DragAcceptFiles [SHELL.9]
*/
-void DragAcceptFiles(HWND16 hWnd, BOOL b)
+void DragAcceptFiles(HWND16 hWnd, BOOL16 b)
{
WND* wnd = WIN_FindWndPtr(hWnd);
@@ -66,7 +66,7 @@
/*************************************************************************
* DragQueryFile [SHELL.11]
*/
-UINT DragQueryFile(HDROP16 hDrop, WORD wFile, LPSTR lpszFile, WORD wLength)
+UINT16 DragQueryFile(HDROP16 hDrop, WORD wFile, LPSTR lpszFile, WORD wLength)
{
/* hDrop is a global memory block allocated with GMEM_SHARE
* with DROPFILESTRUCT as a header and filenames following
@@ -116,7 +116,7 @@
/*************************************************************************
* DragQueryPoint [SHELL.13]
*/
-BOOL DragQueryPoint(HDROP16 hDrop, POINT16 *p)
+BOOL16 DragQueryPoint(HDROP16 hDrop, POINT16 *p)
{
LPDROPFILESTRUCT lpDropFileStruct;
BOOL16 bRet;
@@ -281,11 +281,11 @@
}
/*************************************************************************
- * ShellExecute [SHELL.20]
+ * ShellExecute16 [SHELL.20]
*/
-HINSTANCE16 ShellExecute(HWND16 hWnd, LPCSTR lpOperation, LPCSTR lpFile,
- LPSTR lpParameters, LPCSTR lpDirectory,
- INT iShowCmd)
+HINSTANCE16 ShellExecute16( HWND16 hWnd, LPCSTR lpOperation, LPCSTR lpFile,
+ LPCSTR lpParameters, LPCSTR lpDirectory,
+ INT16 iShowCmd )
{
HINSTANCE16 retval=31;
char cmd[256];
@@ -316,10 +316,24 @@
return WinExec32(cmd,iShowCmd);
}
+
/*************************************************************************
- * FindExecutable [SHELL.21]
+ * ShellExecute32A (SHELL32.84)
*/
-HINSTANCE16 FindExecutable(LPCSTR lpFile, LPCSTR lpDirectory, LPSTR lpResult)
+HINSTANCE32 ShellExecute32A( HWND32 hWnd, LPCSTR lpOperation, LPCSTR lpFile,
+ LPCSTR lpParameters, LPCSTR lpDirectory,
+ INT32 iShowCmd )
+{
+ return ShellExecute16( hWnd, lpOperation, lpFile, lpParameters,
+ lpDirectory, iShowCmd );
+}
+
+
+/*************************************************************************
+ * FindExecutable16 (SHELL.21)
+ */
+HINSTANCE16 FindExecutable16( LPCSTR lpFile, LPCSTR lpDirectory,
+ LPSTR lpResult )
{
HINSTANCE16 retval=31; /* default - 'No association was found' */
@@ -578,7 +592,7 @@
*
* This abortion is called directly by Progman
*/
-HGLOBAL16 InternalExtractIcon(HINSTANCE16 hInstance, LPCSTR lpszExeFileName, UINT nIconIndex, WORD n )
+HGLOBAL16 InternalExtractIcon(HINSTANCE16 hInstance, LPCSTR lpszExeFileName, UINT16 nIconIndex, WORD n )
{
HGLOBAL16 hRet = 0;
HGLOBAL16* RetPtr = NULL;
@@ -600,9 +614,9 @@
if( pData )
{
HICON16 hIcon = 0;
- BOOL icoFile = FALSE;
- UINT iconDirCount = 0;
- UINT iconCount = 0;
+ BOOL32 icoFile = FALSE;
+ UINT16 iconDirCount = 0;
+ UINT16 iconCount = 0;
NE_TYPEINFO* pTInfo = (NE_TYPEINFO*)(pData + 2);
NE_NAMEINFO* pIconStorage = NULL;
NE_NAMEINFO* pIconDir = NULL;
@@ -638,10 +652,10 @@
/* load resources and create icons */
if( (pIconStorage && pIconDir) || icoFile )
- if( nIconIndex == (UINT)-1 ) RetPtr[0] = iconDirCount;
+ if( nIconIndex == (UINT16)-1 ) RetPtr[0] = iconDirCount;
else if( nIconIndex < iconDirCount )
{
- UINT i, icon;
+ UINT16 i, icon;
if( n > iconDirCount - nIconIndex ) n = iconDirCount - nIconIndex;
@@ -680,9 +694,10 @@
}
/*************************************************************************
- * 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 @@
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 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 @@
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 @@
*/
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 7b19a34..3216f4a 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 <stdlib.h>
#include <stdio.h>
#include <string.h>
diff --git a/misc/stress.c b/misc/stress.c
index 3223fa7..d800323 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 @@
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 @@
#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 ee60a03..aaeeae5 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 b84cf6c..6652b8a 100644
--- a/misc/winsock.c
+++ b/misc/winsock.c
@@ -360,7 +360,7 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
*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 @@
*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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
notify_client(pws, WS_FD_READ);
return (INT16)length;
}
- pwsi->errno = wsaErrno();
+ pwsi->err = wsaErrno();
}
return SOCKET_ERROR;
}
@@ -744,7 +744,7 @@
}
return highfd;
}
- pwsi->errno = wsaErrno();
+ pwsi->err = wsaErrno();
}
return SOCKET_ERROR;
}
@@ -762,7 +762,7 @@
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 @@
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 @@
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 @@
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 @@
{
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 @@
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 @@
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 @@
if( pnew ) return (SOCKET16)WS_PTR2HANDLE(pnew);
{
close(sock);
- pwsi->errno = WSAENOBUFS;
+ pwsi->err = WSAENOBUFS;
return INVALID_SOCKET;
}
}
@@ -896,8 +896,8 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
}
}
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 @@
WS_FREE(p_aop);
return 0;
}
- else pwsi->errno = WSAEINVAL;
+ else pwsi->err = WSAEINVAL;
return SOCKET_ERROR;
}
@@ -1311,8 +1311,8 @@
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 @@
(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 bdf6334..bdb6713 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 <stdarg.h>
#include <stdio.h>
#include <string.h>
diff --git a/miscemu/Makefile.in b/miscemu/Makefile.in
index 79950ea..d6c0b52 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 1c7682b..c380feb 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 07d781f..ba866a4 100644
--- a/msdos/dosmem.c
+++ b/msdos/dosmem.c
@@ -204,7 +204,8 @@
* - 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 @@
return FALSE;
}
+
/***********************************************************************
* DOSMEM_MapLinearToDos
*
@@ -355,14 +357,13 @@
*/
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 @@
*/
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 @@
*/
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 5096368..4ad248e 100644
--- a/msdos/dpmi.c
+++ b/msdos/dpmi.c
@@ -103,8 +103,8 @@
}
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 79c0d87..37dc6f0 100644
--- a/msdos/int21.c
+++ b/msdos/int21.c
@@ -428,7 +428,7 @@
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 @@
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 9cfd796..d8dbae1 100644
--- a/msdos/int2f.c
+++ b/msdos/int2f.c
@@ -102,7 +102,7 @@
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 5a9b45f..932d1f9 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 <stdio.h>
@@ -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 {
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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
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 @@
}
#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 @@
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 @@
/* 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 @@
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 @@
/**************************************************************************
* 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 @@
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 @@
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 @@
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 @@
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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
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 wodOpen(WORD wDevID, LPWAVEOPENDESC lpDesc, DWORD dwFlags)
{
+ int index = MMSYSTEM_DevIDToIndex(wDevID);
int audio;
int abuf_size;
int smplrate;
@@ -769,7 +777,7 @@
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 @@
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 @@
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 @@
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 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 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 @@
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 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 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 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 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 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 @@
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 widOpen(WORD wDevID, LPWAVEOPENDESC lpDesc, DWORD dwFlags)
{
+ int index = MMSYSTEM_DevIDToIndex(wDevID);
int audio;
int abuf_size;
int smplrate;
@@ -1218,7 +1234,7 @@
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 @@
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 @@
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 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 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 @@
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 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 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 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 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 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 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 @@
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 @@
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 @@
return MMSYSERR_NOTENABLED;
#endif
}
-
-
-#endif /* #ifdef BUILTIN_MMSYSTEM */
diff --git a/multimedia/joystick.c b/multimedia/joystick.c
index ab28190..8bc7deb 100644
--- a/multimedia/joystick.c
+++ b/multimedia/joystick.c
@@ -67,7 +67,7 @@
/**************************************************************************
* 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 e6e84f3..babcf25 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 <stdio.h>
#include <stdlib.h>
#include <unistd.h>
@@ -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 @@
/**************************************************************************
* 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 @@
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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
/* 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 @@
/**************************************************************************
* 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 @@
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 @@
/**************************************************************************
* 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 @@
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 @@
/**************************************************************************
* 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 @@
"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 @@
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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
"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 @@
/**************************************************************************
* 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 @@
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 @@
"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 @@
/*-----------------------------------------------------------------------*/
-
-#endif /* #ifdef BUILTIN_MMSYSTEM */
diff --git a/multimedia/mcicda.c b/multimedia/mcicda.c
index febab84..5c9781d 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 <stdio.h>
#include <stdlib.h>
#include <unistd.h>
@@ -31,6 +25,8 @@
#include <sys/cdio.h>
#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 @@
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 @@
/**************************************************************************
* 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 @@
#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 @@
/**************************************************************************
* 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 @@
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 @@
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 @@
#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 @@
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 @@
/**************************************************************************
* 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 @@
"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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
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 @@
/**************************************************************************
* 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 @@
#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 @@
#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 @@
#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 @@
#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 @@
/**************************************************************************
* 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 @@
/* 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 @@
/**************************************************************************
* 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 @@
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 @@
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 @@
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 @@
/**************************************************************************
* 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 @@
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 @@
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 @@
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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
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 @@
"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 @@
/**************************************************************************
* 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 @@
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 @@
"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 @@
/*-----------------------------------------------------------------------*/
-
-#endif /* #ifdef BUILTIN_MMSYSTEM */
diff --git a/multimedia/mcistring.c b/multimedia/mcistring.c
index 91af08d..f61679c 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 <unistd.h>
#include <stdio.h>
#include <stdlib.h>
@@ -32,6 +30,13 @@
*/
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 @@
/* 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 @@
#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 @@
}
/* 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 @@
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 @@
}
if (!strcmp(keywords[i],"element") && (i+1<nrofkeywords)) {
dwFlags |= MCI_OPEN_ELEMENT;
- pU->openParams.lpstrElementName=SEGPTR_GET(SEGPTR_STRDUP(keywords[i]));
+ pU->openParams.lpstrElementName=SEGPTR_GET(SEGPTR_STRDUP(keywords[i+1]));
i+=2;
continue;
}
@@ -421,7 +427,7 @@
}
_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 @@
* 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 @@
/* 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 @@
free(keywords);free(cmd);
return MCIERR_MISSING_COMMAND_STRING;
}
-#endif
diff --git a/multimedia/midi.c b/multimedia/midi.c
index 5d08d7b..7a52f87 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 <stdio.h>
#include <stdlib.h>
#include <unistd.h>
@@ -30,6 +24,8 @@
#include <machine/soundcard.h>
#endif
+int MMSYSTEM_DevIDToIndex(UINT16);
+
#if defined(linux) || defined(__FreeBSD__)
#define MIDI_DEV "/dev/sequencer"
@@ -65,7 +61,7 @@
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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
}
}
}
- 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 @@
/**************************************************************************
* 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 @@
}
}
}
- 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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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_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 @@
}
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 @@
/**************************************************************************
* 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 @@
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 @@
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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
}
}
#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 @@
/**************************************************************************
* 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 @@
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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 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 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 @@
"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 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 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 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 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 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 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 midStop(WORD wDevID)
{
- dprintf_midi(stddeb, "midStop(%u);\n", wDevID);
+ dprintf_midi(stddeb, "midStop(%04X);\n", wDevID);
return MMSYSERR_NOTENABLED;
}
@@ -976,7 +988,7 @@
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 @@
*/
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 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 @@
"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 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 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 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 @@
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 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 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 modReset(WORD wDevID)
{
- dprintf_midi(stddeb, "modReset(%u);\n", wDevID);
+ dprintf_midi(stddeb, "modReset(%04X);\n", wDevID);
return MMSYSERR_NOTENABLED;
}
@@ -1236,7 +1253,7 @@
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 @@
/*-----------------------------------------------------------------------*/
-
-#endif /* #ifdef BUILTIN_MMSYSTEM */
diff --git a/multimedia/mmaux.c b/multimedia/mmaux.c
index e325fd1..470c78d 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 <stdio.h>
@@ -26,6 +20,8 @@
#include <linux/soundcard.h>
#endif
+int MMSYSTEM_DevIDToIndex(UINT16);
+
#define SOUND_DEV "/dev/dsp"
#define MIXER_DEV "/dev/mixer"
@@ -49,7 +45,7 @@
#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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
}
return MMSYSERR_NOTSUPPORTED;
}
-
-
-#endif /* #ifdef BUILTIN_MMSYSTEM */
diff --git a/multimedia/mmsystem.c b/multimedia/mmsystem.c
index 12337a6..0c232a5 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 <unistd.h>
#include <stdio.h>
#include <stdlib.h>
@@ -16,6 +14,7 @@
#include <fcntl.h>
#include <sys/ioctl.h>
#include "windows.h"
+#include "heap.h"
#include "ldt.h"
#include "user.h"
#include "driver.h"
@@ -35,8 +34,8 @@
*/
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 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 @@
/**************************************************************************
* sndPlaySound [MMSYSTEM.2]
*/
-BOOL sndPlaySound(LPCSTR lpszSoundName, UINT uFlags)
+BOOL16 sndPlaySound(LPCSTR lpszSoundName, UINT16 uFlags)
{
HMMIO16 hmmio;
MMCKINFO mmckInfo;
@@ -89,6 +132,12 @@
}
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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
* 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 @@
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 @@
}
}
}
- 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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
}
+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 @@
/**************************************************************************
* mciGetDeviceIDFromElementID [MMSYSTEM.715]
*/
-UINT mciGetDeviceIDFromElementID(DWORD dwElementID, LPCSTR lpstrType)
+UINT16 mciGetDeviceIDFromElementID(DWORD dwElementID, LPCSTR lpstrType)
{
return 0;
}
@@ -853,7 +955,7 @@
/**************************************************************************
* mciGetYieldProc [MMSYSTEM.716]
*/
-YIELDPROC mciGetYieldProc(UINT uDeviceID, DWORD * lpdwYieldData)
+YIELDPROC mciGetYieldProc(UINT16 uDeviceID, DWORD * lpdwYieldData)
{
return NULL;
}
@@ -861,7 +963,7 @@
/**************************************************************************
* mciGetCreatorTask [MMSYSTEM.717]
*/
-HTASK16 mciGetCreatorTask(UINT uDeviceID)
+HTASK16 mciGetCreatorTask(UINT16 uDeviceID)
{
return 0;
}
@@ -869,9 +971,9 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* midiOutClose [MMSYSTEM.205]
*/
-UINT midiOutClose(HMIDIOUT16 hMidiOut)
+UINT16 midiOutClose(HMIDIOUT16 hMidiOut)
{
LPMIDIOPENDESC lpDesc;
dprintf_mmsys(stddeb, "midiOutClose(%04X)\n", hMidiOut);
@@ -995,8 +1097,8 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* midiOutReset [MMSYSTEM.210]
*/
-UINT midiOutReset(HMIDIOUT16 hMidiOut)
+UINT16 midiOutReset(HMIDIOUT16 hMidiOut)
{
LPMIDIOPENDESC lpDesc;
dprintf_mmsys(stddeb, "midiOutReset(%04X)\n", hMidiOut);
@@ -1064,7 +1166,7 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* midiInClose [MMSYSTEM.305]
*/
-UINT midiInClose(HMIDIIN16 hMidiIn)
+UINT16 midiInClose(HMIDIIN16 hMidiIn)
{
LPMIDIOPENDESC lpDesc;
dprintf_mmsys(stddeb, "midiInClose(%04X)\n", hMidiIn);
@@ -1210,8 +1312,8 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* midiInStart [MMSYSTEM.309]
*/
-UINT midiInStart(HMIDIIN16 hMidiIn)
+UINT16 midiInStart(HMIDIIN16 hMidiIn)
{
dprintf_mmsys(stddeb, "midiInStart\n");
return 0;
@@ -1259,7 +1361,7 @@
/**************************************************************************
* midiInStop [MMSYSTEM.310]
*/
-UINT midiInStop(HMIDIIN16 hMidiIn)
+UINT16 midiInStop(HMIDIIN16 hMidiIn)
{
dprintf_mmsys(stddeb, "midiInStop\n");
return 0;
@@ -1268,7 +1370,7 @@
/**************************************************************************
* midiInReset [MMSYSTEM.311]
*/
-UINT midiInReset(HMIDIIN16 hMidiIn)
+UINT16 midiInReset(HMIDIIN16 hMidiIn)
{
dprintf_mmsys(stddeb, "midiInReset\n");
return 0;
@@ -1277,7 +1379,7 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* waveOutClose [MMSYSTEM.405]
*/
-UINT waveOutClose(HWAVEOUT16 hWaveOut)
+UINT16 waveOutClose(HWAVEOUT16 hWaveOut)
{
LPWAVEOPENDESC lpDesc;
dprintf_mmsys(stddeb, "waveOutClose(%04X)\n", hWaveOut);
@@ -1456,8 +1558,8 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* waveOutPause [MMSYSTEM.409]
*/
-UINT waveOutPause(HWAVEOUT16 hWaveOut)
+UINT16 waveOutPause(HWAVEOUT16 hWaveOut)
{
LPWAVEOPENDESC lpDesc;
dprintf_mmsys(stddeb, "waveOutPause(%04X)\n", hWaveOut);
@@ -1511,7 +1613,7 @@
/**************************************************************************
* waveOutRestart [MMSYSTEM.410]
*/
-UINT waveOutRestart(HWAVEOUT16 hWaveOut)
+UINT16 waveOutRestart(HWAVEOUT16 hWaveOut)
{
LPWAVEOPENDESC lpDesc;
dprintf_mmsys(stddeb, "waveOutRestart(%04X)\n", hWaveOut);
@@ -1523,7 +1625,7 @@
/**************************************************************************
* waveOutReset [MMSYSTEM.411]
*/
-UINT waveOutReset(HWAVEOUT16 hWaveOut)
+UINT16 waveOutReset(HWAVEOUT16 hWaveOut)
{
LPWAVEOPENDESC lpDesc;
dprintf_mmsys(stddeb, "waveOutReset(%04X)\n", hWaveOut);
@@ -1535,7 +1637,7 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* waveInClose [MMSYSTEM.505]
*/
-UINT waveInClose(HWAVEIN16 hWaveIn)
+UINT16 waveInClose(HWAVEIN16 hWaveIn)
{
LPWAVEOPENDESC lpDesc;
dprintf_mmsys(stddeb, "waveInClose(%04X)\n", hWaveIn);
@@ -1749,8 +1851,8 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* waveInStart [MMSYSTEM.509]
*/
-UINT waveInStart(HWAVEIN16 hWaveIn)
+UINT16 waveInStart(HWAVEIN16 hWaveIn)
{
LPWAVEOPENDESC lpDesc;
dprintf_mmsys(stddeb, "waveInStart(%04X)\n", hWaveIn);
@@ -1829,7 +1931,7 @@
/**************************************************************************
* waveInStop [MMSYSTEM.510]
*/
-UINT waveInStop(HWAVEIN16 hWaveIn)
+UINT16 waveInStop(HWAVEIN16 hWaveIn)
{
LPWAVEOPENDESC lpDesc;
dprintf_mmsys(stddeb, "waveInStop(%04X)\n", hWaveIn);
@@ -1842,7 +1944,7 @@
/**************************************************************************
* waveInReset [MMSYSTEM.511]
*/
-UINT waveInReset(HWAVEIN16 hWaveIn)
+UINT16 waveInReset(HWAVEIN16 hWaveIn)
{
LPWAVEOPENDESC lpDesc;
dprintf_mmsys(stddeb, "waveInReset(%04X)\n", hWaveIn);
@@ -1855,7 +1957,7 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 @@
/**************************************************************************
* 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 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 @@
/**************************************************************************
* 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 a6b4795..56e4e45 100644
--- a/multimedia/time.c
+++ b/multimedia/time.c
@@ -4,8 +4,6 @@
* Copyright 1993 Martin Ayotte
*/
-#ifndef WINELIB
-
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -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 @@
StartMMTime();
return 0;
}
-
-#endif /* WINELIB */
diff --git a/objects/bitmap.c b/objects/bitmap.c
index 1d81b16..77147f7 100644
--- a/objects/bitmap.c
+++ b/objects/bitmap.c
@@ -52,13 +52,23 @@
/***********************************************************************
- * 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 @@
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 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 @@
*/
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 @@
/***********************************************************************
- * 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 @@
/***********************************************************************
- * 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 eb8bca2..4a06005 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 <stdlib.h>
#include "brush.h"
#include "bitmap.h"
diff --git a/objects/clipping.c b/objects/clipping.c
index 7ca30a9..e801cb0 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 <stdio.h>
#include "dc.h"
#include "metafile.h"
diff --git a/objects/color.c b/objects/color.c
index 5d1abd9..5b8c761 100644
--- a/objects/color.c
+++ b/objects/color.c
@@ -262,7 +262,7 @@
*
* 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 @@
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 @@
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 62b4823..bdb9f0d 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 <string.h>
#include <stdlib.h>
#include "windows.h"
@@ -367,8 +366,8 @@
/* 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 @@
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 @@
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 889518f..6d31cd8 100644
--- a/objects/dc.c
+++ b/objects/dc.c
@@ -5,11 +5,9 @@
*
*/
-#define NO_TRANSITION_TYPES /* This file is Win32-clean */
#include <stdlib.h>
#include <string.h>
#include "gdi.h"
-#include "bitmap.h"
#include "heap.h"
#include "metafile.h"
#include "stddebug.h"
@@ -185,8 +183,8 @@
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 @@
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 @@
/***********************************************************************
- * 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 @@
/***********************************************************************
- * 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 b90b484..9ea8221 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 d49b091..29aba34 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 <stdio.h>
#include <stdlib.h>
#include <X11/Xlib.h>
@@ -907,8 +906,8 @@
/* 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 edf0266..7912362 100644
--- a/objects/font.c
+++ b/objects/font.c
@@ -202,30 +202,81 @@
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 @@
/***********************************************************************
- * 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 @@
/***********************************************************************
- * 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 @@
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 @@
/*************************************************************************
- * 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 @@
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 d8eccaa..4422ed8 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 <stdlib.h>
#include <stdio.h>
#include "color.h"
diff --git a/objects/linedda.c b/objects/linedda.c
index be9693f..d0cf871 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 <stdlib.h>
#include "windows.h"
diff --git a/objects/metafile.c b/objects/metafile.c
index d5dcf12..64701e9 100644
--- a/objects/metafile.c
+++ b/objects/metafile.c
@@ -217,7 +217,7 @@
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 @@
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 @@
/******************************************************************
- * 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 @@
/******************************************************************
- * 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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
*(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 @@
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 @@
*(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 224f658..6fb8aab 100644
--- a/objects/oembitmap.c
+++ b/objects/oembitmap.c
@@ -5,7 +5,6 @@
*
*/
-#define NO_TRANSITION_TYPES /* This file is Win32-clean */
#include <stdlib.h>
#include <string.h>
#include <X11/Xlib.h>
@@ -482,9 +481,9 @@
}
}
- 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 5c38d23..9faca5f 100644
--- a/objects/palette.c
+++ b/objects/palette.c
@@ -6,7 +6,6 @@
*
*/
-#define NO_TRANSITION_TYPES /* This file is Win32-clean */
#include <stdlib.h>
#include <string.h>
#include <X11/Xlib.h>
@@ -572,10 +571,9 @@
/**********************************************************************
- * UpdateColors (GDI.366)
- *
+ * UpdateColors16 (GDI.366)
*/
-int UpdateColors( HDC16 hDC )
+INT16 UpdateColors16( HDC16 hDC )
{
HWND32 hWnd = WindowFromDC32( hDC );
@@ -587,3 +585,12 @@
return 0x666;
}
+
+/**********************************************************************
+ * UpdateColors32 (GDI32.359)
+ */
+BOOL32 UpdateColors32( HDC32 hDC )
+{
+ UpdateColors16( hDC );
+ return TRUE;
+}
diff --git a/objects/pen.c b/objects/pen.c
index 2cca576..f33b791 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 18e808d..3575132 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 <stdlib.h>
#include <stdio.h>
#include "region.h"
@@ -137,9 +136,20 @@
/***********************************************************************
- * 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 1fcf622..ce7572b 100644
--- a/objects/text.c
+++ b/objects/text.c
@@ -401,10 +401,9 @@
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 @@
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 @@
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 36f04e2..55c6b9e 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 bfca5ce..6b98c8d 100644
--- a/rc/parser.l
+++ b/rc/parser.l
@@ -34,7 +34,7 @@
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 53f6bf5..bbf38fa 100644
--- a/rc/parser.y
+++ b/rc/parser.y
@@ -23,7 +23,7 @@
%token <str> 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 @@
/* 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 e54a75f..09d0d85 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_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 0bc3514..03b41e3 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 @@
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 0000000..1af3dff
--- /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 "Wywietl 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 domylna", 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&ekrelona", 1040, "BUTTON", BS_AUTOCHECKBOX | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 10, 82, 58, 10
+ CONTROL "P&odkrelona", 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 c474d54..ab72caf 100644
--- a/scheduler/process.c
+++ b/scheduler/process.c
@@ -166,13 +166,15 @@
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 @@
return ret;
}
+
/***********************************************************************
* ExpandEnvironmentVariablesA (KERNEL32.103)
*/
diff --git a/scheduler/thread.c b/scheduler/thread.c
index 0b48efe..16f602c 100644
--- a/scheduler/thread.c
+++ b/scheduler/thread.c
@@ -40,6 +40,7 @@
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->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 0116c90..16f7a1e 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 e88e24e..6d9008c 100644
--- a/tools/build.c
+++ b/tools/build.c
@@ -5,8 +5,6 @@
* Copyright 1997 Eric Youngdale
*/
-#ifndef WINELIB
-
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -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 @@
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 @@
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 @@
* 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 @@
{
/* 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 @@
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 @@
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 @@
}
return 0;
}
-
-#endif /* WINELIB */
diff --git a/tools/make_os2.sh b/tools/make_os2.sh
index 7564c5e..1051970 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 9610366..63b2d4a 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 @@
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 @@
}
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 dbdae2a..0a7891a 100644
--- a/win32/Makefile.in
+++ b/win32/Makefile.in
@@ -16,7 +16,6 @@
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 31a92d2..2fe54f2 100644
--- a/win32/advapi.c
+++ b/win32/advapi.c
@@ -8,7 +8,7 @@
#include <unistd.h>
#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 60673db..951874c 100644
--- a/win32/code_page.c
+++ b/win32/code_page.c
@@ -69,14 +69,14 @@
/***********************************************************************
* 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 558b433..63e5fa4 100644
--- a/win32/console.c
+++ b/win32/console.c
@@ -26,7 +26,7 @@
/***********************************************************************
* 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 40a3251..0a22a38 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;i<CURSORICON_count;i++)
@@ -233,9 +234,9 @@
* Load the icon/cursor directory for a given resource name and find the
* best matching entry.
*/
-static BOOL CURSORICON32_LoadDirEntry(HINSTANCE32 hInstance, LPCWSTR name,
+static BOOL32 CURSORICON32_LoadDirEntry(HINSTANCE32 hInstance, LPCWSTR name,
int width, int height, int colors,
- BOOL fCursor, CURSORICONDIRENTRY32 *dirEntry)
+ BOOL32 fCursor, CURSORICONDIRENTRY32 *dirEntry)
{
HANDLE32 hRsrc;
HANDLE32 hMem;
@@ -391,8 +392,8 @@
/* 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( hRes );
@@ -406,7 +407,7 @@
*/
static HGLOBAL32 CURSORICON32_Load( HINSTANCE32 hInstance, LPCWSTR name,
int width, int height, int colors,
- BOOL fCursor )
+ BOOL32 fCursor )
{
HANDLE32 handle;
HANDLE32 hRet;
diff --git a/win32/error.c b/win32/error.c
index b32eca4..62c55bf 100644
--- a/win32/error.c
+++ b/win32/error.c
@@ -19,7 +19,7 @@
* Windows 95. :-)
*/
typedef struct {
- int errno;
+ int err;
DWORD win32err;
} ERRNO_XLAT_TABLE;
@@ -97,9 +97,9 @@
DWORD rc = ERROR_UNKNOWN;
int i = 0;
- while(errno_xlat_table[i].errno != -1)
+ while(errno_xlat_table[i].err != -1)
{
- if(errno_xlat_table[i].errno == errno_num)
+ if(errno_xlat_table[i].err == errno_num)
{
rc = errno_xlat_table[i].win32err;
break;
@@ -115,11 +115,11 @@
int rc = 0; /* no error */
int i = 0;
- while(errno_xlat_table[i].errno != -1)
+ while(errno_xlat_table[i].err != -1)
{
if(errno_xlat_table[i].win32err == lasterror )
{
- rc = errno_xlat_table[i].errno;
+ rc = errno_xlat_table[i].err;
break;
}
i++;
diff --git a/win32/file.c b/win32/file.c
index c059531..98b4ffe 100644
--- a/win32/file.c
+++ b/win32/file.c
@@ -28,106 +28,6 @@
static int TranslateCreationFlags(DWORD create_flags);
static int TranslateAccessFlags(DWORD access_flags);
-int TranslateProtectionFlags(DWORD);
-#ifndef MAP_ANON
-#define MAP_ANON 0
-#endif
-
-typedef struct {
- HFILE32 hfile;
- int prot;
- unsigned long size;
-} FILEMAP_OBJECT;
-
-/***********************************************************************
- * OpenFileMappingA (KERNEL32.397)
- * FIXME: stub
- *
- */
-HANDLE32 OpenFileMapping(DWORD access, BOOL inherit,const char *fname)
-{
- return 0;
-}
-
-
-/***********************************************************************
- * CreateFileMapping32A (KERNEL32.46)
- */
-HANDLE32 CreateFileMapping32A(HANDLE32 h,LPSECURITY_ATTRIBUTES ats,
- DWORD pot, DWORD sh, DWORD hlow, LPCSTR lpName )
-{
- FILEMAP_OBJECT *filemap_obj;
-
- dprintf_win32(stddeb,"CreateFileMapping32A(%08x,%p,%ld,%ld,%ld,%s)\n",
- h,ats,pot,sh,hlow,lpName
- );
- if (sh) {
- SetLastError(ErrnoToLastError(errno));
- return INVALID_HANDLE_VALUE32;
- }
- filemap_obj=(FILEMAP_OBJECT *)HeapAlloc( SystemHeap, 0,
- sizeof(FILEMAP_OBJECT) );
- if(filemap_obj == NULL) {
- SetLastError(ERROR_UNKNOWN);
- return 0;
- }
- if (h==INVALID_HANDLE_VALUE32)
- h=_lcreat32(lpName,1);/*FIXME*/
-
- filemap_obj->hfile = 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 @@
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 18e14ef..6372a41 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 @@
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 93919c3..bcb0565 100644
--- a/win32/k32obj.c
+++ b/win32/k32obj.c
@@ -5,6 +5,7 @@
*/
#include <assert.h>
+#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_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 8cb1ae5..0000000
--- a/win32/memory.c
+++ /dev/null
@@ -1,358 +0,0 @@
-/*
- * Win32 kernel functions
- *
- * Copyright 1995 Martin von Loewis and Cameron Heide
- */
-
-#include <fcntl.h>
-#include <stdio.h>
-#include <string.h>
-#include <sys/time.h>
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/mman.h>
-#include <string.h>
-#include <stdlib.h>
-#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->start<start;range=range->next)
- {
- if(range->start<start && start<range->start+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->start<start;range=range->next)
- {
- if((range->start<start && start<range->start+range->size) ||
- (range->start<end && end<range->start+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((lower<start && start<upper) || (lower<start+size && start+size<upper))
- {
- found=1;
- break;
- }
- }
- fclose(f);
- return !found;
- }
-#else
- {
- static int warned=0;
- if(!warned)
- {
- fprintf(stdnimp, "Don't know how to perform MEMORY_IsVrangeFree on "
- "this system.\n Please fix\n");
- warned=0;
- }
- return 1;
- }
-#endif
-}
-
-/* FIXME: might need to consolidate ranges */
-void MEMORY_InsertVrange(VRANGE_OBJECT *r)
-{
- VRANGE_OBJECT *it,*last;
- if(!MEMORY_ranges || r->start<MEMORY_ranges->start)
- {
- r->next=MEMORY_ranges;
- MEMORY_ranges=r;
- }
- for(it=MEMORY_ranges,last=0;it && it->start<r->start;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; i<mem_count; i++) {
- if (!(mem+i)->ptr) {
- (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; i<mem_count; i++) {
- if ((mem+i)->ptr == 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 e403cde..58f8dc3 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 @@
/***********************************************************************
* ReleaseMutex (KERNEL32.435)
*/
-BOOL ReleaseMutex (HANDLE32 h)
+BOOL32 ReleaseMutex (HANDLE32 h)
{
return 0;
}
@@ -34,7 +34,7 @@
/***********************************************************************
* 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 @@
/***********************************************************************
* 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 @@
/***********************************************************************
* 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 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 @@
/***********************************************************************
* FreeLibrary
*/
-BOOL FreeLibrary32(HINSTANCE32 hLibModule)
+BOOL32 FreeLibrary32(HINSTANCE32 hLibModule)
{
fprintf(stderr,"FreeLibrary: empty stub\n");
return TRUE;
@@ -117,7 +117,7 @@
/**********************************************************************
* 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 @@
/**********************************************************************
* 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 6c0559f..2acf856 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 <stdio.h>
#include <unistd.h>
#include <string.h>
+#include <sys/ipc.h>
+#include <sys/sem.h>
#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 b7dff9c..5a1192a 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 @@
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 0fdc6ef..00de7ff 100644
--- a/windows/caret.c
+++ b/windows/caret.c
@@ -123,16 +123,25 @@
/*****************************************************************
- * 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 @@
/*****************************************************************
- * 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 @@
/*****************************************************************
- * 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 @@
/*****************************************************************
* HideCaret16 (USER.166)
*/
-BOOL16 HideCaret16( HWND16 hwnd )
+void HideCaret16( HWND16 hwnd )
{
- return HideCaret32( hwnd );
+ HideCaret32( hwnd );
}
@@ -234,9 +261,9 @@
/*****************************************************************
* ShowCaret16 (USER.167)
*/
-BOOL16 ShowCaret16( HWND16 hwnd )
+void ShowCaret16( HWND16 hwnd )
{
- return ShowCaret32( hwnd );
+ ShowCaret32( hwnd );
}
@@ -265,9 +292,17 @@
/*****************************************************************
- * 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 d04e707..fa0d470 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 <stdlib.h>
@@ -156,7 +160,7 @@
*
* Free a class structure.
*/
-static BOOL CLASS_FreeClass( CLASS *classPtr )
+static BOOL32 CLASS_FreeClass( CLASS *classPtr )
{
CLASS **ppClass;
@@ -556,9 +560,18 @@
/***********************************************************************
- * 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 @@
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 @@
/***********************************************************************
- * 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 @@
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 @@
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 @@
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 08c09e1..cc92e5c 100644
--- a/windows/dce.c
+++ b/windows/dce.c
@@ -188,7 +188,7 @@
* 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 @@
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 @@
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 @@
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 d5d2f33..618e3df 100644
--- a/windows/defdlg.c
+++ b/windows/defdlg.c
@@ -52,7 +52,7 @@
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 @@
/* 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 @@
/* 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 @@
/* 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 5581bf7..fec17be 100644
--- a/windows/defwnd.c
+++ b/windows/defwnd.c
@@ -215,13 +215,13 @@
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 @@
{
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 @@
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 17d1680..366dd8a 100644
--- a/windows/dialog.c
+++ b/windows/dialog.c
@@ -296,7 +296,7 @@
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 @@
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 4800aed..86c3129 100644
--- a/windows/event.c
+++ b/windows/event.c
@@ -670,7 +670,7 @@
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 @@
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 @@
*/
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 06467a6..3c28c8e 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 @@
{
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 8dd1d65..6169fa7 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 <math.h>
#include <stdlib.h>
#include <X11/Xlib.h>
diff --git a/windows/hook.c b/windows/hook.c
index 59ffd20..e01d3b7 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 @@
*plParam = (LPARAM)lprect32;
break;
}
- break;
}
+ break;
case WH_MOUSE:
{
diff --git a/windows/keyboard.c b/windows/keyboard.c
index 8ed9eeb..d1c0c98 100644
--- a/windows/keyboard.c
+++ b/windows/keyboard.c
@@ -6,7 +6,7 @@
* Copyright 1997 David Faure
*
*/
-#define NO_TRANSITION_TYPES
+
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
@@ -731,7 +731,7 @@
*/
/* 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 @@
* 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 @@
{
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 @@
((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 395a4ea..d8bb5a3 100644
--- a/windows/mdi.c
+++ b/windows/mdi.c
@@ -60,7 +60,7 @@
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 @@
* 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 @@
/**********************************************************************
* 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 @@
/**********************************************************************
* 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 @@
*
* 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 @@
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 @@
{
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 @@
if ( hwndTo != hwndPrev )
{
- BOOL bOptimize = 0;
+ BOOL32 bOptimize = 0;
if( ci->hwndChildMaximized )
{
@@ -520,7 +521,7 @@
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 @@
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 @@
*
* 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 @@
RECT16 rect;
WND *w = WIN_FindWndPtr(hwnd);
WND *frameWnd = w->parent;
- INT nItems;
+ INT32 nItems;
ci = (MDICLIENTINFO *) w->wExtra;
@@ -1460,8 +1461,8 @@
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 @@
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 @@
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 dfce8b0..ace5200 100644
--- a/windows/message.c
+++ b/windows/message.c
@@ -404,7 +404,8 @@
*
* 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 @@
*
* 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 @@
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 @@
/***********************************************************************
- * ReplyMessage (USER.115)
+ * ReplyMessage16 (USER.115)
*/
-void ReplyMessage( LRESULT result )
+void ReplyMessage16( LRESULT result )
{
MESSAGEQUEUE *senderQ;
MESSAGEQUEUE *queue;
@@ -659,8 +660,8 @@
/***********************************************************************
* 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 @@
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 @@
/***********************************************************************
- * 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 @@
/***********************************************************************
- * 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 @@
{
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
{'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 @@
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 @@
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 @@
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 d8a0978..27a9793 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 <stdio.h>
#include "windows.h"
#include "dlgs.h"
diff --git a/windows/nonclient.c b/windows/nonclient.c
index d4001a1..d04d7df 100644
--- a/windows/nonclient.c
+++ b/windows/nonclient.c
@@ -64,7 +64,8 @@
* 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 @@
/***********************************************************************
* 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 @@
/***********************************************************************
* 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 @@
* 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 @@
*
* 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 @@
* 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 @@
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 @@
{
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 @@
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 @@
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 @@
DispatchMessage16( msg );
break;
}
- if (!IsWindow( hwnd ))
+ if (!IsWindow32( hwnd ))
{
ReleaseCapture();
break;
diff --git a/windows/painting.c b/windows/painting.c
index 2c5e4f9..78f6062 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 @@
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 @@
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 @@
/***********************************************************************
- * 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 @@
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 @@
/***********************************************************************
- * 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 @@
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 @@
/***********************************************************************
- * 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 @@
DeleteObject32( hrgn );
return ret;
}
- return GetClipBox16(hdc, &rect);
+ return GetClipBox32( hdc, &rect );
}
diff --git a/windows/property.c b/windows/property.c
index 0762558..ab6daf4 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 <string.h>
#include "win.h"
#include "heap.h"
diff --git a/windows/queue.c b/windows/queue.c
index dc99aed..a74945c 100644
--- a/windows/queue.c
+++ b/windows/queue.c
@@ -328,7 +328,7 @@
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 @@
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 @@
*
* 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 @@
/***********************************************************************
- * 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 682b438..85371bf 100644
--- a/windows/scroll.c
+++ b/windows/scroll.c
@@ -7,7 +7,6 @@
*
*/
-#define NO_TRANSITION_TYPES /* This file is Win32-clean */
#include <stdlib.h>
#include "windows.h"
#include "class.h"
@@ -113,7 +112,7 @@
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 @@
/* 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 @@
{
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 @@
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 @@
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 8bbfb5e..d63753d 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 <X11/Xlib.h>
+#include <stdio.h>
#include "gdi.h"
#include "sysmetrics.h"
@@ -62,7 +61,48 @@
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 4f4ef67..93f8563 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 da44073..d273b2b 100644
--- a/windows/win.c
+++ b/windows/win.c
@@ -277,7 +277,7 @@
{
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 @@
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 @@
}
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 @@
}
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 @@
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 @@
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 @@
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 @@
/* 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 @@
/**********************************************************************
- * 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 @@
/**********************************************************************
- * 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 @@
{
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
}
/******************************************************************************
- * 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 d802981..876e65b 100644
--- a/windows/winpos.c
+++ b/windows/winpos.c
@@ -5,7 +5,6 @@
* 1995,1996 Alex Korobka
*/
-#define NO_TRANSITION_TYPES
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <X11/Xatom.h>
@@ -778,7 +777,7 @@
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 @@
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 @@
}
/* 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 @@
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 @@
{
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 @@
{
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 @@
}
HeapFree( SystemHeap, 0, list );
}
- if (!IsWindow(hWnd)) return 0;
+ if (!IsWindow32(hWnd)) return 0;
}
if (hWnd)
@@ -1136,7 +1135,7 @@
MAKELPARAM( (HWND16)hwndPrevActive, wIconized) );
#endif
- if( !IsWindow(hWnd) ) return 0;
+ if( !IsWindow32(hWnd) ) return 0;
}
/* change focus if possible */
@@ -1519,7 +1518,8 @@
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 @@
/* 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 e8946ee..d7a196a 100644
--- a/windows/winproc.c
+++ b/windows/winproc.c
@@ -235,6 +235,7 @@
*/
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 6445a31..fa20fd4 100644
--- a/wine.man
+++ b/wine.man
@@ -109,7 +109,7 @@
.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