home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 7 / 07.iso / c / c083 / 14.ddi / GENINC.PAK / MMSYSTEM.H < prev    next >
Encoding:
C/C++ Source or Header  |  1993-12-02  |  189.3 KB  |  4,740 lines

  1. /****************************************************************************/
  2. /*                                                                          */
  3. /*        MMSYSTEM.H - Include file for Multimedia APIs                     */
  4. /*                                                                          */
  5. /****************************************************************************/
  6. /*    If defined, the following flags inhibit inclusion
  7.  *    of the indicated items:
  8.  *
  9.  *      MMNODRV          - Installable driver support
  10.  *      MMNOSOUND        - Sound support
  11.  *      MMNOWAVE         - Waveform support
  12.  *      MMNOMIDI         - MIDI support
  13.  *      MMNOAUX          - Auxiliary audio support
  14.  *      MMNOTIMER        - Timer support
  15.  *      MMNOJOY          - Joystick support
  16.  *      MMNOMCI          - MCI support
  17.  *      MMNOMMIO         - Multimedia file I/O support
  18.  *      MMNOMMSYSTEM     - General MMSYSTEM functions
  19.  */
  20.  
  21. /*
  22.  *      C/C++ Run Time Library - Version 6.0
  23.  *
  24.  *      Copyright (c) 1991, 1993 by Borland International
  25.  *      All Rights Reserved.
  26.  *
  27.  */
  28.  
  29. #ifndef __MMSYSTEM_H    /* prevent multiple includes */
  30. #define __MMSYSTEM_H
  31.  
  32. #ifdef __cplusplus
  33. extern "C" {            /* Assume C declarations for C++ */
  34. #endif  /* __cplusplus */
  35.  
  36. #if !defined(__FLAT__)
  37.  
  38. #if !defined(WINVER) || (WINVER < 0x030a)
  39. //#error Multimedia APIs require Windows 3.1
  40. #endif
  41.  
  42. #ifndef __WINDOWS_H
  43. #include <windows.h>    /* <windows.h> must be included */
  44. #endif  /* __WINDOWS_H */
  45.  
  46. #ifndef RC_INVOKED
  47. #pragma option -a-      /* Assume byte packing throughout */
  48. #endif
  49.  
  50.  
  51. /****************************************************************************
  52.  
  53.                     General constants and data types
  54.  
  55. ****************************************************************************/
  56.  
  57. /* general constants */
  58. #define MAXPNAMELEN      32     /* max product name length (including NULL) */
  59. #define MAXERRORLENGTH   128    /* max error text length (including NULL) */
  60.  
  61. /* general data types */
  62. typedef WORD    VERSION;        /* major (high byte), minor (low byte) */
  63.  
  64. /* MMTIME data structure */
  65. typedef struct mmtime_tag {
  66.     UINT    wType;              /* indicates the contents of the union */
  67.     union {
  68.         DWORD ms;               /* milliseconds */
  69.         DWORD sample;           /* samples */
  70.         DWORD cb;               /* byte count */
  71.         struct {                /* SMPTE */
  72.             BYTE hour;          /* hours */
  73.             BYTE min;           /* minutes */
  74.             BYTE sec;           /* seconds */
  75.             BYTE frame;         /* frames  */
  76.             BYTE fps;           /* frames per second */
  77.             BYTE dummy;         /* pad */
  78.             } smpte;
  79.         struct {                /* MIDI */
  80.             DWORD songptrpos;   /* song pointer position */
  81.             } midi;
  82.         } u;
  83.     } MMTIME;
  84. typedef MMTIME       *PMMTIME;
  85. typedef MMTIME NEAR *NPMMTIME;
  86. typedef MMTIME FAR  *LPMMTIME;
  87.  
  88. /* types for wType field in MMTIME struct */
  89. #define TIME_MS         0x0001  /* time in milliseconds */
  90. #define TIME_SAMPLES    0x0002  /* number of wave samples */
  91. #define TIME_BYTES      0x0004  /* current byte offset */
  92. #define TIME_SMPTE      0x0008  /* SMPTE time */
  93. #define TIME_MIDI       0x0010  /* MIDI time */
  94.  
  95.  
  96. /****************************************************************************
  97.  
  98.                     Multimedia Extensions Window Messages
  99.  
  100. ****************************************************************************/
  101.  
  102. #define MM_JOY1MOVE         0x3A0           /* joystick */
  103. #define MM_JOY2MOVE         0x3A1
  104. #define MM_JOY1ZMOVE        0x3A2
  105. #define MM_JOY2ZMOVE        0x3A3
  106. #define MM_JOY1BUTTONDOWN   0x3B5
  107. #define MM_JOY2BUTTONDOWN   0x3B6
  108. #define MM_JOY1BUTTONUP     0x3B7
  109. #define MM_JOY2BUTTONUP     0x3B8
  110.  
  111. #define MM_MCINOTIFY        0x3B9           /* MCI */
  112.  
  113. #define MM_WOM_OPEN         0x3BB           /* waveform output */
  114. #define MM_WOM_CLOSE        0x3BC
  115. #define MM_WOM_DONE         0x3BD
  116.  
  117. #define MM_WIM_OPEN         0x3BE           /* waveform input */
  118. #define MM_WIM_CLOSE        0x3BF
  119. #define MM_WIM_DATA         0x3C0
  120.  
  121. #define MM_MIM_OPEN         0x3C1           /* MIDI input */
  122. #define MM_MIM_CLOSE        0x3C2
  123. #define MM_MIM_DATA         0x3C3
  124. #define MM_MIM_LONGDATA     0x3C4
  125. #define MM_MIM_ERROR        0x3C5
  126. #define MM_MIM_LONGERROR    0x3C6
  127.  
  128. #define MM_MOM_OPEN         0x3C7           /* MIDI output */
  129. #define MM_MOM_CLOSE        0x3C8
  130. #define MM_MOM_DONE         0x3C9
  131.  
  132.  
  133. /****************************************************************************
  134.  
  135.                 String resource number bases (internal use)
  136.  
  137. ****************************************************************************/
  138.  
  139. #define MMSYSERR_BASE          0
  140. #define WAVERR_BASE            32
  141. #define MIDIERR_BASE           64
  142. #define TIMERR_BASE            96
  143. #define JOYERR_BASE            160
  144. #define MCIERR_BASE            256
  145.  
  146. #define MCI_STRING_OFFSET      512
  147. #define MCI_VD_OFFSET          1024
  148. #define MCI_CD_OFFSET          1088
  149. #define MCI_WAVE_OFFSET        1152
  150. #define MCI_SEQ_OFFSET         1216
  151.  
  152. /****************************************************************************
  153.  
  154.                         General error return values
  155.  
  156. ****************************************************************************/
  157.  
  158. /* general error return values */
  159. #define MMSYSERR_NOERROR      0                    /* no error */
  160. #define MMSYSERR_ERROR        (MMSYSERR_BASE + 1)  /* unspecified error */
  161. #define MMSYSERR_BADDEVICEID  (MMSYSERR_BASE + 2)  /* device ID out of range */
  162. #define MMSYSERR_NOTENABLED   (MMSYSERR_BASE + 3)  /* driver failed enable */
  163. #define MMSYSERR_ALLOCATED    (MMSYSERR_BASE + 4)  /* device already allocated */
  164. #define MMSYSERR_INVALHANDLE  (MMSYSERR_BASE + 5)  /* device handle is invalid */
  165. #define MMSYSERR_NODRIVER     (MMSYSERR_BASE + 6)  /* no device driver present */
  166. #define MMSYSERR_NOMEM        (MMSYSERR_BASE + 7)  /* memory allocation error */
  167. #define MMSYSERR_NOTSUPPORTED (MMSYSERR_BASE + 8)  /* function isn't supported */
  168. #define MMSYSERR_BADERRNUM    (MMSYSERR_BASE + 9)  /* error value out of range */
  169. #define MMSYSERR_INVALFLAG    (MMSYSERR_BASE + 10) /* invalid flag passed */
  170. #define MMSYSERR_INVALPARAM   (MMSYSERR_BASE + 11) /* invalid parameter passed */
  171. #define MMSYSERR_LASTERROR    (MMSYSERR_BASE + 11) /* last error in range */
  172.  
  173.  
  174. /* If included with the 3.0 windows.h, define compatible aliases */
  175. #if !defined(WINVER) || (WINVER < 0x030a)
  176. DECLARE_HANDLE(HDRVR);
  177. #endif  /* WIN3.0 */
  178.  
  179. #ifndef MMNODRV
  180. /****************************************************************************
  181.  
  182.                         Installable driver support
  183.  
  184. ****************************************************************************/
  185.  
  186. /* If included with the 3.0 windows.h, define compatible aliases */
  187. #if !defined(WINVER) || (WINVER < 0x030a)
  188.  
  189. /* return values from DriverProc() function */
  190. #define DRV_CANCEL              0x0000
  191. #define DRV_OK                  0x0001
  192. #define DRV_RESTART             0x0002
  193.  
  194. /* Driver messages */
  195. #define DRV_LOAD                0x0001
  196. #define DRV_ENABLE              0x0002
  197. #define DRV_OPEN                0x0003
  198. #define DRV_CLOSE               0x0004
  199. #define DRV_DISABLE             0x0005
  200. #define DRV_FREE                0x0006
  201. #define DRV_CONFIGURE           0x0007
  202. #define DRV_QUERYCONFIGURE      0x0008
  203. #define DRV_INSTALL             0x0009
  204. #define DRV_REMOVE              0x000A
  205. #define DRV_RESERVED            0x0800
  206. #define DRV_USER                0x4000
  207.  
  208. /* LPARAM of DRV_CONFIGURE message */
  209. typedef struct tagDRVCONFIGINFO {
  210.     DWORD   dwDCISize;
  211.     LPCSTR  lpszDCISectionName;
  212.     LPCSTR  lpszDCIAliasName;
  213. } DRVCONFIGINFO;
  214. typedef DRVCONFIGINFO        *PDRVCONFIGINFO;
  215. typedef DRVCONFIGINFO  NEAR *NPDRVCONFIGINFO;
  216. typedef DRVCONFIGINFO  FAR  *LPDRVCONFIGINFO;
  217.  
  218. /* installable driver function prototypes */
  219. LRESULT   WINAPI DrvClose(HDRVR hDriver, LPARAM lParam1, LPARAM lParam2);
  220. HDRVR     WINAPI DrvOpen(LPCSTR szDriverName, LPCSTR szSectionName,
  221.     LPARAM lParam2);
  222. LRESULT   WINAPI DrvSendMessage(HDRVR hDriver, UINT uMessage,
  223.     LPARAM lParam1, LPARAM lParam2);
  224. HINSTANCE WINAPI DrvGetModuleHandle(HDRVR hDriver);
  225.  
  226. LRESULT WINAPI DrvDefDriverProc(DWORD dwDriverIdentifier, HDRVR driverID,
  227.     UINT uMessage, LPARAM lParam1, LPARAM lParam2);
  228.  
  229. #define DefDriverProc DrvDefDriverProc
  230.  
  231. #endif  /* WIN3.0 */
  232.  
  233.  
  234. #if defined(WINVER) && (WINVER >= 0x030a)
  235.  
  236. /* return values from DriverProc() function */
  237. #define DRV_CANCEL             DRVCNF_CANCEL
  238. #define DRV_OK                 DRVCNF_OK
  239. #define DRV_RESTART            DRVCNF_RESTART
  240.  
  241. #endif  /* WINVER >= 0x030a */
  242.  
  243. #define DRV_MCI_FIRST          DRV_RESERVED
  244. #define DRV_MCI_LAST           (DRV_RESERVED + 0xFFF)
  245.  
  246. #endif  /* ifndef MMNODRV */
  247.  
  248.  
  249. /****************************************************************************
  250.  
  251.                           Driver callback support
  252.  
  253. ****************************************************************************/
  254.  
  255. /* flags used with waveOutOpen(), waveInOpen(), midiInOpen(), and */
  256. /* midiOutOpen() to specify the type of the dwCallback parameter. */
  257.  
  258. #define CALLBACK_TYPEMASK   0x00070000l    /* callback type mask */
  259. #define CALLBACK_NULL       0x00000000l    /* no callback */
  260. #define CALLBACK_WINDOW     0x00010000l    /* dwCallback is a HWND */
  261. #define CALLBACK_TASK       0x00020000l    /* dwCallback is a HTASK */
  262. #define CALLBACK_FUNCTION   0x00030000l    /* dwCallback is a FARPROC */
  263.  
  264. /* driver callback prototypes */
  265. typedef void (CALLBACK DRVCALLBACK) (HDRVR h, UINT uMessage, DWORD dwUser, DWORD dw1, DWORD dw2);
  266.  
  267. typedef DRVCALLBACK FAR *LPDRVCALLBACK;
  268.  
  269. /****************************************************************************
  270.  
  271.                          Manufacturer and product IDs
  272.  
  273.     Used with wMid and wPid fields in WAVEOUTCAPS, WAVEINCAPS,
  274.     MIDIOUTCAPS, MIDIINCAPS, AUXCAPS, JOYCAPS structures.
  275.  
  276. ****************************************************************************/
  277.  
  278. /* manufacturer IDs */
  279. #define MM_MICROSOFT            1       /* Microsoft Corp. */
  280.  
  281. /* product IDs */
  282. #define MM_MIDI_MAPPER          1       /* MIDI Mapper */
  283. #define MM_WAVE_MAPPER          2       /* Wave Mapper */
  284.  
  285. #define MM_SNDBLST_MIDIOUT      3       /* Sound Blaster MIDI output port */
  286. #define MM_SNDBLST_MIDIIN       4       /* Sound Blaster MIDI input port  */
  287. #define MM_SNDBLST_SYNTH        5       /* Sound Blaster internal synthesizer */
  288. #define MM_SNDBLST_WAVEOUT      6       /* Sound Blaster waveform output */
  289. #define MM_SNDBLST_WAVEIN       7       /* Sound Blaster waveform input */
  290.  
  291. #define MM_ADLIB                9       /* Ad Lib-compatible synthesizer */
  292.  
  293. #define MM_MPU401_MIDIOUT       10      /* MPU401-compatible MIDI output port */
  294. #define MM_MPU401_MIDIIN        11      /* MPU401-compatible MIDI input port */
  295.  
  296. #define MM_PC_JOYSTICK          12      /* Joystick adapter */
  297.  
  298.  
  299. #ifndef MMNOMMSYSTEM
  300. /****************************************************************************
  301.  
  302.                     General MMSYSTEM support
  303.  
  304. ****************************************************************************/
  305.  
  306. WORD WINAPI mmsystemGetVersion(void);
  307. void WINAPI OutputDebugStr(LPCSTR);
  308.  
  309. #endif  /* ifndef MMNOMMSYSTEM */
  310.  
  311.  
  312. #ifndef MMNOSOUND
  313. /****************************************************************************
  314.  
  315.                             Sound support
  316.  
  317. ****************************************************************************/
  318.  
  319. BOOL WINAPI sndPlaySound(LPCSTR lpszSoundName, UINT uFlags);
  320.  
  321. /* flag values for wFlags parameter */
  322. #define SND_SYNC            0x0000  /* play synchronously (default) */
  323. #define SND_ASYNC           0x0001  /* play asynchronously */
  324. #define SND_NODEFAULT       0x0002  /* don't use default sound */
  325. #define SND_MEMORY          0x0004  /* lpszSoundName points to a memory file */
  326. #define SND_LOOP            0x0008  /* loop the sound until next sndPlaySound */
  327. #define SND_NOSTOP          0x0010  /* don't stop any currently playing sound */
  328.  
  329. #endif  /* ifndef MMNOSOUND */
  330.  
  331.  
  332. #ifndef MMNOWAVE
  333. /****************************************************************************
  334.  
  335.                         Waveform audio support
  336.  
  337. ****************************************************************************/
  338.  
  339. /* waveform audio error return values */
  340. #define WAVERR_BADFORMAT      (WAVERR_BASE + 0)    /* unsupported wave format */
  341. #define WAVERR_STILLPLAYING   (WAVERR_BASE + 1)    /* still something playing */
  342. #define WAVERR_UNPREPARED     (WAVERR_BASE + 2)    /* header not prepared */
  343. #define WAVERR_SYNC           (WAVERR_BASE + 3)    /* device is synchronous */
  344. #define WAVERR_LASTERROR      (WAVERR_BASE + 3)    /* last error in range */
  345.  
  346. /* waveform audio data types */
  347. DECLARE_HANDLE(HWAVE);
  348. DECLARE_HANDLE(HWAVEIN);
  349. DECLARE_HANDLE(HWAVEOUT);
  350. typedef HWAVEIN FAR *LPHWAVEIN;
  351. typedef HWAVEOUT FAR *LPHWAVEOUT;
  352. typedef DRVCALLBACK WAVECALLBACK;
  353. typedef WAVECALLBACK FAR *LPWAVECALLBACK;
  354.  
  355. /* wave callback messages */
  356. #define WOM_OPEN        MM_WOM_OPEN
  357. #define WOM_CLOSE       MM_WOM_CLOSE
  358. #define WOM_DONE        MM_WOM_DONE
  359. #define WIM_OPEN        MM_WIM_OPEN
  360. #define WIM_CLOSE       MM_WIM_CLOSE
  361. #define WIM_DATA        MM_WIM_DATA
  362.  
  363. /* device ID for wave device mapper */
  364. #define WAVE_MAPPER     (-1)
  365.  
  366. /* flags for dwFlags parameter in waveOutOpen() and waveInOpen() */
  367. #define  WAVE_FORMAT_QUERY     0x0001
  368. #define  WAVE_ALLOWSYNC        0x0002
  369.  
  370. /* wave data block header */
  371. typedef struct wavehdr_tag {
  372.     LPSTR       lpData;                 /* pointer to locked data buffer */
  373.     DWORD       dwBufferLength;         /* length of data buffer */
  374.     DWORD       dwBytesRecorded;        /* used for input only */
  375.     DWORD       dwUser;                 /* for client's use */
  376.     DWORD       dwFlags;                /* assorted flags (see defines) */
  377.     DWORD       dwLoops;                /* loop control counter */
  378.     struct wavehdr_tag far *lpNext;     /* reserved for driver */
  379.     DWORD       reserved;               /* reserved for driver */
  380. } WAVEHDR;
  381. typedef WAVEHDR       *PWAVEHDR;
  382. typedef WAVEHDR NEAR *NPWAVEHDR;
  383. typedef WAVEHDR FAR  *LPWAVEHDR;
  384.  
  385. /* flags for dwFlags field of WAVEHDR */
  386. #define WHDR_DONE       0x00000001  /* done bit */
  387. #define WHDR_PREPARED   0x00000002  /* set if this header has been prepared */
  388. #define WHDR_BEGINLOOP  0x00000004  /* loop start block */
  389. #define WHDR_ENDLOOP    0x00000008  /* loop end block */
  390. #define WHDR_INQUEUE    0x00000010  /* reserved for driver */
  391.  
  392. /* waveform output device capabilities structure */
  393. typedef struct waveoutcaps_tag {
  394.     UINT    wMid;                  /* manufacturer ID */
  395.     UINT    wPid;                  /* product ID */
  396.     VERSION vDriverVersion;        /* version of the driver */
  397.     char    szPname[MAXPNAMELEN];  /* product name (NULL terminated string) */
  398.     DWORD   dwFormats;             /* formats supported */
  399.     UINT    wChannels;             /* number of sources supported */
  400.     DWORD   dwSupport;             /* functionality supported by driver */
  401. } WAVEOUTCAPS;
  402. typedef WAVEOUTCAPS       *PWAVEOUTCAPS;
  403. typedef WAVEOUTCAPS NEAR *NPWAVEOUTCAPS;
  404. typedef WAVEOUTCAPS FAR  *LPWAVEOUTCAPS;
  405.  
  406. /* flags for dwSupport field of WAVEOUTCAPS */
  407. #define WAVECAPS_PITCH          0x0001   /* supports pitch control */
  408. #define WAVECAPS_PLAYBACKRATE   0x0002   /* supports playback rate control */
  409. #define WAVECAPS_VOLUME         0x0004   /* supports volume control */
  410. #define WAVECAPS_LRVOLUME       0x0008   /* separate left-right volume control */
  411. #define WAVECAPS_SYNC           0x0010
  412.  
  413. /* waveform input device capabilities structure */
  414. typedef struct waveincaps_tag {
  415.     UINT    wMid;                    /* manufacturer ID */
  416.     UINT    wPid;                    /* product ID */
  417.     VERSION vDriverVersion;          /* version of the driver */
  418.     char    szPname[MAXPNAMELEN];    /* product name (NULL terminated string) */
  419.     DWORD   dwFormats;               /* formats supported */
  420.     UINT    wChannels;               /* number of channels supported */
  421. } WAVEINCAPS;
  422. typedef WAVEINCAPS       *PWAVEINCAPS;
  423. typedef WAVEINCAPS NEAR *NPWAVEINCAPS;
  424. typedef WAVEINCAPS FAR  *LPWAVEINCAPS;
  425.  
  426. /* defines for dwFormat field of WAVEINCAPS and WAVEOUTCAPS */
  427. #define WAVE_INVALIDFORMAT     0x00000000       /* invalid format */
  428. #define WAVE_FORMAT_1M08       0x00000001       /* 11.025 kHz, Mono,   8-bit  */
  429. #define WAVE_FORMAT_1S08       0x00000002       /* 11.025 kHz, Stereo, 8-bit  */
  430. #define WAVE_FORMAT_1M16       0x00000004       /* 11.025 kHz, Mono,   16-bit */
  431. #define WAVE_FORMAT_1S16       0x00000008       /* 11.025 kHz, Stereo, 16-bit */
  432. #define WAVE_FORMAT_2M08       0x00000010       /* 22.05  kHz, Mono,   8-bit  */
  433. #define WAVE_FORMAT_2S08       0x00000020       /* 22.05  kHz, Stereo, 8-bit  */
  434. #define WAVE_FORMAT_2M16       0x00000040       /* 22.05  kHz, Mono,   16-bit */
  435. #define WAVE_FORMAT_2S16       0x00000080       /* 22.05  kHz, Stereo, 16-bit */
  436. #define WAVE_FORMAT_4M08       0x00000100       /* 44.1   kHz, Mono,   8-bit  */
  437. #define WAVE_FORMAT_4S08       0x00000200       /* 44.1   kHz, Stereo, 8-bit  */
  438. #define WAVE_FORMAT_4M16       0x00000400       /* 44.1   kHz, Mono,   16-bit */
  439. #define WAVE_FORMAT_4S16       0x00000800       /* 44.1   kHz, Stereo, 16-bit */
  440.  
  441. /* general waveform format structure (information common to all formats) */
  442. typedef struct waveformat_tag {
  443.     WORD    wFormatTag;        /* format type */
  444.     WORD    nChannels;         /* number of channels (i.e. mono, stereo, etc.) */
  445.     DWORD   nSamplesPerSec;    /* sample rate */
  446.     DWORD   nAvgBytesPerSec;   /* for buffer estimation */
  447.     WORD    nBlockAlign;       /* block size of data */
  448. } WAVEFORMAT;
  449. typedef WAVEFORMAT       *PWAVEFORMAT;
  450. typedef WAVEFORMAT NEAR *NPWAVEFORMAT;
  451. typedef WAVEFORMAT FAR  *LPWAVEFORMAT;
  452.  
  453. /* flags for wFormatTag field of WAVEFORMAT */
  454. #define WAVE_FORMAT_PCM     1
  455.  
  456. /* specific waveform format structure for PCM data */
  457. typedef struct pcmwaveformat_tag {
  458.     WAVEFORMAT  wf;
  459.     WORD        wBitsPerSample;
  460. } PCMWAVEFORMAT;
  461. typedef PCMWAVEFORMAT       *PPCMWAVEFORMAT;
  462. typedef PCMWAVEFORMAT NEAR *NPPCMWAVEFORMAT;
  463. typedef PCMWAVEFORMAT FAR  *LPPCMWAVEFORMAT;
  464.  
  465. /* waveform audio function prototypes */
  466. UINT WINAPI waveOutGetNumDevs(void);
  467. UINT WINAPI waveOutGetDevCaps(UINT uDeviceID, WAVEOUTCAPS FAR* lpCaps,
  468.     UINT uSize);
  469. UINT WINAPI waveOutGetVolume(UINT uDeviceID, DWORD FAR* lpdwVolume);
  470. UINT WINAPI waveOutSetVolume(UINT uDeviceID, DWORD dwVolume);
  471. UINT WINAPI waveOutGetErrorText(UINT uError, LPSTR lpText, UINT uSize);
  472. UINT WINAPI waveOutOpen(HWAVEOUT FAR* lphWaveOut, UINT uDeviceID,
  473.     const WAVEFORMAT FAR* lpFormat, DWORD dwCallback, DWORD dwInstance, DWORD dwFlags);
  474. UINT WINAPI waveOutClose(HWAVEOUT hWaveOut);
  475. UINT WINAPI waveOutPrepareHeader(HWAVEOUT hWaveOut,
  476.      WAVEHDR FAR* lpWaveOutHdr, UINT uSize);
  477. UINT WINAPI waveOutUnprepareHeader(HWAVEOUT hWaveOut,
  478.     WAVEHDR FAR* lpWaveOutHdr, UINT uSize);
  479. UINT WINAPI waveOutWrite(HWAVEOUT hWaveOut, WAVEHDR FAR* lpWaveOutHdr,
  480.     UINT uSize);
  481. UINT WINAPI waveOutPause(HWAVEOUT hWaveOut);
  482. UINT WINAPI waveOutRestart(HWAVEOUT hWaveOut);
  483. UINT WINAPI waveOutReset(HWAVEOUT hWaveOut);
  484. UINT WINAPI waveOutBreakLoop(HWAVEOUT hWaveOut);
  485. UINT WINAPI waveOutGetPosition(HWAVEOUT hWaveOut, MMTIME FAR* lpInfo,
  486.     UINT uSize);
  487. UINT WINAPI waveOutGetPitch(HWAVEOUT hWaveOut, DWORD FAR* lpdwPitch);
  488. UINT WINAPI waveOutSetPitch(HWAVEOUT hWaveOut, DWORD dwPitch);
  489. UINT WINAPI waveOutGetPlaybackRate(HWAVEOUT hWaveOut, DWORD FAR* lpdwRate);
  490. UINT WINAPI waveOutSetPlaybackRate(HWAVEOUT hWaveOut, DWORD dwRate);
  491. UINT WINAPI waveOutGetID(HWAVEOUT hWaveOut, UINT FAR* lpuDeviceID);
  492.  
  493. #if defined(WINVER) && (WINVER >= 0x030a)
  494. DWORD WINAPI waveOutMessage(HWAVEOUT hWaveOut, UINT uMessage, DWORD dw1, DWORD dw2);
  495. #endif  /* WINVER >= 0x030a */
  496.  
  497. UINT WINAPI waveInGetNumDevs(void);
  498. UINT WINAPI waveInGetDevCaps(UINT uDeviceID, WAVEINCAPS FAR* lpCaps,
  499.     UINT uSize);
  500. UINT WINAPI waveInGetErrorText(UINT uError, LPSTR lpText, UINT uSize);
  501. UINT WINAPI waveInOpen(HWAVEIN FAR* lphWaveIn, UINT uDeviceID,
  502.     const WAVEFORMAT FAR* lpFormat, DWORD dwCallback, DWORD dwInstance, DWORD dwFlags);
  503. UINT WINAPI waveInClose(HWAVEIN hWaveIn);
  504. UINT WINAPI waveInPrepareHeader(HWAVEIN hWaveIn,
  505.     WAVEHDR FAR* lpWaveInHdr, UINT uSize);
  506. UINT WINAPI waveInUnprepareHeader(HWAVEIN hWaveIn,
  507.     WAVEHDR FAR* lpWaveInHdr, UINT uSize);
  508. UINT WINAPI waveInAddBuffer(HWAVEIN hWaveIn,
  509.     WAVEHDR FAR* lpWaveInHdr, UINT uSize);
  510. UINT WINAPI waveInStart(HWAVEIN hWaveIn);
  511. UINT WINAPI waveInStop(HWAVEIN hWaveIn);
  512. UINT WINAPI waveInReset(HWAVEIN hWaveIn);
  513. UINT WINAPI waveInGetPosition(HWAVEIN hWaveIn, MMTIME FAR* lpInfo,
  514.     UINT uSize);
  515. UINT WINAPI waveInGetID(HWAVEIN hWaveIn, UINT FAR* lpuDeviceID);
  516.  
  517. #if defined(WINVER) && (WINVER >= 0x030a)
  518. DWORD WINAPI waveInMessage(HWAVEIN hWaveIn, UINT uMessage, DWORD dw1, DWORD dw2);
  519. #endif  /* WINVER >= 0x030a */
  520.  
  521. #endif  /* ifndef MMNOWAVE */
  522.  
  523.  
  524. #ifndef MMNOMIDI
  525. /****************************************************************************
  526.  
  527.                             MIDI audio support
  528.  
  529. ****************************************************************************/
  530.  
  531. /* MIDI error return values */
  532. #define MIDIERR_UNPREPARED    (MIDIERR_BASE + 0)   /* header not prepared */
  533. #define MIDIERR_STILLPLAYING  (MIDIERR_BASE + 1)   /* still something playing */
  534. #define MIDIERR_NOMAP         (MIDIERR_BASE + 2)   /* no current map */
  535. #define MIDIERR_NOTREADY      (MIDIERR_BASE + 3)   /* hardware is still busy */
  536. #define MIDIERR_NODEVICE      (MIDIERR_BASE + 4)   /* port no longer connected */
  537. #define MIDIERR_INVALIDSETUP  (MIDIERR_BASE + 5)   /* invalid setup */
  538. #define MIDIERR_LASTERROR     (MIDIERR_BASE + 5)   /* last error in range */
  539.  
  540. /* MIDI audio data types */
  541. DECLARE_HANDLE(HMIDI);
  542. DECLARE_HANDLE(HMIDIIN);
  543. DECLARE_HANDLE(HMIDIOUT);
  544. typedef HMIDIIN FAR *LPHMIDIIN;
  545. typedef HMIDIOUT FAR *LPHMIDIOUT;
  546. typedef DRVCALLBACK MIDICALLBACK;
  547. typedef MIDICALLBACK FAR *LPMIDICALLBACK;
  548. #define MIDIPATCHSIZE   128
  549. typedef WORD PATCHARRAY[MIDIPATCHSIZE];
  550. typedef WORD FAR *LPPATCHARRAY;
  551. typedef WORD KEYARRAY[MIDIPATCHSIZE];
  552. typedef WORD FAR *LPKEYARRAY;
  553.  
  554. /* MIDI callback messages */
  555. #define MIM_OPEN        MM_MIM_OPEN
  556. #define MIM_CLOSE       MM_MIM_CLOSE
  557. #define MIM_DATA        MM_MIM_DATA
  558. #define MIM_LONGDATA    MM_MIM_LONGDATA
  559. #define MIM_ERROR       MM_MIM_ERROR
  560. #define MIM_LONGERROR   MM_MIM_LONGERROR
  561. #define MOM_OPEN        MM_MOM_OPEN
  562. #define MOM_CLOSE       MM_MOM_CLOSE
  563. #define MOM_DONE        MM_MOM_DONE
  564.  
  565. /* device ID for MIDI mapper */
  566. #define MIDIMAPPER     (-1)
  567. #define MIDI_MAPPER    (-1)
  568.  
  569. /* flags for wFlags parm of midiOutCachePatches(), midiOutCacheDrumPatches() */
  570. #define MIDI_CACHE_ALL      1
  571. #define MIDI_CACHE_BESTFIT  2
  572. #define MIDI_CACHE_QUERY    3
  573. #define MIDI_UNCACHE        4
  574.  
  575. /* MIDI output device capabilities structure */
  576. typedef struct midioutcaps_tag {
  577.     UINT    wMid;                  /* manufacturer ID */
  578.     UINT    wPid;                  /* product ID */
  579.     VERSION vDriverVersion;        /* version of the driver */
  580.     char    szPname[MAXPNAMELEN];  /* product name (NULL terminated string) */
  581.     UINT    wTechnology;           /* type of device */
  582.     UINT    wVoices;               /* # of voices (internal synth only) */
  583.     UINT    wNotes;                /* max # of notes (internal synth only) */
  584.     UINT    wChannelMask;          /* channels used (internal synth only) */
  585.     DWORD   dwSupport;             /* functionality supported by driver */
  586. } MIDIOUTCAPS;
  587. typedef MIDIOUTCAPS       *PMIDIOUTCAPS;
  588. typedef MIDIOUTCAPS NEAR *NPMIDIOUTCAPS;
  589. typedef MIDIOUTCAPS FAR  *LPMIDIOUTCAPS;
  590.  
  591. /* flags for wTechnology field of MIDIOUTCAPS structure */
  592. #define MOD_MIDIPORT    1  /* output port */
  593. #define MOD_SYNTH       2  /* generic internal synth */
  594. #define MOD_SQSYNTH     3  /* square wave internal synth */
  595. #define MOD_FMSYNTH     4  /* FM internal synth */
  596. #define MOD_MAPPER      5  /* MIDI mapper */
  597.  
  598. /* flags for dwSupport field of MIDIOUTCAPS structure */
  599. #define MIDICAPS_VOLUME          0x0001  /* supports volume control */
  600. #define MIDICAPS_LRVOLUME        0x0002  /* separate left-right volume control */
  601. #define MIDICAPS_CACHE           0x0004
  602.  
  603. /* MIDI output device capabilities structure */
  604. typedef struct midiincaps_tag {
  605.     UINT    wMid;                  /* manufacturer ID */
  606.     UINT    wPid;                  /* product ID */
  607.     VERSION vDriverVersion;        /* version of the driver */
  608.     char    szPname[MAXPNAMELEN];  /* product name (NULL terminated string) */
  609. } MIDIINCAPS;
  610. typedef MIDIINCAPS      *PMIDIINCAPS;
  611. typedef MIDIINCAPS NEAR *NPMIDIINCAPS;
  612. typedef MIDIINCAPS FAR  *LPMIDIINCAPS;
  613.  
  614. /* MIDI data block header */
  615. typedef struct midihdr_tag {
  616.     LPSTR       lpData;               /* pointer to locked data block */
  617.     DWORD       dwBufferLength;       /* length of data in data block */
  618.     DWORD       dwBytesRecorded;      /* used for input only */
  619.     DWORD       dwUser;               /* for client's use */
  620.     DWORD       dwFlags;              /* assorted flags (see defines) */
  621.     struct midihdr_tag far *lpNext;   /* reserved for driver */
  622.     DWORD       reserved;             /* reserved for driver */
  623. } MIDIHDR;
  624. typedef MIDIHDR       *PMIDIHDR;
  625. typedef MIDIHDR NEAR *NPMIDIHDR;
  626. typedef MIDIHDR FAR  *LPMIDIHDR;
  627.  
  628. /* flags for dwFlags field of MIDIHDR structure */
  629. #define MHDR_DONE       0x00000001       /* done bit */
  630. #define MHDR_PREPARED   0x00000002       /* set if header prepared */
  631. #define MHDR_INQUEUE    0x00000004       /* reserved for driver */
  632.  
  633. /* MIDI function prototypes */
  634. UINT WINAPI midiOutGetNumDevs(void);
  635. UINT WINAPI midiOutGetDevCaps(UINT uDeviceID,
  636.     MIDIOUTCAPS FAR* lpCaps, UINT uSize);
  637. UINT WINAPI midiOutGetVolume(UINT uDeviceID, DWORD FAR* lpdwVolume);
  638. UINT WINAPI midiOutSetVolume(UINT uDeviceID, DWORD dwVolume);
  639. UINT WINAPI midiOutGetErrorText(UINT uError, LPSTR lpText, UINT uSize);
  640. UINT WINAPI midiOutOpen(HMIDIOUT FAR* lphMidiOut, UINT uDeviceID,
  641.     DWORD dwCallback, DWORD dwInstance, DWORD dwFlags);
  642. UINT WINAPI midiOutClose(HMIDIOUT hMidiOut);
  643. UINT WINAPI midiOutPrepareHeader(HMIDIOUT hMidiOut,
  644.     MIDIHDR FAR* lpMidiOutHdr, UINT uSize);
  645. UINT WINAPI midiOutUnprepareHeader(HMIDIOUT hMidiOut,
  646.     MIDIHDR FAR* lpMidiOutHdr, UINT uSize);
  647. UINT WINAPI midiOutShortMsg(HMIDIOUT hMidiOut, DWORD dwMsg);
  648. UINT WINAPI midiOutLongMsg(HMIDIOUT hMidiOut,
  649.     MIDIHDR FAR* lpMidiOutHdr, UINT uSize);
  650. UINT WINAPI midiOutReset(HMIDIOUT hMidiOut);
  651. UINT WINAPI midiOutCachePatches(HMIDIOUT hMidiOut,
  652.     UINT uBank, WORD FAR* lpwPatchArray, UINT uFlags);
  653. UINT WINAPI midiOutCacheDrumPatches(HMIDIOUT hMidiOut,
  654.     UINT uPatch, WORD FAR* lpwKeyArray, UINT uFlags);
  655. UINT WINAPI midiOutGetID(HMIDIOUT hMidiOut, UINT FAR* lpuDeviceID);
  656.  
  657. #if defined(WINVER) && (WINVER >= 0x030a)
  658. DWORD WINAPI midiOutMessage(HMIDIOUT hMidiOut, UINT uMessage, DWORD dw1, DWORD dw2);
  659. #endif  /* WINVER >= 0x030a */
  660.  
  661. UINT WINAPI midiInGetNumDevs(void);
  662. UINT WINAPI midiInGetDevCaps(UINT uDeviceID,
  663.     LPMIDIINCAPS lpCaps, UINT uSize);
  664. UINT WINAPI midiInGetErrorText(UINT uError, LPSTR lpText, UINT uSize);
  665. UINT WINAPI midiInOpen(HMIDIIN FAR* lphMidiIn, UINT uDeviceID,
  666.     DWORD dwCallback, DWORD dwInstance, DWORD dwFlags);
  667. UINT WINAPI midiInClose(HMIDIIN hMidiIn);
  668. UINT WINAPI midiInPrepareHeader(HMIDIIN hMidiIn,
  669.     MIDIHDR FAR* lpMidiInHdr, UINT uSize);
  670. UINT WINAPI midiInUnprepareHeader(HMIDIIN hMidiIn,
  671.     MIDIHDR FAR* lpMidiInHdr, UINT uSize);
  672. UINT WINAPI midiInAddBuffer(HMIDIIN hMidiIn,
  673.     MIDIHDR FAR* lpMidiInHdr, UINT uSize);
  674. UINT WINAPI midiInStart(HMIDIIN hMidiIn);
  675. UINT WINAPI midiInStop(HMIDIIN hMidiIn);
  676. UINT WINAPI midiInReset(HMIDIIN hMidiIn);
  677. UINT WINAPI midiInGetID(HMIDIIN hMidiIn, UINT FAR* lpuDeviceID);
  678.  
  679. #if defined(WINVER) && (WINVER >= 0x030a)
  680. DWORD WINAPI midiInMessage(HMIDIIN hMidiIn, UINT uMessage, DWORD dw1, DWORD dw2);
  681. #endif  /* WINVER >= 0x030a */
  682.  
  683. #endif  /* ifndef MMNOMIDI */
  684.  
  685.  
  686. #ifndef MMNOAUX
  687. /****************************************************************************
  688.  
  689.                         Auxiliary audio support
  690.  
  691. ****************************************************************************/
  692.  
  693. /* device ID for aux device mapper */
  694. #define AUX_MAPPER     (-1)
  695.  
  696. /* Auxiliary audio device capabilities structure */
  697. typedef struct auxcaps_tag {
  698.     UINT    wMid;                  /* manufacturer ID */
  699.     UINT    wPid;                  /* product ID */
  700.     VERSION vDriverVersion;        /* version of the driver */
  701.     char    szPname[MAXPNAMELEN];  /* product name (NULL terminated string) */
  702.     UINT    wTechnology;           /* type of device */
  703.     DWORD   dwSupport;             /* functionality supported by driver */
  704. } AUXCAPS;
  705. typedef AUXCAPS       *PAUXCAPS;
  706. typedef AUXCAPS NEAR *NPAUXCAPS;
  707. typedef AUXCAPS FAR  *LPAUXCAPS;
  708.  
  709. /* flags for wTechnology field in AUXCAPS structure */
  710. #define AUXCAPS_CDAUDIO    1       /* audio from internal CD-ROM drive */
  711. #define AUXCAPS_AUXIN      2       /* audio from auxiliary input jacks */
  712.  
  713. /* flags for dwSupport field in AUXCAPS structure */
  714. #define AUXCAPS_VOLUME          0x0001  /* supports volume control */
  715. #define AUXCAPS_LRVOLUME        0x0002  /* separate left-right volume control */
  716.  
  717. /* auxiliary audio function prototypes */
  718. UINT WINAPI auxGetNumDevs(void);
  719. UINT WINAPI auxGetDevCaps(UINT uDeviceID, AUXCAPS FAR* lpCaps, UINT uSize);
  720. UINT WINAPI auxSetVolume(UINT uDeviceID, DWORD dwVolume);
  721. UINT WINAPI auxGetVolume(UINT uDeviceID, DWORD FAR* lpdwVolume);
  722.  
  723. #if defined(WINVER) && (WINVER >= 0x030a)
  724. DWORD WINAPI auxOutMessage(UINT uDeviceID, UINT uMessage, DWORD dw1, DWORD dw2);
  725. #endif  /* WINVER >= 0x030a */
  726.  
  727. #endif  /* ifndef MMNOAUX */
  728.  
  729.  
  730. #ifndef MMNOTIMER
  731. /****************************************************************************
  732.  
  733.                             Timer support
  734.  
  735. ****************************************************************************/
  736.  
  737. /* timer error return values */
  738. #define TIMERR_NOERROR        (0)                  /* no error */
  739. #define TIMERR_NOCANDO        (TIMERR_BASE+1)      /* request not completed */
  740. #define TIMERR_STRUCT         (TIMERR_BASE+33)     /* time struct size */
  741.  
  742. /* timer data types */
  743. typedef void (CALLBACK TIMECALLBACK) (UINT uTimerID, UINT uMessage, DWORD dwUser, DWORD dw1, DWORD dw2);
  744.  
  745. typedef TIMECALLBACK FAR *LPTIMECALLBACK;
  746.  
  747. /* flags for wFlags parameter of timeSetEvent() function */
  748. #define TIME_ONESHOT    0   /* program timer for single event */
  749. #define TIME_PERIODIC   1   /* program for continuous periodic event */
  750.  
  751. /* timer device capabilities data structure */
  752. typedef struct timecaps_tag {
  753.     UINT    wPeriodMin;     /* minimum period supported  */
  754.     UINT    wPeriodMax;     /* maximum period supported  */
  755.     } TIMECAPS;
  756. typedef TIMECAPS       *PTIMECAPS;
  757. typedef TIMECAPS NEAR *NPTIMECAPS;
  758. typedef TIMECAPS FAR  *LPTIMECAPS;
  759.  
  760. /* timer function prototypes */
  761. UINT WINAPI timeGetSystemTime(MMTIME FAR* lpTime, UINT uSize);
  762. DWORD WINAPI timeGetTime(void);
  763. UINT WINAPI timeSetEvent(UINT uDelay, UINT uResolution,
  764.     LPTIMECALLBACK lpFunction, DWORD dwUser, UINT uFlags);
  765. UINT WINAPI timeKillEvent(UINT uTimerID);
  766. UINT WINAPI timeGetDevCaps(TIMECAPS FAR* lpTimeCaps, UINT uSize);
  767. UINT WINAPI timeBeginPeriod(UINT uPeriod);
  768. UINT WINAPI timeEndPeriod(UINT uPeriod);
  769.  
  770. #endif  /* ifndef MMNOTIMER */
  771.  
  772.  
  773. #ifndef MMNOJOY
  774. /****************************************************************************
  775.  
  776.                             Joystick support
  777.  
  778. ****************************************************************************/
  779.  
  780. /* joystick error return values */
  781. #define JOYERR_NOERROR        (0)                  /* no error */
  782. #define JOYERR_PARMS          (JOYERR_BASE+5)      /* bad parameters */
  783. #define JOYERR_NOCANDO        (JOYERR_BASE+6)      /* request not completed */
  784. #define JOYERR_UNPLUGGED      (JOYERR_BASE+7)      /* joystick is unplugged */
  785.  
  786. /* constants used with JOYINFO structure and MM_JOY* messages */
  787. #define JOY_BUTTON1         0x0001
  788. #define JOY_BUTTON2         0x0002
  789. #define JOY_BUTTON3         0x0004
  790. #define JOY_BUTTON4         0x0008
  791. #define JOY_BUTTON1CHG      0x0100
  792. #define JOY_BUTTON2CHG      0x0200
  793. #define JOY_BUTTON3CHG      0x0400
  794. #define JOY_BUTTON4CHG      0x0800
  795.  
  796. /* joystick ID constants */
  797. #define JOYSTICKID1         0
  798. #define JOYSTICKID2         1
  799.  
  800. /* joystick device capabilities data structure */
  801. typedef struct joycaps_tag {
  802.     UINT wMid;                  /* manufacturer ID */
  803.     UINT wPid;                  /* product ID */
  804.     char szPname[MAXPNAMELEN];  /* product name (NULL terminated string) */
  805.     UINT wXmin;                 /* minimum x position value */
  806.     UINT wXmax;                 /* maximum x position value */
  807.     UINT wYmin;                 /* minimum y position value */
  808.     UINT wYmax;                 /* maximum y position value */
  809.     UINT wZmin;                 /* minimum z position value */
  810.     UINT wZmax;                 /* maximum z position value */
  811.     UINT wNumButtons;           /* number of buttons */
  812.     UINT wPeriodMin;            /* minimum message period when captured */
  813.     UINT wPeriodMax;            /* maximum message period when captured */
  814.     } JOYCAPS;
  815. typedef JOYCAPS       *PJOYCAPS;
  816. typedef JOYCAPS NEAR *NPJOYCAPS;
  817. typedef JOYCAPS FAR  *LPJOYCAPS;
  818.  
  819. /* joystick information data structure */
  820. typedef struct joyinfo_tag {
  821.     UINT wXpos;                 /* x position */
  822.     UINT wYpos;                 /* y position */
  823.     UINT wZpos;                 /* z position */
  824.     UINT wButtons;              /* button states */
  825.     } JOYINFO;
  826. typedef JOYINFO       *PJOYINFO;
  827. typedef JOYINFO NEAR *NPJOYINFO;
  828. typedef JOYINFO FAR  *LPJOYINFO;
  829.  
  830. /* joystick function prototypes */
  831. UINT WINAPI joyGetDevCaps(UINT uJoyID, JOYCAPS FAR* lpCaps, UINT uSize);
  832. UINT WINAPI joyGetNumDevs(void);
  833. UINT WINAPI joyGetPos(UINT uJoyID, JOYINFO FAR* lpInfo);
  834. UINT WINAPI joyGetThreshold(UINT uJoyID, UINT FAR* lpuThreshold);
  835. UINT WINAPI joyReleaseCapture(UINT uJoyID);
  836. UINT WINAPI joySetCapture(HWND hwnd, UINT uJoyID, UINT uPeriod,
  837.     BOOL bChanged);
  838. UINT WINAPI joySetThreshold(UINT uJoyID, UINT uThreshold);
  839.  
  840. #endif  /* ifndef MMNOJOY */
  841.  
  842.  
  843. #ifndef MMNOMMIO
  844. /****************************************************************************
  845.  
  846.                         Multimedia File I/O support
  847.  
  848. ****************************************************************************/
  849.  
  850. /* MMIO error return values */
  851. #define MMIOERR_BASE            256
  852. #define MMIOERR_FILENOTFOUND    (MMIOERR_BASE + 1)  /* file not found */
  853. #define MMIOERR_OUTOFMEMORY     (MMIOERR_BASE + 2)  /* out of memory */
  854. #define MMIOERR_CANNOTOPEN      (MMIOERR_BASE + 3)  /* cannot open */
  855. #define MMIOERR_CANNOTCLOSE     (MMIOERR_BASE + 4)  /* cannot close */
  856. #define MMIOERR_CANNOTREAD      (MMIOERR_BASE + 5)  /* cannot read */
  857. #define MMIOERR_CANNOTWRITE     (MMIOERR_BASE + 6)  /* cannot write */
  858. #define MMIOERR_CANNOTSEEK      (MMIOERR_BASE + 7)  /* cannot seek */
  859. #define MMIOERR_CANNOTEXPAND    (MMIOERR_BASE + 8)  /* cannot expand file */
  860. #define MMIOERR_CHUNKNOTFOUND   (MMIOERR_BASE + 9)  /* chunk not found */
  861. #define MMIOERR_UNBUFFERED      (MMIOERR_BASE + 10) /* file is unbuffered */
  862.  
  863. /* MMIO constants */
  864. #define CFSEPCHAR       '+'             /* compound file name separator char. */
  865.  
  866. /* MMIO data types */
  867. typedef DWORD           FOURCC;         /* a four character code */
  868. typedef char _huge *    HPSTR;          /* a huge version of LPSTR */
  869. DECLARE_HANDLE(HMMIO);                  /* a handle to an open file */
  870. typedef LRESULT (CALLBACK MMIOPROC)(LPSTR lpmmioinfo, UINT uMessage,
  871.             LPARAM lParam1, LPARAM lParam2);
  872. typedef MMIOPROC FAR *LPMMIOPROC;
  873.  
  874. /* general MMIO information data structure */
  875. typedef struct _MMIOINFO
  876. {
  877.         /* general fields */
  878.         DWORD           dwFlags;        /* general status flags */
  879.         FOURCC          fccIOProc;      /* pointer to I/O procedure */
  880.         LPMMIOPROC      pIOProc;        /* pointer to I/O procedure */
  881.         UINT            wErrorRet;      /* place for error to be returned */
  882.         HTASK           htask;          /* alternate local task */
  883.  
  884.         /* fields maintained by MMIO functions during buffered I/O */
  885.         LONG            cchBuffer;      /* size of I/O buffer (or 0L) */
  886.         HPSTR           pchBuffer;      /* start of I/O buffer (or NULL) */
  887.         HPSTR           pchNext;        /* pointer to next byte to read/write */
  888.         HPSTR           pchEndRead;     /* pointer to last valid byte to read */
  889.         HPSTR           pchEndWrite;    /* pointer to last byte to write */
  890.         LONG            lBufOffset;     /* disk offset of start of buffer */
  891.  
  892.         /* fields maintained by I/O procedure */
  893.         LONG            lDiskOffset;    /* disk offset of next read or write */
  894.         DWORD           adwInfo[3];     /* data specific to type of MMIOPROC */
  895.  
  896.         /* other fields maintained by MMIO */
  897.         DWORD           dwReserved1;    /* reserved for MMIO use */
  898.         DWORD           dwReserved2;    /* reserved for MMIO use */
  899.         HMMIO           hmmio;          /* handle to open file */
  900. } MMIOINFO;
  901. typedef MMIOINFO       *PMMIOINFO;
  902. typedef MMIOINFO NEAR *NPMMIOINFO;
  903. typedef MMIOINFO FAR  *LPMMIOINFO;
  904.  
  905. /* RIFF chunk information data structure */
  906. typedef struct _MMCKINFO
  907. {
  908.         FOURCC          ckid;           /* chunk ID */
  909.         DWORD           cksize;         /* chunk size */
  910.         FOURCC          fccType;        /* form type or list type */
  911.         DWORD           dwDataOffset;   /* offset of data portion of chunk */
  912.         DWORD           dwFlags;        /* flags used by MMIO functions */
  913. } MMCKINFO;
  914. typedef MMCKINFO       *PMMCKINFO;
  915. typedef MMCKINFO NEAR *NPMMCKINFO;
  916. typedef MMCKINFO FAR  *LPMMCKINFO;
  917.  
  918. /* bit field masks */
  919. #define MMIO_RWMODE     0x00000003      /* open file for reading/writing/both */
  920. #define MMIO_SHAREMODE  0x00000070      /* file sharing mode number */
  921.  
  922. /* constants for dwFlags field of MMIOINFO */
  923. #define MMIO_CREATE     0x00001000      /* create new file (or truncate file) */
  924. #define MMIO_PARSE      0x00000100      /* parse new file returning path */
  925. #define MMIO_DELETE     0x00000200      /* create new file (or truncate file) */
  926. #define MMIO_EXIST      0x00004000      /* checks for existence of file */
  927. #define MMIO_ALLOCBUF   0x00010000      /* mmioOpen() should allocate a buffer */
  928. #define MMIO_GETTEMP    0x00020000      /* mmioOpen() should retrieve temp name */
  929.  
  930. #define MMIO_DIRTY      0x10000000      /* I/O buffer is dirty */
  931.  
  932.  
  933. /* read/write mode numbers (bit field MMIO_RWMODE) */
  934. #define MMIO_READ       0x00000000      /* open file for reading only */
  935. #define MMIO_WRITE      0x00000001      /* open file for writing only */
  936. #define MMIO_READWRITE  0x00000002      /* open file for reading and writing */
  937.  
  938. /* share mode numbers (bit field MMIO_SHAREMODE) */
  939. #define MMIO_COMPAT     0x00000000      /* compatibility mode */
  940. #define MMIO_EXCLUSIVE  0x00000010      /* exclusive-access mode */
  941. #define MMIO_DENYWRITE  0x00000020      /* deny writing to other processes */
  942. #define MMIO_DENYREAD   0x00000030      /* deny reading to other processes */
  943. #define MMIO_DENYNONE   0x00000040      /* deny nothing to other processes */
  944.  
  945. /* various MMIO flags */
  946. #define MMIO_FHOPEN             0x0010  /* mmioClose: keep file handle open */
  947. #define MMIO_EMPTYBUF           0x0010  /* mmioFlush: empty the I/O buffer */
  948. #define MMIO_TOUPPER            0x0010  /* mmioStringToFOURCC: to u-case */
  949. #define MMIO_INSTALLPROC    0x00010000  /* mmioInstallIOProc: install MMIOProc */
  950. #define MMIO_GLOBALPROC     0x10000000  /* mmioInstallIOProc: install globally */
  951. #define MMIO_REMOVEPROC     0x00020000  /* mmioInstallIOProc: remove MMIOProc */
  952. #define MMIO_FINDPROC       0x00040000  /* mmioInstallIOProc: find an MMIOProc */
  953. #define MMIO_FINDCHUNK          0x0010  /* mmioDescend: find a chunk by ID */
  954. #define MMIO_FINDRIFF           0x0020  /* mmioDescend: find a LIST chunk */
  955. #define MMIO_FINDLIST           0x0040  /* mmioDescend: find a RIFF chunk */
  956. #define MMIO_CREATERIFF         0x0020  /* mmioCreateChunk: make a LIST chunk */
  957. #define MMIO_CREATELIST         0x0040  /* mmioCreateChunk: make a RIFF chunk */
  958.  
  959.  
  960. /* message numbers for MMIOPROC I/O procedure functions */
  961. #define MMIOM_READ      MMIO_READ       /* read */
  962. #define MMIOM_WRITE    MMIO_WRITE       /* write */
  963. #define MMIOM_SEEK              2       /* seek to a new position in file */
  964. #define MMIOM_OPEN              3       /* open file */
  965. #define MMIOM_CLOSE             4       /* close file */
  966. #define MMIOM_WRITEFLUSH        5       /* write and flush */
  967.  
  968. #if defined(WINVER) && (WINVER >= 0x030a)
  969. #define MMIOM_RENAME            6       /* rename specified file */
  970. #endif  /* WINVER >= 0x030a */
  971.  
  972. #define MMIOM_USER         0x8000       /* beginning of user-defined messages */
  973.  
  974. /* standard four character codes */
  975. #define FOURCC_RIFF     mmioFOURCC('R', 'I', 'F', 'F')
  976. #define FOURCC_LIST     mmioFOURCC('L', 'I', 'S', 'T')
  977.  
  978. /* four character codes used to identify standard built-in I/O procedures */
  979. #define FOURCC_DOS      mmioFOURCC('D', 'O', 'S', ' ')
  980. #define FOURCC_MEM      mmioFOURCC('M', 'E', 'M', ' ')
  981.  
  982. /* flags for mmioSeek() */
  983. #ifndef SEEK_SET
  984. #define SEEK_SET        0               /* seek to an absolute position */
  985. #define SEEK_CUR        1               /* seek relative to current position */
  986. #define SEEK_END        2               /* seek relative to end of file */
  987. #endif  /* ifndef SEEK_SET */
  988.  
  989. /* other constants */
  990. #define MMIO_DEFAULTBUFFER      8192    /* default buffer size */
  991.  
  992. /* MMIO macros */
  993. #define mmioFOURCC( ch0, ch1, ch2, ch3 )                                \
  994.                 ( (DWORD)(BYTE)(ch0) | ( (DWORD)(BYTE)(ch1) << 8 ) |    \
  995.                 ( (DWORD)(BYTE)(ch2) << 16 ) | ( (DWORD)(BYTE)(ch3) << 24 ) )
  996.  
  997. /* MMIO function prototypes */
  998. FOURCC WINAPI mmioStringToFOURCC(LPCSTR sz, UINT uFlags);
  999. LPMMIOPROC WINAPI mmioInstallIOProc(FOURCC fccIOProc, LPMMIOPROC pIOProc,
  1000.     DWORD dwFlags);
  1001. HMMIO WINAPI mmioOpen(LPSTR szFileName, MMIOINFO FAR* lpmmioinfo,
  1002.     DWORD dwOpenFlags);
  1003.  
  1004. #if defined(WINVER) && (WINVER >= 0x030a)
  1005. UINT WINAPI mmioRename(LPCSTR szFileName, LPCSTR szNewFileName,
  1006.      MMIOINFO FAR* lpmmioinfo, DWORD dwRenameFlags);
  1007. #endif  /* WINVER >= 0x030a */
  1008.  
  1009. UINT WINAPI mmioClose(HMMIO hmmio, UINT uFlags);
  1010. LONG WINAPI mmioRead(HMMIO hmmio, HPSTR pch, LONG cch);
  1011. LONG WINAPI mmioWrite(HMMIO hmmio, const char _huge* pch, LONG cch);
  1012. LONG WINAPI mmioSeek(HMMIO hmmio, LONG lOffset, int iOrigin);
  1013. UINT WINAPI mmioGetInfo(HMMIO hmmio, MMIOINFO FAR* lpmmioinfo, UINT uFlags);
  1014. UINT WINAPI mmioSetInfo(HMMIO hmmio, const MMIOINFO FAR* lpmmioinfo, UINT uFlags);
  1015. UINT WINAPI mmioSetBuffer(HMMIO hmmio, LPSTR pchBuffer, LONG cchBuffer,
  1016.     UINT uFlags);
  1017. UINT WINAPI mmioFlush(HMMIO hmmio, UINT uFlags);
  1018. UINT WINAPI mmioAdvance(HMMIO hmmio, MMIOINFO FAR* lpmmioinfo, UINT uFlags);
  1019. LRESULT WINAPI mmioSendMessage(HMMIO hmmio, UINT uMessage,
  1020.     LPARAM lParam1, LPARAM lParam2);
  1021. UINT WINAPI mmioDescend(HMMIO hmmio, MMCKINFO FAR* lpck,
  1022.     const MMCKINFO FAR* lpckParent, UINT uFlags);
  1023. UINT WINAPI mmioAscend(HMMIO hmmio, MMCKINFO FAR* lpck, UINT uFlags);
  1024. UINT WINAPI mmioCreateChunk(HMMIO hmmio, MMCKINFO FAR* lpck, UINT uFlags);
  1025.  
  1026. #endif  /* ifndef MMNOMMIO */
  1027.  
  1028.  
  1029. #ifndef MMNOMCI
  1030. /****************************************************************************
  1031.  
  1032.                             MCI support
  1033.  
  1034. ****************************************************************************/
  1035.  
  1036. typedef UINT (CALLBACK *YIELDPROC) (UINT uDeviceID, DWORD dwYieldData);
  1037.  
  1038. /* MCI function prototypes */
  1039. DWORD WINAPI mciSendCommand (UINT uDeviceID, UINT uMessage,
  1040.     DWORD dwParam1, DWORD dwParam2);
  1041. DWORD WINAPI mciSendString (LPCSTR lpstrCommand,
  1042.     LPSTR lpstrReturnString, UINT uReturnLength, HWND hwndCallback);
  1043. UINT WINAPI mciGetDeviceID (LPCSTR lpstrName);
  1044. UINT WINAPI mciGetDeviceIDFromElementID (DWORD dwElementID,
  1045.     LPCSTR lpstrType);
  1046. BOOL WINAPI mciGetErrorString (DWORD wError, LPSTR lpstrBuffer,
  1047.     UINT uLength);
  1048. BOOL WINAPI mciSetYieldProc (UINT uDeviceID, YIELDPROC fpYieldProc,
  1049.     DWORD dwYieldData);
  1050.  
  1051. #if defined(WINVER) && (WINVER >= 0x030a)
  1052. HTASK WINAPI mciGetCreatorTask(UINT uDeviceID);
  1053. YIELDPROC WINAPI mciGetYieldProc (UINT uDeviceID, DWORD FAR* lpdwYieldData);
  1054. #endif  /* WINVER >= 0x030a */
  1055.  
  1056. /* If included with the 3.0 windows.h */
  1057. #if !defined(WINVER) || (WINVER < 0x030a)
  1058. BOOL WINAPI mciExecute (LPCSTR lpstrCommand);
  1059. #endif  /* WIN3.0 */
  1060.  
  1061. /* MCI error return values */
  1062. #define MCIERR_INVALID_DEVICE_ID        (MCIERR_BASE + 1)
  1063. #define MCIERR_UNRECOGNIZED_KEYWORD     (MCIERR_BASE + 3)
  1064. #define MCIERR_UNRECOGNIZED_COMMAND     (MCIERR_BASE + 5)
  1065. #define MCIERR_HARDWARE                 (MCIERR_BASE + 6)
  1066. #define MCIERR_INVALID_DEVICE_NAME      (MCIERR_BASE + 7)
  1067. #define MCIERR_OUT_OF_MEMORY            (MCIERR_BASE + 8)
  1068. #define MCIERR_DEVICE_OPEN              (MCIERR_BASE + 9)
  1069. #define MCIERR_CANNOT_LOAD_DRIVER       (MCIERR_BASE + 10)
  1070. #define MCIERR_MISSING_COMMAND_STRING   (MCIERR_BASE + 11)
  1071. #define MCIERR_PARAM_OVERFLOW           (MCIERR_BASE + 12)
  1072. #define MCIERR_MISSING_STRING_ARGUMENT  (MCIERR_BASE + 13)
  1073. #define MCIERR_BAD_INTEGER              (MCIERR_BASE + 14)
  1074. #define MCIERR_PARSER_INTERNAL          (MCIERR_BASE + 15)
  1075. #define MCIERR_DRIVER_INTERNAL          (MCIERR_BASE + 16)
  1076. #define MCIERR_MISSING_PARAMETER        (MCIERR_BASE + 17)
  1077. #define MCIERR_UNSUPPORTED_FUNCTION     (MCIERR_BASE + 18)
  1078. #define MCIERR_FILE_NOT_FOUND           (MCIERR_BASE + 19)
  1079. #define MCIERR_DEVICE_NOT_READY         (MCIERR_BASE + 20)
  1080. #define MCIERR_INTERNAL                 (MCIERR_BASE + 21)
  1081. #define MCIERR_DRIVER                   (MCIERR_BASE + 22)
  1082. #define MCIERR_CANNOT_USE_ALL           (MCIERR_BASE + 23)
  1083. #define MCIERR_MULTIPLE                 (MCIERR_BASE + 24)
  1084. #define MCIERR_EXTENSION_NOT_FOUND      (MCIERR_BASE + 25)
  1085. #define MCIERR_OUTOFRANGE               (MCIERR_BASE + 26)
  1086. #define MCIERR_FLAGS_NOT_COMPATIBLE     (MCIERR_BASE + 28)
  1087. #define MCIERR_FILE_NOT_SAVED           (MCIERR_BASE + 30)
  1088. #define MCIERR_DEVICE_TYPE_REQUIRED     (MCIERR_BASE + 31)
  1089. #define MCIERR_DEVICE_LOCKED            (MCIERR_BASE + 32)
  1090. #define MCIERR_DUPLICATE_ALIAS          (MCIERR_BASE + 33)
  1091. #define MCIERR_BAD_CONSTANT             (MCIERR_BASE + 34)
  1092. #define MCIERR_MUST_USE_SHAREABLE       (MCIERR_BASE + 35)
  1093. #define MCIERR_MISSING_DEVICE_NAME      (MCIERR_BASE + 36)
  1094. #define MCIERR_BAD_TIME_FORMAT          (MCIERR_BASE + 37)
  1095. #define MCIERR_NO_CLOSING_QUOTE         (MCIERR_BASE + 38)
  1096. #define MCIERR_DUPLICATE_FLAGS          (MCIERR_BASE + 39)
  1097. #define MCIERR_INVALID_FILE             (MCIERR_BASE + 40)
  1098. #define MCIERR_NULL_PARAMETER_BLOCK     (MCIERR_BASE + 41)
  1099. #define MCIERR_UNNAMED_RESOURCE         (MCIERR_BASE + 42)
  1100. #define MCIERR_NEW_REQUIRES_ALIAS       (MCIERR_BASE + 43)
  1101. #define MCIERR_NOTIFY_ON_AUTO_OPEN      (MCIERR_BASE + 44)
  1102. #define MCIERR_NO_ELEMENT_ALLOWED       (MCIERR_BASE + 45)
  1103. #define MCIERR_NONAPPLICABLE_FUNCTION   (MCIERR_BASE + 46)
  1104. #define MCIERR_ILLEGAL_FOR_AUTO_OPEN    (MCIERR_BASE + 47)
  1105. #define MCIERR_FILENAME_REQUIRED        (MCIERR_BASE + 48)
  1106. #define MCIERR_EXTRA_CHARACTERS         (MCIERR_BASE + 49)
  1107. #define MCIERR_DEVICE_NOT_INSTALLED     (MCIERR_BASE + 50)
  1108. #define MCIERR_GET_CD                   (MCIERR_BASE + 51)
  1109. #define MCIERR_SET_CD                   (MCIERR_BASE + 52)
  1110. #define MCIERR_SET_DRIVE                (MCIERR_BASE + 53)
  1111. #define MCIERR_DEVICE_LENGTH            (MCIERR_BASE + 54)
  1112. #define MCIERR_DEVICE_ORD_LENGTH        (MCIERR_BASE + 55)
  1113. #define MCIERR_NO_INTEGER               (MCIERR_BASE + 56)
  1114.  
  1115. #define MCIERR_WAVE_OUTPUTSINUSE        (MCIERR_BASE + 64)
  1116. #define MCIERR_WAVE_SETOUTPUTINUSE      (MCIERR_BASE + 65)
  1117. #define MCIERR_WAVE_INPUTSINUSE         (MCIERR_BASE + 66)
  1118. #define MCIERR_WAVE_SETINPUTINUSE       (MCIERR_BASE + 67)
  1119. #define MCIERR_WAVE_OUTPUTUNSPECIFIED   (MCIERR_BASE + 68)
  1120. #define MCIERR_WAVE_INPUTUNSPECIFIED    (MCIERR_BASE + 69)
  1121. #define MCIERR_WAVE_OUTPUTSUNSUITABLE   (MCIERR_BASE + 70)
  1122. #define MCIERR_WAVE_SETOUTPUTUNSUITABLE (MCIERR_BASE + 71)
  1123. #define MCIERR_WAVE_INPUTSUNSUITABLE    (MCIERR_BASE + 72)
  1124. #define MCIERR_WAVE_SETINPUTUNSUITABLE  (MCIERR_BASE + 73)
  1125.  
  1126. #define MCIERR_SEQ_DIV_INCOMPATIBLE     (MCIERR_BASE + 80)
  1127. #define MCIERR_SEQ_PORT_INUSE           (MCIERR_BASE + 81)
  1128. #define MCIERR_SEQ_PORT_NONEXISTENT     (MCIERR_BASE + 82)
  1129. #define MCIERR_SEQ_PORT_MAPNODEVICE     (MCIERR_BASE + 83)
  1130. #define MCIERR_SEQ_PORT_MISCERROR       (MCIERR_BASE + 84)
  1131. #define MCIERR_SEQ_TIMER                (MCIERR_BASE + 85)
  1132. #define MCIERR_SEQ_PORTUNSPECIFIED      (MCIERR_BASE + 86)
  1133. #define MCIERR_SEQ_NOMIDIPRESENT        (MCIERR_BASE + 87)
  1134.  
  1135. #define MCIERR_NO_WINDOW                (MCIERR_BASE + 90)
  1136. #define MCIERR_CREATEWINDOW             (MCIERR_BASE + 91)
  1137. #define MCIERR_FILE_READ                (MCIERR_BASE + 92)
  1138. #define MCIERR_FILE_WRITE               (MCIERR_BASE + 93)
  1139.  
  1140. /* all custom device driver errors must be >= than this value */
  1141. #define MCIERR_CUSTOM_DRIVER_BASE       (MCIERR_BASE + 256)
  1142.  
  1143. /* MCI command message identifiers */
  1144. #define MCI_OPEN                        0x0803
  1145. #define MCI_CLOSE                       0x0804
  1146. #define MCI_ESCAPE                      0x0805
  1147. #define MCI_PLAY                        0x0806
  1148. #define MCI_SEEK                        0x0807
  1149. #define MCI_STOP                        0x0808
  1150. #define MCI_PAUSE                       0x0809
  1151. #define MCI_INFO                        0x080A
  1152. #define MCI_GETDEVCAPS                  0x080B
  1153. #define MCI_SPIN                        0x080C
  1154. #define MCI_SET                         0x080D
  1155. #define MCI_STEP                        0x080E
  1156. #define MCI_RECORD                      0x080F
  1157. #define MCI_SYSINFO                     0x0810
  1158. #define MCI_BREAK                       0x0811
  1159. #define MCI_SOUND                       0x0812
  1160. #define MCI_SAVE                        0x0813
  1161. #define MCI_STATUS                      0x0814
  1162. #define MCI_CUE                         0x0830
  1163. #define MCI_REALIZE                     0x0840
  1164. #define MCI_WINDOW                      0x0841
  1165. #define MCI_PUT                         0x0842
  1166. #define MCI_WHERE                       0x0843
  1167. #define MCI_FREEZE                      0x0844
  1168. #define MCI_UNFREEZE                    0x0845
  1169. #define MCI_LOAD                        0x0850
  1170. #define MCI_CUT                         0x0851
  1171. #define MCI_COPY                        0x0852
  1172. #define MCI_PASTE                       0x0853
  1173. #define MCI_UPDATE                      0x0854
  1174. #define MCI_RESUME                      0x0855
  1175. #define MCI_DELETE                      0x0856
  1176.  
  1177. /* all custom MCI command messages must be >= than this value */
  1178. #define MCI_USER_MESSAGES               (0x400 + DRV_MCI_FIRST)
  1179.  
  1180.  
  1181. /* device ID for "all devices" */
  1182. #define MCI_ALL_DEVICE_ID               0xFFFF
  1183.  
  1184. /* constants for predefined MCI device types */
  1185. #define MCI_DEVTYPE_VCR                 (MCI_STRING_OFFSET + 1)
  1186. #define MCI_DEVTYPE_VIDEODISC           (MCI_STRING_OFFSET + 2)
  1187. #define MCI_DEVTYPE_OVERLAY             (MCI_STRING_OFFSET + 3)
  1188. #define MCI_DEVTYPE_CD_AUDIO            (MCI_STRING_OFFSET + 4)
  1189. #define MCI_DEVTYPE_DAT                 (MCI_STRING_OFFSET + 5)
  1190. #define MCI_DEVTYPE_SCANNER             (MCI_STRING_OFFSET + 6)
  1191. #define MCI_DEVTYPE_ANIMATION           (MCI_STRING_OFFSET + 7)
  1192. #define MCI_DEVTYPE_DIGITAL_VIDEO       (MCI_STRING_OFFSET + 8)
  1193. #define MCI_DEVTYPE_OTHER               (MCI_STRING_OFFSET + 9)
  1194. #define MCI_DEVTYPE_WAVEFORM_AUDIO      (MCI_STRING_OFFSET + 10)
  1195. #define MCI_DEVTYPE_SEQUENCER           (MCI_STRING_OFFSET + 11)
  1196.  
  1197. #define MCI_DEVTYPE_FIRST               MCI_DEVTYPE_VCR
  1198. #define MCI_DEVTYPE_LAST                MCI_DEVTYPE_SEQUENCER
  1199.  
  1200. /* return values for 'status mode' command */
  1201. #define MCI_MODE_NOT_READY              (MCI_STRING_OFFSET + 12)
  1202. #define MCI_MODE_STOP                   (MCI_STRING_OFFSET + 13)
  1203. #define MCI_MODE_PLAY                   (MCI_STRING_OFFSET + 14)
  1204. #define MCI_MODE_RECORD                 (MCI_STRING_OFFSET + 15)
  1205. #define MCI_MODE_SEEK                   (MCI_STRING_OFFSET + 16)
  1206. #define MCI_MODE_PAUSE                  (MCI_STRING_OFFSET + 17)
  1207. #define MCI_MODE_OPEN                   (MCI_STRING_OFFSET + 18)
  1208.  
  1209. /* constants used in 'set time format' and 'status time format' commands */
  1210. #define MCI_FORMAT_MILLISECONDS         0
  1211. #define MCI_FORMAT_HMS                  1
  1212. #define MCI_FORMAT_MSF                  2
  1213. #define MCI_FORMAT_FRAMES               3
  1214. #define MCI_FORMAT_SMPTE_24             4
  1215. #define MCI_FORMAT_SMPTE_25             5
  1216. #define MCI_FORMAT_SMPTE_30             6
  1217. #define MCI_FORMAT_SMPTE_30DROP         7
  1218. #define MCI_FORMAT_BYTES                8
  1219. #define MCI_FORMAT_SAMPLES              9
  1220. #define MCI_FORMAT_TMSF                 10
  1221.  
  1222. /* MCI time format conversion macros */
  1223. #define MCI_MSF_MINUTE(msf)             ((BYTE)(msf))
  1224. #define MCI_MSF_SECOND(msf)             ((BYTE)(((WORD)(msf)) >> 8))
  1225. #define MCI_MSF_FRAME(msf)              ((BYTE)((msf)>>16))
  1226.  
  1227. #define MCI_MAKE_MSF(m, s, f)           ((DWORD)(((BYTE)(m) | \
  1228.                                                   ((WORD)(s)<<8)) | \
  1229.                                                  (((DWORD)(BYTE)(f))<<16)))
  1230.  
  1231. #define MCI_TMSF_TRACK(tmsf)            ((BYTE)(tmsf))
  1232. #define MCI_TMSF_MINUTE(tmsf)           ((BYTE)(((WORD)(tmsf)) >> 8))
  1233. #define MCI_TMSF_SECOND(tmsf)           ((BYTE)((tmsf)>>16))
  1234. #define MCI_TMSF_FRAME(tmsf)            ((BYTE)((tmsf)>>24))
  1235.  
  1236. #define MCI_MAKE_TMSF(t, m, s, f)       ((DWORD)(((BYTE)(t) | \
  1237.                                                   ((WORD)(m)<<8)) | \
  1238.                                                  (((DWORD)(BYTE)(s) | \
  1239.                                                    ((WORD)(f)<<8))<<16)))
  1240.  
  1241. #define MCI_HMS_HOUR(hms)               ((BYTE)(hms))
  1242. #define MCI_HMS_MINUTE(hms)             ((BYTE)(((WORD)(hms)) >> 8))
  1243. #define MCI_HMS_SECOND(hms)             ((BYTE)((hms)>>16))
  1244.  
  1245. #define MCI_MAKE_HMS(h, m, s)           ((DWORD)(((BYTE)(h) | \
  1246.                                                   ((WORD)(m)<<8)) | \
  1247.                                                  (((DWORD)(BYTE)(s))<<16)))
  1248.  
  1249.  
  1250. /* flags for wParam of MM_MCINOTIFY message */
  1251. #define MCI_NOTIFY_SUCCESSFUL           0x0001
  1252. #define MCI_NOTIFY_SUPERSEDED           0x0002
  1253. #define MCI_NOTIFY_ABORTED              0x0004
  1254. #define MCI_NOTIFY_FAILURE              0x0008
  1255.  
  1256.  
  1257. /* common flags for dwFlags parameter of MCI command messages */
  1258. #define MCI_NOTIFY                      0x00000001L
  1259. #define MCI_WAIT                        0x00000002L
  1260. #define MCI_FROM                        0x00000004L
  1261. #define MCI_TO                          0x00000008L
  1262. #define MCI_TRACK                       0x00000010L
  1263.  
  1264. /* flags for dwFlags parameter of MCI_OPEN command message */
  1265. #define MCI_OPEN_SHAREABLE              0x00000100L
  1266. #define MCI_OPEN_ELEMENT                0x00000200L
  1267. #define MCI_OPEN_ALIAS                  0x00000400L
  1268. #define MCI_OPEN_ELEMENT_ID             0x00000800L
  1269. #define MCI_OPEN_TYPE_ID                0x00001000L
  1270. #define MCI_OPEN_TYPE                   0x00002000L
  1271.  
  1272. /* flags for dwFlags parameter of MCI_SEEK command message */
  1273. #define MCI_SEEK_TO_START               0x00000100L
  1274. #define MCI_SEEK_TO_END                 0x00000200L
  1275.  
  1276. /* flags for dwFlags parameter of MCI_STATUS command message */
  1277. #define MCI_STATUS_ITEM                 0x00000100L
  1278. #define MCI_STATUS_START                0x00000200L
  1279.  
  1280. /* flags for dwItem field of the MCI_STATUS_PARMS parameter block */
  1281. #define MCI_STATUS_LENGTH               0x00000001L
  1282. #define MCI_STATUS_POSITION             0x00000002L
  1283. #define MCI_STATUS_NUMBER_OF_TRACKS     0x00000003L
  1284. #define MCI_STATUS_MODE                 0x00000004L
  1285. #define MCI_STATUS_MEDIA_PRESENT        0x00000005L
  1286. #define MCI_STATUS_TIME_FORMAT          0x00000006L
  1287. #define MCI_STATUS_READY                0x00000007L
  1288. #define MCI_STATUS_CURRENT_TRACK        0x00000008L
  1289.  
  1290. /* flags for dwFlags parameter of MCI_INFO command message */
  1291. #define MCI_INFO_PRODUCT                0x00000100L
  1292. #define MCI_INFO_FILE                   0x00000200L
  1293.  
  1294. /* flags for dwFlags parameter of MCI_GETDEVCAPS command message */
  1295. #define MCI_GETDEVCAPS_ITEM             0x00000100L
  1296.  
  1297. /* flags for dwItem field of the MCI_GETDEVCAPS_PARMS parameter block */
  1298. #define MCI_GETDEVCAPS_CAN_RECORD       0x00000001L
  1299. #define MCI_GETDEVCAPS_HAS_AUDIO        0x00000002L
  1300. #define MCI_GETDEVCAPS_HAS_VIDEO        0x00000003L
  1301. #define MCI_GETDEVCAPS_DEVICE_TYPE      0x00000004L
  1302. #define MCI_GETDEVCAPS_USES_FILES       0x00000005L
  1303. #define MCI_GETDEVCAPS_COMPOUND_DEVICE  0x00000006L
  1304. #define MCI_GETDEVCAPS_CAN_EJECT        0x00000007L
  1305. #define MCI_GETDEVCAPS_CAN_PLAY         0x00000008L
  1306. #define MCI_GETDEVCAPS_CAN_SAVE         0x00000009L
  1307.  
  1308. /* flags for dwFlags parameter of MCI_SYSINFO command message */
  1309. #define MCI_SYSINFO_QUANTITY            0x00000100L
  1310. #define MCI_SYSINFO_OPEN                0x00000200L
  1311. #define MCI_SYSINFO_NAME                0x00000400L
  1312. #define MCI_SYSINFO_INSTALLNAME         0x00000800L
  1313.  
  1314. /* flags for dwFlags parameter of MCI_SET command message */
  1315. #define MCI_SET_DOOR_OPEN               0x00000100L
  1316. #define MCI_SET_DOOR_CLOSED             0x00000200L
  1317. #define MCI_SET_TIME_FORMAT             0x00000400L
  1318. #define MCI_SET_AUDIO                   0x00000800L
  1319. #define MCI_SET_VIDEO                   0x00001000L
  1320. #define MCI_SET_ON                      0x00002000L
  1321. #define MCI_SET_OFF                     0x00004000L
  1322.  
  1323. /* flags for dwAudio field of MCI_SET_PARMS or MCI_SEQ_SET_PARMS */
  1324. #define MCI_SET_AUDIO_ALL               0x00000000L
  1325. #define MCI_SET_AUDIO_LEFT              0x00000001L
  1326. #define MCI_SET_AUDIO_RIGHT             0x00000002L
  1327.  
  1328. /* flags for dwFlags parameter of MCI_BREAK command message */
  1329. #define MCI_BREAK_KEY                   0x00000100L
  1330. #define MCI_BREAK_HWND                  0x00000200L
  1331. #define MCI_BREAK_OFF                   0x00000400L
  1332.  
  1333. /* flags for dwFlags parameter of MCI_RECORD command message */
  1334. #define MCI_RECORD_INSERT               0x00000100L
  1335. #define MCI_RECORD_OVERWRITE            0x00000200L
  1336.  
  1337. /* flags for dwFlags parameter of MCI_SOUND command message */
  1338. #define MCI_SOUND_NAME                  0x00000100L
  1339.  
  1340. /* flags for dwFlags parameter of MCI_SAVE command message */
  1341. #define MCI_SAVE_FILE                   0x00000100L
  1342.  
  1343. /* flags for dwFlags parameter of MCI_LOAD command message */
  1344. #define MCI_LOAD_FILE                   0x00000100L
  1345.  
  1346. /* generic parameter block for MCI command messages with no special parameters */
  1347. typedef struct tagMCI_GENERIC_PARMS {
  1348.     DWORD   dwCallback;
  1349. } MCI_GENERIC_PARMS;
  1350. typedef MCI_GENERIC_PARMS FAR *LPMCI_GENERIC_PARMS;
  1351.  
  1352. /* parameter block for MCI_OPEN command message */
  1353. typedef struct tagMCI_OPEN_PARMS {
  1354.     DWORD   dwCallback;
  1355.     UINT    wDeviceID;
  1356.     UINT    wReserved0;
  1357.     LPCSTR  lpstrDeviceType;
  1358.     LPCSTR  lpstrElementName;
  1359.     LPCSTR  lpstrAlias;
  1360. } MCI_OPEN_PARMS;
  1361. typedef MCI_OPEN_PARMS FAR *LPMCI_OPEN_PARMS;
  1362.  
  1363. /* parameter block for MCI_PLAY command message */
  1364. typedef struct tagMCI_PLAY_PARMS {
  1365.     DWORD   dwCallback;
  1366.     DWORD   dwFrom;
  1367.     DWORD   dwTo;
  1368. } MCI_PLAY_PARMS;
  1369. typedef MCI_PLAY_PARMS FAR *LPMCI_PLAY_PARMS;
  1370.  
  1371. /* parameter block for MCI_SEEK command message */
  1372. typedef struct tagMCI_SEEK_PARMS {
  1373.     DWORD   dwCallback;
  1374.     DWORD   dwTo;
  1375. } MCI_SEEK_PARMS;
  1376. typedef MCI_SEEK_PARMS FAR *LPMCI_SEEK_PARMS;
  1377.  
  1378. /* parameter block for MCI_STATUS command message */
  1379. typedef struct tagMCI_STATUS_PARMS {
  1380.     DWORD   dwCallback;
  1381.     DWORD   dwReturn;
  1382.     DWORD   dwItem;
  1383.     DWORD   dwTrack;
  1384. } MCI_STATUS_PARMS;
  1385. typedef MCI_STATUS_PARMS FAR * LPMCI_STATUS_PARMS;
  1386.  
  1387. /* parameter block for MCI_INFO command message */
  1388. typedef struct tagMCI_INFO_PARMS {
  1389.     DWORD   dwCallback;
  1390.     LPSTR   lpstrReturn;
  1391.     DWORD   dwRetSize;
  1392. } MCI_INFO_PARMS;
  1393. typedef MCI_INFO_PARMS FAR * LPMCI_INFO_PARMS;
  1394.  
  1395. /* parameter block for MCI_GETDEVCAPS command message */
  1396. typedef struct tagMCI_GETDEVCAPS_PARMS {
  1397.     DWORD   dwCallback;
  1398.     DWORD   dwReturn;
  1399.     DWORD   dwItem;
  1400. } MCI_GETDEVCAPS_PARMS;
  1401. typedef MCI_GETDEVCAPS_PARMS FAR * LPMCI_GETDEVCAPS_PARMS;
  1402.  
  1403. /* parameter block for MCI_SYSINFO command message */
  1404. typedef struct tagMCI_SYSINFO_PARMS {
  1405.     DWORD   dwCallback;
  1406.     LPSTR   lpstrReturn;
  1407.     DWORD   dwRetSize;
  1408.     DWORD   dwNumber;
  1409.     UINT    wDeviceType;
  1410.     UINT    wReserved0;
  1411. } MCI_SYSINFO_PARMS;
  1412. typedef MCI_SYSINFO_PARMS FAR * LPMCI_SYSINFO_PARMS;
  1413.  
  1414. /* parameter block for MCI_SET command message */
  1415. typedef struct tagMCI_SET_PARMS {
  1416.     DWORD   dwCallback;
  1417.     DWORD   dwTimeFormat;
  1418.     DWORD   dwAudio;
  1419. } MCI_SET_PARMS;
  1420. typedef MCI_SET_PARMS FAR *LPMCI_SET_PARMS;
  1421.  
  1422. /* parameter block for MCI_BREAK command message */
  1423. typedef struct tagMCI_BREAK_PARMS {
  1424.     DWORD   dwCallback;
  1425.     int     nVirtKey;
  1426.     UINT    wReserved0;
  1427.     HWND    hwndBreak;
  1428.     UINT    wReserved1;
  1429. } MCI_BREAK_PARMS;
  1430. typedef MCI_BREAK_PARMS FAR * LPMCI_BREAK_PARMS;
  1431.  
  1432. /* parameter block for MCI_SOUND command message */
  1433. typedef struct tagMCI_SOUND_PARMS {
  1434.     DWORD   dwCallback;
  1435.     LPCSTR  lpstrSoundName;
  1436. } MCI_SOUND_PARMS;
  1437. typedef MCI_SOUND_PARMS FAR * LPMCI_SOUND_PARMS;
  1438.  
  1439. /* parameter block for MCI_SAVE command message */
  1440. typedef struct tagMCI_SAVE_PARMS {
  1441.     DWORD   dwCallback;
  1442.     LPCSTR  lpfilename;
  1443. } MCI_SAVE_PARMS;
  1444. typedef MCI_SAVE_PARMS FAR * LPMCI_SAVE_PARMS;
  1445.  
  1446. /* parameter block for MCI_LOAD command message */
  1447. typedef struct tagMCI_LOAD_PARMS {
  1448.     DWORD   dwCallback;
  1449.     LPCSTR  lpfilename;
  1450. } MCI_LOAD_PARMS;
  1451. typedef MCI_LOAD_PARMS FAR * LPMCI_LOAD_PARMS;
  1452.  
  1453. /* parameter block for MCI_RECORD command message */
  1454. typedef struct tagMCI_RECORD_PARMS {
  1455.     DWORD   dwCallback;
  1456.     DWORD   dwFrom;
  1457.     DWORD   dwTo;
  1458. } MCI_RECORD_PARMS;
  1459. typedef MCI_RECORD_PARMS FAR *LPMCI_RECORD_PARMS;
  1460.  
  1461.  
  1462. /* MCI extensions for videodisc devices */
  1463.  
  1464. /* flag for dwReturn field of MCI_STATUS_PARMS */
  1465. /* MCI_STATUS command, (dwItem == MCI_STATUS_MODE) */
  1466. #define MCI_VD_MODE_PARK                (MCI_VD_OFFSET + 1)
  1467.  
  1468. /* flag for dwReturn field of MCI_STATUS_PARMS */
  1469. /* MCI_STATUS command, (dwItem == MCI_VD_STATUS_MEDIA_TYPE) */
  1470. #define MCI_VD_MEDIA_CLV                (MCI_VD_OFFSET + 2)
  1471. #define MCI_VD_MEDIA_CAV                (MCI_VD_OFFSET + 3)
  1472. #define MCI_VD_MEDIA_OTHER              (MCI_VD_OFFSET + 4)
  1473.  
  1474. #define MCI_VD_FORMAT_TRACK             0x4001
  1475.  
  1476. /* flags for dwFlags parameter of MCI_PLAY command message */
  1477. #define MCI_VD_PLAY_REVERSE             0x00010000L
  1478. #define MCI_VD_PLAY_FAST                0x00020000L
  1479. #define MCI_VD_PLAY_SPEED               0x00040000L
  1480. #define MCI_VD_PLAY_SCAN                0x00080000L
  1481. #define MCI_VD_PLAY_SLOW                0x00100000L
  1482.  
  1483. /* flag for dwFlags parameter of MCI_SEEK command message */
  1484. #define MCI_VD_SEEK_REVERSE             0x00010000L
  1485.  
  1486. /* flags for dwItem field of MCI_STATUS_PARMS parameter block */
  1487. #define MCI_VD_STATUS_SPEED             0x00004002L
  1488. #define MCI_VD_STATUS_FORWARD           0x00004003L
  1489. #define MCI_VD_STATUS_MEDIA_TYPE        0x00004004L
  1490. #define MCI_VD_STATUS_SIDE              0x00004005L
  1491. #define MCI_VD_STATUS_DISC_SIZE         0x00004006L
  1492.  
  1493. /* flags for dwFlags parameter of MCI_GETDEVCAPS command message */
  1494. #define MCI_VD_GETDEVCAPS_CLV           0x00010000L
  1495. #define MCI_VD_GETDEVCAPS_CAV           0x00020000L
  1496.  
  1497. #define MCI_VD_SPIN_UP                  0x00010000L
  1498. #define MCI_VD_SPIN_DOWN                0x00020000L
  1499.  
  1500. /* flags for dwItem field of MCI_GETDEVCAPS_PARMS parameter block */
  1501. #define MCI_VD_GETDEVCAPS_CAN_REVERSE   0x00004002L
  1502. #define MCI_VD_GETDEVCAPS_FAST_RATE     0x00004003L
  1503. #define MCI_VD_GETDEVCAPS_SLOW_RATE     0x00004004L
  1504. #define MCI_VD_GETDEVCAPS_NORMAL_RATE   0x00004005L
  1505.  
  1506. /* flags for the dwFlags parameter of MCI_STEP command message */
  1507. #define MCI_VD_STEP_FRAMES              0x00010000L
  1508. #define MCI_VD_STEP_REVERSE             0x00020000L
  1509.  
  1510. /* flag for the MCI_ESCAPE command message */
  1511. #define MCI_VD_ESCAPE_STRING            0x00000100L
  1512.  
  1513. /* parameter block for MCI_PLAY command message */
  1514. typedef struct tagMCI_VD_PLAY_PARMS {
  1515.     DWORD   dwCallback;
  1516.     DWORD   dwFrom;
  1517.     DWORD   dwTo;
  1518.     DWORD   dwSpeed;
  1519.     } MCI_VD_PLAY_PARMS;
  1520. typedef MCI_VD_PLAY_PARMS FAR *LPMCI_VD_PLAY_PARMS;
  1521.  
  1522. /* parameter block for MCI_STEP command message */
  1523. typedef struct tagMCI_VD_STEP_PARMS {
  1524.     DWORD   dwCallback;
  1525.     DWORD   dwFrames;
  1526. } MCI_VD_STEP_PARMS;
  1527. typedef MCI_VD_STEP_PARMS FAR *LPMCI_VD_STEP_PARMS;
  1528.  
  1529. /* parameter block for MCI_ESCAPE command message */
  1530. typedef struct tagMCI_VD_ESCAPE_PARMS {
  1531.     DWORD   dwCallback;
  1532.     LPCSTR  lpstrCommand;
  1533. } MCI_VD_ESCAPE_PARMS;
  1534. typedef MCI_VD_ESCAPE_PARMS FAR *LPMCI_VD_ESCAPE_PARMS;
  1535.  
  1536.  
  1537. /* MCI extensions for waveform audio devices */
  1538.  
  1539. /* flags for the dwFlags parameter of MCI_OPEN command message */
  1540. #define MCI_WAVE_OPEN_BUFFER            0x00010000L
  1541.  
  1542. /* flags for the dwFlags parameter of MCI_SET command message */
  1543. #define MCI_WAVE_SET_FORMATTAG          0x00010000L
  1544. #define MCI_WAVE_SET_CHANNELS           0x00020000L
  1545. #define MCI_WAVE_SET_SAMPLESPERSEC      0x00040000L
  1546. #define MCI_WAVE_SET_AVGBYTESPERSEC     0x00080000L
  1547. #define MCI_WAVE_SET_BLOCKALIGN         0x00100000L
  1548. #define MCI_WAVE_SET_BITSPERSAMPLE      0x00200000L
  1549.  
  1550. /* flags for the dwFlags parameter of MCI_STATUS, MCI_SET command messages */
  1551. #define MCI_WAVE_INPUT                  0x00400000L
  1552. #define MCI_WAVE_OUTPUT                 0x00800000L
  1553.  
  1554. /* flags for the dwItem field of MCI_STATUS_PARMS parameter block */
  1555. #define MCI_WAVE_STATUS_FORMATTAG       0x00004001L
  1556. #define MCI_WAVE_STATUS_CHANNELS        0x00004002L
  1557. #define MCI_WAVE_STATUS_SAMPLESPERSEC   0x00004003L
  1558. #define MCI_WAVE_STATUS_AVGBYTESPERSEC  0x00004004L
  1559. #define MCI_WAVE_STATUS_BLOCKALIGN      0x00004005L
  1560. #define MCI_WAVE_STATUS_BITSPERSAMPLE   0x00004006L
  1561. #define MCI_WAVE_STATUS_LEVEL           0x00004007L
  1562.  
  1563. /* flags for the dwFlags parameter of MCI_SET command message */
  1564. #define MCI_WAVE_SET_ANYINPUT           0x04000000L
  1565. #define MCI_WAVE_SET_ANYOUTPUT          0x08000000L
  1566.  
  1567. /* flags for the dwFlags parameter of MCI_GETDEVCAPS command message */
  1568. #define MCI_WAVE_GETDEVCAPS_INPUTS      0x00004001L
  1569. #define MCI_WAVE_GETDEVCAPS_OUTPUTS     0x00004002L
  1570.  
  1571. /* parameter block for MCI_OPEN command message */
  1572. typedef struct tagMCI_WAVE_OPEN_PARMS {
  1573.     DWORD   dwCallback;
  1574.     UINT    wDeviceID;
  1575.     UINT    wReserved0;
  1576.     LPCSTR  lpstrDeviceType;
  1577.     LPCSTR  lpstrElementName;
  1578.     LPCSTR  lpstrAlias;
  1579.     DWORD   dwBufferSeconds;
  1580. } MCI_WAVE_OPEN_PARMS;
  1581. typedef MCI_WAVE_OPEN_PARMS FAR *LPMCI_WAVE_OPEN_PARMS;
  1582.  
  1583. /* parameter block for MCI_DELETE command message */
  1584. typedef struct tagMCI_WAVE_DELETE_PARMS {
  1585.     DWORD   dwCallback;
  1586.     DWORD   dwFrom;
  1587.     DWORD   dwTo;
  1588. } MCI_WAVE_DELETE_PARMS;
  1589. typedef MCI_WAVE_DELETE_PARMS FAR *LPMCI_WAVE_DELETE_PARMS;
  1590.  
  1591. /* parameter block for MCI_SET command message */
  1592. typedef struct tagMCI_WAVE_SET_PARMS {
  1593.     DWORD   dwCallback;
  1594.     DWORD   dwTimeFormat;
  1595.     DWORD   dwAudio;
  1596.     UINT    wInput;
  1597.     UINT    wReserved0;
  1598.     UINT    wOutput;
  1599.     UINT    wReserved1;
  1600.     UINT    wFormatTag;
  1601.     UINT    wReserved2;
  1602.     UINT    nChannels;
  1603.     UINT    wReserved3;
  1604.     DWORD   nSamplesPerSec;
  1605.     DWORD   nAvgBytesPerSec;
  1606.     UINT    nBlockAlign;
  1607.     UINT    wReserved4;
  1608.     UINT    wBitsPerSample;
  1609.     UINT    wReserved5;
  1610. } MCI_WAVE_SET_PARMS;
  1611. typedef MCI_WAVE_SET_PARMS FAR * LPMCI_WAVE_SET_PARMS;
  1612.  
  1613.  
  1614. /* MCI extensions for MIDI sequencer devices */
  1615.  
  1616. /* flags for the dwReturn field of MCI_STATUS_PARMS parameter block */
  1617. /* MCI_STATUS command, (dwItem == MCI_SEQ_STATUS_DIVTYPE) */
  1618. #define     MCI_SEQ_DIV_PPQN            (0 + MCI_SEQ_OFFSET)
  1619. #define     MCI_SEQ_DIV_SMPTE_24        (1 + MCI_SEQ_OFFSET)
  1620. #define     MCI_SEQ_DIV_SMPTE_25        (2 + MCI_SEQ_OFFSET)
  1621. #define     MCI_SEQ_DIV_SMPTE_30DROP    (3 + MCI_SEQ_OFFSET)
  1622. #define     MCI_SEQ_DIV_SMPTE_30        (4 + MCI_SEQ_OFFSET)
  1623.  
  1624. /* flags for the dwMaster field of MCI_SEQ_SET_PARMS parameter block */
  1625. /* MCI_SET command, (dwFlags == MCI_SEQ_SET_MASTER) */
  1626. #define     MCI_SEQ_FORMAT_SONGPTR      0x4001
  1627. #define     MCI_SEQ_FILE                0x4002
  1628. #define     MCI_SEQ_MIDI                0x4003
  1629. #define     MCI_SEQ_SMPTE               0x4004
  1630. #define     MCI_SEQ_NONE                65533
  1631.  
  1632. /* flags for the dwItem field of MCI_STATUS_PARMS parameter block */
  1633. #define MCI_SEQ_STATUS_TEMPO            0x00004002L
  1634. #define MCI_SEQ_STATUS_PORT             0x00004003L
  1635. #define MCI_SEQ_STATUS_SLAVE            0x00004007L
  1636. #define MCI_SEQ_STATUS_MASTER           0x00004008L
  1637. #define MCI_SEQ_STATUS_OFFSET           0x00004009L
  1638. #define MCI_SEQ_STATUS_DIVTYPE          0x0000400AL
  1639.  
  1640. /* flags for the dwFlags parameter of MCI_SET command message */
  1641. #define MCI_SEQ_SET_TEMPO               0x00010000L
  1642. #define MCI_SEQ_SET_PORT                0x00020000L
  1643. #define MCI_SEQ_SET_SLAVE               0x00040000L
  1644. #define MCI_SEQ_SET_MASTER              0x00080000L
  1645. #define MCI_SEQ_SET_OFFSET              0x01000000L
  1646.  
  1647. /* parameter block for MCI_SET command message */
  1648. typedef struct tagMCI_SEQ_SET_PARMS {
  1649.     DWORD   dwCallback;
  1650.     DWORD   dwTimeFormat;
  1651.     DWORD   dwAudio;
  1652.     DWORD   dwTempo;
  1653.     DWORD   dwPort;
  1654.     DWORD   dwSlave;
  1655.     DWORD   dwMaster;
  1656.     DWORD   dwOffset;
  1657. } MCI_SEQ_SET_PARMS;
  1658. typedef MCI_SEQ_SET_PARMS FAR * LPMCI_SEQ_SET_PARMS;
  1659.  
  1660.  
  1661. /* MCI extensions for animation devices */
  1662.  
  1663. /* flags for dwFlags parameter of MCI_OPEN command message */
  1664. #define MCI_ANIM_OPEN_WS                0x00010000L
  1665. #define MCI_ANIM_OPEN_PARENT            0x00020000L
  1666. #define MCI_ANIM_OPEN_NOSTATIC          0x00040000L
  1667.  
  1668. /* flags for dwFlags parameter of MCI_PLAY command message */
  1669. #define MCI_ANIM_PLAY_SPEED             0x00010000L
  1670. #define MCI_ANIM_PLAY_REVERSE           0x00020000L
  1671. #define MCI_ANIM_PLAY_FAST              0x00040000L
  1672. #define MCI_ANIM_PLAY_SLOW              0x00080000L
  1673. #define MCI_ANIM_PLAY_SCAN              0x00100000L
  1674.  
  1675. /* flags for dwFlags parameter of MCI_STEP command message */
  1676. #define MCI_ANIM_STEP_REVERSE           0x00010000L
  1677. #define MCI_ANIM_STEP_FRAMES            0x00020000L
  1678.  
  1679. /* flags for dwItem field of MCI_STATUS_PARMS parameter block */
  1680. #define MCI_ANIM_STATUS_SPEED           0x00004001L
  1681. #define MCI_ANIM_STATUS_FORWARD         0x00004002L
  1682. #define MCI_ANIM_STATUS_HWND            0x00004003L
  1683. #define MCI_ANIM_STATUS_HPAL            0x00004004L
  1684. #define MCI_ANIM_STATUS_STRETCH         0x00004005L
  1685.  
  1686. /* flags for the dwFlags parameter of MCI_INFO command message */
  1687. #define MCI_ANIM_INFO_TEXT              0x00010000L
  1688.  
  1689. /* flags for dwItem field of MCI_GETDEVCAPS_PARMS parameter block */
  1690. #define MCI_ANIM_GETDEVCAPS_CAN_REVERSE 0x00004001L
  1691. #define MCI_ANIM_GETDEVCAPS_FAST_RATE   0x00004002L
  1692. #define MCI_ANIM_GETDEVCAPS_SLOW_RATE   0x00004003L
  1693. #define MCI_ANIM_GETDEVCAPS_NORMAL_RATE 0x00004004L
  1694. #define MCI_ANIM_GETDEVCAPS_PALETTES    0x00004006L
  1695. #define MCI_ANIM_GETDEVCAPS_CAN_STRETCH 0x00004007L
  1696. #define MCI_ANIM_GETDEVCAPS_MAX_WINDOWS 0x00004008L
  1697.  
  1698. /* flags for the MCI_REALIZE command message */
  1699. #define MCI_ANIM_REALIZE_NORM           0x00010000L
  1700. #define MCI_ANIM_REALIZE_BKGD           0x00020000L
  1701.  
  1702. /* flags for dwFlags parameter of MCI_WINDOW command message */
  1703. #define MCI_ANIM_WINDOW_HWND            0x00010000L
  1704. #define MCI_ANIM_WINDOW_STATE           0x00040000L
  1705. #define MCI_ANIM_WINDOW_TEXT            0x00080000L
  1706. #define MCI_ANIM_WINDOW_ENABLE_STRETCH  0x00100000L
  1707. #define MCI_ANIM_WINDOW_DISABLE_STRETCH 0x00200000L
  1708.  
  1709. /* flags for hWnd field of MCI_ANIM_WINDOW_PARMS parameter block */
  1710. /* MCI_WINDOW command message, (dwFlags == MCI_ANIM_WINDOW_HWND) */
  1711. #define MCI_ANIM_WINDOW_DEFAULT         0x00000000L
  1712.  
  1713. /* flags for dwFlags parameter of MCI_PUT command message */
  1714. #define MCI_ANIM_RECT                   0x00010000L
  1715. #define MCI_ANIM_PUT_SOURCE             0x00020000L
  1716. #define MCI_ANIM_PUT_DESTINATION        0x00040000L
  1717.  
  1718. /* flags for dwFlags parameter of MCI_WHERE command message */
  1719. #define MCI_ANIM_WHERE_SOURCE           0x00020000L
  1720. #define MCI_ANIM_WHERE_DESTINATION      0x00040000L
  1721.  
  1722. /* flags for dwFlags parameter of MCI_UPDATE command message */
  1723. #define MCI_ANIM_UPDATE_HDC             0x00020000L
  1724.  
  1725. /* parameter block for MCI_OPEN command message */
  1726. typedef struct tagMCI_ANIM_OPEN_PARMS {
  1727.     DWORD   dwCallback;
  1728.     UINT    wDeviceID;
  1729.     UINT    wReserved0;
  1730.     LPCSTR  lpstrDeviceType;
  1731.     LPCSTR  lpstrElementName;
  1732.     LPCSTR  lpstrAlias;
  1733.     DWORD   dwStyle;
  1734.     HWND    hWndParent;
  1735.     UINT    wReserved1;
  1736. } MCI_ANIM_OPEN_PARMS;
  1737. typedef MCI_ANIM_OPEN_PARMS FAR *LPMCI_ANIM_OPEN_PARMS;
  1738.  
  1739. /* parameter block for MCI_PLAY command message */
  1740. typedef struct tagMCI_ANIM_PLAY_PARMS {
  1741.     DWORD   dwCallback;
  1742.     DWORD   dwFrom;
  1743.     DWORD   dwTo;
  1744.     DWORD   dwSpeed;
  1745. } MCI_ANIM_PLAY_PARMS;
  1746. typedef MCI_ANIM_PLAY_PARMS FAR *LPMCI_ANIM_PLAY_PARMS;
  1747.  
  1748. /* parameter block for MCI_STEP command message */
  1749. typedef struct tagMCI_ANIM_STEP_PARMS {
  1750.     DWORD   dwCallback;
  1751.     DWORD   dwFrames;
  1752. } MCI_ANIM_STEP_PARMS;
  1753. typedef MCI_ANIM_STEP_PARMS FAR *LPMCI_ANIM_STEP_PARMS;
  1754.  
  1755. /* parameter block for MCI_WINDOW command message */
  1756. typedef struct tagMCI_ANIM_WINDOW_PARMS {
  1757.     DWORD   dwCallback;
  1758.     HWND    hWnd;
  1759.     UINT    wReserved1;
  1760.     UINT    nCmdShow;
  1761.     UINT    wReserved2;
  1762.     LPCSTR  lpstrText;
  1763. } MCI_ANIM_WINDOW_PARMS;
  1764. typedef MCI_ANIM_WINDOW_PARMS FAR * LPMCI_ANIM_WINDOW_PARMS;
  1765.  
  1766. /* parameter block for MCI_PUT, MCI_UPDATE, MCI_WHERE command messages */
  1767. typedef struct tagMCI_ANIM_RECT_PARMS {
  1768.     DWORD   dwCallback;
  1769. #ifdef MCI_USE_OFFEXT
  1770.     POINT   ptOffset;
  1771.     POINT   ptExtent;
  1772. #else   /* ifdef MCI_USE_OFFEXT */
  1773.     RECT    rc;
  1774. #endif  /* ifdef MCI_USE_OFFEXT */
  1775. } MCI_ANIM_RECT_PARMS;
  1776. typedef MCI_ANIM_RECT_PARMS FAR * LPMCI_ANIM_RECT_PARMS;
  1777.  
  1778. /* parameter block for MCI_UPDATE PARMS */
  1779. typedef struct tagMCI_ANIM_UPDATE_PARMS {
  1780.     DWORD   dwCallback;
  1781.     RECT    rc;
  1782.     HDC     hDC;
  1783. } MCI_ANIM_UPDATE_PARMS;
  1784. typedef MCI_ANIM_UPDATE_PARMS FAR * LPMCI_ANIM_UPDATE_PARMS;
  1785.  
  1786.  
  1787. /* MCI extensions for video overlay devices */
  1788.  
  1789. /* flags for dwFlags parameter of MCI_OPEN command message */
  1790. #define MCI_OVLY_OPEN_WS                0x00010000L
  1791. #define MCI_OVLY_OPEN_PARENT            0x00020000L
  1792.  
  1793. /* flags for dwFlags parameter of MCI_STATUS command message */
  1794. #define MCI_OVLY_STATUS_HWND            0x00004001L
  1795. #define MCI_OVLY_STATUS_STRETCH         0x00004002L
  1796.  
  1797. /* flags for dwFlags parameter of MCI_INFO command message */
  1798. #define MCI_OVLY_INFO_TEXT              0x00010000L
  1799.  
  1800. /* flags for dwItem field of MCI_GETDEVCAPS_PARMS parameter block */
  1801. #define MCI_OVLY_GETDEVCAPS_CAN_STRETCH 0x00004001L
  1802. #define MCI_OVLY_GETDEVCAPS_CAN_FREEZE  0x00004002L
  1803. #define MCI_OVLY_GETDEVCAPS_MAX_WINDOWS 0x00004003L
  1804.  
  1805. /* flags for dwFlags parameter of MCI_WINDOW command message */
  1806. #define MCI_OVLY_WINDOW_HWND            0x00010000L
  1807. #define MCI_OVLY_WINDOW_STATE           0x00040000L
  1808. #define MCI_OVLY_WINDOW_TEXT            0x00080000L
  1809. #define MCI_OVLY_WINDOW_ENABLE_STRETCH  0x00100000L
  1810. #define MCI_OVLY_WINDOW_DISABLE_STRETCH 0x00200000L
  1811.  
  1812. /* flags for hWnd parameter of MCI_OVLY_WINDOW_PARMS parameter block */
  1813. #define MCI_OVLY_WINDOW_DEFAULT         0x00000000L
  1814.  
  1815. /* flags for dwFlags parameter of MCI_PUT command message */
  1816. #define MCI_OVLY_RECT                   0x00010000L
  1817. #define MCI_OVLY_PUT_SOURCE             0x00020000L
  1818. #define MCI_OVLY_PUT_DESTINATION        0x00040000L
  1819. #define MCI_OVLY_PUT_FRAME              0x00080000L
  1820. #define MCI_OVLY_PUT_VIDEO              0x00100000L
  1821.  
  1822. /* flags for dwFlags parameter of MCI_WHERE command message */
  1823. #define MCI_OVLY_WHERE_SOURCE           0x00020000L
  1824. #define MCI_OVLY_WHERE_DESTINATION      0x00040000L
  1825. #define MCI_OVLY_WHERE_FRAME            0x00080000L
  1826. #define MCI_OVLY_WHERE_VIDEO            0x00100000L
  1827.  
  1828. /* parameter block for MCI_OPEN command message */
  1829. typedef struct tagMCI_OVLY_OPEN_PARMS {
  1830.     DWORD   dwCallback;
  1831.     UINT    wDeviceID;
  1832.     UINT    wReserved0;
  1833.     LPCSTR  lpstrDeviceType;
  1834.     LPCSTR  lpstrElementName;
  1835.     LPCSTR  lpstrAlias;
  1836.     DWORD   dwStyle;
  1837.     HWND    hWndParent;
  1838.     UINT    wReserved1;
  1839.  } MCI_OVLY_OPEN_PARMS;
  1840. typedef MCI_OVLY_OPEN_PARMS FAR *LPMCI_OVLY_OPEN_PARMS;
  1841.  
  1842. /* parameter block for MCI_WINDOW command message */
  1843. typedef struct tagMCI_OVLY_WINDOW_PARMS {
  1844.     DWORD   dwCallback;
  1845.     HWND    hWnd;
  1846.     UINT    wReserved1;
  1847.     UINT    nCmdShow;
  1848.     UINT    wReserved2;
  1849.     LPCSTR  lpstrText;
  1850. } MCI_OVLY_WINDOW_PARMS;
  1851. typedef MCI_OVLY_WINDOW_PARMS FAR * LPMCI_OVLY_WINDOW_PARMS;
  1852.  
  1853. /* parameter block for MCI_PUT, MCI_UPDATE, and MCI_WHERE command messages */
  1854. typedef struct tagMCI_OVLY_RECT_PARMS {
  1855.     DWORD   dwCallback;
  1856. #ifdef MCI_USE_OFFEXT
  1857.     POINT   ptOffset;
  1858.     POINT   ptExtent;
  1859. #else   /* ifdef MCI_USE_OFFEXT */
  1860.     RECT    rc;
  1861. #endif  /* ifdef MCI_USE_OFFEXT */
  1862. } MCI_OVLY_RECT_PARMS;
  1863. typedef MCI_OVLY_RECT_PARMS FAR * LPMCI_OVLY_RECT_PARMS;
  1864.  
  1865. /* parameter block for MCI_SAVE command message */
  1866. typedef struct tagMCI_OVLY_SAVE_PARMS {
  1867.     DWORD   dwCallback;
  1868.     LPCSTR  lpfilename;
  1869.     RECT    rc;
  1870. } MCI_OVLY_SAVE_PARMS;
  1871. typedef MCI_OVLY_SAVE_PARMS FAR * LPMCI_OVLY_SAVE_PARMS;
  1872.  
  1873. /* parameter block for MCI_LOAD command message */
  1874. typedef struct tagMCI_OVLY_LOAD_PARMS {
  1875.     DWORD   dwCallback;
  1876.     LPCSTR  lpfilename;
  1877.     RECT    rc;
  1878. } MCI_OVLY_LOAD_PARMS;
  1879. typedef MCI_OVLY_LOAD_PARMS FAR * LPMCI_OVLY_LOAD_PARMS;
  1880.  
  1881. #endif  /* ifndef MMNOMCI */
  1882.  
  1883. /****************************************************************************
  1884.  
  1885.                         DISPLAY Driver extensions
  1886.  
  1887. ****************************************************************************/
  1888.  
  1889. #ifndef C1_TRANSPARENT
  1890.     #define CAPS1           94          /* other caps */
  1891.     #define C1_TRANSPARENT  0x0001      /* new raster cap */
  1892.     #define NEWTRANSPARENT  3           /* use with SetBkMode() */
  1893.  
  1894.     #define QUERYROPSUPPORT 40          /* use to determine ROP support */
  1895. #endif  /* ifndef C1_TRANSPARENT */
  1896.  
  1897. /****************************************************************************
  1898.  
  1899.                         DIB Driver extensions
  1900.  
  1901. ****************************************************************************/
  1902.  
  1903. #define SELECTDIB       41                      /* DIB.DRV select dib escape */
  1904. #define DIBINDEX(n)     MAKELONG((n),0x10FF)
  1905.  
  1906.  
  1907. /****************************************************************************
  1908.  
  1909.                         ScreenSaver support
  1910.  
  1911.     The current application will receive a syscommand of SC_SCREENSAVE just
  1912.     before the screen saver is invoked.  If the app wishes to prevent a
  1913.     screen save, return non-zero value, otherwise call DefWindowProc().
  1914.  
  1915. ****************************************************************************/
  1916.  
  1917. #ifndef SC_SCREENSAVE
  1918.  
  1919.     #define SC_SCREENSAVE   0xF140
  1920.  
  1921. #endif  /* ifndef SC_SCREENSAVE */
  1922.  
  1923.  
  1924. #else    /* defined __FLAT__ */
  1925.  
  1926. #ifndef __WINDEF_H
  1927. #include "windef.h"
  1928. #endif
  1929.  
  1930. #ifndef RC_INVOKED
  1931. #pragma option -a-      /* Assume byte packing throughout */
  1932. #endif
  1933.  
  1934. /* general constants */
  1935. #define MAXPNAMELEN      32     // max product name length (including NULL)
  1936. #define MAXERRORLENGTH   128    // max error text length (including final NULL)
  1937.  
  1938. /* general data types */
  1939. typedef UINT    MMVERSION;      // major (high byte), minor (low byte)
  1940. typedef UINT    MMRESULT;       // error return code, 0 means no error
  1941.                                 // call as if(err=xxxx(...)) Error(err); else
  1942. typedef DWORD   MCIERROR;       // error return code, 0 means no error
  1943.  
  1944. /***************************************************************************
  1945. *   Multimedia time
  1946. ***************************************************************************/
  1947. typedef struct tagMMTIME {
  1948.     UINT    wType;              // the contents of the union
  1949.     union {
  1950.         DWORD ms;               // milliseconds
  1951.         DWORD sample;           // samples
  1952.         DWORD cb;               // byte count
  1953.         struct {                // SMPTE
  1954.             BYTE hour;          // hours
  1955.             BYTE min;           // minutes  (min is also a macro, so what?)
  1956.             BYTE sec;           // seconds
  1957.             BYTE frame;         // frames
  1958.             BYTE fps;           // frames per second (24, 25, 29(30 drop) or 30)
  1959.             BYTE dummy;
  1960.             } smpte;
  1961.         struct {                // MIDI
  1962.             DWORD songptrpos;   // song pointer position
  1963.             } midi;
  1964.         } u;
  1965.     } MMTIME;
  1966. typedef MMTIME       *PMMTIME;
  1967. typedef MMTIME      *NPMMTIME;
  1968. typedef MMTIME      *LPMMTIME;
  1969.  
  1970. // values for wType field in MMTIME struct
  1971. #define TIME_MS         0x0001  // time in Milliseconds
  1972. #define TIME_SAMPLES    0x0002  // number of wave samples
  1973. #define TIME_BYTES      0x0004  // current byte offset
  1974. #define TIME_SMPTE      0x0008  // SMPTE time
  1975. #define TIME_MIDI       0x0010  // MIDI time
  1976.  
  1977. /****************************************************************************
  1978. *                   Multimedia Window Messages
  1979. ****************************************************************************/
  1980.  
  1981. #define MM_JOY1MOVE         0x3A0           // joystick
  1982. #define MM_JOY2MOVE         0x3A1
  1983. #define MM_JOY1ZMOVE        0x3A2
  1984. #define MM_JOY2ZMOVE        0x3A3
  1985. #define MM_JOY1BUTTONDOWN   0x3B5
  1986. #define MM_JOY2BUTTONDOWN   0x3B6
  1987. #define MM_JOY1BUTTONUP     0x3B7
  1988. #define MM_JOY2BUTTONUP     0x3B8
  1989.  
  1990. #define MM_MCINOTIFY        0x3B9           // MCI
  1991. #define MM_MCISYSTEM_STRING 0x3CA
  1992.  
  1993. #define MM_WOM_OPEN         0x3BB           // waveform output
  1994. #define MM_WOM_CLOSE        0x3BC
  1995. #define MM_WOM_DONE         0x3BD
  1996.  
  1997. #define MM_WIM_OPEN         0x3BE           // waveform input
  1998. #define MM_WIM_CLOSE        0x3BF
  1999. #define MM_WIM_DATA         0x3C0
  2000.  
  2001. #define MM_MIM_OPEN         0x3C1           // MIDI input
  2002. #define MM_MIM_CLOSE        0x3C2
  2003. #define MM_MIM_DATA         0x3C3
  2004. #define MM_MIM_LONGDATA     0x3C4
  2005. #define MM_MIM_ERROR        0x3C5
  2006. #define MM_MIM_LONGERROR    0x3C6
  2007.  
  2008. #define MM_MOM_OPEN         0x3C7           // MIDI output
  2009. #define MM_MOM_CLOSE        0x3C8
  2010. #define MM_MOM_DONE         0x3C9
  2011.  
  2012.  
  2013. /****************************************************************************
  2014.  
  2015.                 String resource number bases (internal use)
  2016.  
  2017. ****************************************************************************/
  2018.  
  2019. #define MMSYSERR_BASE          0
  2020. #define WAVERR_BASE            32
  2021. #define MIDIERR_BASE           64
  2022. #define TIMERR_BASE            96   // was 128, changed to match Win 31 Sonic
  2023. #define JOYERR_BASE            160
  2024. #define MCIERR_BASE            256
  2025.  
  2026. #define MCI_STRING_OFFSET      512  // if this number is changed you MUST
  2027.                                     // alter the MCI_DEVTYPE_... list below
  2028. #define MCI_VD_OFFSET          1024
  2029. #define MCI_CD_OFFSET          1088
  2030. #define MCI_WAVE_OFFSET        1152
  2031. #define MCI_SEQ_OFFSET         1216
  2032.  
  2033. /****************************************************************************
  2034.  
  2035.                         General error return values
  2036.  
  2037. ****************************************************************************/
  2038.  
  2039. #define MMSYSERR_NOERROR      0                    // no error
  2040. #define MMSYSERR_ERROR        (MMSYSERR_BASE + 1)  // unspecified error
  2041. #define MMSYSERR_BADDEVICEID  (MMSYSERR_BASE + 2)  // device ID out of range
  2042. #define MMSYSERR_NOTENABLED   (MMSYSERR_BASE + 3)  // driver failed enable
  2043. #define MMSYSERR_ALLOCATED    (MMSYSERR_BASE + 4)  // device already allocated
  2044. #define MMSYSERR_INVALHANDLE  (MMSYSERR_BASE + 5)  // device handle is invalid
  2045. #define MMSYSERR_NODRIVER     (MMSYSERR_BASE + 6)  // no device driver present
  2046. #define MMSYSERR_NOMEM        (MMSYSERR_BASE + 7)  // memory allocation error
  2047. #define MMSYSERR_NOTSUPPORTED (MMSYSERR_BASE + 8)  // function isn't supported
  2048. #define MMSYSERR_BADERRNUM    (MMSYSERR_BASE + 9)  // error value out of range
  2049. #define MMSYSERR_INVALFLAG    (MMSYSERR_BASE + 10) // invalid flag passed
  2050. #define MMSYSERR_INVALPARAM   (MMSYSERR_BASE + 11) // invalid parameter passed
  2051. #define MMSYSERR_HANDLEBUSY   (MMSYSERR_BASE + 12) // handle being used
  2052.                                                    // simultaneously on another
  2053.                                                    // thread (eg callback)
  2054. #define MMSYSERR_INVALIDALIAS (MMSYSERR_BASE + 13) // "Specified alias not found in WIN.INI
  2055. #define MMSYSERR_LASTERROR    (MMSYSERR_BASE + 13) // last error in range
  2056.  
  2057.  
  2058. #ifndef MMNODRV
  2059. /****************************************************************************
  2060.  
  2061.                         Installable driver support
  2062.  
  2063. ****************************************************************************/
  2064.  
  2065. typedef HANDLE HDRVR;
  2066.  
  2067. #ifndef DRV_LOAD
  2068.  
  2069. /* Driver messages */
  2070. #define DRV_LOAD            0x0001
  2071. #define DRV_ENABLE          0x0002
  2072. #define DRV_OPEN            0x0003
  2073. #define DRV_CLOSE           0x0004
  2074. #define DRV_DISABLE         0x0005
  2075. #define DRV_FREE            0x0006
  2076. #define DRV_CONFIGURE       0x0007
  2077. #define DRV_QUERYCONFIGURE  0x0008
  2078. #define DRV_INSTALL         0x0009
  2079. #define DRV_REMOVE          0x000A
  2080. #define DRV_EXITSESSION     0x000B
  2081. #define DRV_POWER           0x000F
  2082. #define DRV_RESERVED        0x0800
  2083. #define DRV_USER            0x4000
  2084.  
  2085. /* LPARAM of DRV_CONFIGURE message */
  2086. typedef struct tagDRVCONFIGINFO {
  2087.     DWORD   dwDCISize;
  2088.     LPCWSTR   lpszDCISectionName;
  2089.     LPCWSTR   lpszDCIAliasName;
  2090. } DRVCONFIGINFO;
  2091. typedef DRVCONFIGINFO        *PDRVCONFIGINFO;
  2092. typedef DRVCONFIGINFO       *NPDRVCONFIGINFO;
  2093. typedef DRVCONFIGINFO       *LPDRVCONFIGINFO;
  2094.  
  2095. /* Supported return values for DRV_CONFIGURE message */
  2096. #define DRVCNF_CANCEL       0x0000
  2097. #define DRVCNF_OK           0x0001
  2098. #define DRVCNF_RESTART      0x0002
  2099.  
  2100. // return values from DriverProc() function
  2101. #define DRV_CANCEL             DRVCNF_CANCEL
  2102. #define DRV_OK                 DRVCNF_OK
  2103. #define DRV_RESTART            DRVCNF_RESTART
  2104.  
  2105. // installable driver function prototypes
  2106. LRESULT APIENTRY CloseDriver(HDRVR hDriver, LONG lParam1, LONG lParam2);
  2107. HDRVR   APIENTRY OpenDriver( LPCWSTR szDriverName, LPCWSTR szSectionName,
  2108.                           LONG lParam2);
  2109. LRESULT APIENTRY SendDriverMessage( HDRVR hDriver, UINT message, LONG lParam1,
  2110.                                  LONG lParam2);
  2111. HMODULE APIENTRY DrvGetModuleHandle( HDRVR hDriver );
  2112. HMODULE APIENTRY GetDriverModuleHandle( HDRVR hDriver );
  2113.  
  2114. #define DRV_MCI_FIRST          DRV_RESERVED
  2115. #define DRV_MCI_LAST           (DRV_RESERVED + 0xFFF)
  2116.  
  2117. #endif
  2118. #endif  //ifndef MMNODRV
  2119.  
  2120.  
  2121. /****************************************************************************
  2122.  
  2123.                           Driver callback support
  2124.  
  2125. ****************************************************************************/
  2126.  
  2127. // flags used with waveOutOpen(), waveInOpen(), midiInOpen(), and
  2128. // midiOutOpen() to specify the type of the dwCallback parameter.
  2129. #define CALLBACK_TYPEMASK   0x00070000l    // callback type mask
  2130. #define CALLBACK_NULL       0x00000000l    // no callback
  2131. #define CALLBACK_WINDOW     0x00010000l    // dwCallback is a HWND
  2132. #define CALLBACK_TASK       0x00020000l    // dwCallback is a HTASK
  2133. #define CALLBACK_FUNCTION   0x00030000l    // dwCallback is a FARPROC
  2134.  
  2135. #ifndef MMNODRV  //ifndef MMNODRV
  2136.  
  2137. // driver callback prototypes
  2138. typedef void DRVCALLBACK
  2139.                     (HDRVR h, UINT msg, DWORD dwUser, DWORD dw1, DWORD dw2);
  2140.  
  2141. typedef DRVCALLBACK     *PDRVCALLBACK;
  2142. typedef DRVCALLBACK     *LPDRVCALLBACK;
  2143.  
  2144. #endif  //ifndef MMNODRV
  2145.  
  2146. /****************************************************************************
  2147.  
  2148.                          Manufacturer and product IDs
  2149.  
  2150.     Used with wMid and wPid fields in WAVEOUTCAPS, WAVEINCAPS,
  2151.     MIDIOUTCAPS, MIDIINCAPS, AUXCAPS, JOYCAPS structures.
  2152.  
  2153. ****************************************************************************/
  2154.  
  2155. // manufacturer IDs
  2156. #define MM_MICROSOFT            1       // Microsoft Corp.
  2157.  
  2158. // product IDs
  2159. #define MM_MIDI_MAPPER          1       // MIDI Mapper
  2160. #define MM_WAVE_MAPPER          2       // Wave Mapper
  2161.  
  2162. #define MM_SNDBLST_MIDIOUT      3       // Sound Blaster MIDI output port
  2163. #define MM_SNDBLST_MIDIIN       4       // Sound Blaster MIDI input port
  2164. #define MM_SNDBLST_SYNTH        5       // Sound Blaster internal synthesizer
  2165. #define MM_SNDBLST_WAVEOUT      6       // Sound Blaster waveform output
  2166. #define MM_SNDBLST_WAVEIN       7       // Sound Blaster waveform input
  2167.  
  2168. #define MM_ADLIB                9       // Ad Lib-compatible synthesizer
  2169.  
  2170. #define MM_MPU401_MIDIOUT       10      // MPU401-compatible MIDI output port
  2171. #define MM_MPU401_MIDIIN        11      // MPU401-compatible MIDI input port
  2172.  
  2173. #define MM_PC_JOYSTICK          12      // Joystick adapter
  2174.  
  2175.  
  2176. /****************************************************************************
  2177. *                    General MMSYSTEM support
  2178. ****************************************************************************/
  2179.  
  2180. UINT APIENTRY mmsystemGetVersion(VOID);
  2181.  
  2182. // We should point people to using OutputDebugString
  2183. #define OutputDebugStr OutputDebugString
  2184. #ifndef OutputDebugStr
  2185.     VOID APIENTRY OutputDebugStr(LPCSTR);
  2186. #endif
  2187.  
  2188.  
  2189. /****************************************************************************
  2190. *                           Sound support
  2191. *  Note:  It may be fairly obvious that there are two very similar looking
  2192. *  API calls to provide high level sound support.  The major difference is
  2193. *  that PlaySound takes a module handle.  The position is to be reviewed.
  2194. ****************************************************************************/
  2195.  
  2196. BOOL APIENTRY sndPlaySoundA( LPCSTR lpszSoundName, UINT uFlags );
  2197. BOOL APIENTRY sndPlaySoundW( LPCWSTR lpszSoundName, UINT uFlags );
  2198. #ifdef UNICODE
  2199. #define sndPlaySound  sndPlaySoundW
  2200. #else
  2201. #define sndPlaySound  sndPlaySoundA
  2202. #endif // !UNICODE
  2203.  
  2204. // flag values for uFlags parameter
  2205. /**** These are the Win3.1 values ***
  2206.  *  #define SND_SYNC            0x0000  // play synchronously (default)
  2207.  *  #define SND_ASYNC           0x0001  // play asynchronously
  2208.  *  #define SND_NODEFAULT       0x0002  // don't use default sound
  2209.  *  #define SND_MEMORY          0x0004  // lpszSoundName points to a memory file
  2210.  *  #define SND_LOOP            0x0008  // loop the sound until next sndPlaySound
  2211.  *  #define SND_NOSTOP          0x0010  // don't stop any currently playing sound
  2212.  * NT defines some additional flags.
  2213.  **************/
  2214.  
  2215. #define SND_SYNC       0x00000000   // play synchronously (default)
  2216. #define SND_ASYNC      0x00000001   // play asynchronously
  2217.  
  2218. #define SND_NODEFAULT  0x00000002   // silence not default, if sound not found
  2219.  
  2220. #define SND_MEMORY     0x00000004   // lpszSoundName points to a memory file
  2221. #define SND_ALIAS      0x00010000   // name is a WIN.INI [sounds] entry
  2222. #define SND_FILENAME   0x00020000   // name is a file name
  2223. #define SND_RESOURCE   0x00040004   // name is a resource name or atom
  2224. #define SND_ALIAS_ID   0x00110000   // name is a WIN.INI [sounds] entry identifier
  2225.  
  2226. #define SND_ALIAS_ID   0x00110000   // name is a WIN.INI [sounds] entry identifier
  2227. #define SND_ALIAS_START  0      // must be > 4096 to keep strings in same section of resource file
  2228.  
  2229. // sndAlias creates the alias identifier
  2230. #define sndAlias( ch0, ch1 ) \
  2231.                 ( SND_ALIAS_START + (DWORD)(BYTE)(ch0) | ( (DWORD)(BYTE)(ch1) << 8 ))
  2232.  
  2233. #define SND_ALIAS_SYSTEMASTERISK        sndAlias('S', '*')
  2234. #define SND_ALIAS_SYSTEMQUESTION        sndAlias('S', '?')
  2235. #define SND_ALIAS_SYSTEMHAND            sndAlias('S', 'H')
  2236. #define SND_ALIAS_SYSTEMEXIT            sndAlias('S', 'E')
  2237. #define SND_ALIAS_SYSTEMSTART           sndAlias('S', 'S')
  2238. #define SND_ALIAS_SYSTEMWELCOME         sndAlias('S', 'W')
  2239. #define SND_ALIAS_SYSTEMEXCLAMATION     sndAlias('S', '!')
  2240. #define SND_ALIAS_SYSTEMDEFAULT         sndAlias('S', 'D')
  2241.  
  2242. // 00000004 bit off means behaviour as 3.1 with SND_MEMORY not set
  2243. // ??? Needs better definition
  2244.  
  2245. #define SND_LOOP       0x00000008   // loop the sound until next sndPlaySound
  2246. #define SND_NOSTOP     0x00000010   // don't stop any currently playing sound
  2247. #define SND_VALID      0x0000001F  // valid flags          /* ;Internal */
  2248.  
  2249. #define SND_NOWAIT     0x00002000   // don't wait if the driver is busy
  2250.  
  2251. #define SND_VALIDFLAGS 0x0017201F   // Set of valid flag bits.  Anything outside
  2252.                                     // this range will raise an error
  2253. #define SND_RESERVED   0xFF000000   // In particular these flags are reserved
  2254.  
  2255. #define SND_TYPE_MASK  0x00170007
  2256.  
  2257. /****************************************************************************/
  2258.  
  2259. BOOL APIENTRY PlaySoundA( LPCSTR lpszName, HANDLE hModule, DWORD dwFlags );
  2260. BOOL APIENTRY PlaySoundW( LPCWSTR lpszName, HANDLE hModule, DWORD dwFlags );
  2261. #ifdef UNICODE
  2262. #define PlaySound  PlaySoundW
  2263. #else
  2264. #define PlaySound  PlaySoundA
  2265. #endif // !UNICODE
  2266.  
  2267. #ifndef MMNOWAVE
  2268. /****************************************************************************
  2269.  
  2270.                         Waveform audio support
  2271.  
  2272. ****************************************************************************/
  2273.  
  2274. // waveform audio error return values
  2275. #define WAVERR_BADFORMAT      (WAVERR_BASE + 0)    // unsupported wave format
  2276. #define WAVERR_STILLPLAYING   (WAVERR_BASE + 1)    // still something playing
  2277. #define WAVERR_UNPREPARED     (WAVERR_BASE + 2)    // header not prepared
  2278. #define WAVERR_SYNC           (WAVERR_BASE + 3)    // device is synchronous
  2279. #define WAVERR_LASTERROR      (WAVERR_BASE + 3)    // last error in range
  2280.  
  2281. // waveform audio data types
  2282. typedef HANDLE          HWAVE;
  2283. typedef HWAVE           HWAVEIN;
  2284. typedef HWAVE           HWAVEOUT;
  2285. typedef HWAVEIN         *LPHWAVEIN;
  2286. typedef HWAVEOUT        *LPHWAVEOUT;
  2287. typedef DRVCALLBACK     WAVECALLBACK;
  2288. typedef WAVECALLBACK    *LPWAVECALLBACK;
  2289.  
  2290. // wave callback messages
  2291. #define WOM_OPEN        MM_WOM_OPEN
  2292. #define WOM_CLOSE       MM_WOM_CLOSE
  2293. #define WOM_DONE        MM_WOM_DONE
  2294. #define WIM_OPEN        MM_WIM_OPEN
  2295. #define WIM_CLOSE       MM_WIM_CLOSE
  2296. #define WIM_DATA        MM_WIM_DATA
  2297.  
  2298. // device ID for wave device mapper
  2299. #define WAVE_MAPPER     ((DWORD)(-1))
  2300.  
  2301. // flags for dwFlags parameter in waveOutOpen() and waveInOpen()
  2302. #define  WAVE_FORMAT_QUERY     0x00000001
  2303. #define  WAVE_ALLOWSYNC        0x00000002
  2304. #define  WAVE_VALID            0x00000003       /* ;Internal */
  2305.  
  2306. // wave data block header
  2307. typedef struct wavehdr_tag {
  2308.     LPSTR                 lpData;          // pointer to locked data buffer
  2309.     DWORD                 dwBufferLength;  // length of data buffer
  2310.     DWORD                 dwBytesRecorded; // used for input only
  2311.     DWORD                 dwUser;          // for client's use
  2312.     DWORD                 dwFlags;         // assorted flags (see defines)
  2313.     DWORD                 dwLoops;         // loop control counter
  2314.     struct wavehdr_tag  * lpNext;          // reserved for driver
  2315.     DWORD                 reserved;        // reserved for driver
  2316. } WAVEHDR;
  2317. typedef WAVEHDR       *PWAVEHDR;
  2318. typedef WAVEHDR      *NPWAVEHDR;
  2319. typedef WAVEHDR      *LPWAVEHDR;
  2320.  
  2321. // flags for dwFlags field of WAVEHDR
  2322. #define WHDR_DONE       0x00000001  // done bit
  2323. #define WHDR_PREPARED   0x00000002  // set if this header has been prepared
  2324. #define WHDR_BEGINLOOP  0x00000004  // loop start block
  2325. #define WHDR_ENDLOOP    0x00000008  // loop end block
  2326. #define WHDR_INQUEUE    0x00000010  // reserved for driver
  2327. #define WHDR_VALID      0x0000001F  // valid flags      /* ;Internal */
  2328.  
  2329. // waveform output device capabilities structure
  2330. typedef struct tagWAVEOUTCAPSA {
  2331.     WORD    wMid;                   // manufacturer ID
  2332.     WORD    wPid;                   // product ID
  2333.     MMVERSION vDriverVersion;       // version of the driver
  2334.     CHAR    szPname[MAXPNAMELEN];   // product name (NULL terminated string)
  2335.     DWORD   dwFormats;              // formats supported
  2336.     WORD    wChannels;              // number of sources supported
  2337.     DWORD   dwSupport;              // functionality supported by driver
  2338. } WAVEOUTCAPSA;
  2339. // waveform output device capabilities structure
  2340. typedef struct tagWAVEOUTCAPSW {
  2341.     WORD    wMid;                   // manufacturer ID
  2342.     WORD    wPid;                   // product ID
  2343.     MMVERSION vDriverVersion;       // version of the driver
  2344.     WCHAR   szPname[MAXPNAMELEN];   // product name (NULL terminated string)
  2345.     DWORD   dwFormats;              // formats supported
  2346.     WORD    wChannels;              // number of sources supported
  2347.     DWORD   dwSupport;              // functionality supported by driver
  2348. } WAVEOUTCAPSW;
  2349. #ifdef UNICODE
  2350. typedef WAVEOUTCAPSW WAVEOUTCAPS;
  2351. #else
  2352. typedef WAVEOUTCAPSA WAVEOUTCAPS;
  2353. #endif // UNICODE
  2354.  
  2355. typedef WAVEOUTCAPSA     *PWAVEOUTCAPSA;
  2356. typedef WAVEOUTCAPSW     *PWAVEOUTCAPSW;
  2357. #ifdef UNICODE
  2358. typedef PWAVEOUTCAPSW PWAVEOUTCAPS;
  2359. #else
  2360. typedef PWAVEOUTCAPSA PWAVEOUTCAPS;
  2361. #endif // UNICODE
  2362. typedef WAVEOUTCAPSA     *NPWAVEOUTCAPSA;
  2363. typedef WAVEOUTCAPSW     *NPWAVEOUTCAPSW;
  2364. #ifdef UNICODE
  2365. typedef NPWAVEOUTCAPSW NPWAVEOUTCAPS;
  2366. #else
  2367. typedef NPWAVEOUTCAPSA NPWAVEOUTCAPS;
  2368. #endif // UNICODE
  2369. typedef WAVEOUTCAPSA     *LPWAVEOUTCAPSA;
  2370. typedef WAVEOUTCAPSW     *LPWAVEOUTCAPSW;
  2371. #ifdef UNICODE
  2372. typedef LPWAVEOUTCAPSW LPWAVEOUTCAPS;
  2373. #else
  2374. typedef LPWAVEOUTCAPSA LPWAVEOUTCAPS;
  2375. #endif // UNICODE
  2376.  
  2377. // flags for dwSupport field of WAVEOUTCAPS
  2378. #define WAVECAPS_PITCH        0x00000001  // supports pitch control
  2379. #define WAVECAPS_PLAYBACKRATE 0x00000002  // supports playback rate control
  2380. #define WAVECAPS_VOLUME       0x00000004  // supports volume control
  2381. #define WAVECAPS_LRVOLUME     0x00000008  // separate left-right volume control
  2382. #define WAVECAPS_SYNC         0x00000010
  2383.  
  2384. // waveform input device capabilities structure
  2385. typedef struct tagWAVEINCAPSA {
  2386.     WORD    wMid;                    // manufacturer ID
  2387.     WORD    wPid;                    // product ID
  2388.     MMVERSION vDriverVersion;        // version of the driver
  2389.     CHAR    szPname[MAXPNAMELEN];    // product name (NULL terminated string)
  2390.     DWORD   dwFormats;               // formats supported
  2391.     WORD    wChannels;               // number of channels supported
  2392. } WAVEINCAPSA;
  2393. // waveform input device capabilities structure
  2394. typedef struct tagWAVEINCAPSW {
  2395.     WORD    wMid;                    // manufacturer ID
  2396.     WORD    wPid;                    // product ID
  2397.     MMVERSION vDriverVersion;        // version of the driver
  2398.     WCHAR   szPname[MAXPNAMELEN];    // product name (NULL terminated string)
  2399.     DWORD   dwFormats;               // formats supported
  2400.     WORD    wChannels;               // number of channels supported
  2401. } WAVEINCAPSW;
  2402. #ifdef UNICODE
  2403. typedef WAVEINCAPSW WAVEINCAPS;
  2404. #else
  2405. typedef WAVEINCAPSA WAVEINCAPS;
  2406. #endif // UNICODE
  2407. typedef WAVEINCAPSA  *PWAVEINCAPSA;
  2408. typedef WAVEINCAPSW  *PWAVEINCAPSW;
  2409. #ifdef UNICODE
  2410. typedef PWAVEINCAPSW PWAVEINCAPS;
  2411. #else
  2412. typedef PWAVEINCAPSA PWAVEINCAPS;
  2413. #endif // UNICODE
  2414. typedef WAVEINCAPSA  *LPWAVEINCAPSA;
  2415. typedef WAVEINCAPSW  *LPWAVEINCAPSW;
  2416. #ifdef UNICODE
  2417. typedef LPWAVEINCAPSW LPWAVEINCAPS;
  2418. #else
  2419. typedef LPWAVEINCAPSA LPWAVEINCAPS;
  2420. #endif // UNICODE
  2421.  
  2422. // defines for dwFormat field of WAVEINCAPS and WAVEOUTCAPS
  2423. #define WAVE_INVALIDFORMAT     0x00000000       // invalid format
  2424. #define WAVE_FORMAT_1M08       0x00000001       // 11.025 kHz, Mono,   8-bit
  2425. #define WAVE_FORMAT_1S08       0x00000002       // 11.025 kHz, Stereo, 8-bit
  2426. #define WAVE_FORMAT_1M16       0x00000004       // 11.025 kHz, Mono,   16-bit
  2427. #define WAVE_FORMAT_1S16       0x00000008       // 11.025 kHz, Stereo, 16-bit
  2428. #define WAVE_FORMAT_2M08       0x00000010       // 22.05  kHz, Mono,   8-bit
  2429. #define WAVE_FORMAT_2S08       0x00000020       // 22.05  kHz, Stereo, 8-bit
  2430. #define WAVE_FORMAT_2M16       0x00000040       // 22.05  kHz, Mono,   16-bit
  2431. #define WAVE_FORMAT_2S16       0x00000080       // 22.05  kHz, Stereo, 16-bit
  2432. #define WAVE_FORMAT_4M08       0x00000100       // 44.1   kHz, Mono,   8-bit
  2433. #define WAVE_FORMAT_4S08       0x00000200       // 44.1   kHz, Stereo, 8-bit
  2434. #define WAVE_FORMAT_4M16       0x00000400       // 44.1   kHz, Mono,   16-bit
  2435. #define WAVE_FORMAT_4S16       0x00000800       // 44.1   kHz, Stereo, 16-bit
  2436.  
  2437. // flags for wFormatTag field of WAVEFORMAT
  2438. #define WAVE_FORMAT_PCM     1  // Needed in resource files so outside #ifndef RC_INVOKED
  2439.  
  2440. #ifndef RC_INVOKED             // RC gets upset by #pragma pack()
  2441.  
  2442. // general waveform format (information common to all formats)
  2443. // as read from a file.  See Multimedia file formats in Programmer Reference
  2444. #pragma pack(2)                // File format is not double word aligned
  2445. typedef struct {
  2446.     WORD    wFormatTag;        // format type
  2447.     WORD    nChannels;         // number of channels (i.e. mono, stereo, etc.)
  2448.     DWORD   nSamplesPerSec;    // sample rate
  2449.     DWORD   nAvgBytesPerSec;   // for buffer estimation
  2450.     WORD    nBlockAlign;       // block size of data
  2451. } WAVEFORMAT;
  2452. typedef WAVEFORMAT       *PWAVEFORMAT;
  2453. typedef WAVEFORMAT      *NPWAVEFORMAT;
  2454. typedef WAVEFORMAT      *LPWAVEFORMAT;
  2455. // NOTE:  The fields in the structure above are copied into
  2456. // the MCI_WAVE_SET_PARMS structure during execution
  2457.  
  2458. // specific waveform format for PCM data
  2459. typedef struct tagPCMWAVEFORMAT {
  2460.     WAVEFORMAT  wf;
  2461.     WORD        wBitsPerSample;        // corresponds to MCI_WAVE_SET_.... structure
  2462. } PCMWAVEFORMAT;
  2463. typedef PCMWAVEFORMAT       *PPCMWAVEFORMAT;
  2464. typedef PCMWAVEFORMAT      *NPPCMWAVEFORMAT;
  2465. typedef PCMWAVEFORMAT      *LPPCMWAVEFORMAT;
  2466.  
  2467. #pragma pack()                    // revert to command line packing
  2468.  
  2469. // waveform audio function prototypes
  2470. UINT APIENTRY waveOutGetNumDevs(VOID);
  2471.  
  2472. MMRESULT APIENTRY waveOutGetDevCapsA(UINT uDeviceID, LPWAVEOUTCAPSA lpCaps,
  2473.     UINT uSize);
  2474. MMRESULT APIENTRY waveOutGetDevCapsW(UINT uDeviceID, LPWAVEOUTCAPSW lpCaps,
  2475.     UINT uSize);
  2476. #ifdef UNICODE
  2477. #define waveOutGetDevCaps  waveOutGetDevCapsW
  2478. #else
  2479. #define waveOutGetDevCaps  waveOutGetDevCapsA
  2480. #endif // !UNICODE
  2481.  
  2482. MMRESULT APIENTRY waveOutGetVolume(UINT uDeviceID, LPDWORD lpdwVolume);
  2483. MMRESULT APIENTRY waveOutSetVolume(UINT uDeviceID, DWORD dwVolume);
  2484.  
  2485. MMRESULT APIENTRY waveOutGetErrorTextA(MMRESULT err, LPSTR lpText, UINT uSize);
  2486. MMRESULT APIENTRY waveOutGetErrorTextW(MMRESULT err, LPWSTR lpText, UINT uSize);
  2487. #ifdef UNICODE
  2488. #define waveOutGetErrorText  waveOutGetErrorTextW
  2489. #else
  2490. #define waveOutGetErrorText  waveOutGetErrorTextA
  2491. #endif // !UNICODE
  2492.  
  2493. MMRESULT APIENTRY waveOutOpen(LPHWAVEOUT lphWaveOut, UINT uDeviceID,
  2494.     LPWAVEFORMAT lpFormat, DWORD dwCallback, DWORD dwInstance, DWORD dwFlags);
  2495. MMRESULT APIENTRY waveOutClose(HWAVEOUT hWaveOut);
  2496. MMRESULT APIENTRY waveOutPrepareHeader(HWAVEOUT hWaveOut,
  2497.      LPWAVEHDR lpWaveOutHdr, UINT uSize);
  2498. MMRESULT APIENTRY waveOutUnprepareHeader(HWAVEOUT hWaveOut,
  2499.     LPWAVEHDR lpWaveOutHdr, UINT uSize);
  2500. MMRESULT APIENTRY waveOutWrite(HWAVEOUT hWaveOut, LPWAVEHDR lpWaveOutHdr,
  2501.     UINT uSize);
  2502. MMRESULT APIENTRY waveOutPause(HWAVEOUT hWaveOut);
  2503. MMRESULT APIENTRY waveOutRestart(HWAVEOUT hWaveOut);
  2504. MMRESULT APIENTRY waveOutReset(HWAVEOUT hWaveOut);
  2505. MMRESULT APIENTRY waveOutBreakLoop(HWAVEOUT hWaveOut);
  2506. MMRESULT APIENTRY waveOutGetPosition(HWAVEOUT hWaveOut, LPMMTIME lpInfo,
  2507.     UINT uSize);
  2508. MMRESULT APIENTRY waveOutGetPitch(HWAVEOUT hWaveOut, LPDWORD lpdwPitch);
  2509. MMRESULT APIENTRY waveOutSetPitch(HWAVEOUT hWaveOut, DWORD dwPitch);
  2510. MMRESULT APIENTRY waveOutGetPlaybackRate(HWAVEOUT hWaveOut, LPDWORD lpdwRate);
  2511. MMRESULT APIENTRY waveOutSetPlaybackRate(HWAVEOUT hWaveOut, DWORD dwRate);
  2512. MMRESULT APIENTRY waveOutGetID(HWAVEOUT hWaveOut, PUINT lpuDeviceID);
  2513. MMRESULT APIENTRY waveOutMessage(HWAVEOUT hWaveOut, UINT msg, DWORD dw1, DWORD dw2);
  2514. UINT APIENTRY waveInGetNumDevs(VOID);
  2515.  
  2516. MMRESULT APIENTRY waveInGetDevCapsA(UINT uDeviceID, LPWAVEINCAPSA lpCaps,
  2517.     UINT uSize);
  2518. MMRESULT APIENTRY waveInGetDevCapsW(UINT uDeviceID, LPWAVEINCAPSW lpCaps,
  2519.     UINT uSize);
  2520. #ifdef UNICODE
  2521. #define waveInGetDevCaps  waveInGetDevCapsW
  2522. #else
  2523. #define waveInGetDevCaps  waveInGetDevCapsA
  2524. #endif // !UNICODE
  2525.  
  2526. MMRESULT APIENTRY waveInGetErrorTextA(MMRESULT err, LPSTR lpText, UINT uSize);
  2527. MMRESULT APIENTRY waveInGetErrorTextW(MMRESULT err, LPWSTR lpText, UINT uSize);
  2528. #ifdef UNICODE
  2529. #define waveInGetErrorText  waveInGetErrorTextW
  2530. #else
  2531. #define waveInGetErrorText  waveInGetErrorTextA
  2532. #endif // !UNICODE
  2533.  
  2534. MMRESULT APIENTRY waveInOpen(LPHWAVEIN lphWaveIn, UINT uDeviceID,
  2535.     LPWAVEFORMAT lpFormat, DWORD dwCallback, DWORD dwInstance, DWORD dwFlags);
  2536. MMRESULT APIENTRY waveInClose(HWAVEIN hWaveIn);
  2537. MMRESULT APIENTRY waveInPrepareHeader(HWAVEIN hWaveIn,
  2538.     LPWAVEHDR lpWaveInHdr, UINT uSize);
  2539. MMRESULT APIENTRY waveInUnprepareHeader(HWAVEIN hWaveIn,
  2540.     LPWAVEHDR lpWaveInHdr, UINT uSize);
  2541. MMRESULT APIENTRY waveInAddBuffer(HWAVEIN hWaveIn,
  2542.     LPWAVEHDR lpWaveInHdr, UINT uSize);
  2543. MMRESULT APIENTRY waveInStart(HWAVEIN hWaveIn);
  2544. MMRESULT APIENTRY waveInStop(HWAVEIN hWaveIn);
  2545. MMRESULT APIENTRY waveInReset(HWAVEIN hWaveIn);
  2546. MMRESULT APIENTRY waveInGetPosition(HWAVEIN hWaveIn, LPMMTIME lpInfo,
  2547.     UINT uSize);
  2548. MMRESULT APIENTRY waveInGetID(HWAVEIN hWaveIn, PUINT lpuDeviceID);
  2549. MMRESULT APIENTRY waveInMessage(HWAVEIN hWaveIn, UINT msg, DWORD dw1, DWORD dw2);
  2550.  
  2551. #endif /* RC_INVOKED */
  2552. #endif  //ifndef MMNOWAVE
  2553.  
  2554. #ifndef MMNOMIDI
  2555. /****************************************************************************
  2556.  
  2557.                             MIDI audio support
  2558.  
  2559. ****************************************************************************/
  2560.  
  2561. // MIDI error return values
  2562. #define MIDIERR_UNPREPARED    (MIDIERR_BASE + 0)   /* header not prepared */
  2563. #define MIDIERR_STILLPLAYING  (MIDIERR_BASE + 1)   /* still something playing */
  2564. #define MIDIERR_NOMAP         (MIDIERR_BASE + 2)   /* no current map */
  2565. #define MIDIERR_NOTREADY      (MIDIERR_BASE + 3)   /* hardware is still busy */
  2566. #define MIDIERR_NODEVICE      (MIDIERR_BASE + 4)   /* port no longer connected */
  2567. #define MIDIERR_INVALIDSETUP  (MIDIERR_BASE + 5)   /* invalid setup */
  2568. #define MIDIERR_LASTERROR     (MIDIERR_BASE + 5)   /* last error in range */
  2569.  
  2570. // MIDI audio data types
  2571. typedef HANDLE  HMIDI;
  2572. typedef HMIDI   HMIDIIN;
  2573. typedef HMIDI   HMIDIOUT;
  2574. typedef HMIDIIN *LPHMIDIIN;
  2575. typedef HMIDIOUT *LPHMIDIOUT;
  2576. typedef DRVCALLBACK MIDICALLBACK;
  2577. typedef MIDICALLBACK *LPMIDICALLBACK;
  2578. #define MIDIPATCHSIZE   128
  2579. typedef WORD PATCHARRAY[MIDIPATCHSIZE];
  2580. typedef WORD     *LPPATCHARRAY;
  2581. typedef WORD KEYARRAY[MIDIPATCHSIZE];
  2582. typedef WORD     *LPKEYARRAY;
  2583.  
  2584. // MIDI callback messages
  2585. #define MIM_OPEN        MM_MIM_OPEN
  2586. #define MIM_CLOSE       MM_MIM_CLOSE
  2587. #define MIM_DATA        MM_MIM_DATA
  2588. #define MIM_LONGDATA    MM_MIM_LONGDATA
  2589. #define MIM_ERROR       MM_MIM_ERROR
  2590. #define MIM_LONGERROR   MM_MIM_LONGERROR
  2591. #define MOM_OPEN        MM_MOM_OPEN
  2592. #define MOM_CLOSE       MM_MOM_CLOSE
  2593. #define MOM_DONE        MM_MOM_DONE
  2594.  
  2595. // device ID for MIDI mapper
  2596. #define MIDIMAPPER     (-1)       /* Cannot be cast to DWORD as RC complains */
  2597. #define MIDI_MAPPER    ((DWORD)(-1))
  2598.  
  2599. // flags for wFlags parm of midiOutCachePatches(), midiOutCacheDrumPatches()
  2600. #define MIDI_CACHE_ALL      1
  2601. #define MIDI_CACHE_BESTFIT  2
  2602. #define MIDI_CACHE_QUERY    3
  2603. #define MIDI_UNCACHE        4
  2604. #define MIDI_CACHE_VALID    (MIDI_CACHE_ALL | MIDI_CACHE_BESTFIT | MIDI_CACHE_QUERY | MIDI_UNCACHE) /* ;Internal */
  2605.  
  2606. // MIDI output device capabilities structure
  2607. typedef struct tagMIDIOUTCAPSA {
  2608.     WORD    wMid;                  // manufacturer ID
  2609.     WORD    wPid;                  // product ID
  2610.     MMVERSION vDriverVersion;      // version of the driver
  2611.     CHAR    szPname[MAXPNAMELEN];  // product name (NULL terminated string)
  2612.     WORD    wTechnology;           // type of device
  2613.     WORD    wVoices;               // # of voices (internal synth only)
  2614.     WORD    wNotes;                // max # of notes (internal synth only)
  2615.     WORD    wChannelMask;          // channels used (internal synth only)
  2616.     DWORD   dwSupport;             // functionality supported by driver
  2617. } MIDIOUTCAPSA;
  2618. // MIDI output device capabilities structure
  2619. typedef struct tagMIDIOUTCAPSW {
  2620.     WORD    wMid;                  // manufacturer ID
  2621.     WORD    wPid;                  // product ID
  2622.     MMVERSION vDriverVersion;      // version of the driver
  2623.     WCHAR   szPname[MAXPNAMELEN];  // product name (NULL terminated string)
  2624.     WORD    wTechnology;           // type of device
  2625.     WORD    wVoices;               // # of voices (internal synth only)
  2626.     WORD    wNotes;                // max # of notes (internal synth only)
  2627.     WORD    wChannelMask;          // channels used (internal synth only)
  2628.     DWORD   dwSupport;             // functionality supported by driver
  2629. } MIDIOUTCAPSW;
  2630. #ifdef UNICODE
  2631. typedef MIDIOUTCAPSW MIDIOUTCAPS;
  2632. #else
  2633. typedef MIDIOUTCAPSA MIDIOUTCAPS;
  2634. #endif // UNICODE
  2635. typedef MIDIOUTCAPSA    *PMIDIOUTCAPSA;
  2636. typedef MIDIOUTCAPSW    *PMIDIOUTCAPSW;
  2637. #ifdef UNICODE
  2638. typedef PMIDIOUTCAPSW PMIDIOUTCAPS;
  2639. #else
  2640. typedef PMIDIOUTCAPSA PMIDIOUTCAPS;
  2641. #endif // UNICODE
  2642. typedef MIDIOUTCAPSA    *NPMIDIOUTCAPSA;
  2643. typedef MIDIOUTCAPSW    *NPMIDIOUTCAPSW;
  2644. #ifdef UNICODE
  2645. typedef NPMIDIOUTCAPSW NPMIDIOUTCAPS;
  2646. #else
  2647. typedef NPMIDIOUTCAPSA NPMIDIOUTCAPS;
  2648. #endif // UNICODE
  2649. typedef MIDIOUTCAPSA    *LPMIDIOUTCAPSA;
  2650. typedef MIDIOUTCAPSW    *LPMIDIOUTCAPSW;
  2651. #ifdef UNICODE
  2652. typedef LPMIDIOUTCAPSW LPMIDIOUTCAPS;
  2653. #else
  2654. typedef LPMIDIOUTCAPSA LPMIDIOUTCAPS;
  2655. #endif // UNICODE
  2656.  
  2657. // flags for wTechnology field of MIDIOUTCAPS structure
  2658. #define MOD_MIDIPORT    1  // output port
  2659. #define MOD_SYNTH       2  // generic internal synth
  2660. #define MOD_SQSYNTH     3  // square wave internal synth
  2661. #define MOD_FMSYNTH     4  // FM internal synth
  2662. #define MOD_MAPPER      5  // MIDI mapper
  2663.  
  2664. // flags for dwSupport field of MIDIOUTCAPS
  2665. #define MIDICAPS_VOLUME     0x00000001  // supports volume control
  2666. #define MIDICAPS_LRVOLUME   0x00000002  // separate left-right volume control
  2667. #define MIDICAPS_CACHE      0x00000004
  2668.  
  2669. // MIDI input device capabilities structure
  2670. typedef struct tagMIDIINCAPSA {
  2671.     WORD        wMid;                   // manufacturer ID
  2672.     WORD        wPid;                   // product ID
  2673.     MMVERSION   vDriverVersion;         // version of the driver
  2674.     CHAR        szPname[MAXPNAMELEN];   // product name (NULL terminated string)
  2675. } MIDIINCAPSA;
  2676. // MIDI input device capabilities structure
  2677. typedef struct tagMIDIINCAPSW {
  2678.     WORD        wMid;                   // manufacturer ID
  2679.     WORD        wPid;                   // product ID
  2680.     MMVERSION   vDriverVersion;         // version of the driver
  2681.     WCHAR       szPname[MAXPNAMELEN];   // product name (NULL terminated string)
  2682. } MIDIINCAPSW;
  2683. #ifdef UNICODE
  2684. typedef MIDIINCAPSW MIDIINCAPS;
  2685. #else
  2686. typedef MIDIINCAPSA MIDIINCAPS;
  2687. #endif // UNICODE
  2688. typedef MIDIINCAPSA     *PMIDIINCAPSA;
  2689. typedef MIDIINCAPSW     *PMIDIINCAPSW;
  2690. #ifdef UNICODE
  2691. typedef PMIDIINCAPSW PMIDIINCAPS;
  2692. #else
  2693. typedef PMIDIINCAPSA PMIDIINCAPS;
  2694. #endif // UNICODE
  2695. typedef MIDIINCAPSA     *NPMIDIINCAPSA;
  2696. typedef MIDIINCAPSW     *NPMIDIINCAPSW;
  2697. #ifdef UNICODE
  2698. typedef NPMIDIINCAPSW NPMIDIINCAPS;
  2699. #else
  2700. typedef NPMIDIINCAPSA NPMIDIINCAPS;
  2701. #endif // UNICODE
  2702. typedef MIDIINCAPSA     *LPMIDIINCAPSA;
  2703. typedef MIDIINCAPSW     *LPMIDIINCAPSW;
  2704. #ifdef UNICODE
  2705. typedef LPMIDIINCAPSW LPMIDIINCAPS;
  2706. #else
  2707. typedef LPMIDIINCAPSA LPMIDIINCAPS;
  2708. #endif // UNICODE
  2709.  
  2710. // MIDI data block header
  2711. typedef struct midihdr_tag {
  2712.     LPSTR       lpData;               // pointer to locked data block
  2713.     DWORD       dwBufferLength;       // length of data in data block
  2714.     DWORD       dwBytesRecorded;      // used for input only
  2715.     DWORD       dwUser;               // for client's use
  2716.     DWORD       dwFlags;              // assorted flags (see defines)
  2717.     struct midihdr_tag *lpNext;   // reserved for driver
  2718.     DWORD       reserved;             // reserved for driver
  2719. } MIDIHDR;
  2720. typedef MIDIHDR       *PMIDIHDR;
  2721. typedef MIDIHDR      *NPMIDIHDR;
  2722. typedef MIDIHDR      *LPMIDIHDR;
  2723.  
  2724. // flags for dwFlags field of MIDIHDR structure
  2725. #define MHDR_DONE       0x00000001       // done bit
  2726. #define MHDR_PREPARED   0x00000002       // set if header prepared
  2727. #define MHDR_INQUEUE    0x00000004       // reserved for driver
  2728. #define MHDR_VALID      0x00000007       // valid flags /* ;Internal */
  2729.  
  2730. // MIDI function prototypes
  2731. UINT APIENTRY midiOutGetNumDevs(VOID);
  2732.  
  2733. MMRESULT APIENTRY midiOutGetDevCapsA(UINT uDeviceID,
  2734.     LPMIDIOUTCAPSA lpCaps, UINT uSize);
  2735. MMRESULT APIENTRY midiOutGetDevCapsW(UINT uDeviceID,
  2736.     LPMIDIOUTCAPSW lpCaps, UINT uSize);
  2737. #ifdef UNICODE
  2738. #define midiOutGetDevCaps  midiOutGetDevCapsW
  2739. #else
  2740. #define midiOutGetDevCaps  midiOutGetDevCapsA
  2741. #endif // !UNICODE
  2742.  
  2743. MMRESULT APIENTRY midiOutGetVolume(UINT uDeviceID, LPDWORD lpdwVolume);
  2744. MMRESULT APIENTRY midiOutSetVolume(UINT uDeviceID, DWORD dwVolume);
  2745.  
  2746. MMRESULT APIENTRY midiOutGetErrorTextA(MMRESULT err, LPSTR lpText, UINT uSize);
  2747. MMRESULT APIENTRY midiOutGetErrorTextW(MMRESULT err, LPWSTR lpText, UINT uSize);
  2748. #ifdef UNICODE
  2749. #define midiOutGetErrorText  midiOutGetErrorTextW
  2750. #else
  2751. #define midiOutGetErrorText  midiOutGetErrorTextA
  2752. #endif // !UNICODE
  2753.  
  2754. MMRESULT APIENTRY midiOutOpen(LPHMIDIOUT lphMidiOut, UINT uDeviceID,
  2755.     DWORD dwCallback, DWORD dwInstance, DWORD dwFlags);
  2756. MMRESULT APIENTRY midiOutClose(HMIDIOUT hMidiOut);
  2757. MMRESULT APIENTRY midiOutPrepareHeader(HMIDIOUT hMidiOut,
  2758.     LPMIDIHDR lpMidiOutHdr, UINT uSize);
  2759. MMRESULT APIENTRY midiOutUnprepareHeader(HMIDIOUT hMidiOut,
  2760.     LPMIDIHDR lpMidiOutHdr, UINT uSize);
  2761. MMRESULT APIENTRY midiOutShortMsg(HMIDIOUT hMidiOut, DWORD dwMsg);
  2762. MMRESULT APIENTRY midiOutLongMsg(HMIDIOUT hMidiOut,
  2763.     LPMIDIHDR lpMidiOutHdr, UINT uSize);
  2764. MMRESULT APIENTRY midiOutReset(HMIDIOUT hMidiOut);
  2765. MMRESULT APIENTRY midiOutCachePatches(HMIDIOUT hMidiOut,
  2766.     UINT uBank, LPWORD lpPatchArray, UINT uFlags);
  2767. MMRESULT APIENTRY midiOutCacheDrumPatches(HMIDIOUT hMidiOut,
  2768.     UINT uPatch, LPWORD lpKeyArray, UINT uFlags);
  2769. MMRESULT APIENTRY midiOutGetID(HMIDIOUT hMidiOut, PUINT lpuDeviceID);
  2770. MMRESULT APIENTRY
  2771.              midiOutMessage(HMIDIOUT hMidiOut, UINT msg, DWORD dw1, DWORD dw2);
  2772.  
  2773. UINT APIENTRY midiInGetNumDevs(VOID);
  2774.  
  2775. MMRESULT APIENTRY midiInGetDevCapsA(UINT uDeviceID,
  2776.     LPMIDIINCAPSA lpCaps, UINT uSize);
  2777. MMRESULT APIENTRY midiInGetDevCapsW(UINT uDeviceID,
  2778.     LPMIDIINCAPSW lpCaps, UINT uSize);
  2779. #ifdef UNICODE
  2780. #define midiInGetDevCaps  midiInGetDevCapsW
  2781. #else
  2782. #define midiInGetDevCaps  midiInGetDevCapsA
  2783. #endif // !UNICODE
  2784.  
  2785. MMRESULT APIENTRY midiInGetErrorTextA(MMRESULT err, LPSTR lpText, UINT uSize);
  2786. MMRESULT APIENTRY midiInGetErrorTextW(MMRESULT err, LPWSTR lpText, UINT uSize);
  2787. #ifdef UNICODE
  2788. #define midiInGetErrorText  midiInGetErrorTextW
  2789. #else
  2790. #define midiInGetErrorText  midiInGetErrorTextA
  2791. #endif // !UNICODE
  2792.  
  2793. MMRESULT APIENTRY midiInOpen(LPHMIDIIN lphMidiIn, UINT uDeviceID,
  2794.     DWORD dwCallback, DWORD dwInstance, DWORD dwFlags);
  2795. MMRESULT APIENTRY midiInClose(HMIDIIN hMidiIn);
  2796. MMRESULT APIENTRY midiInPrepareHeader(HMIDIIN hMidiIn,
  2797.     LPMIDIHDR lpMidiInHdr, UINT uSize);
  2798. MMRESULT APIENTRY midiInUnprepareHeader(HMIDIIN hMidiIn,
  2799.     LPMIDIHDR lpMidiInHdr, UINT uSize);
  2800. MMRESULT APIENTRY midiInAddBuffer(HMIDIIN hMidiIn,
  2801.     LPMIDIHDR lpMidiInHdr, UINT uSize);
  2802. MMRESULT APIENTRY midiInStart(HMIDIIN hMidiIn);
  2803. MMRESULT APIENTRY midiInStop(HMIDIIN hMidiIn);
  2804. MMRESULT APIENTRY midiInReset(HMIDIIN hMidiIn);
  2805. MMRESULT APIENTRY midiInGetID(HMIDIIN hMidiIn, PUINT lpuDeviceID);
  2806. MMRESULT APIENTRY
  2807.                  midiInMessage(HMIDIIN hMidiIn, UINT msg, DWORD dw1, DWORD dw2);
  2808.  
  2809. #endif  //ifndef MMNOMIDI
  2810.  
  2811.  
  2812. #ifndef MMNOAUX
  2813. /****************************************************************************
  2814.  
  2815.                         Auxiliary audio support
  2816.  
  2817. ****************************************************************************/
  2818.  
  2819. // device ID for aux device mapper
  2820. #define AUX_MAPPER     ((DWORD)(-1))
  2821.  
  2822. // Auxiliary audio device capabilities structure
  2823. typedef struct tagAUXCAPSA {
  2824.     WORD        wMid;                   // manufacturer ID
  2825.     WORD        wPid;                   // product ID
  2826.     MMVERSION   vDriverVersion;         // version of the driver
  2827.     CHAR        szPname[MAXPNAMELEN];   // product name (NULL terminated string)
  2828.     WORD        wTechnology;            // type of device
  2829.     DWORD       dwSupport;              // functionality supported by driver
  2830. } AUXCAPSA;
  2831. // Auxiliary audio device capabilities structure
  2832. typedef struct tagAUXCAPSW {
  2833.     WORD        wMid;                   // manufacturer ID
  2834.     WORD        wPid;                   // product ID
  2835.     MMVERSION   vDriverVersion;         // version of the driver
  2836.     WCHAR       szPname[MAXPNAMELEN];   // product name (NULL terminated string)
  2837.     WORD        wTechnology;            // type of device
  2838.     DWORD       dwSupport;              // functionality supported by driver
  2839. } AUXCAPSW;
  2840. #ifdef UNICODE
  2841. typedef AUXCAPSW AUXCAPS;
  2842. #else
  2843. typedef AUXCAPSA AUXCAPS;
  2844. #endif // UNICODE
  2845. typedef AUXCAPSA      *PAUXCAPSA;
  2846. typedef AUXCAPSW      *PAUXCAPSW;
  2847. #ifdef UNICODE
  2848. typedef PAUXCAPSW PAUXCAPS;
  2849. #else
  2850. typedef PAUXCAPSA PAUXCAPS;
  2851. #endif // UNICODE
  2852. typedef AUXCAPSA     *NPAUXCAPSA;
  2853. typedef AUXCAPSW     *NPAUXCAPSW;
  2854. #ifdef UNICODE
  2855. typedef NPAUXCAPSW NPAUXCAPS;
  2856. #else
  2857. typedef NPAUXCAPSA NPAUXCAPS;
  2858. #endif // UNICODE
  2859. typedef AUXCAPSA     *LPAUXCAPSA;
  2860. typedef AUXCAPSW     *LPAUXCAPSW;
  2861. #ifdef UNICODE
  2862. typedef LPAUXCAPSW LPAUXCAPS;
  2863. #else
  2864. typedef LPAUXCAPSA LPAUXCAPS;
  2865. #endif // UNICODE
  2866.  
  2867. // flags for wTechnology field in AUXCAPS structure
  2868. #define AUXCAPS_CDAUDIO    1       // audio from internal CD-ROM drive
  2869. #define AUXCAPS_AUXIN      2       // audio from auxiliary input jacks
  2870.  
  2871. // flags for dwSupport field in AUXCAPS structure
  2872. #define AUXCAPS_VOLUME     0x00000001   // supports volume control
  2873. #define AUXCAPS_LRVOLUME   0x00000002   // separate left-right volume control
  2874.  
  2875. // auxiliary audio function prototypes
  2876. UINT APIENTRY auxGetNumDevs(VOID);
  2877. MMRESULT APIENTRY auxGetDevCapsA(UINT uDeviceID, LPAUXCAPSA lpCaps, UINT uSize);
  2878. MMRESULT APIENTRY auxGetDevCapsW(UINT uDeviceID, LPAUXCAPSW lpCaps, UINT uSize);
  2879. #ifdef UNICODE
  2880. #define auxGetDevCaps  auxGetDevCapsW
  2881. #else
  2882. #define auxGetDevCaps  auxGetDevCapsA
  2883. #endif // !UNICODE
  2884.  
  2885. MMRESULT APIENTRY auxSetVolume(UINT uDeviceID, DWORD dwVolume);
  2886. MMRESULT APIENTRY auxGetVolume(UINT uDeviceID, LPDWORD lpdwVolume);
  2887. MMRESULT APIENTRY auxOutMessage(UINT uDeviceID, UINT msg, DWORD dw1, DWORD dw2);
  2888.  
  2889. #endif  //ifndef MMNOAUX
  2890.  
  2891.  
  2892. #ifndef MMNOTIMER
  2893. /****************************************************************************
  2894.  
  2895.                             Timer support
  2896.  
  2897. ****************************************************************************/
  2898.  
  2899. // timer error return values
  2900. #define TIMERR_NOERROR        (0)                  // no error
  2901. #define TIMERR_NOCANDO        (TIMERR_BASE+1)      // request not completed
  2902. #define TIMERR_STRUCT         (TIMERR_BASE+33)     // time struct size
  2903.  
  2904. // timer data types
  2905. typedef VOID TIMECALLBACK
  2906.              (UINT uTimerID, UINT msg, DWORD dwUser, DWORD dw1, DWORD dw2);
  2907. typedef TIMECALLBACK  *LPTIMECALLBACK;
  2908.  
  2909. // flags for wFlags parameter of timeSetEvent() function
  2910. #define TIME_ONESHOT    0   // program timer for single event
  2911. #define TIME_PERIODIC   1   // program for continuous periodic event
  2912.  
  2913. // timer device capabilities data structure
  2914. typedef struct timecaps_tag {
  2915.     UINT    wPeriodMin;     // minimum period supported
  2916.     UINT    wPeriodMax;     // maximum period supported
  2917.     } TIMECAPS;
  2918. typedef TIMECAPS       *PTIMECAPS;
  2919. typedef TIMECAPS      *NPTIMECAPS;
  2920. typedef TIMECAPS      *LPTIMECAPS;
  2921.  
  2922. // timer function prototypes
  2923. MMRESULT APIENTRY timeGetSystemTime(LPMMTIME lpTime, UINT uSize);
  2924. DWORD APIENTRY timeGetTime(VOID);
  2925. UINT APIENTRY timeSetEvent(UINT uDelay, UINT uResolution,
  2926.     LPTIMECALLBACK lpFunction, DWORD dwUser, UINT uFlags);
  2927. MMRESULT APIENTRY timeKillEvent(UINT uId);
  2928. MMRESULT APIENTRY timeGetDevCaps(LPTIMECAPS lpTimeCaps, UINT uSize);
  2929. MMRESULT APIENTRY timeBeginPeriod(UINT uPeriod);
  2930. MMRESULT APIENTRY timeEndPeriod(UINT uPeriod);
  2931.  
  2932. #endif  //ifndef MMNOTIMER
  2933.  
  2934.  
  2935. #ifndef MMNOJOY
  2936. /****************************************************************************
  2937.  
  2938.                             Joystick support
  2939.  
  2940. ****************************************************************************/
  2941.  
  2942. // joystick error return values
  2943. #define JOYERR_NOERROR        (0)                  // no error
  2944. #define JOYERR_PARMS          (JOYERR_BASE+5)      // bad parameters
  2945. #define JOYERR_NOCANDO        (JOYERR_BASE+6)      // request not completed
  2946. #define JOYERR_UNPLUGGED      (JOYERR_BASE+7)      // joystick is unplugged
  2947.  
  2948. // constants used with JOYINFO structure and MM_JOY* messages
  2949. #define JOY_BUTTON1         0x0001
  2950. #define JOY_BUTTON2         0x0002
  2951. #define JOY_BUTTON3         0x0004
  2952. #define JOY_BUTTON4         0x0008
  2953. #define JOY_BUTTON1CHG      0x0100
  2954. #define JOY_BUTTON2CHG      0x0200
  2955. #define JOY_BUTTON3CHG      0x0400
  2956. #define JOY_BUTTON4CHG      0x0800
  2957.  
  2958. // joystick ID constants
  2959. #define JOYSTICKID1         0
  2960. #define JOYSTICKID2         1
  2961.  
  2962. // joystick device capabilities data structure
  2963. typedef struct tagJOYCAPSA {
  2964.     WORD    wMid;                  // manufacturer ID
  2965.     WORD    wPid;                  // product ID
  2966.     CHAR    szPname[MAXPNAMELEN];  // product name (NULL terminated string)
  2967.     UINT    wXmin;                 // minimum x position value
  2968.     UINT    wXmax;                 // maximum x position value
  2969.     UINT    wYmin;                 // minimum y position value
  2970.     UINT    wYmax;                 // maximum y position value
  2971.     UINT    wZmin;                 // minimum z position value
  2972.     UINT    wZmax;                 // maximum z position value
  2973.     UINT    wNumButtons;           // number of buttons
  2974.     UINT    wPeriodMin;            // minimum message period when captured
  2975.     UINT    wPeriodMax;            // maximum message period when captured
  2976. } JOYCAPSA;
  2977. // joystick device capabilities data structure
  2978. typedef struct tagJOYCAPSW {
  2979.     WORD    wMid;                  // manufacturer ID
  2980.     WORD    wPid;                  // product ID
  2981.     WCHAR   szPname[MAXPNAMELEN];  // product name (NULL terminated string)
  2982.     UINT    wXmin;                 // minimum x position value
  2983.     UINT    wXmax;                 // maximum x position value
  2984.     UINT    wYmin;                 // minimum y position value
  2985.     UINT    wYmax;                 // maximum y position value
  2986.     UINT    wZmin;                 // minimum z position value
  2987.     UINT    wZmax;                 // maximum z position value
  2988.     UINT    wNumButtons;           // number of buttons
  2989.     UINT    wPeriodMin;            // minimum message period when captured
  2990.     UINT    wPeriodMax;            // maximum message period when captured
  2991. } JOYCAPSW;
  2992. #ifdef UNICODE
  2993. typedef JOYCAPSW JOYCAPS;
  2994. #else
  2995. typedef JOYCAPSA JOYCAPS;
  2996. #endif // UNICODE
  2997. typedef JOYCAPSA      *PJOYCAPSA;
  2998. typedef JOYCAPSW      *PJOYCAPSW;
  2999. #ifdef UNICODE
  3000. typedef PJOYCAPSW PJOYCAPS;
  3001. #else
  3002. typedef PJOYCAPSA PJOYCAPS;
  3003. #endif // UNICODE
  3004. typedef JOYCAPSA     *NPJOYCAPSA;
  3005. typedef JOYCAPSW     *NPJOYCAPSW;
  3006. #ifdef UNICODE
  3007. typedef NPJOYCAPSW NPJOYCAPS;
  3008. #else
  3009. typedef NPJOYCAPSA NPJOYCAPS;
  3010. #endif // UNICODE
  3011. typedef JOYCAPSA     *LPJOYCAPSA;
  3012. typedef JOYCAPSW     *LPJOYCAPSW;
  3013. #ifdef UNICODE
  3014. typedef LPJOYCAPSW LPJOYCAPS;
  3015. #else
  3016. typedef LPJOYCAPSA LPJOYCAPS;
  3017. #endif // UNICODE
  3018.  
  3019. // joystick information data structure
  3020. typedef struct joyinfo_tag {
  3021.     UINT wXpos;                 // x position
  3022.     UINT wYpos;                 // y position
  3023.     UINT wZpos;                 // z position
  3024.     UINT wButtons;              // button states
  3025.     } JOYINFO;
  3026. typedef JOYINFO       *PJOYINFO;
  3027. typedef JOYINFO      *NPJOYINFO;
  3028. typedef JOYINFO      *LPJOYINFO;
  3029.  
  3030. // joystick function prototypes
  3031. MMRESULT APIENTRY joyGetDevCapsA(UINT id, LPJOYCAPSA lpCaps, UINT uSize);
  3032. // joystick function prototypes
  3033. MMRESULT APIENTRY joyGetDevCapsW(UINT id, LPJOYCAPSW lpCaps, UINT uSize);
  3034. #ifdef UNICODE
  3035. #define joyGetDevCaps  joyGetDevCapsW
  3036. #else
  3037. #define joyGetDevCaps  joyGetDevCapsA
  3038. #endif // !UNICODE
  3039.  
  3040. UINT     APIENTRY joyGetNumDevs(VOID);
  3041. MMRESULT APIENTRY joyGetPos(UINT id, LPJOYINFO lpInfo);
  3042. MMRESULT APIENTRY joyGetThreshold(UINT id, PUINT lpuThreshold);
  3043. MMRESULT APIENTRY joyReleaseCapture(UINT id);
  3044. MMRESULT APIENTRY joySetCapture(HWND hwnd, UINT uId, UINT uPeriod,
  3045.     BOOL bChanged);
  3046. MMRESULT APIENTRY joySetThreshold(UINT id, UINT uThreshold);
  3047. UINT APIENTRY joySetCalibration(UINT id, PUINT pwXbase,       /* ;Internal */
  3048.     PUINT pwXdelta, PUINT pwYbase, PUINT pwYdelta,            /* ;Internal */
  3049.     PUINT pwZbase, PUINT pwZdelta);                           /* ;Internal */
  3050.  
  3051. #endif  //ifndef MMNOJOY
  3052.  
  3053. #ifndef MMNOMMIO
  3054. /****************************************************************************
  3055.  
  3056.                         Multimedia File I/O support
  3057.  
  3058. ****************************************************************************/
  3059.  
  3060. // MMIO error return values
  3061. #define MMIOERR_BASE            256
  3062. #define MMIOERR_FILENOTFOUND    (MMIOERR_BASE + 1)  // file not found
  3063. #define MMIOERR_OUTOFMEMORY     (MMIOERR_BASE + 2)  // out of memory
  3064. #define MMIOERR_CANNOTOPEN      (MMIOERR_BASE + 3)  // cannot open
  3065. #define MMIOERR_CANNOTCLOSE     (MMIOERR_BASE + 4)  // cannot close
  3066. #define MMIOERR_CANNOTREAD      (MMIOERR_BASE + 5)  // cannot read
  3067. #define MMIOERR_CANNOTWRITE     (MMIOERR_BASE + 6)  // cannot write
  3068. #define MMIOERR_CANNOTSEEK      (MMIOERR_BASE + 7)  // cannot seek
  3069. #define MMIOERR_CANNOTEXPAND    (MMIOERR_BASE + 8)  // cannot expand file
  3070. #define MMIOERR_CHUNKNOTFOUND   (MMIOERR_BASE + 9)  // chunk not found
  3071. #define MMIOERR_UNBUFFERED      (MMIOERR_BASE + 10) // file is unbuffered
  3072.  
  3073. // MMIO constants
  3074. #define CFSEPCHAR       '+'             // compound file name separator char.
  3075.  
  3076. // MMIO data types
  3077. typedef DWORD           FOURCC;         // a four character code
  3078. typedef HANDLE          HMMIO;          // a handle to an open file
  3079. typedef LPSTR           HPSTR;          // a huge version of LPSTR
  3080.  
  3081. typedef LRESULT MMIOPROC
  3082.                     (LPSTR lpmmioinfo, UINT uMsg, LONG lParam1, LONG lParam2);
  3083. typedef MMIOPROC *LPMMIOPROC;
  3084.  
  3085. // general MMIO information data structure
  3086. typedef struct                  // The MMIO state
  3087. {
  3088.         /* general fields */
  3089.         DWORD           dwFlags;        // general status flags
  3090.         FOURCC          fccIOProc;      // 4 char id for the I/O procedure
  3091.         LPMMIOPROC      pIOProc;        // pointer to I/O procedure
  3092.         UINT            wErrorRet;      // place for error to be returned
  3093.         HANDLE          htask;          //
  3094.  
  3095.         /* fields maintained by MMIO functions during buffered I/O */
  3096.         LONG            cchBuffer;      // size of I/O buffer (or 0L)
  3097.         LPSTR           pchBuffer;      // start of I/O buffer (or NULL)
  3098.         LPSTR           pchNext;        // pointer to next byte to read/write
  3099.         LPSTR           pchEndRead;     // pointer to last valid byte to read
  3100.         LPSTR           pchEndWrite;    // pointer to last byte to write
  3101.         LONG            lBufOffset;     // disk offset of start of buffer
  3102.  
  3103.         /* fields maintained by I/O procedure */
  3104.         LONG            lDiskOffset;    // disk offset of next read or write
  3105.         DWORD           adwInfo[3];     // data specific to type of MMIOPROC
  3106.  
  3107.         /* other fields maintained by MMIO */
  3108.         DWORD           dwReserved1;    // reserved for MMIO use
  3109.         DWORD           dwReserved2;    // reserved for MMIO use
  3110.         HMMIO           hmmio;          // handle to open file
  3111.  
  3112. } MMIOINFO;
  3113. typedef MMIOINFO       *PMMIOINFO;
  3114. typedef MMIOINFO      *NPMMIOINFO;
  3115. typedef MMIOINFO      *LPMMIOINFO;
  3116.  
  3117. // RIFF chunk information data structure
  3118. typedef struct MMCKINFO_tag      // structure for representing RIFF chunk info.
  3119. {
  3120.         FOURCC          ckid;           // chunk ID
  3121.         DWORD           cksize;         // chunk size
  3122.         FOURCC          fccType;        // form type or list type
  3123.         DWORD           dwDataOffset;   // offset of data portion of chunk
  3124.         DWORD           dwFlags;        // flags used by MMIO functions
  3125. } MMCKINFO;
  3126. typedef MMCKINFO       *PMMCKINFO;
  3127. typedef MMCKINFO      *NPMMCKINFO;
  3128. typedef MMCKINFO      *LPMMCKINFO;
  3129.  
  3130. /* <dwFlags> field of MMIOINFO structure -- many same as OpenFile() flags */
  3131. /* Low word of flags will be passed to OpenFile() -- therefore, any MMIO-
  3132.     specific flags should be in the high word.  */
  3133. #define MMIO_RWMODE     0x00000003      // mask to get bits used for opening
  3134.                                         // file for reading/writing/both
  3135. #define MMIO_SHAREMODE  0x00000070      // file sharing mode number
  3136.  
  3137. // constants for dwFlags field of MMIOINFO
  3138. #define MMIO_CREATE     0x00001000      // create new file (or truncate file)
  3139. #define MMIO_PARSE      0x00000100      // parse new file returning path
  3140. #define MMIO_DELETE     0x00000200      // create new file (or truncate file)
  3141. #define MMIO_EXIST      0x00004000      // checks for existence of file
  3142. #define MMIO_ALLOCBUF   0x00010000      // mmioOpen() should allocate a buffer
  3143. #define MMIO_GETTEMP    0x00020000      // mmioOpen() should retrieve temp name
  3144.  
  3145. #define MMIO_DIRTY      0x10000000      // I/O buffer is dirty
  3146. /* MMIO_DIRTY is also used in the <dwFlags> field of MMCKINFO structure */
  3147.  
  3148. #define MMIO_OPEN_VALID 0x0003FFFF      // valid flags for mmioOpen /* ;Internal */
  3149.  
  3150. /* read/write mode numbers (bit field MMIO_RWMODE) */
  3151. #define MMIO_READ       0x00000000      // open file for reading only
  3152. #define MMIO_WRITE      0x00000001      // open file for writing only
  3153. #define MMIO_READWRITE  0x00000002      // open file for reading and writing
  3154.  
  3155. /* share mode numbers (bit field MMIO_SHAREMODE) */
  3156. #define MMIO_COMPAT     0x00000000      // compatibility mode
  3157. #define MMIO_EXCLUSIVE  0x00000010      // exclusive-access mode
  3158. #define MMIO_DENYWRITE  0x00000020      // deny writing to other processes
  3159. #define MMIO_DENYREAD   0x00000030      // deny reading to other processes
  3160. #define MMIO_DENYNONE   0x00000040      // deny nothing to other processes
  3161.  
  3162. /* flags for other functions */
  3163. #define MMIO_FHOPEN             0x0010  // mmioClose(): keep file handle open
  3164. #define MMIO_EMPTYBUF           0x0010  // mmioFlush(): empty the I/O buffer
  3165. #define MMIO_TOUPPER            0x0010  // mmioStringToFOURCC(): cvt. to u-case
  3166. #define MMIO_INSTALLPROC    0x00010000  // mmioInstallIOProc(): install MMIOProc
  3167. #define MMIO_GLOBALPROC     0x10000000  // mmioInstallIOProc: install globally
  3168. #define MMIO_UNICODEPROC    0x01000000  // mmioInstallIOProc(): Unicode MMIOProc
  3169. #define MMIO_REMOVEPROC     0x00020000  // mmioInstallIOProc(): remove MMIOProc
  3170. #define MMIO_FINDPROC       0x00040000  // mmioInstallIOProc(): find an MMIOProc
  3171. #define MMIO_FINDCHUNK          0x0010  // mmioDescend(): find a chunk by ID
  3172. #define MMIO_FINDRIFF           0x0020  // mmioDescend(): find a LIST chunk
  3173.                                         // ???
  3174. #define MMIO_FINDLIST           0x0040  // mmioDescend(): find a RIFF chunk
  3175.                                         // ???
  3176. #define MMIO_CREATERIFF         0x0020  // mmioCreateChunk(): make a LIST chunk
  3177.                                         // ???
  3178. #define MMIO_CREATELIST         0x0040  // mmioCreateChunk(): make a RIFF chunk
  3179.                                         // ???
  3180.  
  3181. #define MMIO_VALIDPROC      0x11070000  // valid for mmioInstallIOProc /* ;Internal */
  3182.  
  3183. /* message numbers for MMIOPROC I/O procedure functions */
  3184. #define MMIOM_READ      MMIO_READ       // read (must equal MMIO_READ!)
  3185. #define MMIOM_WRITE    MMIO_WRITE       // write (must equal MMIO_WRITE!)
  3186. #define MMIOM_SEEK              2       // seek to a new position in file
  3187. #define MMIOM_OPEN              3       // open file
  3188. #define MMIOM_CLOSE             4       // close file
  3189. #define MMIOM_WRITEFLUSH        5       // write and flush
  3190. #define MMIOM_RENAME            6       // rename specified file
  3191. #define MMIOM_USER         0x8000       // beginning of user-defined messages
  3192.  
  3193. /* standard four character codes */
  3194. #define FOURCC_RIFF     mmioFOURCC('R', 'I', 'F', 'F')
  3195. #define FOURCC_LIST     mmioFOURCC('L', 'I', 'S', 'T')
  3196.  
  3197. /* four character codes used to identify standard built-in I/O procedures */
  3198. #define FOURCC_DOS      mmioFOURCC('D', 'O', 'S', ' ')
  3199. #define FOURCC_MEM      mmioFOURCC('M', 'E', 'M', ' ')
  3200.  
  3201. // flags for mmioSeek()
  3202. #ifndef SEEK_SET
  3203. #define SEEK_SET        0               // seek to an absolute position
  3204. #define SEEK_CUR        1               // seek relative to current position
  3205. #define SEEK_END        2               // seek relative to end of file
  3206. #endif  //ifndef SEEK_SET
  3207.  
  3208. /* other constants */
  3209. #define MMIO_DEFAULTBUFFER      8192    // default buffer size
  3210.  
  3211. /* MMIO macros */
  3212. #define mmioFOURCC( ch0, ch1, ch2, ch3 )                                \
  3213.                 ( (DWORD)(BYTE)(ch0) | ( (DWORD)(BYTE)(ch1) << 8 ) |    \
  3214.                 ( (DWORD)(BYTE)(ch2) << 16 ) | ( (DWORD)(BYTE)(ch3) << 24 ) )
  3215. // This macro is machine byte-sex and word-sex dependent!!
  3216. // The characters are BYTES, so compatible with ANSI, not at all with UNICODE
  3217.  
  3218.  
  3219. /* MMIO prototypes */
  3220.  
  3221. FOURCC APIENTRY mmioStringToFOURCCA(LPCSTR sz, UINT uFlags);
  3222. FOURCC APIENTRY mmioStringToFOURCCW(LPCWSTR sz, UINT uFlags);
  3223. #ifdef UNICODE
  3224. #define mmioStringToFOURCC  mmioStringToFOURCCW
  3225. #else
  3226. #define mmioStringToFOURCC  mmioStringToFOURCCA
  3227. #endif // !UNICODE
  3228.  
  3229. LPMMIOPROC APIENTRY mmioInstallIOProcA( FOURCC fccIOProc, LPMMIOPROC pIOProc,
  3230.                                         DWORD dwFlags);
  3231. LPMMIOPROC APIENTRY mmioInstallIOProcW( FOURCC fccIOProc, LPMMIOPROC pIOProc,
  3232.                                         DWORD dwFlags);
  3233. #ifdef UNICODE
  3234. #define mmioInstallIOProc  mmioInstallIOProcW
  3235. #else
  3236. #define mmioInstallIOProc  mmioInstallIOProcA
  3237. #endif // !UNICODE
  3238. HMMIO APIENTRY mmioOpenA( LPSTR szFileName, LPMMIOINFO lpmmioinfo,
  3239.                           DWORD dwOpenFlags);
  3240. HMMIO APIENTRY mmioOpenW( LPWSTR szFileName, LPMMIOINFO lpmmioinfo,
  3241.                           DWORD dwOpenFlags);
  3242. #ifdef UNICODE
  3243. #define mmioOpen  mmioOpenW
  3244. #else
  3245. #define mmioOpen  mmioOpenA
  3246. #endif // !UNICODE
  3247.  
  3248. MMRESULT APIENTRY mmioRenameA( LPCSTR szFileName, LPCSTR szNewFileName,
  3249.                                LPMMIOINFO lpmmioinfo, DWORD dwRenameFlags);
  3250. MMRESULT APIENTRY mmioRenameW( LPCWSTR szFileName, LPCWSTR szNewFileName,
  3251.                                LPMMIOINFO lpmmioinfo, DWORD dwRenameFlags);
  3252. #ifdef UNICODE
  3253. #define mmioRename  mmioRenameW
  3254. #else
  3255. #define mmioRename  mmioRenameA
  3256. #endif // !UNICODE
  3257.  
  3258. MMRESULT APIENTRY mmioClose(HMMIO hmmio, UINT uFlags);
  3259. LRESULT APIENTRY mmioRead(HMMIO hmmio, LPSTR pch, LONG cch);
  3260. LRESULT APIENTRY mmioWrite(HMMIO hmmio, LPSTR pch, LONG cch);
  3261. LRESULT APIENTRY mmioSeek(HMMIO hmmio, LONG lOffset, int iOrigin);
  3262. MMRESULT APIENTRY mmioGetInfo(HMMIO hmmio, LPMMIOINFO lpmmioinfo, UINT uFlags);
  3263. MMRESULT APIENTRY mmioSetInfo(HMMIO hmmio, LPMMIOINFO lpmmioinfo, UINT uFlags);
  3264. MMRESULT APIENTRY mmioSetBuffer( HMMIO hmmio, LPSTR pchBuffer, LONG cchBuffer,
  3265.                                  UINT uFlags);
  3266. MMRESULT APIENTRY mmioFlush(HMMIO hmmio, UINT uFlags);
  3267. MMRESULT APIENTRY mmioAdvance(HMMIO hmmio, LPMMIOINFO lpmmioinfo, UINT uFlags);
  3268. LRESULT APIENTRY mmioSendMessage( HMMIO hmmio, UINT uMsg,
  3269.                                   LONG lParam1, LONG lParam2);
  3270.  
  3271. /* RIFF I/O prototypes */
  3272. MMRESULT APIENTRY mmioDescend( HMMIO hmmio, LPMMCKINFO lpck,
  3273.                             LPMMCKINFO lpckParent, UINT uFlags);
  3274. MMRESULT APIENTRY mmioAscend(HMMIO hmmio, LPMMCKINFO lpck, UINT uFlags);
  3275. MMRESULT APIENTRY mmioCreateChunk(HMMIO hmmio, LPMMCKINFO lpck, UINT uFlags);
  3276.  
  3277. #endif  //ifndef MMNOMMIO
  3278.  
  3279. typedef  UINT    MCIDEVICEID;  // MCI device ID type
  3280. // BEWARE:  MCI device ids can be stored and read from Win 3 compatible
  3281. // files when the device id will be WORD size.
  3282.  
  3283. #ifndef MMNOMCI
  3284. /****************************************************************************
  3285.  
  3286.                             MCI support
  3287.  
  3288. ****************************************************************************/
  3289.  
  3290. /*--------------------------------------------------------------------*\
  3291.  *
  3292.  *                           MCI functions
  3293.  *
  3294.  *--------------------------------------------------------------------
  3295.  * msiSendCommand
  3296. \*--------------------------------------------------------------------*/
  3297. MCIERROR APIENTRY mciSendCommandA(
  3298.     MCIDEVICEID wDeviceID,
  3299.     UINT uMessage,
  3300.     DWORD dwParam1,
  3301.     DWORD dwParam2 );
  3302. /*--------------------------------------------------------------------*\
  3303.  *
  3304.  *                           MCI functions
  3305.  *
  3306.  *--------------------------------------------------------------------
  3307.  * msiSendCommand
  3308. \*--------------------------------------------------------------------*/
  3309. MCIERROR APIENTRY mciSendCommandW(
  3310.     MCIDEVICEID wDeviceID,
  3311.     UINT uMessage,
  3312.     DWORD dwParam1,
  3313.     DWORD dwParam2 );
  3314. #ifdef UNICODE
  3315. #define mciSendCommand  mciSendCommandW
  3316. #else
  3317. #define mciSendCommand  mciSendCommandA
  3318. #endif // !UNICODE
  3319.  
  3320. /*--------------------------------------------------------------------*\
  3321.  * mciSendString
  3322. \*--------------------------------------------------------------------*/
  3323. MCIERROR APIENTRY mciSendStringA(
  3324.     LPCSTR lpstrCommand,
  3325.     LPSTR lpstrReturnString,
  3326.     UINT uReturnLength,
  3327.     HANDLE hwndCallback );
  3328. /*--------------------------------------------------------------------*\
  3329.  * mciSendString
  3330. \*--------------------------------------------------------------------*/
  3331. MCIERROR APIENTRY mciSendStringW(
  3332.     LPCWSTR lpstrCommand,
  3333.     LPWSTR lpstrReturnString,
  3334.     UINT uReturnLength,
  3335.     HANDLE hwndCallback );
  3336. #ifdef UNICODE
  3337. #define mciSendString  mciSendStringW
  3338. #else
  3339. #define mciSendString  mciSendStringA
  3340. #endif // !UNICODE
  3341.  
  3342. /*--------------------------------------------------------------------*\
  3343.  *  mciGetCreatorTask
  3344. \*--------------------------------------------------------------------*/
  3345. HANDLE APIENTRY mciGetCreatorTask(
  3346.     MCIDEVICEID wDeviceID);
  3347.  
  3348.  
  3349. /*--------------------------------------------------------------------*\
  3350.  *  mciGetDeviceID
  3351. \*--------------------------------------------------------------------*/
  3352. MCIDEVICEID APIENTRY mciGetDeviceIDA(
  3353.     LPCSTR lpstrName );
  3354. /*--------------------------------------------------------------------*\
  3355.  *  mciGetDeviceID
  3356. \*--------------------------------------------------------------------*/
  3357. MCIDEVICEID APIENTRY mciGetDeviceIDW(
  3358.     LPCWSTR lpstrName );
  3359. #ifdef UNICODE
  3360. #define mciGetDeviceID  mciGetDeviceIDW
  3361. #else
  3362. #define mciGetDeviceID  mciGetDeviceIDA
  3363. #endif // !UNICODE
  3364.  
  3365. /*--------------------------------------------------------------------*\
  3366.  *  mciGetDeviceIDFromElementID
  3367. \*--------------------------------------------------------------------*/
  3368. MCIDEVICEID APIENTRY mciGetDeviceIDFromElementIDA(
  3369.     DWORD dwElementID,
  3370.     LPCSTR lpstrType );
  3371. /*--------------------------------------------------------------------*\
  3372.  *  mciGetDeviceIDFromElementID
  3373. \*--------------------------------------------------------------------*/
  3374. MCIDEVICEID APIENTRY mciGetDeviceIDFromElementIDW(
  3375.     DWORD dwElementID,
  3376.     LPCWSTR lpstrType );
  3377. #ifdef UNICODE
  3378. #define mciGetDeviceIDFromElementID  mciGetDeviceIDFromElementIDW
  3379. #else
  3380. #define mciGetDeviceIDFromElementID  mciGetDeviceIDFromElementIDA
  3381. #endif // !UNICODE
  3382.  
  3383. /*--------------------------------------------------------------------*\
  3384.  * mciGetErrorString
  3385. \*--------------------------------------------------------------------*/
  3386. BOOL APIENTRY mciGetErrorStringA(
  3387.     DWORD dwError,           // Should be type==MCIERROR...
  3388.     LPSTR lpstrBuffer,
  3389.     UINT uLength );
  3390. /*--------------------------------------------------------------------*\
  3391.  * mciGetErrorString
  3392. \*--------------------------------------------------------------------*/
  3393. BOOL APIENTRY mciGetErrorStringW(
  3394.     DWORD dwError,           // Should be type==MCIERROR...
  3395.     LPWSTR lpstrBuffer,
  3396.     UINT uLength );
  3397. #ifdef UNICODE
  3398. #define mciGetErrorString  mciGetErrorStringW
  3399. #else
  3400. #define mciGetErrorString  mciGetErrorStringA
  3401. #endif // !UNICODE
  3402.  
  3403. typedef UINT (*YIELDPROC) (MCIDEVICEID wDeviceID, DWORD dwYieldData);
  3404.  
  3405. BOOL APIENTRY mciSetYieldProc ( MCIDEVICEID wDeviceID
  3406.                               , YIELDPROC fpYieldProc
  3407.                               , DWORD dwYieldData
  3408.                               );
  3409. YIELDPROC APIENTRY mciGetYieldProc ( MCIDEVICEID wDeviceID
  3410.                                    , LPDWORD lpdwYieldData
  3411.                                    );
  3412.  
  3413. #if (WINVER < 0x030a)
  3414. BOOL WINAPI mciExecute (LPCSTR lpstrCommand);
  3415. #endif /* ifdef WINVER < 0x030a */
  3416.  
  3417. // THIS NUMBER IS HARDCODED WHERE THE MCI_FORMAT_<x>'s ARE #define'd
  3418. // You must change those definitions if you change this number
  3419.  
  3420. //  MCI error return values
  3421. #define MCIERR_INVALID_DEVICE_ID        (MCIERR_BASE + 1)
  3422. #define MCIERR_UNRECOGNIZED_KEYWORD     (MCIERR_BASE + 3)
  3423. #define MCIERR_UNRECOGNIZED_COMMAND     (MCIERR_BASE + 5)
  3424. #define MCIERR_HARDWARE                 (MCIERR_BASE + 6)
  3425. #define MCIERR_INVALID_DEVICE_NAME      (MCIERR_BASE + 7)
  3426. #define MCIERR_OUT_OF_MEMORY            (MCIERR_BASE + 8)
  3427. #define MCIERR_DEVICE_OPEN              (MCIERR_BASE + 9)
  3428. #define MCIERR_CANNOT_LOAD_DRIVER       (MCIERR_BASE + 10)
  3429. #define MCIERR_MISSING_COMMAND_STRING   (MCIERR_BASE + 11)
  3430. #define MCIERR_PARAM_OVERFLOW           (MCIERR_BASE + 12)
  3431. #define MCIERR_MISSING_STRING_ARGUMENT  (MCIERR_BASE + 13)
  3432. #define MCIERR_BAD_INTEGER              (MCIERR_BASE + 14)
  3433. #define MCIERR_PARSER_INTERNAL          (MCIERR_BASE + 15)
  3434. #define MCIERR_DRIVER_INTERNAL          (MCIERR_BASE + 16)
  3435. #define MCIERR_MISSING_PARAMETER        (MCIERR_BASE + 17)
  3436. #define MCIERR_UNSUPPORTED_FUNCTION     (MCIERR_BASE + 18)
  3437. #define MCIERR_FILE_NOT_FOUND           (MCIERR_BASE + 19)
  3438. #define MCIERR_DEVICE_NOT_READY         (MCIERR_BASE + 20)
  3439. #define MCIERR_INTERNAL                 (MCIERR_BASE + 21)
  3440. #define MCIERR_DRIVER                   (MCIERR_BASE + 22)
  3441. #define MCIERR_CANNOT_USE_ALL           (MCIERR_BASE + 23)
  3442. #define MCIERR_MULTIPLE                 (MCIERR_BASE + 24)
  3443. #define MCIERR_EXTENSION_NOT_FOUND      (MCIERR_BASE + 25)
  3444. #define MCIERR_OUTOFRANGE               (MCIERR_BASE + 26)
  3445. #define MCIERR_FLAGS_NOT_COMPATIBLE     (MCIERR_BASE + 28)
  3446. #define MCIERR_FILE_NOT_SAVED           (MCIERR_BASE + 30)
  3447. #define MCIERR_DEVICE_TYPE_REQUIRED     (MCIERR_BASE + 31)
  3448. #define MCIERR_DEVICE_LOCKED            (MCIERR_BASE + 32)
  3449. #define MCIERR_DUPLICATE_ALIAS          (MCIERR_BASE + 33)
  3450. #define MCIERR_BAD_CONSTANT             (MCIERR_BASE + 34)
  3451. #define MCIERR_MUST_USE_SHAREABLE       (MCIERR_BASE + 35)
  3452. #define MCIERR_MISSING_DEVICE_NAME      (MCIERR_BASE + 36)
  3453. #define MCIERR_BAD_TIME_FORMAT          (MCIERR_BASE + 37)
  3454. #define MCIERR_NO_CLOSING_QUOTE         (MCIERR_BASE + 38)
  3455. #define MCIERR_DUPLICATE_FLAGS          (MCIERR_BASE + 39)
  3456. #define MCIERR_INVALID_FILE             (MCIERR_BASE + 40)
  3457. #define MCIERR_NULL_PARAMETER_BLOCK     (MCIERR_BASE + 41)
  3458. #define MCIERR_UNNAMED_RESOURCE         (MCIERR_BASE + 42)
  3459. #define MCIERR_NEW_REQUIRES_ALIAS       (MCIERR_BASE + 43)
  3460. #define MCIERR_NOTIFY_ON_AUTO_OPEN      (MCIERR_BASE + 44)
  3461. #define MCIERR_NO_ELEMENT_ALLOWED       (MCIERR_BASE + 45)
  3462. #define MCIERR_NONAPPLICABLE_FUNCTION   (MCIERR_BASE + 46)
  3463. #define MCIERR_ILLEGAL_FOR_AUTO_OPEN    (MCIERR_BASE + 47)
  3464. #define MCIERR_FILENAME_REQUIRED        (MCIERR_BASE + 48)
  3465. #define MCIERR_EXTRA_CHARACTERS         (MCIERR_BASE + 49)
  3466. #define MCIERR_DEVICE_NOT_INSTALLED     (MCIERR_BASE + 50)
  3467. #define MCIERR_GET_CD                   (MCIERR_BASE + 51)
  3468. #define MCIERR_SET_CD                   (MCIERR_BASE + 52)
  3469. #define MCIERR_SET_DRIVE                (MCIERR_BASE + 53)
  3470. #define MCIERR_DEVICE_LENGTH            (MCIERR_BASE + 54)
  3471. #define MCIERR_DEVICE_ORD_LENGTH        (MCIERR_BASE + 55)
  3472. #define MCIERR_NO_INTEGER               (MCIERR_BASE + 56)
  3473.  
  3474. #define MCIERR_WAVE_OUTPUTSINUSE        (MCIERR_BASE + 64)
  3475. #define MCIERR_WAVE_SETOUTPUTINUSE      (MCIERR_BASE + 65)
  3476. #define MCIERR_WAVE_INPUTSINUSE         (MCIERR_BASE + 66)
  3477. #define MCIERR_WAVE_SETINPUTINUSE       (MCIERR_BASE + 67)
  3478. #define MCIERR_WAVE_OUTPUTUNSPECIFIED   (MCIERR_BASE + 68)
  3479. #define MCIERR_WAVE_INPUTUNSPECIFIED    (MCIERR_BASE + 69)
  3480. #define MCIERR_WAVE_OUTPUTSUNSUITABLE   (MCIERR_BASE + 70)
  3481. #define MCIERR_WAVE_SETOUTPUTUNSUITABLE (MCIERR_BASE + 71)
  3482. #define MCIERR_WAVE_INPUTSUNSUITABLE    (MCIERR_BASE + 72)
  3483. #define MCIERR_WAVE_SETINPUTUNSUITABLE  (MCIERR_BASE + 73)
  3484.  
  3485. #define MCIERR_SEQ_DIV_INCOMPATIBLE     (MCIERR_BASE + 80)
  3486. #define MCIERR_SEQ_PORT_INUSE           (MCIERR_BASE + 81)
  3487. #define MCIERR_SEQ_PORT_NONEXISTENT     (MCIERR_BASE + 82)
  3488. #define MCIERR_SEQ_PORT_MAPNODEVICE     (MCIERR_BASE + 83)
  3489. #define MCIERR_SEQ_PORT_MISCERROR       (MCIERR_BASE + 84)
  3490. #define MCIERR_SEQ_TIMER                (MCIERR_BASE + 85)
  3491. #define MCIERR_SEQ_PORTUNSPECIFIED      (MCIERR_BASE + 86)
  3492. #define MCIERR_SEQ_NOMIDIPRESENT        (MCIERR_BASE + 87)
  3493.  
  3494. #define MCIERR_NO_WINDOW                (MCIERR_BASE + 90)
  3495. #define MCIERR_CREATEWINDOW             (MCIERR_BASE + 91)
  3496. #define MCIERR_FILE_READ                (MCIERR_BASE + 92)
  3497. #define MCIERR_FILE_WRITE               (MCIERR_BASE + 93)
  3498.  
  3499. // All custom device driver errors must be >= this value
  3500. #define MCIERR_CUSTOM_DRIVER_BASE       (MCIERR_BASE + 256)
  3501.  
  3502. /****************************************************************************
  3503. *          MCI command message identifiers
  3504. *****************************************************************************/
  3505. // Message numbers are hard coded because the resource compiler
  3506. // will otherwise fail on the RCDATA command table in mmsystem.rc
  3507.  
  3508. // They must be in the range between MCI_FIRST and MCI_LAST
  3509.  
  3510. #define MCI_FIRST                       0x0800
  3511. // Messages 0x801 and 0x802 are reserved
  3512. #define MCI_OPEN                        0x0803
  3513. #define MCI_CLOSE                       0x0804
  3514. #define MCI_ESCAPE                      0x0805
  3515. #define MCI_PLAY                        0x0806
  3516. #define MCI_SEEK                        0x0807
  3517. #define MCI_STOP                        0x0808
  3518. #define MCI_PAUSE                       0x0809
  3519. #define MCI_INFO                        0x080A
  3520. #define MCI_GETDEVCAPS                  0x080B
  3521. #define MCI_SPIN                        0x080C
  3522. #define MCI_SET                         0x080D
  3523. #define MCI_STEP                        0x080E
  3524. #define MCI_RECORD                      0x080F
  3525. #define MCI_SYSINFO                     0x0810
  3526. #define MCI_BREAK                       0x0811
  3527. #define MCI_SOUND                       0x0812
  3528. #define MCI_SAVE                        0x0813
  3529. #define MCI_STATUS                      0x0814
  3530.  
  3531. #define MCI_CUE                         0x0830
  3532.  
  3533. #define MCI_REALIZE                     0x0840
  3534. #define MCI_WINDOW                      0x0841
  3535. #define MCI_PUT                         0x0842
  3536. #define MCI_WHERE                       0x0843
  3537. #define MCI_FREEZE                      0x0844
  3538. #define MCI_UNFREEZE                    0x0845
  3539.  
  3540. #define MCI_LOAD                        0x0850
  3541. #define MCI_CUT                         0x0851
  3542. #define MCI_COPY                        0x0852
  3543. #define MCI_PASTE                       0x0853
  3544. #define MCI_UPDATE                      0x0854
  3545. #define MCI_RESUME                      0x0855
  3546. #define MCI_DELETE                      0x0856
  3547.  
  3548. #define MCI_LAST                        0x0FFF
  3549.  
  3550. // the next 0x400 message ID's are reserved for custom drivers
  3551. // all custom MCI command messages must be >= than this value
  3552. #define MCI_USER_MESSAGES               (0x400 + MCI_FIRST)
  3553.  
  3554.  
  3555. /****************************************************************************
  3556. *   Structures for the lpdwParams (dwParam2) of mciSendCommand for those
  3557. *   command messages that may be parsed in string form.
  3558. *****************************************************************************/
  3559.  
  3560.  
  3561.  
  3562. #define MCI_ALL_DEVICE_ID               ((MCIDEVICEID)-1)    // Matches all MCI devices
  3563.  
  3564. // constants for predefined MCI device types
  3565. //#define MCI_DEVTYPE_VCR                 (MCI_STRING_OFFSET + 1)
  3566. //#define MCI_DEVTYPE_VIDEODISC           (MCI_STRING_OFFSET + 2)
  3567. //#define MCI_DEVTYPE_OVERLAY             (MCI_STRING_OFFSET + 3)
  3568. //#define MCI_DEVTYPE_CD_AUDIO            (MCI_STRING_OFFSET + 4)
  3569. //#define MCI_DEVTYPE_DAT                 (MCI_STRING_OFFSET + 5)
  3570. //#define MCI_DEVTYPE_SCANNER             (MCI_STRING_OFFSET + 6)
  3571. //#define MCI_DEVTYPE_ANIMATION           (MCI_STRING_OFFSET + 7)
  3572. //#define MCI_DEVTYPE_DIGITAL_VIDEO       (MCI_STRING_OFFSET + 8)
  3573. //#define MCI_DEVTYPE_OTHER               (MCI_STRING_OFFSET + 9)
  3574. //#define MCI_DEVTYPE_WAVEFORM_AUDIO      (MCI_STRING_OFFSET + 10)
  3575. //#define MCI_DEVTYPE_SEQUENCER           (MCI_STRING_OFFSET + 11)
  3576.  
  3577. // Constant values are used because RC does not like the parentheses
  3578. #define MCI_DEVTYPE_VCR                 513
  3579. #define MCI_DEVTYPE_VIDEODISC           514
  3580. #define MCI_DEVTYPE_OVERLAY             515
  3581. #define MCI_DEVTYPE_CD_AUDIO            516
  3582. #define MCI_DEVTYPE_DAT                 517
  3583. #define MCI_DEVTYPE_SCANNER             518
  3584. #define MCI_DEVTYPE_ANIMATION           519
  3585. #define MCI_DEVTYPE_DIGITAL_VIDEO       520
  3586. #define MCI_DEVTYPE_OTHER               521
  3587. #define MCI_DEVTYPE_WAVEFORM_AUDIO      522
  3588. #define MCI_DEVTYPE_SEQUENCER           523
  3589.  
  3590. #define MCI_DEVTYPE_FIRST               MCI_DEVTYPE_VCR
  3591. #define MCI_DEVTYPE_LAST                MCI_DEVTYPE_SEQUENCER
  3592.  
  3593.  
  3594. #define MCI_DEVTYPE_FIRST_USER          0x1000
  3595.  
  3596. // return values for 'status mode' command
  3597. #define MCI_MODE_NOT_READY              (MCI_STRING_OFFSET + 12)
  3598. #define MCI_MODE_STOP                   (MCI_STRING_OFFSET + 13)
  3599. #define MCI_MODE_PLAY                   (MCI_STRING_OFFSET + 14)
  3600. #define MCI_MODE_RECORD                 (MCI_STRING_OFFSET + 15)
  3601. #define MCI_MODE_SEEK                   (MCI_STRING_OFFSET + 16)
  3602. #define MCI_MODE_PAUSE                  (MCI_STRING_OFFSET + 17)
  3603. #define MCI_MODE_OPEN                   (MCI_STRING_OFFSET + 18)
  3604.  
  3605. // constants used in 'set time format' and 'status time format' commands
  3606. // These are not based on MCI_FORMATS_OFFSET because of resource
  3607. // compiler limitations
  3608. #define MCI_FORMAT_MILLISECONDS         0
  3609. #define MCI_FORMAT_HMS                  1
  3610. #define MCI_FORMAT_MSF                  2
  3611. #define MCI_FORMAT_FRAMES               3
  3612. #define MCI_FORMAT_SMPTE_24             4
  3613. #define MCI_FORMAT_SMPTE_25             5
  3614. #define MCI_FORMAT_SMPTE_30             6
  3615. #define MCI_FORMAT_SMPTE_30DROP         7
  3616. #define MCI_FORMAT_BYTES                8
  3617. #define MCI_FORMAT_SAMPLES              9
  3618. #define MCI_FORMAT_TMSF                 10
  3619.  
  3620. // MCI time format conversion macros
  3621. // Note that these macros are byte-sex dependent as the SMPT format gives
  3622. // the layout in storage that's wanted.
  3623. #define MCI_MSF_MINUTE(msf)             ((BYTE)(msf))
  3624. #define MCI_MSF_SECOND(msf)             ((BYTE)(((WORD)(msf)) >> 8))
  3625. #define MCI_MSF_FRAME(msf)              ((BYTE)((msf)>>16))
  3626.  
  3627. #define MCI_MAKE_MSF(m, s, f)           ((DWORD)(((BYTE)(m) | \
  3628.                                                   ((WORD)(s)<<8)) | \
  3629.                                                  (((DWORD)(BYTE)(f))<<16)))
  3630.  
  3631. #define MCI_TMSF_TRACK(tmsf)            ((BYTE)(tmsf))
  3632. #define MCI_TMSF_MINUTE(tmsf)           ((BYTE)(((WORD)(tmsf)) >> 8))
  3633. #define MCI_TMSF_SECOND(tmsf)           ((BYTE)((tmsf)>>16))
  3634. #define MCI_TMSF_FRAME(tmsf)            ((BYTE)((tmsf)>>24))
  3635.  
  3636. #define MCI_MAKE_TMSF(t, m, s, f)       ( (DWORD)( ( (BYTE)(t)            \
  3637.                                                    | ( (WORD)(m) << 8 )   \
  3638.                                                    )                      \
  3639.                                                  | ( ( (DWORD)(BYTE)(s)   \
  3640.                                                      | ( (WORD)(f) <<8 )  \
  3641.                                                      )                    \
  3642.                                                    << 16                  \
  3643.                                                    )                      \
  3644.                                                  )                        \
  3645.                                         )
  3646.  
  3647. #define MCI_HMS_HOUR(hms)               ((BYTE)(hms))
  3648. #define MCI_HMS_MINUTE(hms)             ((BYTE)(((WORD)(hms)) >> 8))
  3649. #define MCI_HMS_SECOND(hms)             ((BYTE)((hms)>>16))
  3650.  
  3651. #define MCI_MAKE_HMS(h, m, s)           ( (DWORD)( ( (BYTE)(h)            \
  3652.                                                    | ( (WORD)(m) <<8 )    \
  3653.                                                    )                      \
  3654.                                                  | ( ( (DWORD)(BYTE)(s) ) \
  3655.                                                    <<16                   \
  3656.                                                    )                      \
  3657.                                                  )                        \
  3658.                                         )
  3659.  
  3660.  
  3661.  
  3662. /* Flags for wParam of the MM_MCINOTIFY message */
  3663. #define MCI_NOTIFY_SUCCESSFUL           0x0001
  3664. #define MCI_NOTIFY_SUPERSEDED           0x0002
  3665. #define MCI_NOTIFY_ABORTED              0x0004
  3666. #define MCI_NOTIFY_FAILURE              0x0008
  3667.  
  3668. // NOTE: All flags must have an "L" suffix in order to be parsed as
  3669. // DWORDs by the resource compiler
  3670.  
  3671. // common flags for dwFlags parameter of MCI command messages
  3672. #define MCI_NOTIFY                      0x00000001L
  3673. #define MCI_WAIT                        0x00000002L
  3674. #define MCI_FROM                        0x00000004L
  3675. #define MCI_TO                          0x00000008L
  3676. #define MCI_TRACK                       0x00000010L
  3677.  
  3678. // flags for dwFlags parameter of MCI_OPEN command message
  3679. #define MCI_OPEN_SHAREABLE              0x00000100L
  3680. #define MCI_OPEN_ELEMENT                0x00000200L
  3681. #define MCI_OPEN_ALIAS                  0x00000400L
  3682. #define MCI_OPEN_ELEMENT_ID             0x00000800L
  3683. #define MCI_OPEN_TYPE_ID                0x00001000L
  3684. #define MCI_OPEN_TYPE                   0x00002000L
  3685.  
  3686. // flags for dwFlags parameter of MCI_SEEK command message
  3687. #define MCI_SEEK_TO_START               0x00000100L
  3688. #define MCI_SEEK_TO_END                 0x00000200L
  3689.  
  3690. // flags for dwFlags parameter of MCI_STATUS command message
  3691. #define MCI_STATUS_ITEM                 0x00000100L
  3692. #define MCI_STATUS_START                0x00000200L
  3693.  
  3694. // flags for dwItem field of the MCI_STATUS_PARMS parameter block
  3695. #define MCI_STATUS_LENGTH               0x00000001L
  3696. #define MCI_STATUS_POSITION             0x00000002L
  3697. #define MCI_STATUS_NUMBER_OF_TRACKS     0x00000003L
  3698. #define MCI_STATUS_MODE                 0x00000004L
  3699. #define MCI_STATUS_MEDIA_PRESENT        0x00000005L
  3700. #define MCI_STATUS_TIME_FORMAT          0x00000006L
  3701. #define MCI_STATUS_READY                0x00000007L
  3702. #define MCI_STATUS_CURRENT_TRACK        0x00000008L
  3703.  
  3704. // flags for dwFlags parameter of MCI_INFO command message
  3705. #define MCI_INFO_PRODUCT                0x00000100L
  3706. #define MCI_INFO_FILE                   0x00000200L
  3707.  
  3708. // flags for dwFlags parameter of MCI_GETDEVCAPS command message
  3709. #define MCI_GETDEVCAPS_ITEM             0x00000100L
  3710.  
  3711. // flags for dwItem field of the MCI_GETDEVCAPS_PARMS parameter block
  3712. #define MCI_GETDEVCAPS_CAN_RECORD       0x00000001L
  3713. #define MCI_GETDEVCAPS_HAS_AUDIO        0x00000002L
  3714. #define MCI_GETDEVCAPS_HAS_VIDEO        0x00000003L
  3715. #define MCI_GETDEVCAPS_DEVICE_TYPE      0x00000004L
  3716. #define MCI_GETDEVCAPS_USES_FILES       0x00000005L
  3717. #define MCI_GETDEVCAPS_COMPOUND_DEVICE  0x00000006L
  3718. #define MCI_GETDEVCAPS_CAN_EJECT        0x00000007L
  3719. #define MCI_GETDEVCAPS_CAN_PLAY         0x00000008L
  3720. #define MCI_GETDEVCAPS_CAN_SAVE         0x00000009L
  3721.  
  3722. // flags for dwFlags parameter of MCI_SYSINFO command message
  3723. #define MCI_SYSINFO_QUANTITY            0x00000100L
  3724. #define MCI_SYSINFO_OPEN                0x00000200L
  3725. #define MCI_SYSINFO_NAME                0x00000400L
  3726. #define MCI_SYSINFO_INSTALLNAME         0x00000800L
  3727.  
  3728. // flags for dwFlags parameter of MCI_SET command message
  3729. #define MCI_SET_DOOR_OPEN               0x00000100L
  3730. #define MCI_SET_DOOR_CLOSED             0x00000200L
  3731. #define MCI_SET_TIME_FORMAT             0x00000400L
  3732. #define MCI_SET_AUDIO                   0x00000800L
  3733. #define MCI_SET_VIDEO                   0x00001000L
  3734. #define MCI_SET_ON                      0x00002000L
  3735. #define MCI_SET_OFF                     0x00004000L
  3736.  
  3737. // flags for dwAudio field of MCI_SET_PARMS or MCI_SEQ_SET_PARMS
  3738. #define MCI_SET_AUDIO_ALL               0x00004001L
  3739. #define MCI_SET_AUDIO_LEFT              0x00004002L
  3740. #define MCI_SET_AUDIO_RIGHT             0x00004003L
  3741.  
  3742. // flags for dwFlags parameter of MCI_BREAK command message
  3743. #define MCI_BREAK_KEY                   0x00000100L
  3744. #define MCI_BREAK_HWND                  0x00000200L
  3745. #define MCI_BREAK_OFF                   0x00000400L
  3746.  
  3747. // flags for dwFlags parameter of MCI_RECORD command message
  3748. #define MCI_RECORD_INSERT               0x00000100L
  3749. #define MCI_RECORD_OVERWRITE            0x00000200L
  3750.  
  3751. // flags for dwFlags parameter of MCI_SOUND command message
  3752. #define MCI_SOUND_NAME                  0x00000100L
  3753.  
  3754. // flags for dwFlags parameter of MCI_SAVE command message
  3755. #define MCI_SAVE_FILE                   0x00000100L
  3756.  
  3757. // flags for dwFlags parameter of MCI_LOAD command message
  3758. #define MCI_LOAD_FILE                   0x00000100L
  3759.  
  3760. /* Note that some structures below do not have all the fields of the
  3761. // corresponding Win 3.1 structures.  Some reserved WORD sized fields
  3762. // have disappeared.  This is deliberate.  The structures are the same
  3763. // size (with one exception which is two bytes longer).
  3764. //
  3765. // The FIRST entry in each structure must be dwCallback.  A large union
  3766. // could be defined... but...
  3767. */
  3768.  
  3769. // generic parameter block for MCI command messages with no special parameters
  3770. typedef struct tagMCI_GENERIC_PARMS {
  3771.     DWORD   dwCallback;
  3772. } MCI_GENERIC_PARMS;
  3773. typedef MCI_GENERIC_PARMS     *PMCI_GENERIC_PARMS;
  3774. typedef MCI_GENERIC_PARMS     *LPMCI_GENERIC_PARMS;
  3775.  
  3776. // parameter block for MCI_OPEN command message
  3777. typedef struct tagMCI_OPEN_PARMSA {
  3778.     DWORD   dwCallback;
  3779.     MCIDEVICEID wDeviceID;
  3780.     LPCSTR     lpstrDeviceType;
  3781.     LPCSTR     lpstrElementName;
  3782.     LPCSTR     lpstrAlias;
  3783. } MCI_OPEN_PARMSA;
  3784. // parameter block for MCI_OPEN command message
  3785. typedef struct tagMCI_OPEN_PARMSW {
  3786.     DWORD   dwCallback;
  3787.     MCIDEVICEID wDeviceID;
  3788.     LPCWSTR    lpstrDeviceType;
  3789.     LPCWSTR    lpstrElementName;
  3790.     LPCWSTR    lpstrAlias;
  3791. } MCI_OPEN_PARMSW;
  3792. #ifdef UNICODE
  3793. typedef MCI_OPEN_PARMSW MCI_OPEN_PARMS;
  3794. #else
  3795. typedef MCI_OPEN_PARMSA MCI_OPEN_PARMS;
  3796. #endif // UNICODE
  3797. typedef MCI_OPEN_PARMSA     *PMCI_OPEN_PARMSA;
  3798. typedef MCI_OPEN_PARMSW     *PMCI_OPEN_PARMSW;
  3799. #ifdef UNICODE
  3800. typedef PMCI_OPEN_PARMSW PMCI_OPEN_PARMS;
  3801. #else
  3802. typedef PMCI_OPEN_PARMSA PMCI_OPEN_PARMS;
  3803. #endif // UNICODE
  3804. typedef MCI_OPEN_PARMSA     *LPMCI_OPEN_PARMSA;
  3805. typedef MCI_OPEN_PARMSW     *LPMCI_OPEN_PARMSW;
  3806. #ifdef UNICODE
  3807. typedef LPMCI_OPEN_PARMSW LPMCI_OPEN_PARMS;
  3808. #else
  3809. typedef LPMCI_OPEN_PARMSA LPMCI_OPEN_PARMS;
  3810. #endif // UNICODE
  3811.  
  3812. // parameter block for MCI_PLAY command message
  3813. typedef struct tagMCI_PLAY_PARMS {
  3814.     DWORD   dwCallback;
  3815.     DWORD   dwFrom;
  3816.     DWORD   dwTo;
  3817. } MCI_PLAY_PARMS;
  3818. typedef MCI_PLAY_PARMS     *PMCI_PLAY_PARMS;
  3819. typedef MCI_PLAY_PARMS     *LPMCI_PLAY_PARMS;
  3820.  
  3821. // parameter block for MCI_SEEK command message
  3822. typedef struct tagMCI_SEEK_PARMS {
  3823.     DWORD   dwCallback;
  3824.     DWORD   dwTo;
  3825. } MCI_SEEK_PARMS;
  3826. typedef MCI_SEEK_PARMS     *PMCI_SEEK_PARMS;
  3827. typedef MCI_SEEK_PARMS     *LPMCI_SEEK_PARMS;
  3828.  
  3829. // parameter block for MCI_STATUS command message
  3830. typedef struct tagMCI_STATUS_PARMS {
  3831.     DWORD   dwCallback;
  3832.     DWORD   dwReturn;
  3833.     DWORD   dwItem;
  3834.     DWORD   dwTrack;
  3835. } MCI_STATUS_PARMS;
  3836. typedef MCI_STATUS_PARMS     * PMCI_STATUS_PARMS;
  3837. typedef MCI_STATUS_PARMS     * LPMCI_STATUS_PARMS;
  3838.  
  3839. // parameter block for MCI_INFO command message
  3840. typedef struct tagMCI_INFO_PARMSA {
  3841.     DWORD   dwCallback;
  3842.     LPSTR   lpstrReturn;
  3843.     DWORD   dwRetSize;
  3844. } MCI_INFO_PARMSA;
  3845. // parameter block for MCI_INFO command message
  3846. typedef struct tagMCI_INFO_PARMSW {
  3847.     DWORD   dwCallback;
  3848.     LPWSTR  lpstrReturn;
  3849.     DWORD   dwRetSize;
  3850. } MCI_INFO_PARMSW;
  3851. #ifdef UNICODE
  3852. typedef MCI_INFO_PARMSW MCI_INFO_PARMS;
  3853. #else
  3854. typedef MCI_INFO_PARMSA MCI_INFO_PARMS;
  3855. #endif // UNICODE
  3856. typedef MCI_INFO_PARMSA     * PMCI_INFO_PARMSA;
  3857. typedef MCI_INFO_PARMSW     * PMCI_INFO_PARMSW;
  3858. #ifdef UNICODE
  3859. typedef PMCI_INFO_PARMSW PMCI_INFO_PARMS;
  3860. #else
  3861. typedef PMCI_INFO_PARMSA PMCI_INFO_PARMS;
  3862. #endif // UNICODE
  3863. typedef MCI_INFO_PARMSA     * LPMCI_INFO_PARMSA;
  3864. typedef MCI_INFO_PARMSW     * LPMCI_INFO_PARMSW;
  3865. #ifdef UNICODE
  3866. typedef LPMCI_INFO_PARMSW LPMCI_INFO_PARMS;
  3867. #else
  3868. typedef LPMCI_INFO_PARMSA LPMCI_INFO_PARMS;
  3869. #endif // UNICODE
  3870.  
  3871. // parameter block for MCI_GETDEVCAPS command message
  3872. typedef struct tagMCI_GETDEVCAPS_PARMS {
  3873.     DWORD   dwCallback;
  3874.     DWORD   dwReturn;
  3875.     DWORD   dwItem;
  3876. } MCI_GETDEVCAPS_PARMS;
  3877. typedef MCI_GETDEVCAPS_PARMS     * PMCI_GETDEVCAPS_PARMS;
  3878. typedef MCI_GETDEVCAPS_PARMS     * LPMCI_GETDEVCAPS_PARMS;
  3879.  
  3880. // parameter block for MCI_SYSINFO command message
  3881. typedef struct tagMCI_SYSINFO_PARMSA {
  3882.     DWORD   dwCallback;
  3883.     LPSTR   lpstrReturn;
  3884.     DWORD   dwRetSize;
  3885.     DWORD   dwNumber;
  3886.     UINT    wDeviceType;
  3887. } MCI_SYSINFO_PARMSA;
  3888. // parameter block for MCI_SYSINFO command message
  3889. typedef struct tagMCI_SYSINFO_PARMSW {
  3890.     DWORD   dwCallback;
  3891.     LPWSTR  lpstrReturn;
  3892.     DWORD   dwRetSize;
  3893.     DWORD   dwNumber;
  3894.     UINT    wDeviceType;
  3895. } MCI_SYSINFO_PARMSW;
  3896. #ifdef UNICODE
  3897. typedef MCI_SYSINFO_PARMSW MCI_SYSINFO_PARMS;
  3898. #else
  3899. typedef MCI_SYSINFO_PARMSA MCI_SYSINFO_PARMS;
  3900. #endif // UNICODE
  3901. typedef MCI_SYSINFO_PARMSA     *PMCI_SYSINFO_PARMSA;
  3902. typedef MCI_SYSINFO_PARMSW     *PMCI_SYSINFO_PARMSW;
  3903. #ifdef UNICODE
  3904. typedef PMCI_SYSINFO_PARMSW PMCI_SYSINFO_PARMS;
  3905. #else
  3906. typedef PMCI_SYSINFO_PARMSA PMCI_SYSINFO_PARMS;
  3907. #endif // UNICODE
  3908. typedef MCI_SYSINFO_PARMSA     *LPMCI_SYSINFO_PARMSA;
  3909. typedef MCI_SYSINFO_PARMSW     *LPMCI_SYSINFO_PARMSW;
  3910. #ifdef UNICODE
  3911. typedef LPMCI_SYSINFO_PARMSW LPMCI_SYSINFO_PARMS;
  3912. #else
  3913. typedef LPMCI_SYSINFO_PARMSA LPMCI_SYSINFO_PARMS;
  3914. #endif // UNICODE
  3915.  
  3916. // parameter block for MCI_SET command message
  3917. typedef struct tagMCI_SET_PARMS {
  3918.     DWORD   dwCallback;
  3919.     DWORD   dwTimeFormat;
  3920.     DWORD   dwAudio;
  3921. } MCI_SET_PARMS;
  3922. typedef MCI_SET_PARMS     *PMCI_SET_PARMS;
  3923. typedef MCI_SET_PARMS     *LPMCI_SET_PARMS;
  3924.  
  3925. // parameter block for MCI_BREAK command message
  3926. typedef struct tagMCI_BREAK_PARMS {
  3927.     DWORD   dwCallback;
  3928.     int     nVirtKey;
  3929.     HWND    hwndBreak;
  3930. } MCI_BREAK_PARMS;
  3931. typedef MCI_BREAK_PARMS     * PMCI_BREAK_PARMS;
  3932. typedef MCI_BREAK_PARMS     * LPMCI_BREAK_PARMS;
  3933.  
  3934. // parameter block for MCI_SOUND command message
  3935. typedef struct tagMCI_SOUND_PARMSA {
  3936.     DWORD   dwCallback;
  3937.     LPCSTR   lpstrSoundName;
  3938. } MCI_SOUND_PARMSA;
  3939. // parameter block for MCI_SOUND command message
  3940. typedef struct tagMCI_SOUND_PARMSW {
  3941.     DWORD   dwCallback;
  3942.     LPCWSTR  lpstrSoundName;
  3943. } MCI_SOUND_PARMSW;
  3944. #ifdef UNICODE
  3945. typedef MCI_SOUND_PARMSW MCI_SOUND_PARMS;
  3946. #else
  3947. typedef MCI_SOUND_PARMSA MCI_SOUND_PARMS;
  3948. #endif // UNICODE
  3949. typedef MCI_SOUND_PARMSA     *PMCI_SOUND_PARMSA;
  3950. typedef MCI_SOUND_PARMSW     *PMCI_SOUND_PARMSW;
  3951. #ifdef UNICODE
  3952. typedef PMCI_SOUND_PARMSW PMCI_SOUND_PARMS;
  3953. #else
  3954. typedef PMCI_SOUND_PARMSA PMCI_SOUND_PARMS;
  3955. #endif // UNICODE
  3956. typedef MCI_SOUND_PARMSA     *LPMCI_SOUND_PARMSA;
  3957. typedef MCI_SOUND_PARMSW     *LPMCI_SOUND_PARMSW;
  3958. #ifdef UNICODE
  3959. typedef LPMCI_SOUND_PARMSW LPMCI_SOUND_PARMS;
  3960. #else
  3961. typedef LPMCI_SOUND_PARMSA LPMCI_SOUND_PARMS;
  3962. #endif // UNICODE
  3963.  
  3964. // parameter block for MCI_SAVE command message
  3965. typedef struct tagMCI_SAVE_PARMSA {
  3966.     DWORD    dwCallback;
  3967.     LPCSTR    lpfilename;
  3968. } MCI_SAVE_PARMSA;
  3969. // parameter block for MCI_SAVE command message
  3970. typedef struct tagMCI_SAVE_PARMSW {
  3971.     DWORD    dwCallback;
  3972.     LPCWSTR   lpfilename;
  3973. } MCI_SAVE_PARMSW;
  3974. #ifdef UNICODE
  3975. typedef MCI_SAVE_PARMSW MCI_SAVE_PARMS;
  3976. #else
  3977. typedef MCI_SAVE_PARMSA MCI_SAVE_PARMS;
  3978. #endif // UNICODE
  3979. typedef MCI_SAVE_PARMSA     *PMCI_SAVE_PARMSA;
  3980. typedef MCI_SAVE_PARMSW     *PMCI_SAVE_PARMSW;
  3981. #ifdef UNICODE
  3982. typedef PMCI_SAVE_PARMSW PMCI_SAVE_PARMS;
  3983. #else
  3984. typedef PMCI_SAVE_PARMSA PMCI_SAVE_PARMS;
  3985. #endif // UNICODE
  3986. typedef MCI_SAVE_PARMSA     *LPMCI_SAVE_PARMSA;
  3987. typedef MCI_SAVE_PARMSW     *LPMCI_SAVE_PARMSW;
  3988. #ifdef UNICODE
  3989. typedef LPMCI_SAVE_PARMSW LPMCI_SAVE_PARMS;
  3990. #else
  3991. typedef LPMCI_SAVE_PARMSA LPMCI_SAVE_PARMS;
  3992. #endif // UNICODE
  3993.  
  3994. // parameter block for MCI_LOAD command message
  3995. typedef struct tagMCI_LOAD_PARMSA {
  3996.     DWORD   dwCallback;
  3997.     LPCSTR   lpfilename;
  3998. } MCI_LOAD_PARMSA;
  3999. // parameter block for MCI_LOAD command message
  4000. typedef struct tagMCI_LOAD_PARMSW {
  4001.     DWORD   dwCallback;
  4002.     LPCWSTR  lpfilename;
  4003. } MCI_LOAD_PARMSW;
  4004. #ifdef UNICODE
  4005. typedef MCI_LOAD_PARMSW MCI_LOAD_PARMS;
  4006. #else
  4007. typedef MCI_LOAD_PARMSA MCI_LOAD_PARMS;
  4008. #endif // UNICODE
  4009. typedef MCI_LOAD_PARMSA     *PMCI_LOAD_PARMSA;
  4010. typedef MCI_LOAD_PARMSW     *PMCI_LOAD_PARMSW;
  4011. #ifdef UNICODE
  4012. typedef PMCI_LOAD_PARMSW PMCI_LOAD_PARMS;
  4013. #else
  4014. typedef PMCI_LOAD_PARMSA PMCI_LOAD_PARMS;
  4015. #endif // UNICODE
  4016. typedef MCI_LOAD_PARMSA     *LPMCI_LOAD_PARMSA;
  4017. typedef MCI_LOAD_PARMSW     *LPMCI_LOAD_PARMSW;
  4018. #ifdef UNICODE
  4019. typedef LPMCI_LOAD_PARMSW LPMCI_LOAD_PARMS;
  4020. #else
  4021. typedef LPMCI_LOAD_PARMSA LPMCI_LOAD_PARMS;
  4022. #endif // UNICODE
  4023.  
  4024. // parameter block for MCI_RECORD command message
  4025. typedef struct tagMCI_RECORD_PARMS {
  4026.     DWORD   dwCallback;
  4027.     DWORD   dwFrom;
  4028.     DWORD   dwTo;
  4029. } MCI_RECORD_PARMS;
  4030. typedef MCI_RECORD_PARMS     *PMCI_RECORD_PARMS;
  4031. typedef MCI_RECORD_PARMS     *LPMCI_RECORD_PARMS;
  4032.  
  4033. /*****************************************************************************
  4034. *    Standard command parameters for videodisc drivers                       *
  4035. *****************************************************************************/
  4036.  
  4037. // string resource ID's for videodisc players
  4038. // return ID's for videodisc status command
  4039. // flag for dwReturn field of MCI_STATUS_PARMS
  4040. // MCI_STATUS command, (dwItem == MCI_STATUS_MODE)
  4041. #define MCI_VD_MODE_PARK                (MCI_VD_OFFSET + 1)
  4042.  
  4043. // return ID's for videodisc MCI_GETDEVCAPS command
  4044.  
  4045. // flag for dwReturn field of MCI_STATUS_PARMS
  4046. // MCI_STATUS command, (dwItem == MCI_VD_STATUS_MEDIA_TYPE)
  4047. #define MCI_VD_MEDIA_CLV                (MCI_VD_OFFSET + 2)
  4048. #define MCI_VD_MEDIA_CAV                (MCI_VD_OFFSET + 3)
  4049. #define MCI_VD_MEDIA_OTHER              (MCI_VD_OFFSET + 4)
  4050.  
  4051. #define MCI_VD_FORMAT_TRACK             0x4001
  4052.  
  4053. // flags for dwFlags parameter of MCI_PLAY command message
  4054. #define MCI_VD_PLAY_REVERSE             0x00010000L
  4055. #define MCI_VD_PLAY_FAST                0x00020000L
  4056. #define MCI_VD_PLAY_SPEED               0x00040000L
  4057. #define MCI_VD_PLAY_SCAN                0x00080000L
  4058. #define MCI_VD_PLAY_SLOW                0x00100000L
  4059.  
  4060. // flag for dwFlags parameter of MCI_SEEK command message
  4061. #define MCI_VD_SEEK_REVERSE             0x00010000L
  4062.  
  4063. // flags for dwItem field of MCI_STATUS_PARMS parameter block
  4064. #define MCI_VD_STATUS_SPEED             0x00004002L
  4065. #define MCI_VD_STATUS_FORWARD           0x00004003L
  4066. #define MCI_VD_STATUS_MEDIA_TYPE        0x00004004L
  4067. #define MCI_VD_STATUS_SIDE              0x00004005L
  4068. #define MCI_VD_STATUS_DISC_SIZE         0x00004006L
  4069.  
  4070. // flags for dwFlags parameter of MCI_GETDEVCAPS command message
  4071. #define MCI_VD_GETDEVCAPS_CLV           0x00010000L
  4072. #define MCI_VD_GETDEVCAPS_CAV           0x00020000L
  4073.  
  4074. #define MCI_VD_SPIN_UP                  0x00010000L
  4075. #define MCI_VD_SPIN_DOWN                0x00020000L
  4076.  
  4077. // flags for dwItem field of MCI_GETDEVCAPS_PARMS parameter block
  4078. #define MCI_VD_GETDEVCAPS_CAN_REVERSE   0x00004002L
  4079. #define MCI_VD_GETDEVCAPS_FAST_RATE     0x00004003L
  4080. #define MCI_VD_GETDEVCAPS_SLOW_RATE     0x00004004L
  4081. #define MCI_VD_GETDEVCAPS_NORMAL_RATE   0x00004005L
  4082.  
  4083. // flags for the dwFlags parameter of MCI_STEP command message
  4084. #define MCI_VD_STEP_FRAMES              0x00010000L
  4085. #define MCI_VD_STEP_REVERSE             0x00020000L
  4086.  
  4087. // flag for the MCI_ESCAPE command message
  4088. #define MCI_VD_ESCAPE_STRING            0x00000100L
  4089.  
  4090. // parameter block for MCI_PLAY command message
  4091. typedef struct tagMCI_VD_PLAY_PARMS {
  4092.     DWORD   dwCallback;
  4093.     DWORD   dwFrom;
  4094.     DWORD   dwTo;
  4095.     DWORD   dwSpeed;
  4096. } MCI_VD_PLAY_PARMS;
  4097. typedef MCI_VD_PLAY_PARMS     *PMCI_VD_PLAY_PARMS;
  4098. typedef MCI_VD_PLAY_PARMS     *LPMCI_VD_PLAY_PARMS;
  4099.  
  4100. // parameter block for MCI_STEP command message
  4101. typedef struct tagMCI_VD_STEP_PARMS {
  4102.     DWORD   dwCallback;
  4103.     DWORD   dwFrames;
  4104. } MCI_VD_STEP_PARMS;
  4105. typedef MCI_VD_STEP_PARMS     *PMCI_VD_STEP_PARMS;
  4106. typedef MCI_VD_STEP_PARMS     *LPMCI_VD_STEP_PARMS;
  4107.  
  4108. // parameter block for MCI_ESCAPE command message
  4109. typedef struct tagMCI_VD_ESCAPE_PARMSA {
  4110.     DWORD   dwCallback;
  4111.     LPCSTR    lpstrCommand;
  4112. } MCI_VD_ESCAPE_PARMSA;
  4113. // parameter block for MCI_ESCAPE command message
  4114. typedef struct tagMCI_VD_ESCAPE_PARMSW {
  4115.     DWORD   dwCallback;
  4116.     LPCWSTR   lpstrCommand;
  4117. } MCI_VD_ESCAPE_PARMSW;
  4118. #ifdef UNICODE
  4119. typedef MCI_VD_ESCAPE_PARMSW MCI_VD_ESCAPE_PARMS;
  4120. #else
  4121. typedef MCI_VD_ESCAPE_PARMSA MCI_VD_ESCAPE_PARMS;
  4122. #endif // UNICODE
  4123. typedef MCI_VD_ESCAPE_PARMSA     *PMCI_VD_ESCAPE_PARMSA;
  4124. typedef MCI_VD_ESCAPE_PARMSW     *PMCI_VD_ESCAPE_PARMSW;
  4125. #ifdef UNICODE
  4126. typedef PMCI_VD_ESCAPE_PARMSW PMCI_VD_ESCAPE_PARMS;
  4127. #else
  4128. typedef PMCI_VD_ESCAPE_PARMSA PMCI_VD_ESCAPE_PARMS;
  4129. #endif // UNICODE
  4130. typedef MCI_VD_ESCAPE_PARMSA     *LPMCI_VD_ESCAPE_PARMSA;
  4131. typedef MCI_VD_ESCAPE_PARMSW     *LPMCI_VD_ESCAPE_PARMSW;
  4132. #ifdef UNICODE
  4133. typedef LPMCI_VD_ESCAPE_PARMSW LPMCI_VD_ESCAPE_PARMS;
  4134. #else
  4135. typedef LPMCI_VD_ESCAPE_PARMSA LPMCI_VD_ESCAPE_PARMS;
  4136. #endif // UNICODE
  4137.  
  4138. /*****************************************************************************
  4139. *   Standard command parameters for waveform audio drivers
  4140. *****************************************************************************/
  4141.  
  4142. #define MCI_WAVE_PCM            (MCI_WAVE_OFFSET+0)
  4143. #define MCI_WAVE_MAPPER         (MCI_WAVE_OFFSET+1)
  4144.  
  4145. // flags for the dwFlags parameter of MCI_OPEN command message
  4146. #define MCI_WAVE_OPEN_BUFFER            0x00010000L
  4147.  
  4148. // flags for the dwFlags parameter of MCI_SET command message
  4149. #define MCI_WAVE_SET_FORMATTAG          0x00010000L
  4150. #define MCI_WAVE_SET_CHANNELS           0x00020000L
  4151. #define MCI_WAVE_SET_SAMPLESPERSEC      0x00040000L
  4152. #define MCI_WAVE_SET_AVGBYTESPERSEC     0x00080000L
  4153. #define MCI_WAVE_SET_BLOCKALIGN         0x00100000L
  4154. #define MCI_WAVE_SET_BITSPERSAMPLE      0x00200000L
  4155.  
  4156. // flags for the dwFlags parameter of MCI_STATUS, MCI_SET command messages
  4157. #define MCI_WAVE_INPUT                  0x00400000L
  4158. #define MCI_WAVE_OUTPUT                 0x00800000L
  4159.  
  4160. // flags for the dwItem field of MCI_STATUS_PARMS parameter block
  4161. #define MCI_WAVE_STATUS_FORMATTAG       0x00004001L
  4162. #define MCI_WAVE_STATUS_CHANNELS        0x00004002L
  4163. #define MCI_WAVE_STATUS_SAMPLESPERSEC   0x00004003L
  4164. #define MCI_WAVE_STATUS_AVGBYTESPERSEC  0x00004004L
  4165. #define MCI_WAVE_STATUS_BLOCKALIGN      0x00004005L
  4166. #define MCI_WAVE_STATUS_BITSPERSAMPLE   0x00004006L
  4167. #define MCI_WAVE_STATUS_LEVEL           0x00004007L
  4168.  
  4169. // flags for the dwFlags parameter of MCI_SET command message
  4170. #define MCI_WAVE_SET_ANYINPUT           0x04000000L
  4171. #define MCI_WAVE_SET_ANYOUTPUT          0x08000000L
  4172.  
  4173. // flags for the dwFlags parameter of MCI_GETDEVCAPS command message
  4174. #define MCI_WAVE_GETDEVCAPS_INPUTS      0x00004001L
  4175. #define MCI_WAVE_GETDEVCAPS_OUTPUTS     0x00004002L
  4176.  
  4177. // parameter block for MCI_OPEN command message
  4178. typedef struct tagMCI_WAVE_OPEN_PARMSA {
  4179.     DWORD   dwCallback;
  4180.     MCIDEVICEID wDeviceID;
  4181.     LPCSTR    lpstrDeviceType;
  4182.     LPCSTR    lpstrElementName;
  4183.     LPCSTR    lpstrAlias;
  4184.     DWORD   dwBufferSeconds;
  4185. } MCI_WAVE_OPEN_PARMSA;
  4186. // parameter block for MCI_OPEN command message
  4187. typedef struct tagMCI_WAVE_OPEN_PARMSW {
  4188.     DWORD   dwCallback;
  4189.     MCIDEVICEID wDeviceID;
  4190.     LPCWSTR   lpstrDeviceType;
  4191.     LPCWSTR   lpstrElementName;
  4192.     LPCWSTR   lpstrAlias;
  4193.     DWORD   dwBufferSeconds;
  4194. } MCI_WAVE_OPEN_PARMSW;
  4195. #ifdef UNICODE
  4196. typedef MCI_WAVE_OPEN_PARMSW MCI_WAVE_OPEN_PARMS;
  4197. #else
  4198. typedef MCI_WAVE_OPEN_PARMSA MCI_WAVE_OPEN_PARMS;
  4199. #endif // UNICODE
  4200. typedef MCI_WAVE_OPEN_PARMSA     *PMCI_WAVE_OPEN_PARMSA;
  4201. typedef MCI_WAVE_OPEN_PARMSW     *PMCI_WAVE_OPEN_PARMSW;
  4202. #ifdef UNICODE
  4203. typedef PMCI_WAVE_OPEN_PARMSW PMCI_WAVE_OPEN_PARMS;
  4204. #else
  4205. typedef PMCI_WAVE_OPEN_PARMSA PMCI_WAVE_OPEN_PARMS;
  4206. #endif // UNICODE
  4207. typedef MCI_WAVE_OPEN_PARMSA     *LPMCI_WAVE_OPEN_PARMSA;
  4208. typedef MCI_WAVE_OPEN_PARMSW     *LPMCI_WAVE_OPEN_PARMSW;
  4209. #ifdef UNICODE
  4210. typedef LPMCI_WAVE_OPEN_PARMSW LPMCI_WAVE_OPEN_PARMS;
  4211. #else
  4212. typedef LPMCI_WAVE_OPEN_PARMSA LPMCI_WAVE_OPEN_PARMS;
  4213. #endif // UNICODE
  4214.  
  4215. // parameter block for MCI_DELETE command message
  4216. typedef struct tagMCI_WAVE_DELETE_PARMS {
  4217.     DWORD   dwCallback;
  4218.     DWORD   dwFrom;
  4219.     DWORD   dwTo;
  4220. } MCI_WAVE_DELETE_PARMS;
  4221. typedef MCI_WAVE_DELETE_PARMS     *PMCI_WAVE_DELETE_PARMS;
  4222. typedef MCI_WAVE_DELETE_PARMS     *LPMCI_WAVE_DELETE_PARMS;
  4223.  
  4224. // parameter block for MCI_SET command message
  4225. typedef struct tagMCI_WAVE_SET_PARMS {
  4226.     DWORD   dwCallback;
  4227.     DWORD   dwTimeFormat;
  4228.     DWORD   dwAudio;
  4229.     UINT    wInput;
  4230.     UINT    wOutput;
  4231.     WORD    wFormatTag;                // corresponds to WAVEFORMAT structure
  4232.     WORD    wReserved2;
  4233.     WORD    nChannels;                 // corresponds to WAVEFORMAT structure
  4234.     WORD    wReserved3;
  4235.     DWORD   nSamplesPerSec;
  4236.     DWORD   nAvgBytesPerSec;
  4237.     WORD    nBlockAlign;               // corresponds to WAVEFORMAT structure
  4238.     WORD    wReserved4;
  4239.     WORD    wBitsPerSample;            // corresponds to PCMWAVEFORMAT structure
  4240.     WORD    wReserved5;
  4241. } MCI_WAVE_SET_PARMS;
  4242. typedef MCI_WAVE_SET_PARMS     * PMCI_WAVE_SET_PARMS;
  4243. typedef MCI_WAVE_SET_PARMS     * LPMCI_WAVE_SET_PARMS;
  4244.  
  4245. /*****************************************************************************
  4246. *   Standard command parameters for CD audio drivers
  4247. *****************************************************************************/
  4248.  
  4249. // None
  4250.  
  4251. /*****************************************************************************
  4252. *        Standard command parameters for Sequencer drivers
  4253. *****************************************************************************/
  4254.  
  4255. // string resource ID's for sequencers
  4256. // return ids for status division type
  4257.  
  4258. // flags for the dwReturn field of MCI_STATUS_PARMS parameter block
  4259. // MCI_STATUS command, (dwItem == MCI_SEQ_STATUS_DIVTYPE)
  4260. #define     MCI_SEQ_DIV_PPQN              (0 + MCI_SEQ_OFFSET)
  4261. #define     MCI_SEQ_DIV_SMPTE_24        (1 + MCI_SEQ_OFFSET)
  4262. #define     MCI_SEQ_DIV_SMPTE_25        (2 + MCI_SEQ_OFFSET)
  4263. #define     MCI_SEQ_DIV_SMPTE_30DROP    (3 + MCI_SEQ_OFFSET)
  4264. #define     MCI_SEQ_DIV_SMPTE_30        (4 + MCI_SEQ_OFFSET)
  4265.  
  4266. // flags for the dwMaster field of MCI_SEQ_SET_PARMS parameter block
  4267. // MCI_SET command, (dwFlags == MCI_SEQ_SET_MASTER)
  4268. #define     MCI_SEQ_FORMAT_SONGPTR      0x4001
  4269. #define     MCI_SEQ_FILE                0x4002
  4270. #define     MCI_SEQ_MIDI                0x4003
  4271. #define     MCI_SEQ_SMPTE               0x4004
  4272. #define     MCI_SEQ_NONE                65533
  4273.  
  4274. #define     MCI_SEQ_MAPPER          65535
  4275.  
  4276. // flags for the dwItem field of MCI_STATUS_PARMS parameter block
  4277. #define MCI_SEQ_STATUS_TEMPO              0x00004002L
  4278. #define MCI_SEQ_STATUS_PORT              0x00004003L
  4279. #define MCI_SEQ_STATUS_SLAVE             0x00004007L
  4280. #define MCI_SEQ_STATUS_MASTER           0x00004008L
  4281. #define MCI_SEQ_STATUS_OFFSET             0x00004009L
  4282. #define MCI_SEQ_STATUS_DIVTYPE          0x0000400AL
  4283.  
  4284. // flags for the dwFlags parameter of MCI_SET command message
  4285. #define MCI_SEQ_SET_TEMPO                 0x00010000L
  4286. #define MCI_SEQ_SET_PORT                  0x00020000L
  4287. #define MCI_SEQ_SET_SLAVE               0x00040000L
  4288. #define MCI_SEQ_SET_MASTER              0x00080000L
  4289. #define MCI_SEQ_SET_OFFSET                0x01000000L
  4290.  
  4291. // parameter block for MCI_SET command message
  4292. typedef struct tagMCI_SEQ_SET_PARMS {
  4293.     DWORD   dwCallback;
  4294.     DWORD   dwTimeFormat;
  4295.     DWORD   dwAudio;
  4296.     DWORD   dwTempo;
  4297.     DWORD   dwPort;
  4298.     DWORD   dwSlave;
  4299.     DWORD   dwMaster;
  4300.     DWORD   dwOffset;
  4301. } MCI_SEQ_SET_PARMS;
  4302. typedef MCI_SEQ_SET_PARMS     * PMCI_SEQ_SET_PARMS;
  4303. typedef MCI_SEQ_SET_PARMS     * LPMCI_SEQ_SET_PARMS;
  4304.  
  4305. /*****************************************************************************
  4306. *      Standard command parameters for animation
  4307. *****************************************************************************/
  4308.  
  4309.  
  4310. // flags for dwFlags parameter of MCI_OPEN command message
  4311. #define MCI_ANIM_OPEN_WS                0x00010000L
  4312. #define MCI_ANIM_OPEN_PARENT            0x00020000L
  4313. #define MCI_ANIM_OPEN_NOSTATIC          0x00040000L
  4314.  
  4315. // flags for dwFlags parameter of MCI_PLAY command message
  4316. #define MCI_ANIM_PLAY_SPEED             0x00010000L
  4317. #define MCI_ANIM_PLAY_REVERSE           0x00020000L
  4318. #define MCI_ANIM_PLAY_FAST              0x00040000L
  4319. #define MCI_ANIM_PLAY_SLOW              0x00080000L
  4320. #define MCI_ANIM_PLAY_SCAN              0x00100000L
  4321.  
  4322. // flags for dwFlags parameter of MCI_STEP command message
  4323. #define MCI_ANIM_STEP_REVERSE           0x00010000L
  4324. #define MCI_ANIM_STEP_FRAMES            0x00020000L
  4325.  
  4326. // flags for dwItem field of MCI_STATUS_PARMS parameter block
  4327. #define MCI_ANIM_STATUS_SPEED           0x00004001L
  4328. #define MCI_ANIM_STATUS_FORWARD         0x00004002L
  4329. #define MCI_ANIM_STATUS_HWND            0x00004003L
  4330. #define MCI_ANIM_STATUS_HPAL            0x00004004L
  4331. #define MCI_ANIM_STATUS_STRETCH         0x00004005L
  4332.  
  4333. // flags for the dwFlags parameter of MCI_INFO command message
  4334. #define MCI_ANIM_INFO_TEXT              0x00010000L
  4335.  
  4336. // flags for dwItem field of MCI_GETDEVCAPS_PARMS parameter block
  4337. #define MCI_ANIM_GETDEVCAPS_CAN_REVERSE 0x00004001L
  4338. #define MCI_ANIM_GETDEVCAPS_FAST_RATE   0x00004002L
  4339. #define MCI_ANIM_GETDEVCAPS_SLOW_RATE   0x00004003L
  4340. #define MCI_ANIM_GETDEVCAPS_NORMAL_RATE 0x00004004L
  4341. #define MCI_ANIM_GETDEVCAPS_PALETTES    0x00004006L
  4342. #define MCI_ANIM_GETDEVCAPS_CAN_STRETCH 0x00004007L
  4343. #define MCI_ANIM_GETDEVCAPS_MAX_WINDOWS 0x00004008L
  4344.  
  4345. // flags for the MCI_REALIZE command message
  4346. #define MCI_ANIM_REALIZE_NORM           0x00010000L
  4347. #define MCI_ANIM_REALIZE_BKGD           0x00020000L
  4348.  
  4349. // flags for dwFlags parameter of MCI_WINDOW command message
  4350. #define MCI_ANIM_WINDOW_HWND            0x00010000L
  4351. #define MCI_ANIM_WINDOW_STATE           0x00040000L
  4352. #define MCI_ANIM_WINDOW_TEXT            0x00080000L
  4353. #define MCI_ANIM_WINDOW_ENABLE_STRETCH  0x00100000L
  4354. #define MCI_ANIM_WINDOW_DISABLE_STRETCH 0x00200000L
  4355.  
  4356. // flags for hWnd field of MCI_ANIM_WINDOW_PARMS parameter block
  4357. // MCI_WINDOW command message, (dwFlags == MCI_ANIM_WINDOW_HWND)
  4358. #define MCI_ANIM_WINDOW_DEFAULT         0x00000000L
  4359.  
  4360. // flags for dwFlags parameter of MCI_PUT command message
  4361. #define MCI_ANIM_RECT                   0x00010000L
  4362. #define MCI_ANIM_PUT_SOURCE             0x00020000L  // also  MCI_WHERE
  4363. #define MCI_ANIM_PUT_DESTINATION        0x00040000L  // also  MCI_WHERE
  4364.  
  4365. // flags for dwFlags parameter of MCI_WHERE command message
  4366. #define MCI_ANIM_WHERE_SOURCE           0x00020000L
  4367. #define MCI_ANIM_WHERE_DESTINATION      0x00040000L
  4368.  
  4369. // flags for dwFlags parameter of MCI_UPDATE command message
  4370. #define MCI_ANIM_UPDATE_HDC             0x00020000L
  4371.  
  4372. // parameter block for MCI_OPEN command message
  4373. typedef struct tagMCI_ANIM_OPEN_PARMSA {
  4374.     DWORD   dwCallback;
  4375.     MCIDEVICEID wDeviceID;
  4376.     LPCSTR    lpstrDeviceType;
  4377.     LPCSTR    lpstrElementName;
  4378.     LPCSTR    lpstrAlias;
  4379.     DWORD   dwStyle;
  4380.     HWND    hWndParent;
  4381. } MCI_ANIM_OPEN_PARMSA;
  4382. // parameter block for MCI_OPEN command message
  4383. typedef struct tagMCI_ANIM_OPEN_PARMSW {
  4384.     DWORD   dwCallback;
  4385.     MCIDEVICEID wDeviceID;
  4386.     LPCWSTR   lpstrDeviceType;
  4387.     LPCWSTR   lpstrElementName;
  4388.     LPCWSTR   lpstrAlias;
  4389.     DWORD   dwStyle;
  4390.     HWND    hWndParent;
  4391. } MCI_ANIM_OPEN_PARMSW;
  4392. #ifdef UNICODE
  4393. typedef MCI_ANIM_OPEN_PARMSW MCI_ANIM_OPEN_PARMS;
  4394. #else
  4395. typedef MCI_ANIM_OPEN_PARMSA MCI_ANIM_OPEN_PARMS;
  4396. #endif // UNICODE
  4397. typedef MCI_ANIM_OPEN_PARMSA     *PMCI_ANIM_OPEN_PARMSA;
  4398. typedef MCI_ANIM_OPEN_PARMSW     *PMCI_ANIM_OPEN_PARMSW;
  4399. #ifdef UNICODE
  4400. typedef PMCI_ANIM_OPEN_PARMSW PMCI_ANIM_OPEN_PARMS;
  4401. #else
  4402. typedef PMCI_ANIM_OPEN_PARMSA PMCI_ANIM_OPEN_PARMS;
  4403. #endif // UNICODE
  4404. typedef MCI_ANIM_OPEN_PARMSA     *LPMCI_ANIM_OPEN_PARMSA;
  4405. typedef MCI_ANIM_OPEN_PARMSW     *LPMCI_ANIM_OPEN_PARMSW;
  4406. #ifdef UNICODE
  4407. typedef LPMCI_ANIM_OPEN_PARMSW LPMCI_ANIM_OPEN_PARMS;
  4408. #else
  4409. typedef LPMCI_ANIM_OPEN_PARMSA LPMCI_ANIM_OPEN_PARMS;
  4410. #endif // UNICODE
  4411.  
  4412. // parameter block for MCI_PLAY command message
  4413. typedef struct tagMCI_ANIM_PLAY_PARMS {
  4414.     DWORD   dwCallback;
  4415.     DWORD   dwFrom;
  4416.     DWORD   dwTo;
  4417.     DWORD   dwSpeed;
  4418. } MCI_ANIM_PLAY_PARMS;
  4419. typedef MCI_ANIM_PLAY_PARMS     *PMCI_ANIM_PLAY_PARMS;
  4420. typedef MCI_ANIM_PLAY_PARMS     *LPMCI_ANIM_PLAY_PARMS;
  4421.  
  4422. // parameter block for MCI_STEP command message
  4423. typedef struct tagMCI_ANIM_STEP_PARMS {
  4424.     DWORD   dwCallback;
  4425.     DWORD   dwFrames;
  4426. } MCI_ANIM_STEP_PARMS;
  4427. typedef MCI_ANIM_STEP_PARMS     *PMCI_ANIM_STEP_PARMS;
  4428. typedef MCI_ANIM_STEP_PARMS     *LPMCI_ANIM_STEP_PARMS;
  4429.  
  4430. // parameter block for MCI_WINDOW command message
  4431. typedef struct tagMCI_ANIM_WINDOW_PARMSA {
  4432.     DWORD   dwCallback;
  4433.     HWND    hWnd;
  4434.     UINT    nCmdShow;
  4435.     LPCSTR   lpstrText;
  4436. } MCI_ANIM_WINDOW_PARMSA;
  4437. // parameter block for MCI_WINDOW command message
  4438. typedef struct tagMCI_ANIM_WINDOW_PARMSW {
  4439.     DWORD   dwCallback;
  4440.     HWND    hWnd;
  4441.     UINT    nCmdShow;
  4442.     LPCWSTR  lpstrText;
  4443. } MCI_ANIM_WINDOW_PARMSW;
  4444. #ifdef UNICODE
  4445. typedef MCI_ANIM_WINDOW_PARMSW MCI_ANIM_WINDOW_PARMS;
  4446. #else
  4447. typedef MCI_ANIM_WINDOW_PARMSA MCI_ANIM_WINDOW_PARMS;
  4448. #endif // UNICODE
  4449. typedef MCI_ANIM_WINDOW_PARMSA     * PMCI_ANIM_WINDOW_PARMSA;
  4450. typedef MCI_ANIM_WINDOW_PARMSW     * PMCI_ANIM_WINDOW_PARMSW;
  4451. #ifdef UNICODE
  4452. typedef PMCI_ANIM_WINDOW_PARMSW PMCI_ANIM_WINDOW_PARMS;
  4453. #else
  4454. typedef PMCI_ANIM_WINDOW_PARMSA PMCI_ANIM_WINDOW_PARMS;
  4455. #endif // UNICODE
  4456. typedef MCI_ANIM_WINDOW_PARMSA     * LPMCI_ANIM_WINDOW_PARMSA;
  4457. typedef MCI_ANIM_WINDOW_PARMSW     * LPMCI_ANIM_WINDOW_PARMSW;
  4458. #ifdef UNICODE
  4459. typedef LPMCI_ANIM_WINDOW_PARMSW LPMCI_ANIM_WINDOW_PARMS;
  4460. #else
  4461. typedef LPMCI_ANIM_WINDOW_PARMSA LPMCI_ANIM_WINDOW_PARMS;
  4462. #endif // UNICODE
  4463.  
  4464. // parameter block for MCI_PUT, MCI_UPDATE, MCI_WHERE command messages
  4465. typedef struct tagMCI_ANIM_RECT_PARMS {
  4466.     DWORD   dwCallback;
  4467. #ifdef MCI_USE_OFFEXT
  4468.     POINT   ptOffset;
  4469.     POINT   ptExtent;
  4470. #else   //ifdef MCI_USE_OFFEXT
  4471.     RECT    rc;
  4472. #endif  //ifdef MCI_USE_OFFEXT
  4473. } MCI_ANIM_RECT_PARMS;
  4474. typedef MCI_ANIM_RECT_PARMS     * PMCI_ANIM_RECT_PARMS;
  4475. typedef MCI_ANIM_RECT_PARMS     * LPMCI_ANIM_RECT_PARMS;
  4476.  
  4477. // parameter block for MCI_UPDATE PARMS
  4478. typedef struct tagMCI_ANIM_UPDATE_PARMS {
  4479.     DWORD   dwCallback;
  4480.     RECT    rc;
  4481.     HDC     hDC;
  4482. } MCI_ANIM_UPDATE_PARMS;
  4483. typedef MCI_ANIM_UPDATE_PARMS     * PMCI_ANIM_UPDATE_PARMS;
  4484. typedef MCI_ANIM_UPDATE_PARMS     * LPMCI_ANIM_UPDATE_PARMS;
  4485.  
  4486.  
  4487. /*****************************************************************************
  4488.  
  4489.     Standard command parameters for overlay
  4490.  
  4491. *****************************************************************************/
  4492.  
  4493.  
  4494. // flags for dwFlags parameter of MCI_OPEN command message
  4495. #define MCI_OVLY_OPEN_WS                0x00010000L
  4496. #define MCI_OVLY_OPEN_PARENT            0x00020000L
  4497.  
  4498. // flags for dwFlags parameter of MCI_STATUS command message
  4499. #define MCI_OVLY_STATUS_HWND            0x00004001L
  4500. #define MCI_OVLY_STATUS_STRETCH         0x00004002L
  4501.  
  4502. // flags for dwFlags parameter of MCI_INFO command message
  4503. #define MCI_OVLY_INFO_TEXT              0x00010000L
  4504.  
  4505. // flags for dwItem field of MCI_GETDEVCAPS_PARMS parameter block
  4506. #define MCI_OVLY_GETDEVCAPS_CAN_STRETCH 0x00004001L
  4507. #define MCI_OVLY_GETDEVCAPS_CAN_FREEZE  0x00004002L
  4508. #define MCI_OVLY_GETDEVCAPS_MAX_WINDOWS 0x00004003L
  4509.  
  4510. // flags for dwFlags parameter of MCI_WINDOW command message
  4511. #define MCI_OVLY_WINDOW_HWND            0x00010000L
  4512. #define MCI_OVLY_WINDOW_STATE           0x00040000L
  4513. #define MCI_OVLY_WINDOW_TEXT            0x00080000L
  4514. #define MCI_OVLY_WINDOW_ENABLE_STRETCH  0x00100000L
  4515. #define MCI_OVLY_WINDOW_DISABLE_STRETCH 0x00200000L
  4516.  
  4517. // flags for hWnd parameter of MCI_OVLY_WINDOW_PARMS parameter block
  4518. #define MCI_OVLY_WINDOW_DEFAULT         0x00000000L
  4519.  
  4520. // flags for dwFlags parameter of MCI_PUT command message
  4521. #define MCI_OVLY_RECT                   0x00010000L
  4522. #define MCI_OVLY_PUT_SOURCE             0x00020000L
  4523. #define MCI_OVLY_PUT_DESTINATION        0x00040000L
  4524. #define MCI_OVLY_PUT_FRAME              0x00080000L
  4525. #define MCI_OVLY_PUT_VIDEO              0x00100000L
  4526.  
  4527. // flags for dwFlags parameter of MCI_WHERE command message
  4528. #define MCI_OVLY_WHERE_SOURCE           0x00020000L
  4529. #define MCI_OVLY_WHERE_DESTINATION      0x00040000L
  4530. #define MCI_OVLY_WHERE_FRAME            0x00080000L
  4531. #define MCI_OVLY_WHERE_VIDEO            0x00100000L
  4532.  
  4533.  
  4534. // parameter block for MCI_OPEN command message
  4535. typedef struct tagMCI_OVLY_OPEN_PARMSA {
  4536.     DWORD   dwCallback;
  4537.     MCIDEVICEID wDeviceID;
  4538.     LPCSTR    lpstrDeviceType;
  4539.     LPCSTR    lpstrElementName;
  4540.     LPCSTR    lpstrAlias;
  4541.     DWORD   dwStyle;
  4542.     HWND    hWndParent;
  4543.  } MCI_OVLY_OPEN_PARMSA;
  4544. // parameter block for MCI_OPEN command message
  4545. typedef struct tagMCI_OVLY_OPEN_PARMSW {
  4546.     DWORD   dwCallback;
  4547.     MCIDEVICEID wDeviceID;
  4548.     LPCWSTR   lpstrDeviceType;
  4549.     LPCWSTR   lpstrElementName;
  4550.     LPCWSTR   lpstrAlias;
  4551.     DWORD   dwStyle;
  4552.     HWND    hWndParent;
  4553.  } MCI_OVLY_OPEN_PARMSW;
  4554. #ifdef UNICODE
  4555. typedef MCI_OVLY_OPEN_PARMSW MCI_OVLY_OPEN_PARMS;
  4556. #else
  4557. typedef MCI_OVLY_OPEN_PARMSA MCI_OVLY_OPEN_PARMS;
  4558. #endif // UNICODE
  4559. typedef MCI_OVLY_OPEN_PARMSA     *PMCI_OVLY_OPEN_PARMSA;
  4560. typedef MCI_OVLY_OPEN_PARMSW     *PMCI_OVLY_OPEN_PARMSW;
  4561. #ifdef UNICODE
  4562. typedef PMCI_OVLY_OPEN_PARMSW PMCI_OVLY_OPEN_PARMS;
  4563. #else
  4564. typedef PMCI_OVLY_OPEN_PARMSA PMCI_OVLY_OPEN_PARMS;
  4565. #endif // UNICODE
  4566. typedef MCI_OVLY_OPEN_PARMSA     *LPMCI_OVLY_OPEN_PARMSA;
  4567. typedef MCI_OVLY_OPEN_PARMSW     *LPMCI_OVLY_OPEN_PARMSW;
  4568. #ifdef UNICODE
  4569. typedef LPMCI_OVLY_OPEN_PARMSW LPMCI_OVLY_OPEN_PARMS;
  4570. #else
  4571. typedef LPMCI_OVLY_OPEN_PARMSA LPMCI_OVLY_OPEN_PARMS;
  4572. #endif // UNICODE
  4573.  
  4574. // parameter block for MCI_WINDOW command message
  4575. typedef struct tagMCI_OVLY_WINDOW_PARMSA {
  4576.     DWORD   dwCallback;
  4577.     HWND    hWnd;
  4578.     UINT    nCmdShow;
  4579.     LPCSTR    lpstrText;
  4580. } MCI_OVLY_WINDOW_PARMSA;
  4581. // parameter block for MCI_WINDOW command message
  4582. typedef struct tagMCI_OVLY_WINDOW_PARMSW {
  4583.     DWORD   dwCallback;
  4584.     HWND    hWnd;
  4585.     UINT    nCmdShow;
  4586.     LPCWSTR   lpstrText;
  4587. } MCI_OVLY_WINDOW_PARMSW;
  4588. #ifdef UNICODE
  4589. typedef MCI_OVLY_WINDOW_PARMSW MCI_OVLY_WINDOW_PARMS;
  4590. #else
  4591. typedef MCI_OVLY_WINDOW_PARMSA MCI_OVLY_WINDOW_PARMS;
  4592. #endif // UNICODE
  4593. typedef MCI_OVLY_WINDOW_PARMSA     * PMCI_OVLY_WINDOW_PARMSA;
  4594. typedef MCI_OVLY_WINDOW_PARMSW     * PMCI_OVLY_WINDOW_PARMSW;
  4595. #ifdef UNICODE
  4596. typedef PMCI_OVLY_WINDOW_PARMSW PMCI_OVLY_WINDOW_PARMS;
  4597. #else
  4598. typedef PMCI_OVLY_WINDOW_PARMSA PMCI_OVLY_WINDOW_PARMS;
  4599. #endif // UNICODE
  4600. typedef MCI_OVLY_WINDOW_PARMSA     * LPMCI_OVLY_WINDOW_PARMSA;
  4601. typedef MCI_OVLY_WINDOW_PARMSW     * LPMCI_OVLY_WINDOW_PARMSW;
  4602. #ifdef UNICODE
  4603. typedef LPMCI_OVLY_WINDOW_PARMSW LPMCI_OVLY_WINDOW_PARMS;
  4604. #else
  4605. typedef LPMCI_OVLY_WINDOW_PARMSA LPMCI_OVLY_WINDOW_PARMS;
  4606. #endif // UNICODE
  4607.  
  4608. // parameter block for MCI_PUT, MCI_UPDATE, and MCI_WHERE command messages
  4609. typedef struct tagMCI_OVLY_RECT_PARMS {
  4610.     DWORD   dwCallback;
  4611. #ifdef MCI_USE_OFFEXT
  4612.     POINT   ptOffset;
  4613.     POINT   ptExtent;
  4614. #else   //ifdef MCI_USE_OFFEXT
  4615.     RECT    rc;
  4616. #endif  //ifdef MCI_USE_OFFEXT
  4617. } MCI_OVLY_RECT_PARMS;
  4618. typedef MCI_OVLY_RECT_PARMS     * PMCI_OVLY_RECT_PARMS;
  4619. typedef MCI_OVLY_RECT_PARMS     * LPMCI_OVLY_RECT_PARMS;
  4620.  
  4621. // parameter block for MCI_SAVE command message
  4622. typedef struct tagMCI_OVLY_SAVE_PARMSA {
  4623.     DWORD   dwCallback;
  4624.     LPCSTR    lpfilename;
  4625.     RECT    rc;
  4626. } MCI_OVLY_SAVE_PARMSA;
  4627. // parameter block for MCI_SAVE command message
  4628. typedef struct tagMCI_OVLY_SAVE_PARMSW {
  4629.     DWORD   dwCallback;
  4630.     LPCWSTR   lpfilename;
  4631.     RECT    rc;
  4632. } MCI_OVLY_SAVE_PARMSW;
  4633. #ifdef UNICODE
  4634. typedef MCI_OVLY_SAVE_PARMSW MCI_OVLY_SAVE_PARMS;
  4635. #else
  4636. typedef MCI_OVLY_SAVE_PARMSA MCI_OVLY_SAVE_PARMS;
  4637. #endif // UNICODE
  4638. typedef MCI_OVLY_SAVE_PARMSA     * PMCI_OVLY_SAVE_PARMSA;
  4639. typedef MCI_OVLY_SAVE_PARMSW     * PMCI_OVLY_SAVE_PARMSW;
  4640. #ifdef UNICODE
  4641. typedef PMCI_OVLY_SAVE_PARMSW PMCI_OVLY_SAVE_PARMS;
  4642. #else
  4643. typedef PMCI_OVLY_SAVE_PARMSA PMCI_OVLY_SAVE_PARMS;
  4644. #endif // UNICODE
  4645. typedef MCI_OVLY_SAVE_PARMSA     * LPMCI_OVLY_SAVE_PARMSA;
  4646. typedef MCI_OVLY_SAVE_PARMSW     * LPMCI_OVLY_SAVE_PARMSW;
  4647. #ifdef UNICODE
  4648. typedef LPMCI_OVLY_SAVE_PARMSW LPMCI_OVLY_SAVE_PARMS;
  4649. #else
  4650. typedef LPMCI_OVLY_SAVE_PARMSA LPMCI_OVLY_SAVE_PARMS;
  4651. #endif // UNICODE
  4652.  
  4653. // parameter block for MCI_LOAD command message
  4654. typedef struct tagMCI_OVLY_LOAD_PARMSA {
  4655.     DWORD   dwCallback;
  4656.     LPCSTR    lpfilename;
  4657.     RECT    rc;
  4658. } MCI_OVLY_LOAD_PARMSA;
  4659. // parameter block for MCI_LOAD command message
  4660. typedef struct tagMCI_OVLY_LOAD_PARMSW {
  4661.     DWORD   dwCallback;
  4662.     LPCWSTR   lpfilename;
  4663.     RECT    rc;
  4664. } MCI_OVLY_LOAD_PARMSW;
  4665. #ifdef UNICODE
  4666. typedef MCI_OVLY_LOAD_PARMSW MCI_OVLY_LOAD_PARMS;
  4667. #else
  4668. typedef MCI_OVLY_LOAD_PARMSA MCI_OVLY_LOAD_PARMS;
  4669. #endif // UNICODE
  4670. typedef MCI_OVLY_LOAD_PARMSA     * PMCI_OVLY_LOAD_PARMSA;
  4671. typedef MCI_OVLY_LOAD_PARMSW     * PMCI_OVLY_LOAD_PARMSW;
  4672. #ifdef UNICODE
  4673. typedef PMCI_OVLY_LOAD_PARMSW PMCI_OVLY_LOAD_PARMS;
  4674. #else
  4675. typedef PMCI_OVLY_LOAD_PARMSA PMCI_OVLY_LOAD_PARMS;
  4676. #endif // UNICODE
  4677. typedef MCI_OVLY_LOAD_PARMSA     * LPMCI_OVLY_LOAD_PARMSA;
  4678. typedef MCI_OVLY_LOAD_PARMSW     * LPMCI_OVLY_LOAD_PARMSW;
  4679. #ifdef UNICODE
  4680. typedef LPMCI_OVLY_LOAD_PARMSW LPMCI_OVLY_LOAD_PARMS;
  4681. #else
  4682. typedef LPMCI_OVLY_LOAD_PARMSA LPMCI_OVLY_LOAD_PARMS;
  4683. #endif // UNICODE
  4684.  
  4685. #endif  //ifndef MMNOMCI
  4686.  
  4687.  
  4688. /****************************************************************************
  4689.  
  4690.                         DISPLAY Driver extensions
  4691.  
  4692. ****************************************************************************/
  4693.  
  4694. #ifndef C1_TRANSPARENT
  4695. #define CAPS1           94              // other caps
  4696. #define C1_TRANSPARENT  0x0001          // new raster cap
  4697. #define NEWTRANSPARENT  3               // use with SetBkMode()
  4698.  
  4699. #define QUERYROPSUPPORT 40              // use to determine ROP support
  4700. #endif  //ifndef C1_TRANSPARENT
  4701.  
  4702. /****************************************************************************
  4703.  
  4704.                         DIB Driver extensions
  4705.  
  4706. ****************************************************************************/
  4707.  
  4708. #define SELECTDIB       41              // DIB.DRV select dib escape
  4709. #define DIBINDEX(n)     MAKELONG((n),0x10FF)
  4710.  
  4711.  
  4712. /****************************************************************************
  4713.  
  4714.                         ScreenSaver support
  4715.  
  4716.     The current application will receive a syscommand of SC_SCREENSAVE just
  4717.     before the screen saver is invoked.  If the app wishes to prevent a
  4718.     screen save, return non-zero value, otherwise call DefWindowProc().
  4719.  
  4720. ****************************************************************************/
  4721.  
  4722. #ifndef SC_SCREENSAVE
  4723.  
  4724. #define SC_SCREENSAVE   0xF140
  4725.  
  4726. #endif  //ifndef SC_SCREENSAVE
  4727.  
  4728.  
  4729. #endif  /* __FLAT__ */
  4730.  
  4731. #ifdef __cplusplus
  4732. }                       /* End of extern "C" { */
  4733. #endif  /* __cplusplus */
  4734.  
  4735. #ifndef RC_INVOKED
  4736. #pragma option -a.      /* Revert to default packing */
  4737. #endif  /* RC_INVOKED */
  4738.  
  4739. #endif  /* __MMSYSTEM_H */
  4740.