- README update

- add offsets to ASPI struct defines
- spelling
This commit is contained in:
Andreas Mohr 2000-12-09 03:15:32 +00:00 committed by Alexandre Julliard
parent 5448c534f3
commit 1af53cbb2a
8 changed files with 108 additions and 114 deletions

16
README
View File

@ -69,16 +69,12 @@ To build Wine, run the following commands:
make depend make depend
make make
This will build the library "libwine.a" and the program "wine". This will build the program "wine" and numerous support libraries/binaries.
The program "wine" will load and run Windows executables. The program "wine" will load and run Windows executables.
The library "libwine.a" can be used to compile and link Windows source The library "libwine" ("Winelib") can be used to compile and link
code under Unix. Windows source code under Unix.
If you do not intend to compile Windows source code, use To see compile configuration options, do ./configure --help.
"./configure --disable-lib" to skip building the library and reduce disk
space requirements. If you have an ELF compiler (which you probably do),
you can use "./configure --enable-dll" to build a shared library instead.
To see other configuration options, do ./configure --help.
To upgrade to a new release by using a patch file, first cd to the To upgrade to a new release by using a patch file, first cd to the
top-level directory of the release (the one containing this README top-level directory of the release (the one containing this README
@ -145,7 +141,7 @@ FAQ: The Wine FAQ is located at http://www.winehq.com/faq.html.
WWW: A great deal of information about Wine is available from WineHQ at WWW: A great deal of information about Wine is available from WineHQ at
http://www.winehq.com/. Untested patches against the current release http://www.winehq.com/. Untested patches against the current release
are available on the wine-patches mailing list; see are available on the wine-patches mailing list; see
http://www.winehq.com/dev.html#ml for more information. http://www.winehq.com/dev.shtml#ml for more information.
HOWTO: The Wine HOWTO is available at HOWTO: The Wine HOWTO is available at
http://www.westfalen.de/witch/wine-HOWTO.txt . http://www.westfalen.de/witch/wine-HOWTO.txt .
@ -162,7 +158,7 @@ Usenet: Please browse old messages on http://www.dejanews.com/ to check whether
IRC: Online help is available at channel #WineHQ on IRCnet. IRC: Online help is available at channel #WineHQ on IRCnet.
CVS: The current Wine development tree is available through CVS. CVS: The current Wine development tree is available through CVS.
Go to http://www.winehq.com/dev.html for more information. Go to http://www.winehq.com/dev.shtml for more information.
If you add something, or fix a bug, please send a patch ('diff -u' If you add something, or fix a bug, please send a patch ('diff -u'
format preferred) to julliard@winehq.com for inclusion in the next format preferred) to julliard@winehq.com for inclusion in the next

View File

@ -136,7 +136,7 @@ BSTR16 WINAPI SysAllocStringLen16(const char *in, int len)
* SysAllocStringLen [OLEAUT32.4] * SysAllocStringLen [OLEAUT32.4]
* *
* In "Inside OLE, second edition" by Kraig Brockshmidt. In the Automation * In "Inside OLE, second edition" by Kraig Brockshmidt. In the Automation
* section, he describes the DWORD value placed before the BSTR data type. * section, he describes the DWORD value placed *before* the BSTR data type.
* he describes it as a "DWORD count of characters". By experimenting with * he describes it as a "DWORD count of characters". By experimenting with
* a windows application, this count seems to be a DWORD count of bytes in * a windows application, this count seems to be a DWORD count of bytes in
* the string. Meaning that the count is double the number of wide * the string. Meaning that the count is double the number of wide
@ -149,13 +149,13 @@ BSTR WINAPI SysAllocStringLen(const OLECHAR *in, unsigned int len)
WCHAR* stringBuffer; WCHAR* stringBuffer;
/* /*
* Find the lenth of the buffer passed-in in bytes. * Find the length of the buffer passed-in in bytes.
*/ */
bufferSize = len * sizeof (WCHAR); bufferSize = len * sizeof (WCHAR);
/* /*
* Allocate a new buffer to hold the string. * Allocate a new buffer to hold the string.
* dont't forget to keep an empty spot at the begining of the * dont't forget to keep an empty spot at the beginning of the
* buffer for the character count and an extra character at the * buffer for the character count and an extra character at the
* end for the NULL. * end for the NULL.
*/ */

View File

@ -63,7 +63,7 @@ static BOOL MIX_GetVal(int chn, int* val)
WARN("mixer device not available !\n"); WARN("mixer device not available !\n");
} else { } else {
if (ioctl(mixer, MIXER_READ(chn), val) >= 0) { if (ioctl(mixer, MIXER_READ(chn), val) >= 0) {
TRACE("Reading %x on %d\n", *val, chn); TRACE("Reading volume %x on %d\n", *val, chn);
ret = TRUE; ret = TRUE;
} }
close(mixer); close(mixer);
@ -79,7 +79,7 @@ static BOOL MIX_SetVal(int chn, int val)
int mixer; int mixer;
BOOL ret = FALSE; BOOL ret = FALSE;
TRACE("Writing %x on %d\n", val, chn); TRACE("Writing volume %x on %d\n", val, chn);
if ((mixer = open(MIXER_DEV, O_RDWR)) < 0) { if ((mixer = open(MIXER_DEV, O_RDWR)) < 0) {
/* FIXME: ENXIO => no mixer installed */ /* FIXME: ENXIO => no mixer installed */

View File

@ -40,7 +40,7 @@ typedef struct tagSMSG
HQUEUE16 hSrcQueue; /* sending Queue, (NULL if it didn't wait) */ HQUEUE16 hSrcQueue; /* sending Queue, (NULL if it didn't wait) */
HQUEUE16 hDstQueue; /* destination Queue */ HQUEUE16 hDstQueue; /* destination Queue */
HWND hWnd; /* destinantion window */ HWND hWnd; /* destination window */
UINT msg; /* message sent */ UINT msg; /* message sent */
WPARAM wParam; /* wParam of the sent message */ WPARAM wParam; /* wParam of the sent message */
LPARAM lParam; /* lParam of the sent message */ LPARAM lParam; /* lParam of the sent message */
@ -65,7 +65,7 @@ typedef struct tagSMSG
#define SMSG_EARLY_REPLY 0x0080 #define SMSG_EARLY_REPLY 0x0080
/* set when sender is Win32 thread */ /* set when sender is Win32 thread */
#define SMSG_WIN32 0x1000 #define SMSG_WIN32 0x1000
/* set when sender is a unnicode thread */ /* set when sender is a unicode thread */
#define SMSG_UNICODE 0x2000 #define SMSG_UNICODE 0x2000
/* Per-queue data for the message queue /* Per-queue data for the message queue

View File

@ -90,105 +90,105 @@ extern "C" {
/* SRB - HOST ADAPTER INQUIRY - SC_HA_INQUIRY */ /* SRB - HOST ADAPTER INQUIRY - SC_HA_INQUIRY */
typedef struct tagSRB32_HaInquiry { typedef struct tagSRB32_HaInquiry {
BYTE SRB_Cmd; /* ASPI command code = SC_HA_INQUIRY */ BYTE SRB_Cmd; /* 00 ASPI command code = SC_HA_INQUIRY */
BYTE SRB_Status; /* ASPI command status byte */ BYTE SRB_Status; /* 01 ASPI command status byte */
BYTE SRB_HaId; /* ASPI host adapter number */ BYTE SRB_HaId; /* 02 ASPI host adapter number */
BYTE SRB_Flags; /* ASPI request flags */ BYTE SRB_Flags; /* 03 ASPI request flags */
DWORD SRB_Hdr_Rsvd; /* Reserved, MUST = 0 */ DWORD SRB_Hdr_Rsvd; /* 04 Reserved, MUST = 0 */
BYTE HA_Count; /* Number of host adapters present */ BYTE HA_Count; /* 08 Number of host adapters present */
BYTE HA_SCSI_ID; /* SCSI ID of host adapter */ BYTE HA_SCSI_ID; /* 09 SCSI ID of host adapter */
BYTE HA_ManagerId[16]; /* String describing the manager */ BYTE HA_ManagerId[16]; /* 0A String describing the manager */
BYTE HA_Identifier[16]; /* String describing the host adapter */ BYTE HA_Identifier[16]; /* 1A String describing the host adapter */
BYTE HA_Unique[16]; /* Host Adapter Unique parameters */ BYTE HA_Unique[16]; /* 2A Host Adapter Unique parameters */
WORD HA_Rsvd1; WORD HA_Rsvd1;
} SRB_HaInquiry, *PSRB_HaInquiry; } SRB_HaInquiry, *PSRB_HaInquiry;
/* SRB - GET DEVICE TYPE - SC_GET_DEV_TYPE */ /* SRB - GET DEVICE TYPE - SC_GET_DEV_TYPE */
typedef struct tagSRB32_GDEVBlock { typedef struct tagSRB32_GDEVBlock {
BYTE SRB_Cmd; /* ASPI command code = SC_GET_DEV_TYPE */ BYTE SRB_Cmd; /* 00 ASPI command code = SC_GET_DEV_TYPE */
BYTE SRB_Status; /* ASPI command status byte */ BYTE SRB_Status; /* 01 ASPI command status byte */
BYTE SRB_HaId; /* ASPI host adapter number */ BYTE SRB_HaId; /* 02 ASPI host adapter number */
BYTE SRB_Flags; /* Reserved */ BYTE SRB_Flags; /* 03 Reserved */
DWORD SRB_Hdr_Rsvd; /* Reserved */ DWORD SRB_Hdr_Rsvd; /* 04 Reserved */
BYTE SRB_Target; /* Target's SCSI ID */ BYTE SRB_Target; /* 08 Target's SCSI ID */
BYTE SRB_Lun; /* Target's LUN number */ BYTE SRB_Lun; /* 09 Target's LUN number */
BYTE SRB_DeviceType; /* Target's peripheral device type */ BYTE SRB_DeviceType; /* 0A Target's peripheral device type */
BYTE SRB_Rsvd1; BYTE SRB_Rsvd1;
} SRB_GDEVBlock, *PSRB_GDEVBlock; } SRB_GDEVBlock, *PSRB_GDEVBlock;
/* SRB - EXECUTE SCSI COMMAND - SC_EXEC_SCSI_CMD */ /* SRB - EXECUTE SCSI COMMAND - SC_EXEC_SCSI_CMD */
typedef struct tagSRB32_ExecSCSICmd { typedef struct tagSRB32_ExecSCSICmd {
BYTE SRB_Cmd; /* ASPI command code = SC_EXEC_SCSI_CMD */ BYTE SRB_Cmd; /* 00 ASPI command code = SC_EXEC_SCSI_CMD */
BYTE SRB_Status; /* ASPI command status byte */ BYTE SRB_Status; /* 01 ASPI command status byte */
BYTE SRB_HaId; /* ASPI host adapter number */ BYTE SRB_HaId; /* 02 ASPI host adapter number */
BYTE SRB_Flags; /* ASPI request flags */ BYTE SRB_Flags; /* 03 ASPI request flags */
DWORD SRB_Hdr_Rsvd; /* Reserved */ DWORD SRB_Hdr_Rsvd; /* 04 Reserved */
BYTE SRB_Target; /* Target's SCSI ID */ BYTE SRB_Target; /* 08 Target's SCSI ID */
BYTE SRB_Lun; /* Target's LUN number */ BYTE SRB_Lun; /* 09 Target's LUN number */
WORD SRB_Rsvd1; /* Reserved for Alignment */ WORD SRB_Rsvd1; /* 0A Reserved for Alignment */
DWORD SRB_BufLen; /* Data Allocation Length */ DWORD SRB_BufLen; /* 0C Data Allocation Length */
BYTE *SRB_BufPointer; /* Data Buffer Point */ BYTE *SRB_BufPointer; /* 10 Data Buffer Point */
BYTE SRB_SenseLen; /* Sense Allocation Length */ BYTE SRB_SenseLen; /* 14 Sense Allocation Length */
BYTE SRB_CDBLen; /* CDB Length */ BYTE SRB_CDBLen; /* 15 CDB Length */
BYTE SRB_HaStat; /* Host Adapter Status */ BYTE SRB_HaStat; /* 16 Host Adapter Status */
BYTE SRB_TargStat; /* Target Status */ BYTE SRB_TargStat; /* 17 Target Status */
void (*SRB_PostProc)(); /* Post routine */ void (*SRB_PostProc)(); /* 18 Post routine */
void *SRB_Rsvd2; /* Reserved */ void *SRB_Rsvd2; /* 1C Reserved */
BYTE SRB_Rsvd3[16]; /* Reserved for expansion */ BYTE SRB_Rsvd3[16]; /* 20 Reserved for expansion */
BYTE CDBByte[16]; /* SCSI CDB */ BYTE CDBByte[16]; /* 30 SCSI CDB */
BYTE SenseArea[SENSE_LEN+2]; /* Request sense buffer - var length */ BYTE SenseArea[SENSE_LEN+2]; /* 40 Request sense buffer - var length */
} SRB_ExecSCSICmd, *PSRB_ExecSCSICmd; } SRB_ExecSCSICmd, *PSRB_ExecSCSICmd;
/* SRB - ABORT AN ARB - SC_ABORT_SRB */ /* SRB - ABORT AN ARB - SC_ABORT_SRB */
typedef struct tagSRB32_Abort { typedef struct tagSRB32_Abort {
BYTE SRB_Cmd; /* ASPI command code = SC_ABORT_SRB */ BYTE SRB_Cmd; /* 00 ASPI command code = SC_ABORT_SRB */
BYTE SRB_Status; /* ASPI command status byte */ BYTE SRB_Status; /* 01 ASPI command status byte */
BYTE SRB_HaId; /* ASPI host adapter number */ BYTE SRB_HaId; /* 02 ASPI host adapter number */
BYTE SRB_Flags; /* Reserved */ BYTE SRB_Flags; /* 03 Reserved */
DWORD SRB_Hdr_Rsvd; /* Reserved, MUST = 0 */ DWORD SRB_Hdr_Rsvd; /* 04 Reserved, MUST = 0 */
VOID *SRB_ToAbort; /* Pointer to SRB to abort */ VOID *SRB_ToAbort; /* 08 Pointer to SRB to abort */
} SRB_Abort, *PSRB_Abort; } SRB_Abort, *PSRB_Abort;
/* SRB - BUS DEVICE RESET - SC_RESET_DEV */ /* SRB - BUS DEVICE RESET - SC_RESET_DEV */
typedef struct tagSRB32_BusDeviceReset { typedef struct tagSRB32_BusDeviceReset {
BYTE SRB_Cmd; /* ASPI command code = SC_RESET_DEV */ BYTE SRB_Cmd; /* 00 ASPI cmd code = SC_RESET_DEV */
BYTE SRB_Status; /* ASPI command status byte */ BYTE SRB_Status; /* 01 ASPI command status byte */
BYTE SRB_HaId; /* ASPI host adapter number */ BYTE SRB_HaId; /* 02 ASPI host adapter number */
BYTE SRB_Flags; /* Reserved */ BYTE SRB_Flags; /* 03 Reserved */
DWORD SRB_Hdr_Rsvd; /* Reserved */ DWORD SRB_Hdr_Rsvd; /* 04 Reserved */
BYTE SRB_Target; /* Target's SCSI ID */ BYTE SRB_Target; /* 08 Target's SCSI ID */
BYTE SRB_Lun; /* Target's LUN number */ BYTE SRB_Lun; /* 09 Target's LUN number */
BYTE SRB_Rsvd1[12]; /* Reserved for Alignment */ BYTE SRB_Rsvd1[12]; /* 0A Reserved for Alignment */
BYTE SRB_HaStat; /* Host Adapter Status */ BYTE SRB_HaStat; /* 16 Host Adapter Status */
BYTE SRB_TargStat; /* Target Status */ BYTE SRB_TargStat; /* 17 Target Status */
void (*SRB_PostProc)(); /* Post routine */ void (*SRB_PostProc)(); /* 18 Post routine */
void *SRB_Rsvd2; /* Reserved */ void *SRB_Rsvd2; /* 1c Reserved */
BYTE SRB_Rsvd3[32]; /* Reserved */ BYTE SRB_Rsvd3[32]; /* 20 Reserved */
} SRB_BusDeviceReset, *PSRB_BusDeviceReset; } SRB_BusDeviceReset, *PSRB_BusDeviceReset;
/* SRB - GET DISK INFORMATION - SC_GET_DISK_INFO */ /* SRB - GET DISK INFORMATION - SC_GET_DISK_INFO */
typedef struct tagSRB32_GetDiskInfo { typedef struct tagSRB32_GetDiskInfo {
BYTE SRB_Cmd; /* ASPI command code = SC_RESET_DEV */ BYTE SRB_Cmd; /* 00 ASPI cmd code = SC_RESET_DEV */
BYTE SRB_Status; /* ASPI command status byte */ BYTE SRB_Status; /* 01 ASPI command status byte */
BYTE SRB_HaId; /* ASPI host adapter number */ BYTE SRB_HaId; /* 02 ASPI host adapter number */
BYTE SRB_Flags; /* Reserved */ BYTE SRB_Flags; /* 03 Reserved */
DWORD SRB_Hdr_Rsvd; /* Reserved */ DWORD SRB_Hdr_Rsvd; /* 04 Reserved */
BYTE SRB_Target; /* Target's SCSI ID */ BYTE SRB_Target; /* 08 Target's SCSI ID */
BYTE SRB_Lun; /* Target's LUN number */ BYTE SRB_Lun; /* 09 Target's LUN number */
BYTE SRB_DriveFlags; /* Driver flags */ BYTE SRB_DriveFlags; /* 0A Driver flags */
BYTE SRB_Int13HDriveInfo; /* Host Adapter Status */ BYTE SRB_Int13HDriveInfo; /* 0B Host Adapter Status */
BYTE SRB_Heads; /* Preferred number of heads trans */ BYTE SRB_Heads; /* 0C Preferred number of heads trans */
BYTE SRB_Sectors; /* Preferred number of sectors trans */ BYTE SRB_Sectors; /* 0D Preferred number of sectors trans */
BYTE SRB_Rsvd1[10]; /* Reserved */ BYTE SRB_Rsvd1[10]; /* 0E Reserved */
} SRB_GetDiskInfo, *PSRB_GetDiskInfo; } SRB_GetDiskInfo, *PSRB_GetDiskInfo;
/* SRB header */ /* SRB header */
typedef struct tagSRB32_Header { typedef struct tagSRB32_Header {
BYTE SRB_Cmd; /* ASPI command code = SC_RESET_DEV */ BYTE SRB_Cmd; /* 00 ASPI cmd code = SC_RESET_DEV */
BYTE SRB_Status; /* ASPI command status byte */ BYTE SRB_Status; /* 01 ASPI command status byte */
BYTE SRB_HaId; /* ASPI host adapter number */ BYTE SRB_HaId; /* 02 ASPI host adapter number */
BYTE SRB_Flags; /* Reserved */ BYTE SRB_Flags; /* 03 Reserved */
DWORD SRB_Hdr_Rsvd; /* Reserved */ DWORD SRB_Hdr_Rsvd; /* 04 Reserved */
} SRB_Header, *PSRB_Header; } SRB_Header, *PSRB_Header;
typedef union tagSRB32 { typedef union tagSRB32 {

View File

@ -156,11 +156,11 @@ void MAIN_ParseDebugOptions( const char *arg )
error: error:
MESSAGE("%s: Syntax: --debugmsg [class]+xxx,... or " MESSAGE("%s: Syntax: --debugmsg [class]+xxx,... or "
"-debugmsg [class]-xxx,...\n",argv0); "--debugmsg [class]-xxx,...\n",argv0);
MESSAGE("Example: --debugmsg +all,warn-heap\n" MESSAGE("Example: --debugmsg +all,warn-heap\n"
" turn on all messages except warning heap messages\n"); " turn on all messages except warning heap messages\n");
MESSAGE("Special case: --debugmsg +relay=DLL:DLL.###:FuncName\n" MESSAGE("Special case: --debugmsg +relay=DLL:DLL.###:FuncName\n"
" turn on -debugmsg +relay only as specified\n" " turn on --debugmsg +relay only as specified\n"
"Special case: --debugmsg -relay=DLL:DLL.###:FuncName\n" "Special case: --debugmsg -relay=DLL:DLL.###:FuncName\n"
" turn on --debugmsg +relay except as specified\n" " turn on --debugmsg +relay except as specified\n"
"Also permitted, +snoop=..., -snoop=... as with relay.\n\n"); "Also permitted, +snoop=..., -snoop=... as with relay.\n\n");

View File

@ -9,7 +9,7 @@
* win31->NT migration book) * win31->NT migration book)
* *
* FIXME: There seems to be a general problem with hInstance in WINE * FIXME: There seems to be a general problem with hInstance in WINE
* classes are getting registred with wrong hInstance. * classes are getting registered with wrong hInstance.
*/ */
#include <stdlib.h> #include <stdlib.h>

View File

@ -361,7 +361,7 @@ END:
/*********************************************************************** /***********************************************************************
* MSG_TranslateKbdMsg * MSG_TranslateKbdMsg
* *
* Translate an keyboard hardware event into a real message. * Translate a keyboard hardware event into a real message.
*/ */
static DWORD MSG_TranslateKbdMsg( HWND hTopWnd, DWORD first, DWORD last, static DWORD MSG_TranslateKbdMsg( HWND hTopWnd, DWORD first, DWORD last,
MSG *msg, BOOL remove ) MSG *msg, BOOL remove )
@ -590,8 +590,6 @@ static int MSG_JournalPlayBackMsg(void)
static BOOL MSG_PeekHardwareMsg( MSG *msg, HWND hwnd, DWORD first, DWORD last, static BOOL MSG_PeekHardwareMsg( MSG *msg, HWND hwnd, DWORD first, DWORD last,
BOOL remove ) BOOL remove )
{ {
/* FIXME: should deal with MSG32 instead of MSG16 */
DWORD status = SYSQ_MSG_ACCEPT; DWORD status = SYSQ_MSG_ACCEPT;
MESSAGEQUEUE *sysMsgQueue = QUEUE_GetSysQueue(); MESSAGEQUEUE *sysMsgQueue = QUEUE_GetSysQueue();
enum { MOUSE_MSG = 0, KEYBOARD_MSG, HARDWARE_MSG } msgType; enum { MOUSE_MSG = 0, KEYBOARD_MSG, HARDWARE_MSG } msgType;
@ -789,7 +787,7 @@ UINT WINAPI GetDoubleClickTime(void)
* Implementation of an inter-task SendMessage. * Implementation of an inter-task SendMessage.
* Return values: * Return values:
* 0 if error or timeout * 0 if error or timeout
* 1 if successflul * 1 if successful
*/ */
static LRESULT MSG_SendMessageInterThread( HQUEUE16 hDestQueue, static LRESULT MSG_SendMessageInterThread( HQUEUE16 hDestQueue,
HWND hwnd, UINT msg, HWND hwnd, UINT msg,
@ -2293,9 +2291,9 @@ LONG WINAPI DispatchMessage16( const MSG16* msg )
{ {
if (msg->lParam) if (msg->lParam)
{ {
/* before calling window proc, verify it the timer is still valid, /* before calling window proc, verify whether timer is still valid;
there's a slim chance the application kill the timer between there's a slim chance that the application kills the timer
getMessage and DisaptachMessage API calls */ between GetMessage and DispatchMessage API calls */
if (!TIMER_IsTimerValid(msg->hwnd, (UINT) msg->wParam, (HWINDOWPROC) msg->lParam)) if (!TIMER_IsTimerValid(msg->hwnd, (UINT) msg->wParam, (HWINDOWPROC) msg->lParam))
return 0; /* invalid winproc */ return 0; /* invalid winproc */
@ -2377,9 +2375,9 @@ LONG WINAPI DispatchMessageA( const MSG* msg )
{ {
/* HOOK_CallHooks32A( WH_CALLWNDPROC, HC_ACTION, 0, FIXME ); */ /* HOOK_CallHooks32A( WH_CALLWNDPROC, HC_ACTION, 0, FIXME ); */
/* before calling window proc, verify it the timer is still valid, /* before calling window proc, verify whether timer is still valid;
there's a slim chance the application kill the timer between there's a slim chance that the application kills the timer
getMessage and DisaptachMessage API calls */ between GetMessage and DispatchMessage API calls */
if (!TIMER_IsTimerValid(msg->hwnd, (UINT) msg->wParam, (HWINDOWPROC) msg->lParam)) if (!TIMER_IsTimerValid(msg->hwnd, (UINT) msg->wParam, (HWINDOWPROC) msg->lParam))
return 0; /* invalid winproc */ return 0; /* invalid winproc */
@ -2460,9 +2458,9 @@ LONG WINAPI DispatchMessageW( const MSG* msg )
{ {
/* HOOK_CallHooks32W( WH_CALLWNDPROC, HC_ACTION, 0, FIXME ); */ /* HOOK_CallHooks32W( WH_CALLWNDPROC, HC_ACTION, 0, FIXME ); */
/* before calling window proc, verify it the timer is still valid, /* before calling window proc, verify whether timer is still valid;
there's a slim chance the application kill the timer between there's a slim chance that the application kills the timer
getMessage and DisaptachMessage API calls */ between GetMessage and DispatchMessage API calls */
if (!TIMER_IsTimerValid(msg->hwnd, (UINT) msg->wParam, (HWINDOWPROC) msg->lParam)) if (!TIMER_IsTimerValid(msg->hwnd, (UINT) msg->wParam, (HWINDOWPROC) msg->lParam))
return 0; /* invalid winproc */ return 0; /* invalid winproc */
@ -2598,8 +2596,10 @@ BOOL WINAPI SendNotifyMessageW(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)
/*********************************************************************** /***********************************************************************
* SendMessageCallbackA * SendMessageCallbackA
* FIXME: It's like PostMessage. The callback gets called when the message * FIXME: It's like PostMessage. The callback gets called when the message
* is processed. We have to modify the message processing for a exact * is processed. We have to modify the message processing for an exact
* implementation... * implementation...
* The callback is only called when the thread that called us calls one of
* Get/Peek/WaitMessage.
*/ */
BOOL WINAPI SendMessageCallbackA( BOOL WINAPI SendMessageCallbackA(
HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam, HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam,
@ -2617,9 +2617,7 @@ BOOL WINAPI SendMessageCallbackA(
} }
/*********************************************************************** /***********************************************************************
* SendMessageCallbackW * SendMessageCallbackW
* FIXME: It's like PostMessage. The callback gets called when the message * FIXME: see SendMessageCallbackA.
* is processed. We have to modify the message processing for a exact
* implementation...
*/ */
BOOL WINAPI SendMessageCallbackW( BOOL WINAPI SendMessageCallbackW(
HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam, HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam,