From 1af53cbb2a1ee847db591f29d88865aec9ec32b6 Mon Sep 17 00:00:00 2001 From: Andreas Mohr Date: Sat, 9 Dec 2000 03:15:32 +0000 Subject: [PATCH] - README update - add offsets to ASPI struct defines - spelling --- README | 16 ++-- dlls/oleaut32/ole2disp.c | 6 +- dlls/winmm/wineoss/mixer.c | 6 +- include/queue.h | 4 +- include/wnaspi32.h | 146 ++++++++++++++++++------------------- misc/main.c | 4 +- windows/class.c | 2 +- windows/message.c | 38 +++++----- 8 files changed, 108 insertions(+), 114 deletions(-) diff --git a/README b/README index 542be0e1272..0fb333c6962 100644 --- a/README +++ b/README @@ -69,16 +69,12 @@ To build Wine, run the following commands: make depend 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 library "libwine.a" can be used to compile and link Windows source -code under Unix. +The library "libwine" ("Winelib") can be used to compile and link +Windows source code under Unix. -If you do not intend to compile Windows source code, use -"./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 see compile configuration options, do ./configure --help. 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 @@ -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 http://www.winehq.com/. Untested patches against the current release 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 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. 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' format preferred) to julliard@winehq.com for inclusion in the next diff --git a/dlls/oleaut32/ole2disp.c b/dlls/oleaut32/ole2disp.c index 78f3d4ebb9b..20a56ec1cdd 100644 --- a/dlls/oleaut32/ole2disp.c +++ b/dlls/oleaut32/ole2disp.c @@ -136,7 +136,7 @@ BSTR16 WINAPI SysAllocStringLen16(const char *in, int len) * SysAllocStringLen [OLEAUT32.4] * * 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 * 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 @@ -149,13 +149,13 @@ BSTR WINAPI SysAllocStringLen(const OLECHAR *in, unsigned int len) 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); /* * 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 * end for the NULL. */ diff --git a/dlls/winmm/wineoss/mixer.c b/dlls/winmm/wineoss/mixer.c index 931d88f765e..074ab0c2375 100644 --- a/dlls/winmm/wineoss/mixer.c +++ b/dlls/winmm/wineoss/mixer.c @@ -63,7 +63,7 @@ static BOOL MIX_GetVal(int chn, int* val) WARN("mixer device not available !\n"); } else { 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; } close(mixer); @@ -79,7 +79,7 @@ static BOOL MIX_SetVal(int chn, int val) int mixer; 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) { /* FIXME: ENXIO => no mixer installed */ @@ -199,7 +199,7 @@ static DWORD MIX_GetLineInfo(WORD wDevID, LPMIXERLINEA lpMl, DWORD fdwInfo) TRACE("SOURCE (%08lx)\n", lpMl->dwSource); i = lpMl->dwSource; for (j = 1; j < SOUND_MIXER_NRDEVICES; j++) { - if (WINE_CHN_SUPPORTS(MIX_DevMask, j) && (i-- == 0)) + if (WINE_CHN_SUPPORTS(MIX_DevMask, j) && (i-- == 0)) break; } if (j >= SOUND_MIXER_NRDEVICES) diff --git a/include/queue.h b/include/queue.h index 4a1be22bbe7..15d6f910250 100644 --- a/include/queue.h +++ b/include/queue.h @@ -40,7 +40,7 @@ typedef struct tagSMSG HQUEUE16 hSrcQueue; /* sending Queue, (NULL if it didn't wait) */ HQUEUE16 hDstQueue; /* destination Queue */ - HWND hWnd; /* destinantion window */ + HWND hWnd; /* destination window */ UINT msg; /* message sent */ WPARAM wParam; /* wParam of the sent message */ LPARAM lParam; /* lParam of the sent message */ @@ -65,7 +65,7 @@ typedef struct tagSMSG #define SMSG_EARLY_REPLY 0x0080 /* set when sender is Win32 thread */ #define SMSG_WIN32 0x1000 -/* set when sender is a unnicode thread */ +/* set when sender is a unicode thread */ #define SMSG_UNICODE 0x2000 /* Per-queue data for the message queue diff --git a/include/wnaspi32.h b/include/wnaspi32.h index ab729e51abe..005823fb13a 100644 --- a/include/wnaspi32.h +++ b/include/wnaspi32.h @@ -90,105 +90,105 @@ extern "C" { /* SRB - HOST ADAPTER INQUIRY - SC_HA_INQUIRY */ typedef struct tagSRB32_HaInquiry { - BYTE SRB_Cmd; /* ASPI command code = SC_HA_INQUIRY */ - BYTE SRB_Status; /* ASPI command status byte */ - BYTE SRB_HaId; /* ASPI host adapter number */ - BYTE SRB_Flags; /* ASPI request flags */ - DWORD SRB_Hdr_Rsvd; /* Reserved, MUST = 0 */ - BYTE HA_Count; /* Number of host adapters present */ - BYTE HA_SCSI_ID; /* SCSI ID of host adapter */ - BYTE HA_ManagerId[16]; /* String describing the manager */ - BYTE HA_Identifier[16]; /* String describing the host adapter */ - BYTE HA_Unique[16]; /* Host Adapter Unique parameters */ + BYTE SRB_Cmd; /* 00 ASPI command code = SC_HA_INQUIRY */ + BYTE SRB_Status; /* 01 ASPI command status byte */ + BYTE SRB_HaId; /* 02 ASPI host adapter number */ + BYTE SRB_Flags; /* 03 ASPI request flags */ + DWORD SRB_Hdr_Rsvd; /* 04 Reserved, MUST = 0 */ + BYTE HA_Count; /* 08 Number of host adapters present */ + BYTE HA_SCSI_ID; /* 09 SCSI ID of host adapter */ + BYTE HA_ManagerId[16]; /* 0A String describing the manager */ + BYTE HA_Identifier[16]; /* 1A String describing the host adapter */ + BYTE HA_Unique[16]; /* 2A Host Adapter Unique parameters */ WORD HA_Rsvd1; } SRB_HaInquiry, *PSRB_HaInquiry; /* SRB - GET DEVICE TYPE - SC_GET_DEV_TYPE */ typedef struct tagSRB32_GDEVBlock { - BYTE SRB_Cmd; /* ASPI command code = SC_GET_DEV_TYPE */ - BYTE SRB_Status; /* ASPI command status byte */ - BYTE SRB_HaId; /* ASPI host adapter number */ - BYTE SRB_Flags; /* Reserved */ - DWORD SRB_Hdr_Rsvd; /* Reserved */ - BYTE SRB_Target; /* Target's SCSI ID */ - BYTE SRB_Lun; /* Target's LUN number */ - BYTE SRB_DeviceType; /* Target's peripheral device type */ + BYTE SRB_Cmd; /* 00 ASPI command code = SC_GET_DEV_TYPE */ + BYTE SRB_Status; /* 01 ASPI command status byte */ + BYTE SRB_HaId; /* 02 ASPI host adapter number */ + BYTE SRB_Flags; /* 03 Reserved */ + DWORD SRB_Hdr_Rsvd; /* 04 Reserved */ + BYTE SRB_Target; /* 08 Target's SCSI ID */ + BYTE SRB_Lun; /* 09 Target's LUN number */ + BYTE SRB_DeviceType; /* 0A Target's peripheral device type */ BYTE SRB_Rsvd1; } SRB_GDEVBlock, *PSRB_GDEVBlock; /* SRB - EXECUTE SCSI COMMAND - SC_EXEC_SCSI_CMD */ typedef struct tagSRB32_ExecSCSICmd { - BYTE SRB_Cmd; /* ASPI command code = SC_EXEC_SCSI_CMD */ - BYTE SRB_Status; /* ASPI command status byte */ - BYTE SRB_HaId; /* ASPI host adapter number */ - BYTE SRB_Flags; /* ASPI request flags */ - DWORD SRB_Hdr_Rsvd; /* Reserved */ - BYTE SRB_Target; /* Target's SCSI ID */ - BYTE SRB_Lun; /* Target's LUN number */ - WORD SRB_Rsvd1; /* Reserved for Alignment */ - DWORD SRB_BufLen; /* Data Allocation Length */ - BYTE *SRB_BufPointer; /* Data Buffer Point */ - BYTE SRB_SenseLen; /* Sense Allocation Length */ - BYTE SRB_CDBLen; /* CDB Length */ - BYTE SRB_HaStat; /* Host Adapter Status */ - BYTE SRB_TargStat; /* Target Status */ - void (*SRB_PostProc)(); /* Post routine */ - void *SRB_Rsvd2; /* Reserved */ - BYTE SRB_Rsvd3[16]; /* Reserved for expansion */ - BYTE CDBByte[16]; /* SCSI CDB */ - BYTE SenseArea[SENSE_LEN+2]; /* Request sense buffer - var length */ + BYTE SRB_Cmd; /* 00 ASPI command code = SC_EXEC_SCSI_CMD */ + BYTE SRB_Status; /* 01 ASPI command status byte */ + BYTE SRB_HaId; /* 02 ASPI host adapter number */ + BYTE SRB_Flags; /* 03 ASPI request flags */ + DWORD SRB_Hdr_Rsvd; /* 04 Reserved */ + BYTE SRB_Target; /* 08 Target's SCSI ID */ + BYTE SRB_Lun; /* 09 Target's LUN number */ + WORD SRB_Rsvd1; /* 0A Reserved for Alignment */ + DWORD SRB_BufLen; /* 0C Data Allocation Length */ + BYTE *SRB_BufPointer; /* 10 Data Buffer Point */ + BYTE SRB_SenseLen; /* 14 Sense Allocation Length */ + BYTE SRB_CDBLen; /* 15 CDB Length */ + BYTE SRB_HaStat; /* 16 Host Adapter Status */ + BYTE SRB_TargStat; /* 17 Target Status */ + void (*SRB_PostProc)(); /* 18 Post routine */ + void *SRB_Rsvd2; /* 1C Reserved */ + BYTE SRB_Rsvd3[16]; /* 20 Reserved for expansion */ + BYTE CDBByte[16]; /* 30 SCSI CDB */ + BYTE SenseArea[SENSE_LEN+2]; /* 40 Request sense buffer - var length */ } SRB_ExecSCSICmd, *PSRB_ExecSCSICmd; /* SRB - ABORT AN ARB - SC_ABORT_SRB */ typedef struct tagSRB32_Abort { - BYTE SRB_Cmd; /* ASPI command code = SC_ABORT_SRB */ - BYTE SRB_Status; /* ASPI command status byte */ - BYTE SRB_HaId; /* ASPI host adapter number */ - BYTE SRB_Flags; /* Reserved */ - DWORD SRB_Hdr_Rsvd; /* Reserved, MUST = 0 */ - VOID *SRB_ToAbort; /* Pointer to SRB to abort */ + BYTE SRB_Cmd; /* 00 ASPI command code = SC_ABORT_SRB */ + BYTE SRB_Status; /* 01 ASPI command status byte */ + BYTE SRB_HaId; /* 02 ASPI host adapter number */ + BYTE SRB_Flags; /* 03 Reserved */ + DWORD SRB_Hdr_Rsvd; /* 04 Reserved, MUST = 0 */ + VOID *SRB_ToAbort; /* 08 Pointer to SRB to abort */ } SRB_Abort, *PSRB_Abort; /* SRB - BUS DEVICE RESET - SC_RESET_DEV */ typedef struct tagSRB32_BusDeviceReset { - BYTE SRB_Cmd; /* ASPI command code = SC_RESET_DEV */ - BYTE SRB_Status; /* ASPI command status byte */ - BYTE SRB_HaId; /* ASPI host adapter number */ - BYTE SRB_Flags; /* Reserved */ - DWORD SRB_Hdr_Rsvd; /* Reserved */ - BYTE SRB_Target; /* Target's SCSI ID */ - BYTE SRB_Lun; /* Target's LUN number */ - BYTE SRB_Rsvd1[12]; /* Reserved for Alignment */ - BYTE SRB_HaStat; /* Host Adapter Status */ - BYTE SRB_TargStat; /* Target Status */ - void (*SRB_PostProc)(); /* Post routine */ - void *SRB_Rsvd2; /* Reserved */ - BYTE SRB_Rsvd3[32]; /* Reserved */ + BYTE SRB_Cmd; /* 00 ASPI cmd code = SC_RESET_DEV */ + BYTE SRB_Status; /* 01 ASPI command status byte */ + BYTE SRB_HaId; /* 02 ASPI host adapter number */ + BYTE SRB_Flags; /* 03 Reserved */ + DWORD SRB_Hdr_Rsvd; /* 04 Reserved */ + BYTE SRB_Target; /* 08 Target's SCSI ID */ + BYTE SRB_Lun; /* 09 Target's LUN number */ + BYTE SRB_Rsvd1[12]; /* 0A Reserved for Alignment */ + BYTE SRB_HaStat; /* 16 Host Adapter Status */ + BYTE SRB_TargStat; /* 17 Target Status */ + void (*SRB_PostProc)(); /* 18 Post routine */ + void *SRB_Rsvd2; /* 1c Reserved */ + BYTE SRB_Rsvd3[32]; /* 20 Reserved */ } SRB_BusDeviceReset, *PSRB_BusDeviceReset; /* SRB - GET DISK INFORMATION - SC_GET_DISK_INFO */ typedef struct tagSRB32_GetDiskInfo { - BYTE SRB_Cmd; /* ASPI command code = SC_RESET_DEV */ - BYTE SRB_Status; /* ASPI command status byte */ - BYTE SRB_HaId; /* ASPI host adapter number */ - BYTE SRB_Flags; /* Reserved */ - DWORD SRB_Hdr_Rsvd; /* Reserved */ - BYTE SRB_Target; /* Target's SCSI ID */ - BYTE SRB_Lun; /* Target's LUN number */ - BYTE SRB_DriveFlags; /* Driver flags */ - BYTE SRB_Int13HDriveInfo; /* Host Adapter Status */ - BYTE SRB_Heads; /* Preferred number of heads trans */ - BYTE SRB_Sectors; /* Preferred number of sectors trans */ - BYTE SRB_Rsvd1[10]; /* Reserved */ + BYTE SRB_Cmd; /* 00 ASPI cmd code = SC_RESET_DEV */ + BYTE SRB_Status; /* 01 ASPI command status byte */ + BYTE SRB_HaId; /* 02 ASPI host adapter number */ + BYTE SRB_Flags; /* 03 Reserved */ + DWORD SRB_Hdr_Rsvd; /* 04 Reserved */ + BYTE SRB_Target; /* 08 Target's SCSI ID */ + BYTE SRB_Lun; /* 09 Target's LUN number */ + BYTE SRB_DriveFlags; /* 0A Driver flags */ + BYTE SRB_Int13HDriveInfo; /* 0B Host Adapter Status */ + BYTE SRB_Heads; /* 0C Preferred number of heads trans */ + BYTE SRB_Sectors; /* 0D Preferred number of sectors trans */ + BYTE SRB_Rsvd1[10]; /* 0E Reserved */ } SRB_GetDiskInfo, *PSRB_GetDiskInfo; /* SRB header */ typedef struct tagSRB32_Header { - BYTE SRB_Cmd; /* ASPI command code = SC_RESET_DEV */ - BYTE SRB_Status; /* ASPI command status byte */ - BYTE SRB_HaId; /* ASPI host adapter number */ - BYTE SRB_Flags; /* Reserved */ - DWORD SRB_Hdr_Rsvd; /* Reserved */ + BYTE SRB_Cmd; /* 00 ASPI cmd code = SC_RESET_DEV */ + BYTE SRB_Status; /* 01 ASPI command status byte */ + BYTE SRB_HaId; /* 02 ASPI host adapter number */ + BYTE SRB_Flags; /* 03 Reserved */ + DWORD SRB_Hdr_Rsvd; /* 04 Reserved */ } SRB_Header, *PSRB_Header; typedef union tagSRB32 { diff --git a/misc/main.c b/misc/main.c index 357db380417..04d7fde3372 100644 --- a/misc/main.c +++ b/misc/main.c @@ -156,11 +156,11 @@ void MAIN_ParseDebugOptions( const char *arg ) error: MESSAGE("%s: Syntax: --debugmsg [class]+xxx,... or " - "-debugmsg [class]-xxx,...\n",argv0); + "--debugmsg [class]-xxx,...\n",argv0); MESSAGE("Example: --debugmsg +all,warn-heap\n" " turn on all messages except warning heap messages\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" " turn on --debugmsg +relay except as specified\n" "Also permitted, +snoop=..., -snoop=... as with relay.\n\n"); diff --git a/windows/class.c b/windows/class.c index dc6c2d93051..ff15fa42ac0 100644 --- a/windows/class.c +++ b/windows/class.c @@ -9,7 +9,7 @@ * win31->NT migration book) * * 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 diff --git a/windows/message.c b/windows/message.c index 12cb762d56f..49c0eed4712 100644 --- a/windows/message.c +++ b/windows/message.c @@ -361,7 +361,7 @@ END: /*********************************************************************** * 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, MSG *msg, BOOL remove ) @@ -508,7 +508,7 @@ static int MSG_JournalPlayBackMsg(void) if (wtime<=0) { wtime=0; - if ((tmpMsg->message>= WM_KEYFIRST) && (tmpMsg->message <= WM_KEYLAST)) + if ((tmpMsg->message >= WM_KEYFIRST) && (tmpMsg->message <= WM_KEYLAST)) { wParam=tmpMsg->paramL & 0xFF; lParam=MAKELONG(tmpMsg->paramH&0x7ffff,tmpMsg->paramL>>8); @@ -590,8 +590,6 @@ static int MSG_JournalPlayBackMsg(void) static BOOL MSG_PeekHardwareMsg( MSG *msg, HWND hwnd, DWORD first, DWORD last, BOOL remove ) { - /* FIXME: should deal with MSG32 instead of MSG16 */ - DWORD status = SYSQ_MSG_ACCEPT; MESSAGEQUEUE *sysMsgQueue = QUEUE_GetSysQueue(); enum { MOUSE_MSG = 0, KEYBOARD_MSG, HARDWARE_MSG } msgType; @@ -789,7 +787,7 @@ UINT WINAPI GetDoubleClickTime(void) * Implementation of an inter-task SendMessage. * Return values: * 0 if error or timeout - * 1 if successflul + * 1 if successful */ static LRESULT MSG_SendMessageInterThread( HQUEUE16 hDestQueue, HWND hwnd, UINT msg, @@ -2204,7 +2202,7 @@ static BOOL MSG_DoTranslateMessage( UINT message, HWND hwnd, /* FIXME : should handle ToUnicode yielding 2 */ switch (ToUnicode(wParam, HIWORD(lParam), QueueKeyStateTable, wp, 2, 0)) { - case 1 : + case 1: message = (message == WM_KEYDOWN) ? WM_CHAR : WM_SYSCHAR; /* Should dead chars handling go in ToAscii ? */ if (dead_char) @@ -2232,7 +2230,7 @@ static BOOL MSG_DoTranslateMessage( UINT message, HWND hwnd, PostMessageW( hwnd, message, wp[0], lParam ); return TRUE; - case -1 : + case -1: message = (message == WM_KEYDOWN) ? WM_DEADCHAR : WM_SYSDEADCHAR; dead_char = wp[0]; TRACE_(key)("-1 -> PostMessage(%s)\n", SPY_GetMsgName(message)); @@ -2293,9 +2291,9 @@ LONG WINAPI DispatchMessage16( const MSG16* msg ) { if (msg->lParam) { - /* before calling window proc, verify it the timer is still valid, - there's a slim chance the application kill the timer between - getMessage and DisaptachMessage API calls */ + /* before calling window proc, verify whether timer is still valid; + there's a slim chance that the application kills the timer + between GetMessage and DispatchMessage API calls */ if (!TIMER_IsTimerValid(msg->hwnd, (UINT) msg->wParam, (HWINDOWPROC) msg->lParam)) return 0; /* invalid winproc */ @@ -2377,9 +2375,9 @@ LONG WINAPI DispatchMessageA( const MSG* msg ) { /* HOOK_CallHooks32A( WH_CALLWNDPROC, HC_ACTION, 0, FIXME ); */ - /* before calling window proc, verify it the timer is still valid, - there's a slim chance the application kill the timer between - getMessage and DisaptachMessage API calls */ + /* before calling window proc, verify whether timer is still valid; + there's a slim chance that the application kills the timer + between GetMessage and DispatchMessage API calls */ if (!TIMER_IsTimerValid(msg->hwnd, (UINT) msg->wParam, (HWINDOWPROC) msg->lParam)) return 0; /* invalid winproc */ @@ -2460,9 +2458,9 @@ LONG WINAPI DispatchMessageW( const MSG* msg ) { /* HOOK_CallHooks32W( WH_CALLWNDPROC, HC_ACTION, 0, FIXME ); */ - /* before calling window proc, verify it the timer is still valid, - there's a slim chance the application kill the timer between - getMessage and DisaptachMessage API calls */ + /* before calling window proc, verify whether timer is still valid; + there's a slim chance that the application kills the timer + between GetMessage and DispatchMessage API calls */ if (!TIMER_IsTimerValid(msg->hwnd, (UINT) msg->wParam, (HWINDOWPROC) msg->lParam)) return 0; /* invalid winproc */ @@ -2598,8 +2596,10 @@ BOOL WINAPI SendNotifyMessageW(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam) /*********************************************************************** * SendMessageCallbackA * 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... + * The callback is only called when the thread that called us calls one of + * Get/Peek/WaitMessage. */ BOOL WINAPI SendMessageCallbackA( HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam, @@ -2617,9 +2617,7 @@ BOOL WINAPI SendMessageCallbackA( } /*********************************************************************** * SendMessageCallbackW - * FIXME: It's like PostMessage. The callback gets called when the message - * is processed. We have to modify the message processing for a exact - * implementation... + * FIXME: see SendMessageCallbackA. */ BOOL WINAPI SendMessageCallbackW( HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam,