From c11b167f6297fbc34f2c102430b1f6ca7278a70c Mon Sep 17 00:00:00 2001 From: Eric Pouech Date: Sat, 13 Feb 1999 12:38:09 +0000 Subject: [PATCH] Added support for MCI AVI driver Added some fixes mixer functions Fixed MCI string comparison (thanks to Lionel ULMER) No longer using 16 bit USER functions (use their 32 bit counter part) Reindenting. Added function sndPlaySound32W --- include/debug.h | 166 +++++------ include/debugdefs.h | 6 +- include/multimedia.h | 3 +- multimedia/Makefile.in | 1 + multimedia/mcianim.c | 2 +- multimedia/mciavi.c | 316 ++++++++++++++++++++ multimedia/mcimidi.c | 287 +++++++++---------- multimedia/mciwave.c | 66 +++-- multimedia/midi.c | 6 +- multimedia/mixer.c | 152 ++++++---- multimedia/mmsystem.c | 634 ++++++++++++++++++++++------------------- relay32/winmm.spec | 2 +- 12 files changed, 1039 insertions(+), 602 deletions(-) create mode 100644 multimedia/mciavi.c diff --git a/include/debug.h b/include/debug.h index 363f1d1d407..e60a252709f 100644 --- a/include/debug.h +++ b/include/debug.h @@ -73,88 +73,90 @@ #define dbch_local 65 #define dbch_mci 66 #define dbch_mcianim 67 -#define dbch_mcimidi 68 -#define dbch_mciwave 69 -#define dbch_mdi 70 -#define dbch_menu 71 -#define dbch_message 72 -#define dbch_metafile 73 -#define dbch_midi 74 -#define dbch_mmaux 75 -#define dbch_mmio 76 -#define dbch_mmsys 77 -#define dbch_mmtime 78 -#define dbch_module 79 -#define dbch_monthcal 80 -#define dbch_mpr 81 -#define dbch_msacm 82 -#define dbch_msg 83 -#define dbch_msvideo 84 -#define dbch_nativefont 85 -#define dbch_nonclient 86 -#define dbch_ntdll 87 -#define dbch_ole 88 -#define dbch_pager 89 -#define dbch_palette 90 -#define dbch_pidl 91 -#define dbch_print 92 -#define dbch_process 93 -#define dbch_profile 94 -#define dbch_progress 95 -#define dbch_prop 96 -#define dbch_propsheet 97 -#define dbch_psapi 98 -#define dbch_psdrv 99 -#define dbch_ras 100 -#define dbch_rebar 101 -#define dbch_reg 102 -#define dbch_region 103 -#define dbch_relay 104 -#define dbch_resource 105 -#define dbch_scroll 106 -#define dbch_security 107 -#define dbch_segment 108 -#define dbch_selector 109 -#define dbch_sem 110 -#define dbch_sendmsg 111 -#define dbch_server 112 -#define dbch_shell 113 -#define dbch_shm 114 -#define dbch_snoop 115 -#define dbch_sound 116 -#define dbch_static 117 -#define dbch_statusbar 118 -#define dbch_stress 119 -#define dbch_string 120 -#define dbch_syscolor 121 -#define dbch_system 122 -#define dbch_tab 123 -#define dbch_task 124 -#define dbch_text 125 -#define dbch_thread 126 -#define dbch_thunk 127 -#define dbch_timer 128 -#define dbch_toolbar 129 -#define dbch_toolhelp 130 -#define dbch_tooltips 131 -#define dbch_trackbar 132 -#define dbch_treeview 133 -#define dbch_ttydrv 134 -#define dbch_tweak 135 -#define dbch_uitools 136 -#define dbch_updown 137 -#define dbch_ver 138 -#define dbch_virtual 139 -#define dbch_vxd 140 -#define dbch_wave 141 -#define dbch_win 142 -#define dbch_win16drv 143 -#define dbch_win32 144 -#define dbch_wing 145 -#define dbch_winsock 146 -#define dbch_wnet 147 -#define dbch_x11 148 -#define dbch_x11drv 149 +#define dbch_mciavi 68 +#define dbch_mcimidi 69 +#define dbch_mciwave 70 +#define dbch_mdi 71 +#define dbch_menu 72 +#define dbch_message 73 +#define dbch_metafile 74 +#define dbch_midi 75 +#define dbch_mmaux 76 +#define dbch_mmio 77 +#define dbch_mmsys 78 +#define dbch_mmtime 79 +#define dbch_module 80 +#define dbch_monthcal 81 +#define dbch_mpr 82 +#define dbch_msacm 83 +#define dbch_msg 84 +#define dbch_msvideo 85 +#define dbch_nativefont 86 +#define dbch_nonclient 87 +#define dbch_ntdll 88 +#define dbch_ole 89 +#define dbch_pager 90 +#define dbch_palette 91 +#define dbch_pidl 92 +#define dbch_print 93 +#define dbch_process 94 +#define dbch_profile 95 +#define dbch_progress 96 +#define dbch_prop 97 +#define dbch_propsheet 98 +#define dbch_psapi 99 +#define dbch_psdrv 100 +#define dbch_ras 101 +#define dbch_rebar 102 +#define dbch_reg 103 +#define dbch_region 104 +#define dbch_relay 105 +#define dbch_resource 106 +#define dbch_scroll 107 +#define dbch_security 108 +#define dbch_segment 109 +#define dbch_selector 110 +#define dbch_sem 111 +#define dbch_sendmsg 112 +#define dbch_server 113 +#define dbch_shell 114 +#define dbch_shm 115 +#define dbch_snoop 116 +#define dbch_sound 117 +#define dbch_static 118 +#define dbch_statusbar 119 +#define dbch_stress 120 +#define dbch_string 121 +#define dbch_syscolor 122 +#define dbch_system 123 +#define dbch_tab 124 +#define dbch_task 125 +#define dbch_text 126 +#define dbch_thread 127 +#define dbch_thunk 128 +#define dbch_timer 129 +#define dbch_toolbar 130 +#define dbch_toolhelp 131 +#define dbch_tooltips 132 +#define dbch_trackbar 133 +#define dbch_treeview 134 +#define dbch_ttydrv 135 +#define dbch_tweak 136 +#define dbch_uitools 137 +#define dbch_unknown 138 +#define dbch_updown 139 +#define dbch_ver 140 +#define dbch_virtual 141 +#define dbch_vxd 142 +#define dbch_wave 143 +#define dbch_win 144 +#define dbch_win16drv 145 +#define dbch_win32 146 +#define dbch_wing 147 +#define dbch_winsock 148 +#define dbch_wnet 149 +#define dbch_x11 150 +#define dbch_x11drv 151 /* Definitions for classes identifiers */ #define dbcl_fixme 0 #define dbcl_err 1 diff --git a/include/debugdefs.h b/include/debugdefs.h index 9764deafc7b..062fe3d9b1e 100644 --- a/include/debugdefs.h +++ b/include/debugdefs.h @@ -4,7 +4,7 @@ #include "debugtools.h" #endif -#define DEBUG_CHANNEL_COUNT 150 +#define DEBUG_CHANNEL_COUNT 152 #ifdef DEBUG_RUNTIME short debug_msg_enabled[][DEBUG_CLASS_COUNT] = { {1, 1, 0, 0}, @@ -157,6 +157,8 @@ short debug_msg_enabled[][DEBUG_CLASS_COUNT] = { {1, 1, 0, 0}, {1, 1, 0, 0}, {1, 1, 0, 0}, +{1, 1, 0, 0}, +{1, 1, 0, 0}, }; const char* debug_ch_name[] = { "accel", @@ -227,6 +229,7 @@ const char* debug_ch_name[] = { "local", "mci", "mcianim", +"mciavi", "mcimidi", "mciwave", "mdi", @@ -296,6 +299,7 @@ const char* debug_ch_name[] = { "ttydrv", "tweak", "uitools", +"unknown", "updown", "ver", "virtual", diff --git a/include/multimedia.h b/include/multimedia.h index 11ac6a4ba11..fd117147eb7 100644 --- a/include/multimedia.h +++ b/include/multimedia.h @@ -18,7 +18,6 @@ * a good way to do so. */ #define MAX_MIDIOUTDRV (16) -#define MAX_MCIMIDIDRV (1) #if defined(HAVE_SYS_SOUNDCARD_H) # include @@ -81,5 +80,7 @@ LONG MCICDAUDIO_DriverProc32(DWORD dwDevID, HDRVR16 hDriv, DWORD wMsg, DWORD dwParam1, DWORD dwParam2); LONG MCIANIM_DriverProc32(DWORD dwDevID, HDRVR16 hDriv, DWORD wMsg, DWORD dwParam1, DWORD dwParam2); +LONG MCIAVI_DriverProc32(DWORD dwDevID, HDRVR16 hDriv, DWORD wMsg, + DWORD dwParam1, DWORD dwParam2); #endif /* __WINE_MULTIMEDIA_H */ diff --git a/multimedia/Makefile.in b/multimedia/Makefile.in index 7fe03ba606b..d0f65273048 100644 --- a/multimedia/Makefile.in +++ b/multimedia/Makefile.in @@ -12,6 +12,7 @@ C_SRCS = \ init.c \ joystick.c \ mcianim.c \ + mciavi.c \ mcicda.c \ mcimidi.c \ mcistring.c \ diff --git a/multimedia/mcianim.c b/multimedia/mcianim.c index 767de27e0c8..16cf0ab85ca 100644 --- a/multimedia/mcianim.c +++ b/multimedia/mcianim.c @@ -597,7 +597,7 @@ LONG MCIANIM_DriverProc32(DWORD dwDevID, HDRVR16 hDriv, DWORD wMsg, case DRV_ENABLE: return 1; case DRV_DISABLE: return 1; case DRV_QUERYCONFIGURE: return 1; - case DRV_CONFIGURE: MessageBox16(0, "Sample MultiMedia Linux Driver !", "MMLinux Driver", MB_OK); return 1; + case DRV_CONFIGURE: MessageBox32A(0, "Sample MultiMedia Linux Driver !", "MMLinux Driver", MB_OK); return 1; case DRV_INSTALL: return DRVCNF_RESTART; case DRV_REMOVE: return DRVCNF_RESTART; diff --git a/multimedia/mciavi.c b/multimedia/mciavi.c new file mode 100644 index 00000000000..c0f66e4f0cb --- /dev/null +++ b/multimedia/mciavi.c @@ -0,0 +1,316 @@ +/* + * Digital video MCI Wine Driver + * + * Copyright 1999 Eric POUECH + */ + +#include "wine/winuser16.h" +#include "multimedia.h" +#include "user.h" +#include "driver.h" +#include "xmalloc.h" +#include "debug.h" +#include "callback.h" +#include "options.h" + +typedef struct { + int nUseCount; /* Incremented for each shared open */ + BOOL16 fShareable; /* TRUE if first open was shareable */ + WORD wNotifyDeviceID; /* MCI device ID with a pending notification */ + HANDLE16 hCallback; /* Callback handle for pending notification */ + HMMIO32 hFile; /* mmio file handle open as Element */ + MCI_OPEN_PARMS32A openParms; + DWORD dwTimeFormat; +} WINE_MCIAVI; + +#define MAX_MCIAVIDRV (1) +static WINE_MCIAVI MCIAviDev[MAX_MCIAVIDRV]; + +/*======================================================================* + * MCI AVI implemantation * + *======================================================================*/ + +/************************************************************************** + * AVI_mciGetOpenDev [internal] + */ +static WINE_MCIAVI* AVI_mciGetOpenDev(UINT16 wDevID) +{ + if (wDevID >= MAX_MCIAVIDRV || MCIAviDev[wDevID].nUseCount == 0) { + WARN(mciavi, "Invalid wDevID=%u\n", wDevID); + return 0; + } + return &MCIAviDev[wDevID]; +} + +static DWORD AVI_mciStop(UINT16 wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms); + +static DWORD AVI_mciOpen(UINT16 wDevID, DWORD dwFlags, LPMCI_OPEN_PARMS32A lpParms) +{ + WINE_MCIAVI* wma; + + TRACE(mciavi, "(%04x, %08lX, %p) : semi-stub\n", wDevID, dwFlags, lpParms); + + if (lpParms == NULL) return MCIERR_NULL_PARAMETER_BLOCK; + if (wDevID > MAX_MCIAVIDRV) return MCIERR_INVALID_DEVICE_ID; + + wma = &MCIAviDev[wDevID]; + + if (wma->nUseCount > 0) { + /* The driver is already open on this channel */ + /* If the driver was opened shareable before and this open specifies */ + /* shareable then increment the use count */ + if (wma->fShareable && (dwFlags & MCI_OPEN_SHAREABLE)) + ++wma->nUseCount; + else + return MCIERR_MUST_USE_SHAREABLE; + } else { + wma->nUseCount = 1; + wma->fShareable = dwFlags & MCI_OPEN_SHAREABLE; + } + if (dwFlags & MCI_OPEN_ELEMENT) { + TRACE(cdaudio,"MCI_OPEN_ELEMENT !\n"); + /* return MCIERR_NO_ELEMENT_ALLOWED; */ + } + + wma->openParms.dwCallback = lpParms->dwCallback; + wma->openParms.wDeviceID = (WORD)lpParms->wDeviceID; + wma->openParms.lpstrDeviceType = lpParms->lpstrDeviceType; + wma->openParms.lpstrElementName = lpParms->lpstrElementName; + wma->openParms.lpstrAlias = lpParms->lpstrAlias; + + wma->wNotifyDeviceID = lpParms->wDeviceID; + /* FIXME: do real open */ + /* wmcda->mciMode = MCI_MODE_STOP; */ + wma->dwTimeFormat = MCI_FORMAT_TMSF; + + return 0; + +} + +static DWORD AVI_mciClose(UINT16 wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms) +{ + WINE_MCIAVI* wma = AVI_mciGetOpenDev(wDevID); + + TRACE(mciavi, "(%04x, %08lX, %p) : semi-stub\n", wDevID, dwFlags, lpParms); + + if (wma == NULL) return MCIERR_INVALID_DEVICE_ID; + + if (wma->nUseCount == 1) { + AVI_mciStop(wDevID, 0, NULL); + /* FIXME: do real closing */ + } + wma->nUseCount--; + return 0; +} + +static DWORD AVI_mciPlay(UINT16 wDevID, DWORD dwFlags, LPMCI_PLAY_PARMS lpParms) +{ + TRACE(mciavi, "(%04x, %08lX, %p) : stub\n", wDevID, dwFlags, lpParms); + return 0; +} + +static DWORD AVI_mciRecord(UINT16 wDevID, DWORD dwFlags, LPMCI_RECORD_PARMS lpParms) +{ + TRACE(mciavi, "(%04x, %08lX, %p) : stub\n", wDevID, dwFlags, lpParms); + return 0; +} + +static DWORD AVI_mciStop(UINT16 wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms) +{ + TRACE(mciavi, "(%04x, %08lX, %p) : stub\n", wDevID, dwFlags, lpParms); + return 0; +} + +static DWORD AVI_mciSet(UINT16 wDevID, DWORD dwFlags, LPMCI_SET_PARMS lpParms) +{ + TRACE(mciavi, "(%04x, %08lX, %p) : stub\n", wDevID, dwFlags, lpParms); + return 0; +} + +static DWORD AVI_mciPause(UINT16 wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms) +{ + TRACE(mciavi, "(%04x, %08lX, %p) : stub\n", wDevID, dwFlags, lpParms); + return 0; +} + +static DWORD AVI_mciResume(UINT16 wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms) +{ + TRACE(mciavi, "(%04x, %08lX, %p) : stub\n", wDevID, dwFlags, lpParms); + return 0; +} + +static DWORD AVI_mciStatus(UINT16 wDevID, DWORD dwFlags, LPMCI_STATUS_PARMS lpParms) +{ + TRACE(mciavi, "(%04x, %08lX, %p) : stub\n", wDevID, dwFlags, lpParms); + return 0; +} + +static DWORD AVI_mciGetDevCaps(UINT16 wDevID, DWORD dwFlags, LPMCI_GETDEVCAPS_PARMS lpParms) +{ + WINE_MCIAVI* wmm = AVI_mciGetOpenDev(wDevID); + + TRACE(mciavi, "(%04x, %08lX, %p) : stub\n", wDevID, dwFlags, lpParms); + + if (lpParms == NULL) return MCIERR_NULL_PARAMETER_BLOCK; + if (wmm == NULL) return MCIERR_INVALID_DEVICE_ID; + + if (dwFlags & MCI_GETDEVCAPS_ITEM) { + switch (lpParms->dwItem) { + case MCI_GETDEVCAPS_DEVICE_TYPE: + TRACE(mciavi, "MCI_GETDEVCAPS_DEVICE_TYPE !\n"); + lpParms->dwReturn = MCI_DEVTYPE_DIGITAL_VIDEO; + break; + case MCI_GETDEVCAPS_HAS_AUDIO: + TRACE(mciavi, "MCI_GETDEVCAPS_HAS_AUDIO !\n"); + lpParms->dwReturn = TRUE; + break; + case MCI_GETDEVCAPS_HAS_VIDEO: + TRACE(mciavi, "MCI_GETDEVCAPS_HAS_VIDEO !\n"); + lpParms->dwReturn = TRUE; + break; + case MCI_GETDEVCAPS_USES_FILES: + TRACE(mciavi, "MCI_GETDEVCAPS_USES_FILES !\n"); + lpParms->dwReturn = TRUE; + break; + case MCI_GETDEVCAPS_COMPOUND_DEVICE: + TRACE(mciavi, "MCI_GETDEVCAPS_COMPOUND_DEVICE !\n"); + lpParms->dwReturn = TRUE; + break; + case MCI_GETDEVCAPS_CAN_EJECT: + TRACE(mciavi, "MCI_GETDEVCAPS_CAN_EJECT !\n"); + lpParms->dwReturn = FALSE; + break; + case MCI_GETDEVCAPS_CAN_PLAY: + TRACE(mciavi, "MCI_GETDEVCAPS_CAN_PLAY !\n"); + lpParms->dwReturn = TRUE; + break; + case MCI_GETDEVCAPS_CAN_RECORD: + TRACE(mciavi, "MCI_GETDEVCAPS_CAN_RECORD !\n"); + lpParms->dwReturn = FALSE; + break; + case MCI_GETDEVCAPS_CAN_SAVE: + TRACE(mciavi, "MCI_GETDEVCAPS_CAN_SAVE !\n"); + lpParms->dwReturn = FALSE; + break; + default: + TRACE(mciavi, "Unknown capability (%08lx) !\n", lpParms->dwItem); + return MCIERR_UNRECOGNIZED_COMMAND; + } + } else { + TRACE(mciavi, "No GetDevCaps-Item !\n"); + return MCIERR_UNRECOGNIZED_COMMAND; + } + return 0; +} + +static DWORD AVI_mciInfo(UINT16 wDevID, DWORD dwFlags, LPMCI_INFO_PARMS32A lpParms) +{ + DWORD ret = 0; + LPSTR str = 0; + WINE_MCIAVI* wma = AVI_mciGetOpenDev(wDevID); + + TRACE(mciavi, "(%04X, %08lX, %p) : stub;\n", wDevID, dwFlags, lpParms); + + if (lpParms == NULL || lpParms->lpstrReturn == NULL) { + ret = MCIERR_NULL_PARAMETER_BLOCK; + } else if (wma == NULL) { + ret = MCIERR_INVALID_DEVICE_ID; + } else { + TRACE(mciavi, "buf=%p, len=%lu\n", lpParms->lpstrReturn, lpParms->dwRetSize); + + switch (dwFlags) { + case MCI_INFO_PRODUCT: + str = "Wine's AVI player"; + break; + case MCI_INFO_FILE: + str = ""; + break; +#if 0 + /* FIXME: the following manifest constants are not defined in /include/mmsystem.h */ + case MCI_INFO_COPYRIGHT: + break; + case MCI_INFO_NAME: + break; +#endif + default: + WARN(mciavi, "Don't know this info command (%lu)\n", dwFlags); + ret = MCIERR_UNRECOGNIZED_COMMAND; + } + } + if (str) { + ret = MCI_WriteString(lpParms->lpstrReturn, lpParms->dwRetSize, str); + } else { + lpParms->lpstrReturn[0] = 0; + } + + return ret; +} + +static DWORD AVI_mciSeek(UINT16 wDevID, DWORD dwFlags, LPMCI_SEEK_PARMS lpParms) +{ + TRACE(mciavi, "(%04x, %08lX, %p) : stub\n", wDevID, dwFlags, lpParms); + return 0; +} + + +/*======================================================================* + * MCI AVI entry points * + *======================================================================*/ + +/************************************************************************** + * MCIAVI_DriverProc32 [sample driver] + */ +LONG WINAPI MCIAVI_DriverProc32(DWORD dwDevID, HDRVR16 hDriv, DWORD wMsg, + DWORD dwParam1, DWORD dwParam2) +{ + switch (wMsg) { + case DRV_LOAD: return 1; + case DRV_FREE: return 1; + case DRV_OPEN: return 1; + case DRV_CLOSE: return 1; + case DRV_ENABLE: return 1; + case DRV_DISABLE: return 1; + case DRV_QUERYCONFIGURE: return 1; + case DRV_CONFIGURE: MessageBox32A(0, "Sample AVI Wine Driver !", "MM-Wine Driver", MB_OK); return 1; + case DRV_INSTALL: return DRVCNF_RESTART; + case DRV_REMOVE: return DRVCNF_RESTART; + case MCI_OPEN_DRIVER: return AVI_mciOpen (dwDevID, dwParam1, (LPMCI_OPEN_PARMS32A) dwParam2); + case MCI_CLOSE_DRIVER: return AVI_mciClose (dwDevID, dwParam1, (LPMCI_GENERIC_PARMS) dwParam2); + case MCI_PLAY: return AVI_mciPlay (dwDevID, dwParam1, (LPMCI_PLAY_PARMS) dwParam2); + case MCI_RECORD: return AVI_mciRecord (dwDevID, dwParam1, (LPMCI_RECORD_PARMS) dwParam2); + case MCI_STOP: return AVI_mciStop (dwDevID, dwParam1, (LPMCI_GENERIC_PARMS) dwParam2); + case MCI_SET: return AVI_mciSet (dwDevID, dwParam1, (LPMCI_SET_PARMS) dwParam2); + case MCI_PAUSE: return AVI_mciPause (dwDevID, dwParam1, (LPMCI_GENERIC_PARMS) dwParam2); + case MCI_RESUME: return AVI_mciResume (dwDevID, dwParam1, (LPMCI_GENERIC_PARMS) dwParam2); + case MCI_STATUS: return AVI_mciStatus (dwDevID, dwParam1, (LPMCI_STATUS_PARMS) dwParam2); + case MCI_GETDEVCAPS: return AVI_mciGetDevCaps(dwDevID, dwParam1, (LPMCI_GETDEVCAPS_PARMS)dwParam2); + case MCI_INFO: return AVI_mciInfo (dwDevID, dwParam1, (LPMCI_INFO_PARMS32A) dwParam2); + case MCI_SEEK: return AVI_mciSeek (dwDevID, dwParam1, (LPMCI_SEEK_PARMS) dwParam2); + case MCI_LOAD: + case MCI_SAVE: + case MCI_FREEZE: + case MCI_PUT: + case MCI_REALIZE: + case MCI_UNFREEZE: + case MCI_UPDATE: + case MCI_WHERE: + case MCI_WINDOW: + case MCI_STEP: + case MCI_SPIN: + case MCI_ESCAPE: + case MCI_COPY: + case MCI_CUT: + case MCI_DELETE: + case MCI_PASTE: + WARN(mciavi, "Unsupported command=%s\n", MCI_CommandToString(wMsg)); + break; + case MCI_OPEN: + case MCI_CLOSE: + FIXME(mciavi, "Shouldn't receive a MCI_OPEN or CLOSE message\n"); + break; + default: + TRACE(mciavi, "Sending msg=%s to default driver proc\n", MCI_CommandToString(wMsg)); + return DefDriverProc32(dwDevID, hDriv, wMsg, dwParam1, dwParam2); + } + return MCIERR_UNRECOGNIZED_COMMAND; +} diff --git a/multimedia/mcimidi.c b/multimedia/mcimidi.c index f2a214935ac..5f14fce8ba9 100644 --- a/multimedia/mcimidi.c +++ b/multimedia/mcimidi.c @@ -65,6 +65,7 @@ typedef struct { DWORD dwStartTicks; } WINE_MCIMIDI; +#define MAX_MCIMIDIDRV (1) static WINE_MCIMIDI MCIMidiDev[MAX_MCIMIDIDRV]; /*======================================================================* @@ -90,13 +91,13 @@ static WINE_MCIMIDI* MIDI_mciGetOpenDev(UINT16 wDevID) static DWORD MIDI_mciReadByte(WINE_MCIMIDI* wmm, BYTE *lpbyt) { DWORD ret = 0; - + if (lpbyt == NULL || mmioRead32(wmm->hFile, (HPSTR)lpbyt, (long)sizeof(BYTE)) != (long)sizeof(BYTE)) { WARN(mcimidi, "Error reading wmm=%p\n", wmm); ret = MCIERR_INTERNAL; } - + return ret; } @@ -107,7 +108,7 @@ static DWORD MIDI_mciReadWord(WINE_MCIMIDI* wmm, LPWORD lpw) { BYTE hibyte, lobyte; DWORD ret = MCIERR_INTERNAL; - + if (lpw != NULL && MIDI_mciReadByte(wmm, &hibyte) == 0 && MIDI_mciReadByte(wmm, &lobyte) == 0) { @@ -124,7 +125,7 @@ static DWORD MIDI_mciReadLong(WINE_MCIMIDI* wmm, LPDWORD lpdw) { WORD hiword, loword; DWORD ret = MCIERR_INTERNAL; - + if (lpdw != NULL && MIDI_mciReadWord(wmm, &hiword) == 0 && MIDI_mciReadWord(wmm, &loword) == 0) { @@ -142,7 +143,7 @@ static WORD MIDI_mciReadVaryLen(WINE_MCIMIDI* wmm, LPDWORD lpdw) BYTE byte; DWORD value = 0; WORD ret = 0; - + if (lpdw == NULL) { ret = MCIERR_INTERNAL; } else { @@ -171,7 +172,7 @@ static DWORD MIDI_mciReadNextEvent(WINE_MCIMIDI* wmm, MCI_MIDITRACK* mmt) DWORD evtPulse; DWORD evtLength; DWORD tmp; - + if (mmioSeek32(wmm->hFile, mmt->dwIndex, SEEK_SET) != mmt->dwIndex) { WARN(mcimidi, "Can't seek at %08lX \n", mmt->dwIndex); return MCIERR_INTERNAL; @@ -219,15 +220,15 @@ static DWORD MIDI_mciReadNextEvent(WINE_MCIMIDI* wmm, MCI_MIDITRACK* mmt) } if (mmt->dwIndex + evtLength > mmt->dwLast) return MCIERR_INTERNAL; - + mmt->dwEventPulse += evtPulse; mmt->dwEventData = (hw << 16) + (b2 << 8) + b1; mmt->wEventLength = evtLength; - + /* - TRACE(mcimidi, "[%u] => pulse=%08lx(%08lx), data=%08lx, length=%u\n", - mmt->wTrackNr, mmt->dwEventPulse, evtPulse, - mmt->dwEventData, mmt->wEventLength); + TRACE(mcimidi, "[%u] => pulse=%08lx(%08lx), data=%08lx, length=%u\n", + mmt->wTrackNr, mmt->dwEventPulse, evtPulse, + mmt->dwEventData, mmt->wEventLength); */ return 0; } @@ -239,47 +240,47 @@ static DWORD MIDI_mciReadMTrk(WINE_MCIMIDI* wmm, MCI_MIDITRACK* mmt) { DWORD toberead; FOURCC fourcc; - + if (mmioRead32(wmm->hFile, (HPSTR)&fourcc, (long)sizeof(FOURCC)) != (long)sizeof(FOURCC)) { return MCIERR_INTERNAL; } - + if (fourcc != mmioFOURCC('M', 'T', 'r', 'k')) { WARN(mcimidi, "Can't synchronize on 'MTrk' !\n"); return MCIERR_INTERNAL; } - + if (MIDI_mciReadLong(wmm, &toberead) != 0) { return MCIERR_INTERNAL; } mmt->dwFirst = mmioSeek32(wmm->hFile, 0, SEEK_CUR); /* >= 0 */ mmt->dwLast = mmt->dwFirst + toberead; - + /* compute # of pulses in this track */ mmt->dwIndex = mmt->dwFirst; mmt->dwEventPulse = 0; - + while (MIDI_mciReadNextEvent(wmm, mmt) == 0 && LOWORD(mmt->dwEventData) != 0x2FFF) { mmt->dwIndex += mmt->wEventLength; } mmt->dwLength = mmt->dwEventPulse; - + TRACE(mcimidi, "Track %u has %lu bytes and %lu pulses\n", mmt->wTrackNr, toberead, mmt->dwLength); - + /* reset track data */ mmt->wStatus = 1; /* ok, playing */ mmt->dwIndex = mmt->dwFirst; mmt->dwEventPulse = 0; - + if (mmioSeek32(wmm->hFile, 0, SEEK_CUR) != mmt->dwLast) { WARN(mcimidi, "Ouch, out of sync seek=%lu track=%lu\n", mmioSeek32(wmm->hFile, 0, SEEK_CUR), mmt->dwLast); /* position at end of this track, to be ready to read next track */ mmioSeek32(wmm->hFile, mmt->dwLast, SEEK_SET); } - + return 0; } @@ -291,9 +292,9 @@ static DWORD MIDI_mciReadMThd(WINE_MCIMIDI* wmm, DWORD dwOffset) DWORD toberead; FOURCC fourcc; WORD nt; - + TRACE(mcimidi, "(%p, %08lX);\n", wmm, dwOffset); - + if (mmioSeek32(wmm->hFile, dwOffset, SEEK_SET) != dwOffset) { WARN(mcimidi, "Can't seek at %08lX begin of 'MThd' \n", dwOffset); return MCIERR_INTERNAL; @@ -301,24 +302,24 @@ static DWORD MIDI_mciReadMThd(WINE_MCIMIDI* wmm, DWORD dwOffset) if (mmioRead32(wmm->hFile, (HPSTR)&fourcc, (long) sizeof(FOURCC)) != (long) sizeof(FOURCC)) return MCIERR_INTERNAL; - + if (fourcc != mmioFOURCC('M', 'T', 'h', 'd')) { WARN(mcimidi, "Can't synchronize on 'MThd' !\n"); return MCIERR_INTERNAL; } - + if (MIDI_mciReadLong(wmm, &toberead) != 0 || toberead < 3 * sizeof(WORD)) return MCIERR_INTERNAL; - + if (MIDI_mciReadWord(wmm, &wmm->wFormat) != 0 || MIDI_mciReadWord(wmm, &wmm->nTracks) != 0 || MIDI_mciReadWord(wmm, &wmm->nDivision) != 0) { return MCIERR_INTERNAL; } - + TRACE(mcimidi, "toberead=0x%08lX, wFormat=0x%04X nTracks=0x%04X nDivision=0x%04X\n", toberead, wmm->wFormat, wmm->nTracks, wmm->nDivision); - + /* MS doc says that the MIDI MCI time format must be put by default to the format * stored in the MIDI file... */ @@ -330,8 +331,8 @@ static DWORD MIDI_mciReadMThd(WINE_MCIMIDI* wmm, DWORD dwOffset) * these files, I'd like to know about. */ FIXME(mcimidi, "Handling SMPTE time in MIDI files has not been tested\n" - "Please report to comp.emulators.ms-windows.wine with MIDI file !\n"); - + "Please report to comp.emulators.ms-windows.wine with MIDI file !\n"); + switch (HIBYTE(wmm->nDivision)) { case 0xE8: wmm->dwMciTimeFormat = MCI_FORMAT_SMPTE_24; break; /* -24 */ case 0xE7: wmm->dwMciTimeFormat = MCI_FORMAT_SMPTE_25; break; /* -25 */ @@ -358,7 +359,7 @@ static DWORD MIDI_mciReadMThd(WINE_MCIMIDI* wmm, DWORD dwOffset) } else { wmm->dwMciTimeFormat = MCI_FORMAT_MILLISECONDS; } - + switch (wmm->wFormat) { case 0: if (wmm->nTracks != 1) { @@ -371,24 +372,24 @@ static DWORD MIDI_mciReadMThd(WINE_MCIMIDI* wmm, DWORD dwOffset) break; default: WARN(mcimidi, "Handling MIDI files which format = %d is not (yet) supported\n" - "Please report with MIDI file !\n", wmm->wFormat); + "Please report with MIDI file !\n", wmm->wFormat); return MCIERR_INTERNAL; } - + if (wmm->nTracks & 0x8000) { /* this shouldn't be a problem... */ WARN(mcimidi, "Ouch !! Implementation limitation to 32k tracks per MIDI file is overflowed\n"); wmm->nTracks = 0x7FFF; } - + wmm->tracks = xmalloc(sizeof(MCI_MIDITRACK) * wmm->nTracks); - + toberead -= 3 * sizeof(WORD); if (toberead > 0) { TRACE(mcimidi, "Size of MThd > 6, skipping %ld extra bytes\n", toberead); mmioSeek32(wmm->hFile, toberead, SEEK_CUR); } - + for (nt = 0; nt < wmm->nTracks; nt++) { wmm->tracks[nt].wTrackNr = nt; if (MIDI_mciReadMTrk(wmm, &wmm->tracks[nt]) != 0) { @@ -396,9 +397,9 @@ static DWORD MIDI_mciReadMThd(WINE_MCIMIDI* wmm, DWORD dwOffset) return MCIERR_INTERNAL; } } - + wmm->dwTempo = 500000; - + return 0; } @@ -408,7 +409,7 @@ static DWORD MIDI_mciReadMThd(WINE_MCIMIDI* wmm, DWORD dwOffset) static DWORD MIDI_ConvertPulseToMS(WINE_MCIMIDI* wmm, DWORD pulse) { DWORD ret = 0; - + /* FIXME: this function may return false values since the tempo (wmm->dwTempo) * may change during file playing */ @@ -422,12 +423,12 @@ static DWORD MIDI_ConvertPulseToMS(WINE_MCIMIDI* wmm, DWORD pulse) ret = (DWORD)((double)pulse * ((double)wmm->dwTempo / 1000) / (double)wmm->nDivision); } - + /* TRACE(mcimidi, "pulse=%lu tempo=%lu division=%u=0x%04x => ms=%lu\n", pulse, wmm->dwTempo, wmm->nDivision, wmm->nDivision, ret); */ - + return ret; } @@ -441,7 +442,7 @@ static DWORD MIDI_ConvertPulseToMS(WINE_MCIMIDI* wmm, DWORD pulse) static DWORD MIDI_ConvertTimeFormatToMS(WINE_MCIMIDI* wmm, DWORD val) { DWORD ret = 0; - + switch (wmm->dwMciTimeFormat) { case MCI_FORMAT_MILLISECONDS: ret = val; @@ -477,7 +478,7 @@ static DWORD MIDI_ConvertMSToTimeFormat(WINE_MCIMIDI* wmm, DWORD _val) { DWORD ret = 0, val = _val; DWORD h, m, s, f; - + switch (wmm->dwMciTimeFormat) { case MCI_FORMAT_MILLISECONDS: ret = val; @@ -546,16 +547,16 @@ static DWORD MIDI_mciOpen(UINT16 wDevID, DWORD dwFlags, LPMCI_OPEN_PARMS32A lpPa DWORD dwRet = 0; DWORD dwDeviceID; WINE_MCIMIDI* wmm; - + TRACE(mcimidi, "(%04x, %08lX, %p)\n", wDevID, dwFlags, lpParms); - + if (lpParms == NULL) return MCIERR_NULL_PARAMETER_BLOCK; if (wDevID >= MAX_MCIMIDIDRV) { WARN(mcimidi, "Invalid wDevID=%u\n", wDevID); return MCIERR_INVALID_DEVICE_ID; } wmm = &MCIMidiDev[wDevID]; - + if (wmm->nUseCount > 0) { /* The driver is already opened on this channel * MIDI sequencer cannot be shared @@ -569,12 +570,12 @@ static DWORD MIDI_mciOpen(UINT16 wDevID, DWORD dwFlags, LPMCI_OPEN_PARMS32A lpPa TRACE(mcimidi, "wDevID=%04X (lpParams->wDeviceID=%08lX)\n", wDevID, dwDeviceID); /* lpParms->wDeviceID = wDevID;*/ - + if (dwFlags & MCI_OPEN_ELEMENT) { LPSTR lpstrElementName; - + lpstrElementName = lpParms->lpstrElementName; - + TRACE(mcimidi, "MCI_OPEN_ELEMENT '%s' !\n", lpstrElementName); if (lpstrElementName && strlen(lpstrElementName) > 0) { wmm->hFile = mmioOpen32A(lpstrElementName, NULL, @@ -589,40 +590,40 @@ static DWORD MIDI_mciOpen(UINT16 wDevID, DWORD dwFlags, LPMCI_OPEN_PARMS32A lpPa } } TRACE(mcimidi, "hFile=%u\n", wmm->hFile); - + memcpy(&wmm->openParms, lpParms, sizeof(MCI_OPEN_PARMS32A)); - + wmm->wNotifyDeviceID = dwDeviceID; wmm->dwStatus = MCI_MODE_NOT_READY; /* while loading file contents */ /* spec says it should be the default format from the MIDI file... */ wmm->dwMciTimeFormat = MCI_FORMAT_MILLISECONDS; - + midiOpenDesc.hMidi = 0; - + if (wmm->hFile != 0) { MMCKINFO ckMainRIFF; MMCKINFO mmckInfo; DWORD dwOffset = 0; - + if (mmioDescend(wmm->hFile, &ckMainRIFF, NULL, 0) != 0) { dwRet = MCIERR_INVALID_FILE; } else { - TRACE(mcimidi,"ParentChunk ckid=%.4s fccType=%.4s cksize=%08lX \n", - (LPSTR)&ckMainRIFF.ckid, (LPSTR)&ckMainRIFF.fccType, ckMainRIFF.cksize); - + TRACE(mcimidi,"ParentChunk ckid=%.4s fccType=%.4s cksize=%08lX \n", + (LPSTR)&ckMainRIFF.ckid, (LPSTR)&ckMainRIFF.fccType, ckMainRIFF.cksize); + if (ckMainRIFF.ckid == FOURCC_RIFF && ckMainRIFF.fccType == mmioFOURCC('R', 'M', 'I', 'D')) { mmckInfo.ckid = mmioFOURCC('d', 'a', 't', 'a'); if (mmioDescend(wmm->hFile, &mmckInfo, &ckMainRIFF, MMIO_FINDCHUNK) == 0) { - TRACE(mcimidi, "... is a 'RMID' file \n"); + TRACE(mcimidi, "... is a 'RMID' file \n"); dwOffset = mmckInfo.dwDataOffset; } else { dwRet = MCIERR_INVALID_FILE; - } + } } if (dwRet == 0 && MIDI_mciReadMThd(wmm, dwOffset) != 0) { - WARN(mcimidi, "Can't read 'MThd' header \n"); + WARN(mcimidi, "Can't read 'MThd' header \n"); dwRet = MCIERR_INVALID_FILE; - } + } } } else { TRACE(mcimidi, "hFile==0, setting #tracks to 0; is this correct ?\n"); @@ -636,12 +637,12 @@ static DWORD MIDI_mciOpen(UINT16 wDevID, DWORD dwFlags, LPMCI_OPEN_PARMS32A lpPa mmioClose32(wmm->hFile, 0); wmm->hFile = 0; } else { - wmm->dwPositionMS = 0; - wmm->dwStatus = MCI_MODE_STOP; + wmm->dwPositionMS = 0; + wmm->dwStatus = MCI_MODE_STOP; wmm->hMidiHdr = USER_HEAP_ALLOC(sizeof(MIDIHDR)); - - dwRet = modMessage(wDevID, MODM_OPEN, 0, (DWORD)&midiOpenDesc, CALLBACK_NULL); - /* dwRet = midMessage(wDevID, MIDM_OPEN, 0, (DWORD)&midiOpenDesc, CALLBACK_NULL);*/ + + dwRet = modMessage(wDevID, MODM_OPEN, 0, (DWORD)&midiOpenDesc, CALLBACK_NULL); + /* dwRet = midMessage(wDevID, MIDM_OPEN, 0, (DWORD)&midiOpenDesc, CALLBACK_NULL);*/ } return dwRet; } @@ -652,14 +653,14 @@ static DWORD MIDI_mciOpen(UINT16 wDevID, DWORD dwFlags, LPMCI_OPEN_PARMS32A lpPa static DWORD MIDI_mciStop(UINT16 wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms) { WINE_MCIMIDI* wmm = MIDI_mciGetOpenDev(wDevID); - + TRACE(mcimidi, "(%04X, %08lX, %p);\n", wDevID, dwFlags, lpParms); - + if (wmm == NULL) return MCIERR_INVALID_DEVICE_ID; - + wmm->dwStatus = MCI_MODE_STOP; TRACE(mcimidi, "wmm->dwStatus=%d\n", wmm->dwStatus); - + if (lpParms && (dwFlags & MCI_NOTIFY)) { TRACE(mcimidi, "MCI_NOTIFY_SUCCESSFUL %08lX !\n", lpParms->dwCallback); mciDriverNotify16((HWND16)LOWORD(lpParms->dwCallback), @@ -675,15 +676,15 @@ static DWORD MIDI_mciClose(UINT16 wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpP { DWORD dwRet; WINE_MCIMIDI* wmm = MIDI_mciGetOpenDev(wDevID); - + TRACE(mcimidi, "(%04X, %08lX, %p);\n", wDevID, dwFlags, lpParms); - + if (wmm == NULL) return MCIERR_INVALID_DEVICE_ID; - + if (wmm->dwStatus != MCI_MODE_STOP) { MIDI_mciStop(wDevID, MCI_WAIT, lpParms); } - + wmm->dwStatus = MCI_MODE_STOP; wmm->nUseCount--; if (wmm->nUseCount == 0) { @@ -704,11 +705,11 @@ static DWORD MIDI_mciClose(UINT16 wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpP TRACE(mcimidi, "Shouldn't happen... nUseCount=%d\n", wmm->nUseCount); return MCIERR_INTERNAL; } - + if (lpParms && (dwFlags & MCI_NOTIFY)) { TRACE(mcimidi, "MCI_NOTIFY_SUCCESSFUL %08lX !\n", lpParms->dwCallback); mciDriverNotify16((HWND16)LOWORD(lpParms->dwCallback), - wmm->wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL); + wmm->wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL); } return 0; } @@ -720,12 +721,12 @@ static MCI_MIDITRACK* MIDI_mciFindNextEvent(WINE_MCIMIDI* wmm, LPDWORD hiPulse) { WORD cnt, nt; MCI_MIDITRACK* mmt; - + *hiPulse = 0xFFFFFFFFul; cnt = 0xFFFFu; for (nt = 0; nt < wmm->nTracks; nt++) { mmt = &wmm->tracks[nt]; - + if (mmt->wStatus == 0) continue; if (mmt->dwEventPulse < *hiPulse) { @@ -747,44 +748,44 @@ static DWORD MIDI_mciPlay(UINT16 wDevID, DWORD dwFlags, LPMCI_PLAY_PARMS lpParms MCI_MIDITRACK* mmt; DWORD hiPulse; WINE_MCIMIDI* wmm = MIDI_mciGetOpenDev(wDevID); - + TRACE(mcimidi, "(%04X, %08lX, %p);\n", wDevID, dwFlags, lpParms); - + if (wmm == NULL) return MCIERR_INVALID_DEVICE_ID; - + if (wmm->hFile == 0) { WARN(mcimidi, "Can't play: no file '%s' !\n", wmm->openParms.lpstrElementName); return MCIERR_FILE_NOT_FOUND; } - + if (wmm->dwStatus != MCI_MODE_STOP) { WARN(mcimidi, "Can't play: device is not stopped !\n"); return MCIERR_INTERNAL; } - + if (!(dwFlags & MCI_WAIT)) { /** FIXME: I'm not 100% sure that wNotifyDeviceID is the right value in all cases ??? */ return MCI_SendCommandAsync32(wmm->wNotifyDeviceID, MCI_PLAY, dwFlags, (DWORD)lpParms); } - + if (lpParms && (dwFlags & MCI_FROM)) { dwStartMS = MIDI_ConvertTimeFormatToMS(wmm, lpParms->dwFrom); } else { dwStartMS = wmm->dwPositionMS; } - + if (lpParms && (dwFlags & MCI_TO)) { dwEndMS = MIDI_ConvertTimeFormatToMS(wmm, lpParms->dwTo); } else { dwEndMS = 0xFFFFFFFFul; } - + TRACE(mcimidi, "Playing from %lu to %lu\n", dwStartMS, dwEndMS); - + /* init tracks */ for (nt = 0; nt < wmm->nTracks; nt++) { mmt = &wmm->tracks[nt]; - + mmt->wStatus = 1; /* ok, playing */ mmt->dwIndex = mmt->dwFirst; if (wmm->wFormat == 2 && nt > 0) { @@ -794,26 +795,26 @@ static DWORD MIDI_mciPlay(UINT16 wDevID, DWORD dwFlags, LPMCI_PLAY_PARMS lpParms } MIDI_mciReadNextEvent(wmm, mmt); /* FIXME == 0 */ } - + wmm->dwPulse = 0; wmm->dwTempo = 500000; wmm->dwStatus = MCI_MODE_PLAY; wmm->dwPositionMS = 0; wmm->wStartedPlaying = FALSE; - + while (wmm->dwStatus != MCI_MODE_STOP) { /* it seems that in case of multi-threading, gcc is optimizing just a little bit * too much. Tell gcc not to optimize status value using volatile. */ while (((volatile WINE_MCIMIDI*)wmm)->dwStatus == MCI_MODE_PAUSE); - + doPlay = (wmm->dwPositionMS >= dwStartMS && wmm->dwPositionMS <= dwEndMS); - + TRACE(mcimidi, "wmm->dwStatus=%d, doPlay=%s\n", wmm->dwStatus, doPlay ? "T" : "F"); - + if ((mmt = MIDI_mciFindNextEvent(wmm, &hiPulse)) == NULL) break; /* no more event on tracks */ - + /* if starting playing, then set StartTicks to the value it would have had * if play had started at position 0 */ @@ -827,7 +828,7 @@ static DWORD MIDI_mciPlay(UINT16 wDevID, DWORD dwFlags, LPMCI_PLAY_PARMS lpParms if (doPlay) { DWORD togo = wmm->dwStartTicks + wmm->dwPositionMS + MIDI_ConvertPulseToMS(wmm, hiPulse - wmm->dwPulse); DWORD tc = GetTickCount(); - + TRACE(mcimidi, "Pulses hi=0x%08lx <> cur=0x%08lx\n", hiPulse, wmm->dwPulse); TRACE(mcimidi, "Wait until %lu => %lu ms\n", tc - wmm->dwStartTicks, togo - wmm->dwStartTicks); @@ -837,7 +838,7 @@ static DWORD MIDI_mciPlay(UINT16 wDevID, DWORD dwFlags, LPMCI_PLAY_PARMS lpParms wmm->dwPositionMS += MIDI_ConvertPulseToMS(wmm, hiPulse - wmm->dwPulse); wmm->dwPulse = hiPulse; } - + switch (LOBYTE(LOWORD(mmt->dwEventData))) { case 0xF0: case 0xF7: /* sysex events */ @@ -852,7 +853,7 @@ static DWORD MIDI_mciPlay(UINT16 wDevID, DWORD dwFlags, LPMCI_PLAY_PARMS lpParms case 0x00: /* 16-bit sequence number */ if (TRACE_ON(midi)) { WORD twd; - + MIDI_mciReadWord(wmm, &twd); /* == 0 */ TRACE(mcimidi, "Got sequence number %u\n", twd); } @@ -870,7 +871,7 @@ static DWORD MIDI_mciPlay(UINT16 wDevID, DWORD dwFlags, LPMCI_PLAY_PARMS lpParms static char* info[8] = {"", "Text", "Copyright", "Seq/Trk name", "Instrument", "Lyric", "Marker", "Cue-point"}; WORD idx = HIBYTE(LOWORD(mmt->dwEventData)); - + if (len >= sizeof(buf)) { WARN(mcimidi, "Buffer for text is too small (%d bytes, when %u are needed)\n", sizeof(buf) - 1, len); len = sizeof(buf) - 1; @@ -928,7 +929,7 @@ static DWORD MIDI_mciPlay(UINT16 wDevID, DWORD dwFlags, LPMCI_PLAY_PARMS lpParms WARN(mcimidi, "SMPTE track start can only be expressed at start of track (%lu)\n", mmt->dwEventPulse); } else { BYTE h, m, s, f, ff; - + MIDI_mciReadByte(wmm, &h); MIDI_mciReadByte(wmm, &m); MIDI_mciReadByte(wmm, &s); @@ -944,18 +945,18 @@ static DWORD MIDI_mciPlay(UINT16 wDevID, DWORD dwFlags, LPMCI_PLAY_PARMS lpParms MIDI_mciReadByte(wmm, &num); MIDI_mciReadByte(wmm, &den); /* to notate e.g. 6/8 */ MIDI_mciReadByte(wmm, &cpmc); /* number of MIDI clocks per metronome click */ - MIDI_mciReadByte(wmm, &_32npqn); /* number of notated 32nd notes per MIDI quarter note */ - + MIDI_mciReadByte(wmm, &_32npqn); /* number of notated 32nd notes per MIDI quarter note */ + TRACE(mcimidi, "%u/%u, clock per metronome click=%u, 32nd notes by 1/4 note=%u\n", num, 1 << den, cpmc, _32npqn); } break; case 0x59: /* key signature */ if (TRACE_ON(mcimidi)) { BYTE sf, mm; - + MIDI_mciReadByte(wmm, &sf); MIDI_mciReadByte(wmm, &mm); - + if (sf >= 0x80) TRACE(mcimidi, "%d flats\n", -(char)sf); else if (sf > 0) TRACE(mcimidi, "%d sharps\n", (char)sf); else TRACE(mcimidi, "Key of C\n"); @@ -989,7 +990,7 @@ static DWORD MIDI_mciPlay(UINT16 wDevID, DWORD dwFlags, LPMCI_PLAY_PARMS lpParms MIDI_mciReadNextEvent(wmm, mmt); } } - + /* stop all notes */ /* should be (0x7800 | MIDI_CTL_CHANGE) instead of 0x78B0, * but MIDI_CTL_CHANGE is defined in OSS's soundcard.h and MCI must compile @@ -1003,16 +1004,16 @@ static DWORD MIDI_mciPlay(UINT16 wDevID, DWORD dwFlags, LPMCI_PLAY_PARMS lpParms for (chn = 0; chn < 16; chn++) modMessage(wDevID, MODM_DATA, 0, 0x78B0 | chn, 0); } - + wmm->dwStatus = MCI_MODE_STOP; - + /* to restart playing at beginning when it's over */ wmm->dwPositionMS = 0; - + if (lpParms && (dwFlags & MCI_NOTIFY)) { TRACE(mcimidi, "MCI_NOTIFY_SUCCESSFUL %08lX !\n", lpParms->dwCallback); mciDriverNotify16((HWND16)LOWORD(lpParms->dwCallback), - wmm->wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL); + wmm->wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL); } return 0; } @@ -1028,9 +1029,9 @@ static DWORD MIDI_mciRecord(UINT16 wDevID, DWORD dwFlags, LPMCI_RECORD_PARMS lpP WINE_MCIMIDI* wmm = MIDI_mciGetOpenDev(wDevID); TRACE(mcimidi, "(%04X, %08lX, %p);\n", wDevID, dwFlags, lpParms); - + if (wmm == 0) return MCIERR_INVALID_DEVICE_ID; - + if (wmm->hFile == 0) { WARN(mcimidi, "Can't find file='%08lx' !\n", (DWORD)wmm->openParms.lpstrElementName); @@ -1073,7 +1074,7 @@ static DWORD MIDI_mciRecord(UINT16 wDevID, DWORD dwFlags, LPMCI_RECORD_PARMS lpP if (lpParms && (dwFlags & MCI_NOTIFY)) { TRACE(mcimidi, "MCI_NOTIFY_SUCCESSFUL %08lX !\n", lpParms->dwCallback); mciDriverNotify16((HWND16)LOWORD(lpParms->dwCallback), - wmm->wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL); + wmm->wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL); } return 0; } @@ -1084,11 +1085,11 @@ static DWORD MIDI_mciRecord(UINT16 wDevID, DWORD dwFlags, LPMCI_RECORD_PARMS lpP static DWORD MIDI_mciPause(UINT16 wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms) { WINE_MCIMIDI* wmm = MIDI_mciGetOpenDev(wDevID); - + TRACE(mcimidi, "(%04X, %08lX, %p);\n", wDevID, dwFlags, lpParms); - + if (wmm == NULL) return MCIERR_INVALID_DEVICE_ID; - + if (wmm->dwStatus == MCI_MODE_PLAY) { /* stop all notes */ /* see note in MIDI_mciPlay */ @@ -1100,9 +1101,9 @@ static DWORD MIDI_mciPause(UINT16 wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpP if (lpParms && (dwFlags & MCI_NOTIFY)) { TRACE(mcimidi, "MCI_NOTIFY_SUCCESSFUL %08lX !\n", lpParms->dwCallback); mciDriverNotify16((HWND16)LOWORD(lpParms->dwCallback), - wmm->wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL); + wmm->wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL); } - + return 0; } @@ -1112,11 +1113,11 @@ static DWORD MIDI_mciPause(UINT16 wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpP static DWORD MIDI_mciResume(UINT16 wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms) { WINE_MCIMIDI* wmm = MIDI_mciGetOpenDev(wDevID); - + TRACE(mcimidi, "(%04X, %08lX, %p);\n", wDevID, dwFlags, lpParms); - + if (wmm == NULL) return MCIERR_INVALID_DEVICE_ID; - + if (wmm->dwStatus == MCI_MODE_PAUSE) { wmm->wStartedPlaying = FALSE; wmm->dwStatus = MCI_MODE_PLAY; @@ -1124,7 +1125,7 @@ static DWORD MIDI_mciResume(UINT16 wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lp if (lpParms && (dwFlags & MCI_NOTIFY)) { TRACE(mcimidi, "MCI_NOTIFY_SUCCESSFUL %08lX !\n", lpParms->dwCallback); mciDriverNotify16((HWND16)LOWORD(lpParms->dwCallback), - wmm->wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL); + wmm->wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL); } return 0; } @@ -1135,12 +1136,12 @@ static DWORD MIDI_mciResume(UINT16 wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lp static DWORD MIDI_mciSet(UINT16 wDevID, DWORD dwFlags, LPMCI_SET_PARMS lpParms) { WINE_MCIMIDI* wmm = MIDI_mciGetOpenDev(wDevID); - + TRACE(mcimidi, "(%04X, %08lX, %p);\n", wDevID, dwFlags, lpParms); - + if (lpParms == NULL) return MCIERR_NULL_PARAMETER_BLOCK; if (wmm == NULL) return MCIERR_INVALID_DEVICE_ID; - + if (dwFlags & MCI_SET_TIME_FORMAT) { switch (lpParms->dwTimeFormat) { case MCI_FORMAT_MILLISECONDS: @@ -1185,7 +1186,7 @@ static DWORD MIDI_mciSet(UINT16 wDevID, DWORD dwFlags, LPMCI_SET_PARMS lpParms) WARN(mcimidi, "MCI_SET_AUDIO without SET_ON or SET_OFF\n"); return MCIERR_BAD_INTEGER; } - + if (lpParms->dwAudio & MCI_SET_AUDIO_ALL) TRACE(mcimidi, "MCI_SET_AUDIO_ALL !\n"); if (lpParms->dwAudio & MCI_SET_AUDIO_LEFT) @@ -1193,7 +1194,7 @@ static DWORD MIDI_mciSet(UINT16 wDevID, DWORD dwFlags, LPMCI_SET_PARMS lpParms) if (lpParms->dwAudio & MCI_SET_AUDIO_RIGHT) TRACE(mcimidi, "MCI_SET_AUDIO_RIGHT !\n"); } - + if (dwFlags & MCI_SEQ_SET_MASTER) TRACE(mcimidi, "MCI_SEQ_SET_MASTER !\n"); if (dwFlags & MCI_SEQ_SET_SLAVE) @@ -1213,12 +1214,12 @@ static DWORD MIDI_mciSet(UINT16 wDevID, DWORD dwFlags, LPMCI_SET_PARMS lpParms) static DWORD MIDI_mciStatus(UINT16 wDevID, DWORD dwFlags, LPMCI_STATUS_PARMS lpParms) { WINE_MCIMIDI* wmm = MIDI_mciGetOpenDev(wDevID); - + TRACE(mcimidi, "(%04X, %08lX, %p);\n", wDevID, dwFlags, lpParms); - + if (lpParms == NULL) return MCIERR_NULL_PARAMETER_BLOCK; if (wmm == NULL) return MCIERR_INVALID_DEVICE_ID; - + if (dwFlags & MCI_STATUS_ITEM) { switch (lpParms->dwItem) { case MCI_STATUS_CURRENT_TRACK: @@ -1310,7 +1311,7 @@ static DWORD MIDI_mciStatus(UINT16 wDevID, DWORD dwFlags, LPMCI_STATUS_PARMS lpP if (dwFlags & MCI_NOTIFY) { TRACE(mcimidi, "MCI_NOTIFY_SUCCESSFUL %08lX !\n", lpParms->dwCallback); mciDriverNotify16((HWND16)LOWORD(lpParms->dwCallback), - wmm->wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL); + wmm->wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL); } return 0; } @@ -1322,12 +1323,12 @@ static DWORD MIDI_mciGetDevCaps(UINT16 wDevID, DWORD dwFlags, LPMCI_GETDEVCAPS_PARMS lpParms) { WINE_MCIMIDI* wmm = MIDI_mciGetOpenDev(wDevID); - + TRACE(mcimidi, "(%04X, %08lX, %p);\n", wDevID, dwFlags, lpParms); - + if (lpParms == NULL) return MCIERR_NULL_PARAMETER_BLOCK; if (wmm == NULL) return MCIERR_INVALID_DEVICE_ID; - + if (dwFlags & MCI_GETDEVCAPS_ITEM) { switch (lpParms->dwItem) { case MCI_GETDEVCAPS_DEVICE_TYPE: @@ -1385,16 +1386,16 @@ static DWORD MIDI_mciInfo(UINT16 wDevID, DWORD dwFlags, LPMCI_INFO_PARMS32A lpPa DWORD ret = 0; LPSTR str = 0; WINE_MCIMIDI* wmm = MIDI_mciGetOpenDev(wDevID); - + TRACE(mcimidi, "(%04X, %08lX, %p);\n", wDevID, dwFlags, lpParms); - + if (lpParms == NULL || lpParms->lpstrReturn == NULL) { ret = MCIERR_NULL_PARAMETER_BLOCK; } else if (wmm == NULL) { ret = MCIERR_INVALID_DEVICE_ID; } else { TRACE(mcimidi, "buf=%p, len=%lu\n", lpParms->lpstrReturn, lpParms->dwRetSize); - + switch (dwFlags) { case MCI_INFO_PRODUCT: str = "Wine's MIDI sequencer"; @@ -1403,7 +1404,7 @@ static DWORD MIDI_mciInfo(UINT16 wDevID, DWORD dwFlags, LPMCI_INFO_PARMS32A lpPa str = wmm->openParms.lpstrElementName; break; #if 0 - /* FIXME: the following manifest constants are not defined in /include/mmsystem.h */ + /* FIXME: the following manifest constants are not defined in /include/mmsystem.h */ case MCI_INFO_COPYRIGHT: break; case MCI_INFO_NAME: @@ -1419,7 +1420,7 @@ static DWORD MIDI_mciInfo(UINT16 wDevID, DWORD dwFlags, LPMCI_INFO_PARMS32A lpPa } else { lpParms->lpstrReturn[0] = 0; } - + return ret; } @@ -1430,9 +1431,9 @@ static DWORD MIDI_mciSeek(UINT16 wDevID, DWORD dwFlags, LPMCI_SEEK_PARMS lpParms { DWORD ret = 0; WINE_MCIMIDI* wmm = MIDI_mciGetOpenDev(wDevID); - + TRACE(mcimidi, "(%04X, %08lX, %p);\n", wDevID, dwFlags, lpParms); - + if (lpParms == NULL) { ret = MCIERR_NULL_PARAMETER_BLOCK; } else if (wmm == NULL) { @@ -1456,7 +1457,7 @@ static DWORD MIDI_mciSeek(UINT16 wDevID, DWORD dwFlags, LPMCI_SEEK_PARMS lpParms if (dwFlags & MCI_NOTIFY) { TRACE(mcimidi, "MCI_NOTIFY_SUCCESSFUL %08lX !\n", lpParms->dwCallback); mciDriverNotify16((HWND16)LOWORD(lpParms->dwCallback), - wmm->wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL); + wmm->wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL); } } return ret; @@ -1470,8 +1471,8 @@ static DWORD MIDI_mciSeek(UINT16 wDevID, DWORD dwFlags, LPMCI_SEEK_PARMS lpParms /************************************************************************** * MCIMIDI_DriverProc32 [sample driver] */ -LONG MCIMIDI_DriverProc32(DWORD dwDevID, HDRVR16 hDriv, DWORD wMsg, - DWORD dwParam1, DWORD dwParam2) +LONG WINAPI MCIMIDI_DriverProc32(DWORD dwDevID, HDRVR16 hDriv, DWORD wMsg, + DWORD dwParam1, DWORD dwParam2) { switch (wMsg) { case DRV_LOAD: return 1; @@ -1481,7 +1482,7 @@ LONG MCIMIDI_DriverProc32(DWORD dwDevID, HDRVR16 hDriv, DWORD wMsg, case DRV_ENABLE: return 1; case DRV_DISABLE: return 1; case DRV_QUERYCONFIGURE: return 1; - case DRV_CONFIGURE: MessageBox16(0, "Sample Midi Linux Driver !", "MMLinux Driver", MB_OK); return 1; + case DRV_CONFIGURE: MessageBox32A(0, "Sample Midi Linux Driver !", "MMLinux Driver", MB_OK); return 1; case DRV_INSTALL: return DRVCNF_RESTART; case DRV_REMOVE: return DRVCNF_RESTART; #ifdef SNDCTL_MIDI_INFO @@ -1540,4 +1541,4 @@ LONG MCIMIDI_DriverProc32(DWORD dwDevID, HDRVR16 hDriv, DWORD wMsg, return MCIERR_UNRECOGNIZED_COMMAND; } -/*-----------------------------------------------------------------------*/ + diff --git a/multimedia/mciwave.c b/multimedia/mciwave.c index 7490e0bfdc2..b0ae4e758f1 100644 --- a/multimedia/mciwave.c +++ b/multimedia/mciwave.c @@ -178,21 +178,26 @@ static DWORD WAVE_mciOpen(UINT16 wDevID, DWORD dwFlags, LPMCI_WAVE_OPEN_PARMS32A TRACE(mciwave, "wDevID=%04X (lpParams->wDeviceID=%08lX)\n", wDevID, dwDeviceID); if (dwFlags & MCI_OPEN_ELEMENT) { - LPCSTR lpstrElementName; - - lpstrElementName = lpOpenParms->lpstrElementName; - - /*FIXME : what should be done id wmw->hFile is already != 0, or the driver is playin' */ - TRACE(mciwave,"MCI_OPEN_ELEMENT '%s' !\n", lpstrElementName); - if (lpstrElementName && (strlen(lpstrElementName) > 0)) { - wmw->hFile = mmioOpen32A(lpstrElementName, NULL, - MMIO_ALLOCBUF | MMIO_READWRITE | MMIO_EXCLUSIVE); - if (wmw->hFile == 0) { - WARN(mciwave, "can't find file='%s' !\n", lpstrElementName); - return MCIERR_FILE_NOT_FOUND; - } + if (dwFlags & MCI_OPEN_ELEMENT_ID) { + /* could it be that (DWORD)lpOpenParms->lpstrElementName + * contains the hFile value ? + */ + dwRet = MCIERR_UNRECOGNIZED_COMMAND; } else { - wmw->hFile = 0; + LPCSTR lpstrElementName = lpOpenParms->lpstrElementName; + + /*FIXME : what should be done id wmw->hFile is already != 0, or the driver is playin' */ + TRACE(mciwave,"MCI_OPEN_ELEMENT '%s' !\n", lpstrElementName); + if (lpstrElementName && (strlen(lpstrElementName) > 0)) { + wmw->hFile = mmioOpen32A(lpstrElementName, NULL, + MMIO_ALLOCBUF | MMIO_READWRITE | MMIO_EXCLUSIVE); + if (wmw->hFile == 0) { + WARN(mciwave, "can't find file='%s' !\n", lpstrElementName); + dwRet = MCIERR_FILE_NOT_FOUND; + } + } else { + wmw->hFile = 0; + } } } TRACE(mciwave,"hFile=%u\n", wmw->hFile); @@ -203,15 +208,15 @@ static DWORD WAVE_mciOpen(UINT16 wDevID, DWORD dwFlags, LPMCI_WAVE_OPEN_PARMS32A wmw->waveDesc.hWave = 0; - if (wmw->hFile != 0) { + if (dwRet == 0 && wmw->hFile != 0) { MMCKINFO ckMainRIFF; if (mmioDescend(wmw->hFile, &ckMainRIFF, NULL, 0) != 0) { dwRet = MCIERR_INVALID_FILE; } else { - TRACE(mciwave, "ParentChunk ckid=%.4s fccType=%.4s cksize=%08lX \n", - (LPSTR)&ckMainRIFF.ckid, (LPSTR)&ckMainRIFF.fccType, ckMainRIFF.cksize); - if ((ckMainRIFF.ckid != FOURCC_RIFF) || + TRACE(mciwave, "ParentChunk ckid=%.4s fccType=%.4s cksize=%08lX \n", + (LPSTR)&ckMainRIFF.ckid, (LPSTR)&ckMainRIFF.fccType, ckMainRIFF.cksize); + if ((ckMainRIFF.ckid != FOURCC_RIFF) || (ckMainRIFF.fccType != mmioFOURCC('W', 'A', 'V', 'E'))) { dwRet = MCIERR_INVALID_FILE; } else { @@ -222,16 +227,16 @@ static DWORD WAVE_mciOpen(UINT16 wDevID, DWORD dwFlags, LPMCI_WAVE_OPEN_PARMS32A wmw->dwLength = 0; } if (dwRet == 0) { - wmw->WaveFormat.wf.nAvgBytesPerSec = - wmw->WaveFormat.wf.nSamplesPerSec * wmw->WaveFormat.wf.nBlockAlign; - wmw->waveDesc.lpFormat = (LPWAVEFORMAT)&wmw->WaveFormat; - wmw->dwPosition = 0; + wmw->WaveFormat.wf.nAvgBytesPerSec = + wmw->WaveFormat.wf.nSamplesPerSec * wmw->WaveFormat.wf.nBlockAlign; + wmw->waveDesc.lpFormat = (LPWAVEFORMAT)&wmw->WaveFormat; + wmw->dwPosition = 0; - /* By default the device will be opened for output, the MCI_CUE function is there to - * change from output to input and back - */ - dwRet = wodMessage(wDevID, WODM_OPEN, 0, (DWORD)&wmw->waveDesc, CALLBACK_NULL); - wmw->dwStatus = MCI_MODE_STOP; + /* By default the device will be opened for output, the MCI_CUE function is there to + * change from output to input and back + */ + dwRet = wodMessage(wDevID, WODM_OPEN, 0, (DWORD)&wmw->waveDesc, CALLBACK_NULL); + wmw->dwStatus = MCI_MODE_STOP; } else { wmw->nUseCount--; if (wmw->hFile != 0) @@ -757,8 +762,7 @@ static DWORD WAVE_mciStatus(UINT16 wDevID, DWORD dwFlags, LPMCI_STATUS_PARMS lpP TRACE(mciwave,"MCI_WAVE_STATUS_CHANNELS => %lu!\n", lpParms->dwReturn); break; case MCI_WAVE_STATUS_FORMATTAG: - lpParms->dwReturn = wmw->WaveFormat.wf. -wFormatTag; + lpParms->dwReturn = wmw->WaveFormat.wf.wFormatTag; TRACE(mciwave,"MCI_WAVE_FORMATTAG => %lu!\n", lpParms->dwReturn); break; case MCI_WAVE_STATUS_LEVEL: @@ -871,7 +875,7 @@ static DWORD WAVE_mciInfo(UINT16 wDevID, DWORD dwFlags, LPMCI_INFO_PARMS16 lpPar break; default: WARN(mciwave, "Don't know this info command (%lu)\n", dwFlags); - return MCIERR_UNRECOGNIZED_COMMAND; + ret = MCIERR_UNRECOGNIZED_COMMAND; } } if (str) { @@ -904,7 +908,7 @@ LONG MCIWAVE_DriverProc32(DWORD dwDevID, HDRVR16 hDriv, DWORD wMsg, case DRV_ENABLE: return 1; case DRV_DISABLE: return 1; case DRV_QUERYCONFIGURE: return 1; - case DRV_CONFIGURE: MessageBox16(0, "Sample MultiMedia Linux Driver !", "MMLinux Driver", MB_OK); return 1; + case DRV_CONFIGURE: MessageBox32A(0, "Sample MultiMedia Linux Driver !", "MMLinux Driver", MB_OK); return 1; case DRV_INSTALL: return DRVCNF_RESTART; case DRV_REMOVE: return DRVCNF_RESTART; case MCI_OPEN_DRIVER: return WAVE_mciOpen (dwDevID, dwParam1, (LPMCI_WAVE_OPEN_PARMS32A)dwParam2); diff --git a/multimedia/midi.c b/multimedia/midi.c index a698c9cd530..8a5a4e28688 100644 --- a/multimedia/midi.c +++ b/multimedia/midi.c @@ -1541,12 +1541,12 @@ LONG MIDI_DriverProc32(DWORD dwDevID, HDRVR16 hDriv, DWORD wMsg, case DRV_ENABLE: return 1; case DRV_DISABLE: return 1; case DRV_QUERYCONFIGURE: return 1; - case DRV_CONFIGURE: MessageBox16(0, "Sample Midi Linux Driver !", "MMLinux Driver", MB_OK); return 1; + case DRV_CONFIGURE: MessageBox32A(0, "Sample Midi Linux Driver !", "MMLinux Driver", MB_OK); return 1; case DRV_INSTALL: return DRVCNF_RESTART; case DRV_REMOVE: return DRVCNF_RESTART; default: TRACE(midi, "Sending msg=%lu to default driver proc\n", wMsg); - return DefDriverProc32(dwDevID, hDriv, wMsg, dwParam1, dwParam2); + return DefDriverProc16(dwDevID, hDriv, wMsg, dwParam1, dwParam2); } } @@ -1564,7 +1564,7 @@ LONG MIDI_DriverProc16(DWORD dwDevID, HDRVR16 hDriv, WORD wMsg, case DRV_ENABLE: return 1; case DRV_DISABLE: return 1; case DRV_QUERYCONFIGURE: return 1; - case DRV_CONFIGURE: MessageBox16(0, "Sample Midi Linux Driver !", "MMLinux Driver", MB_OK); return 1; + case DRV_CONFIGURE: MessageBox32A(0, "Sample Midi Linux Driver !", "MMLinux Driver", MB_OK); return 1; case DRV_INSTALL: return DRVCNF_RESTART; case DRV_REMOVE: return DRVCNF_RESTART; default: diff --git a/multimedia/mixer.c b/multimedia/mixer.c index d00c39a3dd5..72bded31f4e 100644 --- a/multimedia/mixer.c +++ b/multimedia/mixer.c @@ -24,8 +24,8 @@ static DWORD MIX_GetDevCaps(WORD wDevID, LPMIXERCAPS16 lpCaps, DWORD dwSize) #ifdef HAVE_OSS int mixer,mask; - TRACE(mmaux,"(%04X, %p, %lu);\n", wDevID, lpCaps, dwSize); - if (lpCaps == NULL) return MMSYSERR_NOTENABLED; + TRACE(mmaux, "(%04X, %p, %lu);\n", wDevID, lpCaps, dwSize); + if (lpCaps == NULL) return MMSYSERR_INVALPARAM; if ((mixer = open(MIXER_DEV, O_RDWR)) < 0) { WARN(mmaux, "mixer device not available !\n"); return MMSYSERR_NOTENABLED; @@ -33,7 +33,7 @@ static DWORD MIX_GetDevCaps(WORD wDevID, LPMIXERCAPS16 lpCaps, DWORD dwSize) lpCaps->wMid = 0xAA; lpCaps->wPid = 0x55; lpCaps->vDriverVersion = 0x0100; - strcpy(lpCaps->szPname,"WINE Generic Mixer"); + strcpy(lpCaps->szPname, "WINE Generic Mixer"); if (ioctl(mixer, SOUND_MIXER_READ_DEVMASK, &mask) == -1) { close(mixer); perror("ioctl mixer SOUND_MIXER_DEVMASK"); @@ -53,6 +53,41 @@ static DWORD MIX_GetDevCaps(WORD wDevID, LPMIXERCAPS16 lpCaps, DWORD dwSize) #ifdef HAVE_OSS static char *sdlabels[SOUND_MIXER_NRDEVICES] = SOUND_DEVICE_LABELS; static char *sdnames[SOUND_MIXER_NRDEVICES] = SOUND_DEVICE_NAMES; + +static void MIX_GetLineInfoFromIndex(LPMIXERLINE16 lpml, int devmask, DWORD idx) +{ + strcpy(lpml->szShortName, sdlabels[idx]); + strcpy(lpml->szName, sdnames[idx]); + lpml->dwLineID = idx; + lpml->dwDestination = 0; /* index for speakers */ + lpml->cConnections = 1; + lpml->cControls = 1; + switch (idx) { + case SOUND_MIXER_SYNTH: + lpml->dwComponentType = MIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER; + lpml->fdwLine |= MIXERLINE_LINEF_SOURCE; + break; + case SOUND_MIXER_CD: + lpml->dwComponentType = MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC; + lpml->fdwLine |= MIXERLINE_LINEF_SOURCE; + break; + case SOUND_MIXER_LINE: + lpml->dwComponentType = MIXERLINE_COMPONENTTYPE_SRC_LINE; + lpml->fdwLine |= MIXERLINE_LINEF_SOURCE; + break; + case SOUND_MIXER_MIC: + lpml->dwComponentType = MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE; + lpml->fdwLine |= MIXERLINE_LINEF_SOURCE; + break; + case SOUND_MIXER_PCM: + lpml->dwComponentType = MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT; + lpml->fdwLine |= MIXERLINE_LINEF_SOURCE; + break; + default: + ERR(mmaux, "Index %ld not handled.\n", idx); + break; + } +} #endif /************************************************************************** @@ -61,10 +96,12 @@ static char *sdnames[SOUND_MIXER_NRDEVICES] = SOUND_DEVICE_NAMES; static DWORD MIX_GetLineInfo(WORD wDevID, LPMIXERLINE16 lpml, DWORD fdwInfo) { #ifdef HAVE_OSS - int mixer,i,j,devmask,recsrc,recmask; + int mixer, i, j, devmask, recsrc, recmask; + DWORD ret = MMSYSERR_NOERROR; - TRACE(mmaux,"(%04X, %p, %lu);\n", wDevID, lpml, fdwInfo); - if (lpml == NULL) return MMSYSERR_NOTENABLED; + TRACE(mmaux, "(%04X, %p, %lu);\n", wDevID, lpml, fdwInfo); + if (lpml == NULL || lpml->cbStruct != sizeof(*lpml)) + return MMSYSERR_INVALPARAM; if ((mixer = open(MIXER_DEV, O_RDWR)) < 0) return MMSYSERR_NOTENABLED; @@ -83,12 +120,12 @@ static DWORD MIX_GetLineInfo(WORD wDevID, LPMIXERLINE16 lpml, DWORD fdwInfo) perror("ioctl mixer SOUND_MIXER_RECMASK"); return MMSYSERR_NOTENABLED; } - lpml->cbStruct = sizeof(MIXERLINE16); + /* FIXME: set all the variables correctly... the lines below * are very wrong... */ - lpml->fdwLine = MIXERLINE_LINEF_ACTIVE; - lpml->cChannels = 2; + lpml->fdwLine = MIXERLINE_LINEF_ACTIVE; + lpml->cChannels = 2; switch (fdwInfo & MIXER_GETLINEINFOF_QUERYMASK) { case MIXER_GETLINEINFOF_DESTINATION: @@ -103,55 +140,63 @@ static DWORD MIX_GetLineInfo(WORD wDevID, LPMIXERLINE16 lpml, DWORD fdwInfo) lpml->cConnections++; break; case MIXER_GETLINEINFOF_SOURCE: - for (i=j=0;j<31;j++) { - if (devmask & (1<dwSource == i) break; i++; } } - strcpy(lpml->szShortName,sdlabels[i]); - strcpy(lpml->szName,sdnames[i]); - lpml->dwLineID = i; - switch (i) { - case SOUND_MIXER_SYNTH: - lpml->dwComponentType = MIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER; - lpml->fdwLine |= MIXERLINE_LINEF_SOURCE; - break; - case SOUND_MIXER_CD: - lpml->dwComponentType = MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC; - lpml->fdwLine |= MIXERLINE_LINEF_SOURCE; - break; - case SOUND_MIXER_LINE: - lpml->dwComponentType = MIXERLINE_COMPONENTTYPE_SRC_LINE; - lpml->fdwLine |= MIXERLINE_LINEF_SOURCE; - break; - case SOUND_MIXER_MIC: - lpml->dwComponentType = MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE; - lpml->fdwLine |= MIXERLINE_LINEF_SOURCE; - break; - case SOUND_MIXER_PCM: - lpml->dwComponentType = MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT; - lpml->fdwLine |= MIXERLINE_LINEF_SOURCE; - break; - default: - ERR(mmaux,"Mixertype %d not handle.\n",i); - break; - } + MIX_GetLineInfoFromIndex(lpml, devmask, i); break; case MIXER_GETLINEINFOF_LINEID: - FIXME(mmaux,"_LINEID (%ld) not implemented yet.\n",lpml->dwLineID); + MIX_GetLineInfoFromIndex(lpml, devmask, lpml->dwLineID); break; case MIXER_GETLINEINFOF_COMPONENTTYPE: - FIXME(mmaux," _COMPONENTTYPE not implemented yet.\n"); + TRACE(mmaux, "Getting component type (%08lx)\n", lpml->dwComponentType); + switch (lpml->dwComponentType) { + case MIXERLINE_COMPONENTTYPE_DST_SPEAKERS: + i = -1; + break; + case MIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER: + i = SOUND_MIXER_SYNTH; + break; + case MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC: + i = SOUND_MIXER_CD; + break; + case MIXERLINE_COMPONENTTYPE_SRC_LINE: + i = SOUND_MIXER_LINE; + break; + case MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE: + i = SOUND_MIXER_MIC; + break; + case MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT: + i = SOUND_MIXER_PCM; + break; + default: + FIXME(mmaux, "Unhandled component type (%08lx)\n", lpml->dwComponentType); + return MMSYSERR_INVALPARAM; + } + if (i != -1 && (devmask & (1 << i))) { + strcpy(lpml->szShortName, sdlabels[i]); + strcpy(lpml->szName, sdnames[i]); + lpml->dwLineID = i; + lpml->fdwLine = MIXERLINE_LINEF_SOURCE; + } else { + lpml->cConnections = 0; + for (j=0;j<31;j++) + if (devmask & (1<cConnections++; + lpml->dwLineID = 32; + } break; case MIXER_GETLINEINFOF_TARGETTYPE: - FIXME(mmaux,"_TARGETTYPE not implemented yet.\n"); + FIXME(mmaux, "_TARGETTYPE not implemented yet.\n"); break; } lpml->Target.dwType = MIXERLINE_TARGETTYPE_AUX; close(mixer); - return MMSYSERR_NOERROR; + return ret; #else return MMSYSERR_NOTENABLED; #endif @@ -164,8 +209,8 @@ static DWORD MIX_Open(WORD wDevID, LPMIXEROPENDESC lpmod, DWORD flags) { #ifdef HAVE_OSS - TRACE(mmaux,"(%04X, %p, %lu);\n",wDevID,lpmod,flags); - if (lpmod == NULL) return MMSYSERR_NOTENABLED; + TRACE(mmaux, "(%04X, %p, %lu);\n", wDevID,lpmod,flags); + if (lpmod == NULL) return MMSYSERR_INVALPARAM; /* hmm. We don't keep the mixer device open. So just pretend it works */ return MMSYSERR_NOERROR; #else @@ -177,22 +222,25 @@ static DWORD MIX_Open(WORD wDevID, LPMIXEROPENDESC lpmod, DWORD flags) * mixMessage [sample driver] */ DWORD WINAPI mixMessage(WORD wDevID, WORD wMsg, DWORD dwUser, - DWORD dwParam1, DWORD dwParam2) + DWORD dwParam1, DWORD dwParam2) { - TRACE(mmaux,"(%04X, %04X, %08lX, %08lX, %08lX);\n", + TRACE(mmaux, "(%04X, %04X, %08lX, %08lX, %08lX);\n", wDevID, wMsg, dwUser, dwParam1, dwParam2); + switch(wMsg) { case MXDM_GETDEVCAPS: - return MIX_GetDevCaps(wDevID,(LPMIXERCAPS16)dwParam1,dwParam2); + return MIX_GetDevCaps(wDevID, (LPMIXERCAPS16)dwParam1, dwParam2); case MXDM_GETLINEINFO: - return MIX_GetLineInfo(wDevID,(LPMIXERLINE16)dwParam1,dwParam2); + return MIX_GetLineInfo(wDevID, (LPMIXERLINE16)dwParam1, dwParam2); case MXDM_GETNUMDEVS: - TRACE(mmsys,"return 1;\n"); + TRACE(mmaux, "return 1;\n"); return 1; case MXDM_OPEN: - return MIX_Open(wDevID,(LPMIXEROPENDESC)dwParam1,dwParam2); + return MIX_Open(wDevID, (LPMIXEROPENDESC)dwParam1, dwParam2); + case MXDM_CLOSE: + return MMSYSERR_NOERROR; default: - WARN(mmaux,"unknown message %d!\n",wMsg); + WARN(mmaux, "unknown message %d!\n", wMsg); } return MMSYSERR_NOTSUPPORTED; } diff --git a/multimedia/mmsystem.c b/multimedia/mmsystem.c index 12403436783..4e2ad2fa61a 100644 --- a/multimedia/mmsystem.c +++ b/multimedia/mmsystem.c @@ -73,6 +73,7 @@ MCIPROC32 MCI_GetProc32(UINT16 uDevType) case MCI_DEVTYPE_WAVEFORM_AUDIO: proc = MCIWAVE_DriverProc32; break; case MCI_DEVTYPE_SEQUENCER: proc = MCIMIDI_DriverProc32; break; case MCI_DEVTYPE_ANIMATION: proc = MCIANIM_DriverProc32; break; + case MCI_DEVTYPE_DIGITAL_VIDEO: proc = MCIAVI_DriverProc32; break; default: TRACE(mci, "Unknown device type %u\n", uDevType); } return proc; @@ -85,15 +86,15 @@ WORD MCI_GetDevType(LPCSTR str) { WORD uDevTyp = 0; - if (strcmp(str, "CDAUDIO") == 0) { + if (lstrcmpi32A(str, "CDAUDIO") == 0) { uDevTyp = MCI_DEVTYPE_CD_AUDIO; - } else if (strcmp(str, "WAVEAUDIO") == 0) { + } else if (lstrcmpi32A(str, "WAVEAUDIO") == 0) { uDevTyp = MCI_DEVTYPE_WAVEFORM_AUDIO; - } else if (strcmp(str, "SEQUENCER") == 0) { + } else if (lstrcmpi32A(str, "SEQUENCER") == 0) { uDevTyp = MCI_DEVTYPE_SEQUENCER; - } else if (strcmp(str, "ANIMATION1") == 0) { + } else if (lstrcmpi32A(str, "ANIMATION1") == 0) { uDevTyp = MCI_DEVTYPE_ANIMATION; - } else if (strcmp(str, "AVIVIDEO") == 0) { + } else if (lstrcmpi32A(str, "AVIVIDEO") == 0) { uDevTyp = MCI_DEVTYPE_DIGITAL_VIDEO; } TRACE(mci, "str = %s => %u\n", str, uDevTyp); @@ -161,20 +162,20 @@ int WINAPI MMSYSTEM_WEP(HINSTANCE16 hInstance, WORD wDataSeg, return(TRUE); } -static void MMSYSTEM_MMTIME32to16(LPMMTIME16 mmt16,LPMMTIME32 mmt32) +static void MMSYSTEM_MMTIME32to16(LPMMTIME16 mmt16, LPMMTIME32 mmt32) { mmt16->wType = mmt32->wType; /* layout of rest is the same for 32/16 */ - memcpy(&(mmt32->u),&(mmt16->u),sizeof(mmt16->u)); + memcpy(&(mmt32->u), &(mmt16->u), sizeof(mmt16->u)); } -static void MMSYSTEM_MMTIME16to32(LPMMTIME32 mmt32,LPMMTIME16 mmt16) +static void MMSYSTEM_MMTIME16to32(LPMMTIME32 mmt32, LPMMTIME16 mmt16) { mmt32->wType = mmt16->wType; /* layout of rest is the same for 32/16, * Note: mmt16->u is 2 bytes smaller than mmt32->u */ - memcpy(&(mmt16->u),&(mmt32->u),sizeof(mmt16->u)); + memcpy(&(mmt16->u), &(mmt32->u), sizeof(mmt16->u)); } static HANDLE32 PlaySound_hThread = 0; @@ -211,7 +212,7 @@ static HMMIO16 get_mmioFromProfile(UINT32 uFlags, LPCSTR lpszName) GetProfileString32A("Sounds", "Default", "", str, sizeof(str)); if (strlen(str) == 0) return 0; } - if ( (ptr = (LPSTR)strchr(str, ',')) != NULL) *ptr = '\0'; + if ((ptr = (LPSTR)strchr(str, ',')) != NULL) *ptr = '\0'; hmmio = get_mmioFromFile(str); if (hmmio == 0) { WARN(mmsys, "can't find SystemSound='%s' !\n", str); @@ -237,7 +238,7 @@ static BOOL16 WINAPI proc_PlaySound(LPCSTR lpszSoundName, UINT32 uFlags) mminfo.fccIOProc = FOURCC_MEM; mminfo.pchBuffer = (LPSTR)lpszSoundName; mminfo.cchBuffer = -1; - TRACE(mmsys, "Memory sound %p\n",lpszSoundName); + TRACE(mmsys, "Memory sound %p\n", lpszSoundName); hmmio = mmioOpen16(NULL, &mminfo, MMIO_READ); } else { hmmio = 0; @@ -281,7 +282,7 @@ static BOOL16 WINAPI proc_PlaySound(LPCSTR lpszSoundName, UINT32 uFlags) TRACE(mmsys, "Chunk Found ckid=%.4s fccType=%.4s cksize=%08lX \n", (LPSTR)&mmckInfo.ckid, (LPSTR)&mmckInfo.fccType, mmckInfo.cksize); - if (mmioRead32(hmmio,(HPSTR)&pcmWaveFormat, + if (mmioRead32(hmmio, (HPSTR)&pcmWaveFormat, (long) sizeof(PCMWAVEFORMAT)) == (long) sizeof(PCMWAVEFORMAT)) { TRACE(mmsys, "wFormatTag=%04X !\n", pcmWaveFormat.wf.wFormatTag); TRACE(mmsys, "nChannels=%d \n", pcmWaveFormat.wf.nChannels); @@ -303,7 +304,7 @@ static BOOL16 WINAPI proc_PlaySound(LPCSTR lpszSoundName, UINT32 uFlags) waveDesc.hWave = 0; waveDesc.lpFormat = (LPWAVEFORMAT)&pcmWaveFormat; - dwRet = wodMessage( 0, WODM_OPEN, 0, (DWORD)&waveDesc, CALLBACK_NULL); + dwRet = wodMessage(0, WODM_OPEN, 0, (DWORD)&waveDesc, CALLBACK_NULL); if (dwRet == MMSYSERR_NOERROR) { WAVEHDR waveHdr; HGLOBAL16 hData; @@ -317,7 +318,7 @@ static BOOL16 WINAPI proc_PlaySound(LPCSTR lpszSoundName, UINT32 uFlags) waveHdr.dwFlags = 0L; waveHdr.dwLoops = 0L; - dwRet = wodMessage(0,WODM_PREPARE,0,(DWORD)&waveHdr,sizeof(WAVEHDR)); + dwRet = wodMessage(0, WODM_PREPARE, 0, (DWORD)&waveHdr, sizeof(WAVEHDR)); if (dwRet == MMSYSERR_NOERROR) { while (left) { if (PlaySound_Stop) { @@ -326,16 +327,16 @@ static BOOL16 WINAPI proc_PlaySound(LPCSTR lpszSoundName, UINT32 uFlags) break; } if (bufsize > left) bufsize = left; - count = mmioRead32(hmmio,waveHdr.lpData,bufsize); + count = mmioRead32(hmmio, waveHdr.lpData,bufsize); if (count < 1) break; left -= count; waveHdr.dwBufferLength = count; /* waveHdr.dwBytesRecorded = count; */ /* FIXME: doesn't expect async ops */ - wodMessage( 0, WODM_WRITE, 0, (DWORD)&waveHdr, sizeof(WAVEHDR)); + wodMessage(0, WODM_WRITE, 0, (DWORD)&waveHdr, sizeof(WAVEHDR)); } - wodMessage( 0, WODM_UNPREPARE, 0, (DWORD)&waveHdr, sizeof(WAVEHDR)); - wodMessage( 0, WODM_CLOSE, 0, 0L, 0L); + wodMessage(0, WODM_UNPREPARE, 0, (DWORD)&waveHdr, sizeof(WAVEHDR)); + wodMessage(0, WODM_CLOSE, 0, 0L, 0L); bRet = TRUE; } else @@ -455,7 +456,7 @@ BOOL32 WINAPI PlaySound32A(LPCSTR pszSound, HMODULE32 hmod, DWORD fdwSound) } if (!((fdwSound & SND_MEMORY) || ((fdwSound & SND_RESOURCE) && !((DWORD)pszSound >> 16)) || !pszSound)) { - StrDup = HEAP_strdupA(GetProcessHeap(),0,pszSound); + StrDup = HEAP_strdupA(GetProcessHeap(), 0,pszSound); PlaySound_pszSound = StrDup; } else PlaySound_pszSound = pszSound; PlaySound_Loop = fdwSound & SND_LOOP; @@ -476,9 +477,9 @@ BOOL32 WINAPI PlaySound32W(LPCWSTR pszSound, HMODULE32 hmod, DWORD fdwSound) if (!((fdwSound & SND_MEMORY) || ((fdwSound & SND_RESOURCE) && !((DWORD)pszSound >> 16)) || !pszSound)) { - pszSoundA = HEAP_strdupWtoA(GetProcessHeap(),0,pszSound); + pszSoundA = HEAP_strdupWtoA(GetProcessHeap(), 0,pszSound); bSound = PlaySound32A(pszSoundA, hmod, fdwSound); - HeapFree(GetProcessHeap(),0,pszSoundA); + HeapFree(GetProcessHeap(), 0,pszSoundA); } else bSound = PlaySound32A((LPCSTR)pszSound, hmod, fdwSound); @@ -486,7 +487,7 @@ BOOL32 WINAPI PlaySound32W(LPCWSTR pszSound, HMODULE32 hmod, DWORD fdwSound) } /************************************************************************** - * sndPlaySound [MMSYSTEM.2] + * sndPlaySound [MMSYSTEM.2][WINMM135] */ BOOL16 WINAPI sndPlaySound(LPCSTR lpszSoundName, UINT16 uFlags) { @@ -494,6 +495,15 @@ BOOL16 WINAPI sndPlaySound(LPCSTR lpszSoundName, UINT16 uFlags) return PlaySound32A(lpszSoundName, 0, uFlags); } +/************************************************************************** + * sndPlaySound [WINMM.136] + */ +BOOL16 WINAPI sndPlaySound32W(LPCWSTR lpszSoundName, UINT16 uFlags) +{ + PlaySound_SearchMode = 1; + return PlaySound32W(lpszSoundName, 0, uFlags); +} + /************************************************************************** * mmsystemGetVersion [WINMM.134] */ @@ -536,24 +546,24 @@ BOOL16 WINAPI DriverCallback(DWORD dwCallBack, UINT16 uFlags, HANDLE16 hDev, break; case DCB_WINDOW: TRACE(mmsys, "CALLBACK_WINDOW = %04lX handle = %04X!\n", - dwCallBack,hDev); + dwCallBack, hDev); if (!IsWindow32(dwCallBack) || USER_HEAP_LIN_ADDR(hDev) == NULL) return FALSE; - PostMessage16((HWND16)dwCallBack, wMsg, hDev, dwParam1); + PostMessage32A((HWND16)dwCallBack, wMsg, hDev, dwParam1); break; case DCB_TASK: TRACE(mmsys, "CALLBACK_TASK !\n"); return FALSE; case DCB_FUNCTION: TRACE(mmsys, "CALLBACK_FUNCTION !\n"); - Callbacks->CallDriverCallback( (FARPROC16)dwCallBack, + Callbacks->CallDriverCallback((FARPROC16)dwCallBack, hDev, wMsg, dwUser, dwParam1, dwParam2 ); break; case DCB_FUNC32: TRACE(mmsys, "CALLBACK_FUNCTION !\n"); - ((LPDRVCALLBACK32)dwCallBack)( hDev, wMsg, dwUser, + ((LPDRVCALLBACK32)dwCallBack)(hDev, wMsg, dwUser, dwParam1, dwParam2 ); break; default: @@ -591,7 +601,7 @@ UINT32 WINAPI mixerGetNumDevs32() */ UINT16 WINAPI mixerGetNumDevs16() { - UINT16 count = mixMessage(0,MXDM_GETNUMDEVS, 0L, 0L, 0L); + UINT16 count = mixMessage(0, MXDM_GETNUMDEVS, 0L, 0L, 0L); TRACE(mmaux,"mixerGetNumDevs returns %d\n",count); return count; @@ -600,15 +610,15 @@ UINT16 WINAPI mixerGetNumDevs16() /************************************************************************** * mixerGetDevCapsW [WINMM.102] */ -UINT32 WINAPI mixerGetDevCaps32W(UINT32 devid,LPMIXERCAPS32W mixcaps,UINT32 size) +UINT32 WINAPI mixerGetDevCaps32W(UINT32 devid, LPMIXERCAPS32W mixcaps,UINT32 size) { MIXERCAPS16 mic16; - UINT32 ret = mixerGetDevCaps16(devid,&mic16,sizeof(mic16)); + UINT32 ret = mixerGetDevCaps16(devid, &mic16, sizeof(mic16)); mixcaps->wMid = mic16.wMid; mixcaps->wPid = mic16.wPid; mixcaps->vDriverVersion = mic16.vDriverVersion; - lstrcpyAtoW(mixcaps->szPname,mic16.szPname); + lstrcpyAtoW(mixcaps->szPname, mic16.szPname); mixcaps->fdwSupport = mic16.fdwSupport; mixcaps->cDestinations = mic16.cDestinations; return ret; @@ -617,15 +627,15 @@ UINT32 WINAPI mixerGetDevCaps32W(UINT32 devid,LPMIXERCAPS32W mixcaps,UINT32 size /************************************************************************** * mixerGetDevCaps [WINMM.101] */ -UINT32 WINAPI mixerGetDevCaps32A(UINT32 devid,LPMIXERCAPS32A mixcaps,UINT32 size) +UINT32 WINAPI mixerGetDevCaps32A(UINT32 devid, LPMIXERCAPS32A mixcaps,UINT32 size) { MIXERCAPS16 mic16; - UINT32 ret = mixerGetDevCaps16(devid,&mic16,sizeof(mic16)); + UINT32 ret = mixerGetDevCaps16(devid, &mic16, sizeof(mic16)); mixcaps->wMid = mic16.wMid; mixcaps->wPid = mic16.wPid; mixcaps->vDriverVersion = mic16.vDriverVersion; - strcpy(mixcaps->szPname,mic16.szPname); + strcpy(mixcaps->szPname, mic16.szPname); mixcaps->fdwSupport = mic16.fdwSupport; mixcaps->cDestinations = mic16.cDestinations; return ret; @@ -634,24 +644,24 @@ UINT32 WINAPI mixerGetDevCaps32A(UINT32 devid,LPMIXERCAPS32A mixcaps,UINT32 size /************************************************************************** * mixerGetDevCaps */ -UINT16 WINAPI mixerGetDevCaps16(UINT16 devid,LPMIXERCAPS16 mixcaps,UINT16 size) +UINT16 WINAPI mixerGetDevCaps16(UINT16 devid, LPMIXERCAPS16 mixcaps,UINT16 size) { FIXME(mmsys,"should this be a fixme?\n"); - return mixMessage(devid,MXDM_GETDEVCAPS,0L,(DWORD)mixcaps,(DWORD)size); + return mixMessage(devid, MXDM_GETDEVCAPS, 0L, (DWORD)mixcaps, (DWORD)size); } /************************************************************************** * mixerOpen [WINMM.110] */ -UINT32 WINAPI mixerOpen32(LPHMIXER32 lphmix,UINT32 uDeviceID,DWORD dwCallback, - DWORD dwInstance,DWORD fdwOpen) +UINT32 WINAPI mixerOpen32(LPHMIXER32 lphmix,UINT32 uDeviceID, DWORD dwCallback, + DWORD dwInstance, DWORD fdwOpen) { HMIXER16 hmix16; UINT32 ret; FIXME(mmsys,"(%p,%d,%08lx,%08lx,%08lx): semi stub?\n", - lphmix,uDeviceID,dwCallback,dwInstance,fdwOpen); - ret = mixerOpen16(&hmix16,uDeviceID,dwCallback,dwInstance,fdwOpen); + lphmix,uDeviceID, dwCallback, dwInstance, fdwOpen); + ret = mixerOpen16(&hmix16,uDeviceID, dwCallback, dwInstance,fdwOpen); if (lphmix) *lphmix = hmix16; return ret; } @@ -659,8 +669,8 @@ UINT32 WINAPI mixerOpen32(LPHMIXER32 lphmix,UINT32 uDeviceID,DWORD dwCallback, /************************************************************************** * mixerOpen */ -UINT16 WINAPI mixerOpen16(LPHMIXER16 lphmix,UINT16 uDeviceID,DWORD dwCallback, - DWORD dwInstance,DWORD fdwOpen) +UINT16 WINAPI mixerOpen16(LPHMIXER16 lphmix,UINT16 uDeviceID, DWORD dwCallback, + DWORD dwInstance, DWORD fdwOpen) { HMIXER16 hmix; LPMIXEROPENDESC lpmod; @@ -668,7 +678,7 @@ UINT16 WINAPI mixerOpen16(LPHMIXER16 lphmix,UINT16 uDeviceID,DWORD dwCallback, DWORD dwRet=0; TRACE(mmsys,"(%p,%d,%08lx,%08lx,%08lx)\n", - lphmix,uDeviceID,dwCallback,dwInstance,fdwOpen); + lphmix,uDeviceID, dwCallback, dwInstance, fdwOpen); hmix = USER_HEAP_ALLOC(sizeof(MIXEROPENDESC)); if (lphmix) *lphmix = hmix; lpmod = (LPMIXEROPENDESC)USER_HEAP_LIN_ADDR(hmix); @@ -678,7 +688,7 @@ UINT16 WINAPI mixerOpen16(LPHMIXER16 lphmix,UINT16 uDeviceID,DWORD dwCallback, if (uDeviceID >= MAXMIXERDRIVERS) uDeviceID = 0; while (uDeviceID < MAXMIXERDRIVERS) { - dwRet=mixMessage(uDeviceID,MXDM_OPEN,dwInstance,(DWORD)lpmod,fdwOpen); + dwRet=mixMessage(uDeviceID, MXDM_OPEN, dwInstance, (DWORD)lpmod, fdwOpen); if (dwRet == MMSYSERR_NOERROR) break; if (!mapperflag) break; uDeviceID++; @@ -702,18 +712,18 @@ UINT16 WINAPI mixerClose16(HMIXER16 hmix) { LPMIXEROPENDESC lpmod; - FIXME(mmsys,"(%04x): semi-stub?\n",hmix); + FIXME(mmsys,"(%04x): semi-stub?\n", hmix); lpmod = (LPMIXEROPENDESC)USER_HEAP_LIN_ADDR(hmix); - return mixMessage(lpmod->uDeviceID,MXDM_CLOSE,lpmod->dwInstance,0L,0L); + return mixMessage(lpmod->uDeviceID, MXDM_CLOSE, lpmod->dwInstance, 0L, 0L); } /************************************************************************** * mixerGetID [WINMM.103] */ -UINT32 WINAPI mixerGetID32(HMIXEROBJ32 hmix,LPUINT32 lpid,DWORD fdwID) +UINT32 WINAPI mixerGetID32(HMIXEROBJ32 hmix, LPUINT32 lpid, DWORD fdwID) { UINT16 xid; - UINT32 ret = mixerGetID16(hmix,&xid,fdwID); + UINT32 ret = mixerGetID16(hmix, &xid, fdwID); if (lpid) *lpid = xid; return ret; @@ -804,29 +814,42 @@ UINT32 WINAPI mixerGetLineInfo32A(HMIXEROBJ32 hmix,LPMIXERLINE32A lpml,DWORD fdw lpml->cChannels = ml16.cChannels; lpml->cConnections = ml16.cConnections; lpml->cControls = ml16.cControls; - strcpy(lpml->szShortName,ml16.szShortName); - strcpy(lpml->szName,ml16.szName); + strcpy(lpml->szShortName, ml16.szShortName); + strcpy(lpml->szName, ml16.szName); lpml->Target.dwType = ml16.Target.dwType; lpml->Target.dwDeviceID = ml16.Target.dwDeviceID; lpml->Target.wMid = ml16.Target.wMid; lpml->Target.wPid = ml16.Target.wPid; lpml->Target.vDriverVersion = ml16.Target.vDriverVersion; - strcpy(lpml->Target.szPname,ml16.Target.szPname); + strcpy(lpml->Target.szPname, ml16.Target.szPname); return ret; } /************************************************************************** * mixerGetLineInfoW [WINMM.107] */ -UINT32 WINAPI mixerGetLineInfo32W(HMIXEROBJ32 hmix,LPMIXERLINE32W lpml,DWORD fdwInfo) +UINT32 WINAPI mixerGetLineInfo32W(HMIXEROBJ32 hmix, LPMIXERLINE32W lpml, DWORD fdwInfo) { MIXERLINE16 ml16; UINT32 ret; + TRACE(mmsys,"(%04x,%p,%08lx)\n", hmix, lpml, fdwInfo); + + if (lpml == NULL || lpml->cbStruct != sizeof(*lpml)) + return MMSYSERR_INVALPARAM; + + ml16.cbStruct = sizeof(ml16); ml16.dwDestination = lpml->dwDestination; - FIXME(mmsys,"(%04x,%p,%08lx): stub!\n",hmix,lpml,fdwInfo); - ret = mixerGetLineInfo16(hmix,&ml16,fdwInfo); - lpml->cbStruct = sizeof(*lpml); + ml16.dwSource = lpml->dwSource; + ml16.dwLineID = lpml->dwLineID; + ml16.dwUser = lpml->dwUser; + ml16.dwComponentType = lpml->dwComponentType; + ml16.cChannels = lpml->cChannels; + ml16.cConnections = lpml->cConnections; + ml16.cControls = lpml->cControls; + + ret = mixerGetLineInfo16(hmix, &ml16, fdwInfo); + lpml->dwSource = ml16.dwSource; lpml->dwLineID = ml16.dwLineID; lpml->fdwLine = ml16.fdwLine; @@ -835,51 +858,51 @@ UINT32 WINAPI mixerGetLineInfo32W(HMIXEROBJ32 hmix,LPMIXERLINE32W lpml,DWORD fdw lpml->cChannels = ml16.cChannels; lpml->cConnections = ml16.cConnections; lpml->cControls = ml16.cControls; - lstrcpyAtoW(lpml->szShortName,ml16.szShortName); - lstrcpyAtoW(lpml->szName,ml16.szName); + lstrcpyAtoW(lpml->szShortName, ml16.szShortName); + lstrcpyAtoW(lpml->szName, ml16.szName); lpml->Target.dwType = ml16.Target.dwType; lpml->Target.dwDeviceID = ml16.Target.dwDeviceID; lpml->Target.wMid = ml16.Target.wMid; lpml->Target.wPid = ml16.Target.wPid; lpml->Target.vDriverVersion = ml16.Target.vDriverVersion; - /*lstrcpyAtoW(lpml->Target.szPname,ml16.Target.szPname);*/ + /*lstrcpyAtoW(lpml->Target.szPname, ml16.Target.szPname);*/ return ret; } /************************************************************************** * mixerGetLineInfo [MMSYSTEM.805] */ -UINT16 WINAPI mixerGetLineInfo16(HMIXEROBJ16 hmix,LPMIXERLINE16 lpml,DWORD fdwInfo) +UINT16 WINAPI mixerGetLineInfo16(HMIXEROBJ16 hmix, LPMIXERLINE16 lpml, DWORD fdwInfo) { - UINT16 devid = _get_mixerID_from_handle(hmix,fdwInfo); + UINT16 devid = _get_mixerID_from_handle(hmix, fdwInfo); - FIXME(mmsys,"(%04x,%p[line %08lx],%08lx) - semi-stub?\n", - hmix,lpml,lpml->dwDestination,fdwInfo); - return mixMessage(devid,MXDM_GETLINEINFO,0,(DWORD)lpml,fdwInfo); + FIXME(mmsys, "(%04x, %p[line %08lx], %08lx)\n", + hmix, lpml, lpml->dwDestination, fdwInfo); + return mixMessage(devid, MXDM_GETLINEINFO, 0, (DWORD)lpml, fdwInfo); } /************************************************************************** * mixerSetControlDetails [WINMM.111] */ -UINT32 WINAPI mixerSetControlDetails32(HMIXEROBJ32 hmix,LPMIXERCONTROLDETAILS32 lpmcd,DWORD fdwDetails) +UINT32 WINAPI mixerSetControlDetails32(HMIXEROBJ32 hmix, LPMIXERCONTROLDETAILS32 lpmcd, DWORD fdwDetails) { - FIXME(mmsys,"(%04x,%p,%08lx): stub!\n",hmix,lpmcd,fdwDetails); + FIXME(mmsys,"(%04x,%p,%08lx): stub!\n", hmix, lpmcd, fdwDetails); return MMSYSERR_NOTENABLED; } /************************************************************************** * mixerSetControlDetails [MMSYSTEM.809] */ -UINT16 WINAPI mixerSetControlDetails16(HMIXEROBJ16 hmix,LPMIXERCONTROLDETAILS16 lpmcd,DWORD fdwDetails) +UINT16 WINAPI mixerSetControlDetails16(HMIXEROBJ16 hmix, LPMIXERCONTROLDETAILS16 lpmcd, DWORD fdwDetails) { - FIXME(mmsys,"(%04x,%p,%08lx): stub!\n",hmix,lpmcd,fdwDetails); + FIXME(mmsys,"(%04x,%p,%08lx): stub!\n", hmix, lpmcd, fdwDetails); return MMSYSERR_NOTENABLED; } /************************************************************************** * mixerMessage [WINMM.109] */ -UINT32 WINAPI mixerMessage32(HMIXER32 hmix,UINT32 uMsg,DWORD dwParam1,DWORD dwParam2) +UINT32 WINAPI mixerMessage32(HMIXER32 hmix,UINT32 uMsg, DWORD dwParam1, DWORD dwParam2) { LPMIXEROPENDESC lpmod; UINT16 uDeviceID; @@ -890,14 +913,14 @@ UINT32 WINAPI mixerMessage32(HMIXER32 hmix,UINT32 uMsg,DWORD dwParam1,DWORD dwPa else uDeviceID = 0; FIXME(mmsys,"(%04lx,%d,%08lx,%08lx): semi-stub?\n", - (DWORD)hmix,uMsg,dwParam1,dwParam2); - return mixMessage(uDeviceID,uMsg,0L,dwParam1,dwParam2); + (DWORD)hmix,uMsg, dwParam1, dwParam2); + return mixMessage(uDeviceID,uMsg, 0L, dwParam1, dwParam2); } /************************************************************************** * mixerMessage [MMSYSTEM.804] */ -UINT16 WINAPI mixerMessage16(HMIXER16 hmix,UINT16 uMsg,DWORD dwParam1,DWORD dwParam2) +UINT16 WINAPI mixerMessage16(HMIXER16 hmix,UINT16 uMsg, DWORD dwParam1, DWORD dwParam2) { LPMIXEROPENDESC lpmod; UINT16 uDeviceID; @@ -905,8 +928,8 @@ UINT16 WINAPI mixerMessage16(HMIXER16 hmix,UINT16 uMsg,DWORD dwParam1,DWORD dwPa lpmod = (LPMIXEROPENDESC)USER_HEAP_LIN_ADDR(hmix); uDeviceID = (lpmod) ? lpmod->uDeviceID : 0; FIXME(mmsys,"(%04x,%d,%08lx,%08lx) - semi-stub?\n", - hmix,uMsg,dwParam1,dwParam2); - return mixMessage(uDeviceID,uMsg,0L,dwParam1,dwParam2); + hmix,uMsg, dwParam1, dwParam2); + return mixMessage(uDeviceID,uMsg, 0L, dwParam1, dwParam2); } /************************************************************************** @@ -933,10 +956,10 @@ UINT16 WINAPI auxGetNumDevs16() /************************************************************************** * auxGetDevCaps [WINMM.20] */ -UINT32 WINAPI auxGetDevCaps32W(UINT32 uDeviceID,LPAUXCAPS32W lpCaps,UINT32 uSize) +UINT32 WINAPI auxGetDevCaps32W(UINT32 uDeviceID, LPAUXCAPS32W lpCaps,UINT32 uSize) { AUXCAPS16 ac16; - UINT32 ret = auxGetDevCaps16(uDeviceID,&ac16,sizeof(ac16)); + UINT32 ret = auxGetDevCaps16(uDeviceID, &ac16, sizeof(ac16)); lpCaps->wMid = ac16.wMid; lpCaps->wPid = ac16.wPid; @@ -950,10 +973,10 @@ UINT32 WINAPI auxGetDevCaps32W(UINT32 uDeviceID,LPAUXCAPS32W lpCaps,UINT32 uSize /************************************************************************** * auxGetDevCaps [WINMM.21] */ -UINT32 WINAPI auxGetDevCaps32A(UINT32 uDeviceID,LPAUXCAPS32A lpCaps,UINT32 uSize) +UINT32 WINAPI auxGetDevCaps32A(UINT32 uDeviceID, LPAUXCAPS32A lpCaps,UINT32 uSize) { AUXCAPS16 ac16; - UINT32 ret = auxGetDevCaps16(uDeviceID,&ac16,sizeof(ac16)); + UINT32 ret = auxGetDevCaps16(uDeviceID, &ac16, sizeof(ac16)); lpCaps->wMid = ac16.wMid; lpCaps->wPid = ac16.wPid; @@ -967,7 +990,7 @@ UINT32 WINAPI auxGetDevCaps32A(UINT32 uDeviceID,LPAUXCAPS32A lpCaps,UINT32 uSize /************************************************************************** * auxGetDevCaps [MMSYSTEM.351] */ -UINT16 WINAPI auxGetDevCaps16(UINT16 uDeviceID,LPAUXCAPS16 lpCaps, UINT16 uSize) +UINT16 WINAPI auxGetDevCaps16(UINT16 uDeviceID, LPAUXCAPS16 lpCaps, UINT16 uSize) { TRACE(mmsys, "(%04X, %p, %d) !\n", uDeviceID, lpCaps, uSize); @@ -980,7 +1003,7 @@ UINT16 WINAPI auxGetDevCaps16(UINT16 uDeviceID,LPAUXCAPS16 lpCaps, UINT16 uSize) */ UINT32 WINAPI auxGetVolume32(UINT32 uDeviceID, DWORD * lpdwVolume) { - return auxGetVolume16(uDeviceID,lpdwVolume); + return auxGetVolume16(uDeviceID, lpdwVolume); } /************************************************************************** @@ -998,7 +1021,7 @@ UINT16 WINAPI auxGetVolume16(UINT16 uDeviceID, DWORD * lpdwVolume) */ UINT32 WINAPI auxSetVolume32(UINT32 uDeviceID, DWORD dwVolume) { - return auxSetVolume16(uDeviceID,dwVolume); + return auxSetVolume16(uDeviceID, dwVolume); } /************************************************************************** @@ -1014,7 +1037,7 @@ UINT16 WINAPI auxSetVolume16(UINT16 uDeviceID, DWORD dwVolume) /************************************************************************** * auxOutMessage [MMSYSTEM.354] */ -DWORD WINAPI auxOutMessage32(UINT32 uDeviceID,UINT32 uMessage,DWORD dw1,DWORD dw2) +DWORD WINAPI auxOutMessage32(UINT32 uDeviceID,UINT32 uMessage, DWORD dw1, DWORD dw2) { switch (uMessage) { case AUXDM_GETNUMDEVS: @@ -1023,13 +1046,13 @@ DWORD WINAPI auxOutMessage32(UINT32 uDeviceID,UINT32 uMessage,DWORD dw1,DWORD dw /* no argument conversion needed */ break; case AUXDM_GETDEVCAPS: - return auxGetDevCaps32A(uDeviceID,(LPAUXCAPS32A)dw1,dw2); + return auxGetDevCaps32A(uDeviceID, (LPAUXCAPS32A)dw1, dw2); default: ERR(mmsys,"(%04x,%04x,%08lx,%08lx): unhandled message\n", - uDeviceID,uMessage,dw1,dw2); + uDeviceID,uMessage, dw1, dw2); break; } - return auxMessage(uDeviceID,uMessage,0L,dw1,dw2); + return auxMessage(uDeviceID,uMessage, 0L, dw1, dw2); } /************************************************************************** @@ -1045,12 +1068,12 @@ DWORD WINAPI auxOutMessage16(UINT16 uDeviceID, UINT16 uMessage, DWORD dw1, DWORD /* no argument conversion needed */ break; case AUXDM_GETVOLUME: - return auxGetVolume16(uDeviceID,(LPDWORD)PTR_SEG_TO_LIN(dw1)); + return auxGetVolume16(uDeviceID, (LPDWORD)PTR_SEG_TO_LIN(dw1)); case AUXDM_GETDEVCAPS: - return auxGetDevCaps16(uDeviceID,(LPAUXCAPS16)PTR_SEG_TO_LIN(dw1),dw2); + return auxGetDevCaps16(uDeviceID, (LPAUXCAPS16)PTR_SEG_TO_LIN(dw1), dw2); default: ERR(mmsys,"(%04x,%04x,%08lx,%08lx): unhandled message\n", - uDeviceID,uMessage,dw1,dw2); + uDeviceID,uMessage, dw1, dw2); break; } return auxMessage(uDeviceID, uMessage, 0L, dw1, dw2); @@ -1059,28 +1082,28 @@ DWORD WINAPI auxOutMessage16(UINT16 uDeviceID, UINT16 uMessage, DWORD dw1, DWORD /************************************************************************** * mciGetErrorStringW [WINMM.46] */ -BOOL32 WINAPI mciGetErrorString32W(DWORD wError,LPWSTR lpstrBuffer,UINT32 uLength) +BOOL32 WINAPI mciGetErrorString32W(DWORD wError, LPWSTR lpstrBuffer,UINT32 uLength) { - LPSTR bufstr = HeapAlloc(GetProcessHeap(),0,uLength); + LPSTR bufstr = HeapAlloc(GetProcessHeap(), 0,uLength); BOOL32 ret = mciGetErrorString32A(wError,bufstr,uLength); lstrcpyAtoW(lpstrBuffer,bufstr); - HeapFree(GetProcessHeap(),0,bufstr); + HeapFree(GetProcessHeap(), 0,bufstr); return ret; } /************************************************************************** * mciGetErrorStringA [WINMM.45] */ -BOOL32 WINAPI mciGetErrorString32A(DWORD wError,LPSTR lpstrBuffer,UINT32 uLength) +BOOL32 WINAPI mciGetErrorString32A(DWORD wError, LPSTR lpstrBuffer,UINT32 uLength) { - return mciGetErrorString16(wError,lpstrBuffer,uLength); + return mciGetErrorString16(wError, lpstrBuffer,uLength); } /************************************************************************** * mciGetErrorString [MMSYSTEM.706] */ -BOOL16 WINAPI mciGetErrorString16(DWORD wError,LPSTR lpstrBuffer,UINT16 uLength) +BOOL16 WINAPI mciGetErrorString16(DWORD wError, LPSTR lpstrBuffer,UINT16 uLength) { LPSTR msgptr; @@ -1362,9 +1385,10 @@ BOOL16 WINAPI mciGetErrorString16(DWORD wError,LPSTR lpstrBuffer,UINT16 uLength) BOOL16 WINAPI mciDriverNotify16(HWND16 hWndCallBack, UINT16 wDevID, UINT16 wStatus) { TRACE(mmsys, "(%04X, %u, %04X)\n", hWndCallBack, wDevID, wStatus); + if (!IsWindow32(hWndCallBack)) return FALSE; TRACE(mmsys, "before PostMessage\n"); - PostMessage16(hWndCallBack, MM_MCINOTIFY, wStatus, MAKELONG(wDevID, 0)); + PostMessage32A(hWndCallBack, MM_MCINOTIFY, wStatus, MAKELONG(wDevID, 0)); return TRUE; } @@ -1374,6 +1398,7 @@ BOOL16 WINAPI mciDriverNotify16(HWND16 hWndCallBack, UINT16 wDevID, UINT16 wStat BOOL32 WINAPI mciDriverNotify32(HWND32 hWndCallBack, UINT32 wDevID, UINT32 wStatus) { FIXME(mmsys, "stub(%04X, %u, %04X)\n", hWndCallBack, wDevID, wStatus); + return FALSE; } @@ -1382,7 +1407,8 @@ BOOL32 WINAPI mciDriverNotify32(HWND32 hWndCallBack, UINT32 wDevID, UINT32 wStat */ DWORD WINAPI mciGetDriverData16(HDRVR16 hdrv) { - FIXME(mmsys,"(%04x): stub!\n",hdrv); + FIXME(mmsys,"(%04x): stub!\n", hdrv); + return 0x42; } @@ -1391,7 +1417,8 @@ DWORD WINAPI mciGetDriverData16(HDRVR16 hdrv) */ DWORD WINAPI mciGetDriverData32(HDRVR32 hdrv) { - FIXME(mmsys,"(%04x): stub!\n",hdrv); + FIXME(mmsys,"(%04x): stub!\n", hdrv); + return 0x42; } @@ -1400,7 +1427,8 @@ DWORD WINAPI mciGetDriverData32(HDRVR32 hdrv) */ BOOL16 WINAPI mciSetDriverData16(HDRVR16 hdrv, DWORD data) { - FIXME(mmsys,"(%04x,%08lx): stub!\n",hdrv,data); + FIXME(mmsys,"(%04x,%08lx): stub!\n", hdrv, data); + return 0; } @@ -1409,14 +1437,15 @@ BOOL16 WINAPI mciSetDriverData16(HDRVR16 hdrv, DWORD data) */ BOOL32 WINAPI mciSetDriverData32(HDRVR32 hdrv, DWORD data) { - FIXME(mmsys,"(%04x,%08lx): stub!\n",hdrv,data); - return 0; - } + FIXME(mmsys,"(%04x,%08lx): stub!\n", hdrv, data); + + return 0; +} /************************************************************************** * mciLoadCommandResource [MMSYSTEM.705] */ -UINT16 WINAPI mciLoadCommandResource16(HANDLE16 hinst,LPCSTR resname,UINT16 type) +UINT16 WINAPI mciLoadCommandResource16(HANDLE16 hinst, LPCSTR resname,UINT16 type) { char buf[200]; OFSTRUCT ofs; @@ -1428,9 +1457,9 @@ UINT16 WINAPI mciLoadCommandResource16(HANDLE16 hinst,LPCSTR resname,UINT16 type LPBYTE lmem; static UINT16 mcidevtype = 0; - FIXME(mmsys,"(%04x,%s,%d): stub!\n",hinst,resname,type); + FIXME(mmsys,"(%04x,%s,%d): stub!\n", hinst, resname, type); if (!lstrcmpi32A(resname,"core")) { - FIXME(mmsys,"(...,\"core\",...), have to use internal tables... (not there yet)\n"); + FIXME(mmsys, "(...,\"core\",...), have to use internal tables... (not there yet)\n"); return 0; } /* if file exists "resname.mci", then load resource "resname" from it @@ -1438,19 +1467,19 @@ UINT16 WINAPI mciLoadCommandResource16(HANDLE16 hinst,LPCSTR resname,UINT16 type */ strcpy(buf,resname); strcat(buf,".mci"); - if (OpenFile32(buf,&ofs,OF_EXIST)!=HFILE_ERROR32) { + if (OpenFile32(buf, &ofs,OF_EXIST) != HFILE_ERROR32) { xhinst = LoadLibrary16(buf); if (xhinst >32) hinst = xhinst; } /* else use passed hinst */ segstr = SEGPTR_STRDUP(resname); - hrsrc = FindResource16(hinst,SEGPTR_GET(segstr),type); + hrsrc = FindResource16(hinst, SEGPTR_GET(segstr), type); SEGPTR_FREE(segstr); if (!hrsrc) { WARN(mmsys,"no special commandlist found in resource\n"); return MCI_NO_COMMAND_TABLE; } - hmem = LoadResource16(hinst,hrsrc); + hmem = LoadResource16(hinst, hrsrc); if (!hmem) { WARN(mmsys,"couldn't load resource??\n"); return MCI_NO_COMMAND_TABLE; @@ -1462,7 +1491,7 @@ UINT16 WINAPI mciLoadCommandResource16(HANDLE16 hinst,LPCSTR resname,UINT16 type return MCI_NO_COMMAND_TABLE; } lmem = PTR_SEG_TO_LIN(xmem); - TRACE(mmsys,"first resource entry is %s\n",(char*)lmem); + TRACE(mmsys, "first resource entry is %s\n", (char*)lmem); /* parse resource, register stuff, return unique id */ return ++mcidevtype; } @@ -1488,7 +1517,7 @@ BOOL32 WINAPI mciFreeCommandResource32(UINT32 uTable) /************************************************************************** * mciLoadCommandResource [WINMM.48] */ -UINT32 WINAPI mciLoadCommandResource32(HANDLE32 hinst,LPCSTR resname,UINT32 type) +UINT32 WINAPI mciLoadCommandResource32(HANDLE32 hinst, LPCSTR resname,UINT32 type) { return mciLoadCommandResource16(hinst, resname, type); } @@ -1579,9 +1608,9 @@ static DWORD MCI_Open(DWORD dwParam, LPMCI_OPEN_PARMS32A lpParms) TRACE(mmsys, "(%08lX, %p)\n", dwParam, lpParms); if (lpParms == NULL) return MCIERR_NULL_PARAMETER_BLOCK; - if ((dwParam & ~(MCI_OPEN_ELEMENT|MCI_OPEN_ALIAS|MCI_OPEN_TYPE|MCI_OPEN_TYPE_ID|MCI_NOTIFY|MCI_WAIT)) != 0) { + if ((dwParam & ~(MCI_OPEN_SHAREABLE|MCI_OPEN_ELEMENT|MCI_OPEN_ALIAS|MCI_OPEN_TYPE|MCI_OPEN_TYPE_ID|MCI_NOTIFY|MCI_WAIT)) != 0) { FIXME(mmsys, "unsupported yet dwFlags=%08lX\n", - (dwParam & ~(MCI_OPEN_ELEMENT|MCI_OPEN_ALIAS|MCI_OPEN_TYPE|MCI_OPEN_TYPE_ID|MCI_NOTIFY|MCI_WAIT))); + (dwParam & ~(MCI_OPEN_SHAREABLE|MCI_OPEN_ELEMENT|MCI_OPEN_ALIAS|MCI_OPEN_TYPE|MCI_OPEN_TYPE_ID|MCI_NOTIFY|MCI_WAIT))); } while (MCI_GetDrv(wDevID)->modp.wType != 0) { @@ -1607,22 +1636,22 @@ static DWORD MCI_Open(DWORD dwParam, LPMCI_OPEN_PARMS32A lpParms) uDevTyp = MCI_GetDevType(str); if (uDevTyp == 0) { if (strcmp(str,"*") == 0) { - TRACE(mmsys,"No [mci extensions] entry for %s found.\n",t); + TRACE(mmsys,"No [mci extensions] entry for %s found.\n", t); return MCIERR_EXTENSION_NOT_FOUND; } #if testing32 /* FIXME has to be re-written, seems to be experimental 16 bit code anyway */ else { - HDRVR16 hdrv = OpenDriver(str, "mci", NULL); + HDRVR16 hdrv = OpenDriver32(str, "mci", NULL); if (hdrv) { HMODULE16 hmod; hmod = GetDriverModuleHandle(hdrv); MCI_GetDrv(wDevID)->hDrv = hdrv; - MCI_GetDrv(wDevID)->driverProc = GetProcAddress16(hmod,oouch SEGPTR_GET(SEGPTR_STRDUP("DRIVERPROC"))); + MCI_GetDrv(wDevID)->driverProc = GetProcAddress32(hmod,oouch SEGPTR_GET(SEGPTR_STRDUP("DriverProc"))); uDevTyp = MCI_DEVTYPE_OTHER; } else { - FIXME(mmsys, "[mci extensions] entry %s for %s not supported.\n",str,t); + FIXME(mmsys, "[mci extensions] entry %s for %s not supported.\n", str, t); return MCIERR_DEVICE_NOT_INSTALLED; } } @@ -1633,7 +1662,7 @@ static DWORD MCI_Open(DWORD dwParam, LPMCI_OPEN_PARMS32A lpParms) uDevTyp = MCI_DEVTYPE_CD_AUDIO; } else { return MCIERR_EXTENSION_NOT_FOUND; - } + } } if (dwParam & MCI_OPEN_ALIAS) { @@ -1661,13 +1690,13 @@ static DWORD MCI_Open(DWORD dwParam, LPMCI_OPEN_PARMS32A lpParms) /* FIXME has to be re-written, seems to be experimental 16 bit code anyway */ HDRVR16 hdrv; TRACE(mmsys,"trying to load driver...\n"); - hdrv = OpenDriver(str,"mci",NULL); + hdrv = OpenDriver32(str,"mci",NULL); if (hdrv) { HMODULE16 hmod; hmod = GetDriverModuleHandle(hdrv); MCI_GetDrv(wDevID)->hDrv = hdrv; - MCI_GetDrv(wDevID)->driverProc = GetProcAddress16(hmod,oouch SEGPTR_GET(SEGPTR_STRDUP("DRIVERPROC"))); + MCI_GetDrv(wDevID)->driverProc = GetProcAddress32(hmod,oouch SEGPTR_GET(SEGPTR_STRDUP("DriverProc"))); uDevTyp = MCI_DEVTYPE_OTHER; } else #endif @@ -1684,7 +1713,7 @@ static DWORD MCI_Open(DWORD dwParam, LPMCI_OPEN_PARMS32A lpParms) if (dwRet == 0) { /* only handled devices fall through */ - TRACE(mmsys, "wDevID = %04X wDeviceID = %d dwRet = %ld\n",wDevID, lpParms->wDeviceID, dwRet); + TRACE(mmsys, "wDevID = %04X wDeviceID = %d dwRet = %ld\n", wDevID, lpParms->wDeviceID, dwRet); } else { TRACE(mmsys, "failed to open driver (MCI_OPEN_DRIVER msg) [%08lx], closing\n", dwRet); MCI_GetDrv(wDevID)->modp.wType = 0; @@ -1713,10 +1742,10 @@ static DWORD MCI_Close(UINT16 wDevID, DWORD dwParam, LPMCI_GENERIC_PARMS lpParms MCI_GetDrv(wDevID)->modp.wType = 0; if (dwParam&MCI_NOTIFY) - mciDriverNotify16(lpParms->dwCallback,wDevID, + mciDriverNotify16(lpParms->dwCallback, wDevID, (dwRet==0?MCI_NOTIFY_SUCCESSFUL:MCI_NOTIFY_FAILURE)); - TRACE(mmsys, "returns %ld\n",dwRet); + TRACE(mmsys, "returns %ld\n", dwRet); return dwRet; } @@ -1915,7 +1944,7 @@ int MCI_MapMsg16To32A(WORD uDevType, WORD wMsg, DWORD* lParam) case MCI_BREAK: { LPMCI_BREAK_PARMS32 mbp32 = HeapAlloc(SystemHeap, 0, sizeof(MCI_BREAK_PARMS32)); - LPMCI_BREAK_PARMS16 mbp16 = PTR_SEG_TO_LIN(*lParam); + LPMCI_BREAK_PARMS16 mbp16 = PTR_SEG_TO_LIN(*lParam); if (mbp32) { mbp32->dwCallback = mbp16->dwCallback; @@ -2006,6 +2035,22 @@ int MCI_MapMsg16To32A(WORD uDevType, WORD wMsg, DWORD* lParam) *lParam = (DWORD)msip32a; } return 1; + case DRV_LOAD: + case DRV_ENABLE: + case DRV_OPEN: + case DRV_CLOSE: + case DRV_DISABLE: + case DRV_FREE: + case DRV_CONFIGURE: + case DRV_QUERYCONFIGURE: + case DRV_INSTALL: + case DRV_REMOVE: + case DRV_EXITSESSION: + case DRV_EXITAPPLICATION: + case DRV_POWER: + FIXME(mci, "This is a hack\n"); + return 0; + default: WARN(mci, "Don't know how to map msg=%s\n", MCI_CommandToString(wMsg)); } @@ -2060,13 +2105,28 @@ int MCI_UnMapMsg16To32A(WORD uDevTyp, WORD wMsg, DWORD lParam) return 0; case MCI_OPEN: case MCI_OPEN_DRIVER: - { + if (lParam) { LPMCI_OPEN_PARMS32A mop32a = (MCI_OPEN_PARMS32A*)lParam; LPMCI_OPEN_PARMS16 mop16 = *(LPMCI_OPEN_PARMS16*)((char*)mop32a - sizeof(LPMCI_OPEN_PARMS16*)); mop16->wDeviceID = mop32a->wDeviceID; + HeapFree(SystemHeap, 0, (LPVOID)(lParam - sizeof(LPMCI_OPEN_PARMS16))); } - HeapFree(SystemHeap, 0, (LPVOID)(lParam - sizeof(LPMCI_OPEN_PARMS16))); + return 0; + case DRV_LOAD: + case DRV_ENABLE: + case DRV_OPEN: + case DRV_CLOSE: + case DRV_DISABLE: + case DRV_FREE: + case DRV_CONFIGURE: + case DRV_QUERYCONFIGURE: + case DRV_INSTALL: + case DRV_REMOVE: + case DRV_EXITSESSION: + case DRV_EXITAPPLICATION: + case DRV_POWER: + FIXME(mci, "This is a hack\n"); return 0; default: FIXME(mci, "Map/Unmap internal error on msg=%s\n", MCI_CommandToString(wMsg)); @@ -2078,7 +2138,7 @@ int MCI_UnMapMsg16To32A(WORD uDevTyp, WORD wMsg, DWORD lParam) * mciSendCommandA [WINMM.49] */ DWORD WINAPI mciSendCommand32A(UINT32 wDevID, UINT32 wMsg, DWORD dwParam1, DWORD dwParam2) - { +{ TRACE(mci, "(%08x,%s,%08lx,%08lx)\n", wDevID, MCI_CommandToString(wMsg), dwParam1, dwParam2); switch (wMsg) { @@ -2089,14 +2149,14 @@ DWORD WINAPI mciSendCommand32A(UINT32 wDevID, UINT32 wMsg, DWORD dwParam1, DWORD case MCI_SYSINFO: return MCI_SysInfo(wDevID, dwParam1, (LPMCI_SYSINFO_PARMS32A)dwParam2); default: - if (wDevID == MCI_ALL_DEVICE_ID) { - FIXME(mci, "unhandled MCI_ALL_DEVICE_ID\n"); - return MCIERR_CANNOT_USE_ALL; - } - - return MCI_SendCommand32(wDevID, wMsg, dwParam1, dwParam2); + if (wDevID == MCI_ALL_DEVICE_ID) { + FIXME(mci, "unhandled MCI_ALL_DEVICE_ID\n"); + return MCIERR_CANNOT_USE_ALL; } + + return MCI_SendCommand32(wDevID, wMsg, dwParam1, dwParam2); } +} /************************************************************************** * mciSendCommandW [WINMM.50] @@ -2109,8 +2169,7 @@ DWORD WINAPI mciSendCommand32W(UINT32 wDevID, UINT32 wMsg, DWORD dwParam1, DWORD /************************************************************************** * mciSendCommand [MMSYSTEM.701] */ -DWORD WINAPI mciSendCommand16(UINT16 wDevID, UINT16 wMsg, DWORD dwParam1, - DWORD dwParam2) +DWORD WINAPI mciSendCommand16(UINT16 wDevID, UINT16 wMsg, DWORD dwParam1, DWORD dwParam2) { DWORD dwRet = MCIERR_UNRECOGNIZED_COMMAND; @@ -2142,8 +2201,8 @@ DWORD WINAPI mciSendCommand16(UINT16 wDevID, UINT16 wMsg, DWORD dwParam1, } break; default: - if (wDevID == MCI_ALL_DEVICE_ID) { - FIXME(mci, "unhandled MCI_ALL_DEVICE_ID\n"); + if (wDevID == MCI_ALL_DEVICE_ID) { + FIXME(mci, "unhandled MCI_ALL_DEVICE_ID\n"); dwRet = MCIERR_CANNOT_USE_ALL; } else if (!MCI_DevIDValid(wDevID)) { dwRet = MCIERR_INVALID_DEVICE_ID; @@ -2160,13 +2219,13 @@ DWORD WINAPI mciSendCommand16(UINT16 wDevID, UINT16 wMsg, DWORD dwParam1, case 1: dwRet = MCI_SendCommand32(wDevID, wMsg, dwParam1, dwParam2); if (res) - MCI_UnMapMsg16To32A(MCI_DEVTYPE_SEQUENCER, wMsg, dwParam2); + MCI_UnMapMsg16To32A(MCI_GetDrv(wDevID)->modp.wType, wMsg, dwParam2); break; } } } return dwRet; - } +} /************************************************************************** * mciGetDeviceID [MMSYSTEM.703] @@ -2197,7 +2256,7 @@ UINT16 WINAPI mciGetDeviceID16(LPCSTR lpstrName) } return 0; - } +} /************************************************************************** * mciGetDeviceIDA [WINMM.41] @@ -2205,7 +2264,7 @@ UINT16 WINAPI mciGetDeviceID16(LPCSTR lpstrName) UINT32 WINAPI mciGetDeviceID32A(LPCSTR lpstrName) { return mciGetDeviceID16(lpstrName); - } +} /************************************************************************** * mciGetDeviceIDW [WINMM.43] @@ -2219,7 +2278,7 @@ UINT32 WINAPI mciGetDeviceID32W(LPCWSTR lpwstrName) ret = mciGetDeviceID16(lpstrName); HeapFree(GetProcessHeap(), 0, lpstrName); return ret; - } +} /************************************************************************** * mciSetYieldProc [MMSYSTEM.714] @@ -2269,7 +2328,7 @@ YIELDPROC WINAPI mciGetYieldProc16(UINT16 uDeviceID, DWORD* lpdwYieldData) { FIXME(mci, "(%u, %p) stub\n", uDeviceID, lpdwYieldData); return NULL; - } +} /************************************************************************** * mciGetYieldProc [WINMM.47] @@ -2303,7 +2362,7 @@ HTASK32 WINAPI mciGetCreatorTask32(UINT32 uDeviceID) */ UINT16 WINAPI mciDriverYield16(HANDLE16 hnd) { - FIXME(mmsys,"(%04x): stub!\n",hnd); + FIXME(mmsys,"(%04x): stub!\n", hnd); return 0; } @@ -2312,7 +2371,7 @@ UINT16 WINAPI mciDriverYield16(HANDLE16 hnd) */ UINT32 WINAPI mciDriverYield32(HANDLE32 hnd) { - FIXME(mmsys,"(%04x): stub!\n",hnd); + FIXME(mmsys,"(%04x): stub!\n", hnd); return 0; } @@ -2338,16 +2397,16 @@ UINT16 WINAPI midiOutGetNumDevs16(void) /************************************************************************** * midiOutGetDevCapsW [WINMM.76] */ -UINT32 WINAPI midiOutGetDevCaps32W(UINT32 uDeviceID,LPMIDIOUTCAPS32W lpCaps, UINT32 uSize) +UINT32 WINAPI midiOutGetDevCaps32W(UINT32 uDeviceID, LPMIDIOUTCAPS32W lpCaps, UINT32 uSize) { MIDIOUTCAPS16 moc16; UINT32 ret; - ret = midiOutGetDevCaps16(uDeviceID,&moc16,sizeof(moc16)); + ret = midiOutGetDevCaps16(uDeviceID, &moc16, sizeof(moc16)); lpCaps->wMid = moc16.wMid; lpCaps->wPid = moc16.wPid; lpCaps->vDriverVersion = moc16.vDriverVersion; - lstrcpyAtoW(lpCaps->szPname,moc16.szPname); + lstrcpyAtoW(lpCaps->szPname, moc16.szPname); lpCaps->wTechnology = moc16.wTechnology; lpCaps->wVoices = moc16.wVoices; lpCaps->wNotes = moc16.wNotes; @@ -2359,16 +2418,16 @@ UINT32 WINAPI midiOutGetDevCaps32W(UINT32 uDeviceID,LPMIDIOUTCAPS32W lpCaps, UIN /************************************************************************** * midiOutGetDevCapsA [WINMM.75] */ -UINT32 WINAPI midiOutGetDevCaps32A(UINT32 uDeviceID,LPMIDIOUTCAPS32A lpCaps, UINT32 uSize) +UINT32 WINAPI midiOutGetDevCaps32A(UINT32 uDeviceID, LPMIDIOUTCAPS32A lpCaps, UINT32 uSize) { MIDIOUTCAPS16 moc16; UINT32 ret; - ret = midiOutGetDevCaps16(uDeviceID,&moc16,sizeof(moc16)); + ret = midiOutGetDevCaps16(uDeviceID, &moc16, sizeof(moc16)); lpCaps->wMid = moc16.wMid; lpCaps->wPid = moc16.wPid; lpCaps->vDriverVersion = moc16.vDriverVersion; - strcpy(lpCaps->szPname,moc16.szPname); + strcpy(lpCaps->szPname, moc16.szPname); lpCaps->wTechnology = moc16.wTechnology; lpCaps->wVoices = moc16.wVoices; lpCaps->wNotes = moc16.wNotes; @@ -2380,10 +2439,10 @@ UINT32 WINAPI midiOutGetDevCaps32A(UINT32 uDeviceID,LPMIDIOUTCAPS32A lpCaps, UIN /************************************************************************** * midiOutGetDevCaps [MMSYSTEM.202] */ -UINT16 WINAPI midiOutGetDevCaps16(UINT16 uDeviceID,LPMIDIOUTCAPS16 lpCaps, UINT16 uSize) +UINT16 WINAPI midiOutGetDevCaps16(UINT16 uDeviceID, LPMIDIOUTCAPS16 lpCaps, UINT16 uSize) { TRACE(mmsys, "midiOutGetDevCaps\n"); - return modMessage(uDeviceID,MODM_GETDEVCAPS,0,(DWORD)lpCaps,uSize); + return modMessage(uDeviceID, MODM_GETDEVCAPS, 0, (DWORD)lpCaps,uSize); } /************************************************************************** @@ -2400,13 +2459,13 @@ UINT32 WINAPI midiOutGetErrorText32A(UINT32 uError, LPSTR lpText, UINT32 uSize) */ UINT32 WINAPI midiOutGetErrorText32W(UINT32 uError, LPWSTR lpText, UINT32 uSize) { - LPSTR xstr = HeapAlloc(GetProcessHeap(),0,uSize); + LPSTR xstr = HeapAlloc(GetProcessHeap(), 0,uSize); UINT32 ret; TRACE(mmsys, "midiOutGetErrorText\n"); ret = midiGetErrorText(uError, xstr, uSize); lstrcpyAtoW(lpText,xstr); - HeapFree(GetProcessHeap(),0,xstr); + HeapFree(GetProcessHeap(), 0,xstr); return ret; } @@ -2473,7 +2532,7 @@ UINT32 WINAPI midiOutOpen32(HMIDIOUT32 * lphMidiOut, UINT32 uDeviceID, HMIDIOUT16 hmo16; UINT32 ret; - ret = midiOutOpen16(&hmo16,uDeviceID,dwCallback,dwInstance, + ret = midiOutOpen16(&hmo16,uDeviceID, dwCallback, dwInstance, CALLBACK32CONV(dwFlags)); if (lphMidiOut) *lphMidiOut = hmo16; return ret; @@ -2582,7 +2641,7 @@ UINT16 WINAPI midiOutPrepareHeader16(HMIDIOUT16 hMidiOut, UINT32 WINAPI midiOutUnprepareHeader32(HMIDIOUT32 hMidiOut, MIDIHDR * lpMidiOutHdr, UINT32 uSize) { - return midiOutUnprepareHeader16(hMidiOut,lpMidiOutHdr,uSize); + return midiOutUnprepareHeader16(hMidiOut, lpMidiOutHdr,uSize); } /************************************************************************** @@ -2606,7 +2665,7 @@ UINT16 WINAPI midiOutUnprepareHeader16(HMIDIOUT16 hMidiOut, */ UINT32 WINAPI midiOutShortMsg32(HMIDIOUT32 hMidiOut, DWORD dwMsg) { - return midiOutShortMsg16(hMidiOut,dwMsg); + return midiOutShortMsg16(hMidiOut, dwMsg); } /************************************************************************** @@ -2629,7 +2688,7 @@ UINT16 WINAPI midiOutShortMsg16(HMIDIOUT16 hMidiOut, DWORD dwMsg) UINT32 WINAPI midiOutLongMsg32(HMIDIOUT32 hMidiOut, MIDIHDR * lpMidiOutHdr, UINT32 uSize) { - return midiOutLongMsg16(hMidiOut,lpMidiOutHdr,uSize); + return midiOutLongMsg16(hMidiOut, lpMidiOutHdr,uSize); } /************************************************************************** @@ -2675,7 +2734,7 @@ UINT16 WINAPI midiOutReset16(HMIDIOUT16 hMidiOut) */ UINT32 WINAPI midiOutGetVolume32(UINT32 uDeviceID, DWORD * lpdwVolume) { - return midiOutGetVolume16(uDeviceID,lpdwVolume); + return midiOutGetVolume16(uDeviceID, lpdwVolume); } /************************************************************************** @@ -2692,7 +2751,7 @@ UINT16 WINAPI midiOutGetVolume16(UINT16 uDeviceID, DWORD * lpdwVolume) */ UINT32 WINAPI midiOutSetVolume32(UINT32 uDeviceID, DWORD dwVolume) { - return midiOutSetVolume16(uDeviceID,dwVolume); + return midiOutSetVolume16(uDeviceID, dwVolume); } /************************************************************************** @@ -2710,7 +2769,7 @@ UINT16 WINAPI midiOutSetVolume16(UINT16 uDeviceID, DWORD dwVolume) UINT32 WINAPI midiOutCachePatches32(HMIDIOUT32 hMidiOut, UINT32 uBank, WORD * lpwPatchArray, UINT32 uFlags) { - return midiOutCachePatches16(hMidiOut,uBank,lpwPatchArray,uFlags); + return midiOutCachePatches16(hMidiOut,uBank, lpwPatchArray,uFlags); } /************************************************************************** @@ -2730,7 +2789,7 @@ UINT16 WINAPI midiOutCachePatches16(HMIDIOUT16 hMidiOut, UINT16 uBank, UINT32 WINAPI midiOutCacheDrumPatches32(HMIDIOUT32 hMidiOut, UINT32 uPatch, WORD * lpwKeyArray, UINT32 uFlags) { - return midiOutCacheDrumPatches16(hMidiOut,uPatch,lpwKeyArray,uFlags); + return midiOutCacheDrumPatches16(hMidiOut,uPatch, lpwKeyArray,uFlags); } /************************************************************************** @@ -2751,7 +2810,7 @@ UINT32 WINAPI midiOutGetID32(HMIDIOUT32 hMidiOut, UINT32 * lpuDeviceID) UINT16 xid; UINT32 ret; - ret = midiOutGetID16(hMidiOut,&xid); + ret = midiOutGetID16(hMidiOut, &xid); *lpuDeviceID = xid; return ret; } @@ -2782,7 +2841,7 @@ DWORD WINAPI midiOutMessage32(HMIDIOUT32 hMidiOut, UINT32 uMessage, FIXME(mmsys,"can't handle MODM_OPEN!\n"); return 0; case MODM_GETDEVCAPS: - return midiOutGetDevCaps32A(hMidiOut,(LPMIDIOUTCAPS32A)dwParam1,dwParam2); + return midiOutGetDevCaps32A(hMidiOut, (LPMIDIOUTCAPS32A)dwParam1, dwParam2); case MODM_GETNUMDEVS: case MODM_RESET: case MODM_CLOSE: @@ -2795,7 +2854,7 @@ DWORD WINAPI midiOutMessage32(HMIDIOUT32 hMidiOut, UINT32 uMessage, break; default: ERR(mmsys,"(%04x,%04x,%08lx,%08lx): unhandled message\n", - hMidiOut,uMessage,dwParam1,dwParam2); + hMidiOut,uMessage, dwParam1, dwParam2); break; } return modMessage(lpDesc->wDevID, uMessage, lpDesc->dwInstance, dwParam1, dwParam2); @@ -2824,16 +2883,16 @@ DWORD WINAPI midiOutMessage16(HMIDIOUT16 hMidiOut, UINT16 uMessage, /* no argument conversion needed */ break; case MODM_GETVOLUME: - return midiOutGetVolume16(hMidiOut,(LPDWORD)PTR_SEG_TO_LIN(dwParam1)); + return midiOutGetVolume16(hMidiOut, (LPDWORD)PTR_SEG_TO_LIN(dwParam1)); case MODM_LONGDATA: - return midiOutLongMsg16(hMidiOut,(LPMIDIHDR)PTR_SEG_TO_LIN(dwParam1),dwParam2); + return midiOutLongMsg16(hMidiOut, (LPMIDIHDR)PTR_SEG_TO_LIN(dwParam1), dwParam2); case MODM_PREPARE: - return midiOutPrepareHeader16(hMidiOut,(LPMIDIHDR)PTR_SEG_TO_LIN(dwParam1),dwParam2); + return midiOutPrepareHeader16(hMidiOut, (LPMIDIHDR)PTR_SEG_TO_LIN(dwParam1), dwParam2); case MODM_UNPREPARE: - return midiOutUnprepareHeader16(hMidiOut,(LPMIDIHDR)PTR_SEG_TO_LIN(dwParam1),dwParam2); + return midiOutUnprepareHeader16(hMidiOut, (LPMIDIHDR)PTR_SEG_TO_LIN(dwParam1), dwParam2); default: ERR(mmsys,"(%04x,%04x,%08lx,%08lx): unhandled message\n", - hMidiOut,uMessage,dwParam1,dwParam2); + hMidiOut,uMessage, dwParam1, dwParam2); break; } return modMessage(lpDesc->wDevID, uMessage, lpDesc->dwInstance, dwParam1, dwParam2); @@ -2866,12 +2925,12 @@ UINT32 WINAPI midiInGetDevCaps32W(UINT32 uDeviceID, LPMIDIINCAPS32W lpCaps, UINT32 uSize) { MIDIINCAPS16 mic16; - UINT32 ret = midiInGetDevCaps16(uDeviceID,&mic16,uSize); + UINT32 ret = midiInGetDevCaps16(uDeviceID, &mic16,uSize); lpCaps->wMid = mic16.wMid; lpCaps->wPid = mic16.wPid; lpCaps->vDriverVersion = mic16.vDriverVersion; - lstrcpyAtoW(lpCaps->szPname,mic16.szPname); + lstrcpyAtoW(lpCaps->szPname, mic16.szPname); lpCaps->dwSupport = mic16.dwSupport; return ret; } @@ -2883,12 +2942,12 @@ UINT32 WINAPI midiInGetDevCaps32A(UINT32 uDeviceID, LPMIDIINCAPS32A lpCaps, UINT32 uSize) { MIDIINCAPS16 mic16; - UINT32 ret = midiInGetDevCaps16(uDeviceID,&mic16,uSize); + UINT32 ret = midiInGetDevCaps16(uDeviceID, &mic16,uSize); lpCaps->wMid = mic16.wMid; lpCaps->wPid = mic16.wPid; lpCaps->vDriverVersion = mic16.vDriverVersion; - strcpy(lpCaps->szPname,mic16.szPname); + strcpy(lpCaps->szPname, mic16.szPname); lpCaps->dwSupport = mic16.dwSupport; return ret; } @@ -2900,7 +2959,7 @@ UINT16 WINAPI midiInGetDevCaps16(UINT16 uDeviceID, LPMIDIINCAPS16 lpCaps, UINT16 uSize) { TRACE(mmsys, "midiInGetDevCaps\n"); - return midMessage(uDeviceID,MIDM_GETDEVCAPS, 0, (DWORD)lpCaps, uSize); + return midMessage(uDeviceID, MIDM_GETDEVCAPS, 0, (DWORD)lpCaps, uSize); } /************************************************************************** @@ -2908,10 +2967,10 @@ UINT16 WINAPI midiInGetDevCaps16(UINT16 uDeviceID, */ UINT32 WINAPI midiInGetErrorText32W(UINT32 uError, LPWSTR lpText, UINT32 uSize) { - LPSTR xstr = HeapAlloc(GetProcessHeap(),0,uSize); + LPSTR xstr = HeapAlloc(GetProcessHeap(), 0,uSize); UINT32 ret = midiInGetErrorText16(uError,xstr,uSize); lstrcpyAtoW(lpText,xstr); - HeapFree(GetProcessHeap(),0,xstr); + HeapFree(GetProcessHeap(), 0,xstr); return ret; } @@ -2920,7 +2979,7 @@ UINT32 WINAPI midiInGetErrorText32W(UINT32 uError, LPWSTR lpText, UINT32 uSize) */ UINT32 WINAPI midiInGetErrorText32A(UINT32 uError, LPSTR lpText, UINT32 uSize) { - return midiInGetErrorText16(uError,lpText,uSize); + return midiInGetErrorText16(uError, lpText,uSize); } /************************************************************************** @@ -2939,7 +2998,7 @@ UINT32 WINAPI midiInOpen32(HMIDIIN32 * lphMidiIn, UINT32 uDeviceID, DWORD dwCallback, DWORD dwInstance, DWORD dwFlags) { HMIDIIN16 xhmid16; - UINT32 ret = midiInOpen16(&xhmid16,uDeviceID,dwCallback,dwInstance, + UINT32 ret = midiInOpen16(&xhmid16,uDeviceID, dwCallback, dwInstance, CALLBACK32CONV(dwFlags)); if (lphMidiIn) *lphMidiIn = xhmid16; @@ -3050,7 +3109,7 @@ UINT16 WINAPI midiInPrepareHeader16(HMIDIIN16 hMidiIn, UINT32 WINAPI midiInUnprepareHeader32(HMIDIIN32 hMidiIn, MIDIHDR * lpMidiInHdr, UINT32 uSize) { - return midiInUnprepareHeader16(hMidiIn,lpMidiInHdr,uSize); + return midiInUnprepareHeader16(hMidiIn, lpMidiInHdr,uSize); } /************************************************************************** @@ -3074,7 +3133,7 @@ UINT16 WINAPI midiInUnprepareHeader16(HMIDIIN16 hMidiIn, UINT32 WINAPI midiInAddBuffer32(HMIDIIN32 hMidiIn, MIDIHDR * lpMidiInHdr, UINT32 uSize) { - return midiInAddBuffer16(hMidiIn,lpMidiInHdr,uSize); + return midiInAddBuffer16(hMidiIn, lpMidiInHdr,uSize); } /************************************************************************** @@ -3208,7 +3267,7 @@ DWORD WINAPI midiInMessage32(HMIDIIN32 hMidiIn, UINT32 uMessage, FIXME(mmsys,"can't handle MIDM_OPEN!\n"); return 0; case MIDM_GETDEVCAPS: - return midiInGetDevCaps32A(hMidiIn,(LPMIDIINCAPS32A)dwParam1,dwParam2); + return midiInGetDevCaps32A(hMidiIn, (LPMIDIINCAPS32A)dwParam1, dwParam2); case MIDM_GETNUMDEVS: case MIDM_RESET: case MIDM_STOP: @@ -3217,14 +3276,14 @@ DWORD WINAPI midiInMessage32(HMIDIIN32 hMidiIn, UINT32 uMessage, /* no argument conversion needed */ break; case MIDM_PREPARE: - return midiInPrepareHeader32(hMidiIn,(LPMIDIHDR)dwParam1,dwParam2); + return midiInPrepareHeader32(hMidiIn, (LPMIDIHDR)dwParam1, dwParam2); case MIDM_UNPREPARE: - return midiInUnprepareHeader32(hMidiIn,(LPMIDIHDR)dwParam1,dwParam2); + return midiInUnprepareHeader32(hMidiIn, (LPMIDIHDR)dwParam1, dwParam2); case MIDM_ADDBUFFER: - return midiInAddBuffer32(hMidiIn,(LPMIDIHDR)dwParam1,dwParam2); + return midiInAddBuffer32(hMidiIn, (LPMIDIHDR)dwParam1, dwParam2); default: ERR(mmsys,"(%04x,%04x,%08lx,%08lx): unhandled message\n", - hMidiIn,uMessage,dwParam1,dwParam2); + hMidiIn,uMessage, dwParam1, dwParam2); break; } return midMessage(0, uMessage, lpDesc->dwInstance, dwParam1, dwParam2); @@ -3247,7 +3306,7 @@ DWORD WINAPI midiInMessage16(HMIDIIN16 hMidiIn, UINT16 uMessage, WARN(mmsys,"can't handle MIDM_OPEN!\n"); return 0; case MIDM_GETDEVCAPS: - return midiInGetDevCaps16(hMidiIn,(LPMIDIINCAPS16)PTR_SEG_TO_LIN(dwParam1),dwParam2); + return midiInGetDevCaps16(hMidiIn, (LPMIDIINCAPS16)PTR_SEG_TO_LIN(dwParam1), dwParam2); case MIDM_GETNUMDEVS: case MIDM_RESET: case MIDM_STOP: @@ -3256,14 +3315,14 @@ DWORD WINAPI midiInMessage16(HMIDIIN16 hMidiIn, UINT16 uMessage, /* no argument conversion needed */ break; case MIDM_PREPARE: - return midiInPrepareHeader16(hMidiIn,(LPMIDIHDR)PTR_SEG_TO_LIN(dwParam1),dwParam2); + return midiInPrepareHeader16(hMidiIn, (LPMIDIHDR)PTR_SEG_TO_LIN(dwParam1), dwParam2); case MIDM_UNPREPARE: - return midiInUnprepareHeader16(hMidiIn,(LPMIDIHDR)PTR_SEG_TO_LIN(dwParam1),dwParam2); + return midiInUnprepareHeader16(hMidiIn, (LPMIDIHDR)PTR_SEG_TO_LIN(dwParam1), dwParam2); case MIDM_ADDBUFFER: - return midiInAddBuffer16(hMidiIn,(LPMIDIHDR)PTR_SEG_TO_LIN(dwParam1),dwParam2); + return midiInAddBuffer16(hMidiIn, (LPMIDIHDR)PTR_SEG_TO_LIN(dwParam1), dwParam2); default: ERR(mmsys,"(%04x,%04x,%08lx,%08lx): unhandled message\n", - hMidiIn,uMessage,dwParam1,dwParam2); + hMidiIn,uMessage, dwParam1, dwParam2); break; } return midMessage(0, uMessage, lpDesc->dwInstance, dwParam1, dwParam2); @@ -3363,8 +3422,8 @@ MMRESULT32 WINAPI midiStreamOpen32(HMIDISTRM32* phms, LPUINT32 lpuDeviceID, { WINE_MIDIStream* ms; - TRACE(midi, "(%p,%p,%ld,0x%08lx,0x%08lx,0x%08lx),stub!\n", - phms,lpuDeviceID,cMidi,dwCallback,dwInstance,fdwOpen); + TRACE(midi, "(%p,%p,%ld, 0x%08lx, 0x%08lx, 0x%08lx), stub!\n", + phms, lpuDeviceID,cMidi, dwCallback, dwInstance, fdwOpen); if (cMidi != 1 || phms == NULL || lpuDeviceID == NULL) return MMSYSERR_INVALPARAM; @@ -3604,7 +3663,7 @@ UINT16 WINAPI waveOutGetNumDevs16() UINT16 count = 0; TRACE(mmsys, "waveOutGetNumDevs\n"); /* FIXME: I'm not sure MCI_FirstDevID() is correct */ - count += wodMessage( MCI_FirstDevID(), WODM_GETNUMDEVS, 0L, 0L, 0L); + count += wodMessage(MCI_FirstDevID(), WODM_GETNUMDEVS, 0L, 0L, 0L); TRACE(mmsys, "waveOutGetNumDevs return %u \n", count); return count; } @@ -3628,12 +3687,12 @@ UINT32 WINAPI waveOutGetDevCaps32A(UINT32 uDeviceID, LPWAVEOUTCAPS32A lpCaps, UINT32 uSize) { WAVEOUTCAPS16 woc16; - UINT16 ret = waveOutGetDevCaps16(uDeviceID,&woc16,sizeof(woc16)); + UINT16 ret = waveOutGetDevCaps16(uDeviceID, &woc16, sizeof(woc16)); lpCaps->wMid = woc16.wMid; lpCaps->wPid = woc16.wPid; lpCaps->vDriverVersion = woc16.vDriverVersion; - strcpy(lpCaps->szPname,woc16.szPname); + strcpy(lpCaps->szPname, woc16.szPname); lpCaps->dwFormats = woc16.dwFormats; lpCaps->wChannels = woc16.wChannels; lpCaps->dwSupport = woc16.dwSupport; @@ -3647,12 +3706,12 @@ UINT32 WINAPI waveOutGetDevCaps32W(UINT32 uDeviceID, LPWAVEOUTCAPS32W lpCaps, UINT32 uSize) { WAVEOUTCAPS16 woc16; - UINT32 ret = waveOutGetDevCaps16(uDeviceID,&woc16,sizeof(woc16)); + UINT32 ret = waveOutGetDevCaps16(uDeviceID, &woc16, sizeof(woc16)); lpCaps->wMid = woc16.wMid; lpCaps->wPid = woc16.wPid; lpCaps->vDriverVersion = woc16.vDriverVersion; - lstrcpyAtoW(lpCaps->szPname,woc16.szPname); + lstrcpyAtoW(lpCaps->szPname, woc16.szPname); lpCaps->dwFormats = woc16.dwFormats; lpCaps->wChannels = woc16.wChannels; lpCaps->dwSupport = woc16.dwSupport; @@ -3681,11 +3740,11 @@ UINT32 WINAPI waveOutGetErrorText32A(UINT32 uError, LPSTR lpText, UINT32 uSize) */ UINT32 WINAPI waveOutGetErrorText32W(UINT32 uError, LPWSTR lpText, UINT32 uSize) { - LPSTR xstr = HeapAlloc(GetProcessHeap(),0,uSize); + LPSTR xstr = HeapAlloc(GetProcessHeap(), 0,uSize); UINT32 ret = waveOutGetErrorText32A(uError, xstr, uSize); lstrcpyAtoW(lpText,xstr); - HeapFree(GetProcessHeap(),0,xstr); + HeapFree(GetProcessHeap(), 0,xstr); return ret; } @@ -3765,7 +3824,7 @@ UINT32 WINAPI waveOutOpen32(HWAVEOUT32 * lphWaveOut, UINT32 uDeviceID, DWORD dwInstance, DWORD dwFlags) { HWAVEOUT16 hwo16; - UINT32 ret = waveOutOpen16(&hwo16,uDeviceID,lpFormat,dwCallback,dwInstance, + UINT32 ret = waveOutOpen16(&hwo16,uDeviceID, lpFormat, dwCallback, dwInstance, CALLBACK32CONV(dwFlags)); if (lphWaveOut) *lphWaveOut=hwo16; @@ -3840,14 +3899,14 @@ UINT16 WINAPI waveOutClose16(HWAVEOUT16 hWaveOut) lpDesc = (LPWAVEOPENDESC) USER_HEAP_LIN_ADDR(hWaveOut); if (lpDesc == NULL) return MMSYSERR_INVALHANDLE; - return wodMessage( lpDesc->uDeviceID, WODM_CLOSE, lpDesc->dwInstance, 0L, 0L); + return wodMessage(lpDesc->uDeviceID, WODM_CLOSE, lpDesc->dwInstance, 0L, 0L); } /************************************************************************** * waveOutPrepareHeader [WINMM.175] */ UINT32 WINAPI waveOutPrepareHeader32(HWAVEOUT32 hWaveOut, - WAVEHDR * lpWaveOutHdr, UINT32 uSize) + WAVEHDR* lpWaveOutHdr, UINT32 uSize) { LPWAVEOPENDESC lpDesc; @@ -3855,7 +3914,8 @@ UINT32 WINAPI waveOutPrepareHeader32(HWAVEOUT32 hWaveOut, lpDesc = (LPWAVEOPENDESC) USER_HEAP_LIN_ADDR(hWaveOut); if (lpDesc == NULL) return MMSYSERR_INVALHANDLE; - return wodMessage( lpDesc->uDeviceID, WODM_PREPARE, lpDesc->dwInstance, + lpWaveOutHdr->reserved = (DWORD)lpWaveOutHdr->lpData; + return wodMessage(lpDesc->uDeviceID, WODM_PREPARE, lpDesc->dwInstance, (DWORD)lpWaveOutHdr,uSize); } @@ -3863,20 +3923,20 @@ UINT32 WINAPI waveOutPrepareHeader32(HWAVEOUT32 hWaveOut, * waveOutPrepareHeader [MMSYSTEM.406] */ UINT16 WINAPI waveOutPrepareHeader16(HWAVEOUT16 hWaveOut, - WAVEHDR * lpWaveOutHdr, UINT16 uSize) + WAVEHDR* lpWaveOutHdr, UINT16 uSize) { LPWAVEOPENDESC lpDesc; - LPBYTE saveddata = lpWaveOutHdr->lpData; UINT16 ret; TRACE(mmsys, "(%04X, %p, %u);\n", hWaveOut, lpWaveOutHdr, uSize); lpDesc = (LPWAVEOPENDESC) USER_HEAP_LIN_ADDR(hWaveOut); if (lpDesc == NULL) return MMSYSERR_INVALHANDLE; + lpWaveOutHdr->reserved = (DWORD)lpWaveOutHdr->lpData; lpWaveOutHdr->lpData = PTR_SEG_TO_LIN(lpWaveOutHdr->lpData); - ret = wodMessage( lpDesc->uDeviceID, WODM_PREPARE, lpDesc->dwInstance, + ret = wodMessage(lpDesc->uDeviceID, WODM_PREPARE, lpDesc->dwInstance, (DWORD)lpWaveOutHdr,uSize); - lpWaveOutHdr->lpData = saveddata; + lpWaveOutHdr->lpData = lpWaveOutHdr->lpData; return ret; } @@ -3884,7 +3944,7 @@ UINT16 WINAPI waveOutPrepareHeader16(HWAVEOUT16 hWaveOut, * waveOutUnprepareHeader [WINMM.181] */ UINT32 WINAPI waveOutUnprepareHeader32(HWAVEOUT32 hWaveOut, - WAVEHDR * lpWaveOutHdr, UINT32 uSize) + WAVEHDR* lpWaveOutHdr, UINT32 uSize) { LPWAVEOPENDESC lpDesc; @@ -3892,7 +3952,8 @@ UINT32 WINAPI waveOutUnprepareHeader32(HWAVEOUT32 hWaveOut, lpDesc = (LPWAVEOPENDESC) USER_HEAP_LIN_ADDR(hWaveOut); if (lpDesc == NULL) return MMSYSERR_INVALHANDLE; - return wodMessage(lpDesc->uDeviceID,WODM_UNPREPARE,lpDesc->dwInstance, + lpWaveOutHdr->reserved = (DWORD)lpWaveOutHdr->lpData; + return wodMessage(lpDesc->uDeviceID, WODM_UNPREPARE, lpDesc->dwInstance, (DWORD)lpWaveOutHdr, uSize); } @@ -3900,27 +3961,27 @@ UINT32 WINAPI waveOutUnprepareHeader32(HWAVEOUT32 hWaveOut, * waveOutUnprepareHeader [MMSYSTEM.407] */ UINT16 WINAPI waveOutUnprepareHeader16(HWAVEOUT16 hWaveOut, - WAVEHDR * lpWaveOutHdr, UINT16 uSize) + WAVEHDR* lpWaveOutHdr, UINT16 uSize) { LPWAVEOPENDESC lpDesc; - LPBYTE saveddata = lpWaveOutHdr->lpData; UINT16 ret; TRACE(mmsys, "(%04X, %p, %u);\n", hWaveOut, lpWaveOutHdr, uSize); lpDesc = (LPWAVEOPENDESC) USER_HEAP_LIN_ADDR(hWaveOut); if (lpDesc == NULL) return MMSYSERR_INVALHANDLE; + lpWaveOutHdr->reserved = (DWORD)lpWaveOutHdr->lpData; lpWaveOutHdr->lpData = PTR_SEG_TO_LIN(lpWaveOutHdr->lpData); - ret = wodMessage(lpDesc->uDeviceID,WODM_UNPREPARE,lpDesc->dwInstance, + ret = wodMessage(lpDesc->uDeviceID, WODM_UNPREPARE, lpDesc->dwInstance, (DWORD)lpWaveOutHdr, uSize); - lpWaveOutHdr->lpData = saveddata; + lpWaveOutHdr->lpData = (LPBYTE)lpWaveOutHdr->reserved; return ret; } /************************************************************************** * waveOutWrite [MMSYSTEM.408] */ -UINT32 WINAPI waveOutWrite32(HWAVEOUT32 hWaveOut, WAVEHDR * lpWaveOutHdr, +UINT32 WINAPI waveOutWrite32(HWAVEOUT32 hWaveOut, WAVEHDR* lpWaveOutHdr, UINT32 uSize) { LPWAVEOPENDESC lpDesc; @@ -3930,7 +3991,7 @@ UINT32 WINAPI waveOutWrite32(HWAVEOUT32 hWaveOut, WAVEHDR * lpWaveOutHdr, lpDesc = (LPWAVEOPENDESC) USER_HEAP_LIN_ADDR(hWaveOut); if (lpDesc == NULL) return MMSYSERR_INVALHANDLE; lpWaveOutHdr->reserved = (DWORD)lpWaveOutHdr->lpData; - return wodMessage( lpDesc->uDeviceID, WODM_WRITE, lpDesc->dwInstance, (DWORD)lpWaveOutHdr, uSize); + return wodMessage(lpDesc->uDeviceID, WODM_WRITE, lpDesc->dwInstance, (DWORD)lpWaveOutHdr, uSize); } /************************************************************************** @@ -3946,9 +4007,9 @@ UINT16 WINAPI waveOutWrite16(HWAVEOUT16 hWaveOut, WAVEHDR * lpWaveOutHdr, lpDesc = (LPWAVEOPENDESC) USER_HEAP_LIN_ADDR(hWaveOut); if (lpDesc == NULL) return MMSYSERR_INVALHANDLE; - lpWaveOutHdr->reserved=(DWORD)lpWaveOutHdr->lpData;/*save original ptr*/ + lpWaveOutHdr->reserved =(DWORD)lpWaveOutHdr->lpData;/*save original ptr*/ lpWaveOutHdr->lpData = PTR_SEG_TO_LIN(lpWaveOutHdr->lpData); - ret = wodMessage( lpDesc->uDeviceID, WODM_WRITE, lpDesc->dwInstance, (DWORD)lpWaveOutHdr, uSize); + ret = wodMessage(lpDesc->uDeviceID, WODM_WRITE, lpDesc->dwInstance, (DWORD)lpWaveOutHdr, uSize); lpWaveOutHdr->lpData = (LPBYTE)lpWaveOutHdr->reserved; return ret; } @@ -3972,7 +4033,7 @@ UINT16 WINAPI waveOutPause16(HWAVEOUT16 hWaveOut) lpDesc = (LPWAVEOPENDESC) USER_HEAP_LIN_ADDR(hWaveOut); if (lpDesc == NULL) return MMSYSERR_INVALHANDLE; - return wodMessage( lpDesc->uDeviceID, WODM_PAUSE, lpDesc->dwInstance, 0L, 0L); + return wodMessage(lpDesc->uDeviceID, WODM_PAUSE, lpDesc->dwInstance, 0L, 0L); } /************************************************************************** @@ -3994,7 +4055,7 @@ UINT16 WINAPI waveOutRestart16(HWAVEOUT16 hWaveOut) lpDesc = (LPWAVEOPENDESC) USER_HEAP_LIN_ADDR(hWaveOut); if (lpDesc == NULL) return MMSYSERR_INVALHANDLE; - return wodMessage( lpDesc->uDeviceID, WODM_RESTART, lpDesc->dwInstance, 0L, 0L); + return wodMessage(lpDesc->uDeviceID, WODM_RESTART, lpDesc->dwInstance, 0L, 0L); } /************************************************************************** @@ -4016,7 +4077,7 @@ UINT16 WINAPI waveOutReset16(HWAVEOUT16 hWaveOut) lpDesc = (LPWAVEOPENDESC) USER_HEAP_LIN_ADDR(hWaveOut); if (lpDesc == NULL) return MMSYSERR_INVALHANDLE; - return wodMessage( lpDesc->uDeviceID, WODM_RESET, lpDesc->dwInstance, 0L, 0L); + return wodMessage(lpDesc->uDeviceID, WODM_RESET, lpDesc->dwInstance, 0L, 0L); } /************************************************************************** @@ -4029,22 +4090,22 @@ UINT32 WINAPI waveOutGetPosition32(HWAVEOUT32 hWaveOut, LPMMTIME32 lpTime, UINT32 ret; mmt16.wType = lpTime->wType; - ret = waveOutGetPosition16(hWaveOut,&mmt16,sizeof(mmt16)); - MMSYSTEM_MMTIME16to32(lpTime,&mmt16); + ret = waveOutGetPosition16(hWaveOut, &mmt16, sizeof(mmt16)); + MMSYSTEM_MMTIME16to32(lpTime, &mmt16); return ret; } /************************************************************************** * waveOutGetPosition [MMSYSTEM.412] */ -UINT16 WINAPI waveOutGetPosition16(HWAVEOUT16 hWaveOut,LPMMTIME16 lpTime, +UINT16 WINAPI waveOutGetPosition16(HWAVEOUT16 hWaveOut, LPMMTIME16 lpTime, UINT16 uSize) { LPWAVEOPENDESC lpDesc; TRACE(mmsys, "(%04X, %p, %u);\n", hWaveOut, lpTime, uSize); lpDesc = (LPWAVEOPENDESC) USER_HEAP_LIN_ADDR(hWaveOut); if (lpDesc == NULL) return MMSYSERR_INVALHANDLE; - return wodMessage( lpDesc->uDeviceID, WODM_GETPOS, lpDesc->dwInstance, + return wodMessage(lpDesc->uDeviceID, WODM_GETPOS, lpDesc->dwInstance, (DWORD)lpTime, (DWORD)uSize); } @@ -4063,10 +4124,10 @@ UINT16 WINAPI waveOut##xx##16(HWAVEOUT16 hWaveOut, atype x) \ lpDesc->dwInstance, (DWORD)x, 0L); \ } -WAVEOUT_SHORTCUT_1(GetPitch,GETPITCH,DWORD*) -WAVEOUT_SHORTCUT_1(SetPitch,SETPITCH,DWORD) -WAVEOUT_SHORTCUT_1(GetPlaybackRate,GETPLAYBACKRATE,DWORD*) -WAVEOUT_SHORTCUT_1(SetPlaybackRate,SETPLAYBACKRATE,DWORD) +WAVEOUT_SHORTCUT_1(GetPitch,GETPITCH, DWORD*) +WAVEOUT_SHORTCUT_1(SetPitch,SETPITCH, DWORD) +WAVEOUT_SHORTCUT_1(GetPlaybackRate,GETPLAYBACKRATE, DWORD*) +WAVEOUT_SHORTCUT_1(SetPlaybackRate,SETPLAYBACKRATE, DWORD) #define WAVEOUT_SHORTCUT_2(xx,XX,atype) \ UINT32 WINAPI waveOut##xx##32(UINT32 devid, atype x) \ @@ -4079,9 +4140,8 @@ UINT16 WINAPI waveOut##xx##16(UINT16 devid, atype x) \ return wodMessage(devid, WODM_##XX, 0L, (DWORD)x, 0L); \ } -WAVEOUT_SHORTCUT_2(GetVolume,GETVOLUME,DWORD*) -WAVEOUT_SHORTCUT_2(SetVolume,SETVOLUME,DWORD) - +WAVEOUT_SHORTCUT_2(GetVolume,GETVOLUME, DWORD*) +WAVEOUT_SHORTCUT_2(SetVolume,SETVOLUME, DWORD) /************************************************************************** * waveOutBreakLoop [MMSYSTEM.419] @@ -4160,19 +4220,19 @@ DWORD WINAPI waveOutMessage32(HWAVEOUT32 hWaveOut, UINT32 uMessage, /* no argument conversion needed */ break; case WODM_WRITE: - return waveOutWrite32(hWaveOut,(LPWAVEHDR)dwParam1,dwParam2); + return waveOutWrite32(hWaveOut, (LPWAVEHDR)dwParam1, dwParam2); case WODM_GETDEVCAPS: /* FIXME: UNICODE/ANSI? */ - return waveOutGetDevCaps32A(hWaveOut,(LPWAVEOUTCAPS32A)dwParam1,dwParam2); + return waveOutGetDevCaps32A(hWaveOut, (LPWAVEOUTCAPS32A)dwParam1, dwParam2); case WODM_OPEN: FIXME(mmsys,"can't handle WODM_OPEN, please report.\n"); break; default: - ERR(mmsys,"(0x%04x,0x%04x,%08lx,%08lx): unhandled message\n", - hWaveOut,uMessage,dwParam1,dwParam2); + ERR(mmsys,"(0x%04x, 0x%04x,%08lx,%08lx): unhandled message\n", + hWaveOut,uMessage, dwParam1, dwParam2); break; } - return wodMessage( lpDesc->uDeviceID, uMessage, lpDesc->dwInstance, dwParam1, dwParam2); + return wodMessage(lpDesc->uDeviceID, uMessage, lpDesc->dwInstance, dwParam1, dwParam2); } /************************************************************************** @@ -4197,29 +4257,29 @@ DWORD WINAPI waveOutMessage16(HWAVEOUT16 hWaveOut, UINT16 uMessage, /* no argument conversion needed */ break; case WODM_GETPOS: - return waveOutGetPosition16(hWaveOut,(LPMMTIME16)PTR_SEG_TO_LIN(dwParam1),dwParam2); + return waveOutGetPosition16(hWaveOut, (LPMMTIME16)PTR_SEG_TO_LIN(dwParam1), dwParam2); case WODM_GETVOLUME: - return waveOutGetVolume16(hWaveOut,(LPDWORD)PTR_SEG_TO_LIN(dwParam1)); + return waveOutGetVolume16(hWaveOut, (LPDWORD)PTR_SEG_TO_LIN(dwParam1)); case WODM_GETPITCH: - return waveOutGetPitch16(hWaveOut,(LPDWORD)PTR_SEG_TO_LIN(dwParam1)); + return waveOutGetPitch16(hWaveOut, (LPDWORD)PTR_SEG_TO_LIN(dwParam1)); case WODM_GETPLAYBACKRATE: - return waveOutGetPlaybackRate16(hWaveOut,(LPDWORD)PTR_SEG_TO_LIN(dwParam1)); + return waveOutGetPlaybackRate16(hWaveOut, (LPDWORD)PTR_SEG_TO_LIN(dwParam1)); case WODM_GETDEVCAPS: - return waveOutGetDevCaps16(hWaveOut,(LPWAVEOUTCAPS16)PTR_SEG_TO_LIN(dwParam1),dwParam2); + return waveOutGetDevCaps16(hWaveOut, (LPWAVEOUTCAPS16)PTR_SEG_TO_LIN(dwParam1), dwParam2); case WODM_PREPARE: - return waveOutPrepareHeader16(hWaveOut,(LPWAVEHDR)PTR_SEG_TO_LIN(dwParam1),dwParam2); + return waveOutPrepareHeader16(hWaveOut, (LPWAVEHDR)PTR_SEG_TO_LIN(dwParam1), dwParam2); case WODM_UNPREPARE: - return waveOutUnprepareHeader16(hWaveOut,(LPWAVEHDR)PTR_SEG_TO_LIN(dwParam1),dwParam2); + return waveOutUnprepareHeader16(hWaveOut, (LPWAVEHDR)PTR_SEG_TO_LIN(dwParam1), dwParam2); case WODM_WRITE: - return waveOutWrite16(hWaveOut,(LPWAVEHDR)PTR_SEG_TO_LIN(dwParam1),dwParam2); + return waveOutWrite16(hWaveOut, (LPWAVEHDR)PTR_SEG_TO_LIN(dwParam1), dwParam2); case WODM_OPEN: FIXME(mmsys,"can't handle WODM_OPEN, please report.\n"); break; default: - ERR(mmsys,"(0x%04x,0x%04x,%08lx,%08lx): unhandled message\n", - hWaveOut,uMessage,dwParam1,dwParam2); + ERR(mmsys,"(0x%04x, 0x%04x,%08lx,%08lx): unhandled message\n", + hWaveOut,uMessage, dwParam1, dwParam2); } - return wodMessage( lpDesc->uDeviceID, uMessage, lpDesc->dwInstance, dwParam1, dwParam2); + return wodMessage(lpDesc->uDeviceID, uMessage, lpDesc->dwInstance, dwParam1, dwParam2); } /************************************************************************** @@ -4249,12 +4309,12 @@ UINT16 WINAPI waveInGetNumDevs16() UINT32 WINAPI waveInGetDevCaps32W(UINT32 uDeviceID, LPWAVEINCAPS32W lpCaps, UINT32 uSize) { WAVEINCAPS16 wic16; - UINT32 ret = waveInGetDevCaps16(uDeviceID,&wic16,uSize); + UINT32 ret = waveInGetDevCaps16(uDeviceID, &wic16,uSize); lpCaps->wMid = wic16.wMid; lpCaps->wPid = wic16.wPid; lpCaps->vDriverVersion = wic16.vDriverVersion; - lstrcpyAtoW(lpCaps->szPname,wic16.szPname); + lstrcpyAtoW(lpCaps->szPname, wic16.szPname); lpCaps->dwFormats = wic16.dwFormats; lpCaps->wChannels = wic16.wChannels; @@ -4267,12 +4327,12 @@ UINT32 WINAPI waveInGetDevCaps32W(UINT32 uDeviceID, LPWAVEINCAPS32W lpCaps, UINT UINT32 WINAPI waveInGetDevCaps32A(UINT32 uDeviceID, LPWAVEINCAPS32A lpCaps, UINT32 uSize) { WAVEINCAPS16 wic16; - UINT32 ret = waveInGetDevCaps16(uDeviceID,&wic16,uSize); + UINT32 ret = waveInGetDevCaps16(uDeviceID, &wic16,uSize); lpCaps->wMid = wic16.wMid; lpCaps->wPid = wic16.wPid; lpCaps->vDriverVersion = wic16.vDriverVersion; - strcpy(lpCaps->szPname,wic16.szPname); + strcpy(lpCaps->szPname, wic16.szPname); lpCaps->dwFormats = wic16.dwFormats; lpCaps->wChannels = wic16.wChannels; return ret; @@ -4302,11 +4362,11 @@ UINT32 WINAPI waveInGetErrorText32A(UINT32 uError, LPSTR lpText, UINT32 uSize) */ UINT32 WINAPI waveInGetErrorText32W(UINT32 uError, LPWSTR lpText, UINT32 uSize) { - LPSTR txt = HeapAlloc(GetProcessHeap(),0,uSize); + LPSTR txt = HeapAlloc(GetProcessHeap(), 0,uSize); UINT32 ret = waveGetErrorText(uError, txt, uSize); - lstrcpyAtoW(lpText,txt); - HeapFree(GetProcessHeap(),0,txt); + lstrcpyAtoW(lpText, txt); + HeapFree(GetProcessHeap(), 0, txt); return ret; } @@ -4327,7 +4387,7 @@ UINT32 WINAPI waveInOpen32(HWAVEIN32 * lphWaveIn, UINT32 uDeviceID, DWORD dwInstance, DWORD dwFlags) { HWAVEIN16 hwin16; - UINT32 ret = waveInOpen16(&hwin16,uDeviceID,lpFormat,dwCallback,dwInstance, + UINT32 ret = waveInOpen16(&hwin16,uDeviceID, lpFormat, dwCallback, dwInstance, CALLBACK32CONV(dwFlags)); if (lphWaveIn) *lphWaveIn = hwin16; return ret; @@ -4418,7 +4478,7 @@ UINT32 WINAPI waveInPrepareHeader32(HWAVEIN32 hWaveIn, lpWaveInHdr->dwBytesRecorded = 0; TRACE(mmsys, "lpData=%p size=%lu \n", lpWaveInHdr->lpData, lpWaveInHdr->dwBufferLength); - return widMessage(lpDesc->uDeviceID,WIDM_PREPARE,lpDesc->dwInstance, + return widMessage(lpDesc->uDeviceID, WIDM_PREPARE, lpDesc->dwInstance, (DWORD)lpWaveInHdr, uSize); } @@ -4444,7 +4504,7 @@ UINT16 WINAPI waveInPrepareHeader16(HWAVEIN16 hWaveIn, TRACE(mmsys, "lpData=%p size=%lu \n", lpWaveInHdr->lpData, lpWaveInHdr->dwBufferLength); lpWaveInHdr->lpData = PTR_SEG_TO_LIN(lpWaveInHdr->lpData); - ret = widMessage(lpDesc->uDeviceID,WIDM_PREPARE,lpDesc->dwInstance, + ret = widMessage(lpDesc->uDeviceID, WIDM_PREPARE, lpDesc->dwInstance, (DWORD)lpWaveInHdr,uSize); lpWaveInHdr->lpData = saveddata; return ret; @@ -4466,7 +4526,7 @@ UINT32 WINAPI waveInUnprepareHeader32(HWAVEIN32 hWaveIn, /*USER_HEAP_FREE(HIWORD((DWORD)lpWaveInHdr->lpData)); FIXME */ lpWaveInHdr->lpData = NULL; lpWaveInHdr->lpNext = NULL; - return widMessage(lpDesc->uDeviceID,WIDM_UNPREPARE,lpDesc->dwInstance, + return widMessage(lpDesc->uDeviceID, WIDM_UNPREPARE, lpDesc->dwInstance, (DWORD)lpWaveInHdr, uSize); } @@ -4486,7 +4546,7 @@ UINT16 WINAPI waveInUnprepareHeader16(HWAVEIN16 hWaveIn, /*USER_HEAP_FREE(HIWORD((DWORD)lpWaveInHdr->lpData)); FIXME */ lpWaveInHdr->lpData = NULL; lpWaveInHdr->lpNext = NULL; - return widMessage(lpDesc->uDeviceID,WIDM_UNPREPARE,lpDesc->dwInstance, + return widMessage(lpDesc->uDeviceID, WIDM_UNPREPARE, lpDesc->dwInstance, (DWORD)lpWaveInHdr, uSize); } @@ -4553,7 +4613,7 @@ UINT16 WINAPI waveInStart16(HWAVEIN16 hWaveIn) TRACE(mmsys, "(%04X)\n", hWaveIn); lpDesc = (LPWAVEOPENDESC) USER_HEAP_LIN_ADDR(hWaveIn); if (lpDesc == NULL) return MMSYSERR_INVALHANDLE; - return widMessage(lpDesc->uDeviceID,WIDM_START,lpDesc->dwInstance,0,0); + return widMessage(lpDesc->uDeviceID, WIDM_START, lpDesc->dwInstance, 0, 0); } /************************************************************************** @@ -4595,7 +4655,7 @@ UINT16 WINAPI waveInReset16(HWAVEIN16 hWaveIn) TRACE(mmsys, "(%04X)\n", hWaveIn); lpDesc = (LPWAVEOPENDESC) USER_HEAP_LIN_ADDR(hWaveIn); if (lpDesc == NULL) return MMSYSERR_INVALHANDLE; - return widMessage(lpDesc->uDeviceID,WIDM_RESET,lpDesc->dwInstance,0,0); + return widMessage(lpDesc->uDeviceID, WIDM_RESET, lpDesc->dwInstance, 0, 0); } /************************************************************************** @@ -4608,16 +4668,16 @@ UINT32 WINAPI waveInGetPosition32(HWAVEIN32 hWaveIn, LPMMTIME32 lpTime, UINT32 ret; mmt16.wType = lpTime->wType; - ret = waveInGetPosition16(hWaveIn,&mmt16,uSize); + ret = waveInGetPosition16(hWaveIn, &mmt16,uSize); - MMSYSTEM_MMTIME16to32(lpTime,&mmt16); + MMSYSTEM_MMTIME16to32(lpTime, &mmt16); return ret; } /************************************************************************** * waveInGetPosition [MMSYSTEM.512] */ -UINT16 WINAPI waveInGetPosition16(HWAVEIN16 hWaveIn,LPMMTIME16 lpTime, +UINT16 WINAPI waveInGetPosition16(HWAVEIN16 hWaveIn, LPMMTIME16 lpTime, UINT16 uSize) { LPWAVEOPENDESC lpDesc; @@ -4667,7 +4727,7 @@ DWORD WINAPI waveInMessage32(HWAVEIN32 hWaveIn, UINT32 uMessage, { LPWAVEOPENDESC lpDesc; - FIXME(mmsys, "(%04X, %04X, %08lX, %08lX),FIXME!\n", + FIXME(mmsys, "(%04X, %04X, %08lX, %08lX)\n", hWaveIn, uMessage, dwParam1, dwParam2); lpDesc = (LPWAVEOPENDESC) USER_HEAP_LIN_ADDR(hWaveIn); if (lpDesc == NULL) return MMSYSERR_INVALHANDLE; @@ -4678,7 +4738,7 @@ DWORD WINAPI waveInMessage32(HWAVEIN32 hWaveIn, UINT32 uMessage, case WIDM_GETNUMDEVS: case WIDM_GETPOS: case WIDM_CLOSE: - case WIDM_STOP : + case WIDM_STOP: case WIDM_RESET: case WIDM_START: case WIDM_PREPARE: @@ -4689,10 +4749,10 @@ DWORD WINAPI waveInMessage32(HWAVEIN32 hWaveIn, UINT32 uMessage, break; case WIDM_GETDEVCAPS: /*FIXME: ANSI/UNICODE */ - return waveInGetDevCaps32A(hWaveIn,(LPWAVEINCAPS32A)dwParam1,dwParam2); + return waveInGetDevCaps32A(hWaveIn, (LPWAVEINCAPS32A)dwParam1, dwParam2); default: ERR(mmsys,"(%04x,%04x,%08lx,%08lx): unhandled message\n", - hWaveIn,uMessage,dwParam1,dwParam2); + hWaveIn,uMessage, dwParam1, dwParam2); break; } return widMessage(lpDesc->uDeviceID, uMessage, lpDesc->dwInstance, dwParam1, dwParam2); @@ -4706,7 +4766,7 @@ DWORD WINAPI waveInMessage16(HWAVEIN16 hWaveIn, UINT16 uMessage, { LPWAVEOPENDESC lpDesc; - FIXME(mmsys, "(%04X, %04X, %08lX, %08lX),FIXME!\n", + FIXME(mmsys, "(%04X, %04X, %08lX, %08lX)\n", hWaveIn, uMessage, dwParam1, dwParam2); lpDesc = (LPWAVEOPENDESC) USER_HEAP_LIN_ADDR(hWaveIn); if (lpDesc == NULL) return MMSYSERR_INVALHANDLE; @@ -4723,18 +4783,18 @@ DWORD WINAPI waveInMessage16(HWAVEIN16 hWaveIn, UINT16 uMessage, /* no argument conversion needed */ break; case WIDM_GETDEVCAPS: - return waveInGetDevCaps16(hWaveIn,(LPWAVEINCAPS16)PTR_SEG_TO_LIN(dwParam1),dwParam2); + return waveInGetDevCaps16(hWaveIn, (LPWAVEINCAPS16)PTR_SEG_TO_LIN(dwParam1), dwParam2); case WIDM_GETPOS: - return waveInGetPosition16(hWaveIn,(LPMMTIME16)PTR_SEG_TO_LIN(dwParam1),dwParam2); + return waveInGetPosition16(hWaveIn, (LPMMTIME16)PTR_SEG_TO_LIN(dwParam1), dwParam2); case WIDM_PREPARE: - return waveInPrepareHeader16(hWaveIn,(LPWAVEHDR)PTR_SEG_TO_LIN(dwParam1),dwParam2); + return waveInPrepareHeader16(hWaveIn, (LPWAVEHDR)PTR_SEG_TO_LIN(dwParam1), dwParam2); case WIDM_UNPREPARE: - return waveInUnprepareHeader16(hWaveIn,(LPWAVEHDR)PTR_SEG_TO_LIN(dwParam1),dwParam2); + return waveInUnprepareHeader16(hWaveIn, (LPWAVEHDR)PTR_SEG_TO_LIN(dwParam1), dwParam2); case WIDM_ADDBUFFER: - return waveInAddBuffer16(hWaveIn,(LPWAVEHDR)PTR_SEG_TO_LIN(dwParam1),dwParam2); + return waveInAddBuffer16(hWaveIn, (LPWAVEHDR)PTR_SEG_TO_LIN(dwParam1), dwParam2); default: ERR(mmsys,"(%04x,%04x,%08lx,%08lx): unhandled message\n", - hWaveIn,uMessage,dwParam1,dwParam2); + hWaveIn,uMessage, dwParam1, dwParam2); break; } return widMessage(lpDesc->uDeviceID, uMessage, lpDesc->dwInstance, dwParam1, dwParam2); @@ -4745,7 +4805,7 @@ DWORD WINAPI waveInMessage16(HWAVEIN16 hWaveIn, UINT16 uMessage, */ HDRVR16 WINAPI DrvOpen(LPSTR lpDriverName, LPSTR lpSectionName, LPARAM lParam) { - TRACE(mmsys,"('%s','%s',%08lX);\n",lpDriverName,lpSectionName,lParam); + TRACE(mmsys,"('%s','%s',%08lX);\n", lpDriverName, lpSectionName, lParam); return OpenDriver16(lpDriverName, lpSectionName, lParam); } @@ -4799,15 +4859,15 @@ LRESULT WINAPI DefDriverProc32(DWORD dwDriverIdentifier, HDRVR32 hdrvr, UINT32 Msg, LPARAM lParam1, LPARAM lParam2) { switch (Msg) { - case DRV_LOAD: - case DRV_DISABLE: - case DRV_INSTALL: + case DRV_LOAD: + case DRV_DISABLE: + case DRV_INSTALL: return 0; - case DRV_ENABLE: - case DRV_FREE: - case DRV_REMOVE: + case DRV_ENABLE: + case DRV_FREE: + case DRV_REMOVE: return 1; - default: + default: return 0; } } @@ -4827,7 +4887,7 @@ LRESULT WINAPI mmThreadCreate16(LPVOID x1, LPWORD x2, DWORD x3, DWORD x4) */ LRESULT WINAPI mmThreadGetTask16(WORD hnd) { - FIXME(mmsys,"(%04x): stub!\n",hnd); + FIXME(mmsys,"(%04x): stub!\n", hnd); return GetCurrentTask(); } @@ -4836,14 +4896,14 @@ LRESULT WINAPI mmThreadGetTask16(WORD hnd) */ LRESULT WINAPI mmThreadSignal16(WORD hnd) { - FIXME(mmsys,"(%04x): stub!\n",hnd); + FIXME(mmsys,"(%04x): stub!\n", hnd); return 0; } /************************************************************************** * mmTaskCreate [MMSYSTEM.900] */ -HINSTANCE16 WINAPI mmTaskCreate16(LPWORD lphnd,HINSTANCE16 *hMmTask,DWORD x2) +HINSTANCE16 WINAPI mmTaskCreate16(LPWORD lphnd,HINSTANCE16 *hMmTask, DWORD x2) { DWORD showCmd = 0x40002; LPSTR cmdline; @@ -4851,7 +4911,7 @@ HINSTANCE16 WINAPI mmTaskCreate16(LPWORD lphnd,HINSTANCE16 *hMmTask,DWORD x2) LOADPARAMS *lp; HINSTANCE16 ret, handle; - TRACE(mmsys,"(%p,%p,%08lx);\n",lphnd,hMmTask,x2); + TRACE(mmsys,"(%p,%p,%08lx);\n", lphnd, hMmTask,x2); cmdline = (LPSTR)HeapAlloc(GetProcessHeap(), 0, 0x0d); cmdline[0] = 0x0d; (DWORD)cmdline[1] = (DWORD)lphnd; @@ -4897,6 +4957,6 @@ HINSTANCE16 WINAPI mmTaskCreate16(LPWORD lphnd,HINSTANCE16 *hMmTask,DWORD x2) */ LRESULT WINAPI mmTaskSignal16(HTASK16 ht) { - TRACE(mmsys,"(%04x);\n",ht); - return PostAppMessage16(ht,WM_USER,0,0); + TRACE(mmsys,"(%04x);\n", ht); + return PostAppMessage32A(ht, WM_USER, 0, 0); } diff --git a/relay32/winmm.spec b/relay32/winmm.spec index 5eafe8d29d1..4348afa0c64 100644 --- a/relay32/winmm.spec +++ b/relay32/winmm.spec @@ -136,7 +136,7 @@ type win32 133 stdcall mmioWrite(long ptr long) mmioWrite32 134 stdcall mmsystemGetVersion() mmsystemGetVersion32 135 stdcall sndPlaySoundA(ptr long) sndPlaySound -136 stub sndPlaySoundW +136 stdcall sndPlaySoundW(ptr long) sndPlaySound32W 137 stdcall timeBeginPeriod(long) timeBeginPeriod32 138 stdcall timeEndPeriod(long) timeEndPeriod32 139 stdcall timeGetDevCaps(ptr long) timeGetDevCaps32